diff --git a/.gitignore b/.gitignore index 4d3997ec447..9173b12c328 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ tests/baselines/local/projectOutput/* tests/baselines/reference/testresults.tap tests/services/baselines/prototyping/local/* tests/services/browser/typescriptServices.js +scripts/authors.js scripts/configureNightly.js scripts/processDiagnosticMessages.d.ts scripts/processDiagnosticMessages.js @@ -51,3 +52,5 @@ internal/ **/.vscode !**/.vscode/tasks.json !tests/cases/projects/projectOption/**/node_modules +!tests/cases/projects/NodeModulesSearch/**/* +!tests/baselines/reference/project/nodeModules*/**/* diff --git a/.mailmap b/.mailmap new file mode 100644 index 00000000000..e66f669b8ee --- /dev/null +++ b/.mailmap @@ -0,0 +1,146 @@ + +Alexander # Alexander Kuvaev +AbubakerB # Abubaker Bashir +Adam Freidin Adam Freidin +Adi Dahiya Adi Dahiya +Ahmad Farid ahmad-farid +Alex Eagle +Anders Hejlsberg unknown unknown +Andrew Z Allen +Andy Hanson Andy +Anil Anar +Anton Tolmachev +Arnavion # Arnav Singh +Arthur Ozga Arthur Ozga +Asad Saeeduddin +Schmavery # Avery Morin +Basarat Ali Syed Basarat Syed basarat +Bill Ticehurst Bill Ticehurst +Ben Duffield +Blake Embrey +Bowden Kelly +Brett Mayen +Bryan Forbes +Caitlin Potter +ChrisBubernak unknown # Chris Bubernak +Chuck Jazdzewski +Colby Russell +Colin Snover +Cyrus Najmabadi CyrusNajmabadi unknown +Dan Corder +Dan Quirk Dan Quirk nknown +Daniel Rosenwasser Daniel Rosenwasser Daniel Rosenwasser Daniel Rosenwasser Daniel Rosenwasser +David Li +David Souther +Denis Nedelyaev +Dick van den Brink unknown unknown +Dirk Baeumer Dirk Bäumer # Dirk Bäumer +Dirk Holtwick +Doug Ilijev +Erik Edrosa +Ethan Rubio +Evan Martin +Evan Sebastian +Eyas # Eyas Sharaiha +falsandtru # @falsandtru +Frank Wallis +František Žiačik František Žiačik +Gabriel Isenberg +Gilad Peleg +Graeme Wicksted +Guillaume Salles +Guy Bedford guybedford +Harald Niesche +Iain Monro +Ingvar Stepanyan +impinball # Isiah Meadows +Ivo Gabe de Wolff +James Whitney +Jason Freeman Jason Freeman +Jason Killian +Jason Ramsay jramsay +Jed Mao +Jeffrey Morlan +tobisek # Jiri Tobisek +Johannes Rieken +John Vilk +jbondc jbondc jbondc # Jonathan Bond-Caron +Jonathan Park +Jonathan Turner Jonathan Turner +Jonathan Toland +Jesse Schalken +Josh Kalderimis +Josh Soref +Juan Luis Boya García +Julian Williams +Herrington Darkholme +Kagami Sascha Rosylight SaschaNaz +Kanchalai Tanglertsampan Yui +Kanchalai Tanglertsampan Yui T +Kanchalai Tanglertsampan Yui +Kanchalai Tanglertsampan Yui +Kanchalai Tanglertsampan yui T +Keith Mashinter kmashint +Ken Howard +kimamula # Kenji Imamula +Kyle Kelley +Lorant Pinter +Lucien Greathouse +Martin Vseticka Martin Všeticka MartyIX +vvakame # Masahiro Wakame +Matt McCutchen +Max Deepfield +Micah Zoltu +Mohamed Hegazy +Nathan Shively-Sanders +Nathan Yee +Nima Zahedi +Noj Vek +mihailik # Oleg Mihailik +Oleksandr Chekhovskyi +Paul van Brenk Paul van Brenk unknown unknown unknown +Oskar Segersva¨rd +pcan # Piero Cangianiello +pcbro <2bux89+dk3zspjmuh16o@sharklasers.com> # @pcbro +Pedro Maltez # Pedro Maltez +piloopin # @piloopin +milkisevil # Philip Bulley +progre # @progre +Prayag Verma +Punya Biswal +Rado Kirov +Ron Buckton Ron Buckton +Richard Knoll Richard Knoll +Rowan Wyborn +Ryan Cavanaugh Ryan Cavanaugh Ryan Cavanaugh +Ryohei Ikegami +Sarangan Rajamanickam +Sébastien Arod +Sheetal Nandi +Shengping Zhong +shyyko.serhiy@gmail.com # Shyyko Serhiy +Simon Hürlimann +Solal Pirelli +Stan Thomas +Stanislav Sysoev +Steve Lucco steveluc +Tarik # Tarik Ozket +Tetsuharu OHZEKI # Tetsuharu Ohzeki +Tien Nguyen tien unknown #Tien Hoanhtien +Tim Perry +Tim Viiding-Spader +Tingan Ho +togru # togru +Tomas Grubliauskas +ToddThomson # Todd Thomson +TruongSinh Tran-Nguyen +vilicvane # Vilic Vane +Vladimir Matveev vladima v2m +Wesley Wigham Wesley Wigham +York Yao york yao yaoyao +Yuichi Nukiyama YuichiNukiyama +Zev Spitz +Zhengbo Li zhengbli Zhengbo Li Zhengbo Li tinza123 unknown Zhengbo Li +zhongsp # Patrick Zhong +T18970237136 # @T18970237136 +JBerger \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 9cf1c9d8f3f..f3c59a61717 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -7,7 +7,7 @@ // ${cwd}: the current working directory of the spawned process { "version": "0.1.0", - "command": "jake", + "command": "gulp", "isShellCommand": true, "showOutput": "silent", "tasks": [ @@ -18,25 +18,6 @@ "problemMatcher": [ "$tsc" ] - }, - { - "taskName": "lint-server", - "args": [], - "problemMatcher": { - "owner": "typescript", - "fileLocation": ["relative", "${workspaceRoot}"], - "pattern": { - "regexp": "^(warning|error)\\s+([^(]+)\\s+\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(.*)$", - "severity": 1, - "file": 2, - "location": 3, - "message": 4 - }, - "watchedTaskBeginsRegExp": "^\\*\\*\\*Lint failure\\*\\*\\*$", - "watchedTaskEndsRegExp": "^\\*\\*\\* Total \\d+ failures\\.$" - }, - "showOutput": "always", - "isWatching": true } ] } \ No newline at end of file diff --git a/AUTHORS.md b/AUTHORS.md index 0501514d758..08039127d9d 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -1,105 +1,141 @@ TypeScript is authored by: - +* Abubaker Bashir * Adam Freidin -* Ahmad Farid -* Akshar Patel +* Adi Dahiya +* Ahmad Farid +* Alex Eagle +* Alexander Kuvaev * Anders Hejlsberg +* Andrew Z Allen +* Andy Hanson +* Anil Anar +* Anton Tolmachev * Arnav Singh * Arthur Ozga * Asad Saeeduddin -* Basarat Ali Syed +* Avery Morin +* Basarat Ali Syed * Ben Duffield -* Bill Ticehurst +* Bill Ticehurst +* Blake Embrey +* Bowden Kelly * Brett Mayen -* Bryan Forbes -* Caitlin Potter +* Bryan Forbes +* Caitlin Potter * Chris Bubernak -* Colby Russell +* Chuck Jazdzewski +* Colby Russell * Colin Snover * Cyrus Najmabadi * Dan Corder -* Dan Quirk +* Dan Quirk * Daniel Rosenwasser -* @dashaus -* David Li +* David Li +* David Souther * Denis Nedelyaev * Dick van den Brink * Dirk Bäumer * Dirk Holtwick +* Doug Ilijev +* Erik Edrosa +* Ethan Rubio +* Evan Martin +* Evan Sebastian * Eyas Sharaiha * @falsandtru -* Frank Wallis +* Frank Wallis +* František Žiačik * Gabriel Isenberg -* Gilad Peleg +* Gilad Peleg * Graeme Wicksted -* Guillaume Salles +* Guillaume Salles * Guy Bedford * Harald Niesche +* Herrington Darkholme * Iain Monro * Ingvar Stepanyan -* Ivo Gabe de Wolff -* James Whitney +* Isiah Meadows +* Ivo Gabe de Wolff +* James Whitney * Jason Freeman * Jason Killian -* Jason Ramsay +* Jason Ramsay +* JBerger * Jed Mao * Jeffrey Morlan -* Johannes Rieken +* Jesse Schalken +* Jiri Tobisek +* Johannes Rieken * John Vilk * Jonathan Bond-Caron * Jonathan Park +* Jonathan Toland * Jonathan Turner -* Jonathon Smith * Josh Kalderimis +* Josh Soref +* Juan Luis Boya García * Julian Williams * Kagami Sascha Rosylight +* Kanchalai Tanglertsampan * Keith Mashinter * Ken Howard * Kenji Imamula -* Lorant Pinter +* Kyle Kelley +* Lorant Pinter * Lucien Greathouse -* Martin Všetička +* Martin Vseticka * Masahiro Wakame -* Mattias Buelens +* Matt McCutchen * Max Deepfield -* Micah Zoltu -* Mohamed Hegazy +* Micah Zoltu +* Mohamed Hegazy * Nathan Shively-Sanders * Nathan Yee +* Nima Zahedi +* Noj Vek * Oleg Mihailik -* Oleksandr Chekhovskyi -* Paul van Brenk +* Oleksandr Chekhovskyi +* Oskar Segersva¨rd +* Patrick Zhong +* Paul van Brenk * @pcbro -* Pedro Maltez +* Pedro Maltez * Philip Bulley -* piloopin +* Piero Cangianiello +* @piloopin +* Prayag Verma * @progre * Punya Biswal -* Richard Sentino -* Ron Buckton +* Rado Kirov +* Richard Knoll +* Ron Buckton * Rowan Wyborn -* Ryan Cavanaugh +* Ryan Cavanaugh * Ryohei Ikegami -* Sébastien Arod +* Sarangan Rajamanickam * Sheetal Nandi * Shengping Zhong * Shyyko Serhiy * Simon Hürlimann * Solal Pirelli * Stan Thomas +* Stanislav Sysoev * Steve Lucco -* Thomas Loubiou +* Sébastien Arod +* @T18970237136 +* Tarik Ozket * Tien Hoanhtien * Tim Perry +* Tim Viiding-Spader * Tingan Ho +* Todd Thomson * togru * Tomas Grubliauskas * TruongSinh Tran-Nguyen -* Viliv Vane +* Vilic Vane * Vladimir Matveev * Wesley Wigham * York Yao -* Yui Tanglertsampan * Yuichi Nukiyama -* Zev Spitz -* Zhengbo Li +* Zev Spitz +* Zhengbo Li \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1c242022979..5cde901a576 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,6 +40,10 @@ In general, things we find useful when reviewing suggestions are: # Instructions for Contributing Code +## Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + ## Contributing bug fixes TypeScript is currently accepting contributions in the form of bug fixes. A bug must have an issue tracking it in the issue tracker that has been approved ("Milestone == Community") by the TypeScript team. Your pull request should include a link to the bug that you are fixing. If you've submitted a PR for a bug, please post a comment in the bug to avoid duplication of effort. diff --git a/Gulpfile.ts b/Gulpfile.ts new file mode 100644 index 00000000000..6f63fc23587 --- /dev/null +++ b/Gulpfile.ts @@ -0,0 +1,1045 @@ +/// +import * as cp from "child_process"; +import * as path from "path"; +import * as fs from "fs"; +import originalGulp = require("gulp"); +import helpMaker = require("gulp-help"); +import runSequence = require("run-sequence"); +import concat = require("gulp-concat"); +import clone = require("gulp-clone"); +import newer = require("gulp-newer"); +import tsc = require("gulp-typescript"); +declare module "gulp-typescript" { + interface Settings { + stripInternal?: boolean; + newLine?: string; + } + interface CompileStream extends NodeJS.ReadWriteStream {} // Either gulp or gulp-typescript has some odd typings which don't reflect reality, making this required +} +import * as insert from "gulp-insert"; +import * as sourcemaps from "gulp-sourcemaps"; +import Q = require("q"); +declare global { + // `del` further depends on `Promise` (and is also not included), so we just, patch the global scope's Promise to Q's (which we already include in our deps because gulp depends on it) + type Promise = Q.Promise; +} +import del = require("del"); +import mkdirP = require("mkdirp"); +import minimist = require("minimist"); +import browserify = require("browserify"); +import through2 = require("through2"); +import merge2 = require("merge2"); +import intoStream = require("into-stream"); +import * as os from "os"; +import Linter = require("tslint"); +const gulp = helpMaker(originalGulp); +const mochaParallel = require("./scripts/mocha-parallel.js"); +const {runTestsInParallel} = mochaParallel; + +const cmdLineOptions = minimist(process.argv.slice(2), { + boolean: ["debug", "light", "colors", "lint", "soft"], + string: ["browser", "tests", "host", "reporter"], + alias: { + d: "debug", + t: "tests", + test: "tests", + r: "reporter", + color: "colors", + f: "files", + file: "files" + }, + default: { + soft: false, + colors: process.env.colors || process.env.color || true, + debug: process.env.debug || process.env.d, + host: process.env.TYPESCRIPT_HOST || process.env.host || "node", + browser: process.env.browser || process.env.b || "IE", + tests: process.env.test || process.env.tests || process.env.t, + light: process.env.light || false, + port: process.env.port || process.env.p || "8888", + reporter: process.env.reporter || process.env.r, + lint: process.env.lint || true, + files: process.env.f || process.env.file || process.env.files || "", + } +}); + +function exec(cmd: string, args: string[], complete: () => void = (() => {}), error: (e: any, status: number) => void = (() => {})) { + console.log(`${cmd} ${args.join(" ")}`); + // TODO (weswig): Update child_process types to add windowsVerbatimArguments to the type definition + const subshellFlag = isWin ? "/c" : "-c"; + const command = isWin ? [possiblyQuote(cmd), ...args] : [`${cmd} ${args.join(" ")}`]; + const ex = cp.spawn(isWin ? "cmd" : "/bin/sh", [subshellFlag, ...command], { stdio: "inherit", windowsVerbatimArguments: true } as any); + ex.on("exit", (code) => code === 0 ? complete() : error(/*e*/ undefined, code)); + ex.on("error", error); +} + +function possiblyQuote(cmd: string) { + return cmd.indexOf(" ") >= 0 ? `"${cmd}"` : cmd; +} + +let useDebugMode = true; +let host = cmdLineOptions["host"]; + +// Constants +const compilerDirectory = "src/compiler/"; +const servicesDirectory = "src/services/"; +const serverDirectory = "src/server/"; +const harnessDirectory = "src/harness/"; +const libraryDirectory = "src/lib/"; +const scriptsDirectory = "scripts/"; +const unittestsDirectory = "tests/cases/unittests/"; +const docDirectory = "doc/"; + +const builtDirectory = "built/"; +const builtLocalDirectory = "built/local/"; +const LKGDirectory = "lib/"; + +const copyright = "CopyrightNotice.txt"; + +const compilerFilename = "tsc.js"; +const LKGCompiler = path.join(LKGDirectory, compilerFilename); +const builtLocalCompiler = path.join(builtLocalDirectory, compilerFilename); + +const nodeModulesPathPrefix = path.resolve("./node_modules/.bin/"); +const isWin = /^win/.test(process.platform); +const mocha = path.join(nodeModulesPathPrefix, "mocha") + (isWin ? ".cmd" : ""); + +const compilerSources = require("./src/compiler/tsconfig.json").files.map((file) => path.join(compilerDirectory, file)); + +const servicesSources = require("./src/services/tsconfig.json").files.map((file) => path.join(servicesDirectory, file)); + +const serverCoreSources = require("./src/server/tsconfig.json").files.map((file) => path.join(serverDirectory, file)); + +const languageServiceLibrarySources = [ + "editorServices.ts", + "protocol.d.ts", + "session.ts" +].map(function (f) { + return path.join(serverDirectory, f); +}).concat(servicesSources); + +const harnessCoreSources = [ + "harness.ts", + "sourceMapRecorder.ts", + "harnessLanguageService.ts", + "fourslash.ts", + "runnerbase.ts", + "compilerRunner.ts", + "typeWriter.ts", + "fourslashRunner.ts", + "projectsRunner.ts", + "loggedIO.ts", + "rwcRunner.ts", + "test262Runner.ts", + "runner.ts" +].map(function (f) { + return path.join(harnessDirectory, f); +}); + +const harnessSources = harnessCoreSources.concat([ + "incrementalParser.ts", + "jsDocParsing.ts", + "services/colorization.ts", + "services/documentRegistry.ts", + "services/preProcessFile.ts", + "services/patternMatcher.ts", + "session.ts", + "versionCache.ts", + "convertToBase64.ts", + "transpile.ts", + "reuseProgramStructure.ts", + "cachingInServerLSHost.ts", + "moduleResolution.ts", + "tsconfigParsing.ts", + "commandLineParsing.ts", + "convertCompilerOptionsFromJson.ts", + "convertTypingOptionsFromJson.ts", + "tsserverProjectSystem.ts", + "matchFiles.ts", +].map(function (f) { + return path.join(unittestsDirectory, f); +})).concat([ + "protocol.d.ts", + "session.ts", + "client.ts", + "editorServices.ts" +].map(function (f) { + return path.join(serverDirectory, f); +})); + +const es2015LibrarySources = [ + "es2015.core.d.ts", + "es2015.collection.d.ts", + "es2015.generator.d.ts", + "es2015.iterable.d.ts", + "es2015.promise.d.ts", + "es2015.proxy.d.ts", + "es2015.reflect.d.ts", + "es2015.symbol.d.ts", + "es2015.symbol.wellknown.d.ts" +]; + +const es2015LibrarySourceMap = es2015LibrarySources.map(function(source) { + return { target: "lib." + source, sources: ["header.d.ts", source] }; +}); + +const es2016LibrarySource = [ "es2016.array.include.d.ts" ]; + +const es2016LibrarySourceMap = es2016LibrarySource.map(function (source) { + return { target: "lib." + source, sources: ["header.d.ts", source] }; +}); + +const es2017LibrarySource = [ + "es2017.object.d.ts", + "es2017.sharedmemory.d.ts" +]; + +const es2017LibrarySourceMap = es2017LibrarySource.map(function (source) { + return { target: "lib." + source, sources: ["header.d.ts", source] }; +}); + +const hostsLibrarySources = ["dom.generated.d.ts", "webworker.importscripts.d.ts", "scripthost.d.ts"]; + +const 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"] }, + + // 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"] }, + { target: "lib.es2016.d.ts", sources: ["header.d.ts", "es2016.d.ts"] }, + { 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") } +].concat(es2015LibrarySourceMap, es2016LibrarySourceMap, es2017LibrarySourceMap); + +const libraryTargets = librarySourceMap.map(function (f) { + return path.join(builtLocalDirectory, f.target); +}); + +for (const i in libraryTargets) { + const entry = librarySourceMap[i]; + const target = libraryTargets[i]; + const sources = [copyright].concat(entry.sources.map(function (s) { + return path.join(libraryDirectory, s); + })); + gulp.task(target, false, [], function() { + return gulp.src(sources) + .pipe(newer(target)) + .pipe(concat(target, { newLine: "" })) + .pipe(gulp.dest(".")); + }); +} + +const configureNightlyJs = path.join(scriptsDirectory, "configureNightly.js"); +const configureNightlyTs = path.join(scriptsDirectory, "configureNightly.ts"); +const packageJson = "package.json"; +const programTs = path.join(compilerDirectory, "program.ts"); + +function needsUpdate(source: string | string[], dest: string | string[]): boolean { + if (typeof source === "string" && typeof dest === "string") { + if (fs.existsSync(dest)) { + const {mtime: outTime} = fs.statSync(dest); + const {mtime: inTime} = fs.statSync(source); + if (+inTime <= +outTime) { + return false; + } + } + } + else if (typeof source === "string" && typeof dest !== "string") { + const {mtime: inTime} = fs.statSync(source); + for (const filepath of dest) { + if (fs.existsSync(filepath)) { + const {mtime: outTime} = fs.statSync(filepath); + if (+inTime > +outTime) { + return true; + } + } + else { + return true; + } + } + return false; + } + else if (typeof source !== "string" && typeof dest === "string") { + if (fs.existsSync(dest)) { + const {mtime: outTime} = fs.statSync(dest); + for (const filepath of source) { + if (fs.existsSync(filepath)) { + const {mtime: inTime} = fs.statSync(filepath); + if (+inTime > +outTime) { + return true; + } + } + else { + return true; + } + } + return false; + } + } + else if (typeof source !== "string" && typeof dest !== "string") { + for (let i = 0; i < source.length; i++) { + if (!dest[i]) { + continue; + } + if (fs.existsSync(dest[i])) { + const {mtime: outTime} = fs.statSync(dest[i]); + const {mtime: inTime} = fs.statSync(source[i]); + if (+inTime > +outTime) { + return true; + } + } + else { + return true; + } + } + return false; + } + return true; +} + +function getCompilerSettings(base: tsc.Settings, useBuiltCompiler?: boolean): tsc.Settings { + const copy: tsc.Settings = {}; + for (const key in base) { + copy[key] = base[key]; + } + if (!useDebugMode) { + if (copy.removeComments === undefined) copy.removeComments = true; + copy.newLine = "lf"; + } + else { + copy.preserveConstEnums = true; + } + if (useBuiltCompiler === true) { + copy.typescript = require("./built/local/typescript.js"); + } + else if (useBuiltCompiler === false) { + copy.typescript = require("./lib/typescript.js"); + } + return copy; +} + +gulp.task(configureNightlyJs, false, [], () => { + const settings: tsc.Settings = { + declaration: false, + removeComments: true, + noResolve: false, + stripInternal: false, + }; + return gulp.src(configureNightlyTs) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(path.dirname(configureNightlyJs))) + .pipe(gulp.dest(path.dirname(configureNightlyJs))); +}); + + +// Nightly management tasks +gulp.task("configure-nightly", "Runs scripts/configureNightly.ts to prepare a build for nightly publishing", [configureNightlyJs], (done) => { + exec(host, [configureNightlyJs, packageJson, programTs], done, done); +}); +gulp.task("publish-nightly", "Runs `npm publish --tag next` to create a new nightly build on npm", ["LKG"], () => { + return runSequence("clean", "useDebugMode", "runtests", (done) => { + exec("npm", ["publish", "--tag", "next"], done, done); + }); +}); + +const importDefinitelyTypedTestsDirectory = path.join(scriptsDirectory, "importDefinitelyTypedTests"); +const importDefinitelyTypedTestsJs = path.join(importDefinitelyTypedTestsDirectory, "importDefinitelyTypedTests.js"); +const importDefinitelyTypedTestsTs = path.join(importDefinitelyTypedTestsDirectory, "importDefinitelyTypedTests.ts"); + +gulp.task(importDefinitelyTypedTestsJs, false, [], () => { + const settings: tsc.Settings = getCompilerSettings({ + declaration: false, + removeComments: true, + noResolve: false, + stripInternal: false, + outFile: importDefinitelyTypedTestsJs + }, /*useBuiltCompiler*/ false); + return gulp.src(importDefinitelyTypedTestsTs) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(".")); +}); + +gulp.task("importDefinitelyTypedTests", "Runs scripts/importDefinitelyTypedTests/importDefinitelyTypedTests.ts to copy DT's tests to the TS-internal RWC tests", [importDefinitelyTypedTestsJs], (done) => { + exec(host, [importDefinitelyTypedTestsJs, "./", "../DefinitelyTyped"], done, done); +}); + +gulp.task("lib", "Builds the library targets", libraryTargets); + + +// Generate diagnostics +const processDiagnosticMessagesJs = path.join(scriptsDirectory, "processDiagnosticMessages.js"); +const processDiagnosticMessagesTs = path.join(scriptsDirectory, "processDiagnosticMessages.ts"); +const diagnosticMessagesJson = path.join(compilerDirectory, "diagnosticMessages.json"); +const diagnosticInfoMapTs = path.join(compilerDirectory, "diagnosticInformationMap.generated.ts"); +const generatedDiagnosticMessagesJSON = path.join(compilerDirectory, "diagnosticMessages.generated.json"); +const builtGeneratedDiagnosticMessagesJSON = path.join(builtLocalDirectory, "diagnosticMessages.generated.json"); + +// processDiagnosticMessages script +gulp.task(processDiagnosticMessagesJs, false, [], () => { + const settings: tsc.Settings = getCompilerSettings({ + declaration: false, + removeComments: true, + noResolve: false, + stripInternal: false, + outFile: processDiagnosticMessagesJs + }, /*useBuiltCompiler*/ false); + return gulp.src(processDiagnosticMessagesTs) + .pipe(newer(processDiagnosticMessagesJs)) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(".")); +}); + +// The generated diagnostics map; built for the compiler and for the "generate-diagnostics" task +gulp.task(diagnosticInfoMapTs, [processDiagnosticMessagesJs], (done) => { + if (needsUpdate(diagnosticMessagesJson, [generatedDiagnosticMessagesJSON, diagnosticInfoMapTs])) { + exec(host, [processDiagnosticMessagesJs, diagnosticMessagesJson], done, done); + } + else { + done(); + } +}); + +gulp.task(builtGeneratedDiagnosticMessagesJSON, [diagnosticInfoMapTs], (done) => { + if (fs.existsSync(builtLocalDirectory) && needsUpdate(generatedDiagnosticMessagesJSON, builtGeneratedDiagnosticMessagesJSON)) { + fs.writeFileSync(builtGeneratedDiagnosticMessagesJSON, fs.readFileSync(generatedDiagnosticMessagesJSON)); + } + done(); +}); + +gulp.task("generate-diagnostics", "Generates a diagnostic file in TypeScript based on an input JSON file", [diagnosticInfoMapTs]); + + +const servicesFile = path.join(builtLocalDirectory, "typescriptServices.js"); +const standaloneDefinitionsFile = path.join(builtLocalDirectory, "typescriptServices.d.ts"); +const nodePackageFile = path.join(builtLocalDirectory, "typescript.js"); +const nodeDefinitionsFile = path.join(builtLocalDirectory, "typescript.d.ts"); +const nodeStandaloneDefinitionsFile = path.join(builtLocalDirectory, "typescript_standalone.d.ts"); + +let copyrightContent: string; +function prependCopyright(outputCopyright: boolean = !useDebugMode) { + return insert.prepend(outputCopyright ? (copyrightContent || (copyrightContent = fs.readFileSync(copyright).toString())) : ""); +} + +gulp.task(builtLocalCompiler, false, [servicesFile], () => { + const localCompilerProject = tsc.createProject("src/compiler/tsconfig.json", getCompilerSettings({}, /*useBuiltCompiler*/true)); + return localCompilerProject.src() + .pipe(newer(builtLocalCompiler)) + .pipe(sourcemaps.init()) + .pipe(tsc(localCompilerProject)) + .pipe(prependCopyright()) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(builtLocalDirectory)); +}); + +gulp.task(servicesFile, false, ["lib", "generate-diagnostics"], () => { + const servicesProject = tsc.createProject("src/services/tsconfig.json", getCompilerSettings({ removeComments: false }, /*useBuiltCompiler*/false)); + const {js, dts} = servicesProject.src() + .pipe(newer(servicesFile)) + .pipe(sourcemaps.init()) + .pipe(tsc(servicesProject)); + const completedJs = js.pipe(prependCopyright()) + .pipe(sourcemaps.write(".")); + const completedDts = dts.pipe(prependCopyright(/*outputCopyright*/true)) + .pipe(insert.transform((contents, file) => { + file.path = standaloneDefinitionsFile; + return contents.replace(/^(\s*)(export )?const enum (\S+) {(\s*)$/gm, "$1$2enum $3 {$4"); + })); + return merge2([ + completedJs, + completedJs.pipe(clone()) + .pipe(insert.transform((content, file) => (file.path = nodePackageFile, content))), + completedDts, + completedDts.pipe(clone()) + .pipe(insert.transform((content, file) => { + file.path = nodeDefinitionsFile; + return content + "\r\nexport = ts;"; + })) + .pipe(gulp.dest(builtLocalDirectory)), + completedDts.pipe(clone()) + .pipe(insert.transform((content, file) => { + file.path = nodeStandaloneDefinitionsFile; + return content.replace(/declare (namespace|module) ts/g, 'declare module "typescript"'); + })) + ]).pipe(gulp.dest(builtLocalDirectory)); +}); + +const serverFile = path.join(builtLocalDirectory, "tsserver.js"); + +gulp.task(serverFile, false, [servicesFile], () => { + const serverProject = tsc.createProject("src/server/tsconfig.json", getCompilerSettings({}, /*useBuiltCompiler*/true)); + return serverProject.src() + .pipe(newer(serverFile)) + .pipe(sourcemaps.init()) + .pipe(tsc(serverProject)) + .pipe(prependCopyright()) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(builtLocalDirectory)); +}); + +const tsserverLibraryFile = path.join(builtLocalDirectory, "tsserverlibrary.js"); +const tsserverLibraryDefinitionFile = path.join(builtLocalDirectory, "tsserverlibrary.d.ts"); + +gulp.task(tsserverLibraryFile, false, [servicesFile], (done) => { + const settings: tsc.Settings = getCompilerSettings({ + declaration: true, + outFile: tsserverLibraryFile + }, /*useBuiltCompiler*/ true); + const {js, dts}: {js: NodeJS.ReadableStream, dts: NodeJS.ReadableStream} = gulp.src(languageServiceLibrarySources) + .pipe(sourcemaps.init()) + .pipe(newer(tsserverLibraryFile)) + .pipe(tsc(settings)); + + return merge2([ + js.pipe(prependCopyright()) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(".")), + dts.pipe(prependCopyright()) + .pipe(gulp.dest(".")) + ]); +}); + +gulp.task("lssl", "Builds language service server library", [tsserverLibraryFile]); +gulp.task("local", "Builds the full compiler and services", [builtLocalCompiler, servicesFile, serverFile, builtGeneratedDiagnosticMessagesJSON]); +gulp.task("tsc", "Builds only the compiler", [builtLocalCompiler]); + + +// Generate Markdown spec +const word2mdJs = path.join(scriptsDirectory, "word2md.js"); +const word2mdTs = path.join(scriptsDirectory, "word2md.ts"); +const specWord = path.join(docDirectory, "TypeScript Language Specification.docx"); +const specMd = path.join(docDirectory, "spec.md"); + +gulp.task(word2mdJs, false, [], () => { + const settings: tsc.Settings = getCompilerSettings({ + outFile: word2mdJs + }, /*useBuiltCompiler*/ false); + return gulp.src(word2mdTs) + .pipe(newer(word2mdJs)) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(".")); +}); + +gulp.task(specMd, false, [word2mdJs], (done) => { + const specWordFullPath = path.resolve(specWord); + const specMDFullPath = path.resolve(specMd); + const cmd = "cscript //nologo " + word2mdJs + " \"" + specWordFullPath + "\" " + "\"" + specMDFullPath + "\""; + console.log(cmd); + cp.exec(cmd, function () { + done(); + }); +}); + +gulp.task("generate-spec", "Generates a Markdown version of the Language Specification", [specMd]); + +gulp.task("clean", "Cleans the compiler output, declare files, and tests", [], () => { + return del([builtDirectory]); +}); + +gulp.task("useDebugMode", false, [], (done) => { useDebugMode = true; done(); }); +gulp.task("dontUseDebugMode", false, [], (done) => { useDebugMode = false; done(); }); + +gulp.task("VerifyLKG", false, [], () => { + const expectedFiles = [builtLocalCompiler, servicesFile, serverFile, nodePackageFile, nodeDefinitionsFile, standaloneDefinitionsFile, tsserverLibraryFile, tsserverLibraryDefinitionFile].concat(libraryTargets); + const missingFiles = expectedFiles.filter(function (f) { + return !fs.existsSync(f); + }); + if (missingFiles.length > 0) { + throw new Error("Cannot replace the LKG unless all built targets are present in directory " + builtLocalDirectory + + ". The following files are missing:\n" + missingFiles.join("\n")); + } + // Copy all the targets into the LKG directory + return gulp.src(expectedFiles).pipe(gulp.dest(LKGDirectory)); +}); + +gulp.task("LKGInternal", false, ["lib", "local", "lssl"]); + +gulp.task("LKG", "Makes a new LKG out of the built js files", ["clean", "dontUseDebugMode"], () => { + return runSequence("LKGInternal", "VerifyLKG"); +}); + + +// Task to build the tests infrastructure using the built compiler +const run = path.join(builtLocalDirectory, "run.js"); +gulp.task(run, false, [servicesFile], () => { + const settings: tsc.Settings = getCompilerSettings({ + outFile: run + }, /*useBuiltCompiler*/ true); + return gulp.src(harnessSources) + .pipe(newer(run)) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(".", { includeContent: false, sourceRoot: "../../" })) + .pipe(gulp.dest(".")); +}); + +const internalTests = "internal/"; + +const localBaseline = "tests/baselines/local/"; +const refBaseline = "tests/baselines/reference/"; + +const localRwcBaseline = path.join(internalTests, "baselines/rwc/local"); +const refRwcBaseline = path.join(internalTests, "baselines/rwc/reference"); + +const localTest262Baseline = path.join(internalTests, "baselines/test262/local"); +const refTest262Baseline = path.join(internalTests, "baselines/test262/reference"); + + +gulp.task("tests", "Builds the test infrastructure using the built compiler", [run]); +gulp.task("tests-debug", "Builds the test sources and automation in debug mode", () => { + return runSequence("useDebugMode", "tests"); +}); + +function deleteTemporaryProjectOutput() { + return del(path.join(localBaseline, "projectOutput/")); +} + +let savedNodeEnv: string; +function setNodeEnvToDevelopment() { + savedNodeEnv = process.env.NODE_ENV; + process.env.NODE_ENV = "development"; +} + +function restoreSavedNodeEnv() { + process.env.NODE_ENV = savedNodeEnv; +} + +let testTimeout = 20000; +function runConsoleTests(defaultReporter: string, runInParallel: boolean, done: (e?: any) => void) { + const lintFlag = cmdLineOptions["lint"]; + cleanTestDirs((err) => { + if (err) { console.error(err); failWithStatus(err, 1); } + const debug = cmdLineOptions["debug"]; + const tests = cmdLineOptions["tests"]; + const light = cmdLineOptions["light"]; + const testConfigFile = "test.config"; + if (fs.existsSync(testConfigFile)) { + fs.unlinkSync(testConfigFile); + } + let workerCount, taskConfigsFolder; + if (runInParallel) { + // generate name to store task configuration files + const prefix = os.tmpdir() + "/ts-tests"; + let i = 1; + do { + taskConfigsFolder = prefix + i; + i++; + } while (fs.existsSync(taskConfigsFolder)); + fs.mkdirSync(taskConfigsFolder); + + workerCount = process.env.workerCount || os.cpus().length; + } + + if (tests || light || taskConfigsFolder) { + writeTestConfigFile(tests, light, taskConfigsFolder, workerCount); + } + + if (tests && tests.toLocaleLowerCase() === "rwc") { + testTimeout = 400000; + } + + const colors = cmdLineOptions["colors"]; + const reporter = cmdLineOptions["reporter"] || defaultReporter; + + // 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 + if (!runInParallel) { + const args = []; + if (debug) { + args.push("--debug-brk"); + } + args.push("-R", reporter); + if (tests) { + args.push("-g", `"${tests}"`); + } + if (colors) { + args.push("--colors"); + } + else { + args.push("--no-colors"); + } + args.push("-t", testTimeout); + args.push(run); + setNodeEnvToDevelopment(); + exec(mocha, args, lintThenFinish, function(e, status) { + finish(e, status); + }); + + } + else { + // run task to load all tests and partition them between workers + const args = []; + args.push("-R", "min"); + if (colors) { + args.push("--colors"); + } + else { + args.push("--no-colors"); + } + args.push(run); + setNodeEnvToDevelopment(); + runTestsInParallel(taskConfigsFolder, run, { testTimeout: testTimeout, noColors: colors === " --no-colors " }, function (err) { + // last worker clean everything and runs linter in case if there were no errors + del(taskConfigsFolder).then(() => { + if (!err) { + lintThenFinish(); + } + else { + finish(err); + } + }); + }); + } + }); + + function failWithStatus(err?: any, status?: number) { + if (err) { + console.log(err); + } + done(err || status); + process.exit(status); + } + + function lintThenFinish() { + if (lintFlag) { + runSequence("lint", finish); + } + else { + finish(); + } + } + + function finish(error?: any, errorStatus?: number) { + restoreSavedNodeEnv(); + deleteTemporaryProjectOutput().then(() => { + if (error !== undefined || errorStatus !== undefined) { + failWithStatus(error, errorStatus); + } + else { + done(); + } + }); + } +} + +gulp.task("runtests-parallel", "Runs all the tests in parallel using the built run.js file. Optional arguments are: --t[ests]=category1|category2|... --d[ebug]=true.", ["build-rules", "tests"], (done) => { + runConsoleTests("min", /*runInParallel*/ true, done); +}); +gulp.task("runtests", + "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.", + ["build-rules", "tests"], + (done) => { + runConsoleTests("mocha-fivemat-progress-reporter", /*runInParallel*/ false, done); +}); + +const nodeServerOutFile = "tests/webTestServer.js"; +const nodeServerInFile = "tests/webTestServer.ts"; +gulp.task(nodeServerOutFile, false, [servicesFile], () => { + const settings: tsc.Settings = getCompilerSettings({ module: "commonjs" }, /*useBuiltCompiler*/ true); + return gulp.src(nodeServerInFile) + .pipe(newer(nodeServerOutFile)) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(path.dirname(nodeServerOutFile))); +}); + +gulp.task("browserify", "Runs browserify on run.js to produce a file suitable for running tests in the browser", [servicesFile], (done) => { + const settings: tsc.Settings = getCompilerSettings({ + outFile: "built/local/bundle.js" + }, /*useBuiltCompiler*/ true); + return gulp.src(harnessSources) + .pipe(newer("built/local/bundle.js")) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(through2.obj((file, enc, next) => { + browserify(intoStream(file.contents)) + .bundle((err, res) => { + // assumes file.contents is a Buffer + file.contents = res; + next(undefined, file); + }); + })) + .pipe(sourcemaps.write(".", { includeContent: false, sourceRoot: "../../" })) + .pipe(gulp.dest(".")); +}); + + +function cleanTestDirs(done: (e?: any) => void) { + // Clean the local baselines & Rwc baselines directories + del([ + localBaseline, + localRwcBaseline, + ]).then(() => { + mkdirP(localRwcBaseline, (err) => { + if (err) done(err); + mkdirP(localTest262Baseline, () => { + if (err) done(err); + mkdirP(localBaseline, (err) => done(err)); + }); + }); + }); +} + +// used to pass data from jake command line directly to run.js +function writeTestConfigFile(tests: string, light: boolean, taskConfigsFolder?: string, workerCount?: number) { + const testConfigContents = JSON.stringify({ test: tests ? [tests] : undefined, light: light, workerCount: workerCount, taskConfigsFolder: taskConfigsFolder }); + console.log("Running tests with config: " + testConfigContents); + fs.writeFileSync("test.config", testConfigContents); +} + + +gulp.task("runtests-browser", "Runs the tests using the built run.js file like 'gulp runtests'. Syntax is gulp runtests-browser. Additional optional parameters --tests=[regex], --port=, --browser=[chrome|IE]", ["browserify", nodeServerOutFile], (done) => { + cleanTestDirs((err) => { + if (err) { console.error(err); done(err); process.exit(1); } + host = "node"; + const tests = cmdLineOptions["tests"]; + const light = cmdLineOptions["light"]; + const testConfigFile = "test.config"; + if (fs.existsSync(testConfigFile)) { + fs.unlinkSync(testConfigFile); + } + if (tests || light) { + writeTestConfigFile(tests, light); + } + + const args = [nodeServerOutFile]; + if (cmdLineOptions["port"]) { + args.push(cmdLineOptions["port"]); + } + if (cmdLineOptions["browser"]) { + args.push(cmdLineOptions["browser"]); + } + if (tests) { + args.push(JSON.stringify(tests)); + } + exec(host, args, done, done); + }); +}); + +gulp.task("generate-code-coverage", "Generates code coverage data via istanbul", ["tests"], (done) => { + exec("istanbul", ["cover", "node_modules/mocha/bin/_mocha", "--", "-R", "min", "-t", testTimeout.toString(), run], done, done); +}); + + +function getDiffTool() { + const program = process.env["DIFF"]; + if (!program) { + console.error("Add the 'DIFF' environment variable to the path of the program you want to use."); + process.exit(1); + } + return program; +} + +gulp.task("diff", "Diffs the compiler baselines using the diff tool specified by the 'DIFF' environment variable", (done) => { + exec(getDiffTool(), [refBaseline, localBaseline], done, done); +}); +gulp.task("diff-rwc", "Diffs the RWC baselines using the diff tool specified by the 'DIFF' environment variable", (done) => { + exec(getDiffTool(), [refRwcBaseline, localRwcBaseline], done, done); +}); + + +gulp.task("baseline-accept", "Makes the most recent test results the new baseline, overwriting the old baseline", (done) => { + const softAccept = cmdLineOptions["soft"]; + if (!softAccept) { + del(refBaseline).then(() => { + fs.renameSync(localBaseline, refBaseline); + done(); + }, done); + } + else { + gulp.src(localBaseline) + .pipe(gulp.dest(refBaseline)) + .on("end", () => { + del(path.join(refBaseline, "local")).then(() => done(), done); + }); + } +}); +gulp.task("baseline-accept-rwc", "Makes the most recent rwc test results the new baseline, overwriting the old baseline", () => { + return del(refRwcBaseline).then(() => { + fs.renameSync(localRwcBaseline, refRwcBaseline); + }); +}); +gulp.task("baseline-accept-test262", "Makes the most recent test262 test results the new baseline, overwriting the old baseline", () => { + return del(refTest262Baseline).then(() => { + fs.renameSync(localTest262Baseline, refTest262Baseline); + }); +}); + + +// Webhost +const webhostPath = "tests/webhost/webtsc.ts"; +const webhostJsPath = "tests/webhost/webtsc.js"; +gulp.task(webhostJsPath, false, [servicesFile], () => { + const settings: tsc.Settings = getCompilerSettings({ + outFile: webhostJsPath + }, /*useBuiltCompiler*/ true); + return gulp.src(webhostPath) + .pipe(newer(webhostJsPath)) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(path.dirname(webhostJsPath))); +}); + +gulp.task("webhost", "Builds the tsc web host", [webhostJsPath], () => { + return gulp.src(path.join(builtLocalDirectory, "lib.d.ts")).pipe(gulp.dest("tests/webhost/")); +}); + + +// Perf compiler +const perftscPath = "tests/perftsc.ts"; +const perftscJsPath = "built/local/perftsc.js"; +gulp.task(perftscJsPath, false, [servicesFile], () => { + const settings: tsc.Settings = getCompilerSettings({ + outFile: perftscJsPath + }, /*useBuiltCompiler*/ true); + return gulp.src(perftscPath) + .pipe(newer(perftscJsPath)) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(".")); +}); + +gulp.task("perftsc", "Builds augmented version of the compiler for perf tests", [perftscJsPath]); + + +// Instrumented compiler +const loggedIOpath = path.join(harnessDirectory, "loggedIO.ts"); +const loggedIOJsPath = path.join(builtLocalDirectory, "loggedIO.js"); +gulp.task(loggedIOJsPath, false, [], (done) => { + const temp = path.join(builtLocalDirectory, "temp"); + mkdirP(temp, (err) => { + if (err) { console.error(err); done(err); process.exit(1); }; + exec(host, [LKGCompiler, "--outdir", temp, loggedIOpath], () => { + fs.renameSync(path.join(temp, "/harness/loggedIO.js"), loggedIOJsPath); + del(temp).then(() => done(), done); + }, done); + }); +}); + +const instrumenterPath = path.join(harnessDirectory, "instrumenter.ts"); +const instrumenterJsPath = path.join(builtLocalDirectory, "instrumenter.js"); +gulp.task(instrumenterJsPath, false, [servicesFile], () => { + const settings: tsc.Settings = getCompilerSettings({ + outFile: instrumenterJsPath + }, /*useBuiltCompiler*/ true); + return gulp.src(instrumenterPath) + .pipe(newer(instrumenterJsPath)) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(".")); +}); + +gulp.task("tsc-instrumented", "Builds an instrumented tsc.js", [loggedIOJsPath, instrumenterJsPath, servicesFile], (done) => { + exec(host, [instrumenterJsPath, "record", "iocapture", builtLocalDirectory, compilerFilename], done, done); +}); + +gulp.task("update-sublime", "Updates the sublime plugin's tsserver", ["local", serverFile], () => { + return gulp.src([serverFile, serverFile + ".map"]).pipe(gulp.dest("../TypeScript-Sublime-Plugin/tsserver/")); +}); + + +const tslintRuleDir = "scripts/tslint"; +const tslintRules = [ + "nextLineRule", + "preferConstRule", + "booleanTriviaRule", + "typeOperatorSpacingRule", + "noInOperatorRule", + "noIncrementDecrementRule", + "objectLiteralSurroundingSpaceRule", +]; +const tslintRulesFiles = tslintRules.map(function(p) { + return path.join(tslintRuleDir, p + ".ts"); +}); +const tslintRulesOutFiles = tslintRules.map(function(p, i) { + const pathname = path.join(builtLocalDirectory, "tslint", p + ".js"); + gulp.task(pathname, false, [], () => { + const settings: tsc.Settings = getCompilerSettings({ module: "commonjs" }, /*useBuiltCompiler*/ false); + return gulp.src(tslintRulesFiles[i]) + .pipe(newer(pathname)) + .pipe(sourcemaps.init()) + .pipe(tsc(settings)) + .pipe(sourcemaps.write(".")) + .pipe(gulp.dest(path.join(builtLocalDirectory, "tslint"))); + }); + return pathname; +}); + +gulp.task("build-rules", "Compiles tslint rules to js", tslintRulesOutFiles); + + +function getLinterOptions() { + return { + configuration: require("./tslint.json"), + formatter: "prose", + formattersDirectory: undefined, + rulesDirectory: "built/local/tslint" + }; +} + +function lintFileContents(options, path, contents) { + const ll = new Linter(path, contents, options); + console.log("Linting '" + path + "'."); + return ll.lint(); +} + +function lintFile(options, path) { + const contents = fs.readFileSync(path, "utf8"); + return lintFileContents(options, path, contents); +} + +const lintTargets = ["Gulpfile.ts"] + .concat(compilerSources) + .concat(harnessSources) + // Other harness sources + .concat(["instrumenter.ts"].map(function(f) { return path.join(harnessDirectory, f); })) + .concat(serverCoreSources) + .concat(tslintRulesFiles) + .concat(servicesSources); + + +gulp.task("lint", "Runs tslint on the compiler sources. Optional arguments are: --f[iles]=regex", ["build-rules"], () => { + const lintOptions = getLinterOptions(); + let failed = 0; + const fileMatcher = RegExp(cmdLineOptions["files"]); + const done = {}; + for (const i in lintTargets) { + const target = lintTargets[i]; + if (!done[target] && fileMatcher.test(target)) { + const result = lintFile(lintOptions, target); + if (result.failureCount > 0) { + console.log(result.output); + failed += result.failureCount; + } + done[target] = true; + } + } + if (failed > 0) { + console.error("Linter errors."); + process.exit(1); + } +}); + + +gulp.task("default", "Runs 'local'", ["local"]); + +gulp.task("watch", "Watches the src/ directory for changes and executes runtests-parallel.", [], () => { + gulp.watch("src/**/*.*", ["runtests-parallel"]); +}); diff --git a/Jakefile.js b/Jakefile.js index b529522bc49..cd9f9bea0b7 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -147,6 +147,7 @@ var languageServiceLibrarySources = [ var harnessCoreSources = [ "harness.ts", + "virtualFileSystem.ts", "sourceMapRecorder.ts", "harnessLanguageService.ts", "fourslash.ts", @@ -181,7 +182,8 @@ var harnessSources = harnessCoreSources.concat([ "commandLineParsing.ts", "convertCompilerOptionsFromJson.ts", "convertTypingOptionsFromJson.ts", - "tsserverProjectSystem.ts" + "tsserverProjectSystem.ts", + "matchFiles.ts" ].map(function (f) { return path.join(unittestsDirectory, f); })).concat([ @@ -312,7 +314,7 @@ function compileFile(outFile, sources, prereqs, prefixes, useBuiltCompiler, opts } var compilerPath = useBuiltCompiler ? builtLocalCompiler : LKGCompiler; - var options = "--noImplicitAny --noEmitOnError --pretty"; + var options = "--noImplicitAny --noEmitOnError --types --pretty"; opts = opts || {}; // Keep comments when specifically requested // or when in debug mode. @@ -789,7 +791,7 @@ function runConsoleTests(defaultReporter, runInParallel) { } if (tests && tests.toLocaleLowerCase() === "rwc") { - testTimeout = 100000; + testTimeout = 400000; } colors = process.env.colors || process.env.color; @@ -1031,7 +1033,8 @@ var tslintRules = [ "booleanTriviaRule", "typeOperatorSpacingRule", "noInOperatorRule", - "noIncrementDecrementRule" + "noIncrementDecrementRule", + "objectLiteralSurroundingSpaceRule", ]; var tslintRulesFiles = tslintRules.map(function(p) { return path.join(tslintRuleDir, p + ".ts"); @@ -1082,7 +1085,8 @@ var lintTargets = compilerSources .concat(["instrumenter.ts"].map(function(f) { return path.join(harnessDirectory, f) })) .concat(serverCoreSources) .concat(tslintRulesFiles) - .concat(servicesSources); + .concat(servicesSources) + .concat(["Gulpfile.ts"]); desc("Runs tslint on the compiler sources. Optional arguments are: f[iles]=regex"); diff --git a/README.md b/README.md index 13e1f3e4786..fca2890bc77 100644 --- a/README.md +++ b/README.md @@ -56,29 +56,29 @@ Change to the TypeScript directory: cd TypeScript ``` -Install Jake tools and dev dependencies: +Install Gulp tools and dev dependencies: ``` -npm install -g jake +npm install -g gulp npm install ``` Use one of the following to build and test: ``` -jake local # Build the compiler into built/local -jake clean # Delete the built compiler -jake LKG # Replace the last known good with the built one. +gulp local # Build the compiler into built/local +gulp clean # Delete the built compiler +gulp LKG # Replace the last known good with the built one. # Bootstrapping step to be executed when the built compiler reaches a stable state. -jake tests # Build the test infrastructure using the built compiler. -jake runtests # Run tests using the built compiler and test infrastructure. +gulp tests # Build the test infrastructure using the built compiler. +gulp runtests # Run tests using the built compiler and test infrastructure. # You can override the host or specify a test for this command. # Use host= or tests=. -jake runtests-browser # Runs the tests using the built run.js file. Syntax is jake runtests. Optional +gulp runtests-browser # Runs the tests using the built run.js file. Syntax is gulp runtests. Optional parameters 'host=', 'tests=[regex], reporter=[list|spec|json|]'. -jake baseline-accept # This replaces the baseline test results with the results obtained from jake runtests. -jake lint # Runs tslint on the TypeScript source. -jake -T # List the above commands. +gulp baseline-accept # This replaces the baseline test results with the results obtained from gulp runtests. +gulp lint # Runs tslint on the TypeScript source. +gulp help # List the above commands. ``` diff --git a/ThirdPartyNoticeText.txt b/ThirdPartyNoticeText.txt index 6fbb7e4a0ce..a9ffbddbd89 100644 --- a/ThirdPartyNoticeText.txt +++ b/ThirdPartyNoticeText.txt @@ -21,7 +21,7 @@ Third Party Code Components -------------------------------------------- ------------------- DefinitelyTyped -------------------- -This file is based on or incorporates material from the projects listed below (collectively ?Third Party Code?). Microsoft is not the original author of the Third Party Code. The original copyright notice and the license, under which Microsoft received such Third Party Code, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft, not the third party, licenses the Third Party Code to you under the terms set forth in the EULA for the Microsoft Product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. +This file is based on or incorporates material from the projects listed below (collectively "Third Party Code"). Microsoft is not the original author of the Third Party Code. The original copyright notice and the license, under which Microsoft received such Third Party Code, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft, not the third party, licenses the Third Party Code to you under the terms set forth in the EULA for the Microsoft Product. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. DefinitelyTyped This project is licensed under the MIT license. Copyrights are respective of each contributor listed at the beginning of each definition file. diff --git a/issue_template.md b/issue_template.md index dcd2280570c..7799960ec78 100644 --- a/issue_template.md +++ b/issue_template.md @@ -1,24 +1,13 @@ - + + -For bug reports, please include the information below. -__________________________________________________________ --> - -**TypeScript Version:** - -1.7.5 / 1.8.0-beta / nightly (1.9.0-dev.20160217) +**TypeScript Version:** 1.8.0 / nightly (2.0.0-dev.201xxxxx) **Code** ```ts -// A self-contained demonstration of the problem follows... +// A *self-contained* demonstration of the problem follows... ``` diff --git a/lib/lib.d.ts b/lib/lib.d.ts index 2881834e678..3c003313c8b 100644 --- a/lib/lib.d.ts +++ b/lib/lib.d.ts @@ -987,7 +987,7 @@ interface JSON { /** * 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 An array of strings and numbers that acts as a white list for selecting the object properties that will be stringified. + * @param replacer An array of strings and numbers that acts as a approved 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?: (number | string)[] | null, space?: string | number): string; @@ -1540,7 +1540,7 @@ 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, + * 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. @@ -1813,7 +1813,7 @@ 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, + * 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. @@ -2087,7 +2087,7 @@ 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, + * 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. @@ -2360,7 +2360,7 @@ 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, + * 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. @@ -2634,7 +2634,7 @@ 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, + * 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. @@ -2907,7 +2907,7 @@ 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, + * 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. @@ -3180,7 +3180,7 @@ 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, + * 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. @@ -3453,7 +3453,7 @@ 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, + * 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. @@ -3727,7 +3727,7 @@ 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, + * 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. @@ -4126,7 +4126,7 @@ interface Date { ///////////////////////////// interface Algorithm { - name?: string; + name: string; } interface AriaRequestEventInit extends EventInit { @@ -4973,6 +4973,7 @@ interface UIEventInit extends EventInit { } interface WebGLContextAttributes { + failIfMajorPerformanceCaveat?: boolean; alpha?: boolean; depth?: boolean; stencil?: boolean; @@ -5038,14 +5039,14 @@ declare var AnimationEvent: { } interface ApplicationCache extends EventTarget { - oncached: (ev: Event) => any; - onchecking: (ev: Event) => any; - ondownloading: (ev: Event) => any; - onerror: (ev: Event) => any; - onnoupdate: (ev: Event) => any; - onobsolete: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - onupdateready: (ev: Event) => any; + oncached: (this: this, ev: Event) => any; + onchecking: (this: this, ev: Event) => any; + ondownloading: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onnoupdate: (this: this, ev: Event) => any; + onobsolete: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onupdateready: (this: this, ev: Event) => any; readonly status: number; abort(): void; swapCache(): void; @@ -5056,14 +5057,14 @@ interface ApplicationCache extends EventTarget { readonly OBSOLETE: number; readonly UNCACHED: number; readonly UPDATEREADY: number; - addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cached", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "checking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "downloading", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "noupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "obsolete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "updateready", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -5122,11 +5123,11 @@ interface AudioBufferSourceNode extends AudioNode { loop: boolean; loopEnd: number; loopStart: number; - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; readonly playbackRate: AudioParam; start(when?: number, offset?: number, duration?: number): void; stop(when?: number): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -5250,14 +5251,14 @@ declare var AudioTrack: { interface AudioTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; - onchange: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + onchange: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; 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; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: AudioTrack; } @@ -6532,294 +6533,294 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Fires when the user aborts the download. * @param ev The event. */ - onabort: (ev: Event) => any; + onabort: (this: this, ev: UIEvent) => any; /** * Fires when the object is set as the active element. * @param ev The event. */ - onactivate: (ev: UIEvent) => any; + onactivate: (this: this, ev: UIEvent) => any; /** * Fires immediately before the object is set as the active element. * @param ev The event. */ - onbeforeactivate: (ev: UIEvent) => any; + onbeforeactivate: (this: this, ev: UIEvent) => any; /** * Fires immediately before the activeElement is changed from the current object to another object in the parent document. * @param ev The event. */ - onbeforedeactivate: (ev: UIEvent) => any; + onbeforedeactivate: (this: this, ev: UIEvent) => any; /** * Fires when the object loses the input focus. * @param ev The focus event. */ - onblur: (ev: FocusEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; /** * Occurs when playback is possible, but would require further buffering. * @param ev The event. */ - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; /** * Fires when the contents of the object or selection have changed. * @param ev The event. */ - onchange: (ev: Event) => any; + onchange: (this: this, ev: Event) => any; /** * Fires when the user clicks the left mouse button on the object * @param ev The mouse event. */ - onclick: (ev: MouseEvent) => any; + onclick: (this: this, ev: MouseEvent) => any; /** * Fires when the user clicks the right mouse button in the client area, opening the context menu. * @param ev The mouse event. */ - oncontextmenu: (ev: PointerEvent) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; /** * Fires when the user double-clicks the object. * @param ev The mouse event. */ - ondblclick: (ev: MouseEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; /** * Fires when the activeElement is changed from the current object to another object in the parent document. * @param ev The UI Event */ - ondeactivate: (ev: UIEvent) => any; + ondeactivate: (this: this, ev: UIEvent) => any; /** * Fires on the source object continuously during a drag operation. * @param ev The event. */ - ondrag: (ev: DragEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; /** * Fires on the source object when the user releases the mouse at the close of a drag operation. * @param ev The event. */ - ondragend: (ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; /** * Fires on the target element when the user drags the object to a valid drop target. * @param ev The drag event. */ - ondragenter: (ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; /** * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation. * @param ev The drag event. */ - ondragleave: (ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; /** * Fires on the target element continuously while the user drags the object over a valid drop target. * @param ev The event. */ - ondragover: (ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; /** * Fires on the source object when the user starts to drag a text selection or selected object. * @param ev The event. */ - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; /** * Occurs when the duration attribute is updated. * @param ev The event. */ - ondurationchange: (ev: Event) => any; + ondurationchange: (this: this, ev: Event) => any; /** * Occurs when the media element is reset to its initial state. * @param ev The event. */ - onemptied: (ev: Event) => any; + onemptied: (this: this, ev: Event) => any; /** * Occurs when the end of playback is reached. * @param ev The event */ - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; /** * Fires when an error occurs during object loading. * @param ev The event. */ - onerror: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; /** * Fires when the object receives focus. * @param ev The event. */ - onfocus: (ev: FocusEvent) => any; - onfullscreenchange: (ev: Event) => any; - onfullscreenerror: (ev: Event) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onfullscreenchange: (this: this, ev: Event) => any; + onfullscreenerror: (this: this, ev: Event) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; /** * Fires when the user presses a key. * @param ev The keyboard event */ - onkeydown: (ev: KeyboardEvent) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; /** * Fires when the user presses an alphanumeric key. * @param ev The event. */ - onkeypress: (ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; /** * Fires when the user releases a key. * @param ev The keyboard event */ - onkeyup: (ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; /** * Fires immediately after the browser loads the object. * @param ev The event. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; /** * Occurs when media data is loaded at the current playback position. * @param ev The event. */ - onloadeddata: (ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; /** * Occurs when the duration and dimensions of the media have been determined. * @param ev The event. */ - onloadedmetadata: (ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; /** * Occurs when Internet Explorer begins looking for media data. * @param ev The event. */ - onloadstart: (ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; /** * Fires when the user clicks the object with either mouse button. * @param ev The mouse event. */ - onmousedown: (ev: MouseEvent) => any; + onmousedown: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse over the object. * @param ev The mouse event. */ - onmousemove: (ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse pointer outside the boundaries of the object. * @param ev The mouse event. */ - onmouseout: (ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse pointer into the object. * @param ev The mouse event. */ - onmouseover: (ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; /** * Fires when the user releases a mouse button while the mouse is over the object. * @param ev The mouse event. */ - onmouseup: (ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; /** * Fires when the wheel button is rotated. * @param ev The mouse event */ - onmousewheel: (ev: WheelEvent) => any; - onmscontentzoom: (ev: UIEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmscontentzoom: (this: this, ev: UIEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmsmanipulationstatechanged: (this: this, ev: MSManipulationEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; /** * Occurs when an item is removed from a Jump List of a webpage running in Site Mode. * @param ev The event. */ - onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any; + onmssitemodejumplistitemremoved: (this: this, ev: MSSiteModeEvent) => any; /** * Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode. * @param ev The event. */ - onmsthumbnailclick: (ev: MSSiteModeEvent) => any; + onmsthumbnailclick: (this: this, ev: MSSiteModeEvent) => any; /** * Occurs when playback is paused. * @param ev The event. */ - onpause: (ev: Event) => any; + onpause: (this: this, ev: Event) => any; /** * Occurs when the play method is requested. * @param ev The event. */ - onplay: (ev: Event) => any; + onplay: (this: this, ev: Event) => any; /** * Occurs when the audio or video has started playing. * @param ev The event. */ - onplaying: (ev: Event) => any; - onpointerlockchange: (ev: Event) => any; - onpointerlockerror: (ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onpointerlockchange: (this: this, ev: Event) => any; + onpointerlockerror: (this: this, ev: Event) => any; /** * Occurs to indicate progress while downloading media data. * @param ev The event. */ - onprogress: (ev: ProgressEvent) => any; + onprogress: (this: this, ev: ProgressEvent) => any; /** * Occurs when the playback rate is increased or decreased. * @param ev The event. */ - onratechange: (ev: Event) => any; + onratechange: (this: this, ev: Event) => any; /** * Fires when the state of the object has changed. * @param ev The event */ - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; /** * Fires when the user resets a form. * @param ev The event. */ - onreset: (ev: Event) => any; + onreset: (this: this, ev: Event) => any; /** * Fires when the user repositions the scroll box in the scroll bar on the object. * @param ev The event. */ - onscroll: (ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; /** * Occurs when the seek operation ends. * @param ev The event. */ - onseeked: (ev: Event) => any; + onseeked: (this: this, ev: Event) => any; /** * Occurs when the current playback position is moved. * @param ev The event. */ - onseeking: (ev: Event) => any; + onseeking: (this: this, ev: Event) => any; /** * Fires when the current selection changes. * @param ev The event. */ - onselect: (ev: UIEvent) => any; + onselect: (this: this, ev: UIEvent) => any; /** * Fires when the selection state of a document changes. * @param ev The event. */ - onselectionchange: (ev: Event) => any; - onselectstart: (ev: Event) => any; + onselectionchange: (this: this, ev: Event) => any; + onselectstart: (this: this, ev: Event) => any; /** * Occurs when the download has stopped. * @param ev The event. */ - onstalled: (ev: Event) => any; + onstalled: (this: this, ev: Event) => any; /** * Fires when the user clicks the Stop button or leaves the Web page. * @param ev The event. */ - onstop: (ev: Event) => any; - onsubmit: (ev: Event) => any; + onstop: (this: this, ev: Event) => any; + onsubmit: (this: this, ev: Event) => any; /** * Occurs if the load operation has been intentionally halted. * @param ev The event. */ - onsuspend: (ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; /** * Occurs to indicate the current playback position. * @param ev The event. */ - ontimeupdate: (ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; @@ -6828,14 +6829,14 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Occurs when the volume is changed, or playback is muted or unmuted. * @param ev The event. */ - onvolumechange: (ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; /** * Occurs when playback stops because the next frame of a video resource is not available. * @param ev The event. */ - onwaiting: (ev: Event) => any; - onwebkitfullscreenchange: (ev: Event) => any; - onwebkitfullscreenerror: (ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; + onwebkitfullscreenchange: (this: this, ev: Event) => any; + onwebkitfullscreenerror: (this: this, ev: Event) => any; plugins: HTMLCollectionOf; readonly pointerLockElement: Element; /** @@ -7110,7 +7111,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Returns a reference to the first object with the specified value of the ID or NAME attribute. * @param elementId String that specifies the ID value. Case-insensitive. */ - getElementById(elementId: string): HTMLElement; + getElementById(elementId: string): HTMLElement | null; getElementsByClassName(classNames: string): HTMLCollectionOf; /** * Gets a collection of objects based on the value of the NAME or ID attribute. @@ -7367,103 +7368,103 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param content The text and HTML tags to write. */ writeln(...content: string[]): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "fullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "fullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerlockchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointerlockerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectionchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "fullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "fullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mssitemodejumplistitemremoved", listener: (this: this, ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msthumbnailclick", listener: (this: this, ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerlockchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointerlockerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectionchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stop", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7551,33 +7552,33 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec id: string; msContentZoomFactor: number; readonly msRegionOverflow: string; - onariarequest: (ev: AriaRequestEvent) => any; - oncommand: (ev: CommandEvent) => any; - ongotpointercapture: (ev: PointerEvent) => any; - onlostpointercapture: (ev: PointerEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsgotpointercapture: (ev: MSPointerEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmslostpointercapture: (ev: MSPointerEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; + onariarequest: (this: this, ev: AriaRequestEvent) => any; + oncommand: (this: this, ev: CommandEvent) => any; + ongotpointercapture: (this: this, ev: PointerEvent) => any; + onlostpointercapture: (this: this, ev: PointerEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsgotpointercapture: (this: this, ev: MSPointerEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmslostpointercapture: (this: this, ev: MSPointerEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; ontouchstart: (ev: TouchEvent) => any; - onwebkitfullscreenchange: (ev: Event) => any; - onwebkitfullscreenerror: (ev: Event) => any; + onwebkitfullscreenchange: (this: this, ev: Event) => any; + onwebkitfullscreenerror: (this: this, ev: Event) => any; readonly prefix: string | null; readonly scrollHeight: number; scrollLeft: number; @@ -7585,7 +7586,7 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec readonly scrollWidth: number; readonly tagName: string; innerHTML: string; - getAttribute(name?: string): string | null; + getAttribute(name: string): string | null; getAttributeNS(namespaceURI: string, localName: string): string; getAttributeNode(name: string): Attr; getAttributeNodeNS(namespaceURI: string, localName: string): Attr; @@ -7795,42 +7796,43 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec webkitRequestFullscreen(): void; getElementsByClassName(classNames: string): NodeListOf; matches(selector: string): boolean; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + closest(selector: string): Element | null; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8321,147 +8323,147 @@ interface HTMLBodyElement extends HTMLElement { bgProperties: string; link: any; noWrap: boolean; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onblur: (ev: FocusEvent) => any; - onerror: (ev: Event) => any; - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - onload: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onpopstate: (ev: PopStateEvent) => any; - onresize: (ev: UIEvent) => any; - onstorage: (ev: StorageEvent) => any; - onunload: (ev: Event) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + onload: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onpopstate: (this: this, ev: PopStateEvent) => any; + onresize: (this: this, ev: UIEvent) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onunload: (this: this, ev: Event) => any; text: any; vLink: any; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (this: this, ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8554,9 +8556,9 @@ interface HTMLCanvasElement extends HTMLElement { * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas. * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl"); */ - getContext(contextId: "2d"): CanvasRenderingContext2D; - getContext(contextId: "experimental-webgl"): WebGLRenderingContext; - getContext(contextId: string, ...args: any[]): CanvasRenderingContext2D | WebGLRenderingContext; + getContext(contextId: "2d", contextAttributes?: Canvas2DContextAttributes): CanvasRenderingContext2D | null; + getContext(contextId: "webgl" | "experimental-webgl", contextAttributes?: WebGLContextAttributes): WebGLRenderingContext | null; + getContext(contextId: string, contextAttributes?: {}): CanvasRenderingContext2D | WebGLRenderingContext | null; /** * Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing. */ @@ -8566,7 +8568,7 @@ interface HTMLCanvasElement extends HTMLElement { * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image. */ toDataURL(type?: string, ...args: any[]): string; - toBlob(): Blob; + toBlob(callback: (result: Blob | null) => void, ... arguments: any[]): void; } declare var HTMLCanvasElement: { @@ -8664,73 +8666,73 @@ interface HTMLElement extends Element { readonly offsetParent: Element; readonly offsetTop: number; readonly offsetWidth: number; - onabort: (ev: Event) => any; - onactivate: (ev: UIEvent) => any; - onbeforeactivate: (ev: UIEvent) => any; - onbeforecopy: (ev: ClipboardEvent) => any; - onbeforecut: (ev: ClipboardEvent) => any; - onbeforedeactivate: (ev: UIEvent) => any; - onbeforepaste: (ev: ClipboardEvent) => any; - onblur: (ev: FocusEvent) => any; - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; - onchange: (ev: Event) => any; - onclick: (ev: MouseEvent) => any; - oncontextmenu: (ev: PointerEvent) => any; - oncopy: (ev: ClipboardEvent) => any; - oncuechange: (ev: Event) => any; - oncut: (ev: ClipboardEvent) => any; - ondblclick: (ev: MouseEvent) => any; - ondeactivate: (ev: UIEvent) => any; - ondrag: (ev: DragEvent) => any; - ondragend: (ev: DragEvent) => any; - ondragenter: (ev: DragEvent) => any; - ondragleave: (ev: DragEvent) => any; - ondragover: (ev: DragEvent) => any; - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; - ondurationchange: (ev: Event) => any; - onemptied: (ev: Event) => any; - onended: (ev: MediaStreamErrorEvent) => any; - onerror: (ev: Event) => any; - onfocus: (ev: FocusEvent) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; - onkeydown: (ev: KeyboardEvent) => any; - onkeypress: (ev: KeyboardEvent) => any; - onkeyup: (ev: KeyboardEvent) => any; - onload: (ev: Event) => any; - onloadeddata: (ev: Event) => any; - onloadedmetadata: (ev: Event) => any; - onloadstart: (ev: Event) => any; - onmousedown: (ev: MouseEvent) => any; - onmouseenter: (ev: MouseEvent) => any; - onmouseleave: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; - onmousewheel: (ev: WheelEvent) => any; - onmscontentzoom: (ev: UIEvent) => any; - onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any; - onpaste: (ev: ClipboardEvent) => any; - onpause: (ev: Event) => any; - onplay: (ev: Event) => any; - onplaying: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - onratechange: (ev: Event) => any; - onreset: (ev: Event) => any; - onscroll: (ev: UIEvent) => any; - onseeked: (ev: Event) => any; - onseeking: (ev: Event) => any; - onselect: (ev: UIEvent) => any; - onselectstart: (ev: Event) => any; - onstalled: (ev: Event) => any; - onsubmit: (ev: Event) => any; - onsuspend: (ev: Event) => any; - ontimeupdate: (ev: Event) => any; - onvolumechange: (ev: Event) => any; - onwaiting: (ev: Event) => any; + onabort: (this: this, ev: UIEvent) => any; + onactivate: (this: this, ev: UIEvent) => any; + onbeforeactivate: (this: this, ev: UIEvent) => any; + onbeforecopy: (this: this, ev: ClipboardEvent) => any; + onbeforecut: (this: this, ev: ClipboardEvent) => any; + onbeforedeactivate: (this: this, ev: UIEvent) => any; + onbeforepaste: (this: this, ev: ClipboardEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; + onchange: (this: this, ev: Event) => any; + onclick: (this: this, ev: MouseEvent) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; + oncopy: (this: this, ev: ClipboardEvent) => any; + oncuechange: (this: this, ev: Event) => any; + oncut: (this: this, ev: ClipboardEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + ondeactivate: (this: this, ev: UIEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; + ondurationchange: (this: this, ev: Event) => any; + onemptied: (this: this, ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onfocus: (this: this, ev: FocusEvent) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; + onload: (this: this, ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmouseenter: (this: this, ev: MouseEvent) => any; + onmouseleave: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmscontentzoom: (this: this, ev: UIEvent) => any; + onmsmanipulationstatechanged: (this: this, ev: MSManipulationEvent) => any; + onpaste: (this: this, ev: ClipboardEvent) => any; + onpause: (this: this, ev: Event) => any; + onplay: (this: this, ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onratechange: (this: this, ev: Event) => any; + onreset: (this: this, ev: Event) => any; + onscroll: (this: this, ev: UIEvent) => any; + onseeked: (this: this, ev: Event) => any; + onseeking: (this: this, ev: Event) => any; + onselect: (this: this, ev: UIEvent) => any; + onselectstart: (this: this, ev: Event) => any; + onstalled: (this: this, ev: Event) => any; + onsubmit: (this: this, ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; outerHTML: string; outerText: string; spellcheck: boolean; @@ -8747,109 +8749,109 @@ interface HTMLElement extends Element { msGetInputContext(): MSInputMethodContext; scrollIntoView(top?: boolean): void; setActive(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9091,7 +9093,7 @@ interface HTMLFrameElement extends HTMLElement, GetSVGDocument { /** * Raised when the object has been completely received from the server. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; /** * Sets or retrieves whether the frame can be scrolled. */ @@ -9104,110 +9106,110 @@ interface HTMLFrameElement extends HTMLElement, GetSVGDocument { * Sets or retrieves the width of the object. */ width: string | number; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9235,152 +9237,152 @@ interface HTMLFrameSetElement extends HTMLElement { */ frameSpacing: any; name: string; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; /** * Fires when the object loses the input focus. */ - onblur: (ev: FocusEvent) => any; - onerror: (ev: Event) => any; + onblur: (this: this, ev: FocusEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; /** * Fires when the object receives focus. */ - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - onload: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onresize: (ev: UIEvent) => any; - onstorage: (ev: StorageEvent) => any; - onunload: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + onload: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onresize: (this: this, ev: UIEvent) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onunload: (this: this, ev: Event) => any; /** * Sets or retrieves the frame heights of the object. */ rows: string; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9500,7 +9502,7 @@ interface HTMLIFrameElement extends HTMLElement, GetSVGDocument { /** * Raised when the object has been completely received from the server. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; readonly sandbox: DOMSettableTokenList; /** * Sets or retrieves whether the frame can be scrolled. @@ -9518,110 +9520,110 @@ interface HTMLIFrameElement extends HTMLElement, GetSVGDocument { * Sets or retrieves the width of the object. */ width: string; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9765,7 +9767,7 @@ interface HTMLInputElement extends HTMLElement { /** * Returns a FileList object on a file type input object. */ - readonly files: FileList; + readonly files: FileList | null; /** * Retrieves a reference to the form that the object is embedded in. */ @@ -10041,9 +10043,9 @@ interface HTMLMarqueeElement extends HTMLElement { height: string; hspace: number; loop: number; - onbounce: (ev: Event) => any; - onfinish: (ev: Event) => any; - onstart: (ev: Event) => any; + onbounce: (this: this, ev: Event) => any; + onfinish: (this: this, ev: Event) => any; + onstart: (this: this, ev: Event) => any; scrollAmount: number; scrollDelay: number; trueSpeed: boolean; @@ -10051,112 +10053,112 @@ interface HTMLMarqueeElement extends HTMLElement { width: string; start(): void; stop(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "bounce", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "finish", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "start", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -10254,8 +10256,8 @@ interface HTMLMediaElement extends HTMLElement { * Gets the current network activity for the element. */ readonly networkState: number; - onencrypted: (ev: MediaEncryptedEvent) => any; - onmsneedkey: (ev: MSMediaKeyNeededEvent) => any; + onencrypted: (this: this, ev: MediaEncryptedEvent) => any; + onmsneedkey: (this: this, ev: MSMediaKeyNeededEvent) => any; /** * Gets a flag that specifies whether playback is paused. */ @@ -10333,111 +10335,111 @@ interface HTMLMediaElement extends HTMLElement { readonly NETWORK_IDLE: number; readonly NETWORK_LOADING: number; readonly NETWORK_NO_SOURCE: number; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "encrypted", listener: (ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "encrypted", listener: (this: this, ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (this: this, ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -10736,7 +10738,7 @@ declare var HTMLOptionElement: { create(): HTMLOptionElement; } -interface HTMLOptionsCollection extends HTMLCollection { +interface HTMLOptionsCollection extends HTMLCollectionOf { length: number; selectedIndex: number; add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number): void; @@ -10900,7 +10902,7 @@ interface HTMLSelectElement extends HTMLElement { * Sets or retrieves the name of the object. */ name: string; - options: HTMLCollectionOf; + readonly options: HTMLOptionsCollection; /** * When present, marks an element that can't be submitted without a value. */ @@ -11489,9 +11491,9 @@ interface HTMLVideoElement extends HTMLMediaElement { msStereo3DPackingMode: string; msStereo3DRenderMode: string; msZoom: boolean; - onMSVideoFormatChanged: (ev: Event) => any; - onMSVideoFrameStepCompleted: (ev: Event) => any; - onMSVideoOptimalLayoutChanged: (ev: Event) => any; + onMSVideoFormatChanged: (this: this, ev: Event) => any; + onMSVideoFrameStepCompleted: (this: this, ev: Event) => any; + onMSVideoOptimalLayoutChanged: (this: this, ev: Event) => any; /** * Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available. */ @@ -11518,114 +11520,114 @@ interface HTMLVideoElement extends HTMLMediaElement { webkitEnterFullscreen(): void; webkitExitFullScreen(): void; webkitExitFullscreen(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFormatChanged", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "encrypted", listener: (ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFormatChanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFrameStepCompleted", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "encrypted", listener: (this: this, ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (this: this, ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11695,8 +11697,8 @@ declare var IDBCursorWithValue: { interface IDBDatabase extends EventTarget { readonly name: string; readonly objectStoreNames: DOMStringList; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; version: number; onversionchange: (ev: IDBVersionChangeEvent) => any; close(): void; @@ -11704,8 +11706,8 @@ interface IDBDatabase extends EventTarget { deleteObjectStore(name: string): void; transaction(storeNames: string | string[], mode?: string): IDBTransaction; addEventListener(type: "versionchange", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11783,12 +11785,12 @@ declare var IDBObjectStore: { } interface IDBOpenDBRequest extends IDBRequest { - onblocked: (ev: Event) => any; - onupgradeneeded: (ev: IDBVersionChangeEvent) => any; - addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; + onblocked: (this: this, ev: Event) => any; + onupgradeneeded: (this: this, ev: IDBVersionChangeEvent) => any; + addEventListener(type: "blocked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "upgradeneeded", listener: (this: this, ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11799,14 +11801,14 @@ declare var IDBOpenDBRequest: { interface IDBRequest extends EventTarget { readonly error: DOMError; - onerror: (ev: Event) => any; - onsuccess: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onsuccess: (this: this, ev: Event) => any; readonly readyState: string; readonly result: any; source: IDBObjectStore | IDBIndex | IDBCursor; readonly transaction: IDBTransaction; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11819,17 +11821,17 @@ interface IDBTransaction extends EventTarget { readonly db: IDBDatabase; readonly error: DOMError; readonly mode: string; - onabort: (ev: Event) => any; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; abort(): void; objectStore(name: string): IDBObjectStore; readonly READ_ONLY: string; readonly READ_WRITE: string; readonly VERSION_CHANGE: string; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11963,16 +11965,16 @@ declare var MSApp: MSApp; interface MSAppAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; start(): void; readonly COMPLETED: number; readonly ERROR: number; readonly STARTED: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12137,17 +12139,17 @@ declare var MSHTMLWebViewElement: { interface MSInputMethodContext extends EventTarget { readonly compositionEndOffset: number; readonly compositionStartOffset: number; - oncandidatewindowhide: (ev: Event) => any; - oncandidatewindowshow: (ev: Event) => any; - oncandidatewindowupdate: (ev: Event) => any; + oncandidatewindowhide: (this: this, ev: Event) => any; + oncandidatewindowshow: (this: this, ev: Event) => any; + oncandidatewindowupdate: (this: this, ev: Event) => any; readonly target: HTMLElement; getCandidateWindowClientRect(): ClientRect; getCompositionAlternatives(): string[]; hasComposition(): boolean; isCandidateWindowVisible(): boolean; - addEventListener(type: "MSCandidateWindowHide", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSCandidateWindowShow", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSCandidateWindowUpdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowHide", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowShow", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowUpdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12323,8 +12325,8 @@ declare var MSStreamReader: { interface MSWebViewAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; readonly target: MSHTMLWebViewElement; @@ -12336,8 +12338,8 @@ interface MSWebViewAsyncOperation extends EventTarget { readonly TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number; readonly TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number; readonly TYPE_INVOKE_SCRIPT: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12375,11 +12377,11 @@ declare var MediaDeviceInfo: { } interface MediaDevices extends EventTarget { - ondevicechange: (ev: Event) => any; + ondevicechange: (this: this, ev: Event) => any; enumerateDevices(): any; getSupportedConstraints(): MediaTrackSupportedConstraints; getUserMedia(constraints: MediaStreamConstraints): PromiseLike; - addEventListener(type: "devicechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "devicechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12532,10 +12534,10 @@ declare var MediaSource: { interface MediaStream extends EventTarget { readonly active: boolean; readonly id: string; - onactive: (ev: Event) => any; - onaddtrack: (ev: TrackEvent) => any; - oninactive: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onactive: (this: this, ev: Event) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + oninactive: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; addTrack(track: MediaStreamTrack): void; clone(): MediaStream; getAudioTracks(): MediaStreamTrack[]; @@ -12544,10 +12546,10 @@ interface MediaStream extends EventTarget { getVideoTracks(): MediaStreamTrack[]; removeTrack(track: MediaStreamTrack): void; stop(): void; - addEventListener(type: "active", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; - addEventListener(type: "inactive", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "active", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "inactive", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12590,10 +12592,10 @@ interface MediaStreamTrack extends EventTarget { readonly kind: string; readonly label: string; readonly muted: boolean; - onended: (ev: MediaStreamErrorEvent) => any; - onmute: (ev: Event) => any; - onoverconstrained: (ev: MediaStreamErrorEvent) => any; - onunmute: (ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; + onmute: (this: this, ev: Event) => any; + onoverconstrained: (this: this, ev: MediaStreamErrorEvent) => any; + onunmute: (this: this, ev: Event) => any; readonly readonly: boolean; readonly readyState: string; readonly remote: boolean; @@ -12603,10 +12605,10 @@ interface MediaStreamTrack extends EventTarget { getConstraints(): MediaTrackConstraints; getSettings(): MediaTrackSettings; stop(): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mute", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "overconstrained", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unmute", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mute", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "overconstrained", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unmute", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12648,11 +12650,11 @@ declare var MessageEvent: { } interface MessagePort extends EventTarget { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; close(): void; postMessage(message?: any, ports?: any): void; start(): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12860,7 +12862,7 @@ interface Node extends EventTarget { contains(child: Node): boolean; hasAttributes(): boolean; hasChildNodes(): boolean; - insertBefore(newChild: Node, refChild: Node): Node; + insertBefore(newChild: Node, refChild: Node | null): Node; isDefaultNamespace(namespaceURI: string | null): boolean; isEqualNode(arg: Node): boolean; isSameNode(other: Node): boolean; @@ -12869,7 +12871,6 @@ interface Node extends EventTarget { normalize(): void; removeChild(oldChild: Node): Node; replaceChild(newChild: Node, oldChild: Node): Node; - contains(node: Node): boolean; readonly ATTRIBUTE_NODE: number; readonly CDATA_SECTION_NODE: number; readonly COMMENT_NODE: number; @@ -13006,9 +13007,9 @@ declare var OfflineAudioCompletionEvent: { } interface OfflineAudioContext extends AudioContext { - oncomplete: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; startRendering(): PromiseLike; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13020,12 +13021,12 @@ declare var OfflineAudioContext: { interface OscillatorNode extends AudioNode { readonly detune: AudioParam; readonly frequency: AudioParam; - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; type: string; setPeriodicWave(periodicWave: PeriodicWave): void; start(when?: number): void; stop(when?: number): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13404,8 +13405,8 @@ declare var RTCDTMFToneChangeEvent: { } interface RTCDtlsTransport extends RTCStatsProvider { - ondtlsstatechange: ((ev: RTCDtlsTransportStateChangedEvent) => any) | null; - onerror: ((ev: Event) => any) | null; + ondtlsstatechange: ((this: this, ev: RTCDtlsTransportStateChangedEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly state: string; readonly transport: RTCIceTransport; getLocalParameters(): RTCDtlsParameters; @@ -13413,8 +13414,8 @@ interface RTCDtlsTransport extends RTCStatsProvider { getRemoteParameters(): RTCDtlsParameters | null; start(remoteParameters: RTCDtlsParameters): void; stop(): void; - addEventListener(type: "dtlsstatechange", listener: (ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dtlsstatechange", listener: (this: this, ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13436,11 +13437,11 @@ interface RTCDtmfSender extends EventTarget { readonly canInsertDTMF: boolean; readonly duration: number; readonly interToneGap: number; - ontonechange: (ev: RTCDTMFToneChangeEvent) => any; + ontonechange: (this: this, ev: RTCDTMFToneChangeEvent) => any; readonly sender: RTCRtpSender; readonly toneBuffer: string; insertDTMF(tones: string, duration?: number, interToneGap?: number): void; - addEventListener(type: "tonechange", listener: (ev: RTCDTMFToneChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "tonechange", listener: (this: this, ev: RTCDTMFToneChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13460,13 +13461,13 @@ declare var RTCIceCandidatePairChangedEvent: { interface RTCIceGatherer extends RTCStatsProvider { readonly component: string; - onerror: ((ev: Event) => any) | null; - onlocalcandidate: ((ev: RTCIceGathererEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; + onlocalcandidate: ((this: this, ev: RTCIceGathererEvent) => any) | null; createAssociatedGatherer(): RTCIceGatherer; getLocalCandidates(): RTCIceCandidate[]; getLocalParameters(): RTCIceParameters; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "localcandidate", listener: (ev: RTCIceGathererEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "localcandidate", listener: (this: this, ev: RTCIceGathererEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13487,8 +13488,8 @@ declare var RTCIceGathererEvent: { interface RTCIceTransport extends RTCStatsProvider { readonly component: string; readonly iceGatherer: RTCIceGatherer | null; - oncandidatepairchange: ((ev: RTCIceCandidatePairChangedEvent) => any) | null; - onicestatechange: ((ev: RTCIceTransportStateChangedEvent) => any) | null; + oncandidatepairchange: ((this: this, ev: RTCIceCandidatePairChangedEvent) => any) | null; + onicestatechange: ((this: this, ev: RTCIceTransportStateChangedEvent) => any) | null; readonly role: string; readonly state: string; addRemoteCandidate(remoteCandidate: RTCIceCandidate | RTCIceCandidateComplete): void; @@ -13499,8 +13500,8 @@ interface RTCIceTransport extends RTCStatsProvider { setRemoteCandidates(remoteCandidates: RTCIceCandidate[]): void; start(gatherer: RTCIceGatherer, remoteParameters: RTCIceParameters, role?: string): void; stop(): void; - addEventListener(type: "candidatepairchange", listener: (ev: RTCIceCandidatePairChangedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "icestatechange", listener: (ev: RTCIceTransportStateChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "candidatepairchange", listener: (this: this, ev: RTCIceCandidatePairChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "icestatechange", listener: (this: this, ev: RTCIceTransportStateChangedEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13519,7 +13520,7 @@ declare var RTCIceTransportStateChangedEvent: { } interface RTCRtpReceiver extends RTCStatsProvider { - onerror: ((ev: Event) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack | null; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -13528,7 +13529,7 @@ interface RTCRtpReceiver extends RTCStatsProvider { requestSendCSRC(csrc: number): void; setTransport(transport: RTCDtlsTransport | RTCSrtpSdesTransport, rtcpTransport?: RTCDtlsTransport): void; stop(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13539,8 +13540,8 @@ declare var RTCRtpReceiver: { } interface RTCRtpSender extends RTCStatsProvider { - onerror: ((ev: Event) => any) | null; - onssrcconflict: ((ev: RTCSsrcConflictEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; + onssrcconflict: ((this: this, ev: RTCSsrcConflictEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -13548,8 +13549,8 @@ interface RTCRtpSender extends RTCStatsProvider { setTrack(track: MediaStreamTrack): void; setTransport(transport: RTCDtlsTransport | RTCSrtpSdesTransport, rtcpTransport?: RTCDtlsTransport): void; stop(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ssrcconflict", listener: (ev: RTCSsrcConflictEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ssrcconflict", listener: (this: this, ev: RTCSsrcConflictEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13560,9 +13561,9 @@ declare var RTCRtpSender: { } interface RTCSrtpSdesTransport extends EventTarget { - onerror: ((ev: Event) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly transport: RTCIceTransport; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13857,66 +13858,66 @@ declare var SVGDescElement: { } interface SVGElement extends Element { - onclick: (ev: MouseEvent) => any; - ondblclick: (ev: MouseEvent) => any; - onfocusin: (ev: FocusEvent) => any; - onfocusout: (ev: FocusEvent) => any; - onload: (ev: Event) => any; - onmousedown: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; + onclick: (this: this, ev: MouseEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + onfocusin: (this: this, ev: FocusEvent) => any; + onfocusout: (this: this, ev: FocusEvent) => any; + onload: (this: this, ev: Event) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; readonly ownerSVGElement: SVGSVGElement; readonly viewportElement: SVGElement; xmlbase: string; className: any; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -15047,12 +15048,12 @@ interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTest currentScale: number; readonly currentTranslate: SVGPoint; readonly height: SVGAnimatedLength; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - onscroll: (ev: UIEvent) => any; - onunload: (ev: Event) => any; - onzoom: (ev: SVGZoomEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: Event) => any; + onresize: (this: this, ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; + onunload: (this: this, ev: Event) => any; + onzoom: (this: this, ev: SVGZoomEvent) => any; readonly pixelUnitToMillimeterX: number; readonly pixelUnitToMillimeterY: number; readonly screenPixelToMillimeterX: number; @@ -15084,58 +15085,58 @@ interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTest unpauseAnimations(): void; unsuspendRedraw(suspendHandleID: number): void; unsuspendRedrawAll(): void; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "SVGAbort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGError", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGUnload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGZoom", listener: (ev: SVGZoomEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "SVGAbort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGError", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGUnload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGZoom", listener: (this: this, ev: SVGZoomEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -15416,14 +15417,14 @@ interface Screen extends EventTarget { readonly logicalXDPI: number; readonly logicalYDPI: number; readonly msOrientation: string; - onmsorientationchange: (ev: Event) => any; + onmsorientationchange: (this: this, ev: Event) => any; readonly pixelDepth: number; readonly systemXDPI: number; readonly systemYDPI: number; readonly width: number; msLockOrientation(orientations: string | string[]): boolean; msUnlockOrientation(): void; - addEventListener(type: "MSOrientationChange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSOrientationChange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -15444,8 +15445,8 @@ declare var ScriptNotifyEvent: { interface ScriptProcessorNode extends AudioNode { readonly bufferSize: number; - onaudioprocess: (ev: AudioProcessingEvent) => any; - addEventListener(type: "audioprocess", listener: (ev: AudioProcessingEvent) => any, useCapture?: boolean): void; + onaudioprocess: (this: this, ev: AudioProcessingEvent) => any; + addEventListener(type: "audioprocess", listener: (this: this, ev: AudioProcessingEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -15600,18 +15601,24 @@ declare var StyleSheetPageList: { } interface SubtleCrypto { - decrypt(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; - deriveBits(algorithm: string | Algorithm, baseKey: CryptoKey, length: number): PromiseLike; - deriveKey(algorithm: string | Algorithm, baseKey: CryptoKey, derivedKeyType: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; - digest(algorithm: string | Algorithm, data: ArrayBufferView): PromiseLike; - 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 | 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 | 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; + decrypt(algorithm: string | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: BufferSource): PromiseLike; + deriveBits(algorithm: string | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, baseKey: CryptoKey, length: number): PromiseLike; + deriveKey(algorithm: string | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, extractable: boolean, keyUsages: string[]): PromiseLike; + digest(algorithm: AlgorithmIdentifier, data: BufferSource): PromiseLike; + encrypt(algorithm: string | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: BufferSource): PromiseLike; + exportKey(format: "jwk", key: CryptoKey): PromiseLike; + exportKey(format: "raw" | "pkcs8" | "spki", key: CryptoKey): PromiseLike; + exportKey(format: string, key: CryptoKey): PromiseLike; + generateKey(algorithm: string, extractable: boolean, keyUsages: string[]): PromiseLike; + generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams | DhKeyGenParams, extractable: boolean, keyUsages: string[]): PromiseLike; + generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: string[]): PromiseLike; + importKey(format: "jwk", keyData: JsonWebKey, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + importKey(format: "raw" | "pkcs8" | "spki", keyData: BufferSource, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + importKey(format: string, keyData: JsonWebKey | BufferSource, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + sign(algorithm: string | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, data: BufferSource): PromiseLike; + unwrapKey(format: string, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier, unwrappedKeyAlgorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: string[]): PromiseLike; + verify(algorithm: string | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, signature: BufferSource, data: BufferSource): PromiseLike; + wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier): PromiseLike; } declare var SubtleCrypto: { @@ -15678,9 +15685,9 @@ interface TextTrack extends EventTarget { readonly label: string; readonly language: string; mode: any; - oncuechange: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; + oncuechange: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; readonly readyState: number; addCue(cue: TextTrackCue): void; removeCue(cue: TextTrackCue): void; @@ -15691,9 +15698,9 @@ interface TextTrack extends EventTarget { readonly LOADING: number; readonly NONE: number; readonly SHOWING: number; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -15712,15 +15719,15 @@ declare var TextTrack: { interface TextTrackCue extends EventTarget { endTime: number; id: string; - onenter: (ev: Event) => any; - onexit: (ev: Event) => any; + onenter: (this: this, ev: Event) => any; + onexit: (this: this, ev: Event) => any; pauseOnExit: boolean; startTime: number; text: string; readonly track: TextTrack; getCueAsHTML(): DocumentFragment; - addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "enter", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "exit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -15743,9 +15750,9 @@ declare var TextTrackCueList: { interface TextTrackList extends EventTarget { readonly length: number; - onaddtrack: ((ev: TrackEvent) => any) | null; + onaddtrack: ((this: this, ev: TrackEvent) => any) | null; item(index: number): TextTrack; - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: TextTrack; } @@ -15937,15 +15944,15 @@ declare var VideoTrack: { interface VideoTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; - onchange: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + onchange: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; readonly selectedIndex: number; 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; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: VideoTrack; } @@ -16168,18 +16175,12 @@ interface WebGLRenderingContext { stencilMaskSeparate(face: number, mask: number): void; stencilOp(fail: number, zfail: number, zpass: number): void; stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void; - texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, image: HTMLImageElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, canvas: HTMLCanvasElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, video: HTMLVideoElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void; + texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels?: ArrayBufferView): void; + texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void; texParameterf(target: number, pname: number, param: number): void; texParameteri(target: number, pname: number, param: number): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, image: HTMLImageElement): void; - 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; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels?: ArrayBufferView): void; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void; uniform1f(location: WebGLUniformLocation | null, x: number): void; uniform1fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; uniform1i(location: WebGLUniformLocation | null, x: number): void; @@ -16901,10 +16902,10 @@ interface WebSocket extends EventTarget { binaryType: string; readonly bufferedAmount: number; readonly extensions: string; - onclose: (ev: CloseEvent) => any; - onerror: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onopen: (ev: Event) => any; + onclose: (this: this, ev: CloseEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onopen: (this: this, ev: Event) => any; readonly protocol: string; readonly readyState: number; readonly url: string; @@ -16914,10 +16915,10 @@ interface WebSocket extends EventTarget { readonly CLOSING: number; readonly CONNECTING: number; readonly OPEN: number; - addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "close", listener: (this: this, ev: CloseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "open", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -16977,97 +16978,97 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window name: string; readonly navigator: Navigator; offscreenBuffering: string | boolean; - onabort: (ev: Event) => any; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onblur: (ev: FocusEvent) => any; - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; - onchange: (ev: Event) => any; - onclick: (ev: MouseEvent) => any; - oncompassneedscalibration: (ev: Event) => any; - oncontextmenu: (ev: PointerEvent) => any; - ondblclick: (ev: MouseEvent) => any; - ondevicelight: (ev: DeviceLightEvent) => any; - ondevicemotion: (ev: DeviceMotionEvent) => any; - ondeviceorientation: (ev: DeviceOrientationEvent) => any; - ondrag: (ev: DragEvent) => any; - ondragend: (ev: DragEvent) => any; - ondragenter: (ev: DragEvent) => any; - ondragleave: (ev: DragEvent) => any; - ondragover: (ev: DragEvent) => any; - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; - ondurationchange: (ev: Event) => any; - onemptied: (ev: Event) => any; - onended: (ev: MediaStreamErrorEvent) => any; + onabort: (this: this, ev: UIEvent) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; + onchange: (this: this, ev: Event) => any; + onclick: (this: this, ev: MouseEvent) => any; + oncompassneedscalibration: (this: this, ev: Event) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + ondevicelight: (this: this, ev: DeviceLightEvent) => any; + ondevicemotion: (this: this, ev: DeviceMotionEvent) => any; + ondeviceorientation: (this: this, ev: DeviceOrientationEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; + ondurationchange: (this: this, ev: Event) => any; + onemptied: (this: this, ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; onerror: ErrorEventHandler; - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; - onkeydown: (ev: KeyboardEvent) => any; - onkeypress: (ev: KeyboardEvent) => any; - onkeyup: (ev: KeyboardEvent) => any; - onload: (ev: Event) => any; - onloadeddata: (ev: Event) => any; - onloadedmetadata: (ev: Event) => any; - onloadstart: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onmousedown: (ev: MouseEvent) => any; - onmouseenter: (ev: MouseEvent) => any; - onmouseleave: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; - onmousewheel: (ev: WheelEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onpause: (ev: Event) => any; - onplay: (ev: Event) => any; - onplaying: (ev: Event) => any; - onpopstate: (ev: PopStateEvent) => any; - onprogress: (ev: ProgressEvent) => any; - onratechange: (ev: Event) => any; - onreadystatechange: (ev: ProgressEvent) => any; - onreset: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - onscroll: (ev: UIEvent) => any; - onseeked: (ev: Event) => any; - onseeking: (ev: Event) => any; - onselect: (ev: UIEvent) => any; - onstalled: (ev: Event) => any; - onstorage: (ev: StorageEvent) => any; - onsubmit: (ev: Event) => any; - onsuspend: (ev: Event) => any; - ontimeupdate: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; + onload: (this: this, ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmouseenter: (this: this, ev: MouseEvent) => any; + onmouseleave: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onpause: (this: this, ev: Event) => any; + onplay: (this: this, ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onpopstate: (this: this, ev: PopStateEvent) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onratechange: (this: this, ev: Event) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; + onreset: (this: this, ev: Event) => any; + onresize: (this: this, ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; + onseeked: (this: this, ev: Event) => any; + onseeking: (this: this, ev: Event) => any; + onselect: (this: this, ev: UIEvent) => any; + onstalled: (this: this, ev: Event) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onsubmit: (this: this, ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; ontouchstart: (ev: TouchEvent) => any; - onunload: (ev: Event) => any; - onvolumechange: (ev: Event) => any; - onwaiting: (ev: Event) => any; + onunload: (this: this, ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; readonly opener: Window; orientation: string | number; readonly outerHeight: number; @@ -17093,6 +17094,7 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window readonly top: Window; readonly window: Window; URL: typeof URL; + Blob: typeof Blob; alert(message?: any): void; blur(): void; cancelAnimationFrame(handle: number): void; @@ -17122,101 +17124,101 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint; webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint; webkitRequestAnimationFrame(callback: FrameRequestCallback): number; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "devicelight", listener: (ev: DeviceLightEvent) => any, useCapture?: boolean): void; - addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "compassneedscalibration", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "devicelight", listener: (this: this, ev: DeviceLightEvent) => any, useCapture?: boolean): void; + addEventListener(type: "devicemotion", listener: (this: this, ev: DeviceMotionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deviceorientation", listener: (this: this, ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (this: this, ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: Window; } @@ -17227,11 +17229,11 @@ declare var Window: { } interface Worker extends EventTarget, AbstractWorker { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; postMessage(message: any, ports?: any): void; terminate(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -17249,8 +17251,7 @@ declare var XMLDocument: { } interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { - msCaching: string; - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly response: any; readonly responseText: string; @@ -17261,6 +17262,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { timeout: number; readonly upload: XMLHttpRequestUpload; withCredentials: boolean; + msCaching?: string; abort(): void; getAllResponseHeaders(): string; getResponseHeader(header: string): string | null; @@ -17276,14 +17278,14 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { readonly LOADING: number; readonly OPENED: number; readonly UNSENT: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -17399,8 +17401,8 @@ declare var XSLTProcessor: { } interface AbstractWorker { - onerror: (ev: Event) => any; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + onerror: (this: this, ev: ErrorEvent) => any; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -17512,24 +17514,24 @@ interface GetSVGDocument { } interface GlobalEventHandlers { - onpointercancel: (ev: PointerEvent) => any; - onpointerdown: (ev: PointerEvent) => any; - onpointerenter: (ev: PointerEvent) => any; - onpointerleave: (ev: PointerEvent) => any; - onpointermove: (ev: PointerEvent) => any; - onpointerout: (ev: PointerEvent) => any; - onpointerover: (ev: PointerEvent) => any; - onpointerup: (ev: PointerEvent) => any; - onwheel: (ev: WheelEvent) => any; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + onpointercancel: (this: this, ev: PointerEvent) => any; + onpointerdown: (this: this, ev: PointerEvent) => any; + onpointerenter: (this: this, ev: PointerEvent) => any; + onpointerleave: (this: this, ev: PointerEvent) => any; + onpointermove: (this: this, ev: PointerEvent) => any; + onpointerout: (this: this, ev: PointerEvent) => any; + onpointerover: (this: this, ev: PointerEvent) => any; + onpointerup: (this: this, ev: PointerEvent) => any; + onwheel: (this: this, ev: WheelEvent) => any; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -17557,24 +17559,24 @@ interface LinkStyle { } interface MSBaseReader { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly result: any; abort(): void; readonly DONE: number; readonly EMPTY: number; readonly LOADING: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -17623,7 +17625,359 @@ interface NavigatorUserMedia { } interface NodeSelector { + querySelector(selectors: "a"): HTMLAnchorElement; + querySelector(selectors: "abbr"): HTMLElement; + querySelector(selectors: "acronym"): HTMLElement; + querySelector(selectors: "address"): HTMLElement; + querySelector(selectors: "applet"): HTMLAppletElement; + querySelector(selectors: "area"): HTMLAreaElement; + querySelector(selectors: "article"): HTMLElement; + querySelector(selectors: "aside"): HTMLElement; + querySelector(selectors: "audio"): HTMLAudioElement; + querySelector(selectors: "b"): HTMLElement; + querySelector(selectors: "base"): HTMLBaseElement; + querySelector(selectors: "basefont"): HTMLBaseFontElement; + querySelector(selectors: "bdo"): HTMLElement; + querySelector(selectors: "big"): HTMLElement; + querySelector(selectors: "blockquote"): HTMLQuoteElement; + querySelector(selectors: "body"): HTMLBodyElement; + querySelector(selectors: "br"): HTMLBRElement; + querySelector(selectors: "button"): HTMLButtonElement; + querySelector(selectors: "canvas"): HTMLCanvasElement; + querySelector(selectors: "caption"): HTMLTableCaptionElement; + querySelector(selectors: "center"): HTMLElement; + querySelector(selectors: "circle"): SVGCircleElement; + querySelector(selectors: "cite"): HTMLElement; + querySelector(selectors: "clippath"): SVGClipPathElement; + querySelector(selectors: "code"): HTMLElement; + querySelector(selectors: "col"): HTMLTableColElement; + querySelector(selectors: "colgroup"): HTMLTableColElement; + querySelector(selectors: "datalist"): HTMLDataListElement; + querySelector(selectors: "dd"): HTMLElement; + querySelector(selectors: "defs"): SVGDefsElement; + querySelector(selectors: "del"): HTMLModElement; + querySelector(selectors: "desc"): SVGDescElement; + querySelector(selectors: "dfn"): HTMLElement; + querySelector(selectors: "dir"): HTMLDirectoryElement; + querySelector(selectors: "div"): HTMLDivElement; + querySelector(selectors: "dl"): HTMLDListElement; + querySelector(selectors: "dt"): HTMLElement; + querySelector(selectors: "ellipse"): SVGEllipseElement; + querySelector(selectors: "em"): HTMLElement; + querySelector(selectors: "embed"): HTMLEmbedElement; + querySelector(selectors: "feblend"): SVGFEBlendElement; + querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement; + querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement; + querySelector(selectors: "fecomposite"): SVGFECompositeElement; + querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement; + querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement; + querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement; + querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement; + querySelector(selectors: "feflood"): SVGFEFloodElement; + querySelector(selectors: "fefunca"): SVGFEFuncAElement; + querySelector(selectors: "fefuncb"): SVGFEFuncBElement; + querySelector(selectors: "fefuncg"): SVGFEFuncGElement; + querySelector(selectors: "fefuncr"): SVGFEFuncRElement; + querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement; + querySelector(selectors: "feimage"): SVGFEImageElement; + querySelector(selectors: "femerge"): SVGFEMergeElement; + querySelector(selectors: "femergenode"): SVGFEMergeNodeElement; + querySelector(selectors: "femorphology"): SVGFEMorphologyElement; + querySelector(selectors: "feoffset"): SVGFEOffsetElement; + querySelector(selectors: "fepointlight"): SVGFEPointLightElement; + querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement; + querySelector(selectors: "fespotlight"): SVGFESpotLightElement; + querySelector(selectors: "fetile"): SVGFETileElement; + querySelector(selectors: "feturbulence"): SVGFETurbulenceElement; + querySelector(selectors: "fieldset"): HTMLFieldSetElement; + querySelector(selectors: "figcaption"): HTMLElement; + querySelector(selectors: "figure"): HTMLElement; + querySelector(selectors: "filter"): SVGFilterElement; + querySelector(selectors: "font"): HTMLFontElement; + querySelector(selectors: "footer"): HTMLElement; + querySelector(selectors: "foreignobject"): SVGForeignObjectElement; + querySelector(selectors: "form"): HTMLFormElement; + querySelector(selectors: "frame"): HTMLFrameElement; + querySelector(selectors: "frameset"): HTMLFrameSetElement; + querySelector(selectors: "g"): SVGGElement; + querySelector(selectors: "h1"): HTMLHeadingElement; + querySelector(selectors: "h2"): HTMLHeadingElement; + querySelector(selectors: "h3"): HTMLHeadingElement; + querySelector(selectors: "h4"): HTMLHeadingElement; + querySelector(selectors: "h5"): HTMLHeadingElement; + querySelector(selectors: "h6"): HTMLHeadingElement; + querySelector(selectors: "head"): HTMLHeadElement; + querySelector(selectors: "header"): HTMLElement; + querySelector(selectors: "hgroup"): HTMLElement; + querySelector(selectors: "hr"): HTMLHRElement; + querySelector(selectors: "html"): HTMLHtmlElement; + querySelector(selectors: "i"): HTMLElement; + querySelector(selectors: "iframe"): HTMLIFrameElement; + querySelector(selectors: "image"): SVGImageElement; + querySelector(selectors: "img"): HTMLImageElement; + querySelector(selectors: "input"): HTMLInputElement; + querySelector(selectors: "ins"): HTMLModElement; + querySelector(selectors: "isindex"): HTMLUnknownElement; + querySelector(selectors: "kbd"): HTMLElement; + querySelector(selectors: "keygen"): HTMLElement; + querySelector(selectors: "label"): HTMLLabelElement; + querySelector(selectors: "legend"): HTMLLegendElement; + querySelector(selectors: "li"): HTMLLIElement; + querySelector(selectors: "line"): SVGLineElement; + querySelector(selectors: "lineargradient"): SVGLinearGradientElement; + querySelector(selectors: "link"): HTMLLinkElement; + querySelector(selectors: "listing"): HTMLPreElement; + querySelector(selectors: "map"): HTMLMapElement; + querySelector(selectors: "mark"): HTMLElement; + querySelector(selectors: "marker"): SVGMarkerElement; + querySelector(selectors: "marquee"): HTMLMarqueeElement; + querySelector(selectors: "mask"): SVGMaskElement; + querySelector(selectors: "menu"): HTMLMenuElement; + querySelector(selectors: "meta"): HTMLMetaElement; + querySelector(selectors: "metadata"): SVGMetadataElement; + querySelector(selectors: "meter"): HTMLMeterElement; + querySelector(selectors: "nav"): HTMLElement; + querySelector(selectors: "nextid"): HTMLUnknownElement; + querySelector(selectors: "nobr"): HTMLElement; + querySelector(selectors: "noframes"): HTMLElement; + querySelector(selectors: "noscript"): HTMLElement; + querySelector(selectors: "object"): HTMLObjectElement; + querySelector(selectors: "ol"): HTMLOListElement; + querySelector(selectors: "optgroup"): HTMLOptGroupElement; + querySelector(selectors: "option"): HTMLOptionElement; + querySelector(selectors: "p"): HTMLParagraphElement; + querySelector(selectors: "param"): HTMLParamElement; + querySelector(selectors: "path"): SVGPathElement; + querySelector(selectors: "pattern"): SVGPatternElement; + querySelector(selectors: "picture"): HTMLPictureElement; + querySelector(selectors: "plaintext"): HTMLElement; + querySelector(selectors: "polygon"): SVGPolygonElement; + querySelector(selectors: "polyline"): SVGPolylineElement; + querySelector(selectors: "pre"): HTMLPreElement; + querySelector(selectors: "progress"): HTMLProgressElement; + querySelector(selectors: "q"): HTMLQuoteElement; + querySelector(selectors: "radialgradient"): SVGRadialGradientElement; + querySelector(selectors: "rect"): SVGRectElement; + querySelector(selectors: "rt"): HTMLElement; + querySelector(selectors: "ruby"): HTMLElement; + querySelector(selectors: "s"): HTMLElement; + querySelector(selectors: "samp"): HTMLElement; + querySelector(selectors: "script"): HTMLScriptElement; + querySelector(selectors: "section"): HTMLElement; + querySelector(selectors: "select"): HTMLSelectElement; + querySelector(selectors: "small"): HTMLElement; + querySelector(selectors: "source"): HTMLSourceElement; + querySelector(selectors: "span"): HTMLSpanElement; + querySelector(selectors: "stop"): SVGStopElement; + querySelector(selectors: "strike"): HTMLElement; + querySelector(selectors: "strong"): HTMLElement; + querySelector(selectors: "style"): HTMLStyleElement; + querySelector(selectors: "sub"): HTMLElement; + querySelector(selectors: "sup"): HTMLElement; + querySelector(selectors: "svg"): SVGSVGElement; + querySelector(selectors: "switch"): SVGSwitchElement; + querySelector(selectors: "symbol"): SVGSymbolElement; + querySelector(selectors: "table"): HTMLTableElement; + querySelector(selectors: "tbody"): HTMLTableSectionElement; + querySelector(selectors: "td"): HTMLTableDataCellElement; + querySelector(selectors: "template"): HTMLTemplateElement; + querySelector(selectors: "text"): SVGTextElement; + querySelector(selectors: "textpath"): SVGTextPathElement; + querySelector(selectors: "textarea"): HTMLTextAreaElement; + querySelector(selectors: "tfoot"): HTMLTableSectionElement; + querySelector(selectors: "th"): HTMLTableHeaderCellElement; + querySelector(selectors: "thead"): HTMLTableSectionElement; + querySelector(selectors: "title"): HTMLTitleElement; + querySelector(selectors: "tr"): HTMLTableRowElement; + querySelector(selectors: "track"): HTMLTrackElement; + querySelector(selectors: "tspan"): SVGTSpanElement; + querySelector(selectors: "tt"): HTMLElement; + querySelector(selectors: "u"): HTMLElement; + querySelector(selectors: "ul"): HTMLUListElement; + querySelector(selectors: "use"): SVGUseElement; + querySelector(selectors: "var"): HTMLElement; + querySelector(selectors: "video"): HTMLVideoElement; + querySelector(selectors: "view"): SVGViewElement; + querySelector(selectors: "wbr"): HTMLElement; + querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement; + querySelector(selectors: "xmp"): HTMLPreElement; querySelector(selectors: string): Element; + querySelectorAll(selectors: "a"): NodeListOf; + querySelectorAll(selectors: "abbr"): NodeListOf; + querySelectorAll(selectors: "acronym"): NodeListOf; + querySelectorAll(selectors: "address"): NodeListOf; + querySelectorAll(selectors: "applet"): NodeListOf; + querySelectorAll(selectors: "area"): NodeListOf; + querySelectorAll(selectors: "article"): NodeListOf; + querySelectorAll(selectors: "aside"): NodeListOf; + querySelectorAll(selectors: "audio"): NodeListOf; + querySelectorAll(selectors: "b"): NodeListOf; + querySelectorAll(selectors: "base"): NodeListOf; + querySelectorAll(selectors: "basefont"): NodeListOf; + querySelectorAll(selectors: "bdo"): NodeListOf; + querySelectorAll(selectors: "big"): NodeListOf; + querySelectorAll(selectors: "blockquote"): NodeListOf; + querySelectorAll(selectors: "body"): NodeListOf; + querySelectorAll(selectors: "br"): NodeListOf; + querySelectorAll(selectors: "button"): NodeListOf; + querySelectorAll(selectors: "canvas"): NodeListOf; + querySelectorAll(selectors: "caption"): NodeListOf; + querySelectorAll(selectors: "center"): NodeListOf; + querySelectorAll(selectors: "circle"): NodeListOf; + querySelectorAll(selectors: "cite"): NodeListOf; + querySelectorAll(selectors: "clippath"): NodeListOf; + querySelectorAll(selectors: "code"): NodeListOf; + querySelectorAll(selectors: "col"): NodeListOf; + querySelectorAll(selectors: "colgroup"): NodeListOf; + querySelectorAll(selectors: "datalist"): NodeListOf; + querySelectorAll(selectors: "dd"): NodeListOf; + querySelectorAll(selectors: "defs"): NodeListOf; + querySelectorAll(selectors: "del"): NodeListOf; + querySelectorAll(selectors: "desc"): NodeListOf; + querySelectorAll(selectors: "dfn"): NodeListOf; + querySelectorAll(selectors: "dir"): NodeListOf; + querySelectorAll(selectors: "div"): NodeListOf; + querySelectorAll(selectors: "dl"): NodeListOf; + querySelectorAll(selectors: "dt"): NodeListOf; + querySelectorAll(selectors: "ellipse"): NodeListOf; + querySelectorAll(selectors: "em"): NodeListOf; + querySelectorAll(selectors: "embed"): NodeListOf; + querySelectorAll(selectors: "feblend"): NodeListOf; + querySelectorAll(selectors: "fecolormatrix"): NodeListOf; + querySelectorAll(selectors: "fecomponenttransfer"): NodeListOf; + querySelectorAll(selectors: "fecomposite"): NodeListOf; + querySelectorAll(selectors: "feconvolvematrix"): NodeListOf; + querySelectorAll(selectors: "fediffuselighting"): NodeListOf; + querySelectorAll(selectors: "fedisplacementmap"): NodeListOf; + querySelectorAll(selectors: "fedistantlight"): NodeListOf; + querySelectorAll(selectors: "feflood"): NodeListOf; + querySelectorAll(selectors: "fefunca"): NodeListOf; + querySelectorAll(selectors: "fefuncb"): NodeListOf; + querySelectorAll(selectors: "fefuncg"): NodeListOf; + querySelectorAll(selectors: "fefuncr"): NodeListOf; + querySelectorAll(selectors: "fegaussianblur"): NodeListOf; + querySelectorAll(selectors: "feimage"): NodeListOf; + querySelectorAll(selectors: "femerge"): NodeListOf; + querySelectorAll(selectors: "femergenode"): NodeListOf; + querySelectorAll(selectors: "femorphology"): NodeListOf; + querySelectorAll(selectors: "feoffset"): NodeListOf; + querySelectorAll(selectors: "fepointlight"): NodeListOf; + querySelectorAll(selectors: "fespecularlighting"): NodeListOf; + querySelectorAll(selectors: "fespotlight"): NodeListOf; + querySelectorAll(selectors: "fetile"): NodeListOf; + querySelectorAll(selectors: "feturbulence"): NodeListOf; + querySelectorAll(selectors: "fieldset"): NodeListOf; + querySelectorAll(selectors: "figcaption"): NodeListOf; + querySelectorAll(selectors: "figure"): NodeListOf; + querySelectorAll(selectors: "filter"): NodeListOf; + querySelectorAll(selectors: "font"): NodeListOf; + querySelectorAll(selectors: "footer"): NodeListOf; + querySelectorAll(selectors: "foreignobject"): NodeListOf; + querySelectorAll(selectors: "form"): NodeListOf; + querySelectorAll(selectors: "frame"): NodeListOf; + querySelectorAll(selectors: "frameset"): NodeListOf; + querySelectorAll(selectors: "g"): NodeListOf; + querySelectorAll(selectors: "h1"): NodeListOf; + querySelectorAll(selectors: "h2"): NodeListOf; + querySelectorAll(selectors: "h3"): NodeListOf; + querySelectorAll(selectors: "h4"): NodeListOf; + querySelectorAll(selectors: "h5"): NodeListOf; + querySelectorAll(selectors: "h6"): NodeListOf; + querySelectorAll(selectors: "head"): NodeListOf; + querySelectorAll(selectors: "header"): NodeListOf; + querySelectorAll(selectors: "hgroup"): NodeListOf; + querySelectorAll(selectors: "hr"): NodeListOf; + querySelectorAll(selectors: "html"): NodeListOf; + querySelectorAll(selectors: "i"): NodeListOf; + querySelectorAll(selectors: "iframe"): NodeListOf; + querySelectorAll(selectors: "image"): NodeListOf; + querySelectorAll(selectors: "img"): NodeListOf; + querySelectorAll(selectors: "input"): NodeListOf; + querySelectorAll(selectors: "ins"): NodeListOf; + querySelectorAll(selectors: "isindex"): NodeListOf; + querySelectorAll(selectors: "kbd"): NodeListOf; + querySelectorAll(selectors: "keygen"): NodeListOf; + querySelectorAll(selectors: "label"): NodeListOf; + querySelectorAll(selectors: "legend"): NodeListOf; + querySelectorAll(selectors: "li"): NodeListOf; + querySelectorAll(selectors: "line"): NodeListOf; + querySelectorAll(selectors: "lineargradient"): NodeListOf; + querySelectorAll(selectors: "link"): NodeListOf; + querySelectorAll(selectors: "listing"): NodeListOf; + querySelectorAll(selectors: "map"): NodeListOf; + querySelectorAll(selectors: "mark"): NodeListOf; + querySelectorAll(selectors: "marker"): NodeListOf; + querySelectorAll(selectors: "marquee"): NodeListOf; + querySelectorAll(selectors: "mask"): NodeListOf; + querySelectorAll(selectors: "menu"): NodeListOf; + querySelectorAll(selectors: "meta"): NodeListOf; + querySelectorAll(selectors: "metadata"): NodeListOf; + querySelectorAll(selectors: "meter"): NodeListOf; + querySelectorAll(selectors: "nav"): NodeListOf; + querySelectorAll(selectors: "nextid"): NodeListOf; + querySelectorAll(selectors: "nobr"): NodeListOf; + querySelectorAll(selectors: "noframes"): NodeListOf; + querySelectorAll(selectors: "noscript"): NodeListOf; + querySelectorAll(selectors: "object"): NodeListOf; + querySelectorAll(selectors: "ol"): NodeListOf; + querySelectorAll(selectors: "optgroup"): NodeListOf; + querySelectorAll(selectors: "option"): NodeListOf; + querySelectorAll(selectors: "p"): NodeListOf; + querySelectorAll(selectors: "param"): NodeListOf; + querySelectorAll(selectors: "path"): NodeListOf; + querySelectorAll(selectors: "pattern"): NodeListOf; + querySelectorAll(selectors: "picture"): NodeListOf; + querySelectorAll(selectors: "plaintext"): NodeListOf; + querySelectorAll(selectors: "polygon"): NodeListOf; + querySelectorAll(selectors: "polyline"): NodeListOf; + querySelectorAll(selectors: "pre"): NodeListOf; + querySelectorAll(selectors: "progress"): NodeListOf; + querySelectorAll(selectors: "q"): NodeListOf; + querySelectorAll(selectors: "radialgradient"): NodeListOf; + querySelectorAll(selectors: "rect"): NodeListOf; + querySelectorAll(selectors: "rt"): NodeListOf; + querySelectorAll(selectors: "ruby"): NodeListOf; + querySelectorAll(selectors: "s"): NodeListOf; + querySelectorAll(selectors: "samp"): NodeListOf; + querySelectorAll(selectors: "script"): NodeListOf; + querySelectorAll(selectors: "section"): NodeListOf; + querySelectorAll(selectors: "select"): NodeListOf; + querySelectorAll(selectors: "small"): NodeListOf; + querySelectorAll(selectors: "source"): NodeListOf; + querySelectorAll(selectors: "span"): NodeListOf; + querySelectorAll(selectors: "stop"): NodeListOf; + querySelectorAll(selectors: "strike"): NodeListOf; + querySelectorAll(selectors: "strong"): NodeListOf; + querySelectorAll(selectors: "style"): NodeListOf; + querySelectorAll(selectors: "sub"): NodeListOf; + querySelectorAll(selectors: "sup"): NodeListOf; + querySelectorAll(selectors: "svg"): NodeListOf; + querySelectorAll(selectors: "switch"): NodeListOf; + querySelectorAll(selectors: "symbol"): NodeListOf; + querySelectorAll(selectors: "table"): NodeListOf; + querySelectorAll(selectors: "tbody"): NodeListOf; + querySelectorAll(selectors: "td"): NodeListOf; + querySelectorAll(selectors: "template"): NodeListOf; + querySelectorAll(selectors: "text"): NodeListOf; + querySelectorAll(selectors: "textpath"): NodeListOf; + querySelectorAll(selectors: "textarea"): NodeListOf; + querySelectorAll(selectors: "tfoot"): NodeListOf; + querySelectorAll(selectors: "th"): NodeListOf; + querySelectorAll(selectors: "thead"): NodeListOf; + querySelectorAll(selectors: "title"): NodeListOf; + querySelectorAll(selectors: "tr"): NodeListOf; + querySelectorAll(selectors: "track"): NodeListOf; + querySelectorAll(selectors: "tspan"): NodeListOf; + querySelectorAll(selectors: "tt"): NodeListOf; + querySelectorAll(selectors: "u"): NodeListOf; + querySelectorAll(selectors: "ul"): NodeListOf; + querySelectorAll(selectors: "use"): NodeListOf; + querySelectorAll(selectors: "var"): NodeListOf; + querySelectorAll(selectors: "video"): NodeListOf; + querySelectorAll(selectors: "view"): NodeListOf; + querySelectorAll(selectors: "wbr"): NodeListOf; + querySelectorAll(selectors: "x-ms-webview"): NodeListOf; + querySelectorAll(selectors: "xmp"): NodeListOf; querySelectorAll(selectors: string): NodeListOf; } @@ -17711,30 +18065,33 @@ interface WindowSessionStorage { interface WindowTimers extends Object, WindowTimersExtension { clearInterval(handle: number): void; clearTimeout(handle: number): void; + setInterval(handler: (...args: any[]) => void, timeout: number): number; setInterval(handler: any, timeout?: any, ...args: any[]): number; + setTimeout(handler: (...args: any[]) => void, timeout: number): number; setTimeout(handler: any, timeout?: any, ...args: any[]): number; } interface WindowTimersExtension { clearImmediate(handle: number): void; - setImmediate(expression: any, ...args: any[]): number; + setImmediate(handler: (...args: any[]) => void): number; + setImmediate(handler: any, ...args: any[]): number; } interface XMLHttpRequestEventTarget { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - ontimeout: (ev: ProgressEvent) => any; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + ontimeout: (this: this, ev: ProgressEvent) => any; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -17746,6 +18103,13 @@ interface StorageEventInit extends EventInit { storageArea?: Storage; } +interface Canvas2DContextAttributes { + alpha?: boolean; + willReadFrequently?: boolean; + storage?: boolean; + [attribute: string]: boolean | string | undefined; +} + interface NodeListOf extends NodeList { length: number; item(index: number): TNode; @@ -17795,6 +18159,177 @@ interface ClipboardEventInit extends EventInit { interface IDBArrayKey extends Array { } +interface RsaKeyGenParams extends Algorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyGenParams extends RsaKeyGenParams { + hash: AlgorithmIdentifier; +} + +interface RsaKeyAlgorithm extends KeyAlgorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { + hash: AlgorithmIdentifier; +} + +interface RsaHashedImportParams { + hash: AlgorithmIdentifier; +} + +interface RsaPssParams { + saltLength: number; +} + +interface RsaOaepParams extends Algorithm { + label?: BufferSource; +} + +interface EcdsaParams extends Algorithm { + hash: AlgorithmIdentifier; +} + +interface EcKeyGenParams extends Algorithm { + typedCurve: string; +} + +interface EcKeyAlgorithm extends KeyAlgorithm { + typedCurve: string; +} + +interface EcKeyImportParams { + namedCurve: string; +} + +interface EcdhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface AesCtrParams extends Algorithm { + counter: BufferSource; + length: number; +} + +interface AesKeyAlgorithm extends KeyAlgorithm { + length: number; +} + +interface AesKeyGenParams extends Algorithm { + length: number; +} + +interface AesDerivedKeyParams extends Algorithm { + length: number; +} + +interface AesCbcParams extends Algorithm { + iv: BufferSource; +} + +interface AesCmacParams extends Algorithm { + length: number; +} + +interface AesGcmParams extends Algorithm { + iv: BufferSource; + additionalData?: BufferSource; + tagLength?: number; +} + +interface AesCfbParams extends Algorithm { + iv: BufferSource; +} + +interface HmacImportParams extends Algorithm { + hash?: AlgorithmIdentifier; + length?: number; +} + +interface HmacKeyAlgorithm extends KeyAlgorithm { + hash: AlgorithmIdentifier; + length: number; +} + +interface HmacKeyGenParams extends Algorithm { + hash: AlgorithmIdentifier; + length?: number; +} + +interface DhKeyGenParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyAlgorithm extends KeyAlgorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface DhImportKeyParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface ConcatParams extends Algorithm { + hash?: AlgorithmIdentifier; + algorithmId: Uint8Array; + partyUInfo: Uint8Array; + partyVInfo: Uint8Array; + publicInfo?: Uint8Array; + privateInfo?: Uint8Array; +} + +interface HkdfCtrParams extends Algorithm { + hash: AlgorithmIdentifier; + label: BufferSource; + context: BufferSource; +} + +interface Pbkdf2Params extends Algorithm { + salt: BufferSource; + iterations: number; + hash: AlgorithmIdentifier; +} + +interface RsaOtherPrimesInfo { + r: string; + d: string; + t: string; +} + +interface JsonWebKey { + kty: string; + use?: string; + key_ops?: string[]; + alg?: string; + kid?: string; + x5u?: string; + x5c?: string; + x5t?: string; + ext?: boolean; + crv?: string; + x?: string; + y?: string; + d?: string; + n?: string; + e?: string; + p?: string; + q?: string; + dp?: string; + dq?: string; + qi?: string; + oth?: RsaOtherPrimesInfo[]; + k?: string; +} + declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject; interface ErrorEventHandler { @@ -17868,97 +18403,97 @@ declare var msCredentials: MSCredentials; declare var name: string; declare var navigator: Navigator; declare var offscreenBuffering: string | boolean; -declare var onabort: (ev: Event) => any; -declare var onafterprint: (ev: Event) => any; -declare var onbeforeprint: (ev: Event) => any; -declare var onbeforeunload: (ev: BeforeUnloadEvent) => any; -declare var onblur: (ev: FocusEvent) => any; -declare var oncanplay: (ev: Event) => any; -declare var oncanplaythrough: (ev: Event) => any; -declare var onchange: (ev: Event) => any; -declare var onclick: (ev: MouseEvent) => any; -declare var oncompassneedscalibration: (ev: Event) => any; -declare var oncontextmenu: (ev: PointerEvent) => any; -declare var ondblclick: (ev: MouseEvent) => any; -declare var ondevicelight: (ev: DeviceLightEvent) => any; -declare var ondevicemotion: (ev: DeviceMotionEvent) => any; -declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any; -declare var ondrag: (ev: DragEvent) => any; -declare var ondragend: (ev: DragEvent) => any; -declare var ondragenter: (ev: DragEvent) => any; -declare var ondragleave: (ev: DragEvent) => any; -declare var ondragover: (ev: DragEvent) => any; -declare var ondragstart: (ev: DragEvent) => any; -declare var ondrop: (ev: DragEvent) => any; -declare var ondurationchange: (ev: Event) => any; -declare var onemptied: (ev: Event) => any; -declare var onended: (ev: MediaStreamErrorEvent) => any; +declare var onabort: (this: Window, ev: UIEvent) => any; +declare var onafterprint: (this: Window, ev: Event) => any; +declare var onbeforeprint: (this: Window, ev: Event) => any; +declare var onbeforeunload: (this: Window, ev: BeforeUnloadEvent) => any; +declare var onblur: (this: Window, ev: FocusEvent) => any; +declare var oncanplay: (this: Window, ev: Event) => any; +declare var oncanplaythrough: (this: Window, ev: Event) => any; +declare var onchange: (this: Window, ev: Event) => any; +declare var onclick: (this: Window, ev: MouseEvent) => any; +declare var oncompassneedscalibration: (this: Window, ev: Event) => any; +declare var oncontextmenu: (this: Window, ev: PointerEvent) => any; +declare var ondblclick: (this: Window, ev: MouseEvent) => any; +declare var ondevicelight: (this: Window, ev: DeviceLightEvent) => any; +declare var ondevicemotion: (this: Window, ev: DeviceMotionEvent) => any; +declare var ondeviceorientation: (this: Window, ev: DeviceOrientationEvent) => any; +declare var ondrag: (this: Window, ev: DragEvent) => any; +declare var ondragend: (this: Window, ev: DragEvent) => any; +declare var ondragenter: (this: Window, ev: DragEvent) => any; +declare var ondragleave: (this: Window, ev: DragEvent) => any; +declare var ondragover: (this: Window, ev: DragEvent) => any; +declare var ondragstart: (this: Window, ev: DragEvent) => any; +declare var ondrop: (this: Window, ev: DragEvent) => any; +declare var ondurationchange: (this: Window, ev: Event) => any; +declare var onemptied: (this: Window, ev: Event) => any; +declare var onended: (this: Window, ev: MediaStreamErrorEvent) => any; declare var onerror: ErrorEventHandler; -declare var onfocus: (ev: FocusEvent) => any; -declare var onhashchange: (ev: HashChangeEvent) => any; -declare var oninput: (ev: Event) => any; -declare var oninvalid: (ev: Event) => any; -declare var onkeydown: (ev: KeyboardEvent) => any; -declare var onkeypress: (ev: KeyboardEvent) => any; -declare var onkeyup: (ev: KeyboardEvent) => any; -declare var onload: (ev: Event) => any; -declare var onloadeddata: (ev: Event) => any; -declare var onloadedmetadata: (ev: Event) => any; -declare var onloadstart: (ev: Event) => any; -declare var onmessage: (ev: MessageEvent) => any; -declare var onmousedown: (ev: MouseEvent) => any; -declare var onmouseenter: (ev: MouseEvent) => any; -declare var onmouseleave: (ev: MouseEvent) => any; -declare var onmousemove: (ev: MouseEvent) => any; -declare var onmouseout: (ev: MouseEvent) => any; -declare var onmouseover: (ev: MouseEvent) => any; -declare var onmouseup: (ev: MouseEvent) => any; -declare var onmousewheel: (ev: WheelEvent) => any; -declare var onmsgesturechange: (ev: MSGestureEvent) => any; -declare var onmsgesturedoubletap: (ev: MSGestureEvent) => any; -declare var onmsgestureend: (ev: MSGestureEvent) => any; -declare var onmsgesturehold: (ev: MSGestureEvent) => any; -declare var onmsgesturestart: (ev: MSGestureEvent) => any; -declare var onmsgesturetap: (ev: MSGestureEvent) => any; -declare var onmsinertiastart: (ev: MSGestureEvent) => any; -declare var onmspointercancel: (ev: MSPointerEvent) => any; -declare var onmspointerdown: (ev: MSPointerEvent) => any; -declare var onmspointerenter: (ev: MSPointerEvent) => any; -declare var onmspointerleave: (ev: MSPointerEvent) => any; -declare var onmspointermove: (ev: MSPointerEvent) => any; -declare var onmspointerout: (ev: MSPointerEvent) => any; -declare var onmspointerover: (ev: MSPointerEvent) => any; -declare var onmspointerup: (ev: MSPointerEvent) => any; -declare var onoffline: (ev: Event) => any; -declare var ononline: (ev: Event) => any; -declare var onorientationchange: (ev: Event) => any; -declare var onpagehide: (ev: PageTransitionEvent) => any; -declare var onpageshow: (ev: PageTransitionEvent) => any; -declare var onpause: (ev: Event) => any; -declare var onplay: (ev: Event) => any; -declare var onplaying: (ev: Event) => any; -declare var onpopstate: (ev: PopStateEvent) => any; -declare var onprogress: (ev: ProgressEvent) => any; -declare var onratechange: (ev: Event) => any; -declare var onreadystatechange: (ev: ProgressEvent) => any; -declare var onreset: (ev: Event) => any; -declare var onresize: (ev: UIEvent) => any; -declare var onscroll: (ev: UIEvent) => any; -declare var onseeked: (ev: Event) => any; -declare var onseeking: (ev: Event) => any; -declare var onselect: (ev: UIEvent) => any; -declare var onstalled: (ev: Event) => any; -declare var onstorage: (ev: StorageEvent) => any; -declare var onsubmit: (ev: Event) => any; -declare var onsuspend: (ev: Event) => any; -declare var ontimeupdate: (ev: Event) => any; +declare var onfocus: (this: Window, ev: FocusEvent) => any; +declare var onhashchange: (this: Window, ev: HashChangeEvent) => any; +declare var oninput: (this: Window, ev: Event) => any; +declare var oninvalid: (this: Window, ev: Event) => any; +declare var onkeydown: (this: Window, ev: KeyboardEvent) => any; +declare var onkeypress: (this: Window, ev: KeyboardEvent) => any; +declare var onkeyup: (this: Window, ev: KeyboardEvent) => any; +declare var onload: (this: Window, ev: Event) => any; +declare var onloadeddata: (this: Window, ev: Event) => any; +declare var onloadedmetadata: (this: Window, ev: Event) => any; +declare var onloadstart: (this: Window, ev: Event) => any; +declare var onmessage: (this: Window, ev: MessageEvent) => any; +declare var onmousedown: (this: Window, ev: MouseEvent) => any; +declare var onmouseenter: (this: Window, ev: MouseEvent) => any; +declare var onmouseleave: (this: Window, ev: MouseEvent) => any; +declare var onmousemove: (this: Window, ev: MouseEvent) => any; +declare var onmouseout: (this: Window, ev: MouseEvent) => any; +declare var onmouseover: (this: Window, ev: MouseEvent) => any; +declare var onmouseup: (this: Window, ev: MouseEvent) => any; +declare var onmousewheel: (this: Window, ev: WheelEvent) => any; +declare var onmsgesturechange: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturedoubletap: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgestureend: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturehold: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturestart: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturetap: (this: Window, ev: MSGestureEvent) => any; +declare var onmsinertiastart: (this: Window, ev: MSGestureEvent) => any; +declare var onmspointercancel: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerdown: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerenter: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerleave: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointermove: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerout: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerover: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerup: (this: Window, ev: MSPointerEvent) => any; +declare var onoffline: (this: Window, ev: Event) => any; +declare var ononline: (this: Window, ev: Event) => any; +declare var onorientationchange: (this: Window, ev: Event) => any; +declare var onpagehide: (this: Window, ev: PageTransitionEvent) => any; +declare var onpageshow: (this: Window, ev: PageTransitionEvent) => any; +declare var onpause: (this: Window, ev: Event) => any; +declare var onplay: (this: Window, ev: Event) => any; +declare var onplaying: (this: Window, ev: Event) => any; +declare var onpopstate: (this: Window, ev: PopStateEvent) => any; +declare var onprogress: (this: Window, ev: ProgressEvent) => any; +declare var onratechange: (this: Window, ev: Event) => any; +declare var onreadystatechange: (this: Window, ev: ProgressEvent) => any; +declare var onreset: (this: Window, ev: Event) => any; +declare var onresize: (this: Window, ev: UIEvent) => any; +declare var onscroll: (this: Window, ev: UIEvent) => any; +declare var onseeked: (this: Window, ev: Event) => any; +declare var onseeking: (this: Window, ev: Event) => any; +declare var onselect: (this: Window, ev: UIEvent) => any; +declare var onstalled: (this: Window, ev: Event) => any; +declare var onstorage: (this: Window, ev: StorageEvent) => any; +declare var onsubmit: (this: Window, ev: Event) => any; +declare var onsuspend: (this: Window, ev: Event) => any; +declare var ontimeupdate: (this: Window, ev: Event) => any; declare var ontouchcancel: (ev: TouchEvent) => any; declare var ontouchend: (ev: TouchEvent) => any; declare var ontouchmove: (ev: TouchEvent) => any; declare var ontouchstart: (ev: TouchEvent) => any; -declare var onunload: (ev: Event) => any; -declare var onvolumechange: (ev: Event) => any; -declare var onwaiting: (ev: Event) => any; +declare var onunload: (this: Window, ev: Event) => any; +declare var onvolumechange: (this: Window, ev: Event) => any; +declare var onwaiting: (this: Window, ev: Event) => any; declare var opener: Window; declare var orientation: string | number; declare var outerHeight: number; @@ -18018,120 +18553,123 @@ declare function dispatchEvent(evt: Event): boolean; declare function removeEventListener(type: string, listener?: EventListenerOrEventListenerObject, useCapture?: boolean): void; declare function clearInterval(handle: number): void; declare function clearTimeout(handle: number): void; +declare function setInterval(handler: (...args: any[]) => void, timeout: number): number; declare function setInterval(handler: any, timeout?: any, ...args: any[]): number; +declare function setTimeout(handler: (...args: any[]) => void, timeout: number): number; declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number; declare function clearImmediate(handle: number): void; -declare function setImmediate(expression: any, ...args: any[]): number; +declare function setImmediate(handler: (...args: any[]) => void): number; +declare function setImmediate(handler: any, ...args: any[]): number; declare var sessionStorage: Storage; declare var localStorage: Storage; declare var console: Console; -declare var onpointercancel: (ev: PointerEvent) => any; -declare var onpointerdown: (ev: PointerEvent) => any; -declare var onpointerenter: (ev: PointerEvent) => any; -declare var onpointerleave: (ev: PointerEvent) => any; -declare var onpointermove: (ev: PointerEvent) => any; -declare var onpointerout: (ev: PointerEvent) => any; -declare var onpointerover: (ev: PointerEvent) => any; -declare var onpointerup: (ev: PointerEvent) => any; -declare var onwheel: (ev: WheelEvent) => any; +declare var onpointercancel: (this: Window, ev: PointerEvent) => any; +declare var onpointerdown: (this: Window, ev: PointerEvent) => any; +declare var onpointerenter: (this: Window, ev: PointerEvent) => any; +declare var onpointerleave: (this: Window, ev: PointerEvent) => any; +declare var onpointermove: (this: Window, ev: PointerEvent) => any; +declare var onpointerout: (this: Window, ev: PointerEvent) => any; +declare var onpointerover: (this: Window, ev: PointerEvent) => any; +declare var onpointerup: (this: Window, ev: PointerEvent) => any; +declare var onwheel: (this: Window, ev: WheelEvent) => any; declare var indexedDB: IDBFactory; declare function atob(encodedString: string): string; declare function btoa(rawString: string): string; -declare function addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "devicelight", listener: (ev: DeviceLightEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureChange", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureDoubleTap", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureEnd", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureHold", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureStart", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureTap", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSInertiaStart", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerCancel", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerDown", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerEnter", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerLeave", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerMove", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerOut", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerOver", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerUp", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "abort", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "afterprint", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "beforeprint", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "beforeunload", listener: (this: Window, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "blur", listener: (this: Window, ev: FocusEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "canplay", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "canplaythrough", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "change", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "click", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "compassneedscalibration", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "contextmenu", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dblclick", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "devicelight", listener: (this: Window, ev: DeviceLightEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "devicemotion", listener: (this: Window, ev: DeviceMotionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "deviceorientation", listener: (this: Window, ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "drag", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragend", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragenter", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragleave", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragover", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragstart", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "drop", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "durationchange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "emptied", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "ended", listener: (this: Window, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "focus", listener: (this: Window, ev: FocusEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "hashchange", listener: (this: Window, ev: HashChangeEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "input", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "invalid", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keydown", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keypress", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keyup", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "load", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadeddata", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadedmetadata", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadstart", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "message", listener: (this: Window, ev: MessageEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousedown", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseenter", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseleave", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousemove", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseout", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseover", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseup", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousewheel", listener: (this: Window, ev: WheelEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "offline", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "online", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "orientationchange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pagehide", listener: (this: Window, ev: PageTransitionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pageshow", listener: (this: Window, ev: PageTransitionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pause", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "play", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "playing", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointercancel", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerdown", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerenter", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerleave", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointermove", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerout", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerover", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerup", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "popstate", listener: (this: Window, ev: PopStateEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "progress", listener: (this: Window, ev: ProgressEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "ratechange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "readystatechange", listener: (this: Window, ev: ProgressEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "reset", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "resize", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "scroll", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "seeked", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "seeking", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "select", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "stalled", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "storage", listener: (this: Window, ev: StorageEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "submit", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "suspend", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "timeupdate", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "unload", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "volumechange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "waiting", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "wheel", listener: (this: Window, ev: WheelEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; type AAGUID = string; type AlgorithmIdentifier = string | Algorithm; @@ -18165,6 +18703,8 @@ type RTCIceGatherCandidate = RTCIceCandidate | RTCIceCandidateComplete; type RTCTransport = RTCDtlsTransport | RTCSrtpSdesTransport; type payloadtype = number; type IDBValidKey = number | string | Date | IDBArrayKey; +type BufferSource = ArrayBuffer | ArrayBufferView; +type MouseWheelEvent = WheelEvent; ///////////////////////////// /// WorkerGlobalScope APIs ///////////////////////////// @@ -18448,3 +18988,16 @@ interface VBArrayConstructor { } declare var VBArray: VBArrayConstructor; + +/** + * Automation date (VT_DATE) + */ +interface VarDate { } + +interface DateConstructor { + new (vd: VarDate): Date; +} + +interface Date { + getVarDate: () => VarDate; +} diff --git a/lib/lib.dom.d.ts b/lib/lib.dom.d.ts index 673bd34ee3c..ec23413c089 100644 --- a/lib/lib.dom.d.ts +++ b/lib/lib.dom.d.ts @@ -20,7 +20,7 @@ and limitations under the License. ///////////////////////////// interface Algorithm { - name?: string; + name: string; } interface AriaRequestEventInit extends EventInit { @@ -867,6 +867,7 @@ interface UIEventInit extends EventInit { } interface WebGLContextAttributes { + failIfMajorPerformanceCaveat?: boolean; alpha?: boolean; depth?: boolean; stencil?: boolean; @@ -932,14 +933,14 @@ declare var AnimationEvent: { } interface ApplicationCache extends EventTarget { - oncached: (ev: Event) => any; - onchecking: (ev: Event) => any; - ondownloading: (ev: Event) => any; - onerror: (ev: Event) => any; - onnoupdate: (ev: Event) => any; - onobsolete: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - onupdateready: (ev: Event) => any; + oncached: (this: this, ev: Event) => any; + onchecking: (this: this, ev: Event) => any; + ondownloading: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onnoupdate: (this: this, ev: Event) => any; + onobsolete: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onupdateready: (this: this, ev: Event) => any; readonly status: number; abort(): void; swapCache(): void; @@ -950,14 +951,14 @@ interface ApplicationCache extends EventTarget { readonly OBSOLETE: number; readonly UNCACHED: number; readonly UPDATEREADY: number; - addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cached", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "checking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "downloading", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "noupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "obsolete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "updateready", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -1016,11 +1017,11 @@ interface AudioBufferSourceNode extends AudioNode { loop: boolean; loopEnd: number; loopStart: number; - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; readonly playbackRate: AudioParam; start(when?: number, offset?: number, duration?: number): void; stop(when?: number): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -1144,14 +1145,14 @@ declare var AudioTrack: { interface AudioTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; - onchange: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + onchange: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; 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; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: AudioTrack; } @@ -2426,294 +2427,294 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Fires when the user aborts the download. * @param ev The event. */ - onabort: (ev: Event) => any; + onabort: (this: this, ev: UIEvent) => any; /** * Fires when the object is set as the active element. * @param ev The event. */ - onactivate: (ev: UIEvent) => any; + onactivate: (this: this, ev: UIEvent) => any; /** * Fires immediately before the object is set as the active element. * @param ev The event. */ - onbeforeactivate: (ev: UIEvent) => any; + onbeforeactivate: (this: this, ev: UIEvent) => any; /** * Fires immediately before the activeElement is changed from the current object to another object in the parent document. * @param ev The event. */ - onbeforedeactivate: (ev: UIEvent) => any; + onbeforedeactivate: (this: this, ev: UIEvent) => any; /** * Fires when the object loses the input focus. * @param ev The focus event. */ - onblur: (ev: FocusEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; /** * Occurs when playback is possible, but would require further buffering. * @param ev The event. */ - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; /** * Fires when the contents of the object or selection have changed. * @param ev The event. */ - onchange: (ev: Event) => any; + onchange: (this: this, ev: Event) => any; /** * Fires when the user clicks the left mouse button on the object * @param ev The mouse event. */ - onclick: (ev: MouseEvent) => any; + onclick: (this: this, ev: MouseEvent) => any; /** * Fires when the user clicks the right mouse button in the client area, opening the context menu. * @param ev The mouse event. */ - oncontextmenu: (ev: PointerEvent) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; /** * Fires when the user double-clicks the object. * @param ev The mouse event. */ - ondblclick: (ev: MouseEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; /** * Fires when the activeElement is changed from the current object to another object in the parent document. * @param ev The UI Event */ - ondeactivate: (ev: UIEvent) => any; + ondeactivate: (this: this, ev: UIEvent) => any; /** * Fires on the source object continuously during a drag operation. * @param ev The event. */ - ondrag: (ev: DragEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; /** * Fires on the source object when the user releases the mouse at the close of a drag operation. * @param ev The event. */ - ondragend: (ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; /** * Fires on the target element when the user drags the object to a valid drop target. * @param ev The drag event. */ - ondragenter: (ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; /** * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation. * @param ev The drag event. */ - ondragleave: (ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; /** * Fires on the target element continuously while the user drags the object over a valid drop target. * @param ev The event. */ - ondragover: (ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; /** * Fires on the source object when the user starts to drag a text selection or selected object. * @param ev The event. */ - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; /** * Occurs when the duration attribute is updated. * @param ev The event. */ - ondurationchange: (ev: Event) => any; + ondurationchange: (this: this, ev: Event) => any; /** * Occurs when the media element is reset to its initial state. * @param ev The event. */ - onemptied: (ev: Event) => any; + onemptied: (this: this, ev: Event) => any; /** * Occurs when the end of playback is reached. * @param ev The event */ - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; /** * Fires when an error occurs during object loading. * @param ev The event. */ - onerror: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; /** * Fires when the object receives focus. * @param ev The event. */ - onfocus: (ev: FocusEvent) => any; - onfullscreenchange: (ev: Event) => any; - onfullscreenerror: (ev: Event) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onfullscreenchange: (this: this, ev: Event) => any; + onfullscreenerror: (this: this, ev: Event) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; /** * Fires when the user presses a key. * @param ev The keyboard event */ - onkeydown: (ev: KeyboardEvent) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; /** * Fires when the user presses an alphanumeric key. * @param ev The event. */ - onkeypress: (ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; /** * Fires when the user releases a key. * @param ev The keyboard event */ - onkeyup: (ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; /** * Fires immediately after the browser loads the object. * @param ev The event. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; /** * Occurs when media data is loaded at the current playback position. * @param ev The event. */ - onloadeddata: (ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; /** * Occurs when the duration and dimensions of the media have been determined. * @param ev The event. */ - onloadedmetadata: (ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; /** * Occurs when Internet Explorer begins looking for media data. * @param ev The event. */ - onloadstart: (ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; /** * Fires when the user clicks the object with either mouse button. * @param ev The mouse event. */ - onmousedown: (ev: MouseEvent) => any; + onmousedown: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse over the object. * @param ev The mouse event. */ - onmousemove: (ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse pointer outside the boundaries of the object. * @param ev The mouse event. */ - onmouseout: (ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse pointer into the object. * @param ev The mouse event. */ - onmouseover: (ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; /** * Fires when the user releases a mouse button while the mouse is over the object. * @param ev The mouse event. */ - onmouseup: (ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; /** * Fires when the wheel button is rotated. * @param ev The mouse event */ - onmousewheel: (ev: WheelEvent) => any; - onmscontentzoom: (ev: UIEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmscontentzoom: (this: this, ev: UIEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmsmanipulationstatechanged: (this: this, ev: MSManipulationEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; /** * Occurs when an item is removed from a Jump List of a webpage running in Site Mode. * @param ev The event. */ - onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any; + onmssitemodejumplistitemremoved: (this: this, ev: MSSiteModeEvent) => any; /** * Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode. * @param ev The event. */ - onmsthumbnailclick: (ev: MSSiteModeEvent) => any; + onmsthumbnailclick: (this: this, ev: MSSiteModeEvent) => any; /** * Occurs when playback is paused. * @param ev The event. */ - onpause: (ev: Event) => any; + onpause: (this: this, ev: Event) => any; /** * Occurs when the play method is requested. * @param ev The event. */ - onplay: (ev: Event) => any; + onplay: (this: this, ev: Event) => any; /** * Occurs when the audio or video has started playing. * @param ev The event. */ - onplaying: (ev: Event) => any; - onpointerlockchange: (ev: Event) => any; - onpointerlockerror: (ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onpointerlockchange: (this: this, ev: Event) => any; + onpointerlockerror: (this: this, ev: Event) => any; /** * Occurs to indicate progress while downloading media data. * @param ev The event. */ - onprogress: (ev: ProgressEvent) => any; + onprogress: (this: this, ev: ProgressEvent) => any; /** * Occurs when the playback rate is increased or decreased. * @param ev The event. */ - onratechange: (ev: Event) => any; + onratechange: (this: this, ev: Event) => any; /** * Fires when the state of the object has changed. * @param ev The event */ - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; /** * Fires when the user resets a form. * @param ev The event. */ - onreset: (ev: Event) => any; + onreset: (this: this, ev: Event) => any; /** * Fires when the user repositions the scroll box in the scroll bar on the object. * @param ev The event. */ - onscroll: (ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; /** * Occurs when the seek operation ends. * @param ev The event. */ - onseeked: (ev: Event) => any; + onseeked: (this: this, ev: Event) => any; /** * Occurs when the current playback position is moved. * @param ev The event. */ - onseeking: (ev: Event) => any; + onseeking: (this: this, ev: Event) => any; /** * Fires when the current selection changes. * @param ev The event. */ - onselect: (ev: UIEvent) => any; + onselect: (this: this, ev: UIEvent) => any; /** * Fires when the selection state of a document changes. * @param ev The event. */ - onselectionchange: (ev: Event) => any; - onselectstart: (ev: Event) => any; + onselectionchange: (this: this, ev: Event) => any; + onselectstart: (this: this, ev: Event) => any; /** * Occurs when the download has stopped. * @param ev The event. */ - onstalled: (ev: Event) => any; + onstalled: (this: this, ev: Event) => any; /** * Fires when the user clicks the Stop button or leaves the Web page. * @param ev The event. */ - onstop: (ev: Event) => any; - onsubmit: (ev: Event) => any; + onstop: (this: this, ev: Event) => any; + onsubmit: (this: this, ev: Event) => any; /** * Occurs if the load operation has been intentionally halted. * @param ev The event. */ - onsuspend: (ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; /** * Occurs to indicate the current playback position. * @param ev The event. */ - ontimeupdate: (ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; @@ -2722,14 +2723,14 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Occurs when the volume is changed, or playback is muted or unmuted. * @param ev The event. */ - onvolumechange: (ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; /** * Occurs when playback stops because the next frame of a video resource is not available. * @param ev The event. */ - onwaiting: (ev: Event) => any; - onwebkitfullscreenchange: (ev: Event) => any; - onwebkitfullscreenerror: (ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; + onwebkitfullscreenchange: (this: this, ev: Event) => any; + onwebkitfullscreenerror: (this: this, ev: Event) => any; plugins: HTMLCollectionOf; readonly pointerLockElement: Element; /** @@ -3004,7 +3005,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Returns a reference to the first object with the specified value of the ID or NAME attribute. * @param elementId String that specifies the ID value. Case-insensitive. */ - getElementById(elementId: string): HTMLElement; + getElementById(elementId: string): HTMLElement | null; getElementsByClassName(classNames: string): HTMLCollectionOf; /** * Gets a collection of objects based on the value of the NAME or ID attribute. @@ -3261,103 +3262,103 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param content The text and HTML tags to write. */ writeln(...content: string[]): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "fullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "fullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerlockchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointerlockerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectionchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "fullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "fullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mssitemodejumplistitemremoved", listener: (this: this, ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msthumbnailclick", listener: (this: this, ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerlockchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointerlockerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectionchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stop", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -3445,33 +3446,33 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec id: string; msContentZoomFactor: number; readonly msRegionOverflow: string; - onariarequest: (ev: AriaRequestEvent) => any; - oncommand: (ev: CommandEvent) => any; - ongotpointercapture: (ev: PointerEvent) => any; - onlostpointercapture: (ev: PointerEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsgotpointercapture: (ev: MSPointerEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmslostpointercapture: (ev: MSPointerEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; + onariarequest: (this: this, ev: AriaRequestEvent) => any; + oncommand: (this: this, ev: CommandEvent) => any; + ongotpointercapture: (this: this, ev: PointerEvent) => any; + onlostpointercapture: (this: this, ev: PointerEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsgotpointercapture: (this: this, ev: MSPointerEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmslostpointercapture: (this: this, ev: MSPointerEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; ontouchstart: (ev: TouchEvent) => any; - onwebkitfullscreenchange: (ev: Event) => any; - onwebkitfullscreenerror: (ev: Event) => any; + onwebkitfullscreenchange: (this: this, ev: Event) => any; + onwebkitfullscreenerror: (this: this, ev: Event) => any; readonly prefix: string | null; readonly scrollHeight: number; scrollLeft: number; @@ -3479,7 +3480,7 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec readonly scrollWidth: number; readonly tagName: string; innerHTML: string; - getAttribute(name?: string): string | null; + getAttribute(name: string): string | null; getAttributeNS(namespaceURI: string, localName: string): string; getAttributeNode(name: string): Attr; getAttributeNodeNS(namespaceURI: string, localName: string): Attr; @@ -3689,42 +3690,43 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec webkitRequestFullscreen(): void; getElementsByClassName(classNames: string): NodeListOf; matches(selector: string): boolean; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + closest(selector: string): Element | null; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -4215,147 +4217,147 @@ interface HTMLBodyElement extends HTMLElement { bgProperties: string; link: any; noWrap: boolean; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onblur: (ev: FocusEvent) => any; - onerror: (ev: Event) => any; - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - onload: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onpopstate: (ev: PopStateEvent) => any; - onresize: (ev: UIEvent) => any; - onstorage: (ev: StorageEvent) => any; - onunload: (ev: Event) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + onload: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onpopstate: (this: this, ev: PopStateEvent) => any; + onresize: (this: this, ev: UIEvent) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onunload: (this: this, ev: Event) => any; text: any; vLink: any; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (this: this, ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -4448,9 +4450,9 @@ interface HTMLCanvasElement extends HTMLElement { * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas. * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl"); */ - getContext(contextId: "2d"): CanvasRenderingContext2D; - getContext(contextId: "experimental-webgl"): WebGLRenderingContext; - getContext(contextId: string, ...args: any[]): CanvasRenderingContext2D | WebGLRenderingContext; + getContext(contextId: "2d", contextAttributes?: Canvas2DContextAttributes): CanvasRenderingContext2D | null; + getContext(contextId: "webgl" | "experimental-webgl", contextAttributes?: WebGLContextAttributes): WebGLRenderingContext | null; + getContext(contextId: string, contextAttributes?: {}): CanvasRenderingContext2D | WebGLRenderingContext | null; /** * Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing. */ @@ -4460,7 +4462,7 @@ interface HTMLCanvasElement extends HTMLElement { * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image. */ toDataURL(type?: string, ...args: any[]): string; - toBlob(): Blob; + toBlob(callback: (result: Blob | null) => void, ... arguments: any[]): void; } declare var HTMLCanvasElement: { @@ -4558,73 +4560,73 @@ interface HTMLElement extends Element { readonly offsetParent: Element; readonly offsetTop: number; readonly offsetWidth: number; - onabort: (ev: Event) => any; - onactivate: (ev: UIEvent) => any; - onbeforeactivate: (ev: UIEvent) => any; - onbeforecopy: (ev: ClipboardEvent) => any; - onbeforecut: (ev: ClipboardEvent) => any; - onbeforedeactivate: (ev: UIEvent) => any; - onbeforepaste: (ev: ClipboardEvent) => any; - onblur: (ev: FocusEvent) => any; - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; - onchange: (ev: Event) => any; - onclick: (ev: MouseEvent) => any; - oncontextmenu: (ev: PointerEvent) => any; - oncopy: (ev: ClipboardEvent) => any; - oncuechange: (ev: Event) => any; - oncut: (ev: ClipboardEvent) => any; - ondblclick: (ev: MouseEvent) => any; - ondeactivate: (ev: UIEvent) => any; - ondrag: (ev: DragEvent) => any; - ondragend: (ev: DragEvent) => any; - ondragenter: (ev: DragEvent) => any; - ondragleave: (ev: DragEvent) => any; - ondragover: (ev: DragEvent) => any; - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; - ondurationchange: (ev: Event) => any; - onemptied: (ev: Event) => any; - onended: (ev: MediaStreamErrorEvent) => any; - onerror: (ev: Event) => any; - onfocus: (ev: FocusEvent) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; - onkeydown: (ev: KeyboardEvent) => any; - onkeypress: (ev: KeyboardEvent) => any; - onkeyup: (ev: KeyboardEvent) => any; - onload: (ev: Event) => any; - onloadeddata: (ev: Event) => any; - onloadedmetadata: (ev: Event) => any; - onloadstart: (ev: Event) => any; - onmousedown: (ev: MouseEvent) => any; - onmouseenter: (ev: MouseEvent) => any; - onmouseleave: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; - onmousewheel: (ev: WheelEvent) => any; - onmscontentzoom: (ev: UIEvent) => any; - onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any; - onpaste: (ev: ClipboardEvent) => any; - onpause: (ev: Event) => any; - onplay: (ev: Event) => any; - onplaying: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - onratechange: (ev: Event) => any; - onreset: (ev: Event) => any; - onscroll: (ev: UIEvent) => any; - onseeked: (ev: Event) => any; - onseeking: (ev: Event) => any; - onselect: (ev: UIEvent) => any; - onselectstart: (ev: Event) => any; - onstalled: (ev: Event) => any; - onsubmit: (ev: Event) => any; - onsuspend: (ev: Event) => any; - ontimeupdate: (ev: Event) => any; - onvolumechange: (ev: Event) => any; - onwaiting: (ev: Event) => any; + onabort: (this: this, ev: UIEvent) => any; + onactivate: (this: this, ev: UIEvent) => any; + onbeforeactivate: (this: this, ev: UIEvent) => any; + onbeforecopy: (this: this, ev: ClipboardEvent) => any; + onbeforecut: (this: this, ev: ClipboardEvent) => any; + onbeforedeactivate: (this: this, ev: UIEvent) => any; + onbeforepaste: (this: this, ev: ClipboardEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; + onchange: (this: this, ev: Event) => any; + onclick: (this: this, ev: MouseEvent) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; + oncopy: (this: this, ev: ClipboardEvent) => any; + oncuechange: (this: this, ev: Event) => any; + oncut: (this: this, ev: ClipboardEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + ondeactivate: (this: this, ev: UIEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; + ondurationchange: (this: this, ev: Event) => any; + onemptied: (this: this, ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onfocus: (this: this, ev: FocusEvent) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; + onload: (this: this, ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmouseenter: (this: this, ev: MouseEvent) => any; + onmouseleave: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmscontentzoom: (this: this, ev: UIEvent) => any; + onmsmanipulationstatechanged: (this: this, ev: MSManipulationEvent) => any; + onpaste: (this: this, ev: ClipboardEvent) => any; + onpause: (this: this, ev: Event) => any; + onplay: (this: this, ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onratechange: (this: this, ev: Event) => any; + onreset: (this: this, ev: Event) => any; + onscroll: (this: this, ev: UIEvent) => any; + onseeked: (this: this, ev: Event) => any; + onseeking: (this: this, ev: Event) => any; + onselect: (this: this, ev: UIEvent) => any; + onselectstart: (this: this, ev: Event) => any; + onstalled: (this: this, ev: Event) => any; + onsubmit: (this: this, ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; outerHTML: string; outerText: string; spellcheck: boolean; @@ -4641,109 +4643,109 @@ interface HTMLElement extends Element { msGetInputContext(): MSInputMethodContext; scrollIntoView(top?: boolean): void; setActive(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -4985,7 +4987,7 @@ interface HTMLFrameElement extends HTMLElement, GetSVGDocument { /** * Raised when the object has been completely received from the server. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; /** * Sets or retrieves whether the frame can be scrolled. */ @@ -4998,110 +5000,110 @@ interface HTMLFrameElement extends HTMLElement, GetSVGDocument { * Sets or retrieves the width of the object. */ width: string | number; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -5129,152 +5131,152 @@ interface HTMLFrameSetElement extends HTMLElement { */ frameSpacing: any; name: string; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; /** * Fires when the object loses the input focus. */ - onblur: (ev: FocusEvent) => any; - onerror: (ev: Event) => any; + onblur: (this: this, ev: FocusEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; /** * Fires when the object receives focus. */ - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - onload: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onresize: (ev: UIEvent) => any; - onstorage: (ev: StorageEvent) => any; - onunload: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + onload: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onresize: (this: this, ev: UIEvent) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onunload: (this: this, ev: Event) => any; /** * Sets or retrieves the frame heights of the object. */ rows: string; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -5394,7 +5396,7 @@ interface HTMLIFrameElement extends HTMLElement, GetSVGDocument { /** * Raised when the object has been completely received from the server. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; readonly sandbox: DOMSettableTokenList; /** * Sets or retrieves whether the frame can be scrolled. @@ -5412,110 +5414,110 @@ interface HTMLIFrameElement extends HTMLElement, GetSVGDocument { * Sets or retrieves the width of the object. */ width: string; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -5659,7 +5661,7 @@ interface HTMLInputElement extends HTMLElement { /** * Returns a FileList object on a file type input object. */ - readonly files: FileList; + readonly files: FileList | null; /** * Retrieves a reference to the form that the object is embedded in. */ @@ -5935,9 +5937,9 @@ interface HTMLMarqueeElement extends HTMLElement { height: string; hspace: number; loop: number; - onbounce: (ev: Event) => any; - onfinish: (ev: Event) => any; - onstart: (ev: Event) => any; + onbounce: (this: this, ev: Event) => any; + onfinish: (this: this, ev: Event) => any; + onstart: (this: this, ev: Event) => any; scrollAmount: number; scrollDelay: number; trueSpeed: boolean; @@ -5945,112 +5947,112 @@ interface HTMLMarqueeElement extends HTMLElement { width: string; start(): void; stop(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "bounce", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "finish", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "start", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -6148,8 +6150,8 @@ interface HTMLMediaElement extends HTMLElement { * Gets the current network activity for the element. */ readonly networkState: number; - onencrypted: (ev: MediaEncryptedEvent) => any; - onmsneedkey: (ev: MSMediaKeyNeededEvent) => any; + onencrypted: (this: this, ev: MediaEncryptedEvent) => any; + onmsneedkey: (this: this, ev: MSMediaKeyNeededEvent) => any; /** * Gets a flag that specifies whether playback is paused. */ @@ -6227,111 +6229,111 @@ interface HTMLMediaElement extends HTMLElement { readonly NETWORK_IDLE: number; readonly NETWORK_LOADING: number; readonly NETWORK_NO_SOURCE: number; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "encrypted", listener: (ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "encrypted", listener: (this: this, ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (this: this, ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -6630,7 +6632,7 @@ declare var HTMLOptionElement: { create(): HTMLOptionElement; } -interface HTMLOptionsCollection extends HTMLCollection { +interface HTMLOptionsCollection extends HTMLCollectionOf { length: number; selectedIndex: number; add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number): void; @@ -6794,7 +6796,7 @@ interface HTMLSelectElement extends HTMLElement { * Sets or retrieves the name of the object. */ name: string; - options: HTMLCollectionOf; + readonly options: HTMLOptionsCollection; /** * When present, marks an element that can't be submitted without a value. */ @@ -7383,9 +7385,9 @@ interface HTMLVideoElement extends HTMLMediaElement { msStereo3DPackingMode: string; msStereo3DRenderMode: string; msZoom: boolean; - onMSVideoFormatChanged: (ev: Event) => any; - onMSVideoFrameStepCompleted: (ev: Event) => any; - onMSVideoOptimalLayoutChanged: (ev: Event) => any; + onMSVideoFormatChanged: (this: this, ev: Event) => any; + onMSVideoFrameStepCompleted: (this: this, ev: Event) => any; + onMSVideoOptimalLayoutChanged: (this: this, ev: Event) => any; /** * Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available. */ @@ -7412,114 +7414,114 @@ interface HTMLVideoElement extends HTMLMediaElement { webkitEnterFullscreen(): void; webkitExitFullScreen(): void; webkitExitFullscreen(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFormatChanged", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "encrypted", listener: (ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFormatChanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFrameStepCompleted", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "encrypted", listener: (this: this, ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (this: this, ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7589,8 +7591,8 @@ declare var IDBCursorWithValue: { interface IDBDatabase extends EventTarget { readonly name: string; readonly objectStoreNames: DOMStringList; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; version: number; onversionchange: (ev: IDBVersionChangeEvent) => any; close(): void; @@ -7598,8 +7600,8 @@ interface IDBDatabase extends EventTarget { deleteObjectStore(name: string): void; transaction(storeNames: string | string[], mode?: string): IDBTransaction; addEventListener(type: "versionchange", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7677,12 +7679,12 @@ declare var IDBObjectStore: { } interface IDBOpenDBRequest extends IDBRequest { - onblocked: (ev: Event) => any; - onupgradeneeded: (ev: IDBVersionChangeEvent) => any; - addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; + onblocked: (this: this, ev: Event) => any; + onupgradeneeded: (this: this, ev: IDBVersionChangeEvent) => any; + addEventListener(type: "blocked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "upgradeneeded", listener: (this: this, ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7693,14 +7695,14 @@ declare var IDBOpenDBRequest: { interface IDBRequest extends EventTarget { readonly error: DOMError; - onerror: (ev: Event) => any; - onsuccess: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onsuccess: (this: this, ev: Event) => any; readonly readyState: string; readonly result: any; source: IDBObjectStore | IDBIndex | IDBCursor; readonly transaction: IDBTransaction; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7713,17 +7715,17 @@ interface IDBTransaction extends EventTarget { readonly db: IDBDatabase; readonly error: DOMError; readonly mode: string; - onabort: (ev: Event) => any; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; abort(): void; objectStore(name: string): IDBObjectStore; readonly READ_ONLY: string; readonly READ_WRITE: string; readonly VERSION_CHANGE: string; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7857,16 +7859,16 @@ declare var MSApp: MSApp; interface MSAppAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; start(): void; readonly COMPLETED: number; readonly ERROR: number; readonly STARTED: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8031,17 +8033,17 @@ declare var MSHTMLWebViewElement: { interface MSInputMethodContext extends EventTarget { readonly compositionEndOffset: number; readonly compositionStartOffset: number; - oncandidatewindowhide: (ev: Event) => any; - oncandidatewindowshow: (ev: Event) => any; - oncandidatewindowupdate: (ev: Event) => any; + oncandidatewindowhide: (this: this, ev: Event) => any; + oncandidatewindowshow: (this: this, ev: Event) => any; + oncandidatewindowupdate: (this: this, ev: Event) => any; readonly target: HTMLElement; getCandidateWindowClientRect(): ClientRect; getCompositionAlternatives(): string[]; hasComposition(): boolean; isCandidateWindowVisible(): boolean; - addEventListener(type: "MSCandidateWindowHide", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSCandidateWindowShow", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSCandidateWindowUpdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowHide", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowShow", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowUpdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8217,8 +8219,8 @@ declare var MSStreamReader: { interface MSWebViewAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; readonly target: MSHTMLWebViewElement; @@ -8230,8 +8232,8 @@ interface MSWebViewAsyncOperation extends EventTarget { readonly TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number; readonly TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number; readonly TYPE_INVOKE_SCRIPT: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8269,11 +8271,11 @@ declare var MediaDeviceInfo: { } interface MediaDevices extends EventTarget { - ondevicechange: (ev: Event) => any; + ondevicechange: (this: this, ev: Event) => any; enumerateDevices(): any; getSupportedConstraints(): MediaTrackSupportedConstraints; getUserMedia(constraints: MediaStreamConstraints): PromiseLike; - addEventListener(type: "devicechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "devicechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8426,10 +8428,10 @@ declare var MediaSource: { interface MediaStream extends EventTarget { readonly active: boolean; readonly id: string; - onactive: (ev: Event) => any; - onaddtrack: (ev: TrackEvent) => any; - oninactive: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onactive: (this: this, ev: Event) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + oninactive: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; addTrack(track: MediaStreamTrack): void; clone(): MediaStream; getAudioTracks(): MediaStreamTrack[]; @@ -8438,10 +8440,10 @@ interface MediaStream extends EventTarget { getVideoTracks(): MediaStreamTrack[]; removeTrack(track: MediaStreamTrack): void; stop(): void; - addEventListener(type: "active", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; - addEventListener(type: "inactive", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "active", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "inactive", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8484,10 +8486,10 @@ interface MediaStreamTrack extends EventTarget { readonly kind: string; readonly label: string; readonly muted: boolean; - onended: (ev: MediaStreamErrorEvent) => any; - onmute: (ev: Event) => any; - onoverconstrained: (ev: MediaStreamErrorEvent) => any; - onunmute: (ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; + onmute: (this: this, ev: Event) => any; + onoverconstrained: (this: this, ev: MediaStreamErrorEvent) => any; + onunmute: (this: this, ev: Event) => any; readonly readonly: boolean; readonly readyState: string; readonly remote: boolean; @@ -8497,10 +8499,10 @@ interface MediaStreamTrack extends EventTarget { getConstraints(): MediaTrackConstraints; getSettings(): MediaTrackSettings; stop(): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mute", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "overconstrained", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unmute", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mute", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "overconstrained", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unmute", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8542,11 +8544,11 @@ declare var MessageEvent: { } interface MessagePort extends EventTarget { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; close(): void; postMessage(message?: any, ports?: any): void; start(): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8754,7 +8756,7 @@ interface Node extends EventTarget { contains(child: Node): boolean; hasAttributes(): boolean; hasChildNodes(): boolean; - insertBefore(newChild: Node, refChild: Node): Node; + insertBefore(newChild: Node, refChild: Node | null): Node; isDefaultNamespace(namespaceURI: string | null): boolean; isEqualNode(arg: Node): boolean; isSameNode(other: Node): boolean; @@ -8763,7 +8765,6 @@ interface Node extends EventTarget { normalize(): void; removeChild(oldChild: Node): Node; replaceChild(newChild: Node, oldChild: Node): Node; - contains(node: Node): boolean; readonly ATTRIBUTE_NODE: number; readonly CDATA_SECTION_NODE: number; readonly COMMENT_NODE: number; @@ -8900,9 +8901,9 @@ declare var OfflineAudioCompletionEvent: { } interface OfflineAudioContext extends AudioContext { - oncomplete: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; startRendering(): PromiseLike; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8914,12 +8915,12 @@ declare var OfflineAudioContext: { interface OscillatorNode extends AudioNode { readonly detune: AudioParam; readonly frequency: AudioParam; - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; type: string; setPeriodicWave(periodicWave: PeriodicWave): void; start(when?: number): void; stop(when?: number): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9298,8 +9299,8 @@ declare var RTCDTMFToneChangeEvent: { } interface RTCDtlsTransport extends RTCStatsProvider { - ondtlsstatechange: ((ev: RTCDtlsTransportStateChangedEvent) => any) | null; - onerror: ((ev: Event) => any) | null; + ondtlsstatechange: ((this: this, ev: RTCDtlsTransportStateChangedEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly state: string; readonly transport: RTCIceTransport; getLocalParameters(): RTCDtlsParameters; @@ -9307,8 +9308,8 @@ interface RTCDtlsTransport extends RTCStatsProvider { getRemoteParameters(): RTCDtlsParameters | null; start(remoteParameters: RTCDtlsParameters): void; stop(): void; - addEventListener(type: "dtlsstatechange", listener: (ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dtlsstatechange", listener: (this: this, ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9330,11 +9331,11 @@ interface RTCDtmfSender extends EventTarget { readonly canInsertDTMF: boolean; readonly duration: number; readonly interToneGap: number; - ontonechange: (ev: RTCDTMFToneChangeEvent) => any; + ontonechange: (this: this, ev: RTCDTMFToneChangeEvent) => any; readonly sender: RTCRtpSender; readonly toneBuffer: string; insertDTMF(tones: string, duration?: number, interToneGap?: number): void; - addEventListener(type: "tonechange", listener: (ev: RTCDTMFToneChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "tonechange", listener: (this: this, ev: RTCDTMFToneChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9354,13 +9355,13 @@ declare var RTCIceCandidatePairChangedEvent: { interface RTCIceGatherer extends RTCStatsProvider { readonly component: string; - onerror: ((ev: Event) => any) | null; - onlocalcandidate: ((ev: RTCIceGathererEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; + onlocalcandidate: ((this: this, ev: RTCIceGathererEvent) => any) | null; createAssociatedGatherer(): RTCIceGatherer; getLocalCandidates(): RTCIceCandidate[]; getLocalParameters(): RTCIceParameters; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "localcandidate", listener: (ev: RTCIceGathererEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "localcandidate", listener: (this: this, ev: RTCIceGathererEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9381,8 +9382,8 @@ declare var RTCIceGathererEvent: { interface RTCIceTransport extends RTCStatsProvider { readonly component: string; readonly iceGatherer: RTCIceGatherer | null; - oncandidatepairchange: ((ev: RTCIceCandidatePairChangedEvent) => any) | null; - onicestatechange: ((ev: RTCIceTransportStateChangedEvent) => any) | null; + oncandidatepairchange: ((this: this, ev: RTCIceCandidatePairChangedEvent) => any) | null; + onicestatechange: ((this: this, ev: RTCIceTransportStateChangedEvent) => any) | null; readonly role: string; readonly state: string; addRemoteCandidate(remoteCandidate: RTCIceCandidate | RTCIceCandidateComplete): void; @@ -9393,8 +9394,8 @@ interface RTCIceTransport extends RTCStatsProvider { setRemoteCandidates(remoteCandidates: RTCIceCandidate[]): void; start(gatherer: RTCIceGatherer, remoteParameters: RTCIceParameters, role?: string): void; stop(): void; - addEventListener(type: "candidatepairchange", listener: (ev: RTCIceCandidatePairChangedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "icestatechange", listener: (ev: RTCIceTransportStateChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "candidatepairchange", listener: (this: this, ev: RTCIceCandidatePairChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "icestatechange", listener: (this: this, ev: RTCIceTransportStateChangedEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9413,7 +9414,7 @@ declare var RTCIceTransportStateChangedEvent: { } interface RTCRtpReceiver extends RTCStatsProvider { - onerror: ((ev: Event) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack | null; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -9422,7 +9423,7 @@ interface RTCRtpReceiver extends RTCStatsProvider { requestSendCSRC(csrc: number): void; setTransport(transport: RTCDtlsTransport | RTCSrtpSdesTransport, rtcpTransport?: RTCDtlsTransport): void; stop(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9433,8 +9434,8 @@ declare var RTCRtpReceiver: { } interface RTCRtpSender extends RTCStatsProvider { - onerror: ((ev: Event) => any) | null; - onssrcconflict: ((ev: RTCSsrcConflictEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; + onssrcconflict: ((this: this, ev: RTCSsrcConflictEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -9442,8 +9443,8 @@ interface RTCRtpSender extends RTCStatsProvider { setTrack(track: MediaStreamTrack): void; setTransport(transport: RTCDtlsTransport | RTCSrtpSdesTransport, rtcpTransport?: RTCDtlsTransport): void; stop(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ssrcconflict", listener: (ev: RTCSsrcConflictEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ssrcconflict", listener: (this: this, ev: RTCSsrcConflictEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9454,9 +9455,9 @@ declare var RTCRtpSender: { } interface RTCSrtpSdesTransport extends EventTarget { - onerror: ((ev: Event) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly transport: RTCIceTransport; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9751,66 +9752,66 @@ declare var SVGDescElement: { } interface SVGElement extends Element { - onclick: (ev: MouseEvent) => any; - ondblclick: (ev: MouseEvent) => any; - onfocusin: (ev: FocusEvent) => any; - onfocusout: (ev: FocusEvent) => any; - onload: (ev: Event) => any; - onmousedown: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; + onclick: (this: this, ev: MouseEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + onfocusin: (this: this, ev: FocusEvent) => any; + onfocusout: (this: this, ev: FocusEvent) => any; + onload: (this: this, ev: Event) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; readonly ownerSVGElement: SVGSVGElement; readonly viewportElement: SVGElement; xmlbase: string; className: any; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -10941,12 +10942,12 @@ interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTest currentScale: number; readonly currentTranslate: SVGPoint; readonly height: SVGAnimatedLength; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - onscroll: (ev: UIEvent) => any; - onunload: (ev: Event) => any; - onzoom: (ev: SVGZoomEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: Event) => any; + onresize: (this: this, ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; + onunload: (this: this, ev: Event) => any; + onzoom: (this: this, ev: SVGZoomEvent) => any; readonly pixelUnitToMillimeterX: number; readonly pixelUnitToMillimeterY: number; readonly screenPixelToMillimeterX: number; @@ -10978,58 +10979,58 @@ interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTest unpauseAnimations(): void; unsuspendRedraw(suspendHandleID: number): void; unsuspendRedrawAll(): void; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "SVGAbort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGError", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGUnload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGZoom", listener: (ev: SVGZoomEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "SVGAbort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGError", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGUnload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGZoom", listener: (this: this, ev: SVGZoomEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11310,14 +11311,14 @@ interface Screen extends EventTarget { readonly logicalXDPI: number; readonly logicalYDPI: number; readonly msOrientation: string; - onmsorientationchange: (ev: Event) => any; + onmsorientationchange: (this: this, ev: Event) => any; readonly pixelDepth: number; readonly systemXDPI: number; readonly systemYDPI: number; readonly width: number; msLockOrientation(orientations: string | string[]): boolean; msUnlockOrientation(): void; - addEventListener(type: "MSOrientationChange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSOrientationChange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11338,8 +11339,8 @@ declare var ScriptNotifyEvent: { interface ScriptProcessorNode extends AudioNode { readonly bufferSize: number; - onaudioprocess: (ev: AudioProcessingEvent) => any; - addEventListener(type: "audioprocess", listener: (ev: AudioProcessingEvent) => any, useCapture?: boolean): void; + onaudioprocess: (this: this, ev: AudioProcessingEvent) => any; + addEventListener(type: "audioprocess", listener: (this: this, ev: AudioProcessingEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11494,18 +11495,24 @@ declare var StyleSheetPageList: { } interface SubtleCrypto { - decrypt(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; - deriveBits(algorithm: string | Algorithm, baseKey: CryptoKey, length: number): PromiseLike; - deriveKey(algorithm: string | Algorithm, baseKey: CryptoKey, derivedKeyType: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; - digest(algorithm: string | Algorithm, data: ArrayBufferView): PromiseLike; - 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 | 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 | 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; + decrypt(algorithm: string | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: BufferSource): PromiseLike; + deriveBits(algorithm: string | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, baseKey: CryptoKey, length: number): PromiseLike; + deriveKey(algorithm: string | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, extractable: boolean, keyUsages: string[]): PromiseLike; + digest(algorithm: AlgorithmIdentifier, data: BufferSource): PromiseLike; + encrypt(algorithm: string | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: BufferSource): PromiseLike; + exportKey(format: "jwk", key: CryptoKey): PromiseLike; + exportKey(format: "raw" | "pkcs8" | "spki", key: CryptoKey): PromiseLike; + exportKey(format: string, key: CryptoKey): PromiseLike; + generateKey(algorithm: string, extractable: boolean, keyUsages: string[]): PromiseLike; + generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams | DhKeyGenParams, extractable: boolean, keyUsages: string[]): PromiseLike; + generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: string[]): PromiseLike; + importKey(format: "jwk", keyData: JsonWebKey, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + importKey(format: "raw" | "pkcs8" | "spki", keyData: BufferSource, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + importKey(format: string, keyData: JsonWebKey | BufferSource, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + sign(algorithm: string | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, data: BufferSource): PromiseLike; + unwrapKey(format: string, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier, unwrappedKeyAlgorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: string[]): PromiseLike; + verify(algorithm: string | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, signature: BufferSource, data: BufferSource): PromiseLike; + wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier): PromiseLike; } declare var SubtleCrypto: { @@ -11572,9 +11579,9 @@ interface TextTrack extends EventTarget { readonly label: string; readonly language: string; mode: any; - oncuechange: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; + oncuechange: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; readonly readyState: number; addCue(cue: TextTrackCue): void; removeCue(cue: TextTrackCue): void; @@ -11585,9 +11592,9 @@ interface TextTrack extends EventTarget { readonly LOADING: number; readonly NONE: number; readonly SHOWING: number; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11606,15 +11613,15 @@ declare var TextTrack: { interface TextTrackCue extends EventTarget { endTime: number; id: string; - onenter: (ev: Event) => any; - onexit: (ev: Event) => any; + onenter: (this: this, ev: Event) => any; + onexit: (this: this, ev: Event) => any; pauseOnExit: boolean; startTime: number; text: string; readonly track: TextTrack; getCueAsHTML(): DocumentFragment; - addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "enter", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "exit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11637,9 +11644,9 @@ declare var TextTrackCueList: { interface TextTrackList extends EventTarget { readonly length: number; - onaddtrack: ((ev: TrackEvent) => any) | null; + onaddtrack: ((this: this, ev: TrackEvent) => any) | null; item(index: number): TextTrack; - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: TextTrack; } @@ -11831,15 +11838,15 @@ declare var VideoTrack: { interface VideoTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; - onchange: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + onchange: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; readonly selectedIndex: number; 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; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: VideoTrack; } @@ -12062,18 +12069,12 @@ interface WebGLRenderingContext { stencilMaskSeparate(face: number, mask: number): void; stencilOp(fail: number, zfail: number, zpass: number): void; stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void; - texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, image: HTMLImageElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, canvas: HTMLCanvasElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, video: HTMLVideoElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void; + texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels?: ArrayBufferView): void; + texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void; texParameterf(target: number, pname: number, param: number): void; texParameteri(target: number, pname: number, param: number): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, image: HTMLImageElement): void; - 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; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels?: ArrayBufferView): void; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void; uniform1f(location: WebGLUniformLocation | null, x: number): void; uniform1fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; uniform1i(location: WebGLUniformLocation | null, x: number): void; @@ -12795,10 +12796,10 @@ interface WebSocket extends EventTarget { binaryType: string; readonly bufferedAmount: number; readonly extensions: string; - onclose: (ev: CloseEvent) => any; - onerror: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onopen: (ev: Event) => any; + onclose: (this: this, ev: CloseEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onopen: (this: this, ev: Event) => any; readonly protocol: string; readonly readyState: number; readonly url: string; @@ -12808,10 +12809,10 @@ interface WebSocket extends EventTarget { readonly CLOSING: number; readonly CONNECTING: number; readonly OPEN: number; - addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "close", listener: (this: this, ev: CloseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "open", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12871,97 +12872,97 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window name: string; readonly navigator: Navigator; offscreenBuffering: string | boolean; - onabort: (ev: Event) => any; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onblur: (ev: FocusEvent) => any; - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; - onchange: (ev: Event) => any; - onclick: (ev: MouseEvent) => any; - oncompassneedscalibration: (ev: Event) => any; - oncontextmenu: (ev: PointerEvent) => any; - ondblclick: (ev: MouseEvent) => any; - ondevicelight: (ev: DeviceLightEvent) => any; - ondevicemotion: (ev: DeviceMotionEvent) => any; - ondeviceorientation: (ev: DeviceOrientationEvent) => any; - ondrag: (ev: DragEvent) => any; - ondragend: (ev: DragEvent) => any; - ondragenter: (ev: DragEvent) => any; - ondragleave: (ev: DragEvent) => any; - ondragover: (ev: DragEvent) => any; - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; - ondurationchange: (ev: Event) => any; - onemptied: (ev: Event) => any; - onended: (ev: MediaStreamErrorEvent) => any; + onabort: (this: this, ev: UIEvent) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; + onchange: (this: this, ev: Event) => any; + onclick: (this: this, ev: MouseEvent) => any; + oncompassneedscalibration: (this: this, ev: Event) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + ondevicelight: (this: this, ev: DeviceLightEvent) => any; + ondevicemotion: (this: this, ev: DeviceMotionEvent) => any; + ondeviceorientation: (this: this, ev: DeviceOrientationEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; + ondurationchange: (this: this, ev: Event) => any; + onemptied: (this: this, ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; onerror: ErrorEventHandler; - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; - onkeydown: (ev: KeyboardEvent) => any; - onkeypress: (ev: KeyboardEvent) => any; - onkeyup: (ev: KeyboardEvent) => any; - onload: (ev: Event) => any; - onloadeddata: (ev: Event) => any; - onloadedmetadata: (ev: Event) => any; - onloadstart: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onmousedown: (ev: MouseEvent) => any; - onmouseenter: (ev: MouseEvent) => any; - onmouseleave: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; - onmousewheel: (ev: WheelEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onpause: (ev: Event) => any; - onplay: (ev: Event) => any; - onplaying: (ev: Event) => any; - onpopstate: (ev: PopStateEvent) => any; - onprogress: (ev: ProgressEvent) => any; - onratechange: (ev: Event) => any; - onreadystatechange: (ev: ProgressEvent) => any; - onreset: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - onscroll: (ev: UIEvent) => any; - onseeked: (ev: Event) => any; - onseeking: (ev: Event) => any; - onselect: (ev: UIEvent) => any; - onstalled: (ev: Event) => any; - onstorage: (ev: StorageEvent) => any; - onsubmit: (ev: Event) => any; - onsuspend: (ev: Event) => any; - ontimeupdate: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; + onload: (this: this, ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmouseenter: (this: this, ev: MouseEvent) => any; + onmouseleave: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onpause: (this: this, ev: Event) => any; + onplay: (this: this, ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onpopstate: (this: this, ev: PopStateEvent) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onratechange: (this: this, ev: Event) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; + onreset: (this: this, ev: Event) => any; + onresize: (this: this, ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; + onseeked: (this: this, ev: Event) => any; + onseeking: (this: this, ev: Event) => any; + onselect: (this: this, ev: UIEvent) => any; + onstalled: (this: this, ev: Event) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onsubmit: (this: this, ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; ontouchstart: (ev: TouchEvent) => any; - onunload: (ev: Event) => any; - onvolumechange: (ev: Event) => any; - onwaiting: (ev: Event) => any; + onunload: (this: this, ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; readonly opener: Window; orientation: string | number; readonly outerHeight: number; @@ -12987,6 +12988,7 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window readonly top: Window; readonly window: Window; URL: typeof URL; + Blob: typeof Blob; alert(message?: any): void; blur(): void; cancelAnimationFrame(handle: number): void; @@ -13016,101 +13018,101 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint; webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint; webkitRequestAnimationFrame(callback: FrameRequestCallback): number; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "devicelight", listener: (ev: DeviceLightEvent) => any, useCapture?: boolean): void; - addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "compassneedscalibration", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "devicelight", listener: (this: this, ev: DeviceLightEvent) => any, useCapture?: boolean): void; + addEventListener(type: "devicemotion", listener: (this: this, ev: DeviceMotionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deviceorientation", listener: (this: this, ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (this: this, ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: Window; } @@ -13121,11 +13123,11 @@ declare var Window: { } interface Worker extends EventTarget, AbstractWorker { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; postMessage(message: any, ports?: any): void; terminate(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13143,8 +13145,7 @@ declare var XMLDocument: { } interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { - msCaching: string; - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly response: any; readonly responseText: string; @@ -13155,6 +13156,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { timeout: number; readonly upload: XMLHttpRequestUpload; withCredentials: boolean; + msCaching?: string; abort(): void; getAllResponseHeaders(): string; getResponseHeader(header: string): string | null; @@ -13170,14 +13172,14 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { readonly LOADING: number; readonly OPENED: number; readonly UNSENT: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13293,8 +13295,8 @@ declare var XSLTProcessor: { } interface AbstractWorker { - onerror: (ev: Event) => any; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + onerror: (this: this, ev: ErrorEvent) => any; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13406,24 +13408,24 @@ interface GetSVGDocument { } interface GlobalEventHandlers { - onpointercancel: (ev: PointerEvent) => any; - onpointerdown: (ev: PointerEvent) => any; - onpointerenter: (ev: PointerEvent) => any; - onpointerleave: (ev: PointerEvent) => any; - onpointermove: (ev: PointerEvent) => any; - onpointerout: (ev: PointerEvent) => any; - onpointerover: (ev: PointerEvent) => any; - onpointerup: (ev: PointerEvent) => any; - onwheel: (ev: WheelEvent) => any; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + onpointercancel: (this: this, ev: PointerEvent) => any; + onpointerdown: (this: this, ev: PointerEvent) => any; + onpointerenter: (this: this, ev: PointerEvent) => any; + onpointerleave: (this: this, ev: PointerEvent) => any; + onpointermove: (this: this, ev: PointerEvent) => any; + onpointerout: (this: this, ev: PointerEvent) => any; + onpointerover: (this: this, ev: PointerEvent) => any; + onpointerup: (this: this, ev: PointerEvent) => any; + onwheel: (this: this, ev: WheelEvent) => any; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13451,24 +13453,24 @@ interface LinkStyle { } interface MSBaseReader { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly result: any; abort(): void; readonly DONE: number; readonly EMPTY: number; readonly LOADING: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13517,7 +13519,359 @@ interface NavigatorUserMedia { } interface NodeSelector { + querySelector(selectors: "a"): HTMLAnchorElement; + querySelector(selectors: "abbr"): HTMLElement; + querySelector(selectors: "acronym"): HTMLElement; + querySelector(selectors: "address"): HTMLElement; + querySelector(selectors: "applet"): HTMLAppletElement; + querySelector(selectors: "area"): HTMLAreaElement; + querySelector(selectors: "article"): HTMLElement; + querySelector(selectors: "aside"): HTMLElement; + querySelector(selectors: "audio"): HTMLAudioElement; + querySelector(selectors: "b"): HTMLElement; + querySelector(selectors: "base"): HTMLBaseElement; + querySelector(selectors: "basefont"): HTMLBaseFontElement; + querySelector(selectors: "bdo"): HTMLElement; + querySelector(selectors: "big"): HTMLElement; + querySelector(selectors: "blockquote"): HTMLQuoteElement; + querySelector(selectors: "body"): HTMLBodyElement; + querySelector(selectors: "br"): HTMLBRElement; + querySelector(selectors: "button"): HTMLButtonElement; + querySelector(selectors: "canvas"): HTMLCanvasElement; + querySelector(selectors: "caption"): HTMLTableCaptionElement; + querySelector(selectors: "center"): HTMLElement; + querySelector(selectors: "circle"): SVGCircleElement; + querySelector(selectors: "cite"): HTMLElement; + querySelector(selectors: "clippath"): SVGClipPathElement; + querySelector(selectors: "code"): HTMLElement; + querySelector(selectors: "col"): HTMLTableColElement; + querySelector(selectors: "colgroup"): HTMLTableColElement; + querySelector(selectors: "datalist"): HTMLDataListElement; + querySelector(selectors: "dd"): HTMLElement; + querySelector(selectors: "defs"): SVGDefsElement; + querySelector(selectors: "del"): HTMLModElement; + querySelector(selectors: "desc"): SVGDescElement; + querySelector(selectors: "dfn"): HTMLElement; + querySelector(selectors: "dir"): HTMLDirectoryElement; + querySelector(selectors: "div"): HTMLDivElement; + querySelector(selectors: "dl"): HTMLDListElement; + querySelector(selectors: "dt"): HTMLElement; + querySelector(selectors: "ellipse"): SVGEllipseElement; + querySelector(selectors: "em"): HTMLElement; + querySelector(selectors: "embed"): HTMLEmbedElement; + querySelector(selectors: "feblend"): SVGFEBlendElement; + querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement; + querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement; + querySelector(selectors: "fecomposite"): SVGFECompositeElement; + querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement; + querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement; + querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement; + querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement; + querySelector(selectors: "feflood"): SVGFEFloodElement; + querySelector(selectors: "fefunca"): SVGFEFuncAElement; + querySelector(selectors: "fefuncb"): SVGFEFuncBElement; + querySelector(selectors: "fefuncg"): SVGFEFuncGElement; + querySelector(selectors: "fefuncr"): SVGFEFuncRElement; + querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement; + querySelector(selectors: "feimage"): SVGFEImageElement; + querySelector(selectors: "femerge"): SVGFEMergeElement; + querySelector(selectors: "femergenode"): SVGFEMergeNodeElement; + querySelector(selectors: "femorphology"): SVGFEMorphologyElement; + querySelector(selectors: "feoffset"): SVGFEOffsetElement; + querySelector(selectors: "fepointlight"): SVGFEPointLightElement; + querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement; + querySelector(selectors: "fespotlight"): SVGFESpotLightElement; + querySelector(selectors: "fetile"): SVGFETileElement; + querySelector(selectors: "feturbulence"): SVGFETurbulenceElement; + querySelector(selectors: "fieldset"): HTMLFieldSetElement; + querySelector(selectors: "figcaption"): HTMLElement; + querySelector(selectors: "figure"): HTMLElement; + querySelector(selectors: "filter"): SVGFilterElement; + querySelector(selectors: "font"): HTMLFontElement; + querySelector(selectors: "footer"): HTMLElement; + querySelector(selectors: "foreignobject"): SVGForeignObjectElement; + querySelector(selectors: "form"): HTMLFormElement; + querySelector(selectors: "frame"): HTMLFrameElement; + querySelector(selectors: "frameset"): HTMLFrameSetElement; + querySelector(selectors: "g"): SVGGElement; + querySelector(selectors: "h1"): HTMLHeadingElement; + querySelector(selectors: "h2"): HTMLHeadingElement; + querySelector(selectors: "h3"): HTMLHeadingElement; + querySelector(selectors: "h4"): HTMLHeadingElement; + querySelector(selectors: "h5"): HTMLHeadingElement; + querySelector(selectors: "h6"): HTMLHeadingElement; + querySelector(selectors: "head"): HTMLHeadElement; + querySelector(selectors: "header"): HTMLElement; + querySelector(selectors: "hgroup"): HTMLElement; + querySelector(selectors: "hr"): HTMLHRElement; + querySelector(selectors: "html"): HTMLHtmlElement; + querySelector(selectors: "i"): HTMLElement; + querySelector(selectors: "iframe"): HTMLIFrameElement; + querySelector(selectors: "image"): SVGImageElement; + querySelector(selectors: "img"): HTMLImageElement; + querySelector(selectors: "input"): HTMLInputElement; + querySelector(selectors: "ins"): HTMLModElement; + querySelector(selectors: "isindex"): HTMLUnknownElement; + querySelector(selectors: "kbd"): HTMLElement; + querySelector(selectors: "keygen"): HTMLElement; + querySelector(selectors: "label"): HTMLLabelElement; + querySelector(selectors: "legend"): HTMLLegendElement; + querySelector(selectors: "li"): HTMLLIElement; + querySelector(selectors: "line"): SVGLineElement; + querySelector(selectors: "lineargradient"): SVGLinearGradientElement; + querySelector(selectors: "link"): HTMLLinkElement; + querySelector(selectors: "listing"): HTMLPreElement; + querySelector(selectors: "map"): HTMLMapElement; + querySelector(selectors: "mark"): HTMLElement; + querySelector(selectors: "marker"): SVGMarkerElement; + querySelector(selectors: "marquee"): HTMLMarqueeElement; + querySelector(selectors: "mask"): SVGMaskElement; + querySelector(selectors: "menu"): HTMLMenuElement; + querySelector(selectors: "meta"): HTMLMetaElement; + querySelector(selectors: "metadata"): SVGMetadataElement; + querySelector(selectors: "meter"): HTMLMeterElement; + querySelector(selectors: "nav"): HTMLElement; + querySelector(selectors: "nextid"): HTMLUnknownElement; + querySelector(selectors: "nobr"): HTMLElement; + querySelector(selectors: "noframes"): HTMLElement; + querySelector(selectors: "noscript"): HTMLElement; + querySelector(selectors: "object"): HTMLObjectElement; + querySelector(selectors: "ol"): HTMLOListElement; + querySelector(selectors: "optgroup"): HTMLOptGroupElement; + querySelector(selectors: "option"): HTMLOptionElement; + querySelector(selectors: "p"): HTMLParagraphElement; + querySelector(selectors: "param"): HTMLParamElement; + querySelector(selectors: "path"): SVGPathElement; + querySelector(selectors: "pattern"): SVGPatternElement; + querySelector(selectors: "picture"): HTMLPictureElement; + querySelector(selectors: "plaintext"): HTMLElement; + querySelector(selectors: "polygon"): SVGPolygonElement; + querySelector(selectors: "polyline"): SVGPolylineElement; + querySelector(selectors: "pre"): HTMLPreElement; + querySelector(selectors: "progress"): HTMLProgressElement; + querySelector(selectors: "q"): HTMLQuoteElement; + querySelector(selectors: "radialgradient"): SVGRadialGradientElement; + querySelector(selectors: "rect"): SVGRectElement; + querySelector(selectors: "rt"): HTMLElement; + querySelector(selectors: "ruby"): HTMLElement; + querySelector(selectors: "s"): HTMLElement; + querySelector(selectors: "samp"): HTMLElement; + querySelector(selectors: "script"): HTMLScriptElement; + querySelector(selectors: "section"): HTMLElement; + querySelector(selectors: "select"): HTMLSelectElement; + querySelector(selectors: "small"): HTMLElement; + querySelector(selectors: "source"): HTMLSourceElement; + querySelector(selectors: "span"): HTMLSpanElement; + querySelector(selectors: "stop"): SVGStopElement; + querySelector(selectors: "strike"): HTMLElement; + querySelector(selectors: "strong"): HTMLElement; + querySelector(selectors: "style"): HTMLStyleElement; + querySelector(selectors: "sub"): HTMLElement; + querySelector(selectors: "sup"): HTMLElement; + querySelector(selectors: "svg"): SVGSVGElement; + querySelector(selectors: "switch"): SVGSwitchElement; + querySelector(selectors: "symbol"): SVGSymbolElement; + querySelector(selectors: "table"): HTMLTableElement; + querySelector(selectors: "tbody"): HTMLTableSectionElement; + querySelector(selectors: "td"): HTMLTableDataCellElement; + querySelector(selectors: "template"): HTMLTemplateElement; + querySelector(selectors: "text"): SVGTextElement; + querySelector(selectors: "textpath"): SVGTextPathElement; + querySelector(selectors: "textarea"): HTMLTextAreaElement; + querySelector(selectors: "tfoot"): HTMLTableSectionElement; + querySelector(selectors: "th"): HTMLTableHeaderCellElement; + querySelector(selectors: "thead"): HTMLTableSectionElement; + querySelector(selectors: "title"): HTMLTitleElement; + querySelector(selectors: "tr"): HTMLTableRowElement; + querySelector(selectors: "track"): HTMLTrackElement; + querySelector(selectors: "tspan"): SVGTSpanElement; + querySelector(selectors: "tt"): HTMLElement; + querySelector(selectors: "u"): HTMLElement; + querySelector(selectors: "ul"): HTMLUListElement; + querySelector(selectors: "use"): SVGUseElement; + querySelector(selectors: "var"): HTMLElement; + querySelector(selectors: "video"): HTMLVideoElement; + querySelector(selectors: "view"): SVGViewElement; + querySelector(selectors: "wbr"): HTMLElement; + querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement; + querySelector(selectors: "xmp"): HTMLPreElement; querySelector(selectors: string): Element; + querySelectorAll(selectors: "a"): NodeListOf; + querySelectorAll(selectors: "abbr"): NodeListOf; + querySelectorAll(selectors: "acronym"): NodeListOf; + querySelectorAll(selectors: "address"): NodeListOf; + querySelectorAll(selectors: "applet"): NodeListOf; + querySelectorAll(selectors: "area"): NodeListOf; + querySelectorAll(selectors: "article"): NodeListOf; + querySelectorAll(selectors: "aside"): NodeListOf; + querySelectorAll(selectors: "audio"): NodeListOf; + querySelectorAll(selectors: "b"): NodeListOf; + querySelectorAll(selectors: "base"): NodeListOf; + querySelectorAll(selectors: "basefont"): NodeListOf; + querySelectorAll(selectors: "bdo"): NodeListOf; + querySelectorAll(selectors: "big"): NodeListOf; + querySelectorAll(selectors: "blockquote"): NodeListOf; + querySelectorAll(selectors: "body"): NodeListOf; + querySelectorAll(selectors: "br"): NodeListOf; + querySelectorAll(selectors: "button"): NodeListOf; + querySelectorAll(selectors: "canvas"): NodeListOf; + querySelectorAll(selectors: "caption"): NodeListOf; + querySelectorAll(selectors: "center"): NodeListOf; + querySelectorAll(selectors: "circle"): NodeListOf; + querySelectorAll(selectors: "cite"): NodeListOf; + querySelectorAll(selectors: "clippath"): NodeListOf; + querySelectorAll(selectors: "code"): NodeListOf; + querySelectorAll(selectors: "col"): NodeListOf; + querySelectorAll(selectors: "colgroup"): NodeListOf; + querySelectorAll(selectors: "datalist"): NodeListOf; + querySelectorAll(selectors: "dd"): NodeListOf; + querySelectorAll(selectors: "defs"): NodeListOf; + querySelectorAll(selectors: "del"): NodeListOf; + querySelectorAll(selectors: "desc"): NodeListOf; + querySelectorAll(selectors: "dfn"): NodeListOf; + querySelectorAll(selectors: "dir"): NodeListOf; + querySelectorAll(selectors: "div"): NodeListOf; + querySelectorAll(selectors: "dl"): NodeListOf; + querySelectorAll(selectors: "dt"): NodeListOf; + querySelectorAll(selectors: "ellipse"): NodeListOf; + querySelectorAll(selectors: "em"): NodeListOf; + querySelectorAll(selectors: "embed"): NodeListOf; + querySelectorAll(selectors: "feblend"): NodeListOf; + querySelectorAll(selectors: "fecolormatrix"): NodeListOf; + querySelectorAll(selectors: "fecomponenttransfer"): NodeListOf; + querySelectorAll(selectors: "fecomposite"): NodeListOf; + querySelectorAll(selectors: "feconvolvematrix"): NodeListOf; + querySelectorAll(selectors: "fediffuselighting"): NodeListOf; + querySelectorAll(selectors: "fedisplacementmap"): NodeListOf; + querySelectorAll(selectors: "fedistantlight"): NodeListOf; + querySelectorAll(selectors: "feflood"): NodeListOf; + querySelectorAll(selectors: "fefunca"): NodeListOf; + querySelectorAll(selectors: "fefuncb"): NodeListOf; + querySelectorAll(selectors: "fefuncg"): NodeListOf; + querySelectorAll(selectors: "fefuncr"): NodeListOf; + querySelectorAll(selectors: "fegaussianblur"): NodeListOf; + querySelectorAll(selectors: "feimage"): NodeListOf; + querySelectorAll(selectors: "femerge"): NodeListOf; + querySelectorAll(selectors: "femergenode"): NodeListOf; + querySelectorAll(selectors: "femorphology"): NodeListOf; + querySelectorAll(selectors: "feoffset"): NodeListOf; + querySelectorAll(selectors: "fepointlight"): NodeListOf; + querySelectorAll(selectors: "fespecularlighting"): NodeListOf; + querySelectorAll(selectors: "fespotlight"): NodeListOf; + querySelectorAll(selectors: "fetile"): NodeListOf; + querySelectorAll(selectors: "feturbulence"): NodeListOf; + querySelectorAll(selectors: "fieldset"): NodeListOf; + querySelectorAll(selectors: "figcaption"): NodeListOf; + querySelectorAll(selectors: "figure"): NodeListOf; + querySelectorAll(selectors: "filter"): NodeListOf; + querySelectorAll(selectors: "font"): NodeListOf; + querySelectorAll(selectors: "footer"): NodeListOf; + querySelectorAll(selectors: "foreignobject"): NodeListOf; + querySelectorAll(selectors: "form"): NodeListOf; + querySelectorAll(selectors: "frame"): NodeListOf; + querySelectorAll(selectors: "frameset"): NodeListOf; + querySelectorAll(selectors: "g"): NodeListOf; + querySelectorAll(selectors: "h1"): NodeListOf; + querySelectorAll(selectors: "h2"): NodeListOf; + querySelectorAll(selectors: "h3"): NodeListOf; + querySelectorAll(selectors: "h4"): NodeListOf; + querySelectorAll(selectors: "h5"): NodeListOf; + querySelectorAll(selectors: "h6"): NodeListOf; + querySelectorAll(selectors: "head"): NodeListOf; + querySelectorAll(selectors: "header"): NodeListOf; + querySelectorAll(selectors: "hgroup"): NodeListOf; + querySelectorAll(selectors: "hr"): NodeListOf; + querySelectorAll(selectors: "html"): NodeListOf; + querySelectorAll(selectors: "i"): NodeListOf; + querySelectorAll(selectors: "iframe"): NodeListOf; + querySelectorAll(selectors: "image"): NodeListOf; + querySelectorAll(selectors: "img"): NodeListOf; + querySelectorAll(selectors: "input"): NodeListOf; + querySelectorAll(selectors: "ins"): NodeListOf; + querySelectorAll(selectors: "isindex"): NodeListOf; + querySelectorAll(selectors: "kbd"): NodeListOf; + querySelectorAll(selectors: "keygen"): NodeListOf; + querySelectorAll(selectors: "label"): NodeListOf; + querySelectorAll(selectors: "legend"): NodeListOf; + querySelectorAll(selectors: "li"): NodeListOf; + querySelectorAll(selectors: "line"): NodeListOf; + querySelectorAll(selectors: "lineargradient"): NodeListOf; + querySelectorAll(selectors: "link"): NodeListOf; + querySelectorAll(selectors: "listing"): NodeListOf; + querySelectorAll(selectors: "map"): NodeListOf; + querySelectorAll(selectors: "mark"): NodeListOf; + querySelectorAll(selectors: "marker"): NodeListOf; + querySelectorAll(selectors: "marquee"): NodeListOf; + querySelectorAll(selectors: "mask"): NodeListOf; + querySelectorAll(selectors: "menu"): NodeListOf; + querySelectorAll(selectors: "meta"): NodeListOf; + querySelectorAll(selectors: "metadata"): NodeListOf; + querySelectorAll(selectors: "meter"): NodeListOf; + querySelectorAll(selectors: "nav"): NodeListOf; + querySelectorAll(selectors: "nextid"): NodeListOf; + querySelectorAll(selectors: "nobr"): NodeListOf; + querySelectorAll(selectors: "noframes"): NodeListOf; + querySelectorAll(selectors: "noscript"): NodeListOf; + querySelectorAll(selectors: "object"): NodeListOf; + querySelectorAll(selectors: "ol"): NodeListOf; + querySelectorAll(selectors: "optgroup"): NodeListOf; + querySelectorAll(selectors: "option"): NodeListOf; + querySelectorAll(selectors: "p"): NodeListOf; + querySelectorAll(selectors: "param"): NodeListOf; + querySelectorAll(selectors: "path"): NodeListOf; + querySelectorAll(selectors: "pattern"): NodeListOf; + querySelectorAll(selectors: "picture"): NodeListOf; + querySelectorAll(selectors: "plaintext"): NodeListOf; + querySelectorAll(selectors: "polygon"): NodeListOf; + querySelectorAll(selectors: "polyline"): NodeListOf; + querySelectorAll(selectors: "pre"): NodeListOf; + querySelectorAll(selectors: "progress"): NodeListOf; + querySelectorAll(selectors: "q"): NodeListOf; + querySelectorAll(selectors: "radialgradient"): NodeListOf; + querySelectorAll(selectors: "rect"): NodeListOf; + querySelectorAll(selectors: "rt"): NodeListOf; + querySelectorAll(selectors: "ruby"): NodeListOf; + querySelectorAll(selectors: "s"): NodeListOf; + querySelectorAll(selectors: "samp"): NodeListOf; + querySelectorAll(selectors: "script"): NodeListOf; + querySelectorAll(selectors: "section"): NodeListOf; + querySelectorAll(selectors: "select"): NodeListOf; + querySelectorAll(selectors: "small"): NodeListOf; + querySelectorAll(selectors: "source"): NodeListOf; + querySelectorAll(selectors: "span"): NodeListOf; + querySelectorAll(selectors: "stop"): NodeListOf; + querySelectorAll(selectors: "strike"): NodeListOf; + querySelectorAll(selectors: "strong"): NodeListOf; + querySelectorAll(selectors: "style"): NodeListOf; + querySelectorAll(selectors: "sub"): NodeListOf; + querySelectorAll(selectors: "sup"): NodeListOf; + querySelectorAll(selectors: "svg"): NodeListOf; + querySelectorAll(selectors: "switch"): NodeListOf; + querySelectorAll(selectors: "symbol"): NodeListOf; + querySelectorAll(selectors: "table"): NodeListOf; + querySelectorAll(selectors: "tbody"): NodeListOf; + querySelectorAll(selectors: "td"): NodeListOf; + querySelectorAll(selectors: "template"): NodeListOf; + querySelectorAll(selectors: "text"): NodeListOf; + querySelectorAll(selectors: "textpath"): NodeListOf; + querySelectorAll(selectors: "textarea"): NodeListOf; + querySelectorAll(selectors: "tfoot"): NodeListOf; + querySelectorAll(selectors: "th"): NodeListOf; + querySelectorAll(selectors: "thead"): NodeListOf; + querySelectorAll(selectors: "title"): NodeListOf; + querySelectorAll(selectors: "tr"): NodeListOf; + querySelectorAll(selectors: "track"): NodeListOf; + querySelectorAll(selectors: "tspan"): NodeListOf; + querySelectorAll(selectors: "tt"): NodeListOf; + querySelectorAll(selectors: "u"): NodeListOf; + querySelectorAll(selectors: "ul"): NodeListOf; + querySelectorAll(selectors: "use"): NodeListOf; + querySelectorAll(selectors: "var"): NodeListOf; + querySelectorAll(selectors: "video"): NodeListOf; + querySelectorAll(selectors: "view"): NodeListOf; + querySelectorAll(selectors: "wbr"): NodeListOf; + querySelectorAll(selectors: "x-ms-webview"): NodeListOf; + querySelectorAll(selectors: "xmp"): NodeListOf; querySelectorAll(selectors: string): NodeListOf; } @@ -13605,30 +13959,33 @@ interface WindowSessionStorage { interface WindowTimers extends Object, WindowTimersExtension { clearInterval(handle: number): void; clearTimeout(handle: number): void; + setInterval(handler: (...args: any[]) => void, timeout: number): number; setInterval(handler: any, timeout?: any, ...args: any[]): number; + setTimeout(handler: (...args: any[]) => void, timeout: number): number; setTimeout(handler: any, timeout?: any, ...args: any[]): number; } interface WindowTimersExtension { clearImmediate(handle: number): void; - setImmediate(expression: any, ...args: any[]): number; + setImmediate(handler: (...args: any[]) => void): number; + setImmediate(handler: any, ...args: any[]): number; } interface XMLHttpRequestEventTarget { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - ontimeout: (ev: ProgressEvent) => any; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + ontimeout: (this: this, ev: ProgressEvent) => any; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13640,6 +13997,13 @@ interface StorageEventInit extends EventInit { storageArea?: Storage; } +interface Canvas2DContextAttributes { + alpha?: boolean; + willReadFrequently?: boolean; + storage?: boolean; + [attribute: string]: boolean | string | undefined; +} + interface NodeListOf extends NodeList { length: number; item(index: number): TNode; @@ -13689,6 +14053,177 @@ interface ClipboardEventInit extends EventInit { interface IDBArrayKey extends Array { } +interface RsaKeyGenParams extends Algorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyGenParams extends RsaKeyGenParams { + hash: AlgorithmIdentifier; +} + +interface RsaKeyAlgorithm extends KeyAlgorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { + hash: AlgorithmIdentifier; +} + +interface RsaHashedImportParams { + hash: AlgorithmIdentifier; +} + +interface RsaPssParams { + saltLength: number; +} + +interface RsaOaepParams extends Algorithm { + label?: BufferSource; +} + +interface EcdsaParams extends Algorithm { + hash: AlgorithmIdentifier; +} + +interface EcKeyGenParams extends Algorithm { + typedCurve: string; +} + +interface EcKeyAlgorithm extends KeyAlgorithm { + typedCurve: string; +} + +interface EcKeyImportParams { + namedCurve: string; +} + +interface EcdhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface AesCtrParams extends Algorithm { + counter: BufferSource; + length: number; +} + +interface AesKeyAlgorithm extends KeyAlgorithm { + length: number; +} + +interface AesKeyGenParams extends Algorithm { + length: number; +} + +interface AesDerivedKeyParams extends Algorithm { + length: number; +} + +interface AesCbcParams extends Algorithm { + iv: BufferSource; +} + +interface AesCmacParams extends Algorithm { + length: number; +} + +interface AesGcmParams extends Algorithm { + iv: BufferSource; + additionalData?: BufferSource; + tagLength?: number; +} + +interface AesCfbParams extends Algorithm { + iv: BufferSource; +} + +interface HmacImportParams extends Algorithm { + hash?: AlgorithmIdentifier; + length?: number; +} + +interface HmacKeyAlgorithm extends KeyAlgorithm { + hash: AlgorithmIdentifier; + length: number; +} + +interface HmacKeyGenParams extends Algorithm { + hash: AlgorithmIdentifier; + length?: number; +} + +interface DhKeyGenParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyAlgorithm extends KeyAlgorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface DhImportKeyParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface ConcatParams extends Algorithm { + hash?: AlgorithmIdentifier; + algorithmId: Uint8Array; + partyUInfo: Uint8Array; + partyVInfo: Uint8Array; + publicInfo?: Uint8Array; + privateInfo?: Uint8Array; +} + +interface HkdfCtrParams extends Algorithm { + hash: AlgorithmIdentifier; + label: BufferSource; + context: BufferSource; +} + +interface Pbkdf2Params extends Algorithm { + salt: BufferSource; + iterations: number; + hash: AlgorithmIdentifier; +} + +interface RsaOtherPrimesInfo { + r: string; + d: string; + t: string; +} + +interface JsonWebKey { + kty: string; + use?: string; + key_ops?: string[]; + alg?: string; + kid?: string; + x5u?: string; + x5c?: string; + x5t?: string; + ext?: boolean; + crv?: string; + x?: string; + y?: string; + d?: string; + n?: string; + e?: string; + p?: string; + q?: string; + dp?: string; + dq?: string; + qi?: string; + oth?: RsaOtherPrimesInfo[]; + k?: string; +} + declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject; interface ErrorEventHandler { @@ -13762,97 +14297,97 @@ declare var msCredentials: MSCredentials; declare var name: string; declare var navigator: Navigator; declare var offscreenBuffering: string | boolean; -declare var onabort: (ev: Event) => any; -declare var onafterprint: (ev: Event) => any; -declare var onbeforeprint: (ev: Event) => any; -declare var onbeforeunload: (ev: BeforeUnloadEvent) => any; -declare var onblur: (ev: FocusEvent) => any; -declare var oncanplay: (ev: Event) => any; -declare var oncanplaythrough: (ev: Event) => any; -declare var onchange: (ev: Event) => any; -declare var onclick: (ev: MouseEvent) => any; -declare var oncompassneedscalibration: (ev: Event) => any; -declare var oncontextmenu: (ev: PointerEvent) => any; -declare var ondblclick: (ev: MouseEvent) => any; -declare var ondevicelight: (ev: DeviceLightEvent) => any; -declare var ondevicemotion: (ev: DeviceMotionEvent) => any; -declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any; -declare var ondrag: (ev: DragEvent) => any; -declare var ondragend: (ev: DragEvent) => any; -declare var ondragenter: (ev: DragEvent) => any; -declare var ondragleave: (ev: DragEvent) => any; -declare var ondragover: (ev: DragEvent) => any; -declare var ondragstart: (ev: DragEvent) => any; -declare var ondrop: (ev: DragEvent) => any; -declare var ondurationchange: (ev: Event) => any; -declare var onemptied: (ev: Event) => any; -declare var onended: (ev: MediaStreamErrorEvent) => any; +declare var onabort: (this: Window, ev: UIEvent) => any; +declare var onafterprint: (this: Window, ev: Event) => any; +declare var onbeforeprint: (this: Window, ev: Event) => any; +declare var onbeforeunload: (this: Window, ev: BeforeUnloadEvent) => any; +declare var onblur: (this: Window, ev: FocusEvent) => any; +declare var oncanplay: (this: Window, ev: Event) => any; +declare var oncanplaythrough: (this: Window, ev: Event) => any; +declare var onchange: (this: Window, ev: Event) => any; +declare var onclick: (this: Window, ev: MouseEvent) => any; +declare var oncompassneedscalibration: (this: Window, ev: Event) => any; +declare var oncontextmenu: (this: Window, ev: PointerEvent) => any; +declare var ondblclick: (this: Window, ev: MouseEvent) => any; +declare var ondevicelight: (this: Window, ev: DeviceLightEvent) => any; +declare var ondevicemotion: (this: Window, ev: DeviceMotionEvent) => any; +declare var ondeviceorientation: (this: Window, ev: DeviceOrientationEvent) => any; +declare var ondrag: (this: Window, ev: DragEvent) => any; +declare var ondragend: (this: Window, ev: DragEvent) => any; +declare var ondragenter: (this: Window, ev: DragEvent) => any; +declare var ondragleave: (this: Window, ev: DragEvent) => any; +declare var ondragover: (this: Window, ev: DragEvent) => any; +declare var ondragstart: (this: Window, ev: DragEvent) => any; +declare var ondrop: (this: Window, ev: DragEvent) => any; +declare var ondurationchange: (this: Window, ev: Event) => any; +declare var onemptied: (this: Window, ev: Event) => any; +declare var onended: (this: Window, ev: MediaStreamErrorEvent) => any; declare var onerror: ErrorEventHandler; -declare var onfocus: (ev: FocusEvent) => any; -declare var onhashchange: (ev: HashChangeEvent) => any; -declare var oninput: (ev: Event) => any; -declare var oninvalid: (ev: Event) => any; -declare var onkeydown: (ev: KeyboardEvent) => any; -declare var onkeypress: (ev: KeyboardEvent) => any; -declare var onkeyup: (ev: KeyboardEvent) => any; -declare var onload: (ev: Event) => any; -declare var onloadeddata: (ev: Event) => any; -declare var onloadedmetadata: (ev: Event) => any; -declare var onloadstart: (ev: Event) => any; -declare var onmessage: (ev: MessageEvent) => any; -declare var onmousedown: (ev: MouseEvent) => any; -declare var onmouseenter: (ev: MouseEvent) => any; -declare var onmouseleave: (ev: MouseEvent) => any; -declare var onmousemove: (ev: MouseEvent) => any; -declare var onmouseout: (ev: MouseEvent) => any; -declare var onmouseover: (ev: MouseEvent) => any; -declare var onmouseup: (ev: MouseEvent) => any; -declare var onmousewheel: (ev: WheelEvent) => any; -declare var onmsgesturechange: (ev: MSGestureEvent) => any; -declare var onmsgesturedoubletap: (ev: MSGestureEvent) => any; -declare var onmsgestureend: (ev: MSGestureEvent) => any; -declare var onmsgesturehold: (ev: MSGestureEvent) => any; -declare var onmsgesturestart: (ev: MSGestureEvent) => any; -declare var onmsgesturetap: (ev: MSGestureEvent) => any; -declare var onmsinertiastart: (ev: MSGestureEvent) => any; -declare var onmspointercancel: (ev: MSPointerEvent) => any; -declare var onmspointerdown: (ev: MSPointerEvent) => any; -declare var onmspointerenter: (ev: MSPointerEvent) => any; -declare var onmspointerleave: (ev: MSPointerEvent) => any; -declare var onmspointermove: (ev: MSPointerEvent) => any; -declare var onmspointerout: (ev: MSPointerEvent) => any; -declare var onmspointerover: (ev: MSPointerEvent) => any; -declare var onmspointerup: (ev: MSPointerEvent) => any; -declare var onoffline: (ev: Event) => any; -declare var ononline: (ev: Event) => any; -declare var onorientationchange: (ev: Event) => any; -declare var onpagehide: (ev: PageTransitionEvent) => any; -declare var onpageshow: (ev: PageTransitionEvent) => any; -declare var onpause: (ev: Event) => any; -declare var onplay: (ev: Event) => any; -declare var onplaying: (ev: Event) => any; -declare var onpopstate: (ev: PopStateEvent) => any; -declare var onprogress: (ev: ProgressEvent) => any; -declare var onratechange: (ev: Event) => any; -declare var onreadystatechange: (ev: ProgressEvent) => any; -declare var onreset: (ev: Event) => any; -declare var onresize: (ev: UIEvent) => any; -declare var onscroll: (ev: UIEvent) => any; -declare var onseeked: (ev: Event) => any; -declare var onseeking: (ev: Event) => any; -declare var onselect: (ev: UIEvent) => any; -declare var onstalled: (ev: Event) => any; -declare var onstorage: (ev: StorageEvent) => any; -declare var onsubmit: (ev: Event) => any; -declare var onsuspend: (ev: Event) => any; -declare var ontimeupdate: (ev: Event) => any; +declare var onfocus: (this: Window, ev: FocusEvent) => any; +declare var onhashchange: (this: Window, ev: HashChangeEvent) => any; +declare var oninput: (this: Window, ev: Event) => any; +declare var oninvalid: (this: Window, ev: Event) => any; +declare var onkeydown: (this: Window, ev: KeyboardEvent) => any; +declare var onkeypress: (this: Window, ev: KeyboardEvent) => any; +declare var onkeyup: (this: Window, ev: KeyboardEvent) => any; +declare var onload: (this: Window, ev: Event) => any; +declare var onloadeddata: (this: Window, ev: Event) => any; +declare var onloadedmetadata: (this: Window, ev: Event) => any; +declare var onloadstart: (this: Window, ev: Event) => any; +declare var onmessage: (this: Window, ev: MessageEvent) => any; +declare var onmousedown: (this: Window, ev: MouseEvent) => any; +declare var onmouseenter: (this: Window, ev: MouseEvent) => any; +declare var onmouseleave: (this: Window, ev: MouseEvent) => any; +declare var onmousemove: (this: Window, ev: MouseEvent) => any; +declare var onmouseout: (this: Window, ev: MouseEvent) => any; +declare var onmouseover: (this: Window, ev: MouseEvent) => any; +declare var onmouseup: (this: Window, ev: MouseEvent) => any; +declare var onmousewheel: (this: Window, ev: WheelEvent) => any; +declare var onmsgesturechange: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturedoubletap: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgestureend: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturehold: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturestart: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturetap: (this: Window, ev: MSGestureEvent) => any; +declare var onmsinertiastart: (this: Window, ev: MSGestureEvent) => any; +declare var onmspointercancel: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerdown: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerenter: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerleave: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointermove: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerout: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerover: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerup: (this: Window, ev: MSPointerEvent) => any; +declare var onoffline: (this: Window, ev: Event) => any; +declare var ononline: (this: Window, ev: Event) => any; +declare var onorientationchange: (this: Window, ev: Event) => any; +declare var onpagehide: (this: Window, ev: PageTransitionEvent) => any; +declare var onpageshow: (this: Window, ev: PageTransitionEvent) => any; +declare var onpause: (this: Window, ev: Event) => any; +declare var onplay: (this: Window, ev: Event) => any; +declare var onplaying: (this: Window, ev: Event) => any; +declare var onpopstate: (this: Window, ev: PopStateEvent) => any; +declare var onprogress: (this: Window, ev: ProgressEvent) => any; +declare var onratechange: (this: Window, ev: Event) => any; +declare var onreadystatechange: (this: Window, ev: ProgressEvent) => any; +declare var onreset: (this: Window, ev: Event) => any; +declare var onresize: (this: Window, ev: UIEvent) => any; +declare var onscroll: (this: Window, ev: UIEvent) => any; +declare var onseeked: (this: Window, ev: Event) => any; +declare var onseeking: (this: Window, ev: Event) => any; +declare var onselect: (this: Window, ev: UIEvent) => any; +declare var onstalled: (this: Window, ev: Event) => any; +declare var onstorage: (this: Window, ev: StorageEvent) => any; +declare var onsubmit: (this: Window, ev: Event) => any; +declare var onsuspend: (this: Window, ev: Event) => any; +declare var ontimeupdate: (this: Window, ev: Event) => any; declare var ontouchcancel: (ev: TouchEvent) => any; declare var ontouchend: (ev: TouchEvent) => any; declare var ontouchmove: (ev: TouchEvent) => any; declare var ontouchstart: (ev: TouchEvent) => any; -declare var onunload: (ev: Event) => any; -declare var onvolumechange: (ev: Event) => any; -declare var onwaiting: (ev: Event) => any; +declare var onunload: (this: Window, ev: Event) => any; +declare var onvolumechange: (this: Window, ev: Event) => any; +declare var onwaiting: (this: Window, ev: Event) => any; declare var opener: Window; declare var orientation: string | number; declare var outerHeight: number; @@ -13912,120 +14447,123 @@ declare function dispatchEvent(evt: Event): boolean; declare function removeEventListener(type: string, listener?: EventListenerOrEventListenerObject, useCapture?: boolean): void; declare function clearInterval(handle: number): void; declare function clearTimeout(handle: number): void; +declare function setInterval(handler: (...args: any[]) => void, timeout: number): number; declare function setInterval(handler: any, timeout?: any, ...args: any[]): number; +declare function setTimeout(handler: (...args: any[]) => void, timeout: number): number; declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number; declare function clearImmediate(handle: number): void; -declare function setImmediate(expression: any, ...args: any[]): number; +declare function setImmediate(handler: (...args: any[]) => void): number; +declare function setImmediate(handler: any, ...args: any[]): number; declare var sessionStorage: Storage; declare var localStorage: Storage; declare var console: Console; -declare var onpointercancel: (ev: PointerEvent) => any; -declare var onpointerdown: (ev: PointerEvent) => any; -declare var onpointerenter: (ev: PointerEvent) => any; -declare var onpointerleave: (ev: PointerEvent) => any; -declare var onpointermove: (ev: PointerEvent) => any; -declare var onpointerout: (ev: PointerEvent) => any; -declare var onpointerover: (ev: PointerEvent) => any; -declare var onpointerup: (ev: PointerEvent) => any; -declare var onwheel: (ev: WheelEvent) => any; +declare var onpointercancel: (this: Window, ev: PointerEvent) => any; +declare var onpointerdown: (this: Window, ev: PointerEvent) => any; +declare var onpointerenter: (this: Window, ev: PointerEvent) => any; +declare var onpointerleave: (this: Window, ev: PointerEvent) => any; +declare var onpointermove: (this: Window, ev: PointerEvent) => any; +declare var onpointerout: (this: Window, ev: PointerEvent) => any; +declare var onpointerover: (this: Window, ev: PointerEvent) => any; +declare var onpointerup: (this: Window, ev: PointerEvent) => any; +declare var onwheel: (this: Window, ev: WheelEvent) => any; declare var indexedDB: IDBFactory; declare function atob(encodedString: string): string; declare function btoa(rawString: string): string; -declare function addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "devicelight", listener: (ev: DeviceLightEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureChange", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureDoubleTap", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureEnd", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureHold", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureStart", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureTap", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSInertiaStart", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerCancel", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerDown", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerEnter", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerLeave", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerMove", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerOut", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerOver", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerUp", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "abort", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "afterprint", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "beforeprint", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "beforeunload", listener: (this: Window, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "blur", listener: (this: Window, ev: FocusEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "canplay", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "canplaythrough", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "change", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "click", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "compassneedscalibration", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "contextmenu", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dblclick", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "devicelight", listener: (this: Window, ev: DeviceLightEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "devicemotion", listener: (this: Window, ev: DeviceMotionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "deviceorientation", listener: (this: Window, ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "drag", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragend", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragenter", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragleave", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragover", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragstart", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "drop", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "durationchange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "emptied", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "ended", listener: (this: Window, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "focus", listener: (this: Window, ev: FocusEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "hashchange", listener: (this: Window, ev: HashChangeEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "input", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "invalid", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keydown", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keypress", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keyup", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "load", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadeddata", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadedmetadata", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadstart", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "message", listener: (this: Window, ev: MessageEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousedown", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseenter", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseleave", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousemove", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseout", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseover", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseup", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousewheel", listener: (this: Window, ev: WheelEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "offline", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "online", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "orientationchange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pagehide", listener: (this: Window, ev: PageTransitionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pageshow", listener: (this: Window, ev: PageTransitionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pause", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "play", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "playing", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointercancel", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerdown", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerenter", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerleave", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointermove", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerout", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerover", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerup", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "popstate", listener: (this: Window, ev: PopStateEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "progress", listener: (this: Window, ev: ProgressEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "ratechange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "readystatechange", listener: (this: Window, ev: ProgressEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "reset", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "resize", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "scroll", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "seeked", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "seeking", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "select", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "stalled", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "storage", listener: (this: Window, ev: StorageEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "submit", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "suspend", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "timeupdate", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "unload", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "volumechange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "waiting", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "wheel", listener: (this: Window, ev: WheelEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; type AAGUID = string; type AlgorithmIdentifier = string | Algorithm; @@ -14058,4 +14596,6 @@ type MSOutboundPayload = MSVideoSendPayload | MSAudioSendPayload; type RTCIceGatherCandidate = RTCIceCandidate | RTCIceCandidateComplete; type RTCTransport = RTCDtlsTransport | RTCSrtpSdesTransport; type payloadtype = number; -type IDBValidKey = number | string | Date | IDBArrayKey; \ No newline at end of file +type IDBValidKey = number | string | Date | IDBArrayKey; +type BufferSource = ArrayBuffer | ArrayBufferView; +type MouseWheelEvent = WheelEvent; \ No newline at end of file diff --git a/lib/lib.es2015.promise.d.ts b/lib/lib.es2015.promise.d.ts index 4817121154f..905cc13cba5 100644 --- a/lib/lib.es2015.promise.d.ts +++ b/lib/lib.es2015.promise.d.ts @@ -19,59 +19,149 @@ and limitations under the License. */ interface Promise { /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled: (value: T) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; + + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled: (value: T) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; + + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled: (value: T) => TResult | PromiseLike): Promise; + + /** + * Creates a new Promise with the same internal state of this Promise. + * @returns A Promise. + */ + then(): Promise; /** * Attaches a callback for only the rejection of the Promise. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of the callback. */ - catch(onrejected?: (reason: any) => T | PromiseLike): Promise; - catch(onrejected?: (reason: any) => void): Promise; + catch(onrejected: (reason: any) => TResult | PromiseLike): Promise; + + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected: (reason: any) => T | PromiseLike): Promise; } interface PromiseConstructor { - /** - * A reference to the prototype. + /** + * A reference to the prototype. */ readonly prototype: Promise; /** * Creates a new Promise. - * @param executor A callback used to initialize the promise. This callback is passed two arguments: - * a resolve callback used resolve the promise with a value or the result of another promise, + * @param executor A callback used to initialize the promise. This callback is passed two arguments: + * a resolve callback used resolve the promise with a value or the result of another promise, * and a reject callback used to reject the promise with a provided reason or error. */ new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises + * Creates a Promise that is resolved with an array of results when all of the provided Promises * resolve, or rejected when any Promise is rejected. * @param values An array of Promises. * @returns A new Promise. */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike ]): Promise<[T1, T2, T3, T4]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: (T | PromiseLike)[]): Promise; + /** * Creates a new rejected promise for the provided reason. * @param reason The reason the promise was rejected. * @returns A new rejected Promise. */ - reject(reason: any): Promise; + reject(reason: any): Promise; /** * Creates a new rejected promise for the provided reason. diff --git a/lib/lib.es5.d.ts b/lib/lib.es5.d.ts index 3b9e2d40fce..e082101411d 100644 --- a/lib/lib.es5.d.ts +++ b/lib/lib.es5.d.ts @@ -987,7 +987,7 @@ interface JSON { /** * 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 An array of strings and numbers that acts as a white list for selecting the object properties that will be stringified. + * @param replacer An array of strings and numbers that acts as a approved 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?: (number | string)[] | null, space?: string | number): string; @@ -1540,7 +1540,7 @@ 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, + * 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. @@ -1813,7 +1813,7 @@ 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, + * 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. @@ -2087,7 +2087,7 @@ 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, + * 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. @@ -2360,7 +2360,7 @@ 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, + * 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. @@ -2634,7 +2634,7 @@ 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, + * 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. @@ -2907,7 +2907,7 @@ 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, + * 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. @@ -3180,7 +3180,7 @@ 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, + * 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. @@ -3453,7 +3453,7 @@ 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, + * 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. @@ -3727,7 +3727,7 @@ 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, + * 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. diff --git a/lib/lib.es6.d.ts b/lib/lib.es6.d.ts index a4b790b852b..8e9de3f4ec9 100644 --- a/lib/lib.es6.d.ts +++ b/lib/lib.es6.d.ts @@ -987,7 +987,7 @@ interface JSON { /** * 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 An array of strings and numbers that acts as a white list for selecting the object properties that will be stringified. + * @param replacer An array of strings and numbers that acts as a approved 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?: (number | string)[] | null, space?: string | number): string; @@ -1540,7 +1540,7 @@ 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, + * 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. @@ -1813,7 +1813,7 @@ 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, + * 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. @@ -2087,7 +2087,7 @@ 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, + * 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. @@ -2360,7 +2360,7 @@ 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, + * 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. @@ -2634,7 +2634,7 @@ 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, + * 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. @@ -2907,7 +2907,7 @@ 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, + * 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. @@ -3180,7 +3180,7 @@ 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, + * 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. @@ -3453,7 +3453,7 @@ 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, + * 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. @@ -3727,7 +3727,7 @@ 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, + * 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. @@ -5118,59 +5118,149 @@ interface Float64ArrayConstructor { */ interface Promise { /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled: (value: T) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; + + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled: (value: T) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; + + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled: (value: T) => TResult | PromiseLike): Promise; + + /** + * Creates a new Promise with the same internal state of this Promise. + * @returns A Promise. + */ + then(): Promise; /** * Attaches a callback for only the rejection of the Promise. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of the callback. */ - catch(onrejected?: (reason: any) => T | PromiseLike): Promise; - catch(onrejected?: (reason: any) => void): Promise; + catch(onrejected: (reason: any) => TResult | PromiseLike): Promise; + + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected: (reason: any) => T | PromiseLike): Promise; } interface PromiseConstructor { - /** - * A reference to the prototype. + /** + * A reference to the prototype. */ readonly prototype: Promise; /** * Creates a new Promise. - * @param executor A callback used to initialize the promise. This callback is passed two arguments: - * a resolve callback used resolve the promise with a value or the result of another promise, + * @param executor A callback used to initialize the promise. This callback is passed two arguments: + * a resolve callback used resolve the promise with a value or the result of another promise, * and a reject callback used to reject the promise with a provided reason or error. */ new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises + * Creates a Promise that is resolved with an array of results when all of the provided Promises * resolve, or rejected when any Promise is rejected. * @param values An array of Promises. * @returns A new Promise. */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike ]): Promise<[T1, T2, T3, T4]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: (T | PromiseLike)[]): Promise; + /** * Creates a new rejected promise for the provided reason. * @param reason The reason the promise was rejected. * @returns A new rejected Promise. */ - reject(reason: any): Promise; + reject(reason: any): Promise; /** * Creates a new rejected promise for the provided reason. @@ -5596,7 +5686,7 @@ interface Float64Array { ///////////////////////////// interface Algorithm { - name?: string; + name: string; } interface AriaRequestEventInit extends EventInit { @@ -6443,6 +6533,7 @@ interface UIEventInit extends EventInit { } interface WebGLContextAttributes { + failIfMajorPerformanceCaveat?: boolean; alpha?: boolean; depth?: boolean; stencil?: boolean; @@ -6508,14 +6599,14 @@ declare var AnimationEvent: { } interface ApplicationCache extends EventTarget { - oncached: (ev: Event) => any; - onchecking: (ev: Event) => any; - ondownloading: (ev: Event) => any; - onerror: (ev: Event) => any; - onnoupdate: (ev: Event) => any; - onobsolete: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - onupdateready: (ev: Event) => any; + oncached: (this: this, ev: Event) => any; + onchecking: (this: this, ev: Event) => any; + ondownloading: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onnoupdate: (this: this, ev: Event) => any; + onobsolete: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onupdateready: (this: this, ev: Event) => any; readonly status: number; abort(): void; swapCache(): void; @@ -6526,14 +6617,14 @@ interface ApplicationCache extends EventTarget { readonly OBSOLETE: number; readonly UNCACHED: number; readonly UPDATEREADY: number; - addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cached", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "checking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "downloading", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "noupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "obsolete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "updateready", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -6592,11 +6683,11 @@ interface AudioBufferSourceNode extends AudioNode { loop: boolean; loopEnd: number; loopStart: number; - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; readonly playbackRate: AudioParam; start(when?: number, offset?: number, duration?: number): void; stop(when?: number): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -6720,14 +6811,14 @@ declare var AudioTrack: { interface AudioTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; - onchange: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + onchange: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; 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; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: AudioTrack; } @@ -8002,294 +8093,294 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Fires when the user aborts the download. * @param ev The event. */ - onabort: (ev: Event) => any; + onabort: (this: this, ev: UIEvent) => any; /** * Fires when the object is set as the active element. * @param ev The event. */ - onactivate: (ev: UIEvent) => any; + onactivate: (this: this, ev: UIEvent) => any; /** * Fires immediately before the object is set as the active element. * @param ev The event. */ - onbeforeactivate: (ev: UIEvent) => any; + onbeforeactivate: (this: this, ev: UIEvent) => any; /** * Fires immediately before the activeElement is changed from the current object to another object in the parent document. * @param ev The event. */ - onbeforedeactivate: (ev: UIEvent) => any; + onbeforedeactivate: (this: this, ev: UIEvent) => any; /** * Fires when the object loses the input focus. * @param ev The focus event. */ - onblur: (ev: FocusEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; /** * Occurs when playback is possible, but would require further buffering. * @param ev The event. */ - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; /** * Fires when the contents of the object or selection have changed. * @param ev The event. */ - onchange: (ev: Event) => any; + onchange: (this: this, ev: Event) => any; /** * Fires when the user clicks the left mouse button on the object * @param ev The mouse event. */ - onclick: (ev: MouseEvent) => any; + onclick: (this: this, ev: MouseEvent) => any; /** * Fires when the user clicks the right mouse button in the client area, opening the context menu. * @param ev The mouse event. */ - oncontextmenu: (ev: PointerEvent) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; /** * Fires when the user double-clicks the object. * @param ev The mouse event. */ - ondblclick: (ev: MouseEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; /** * Fires when the activeElement is changed from the current object to another object in the parent document. * @param ev The UI Event */ - ondeactivate: (ev: UIEvent) => any; + ondeactivate: (this: this, ev: UIEvent) => any; /** * Fires on the source object continuously during a drag operation. * @param ev The event. */ - ondrag: (ev: DragEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; /** * Fires on the source object when the user releases the mouse at the close of a drag operation. * @param ev The event. */ - ondragend: (ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; /** * Fires on the target element when the user drags the object to a valid drop target. * @param ev The drag event. */ - ondragenter: (ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; /** * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation. * @param ev The drag event. */ - ondragleave: (ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; /** * Fires on the target element continuously while the user drags the object over a valid drop target. * @param ev The event. */ - ondragover: (ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; /** * Fires on the source object when the user starts to drag a text selection or selected object. * @param ev The event. */ - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; /** * Occurs when the duration attribute is updated. * @param ev The event. */ - ondurationchange: (ev: Event) => any; + ondurationchange: (this: this, ev: Event) => any; /** * Occurs when the media element is reset to its initial state. * @param ev The event. */ - onemptied: (ev: Event) => any; + onemptied: (this: this, ev: Event) => any; /** * Occurs when the end of playback is reached. * @param ev The event */ - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; /** * Fires when an error occurs during object loading. * @param ev The event. */ - onerror: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; /** * Fires when the object receives focus. * @param ev The event. */ - onfocus: (ev: FocusEvent) => any; - onfullscreenchange: (ev: Event) => any; - onfullscreenerror: (ev: Event) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onfullscreenchange: (this: this, ev: Event) => any; + onfullscreenerror: (this: this, ev: Event) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; /** * Fires when the user presses a key. * @param ev The keyboard event */ - onkeydown: (ev: KeyboardEvent) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; /** * Fires when the user presses an alphanumeric key. * @param ev The event. */ - onkeypress: (ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; /** * Fires when the user releases a key. * @param ev The keyboard event */ - onkeyup: (ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; /** * Fires immediately after the browser loads the object. * @param ev The event. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; /** * Occurs when media data is loaded at the current playback position. * @param ev The event. */ - onloadeddata: (ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; /** * Occurs when the duration and dimensions of the media have been determined. * @param ev The event. */ - onloadedmetadata: (ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; /** * Occurs when Internet Explorer begins looking for media data. * @param ev The event. */ - onloadstart: (ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; /** * Fires when the user clicks the object with either mouse button. * @param ev The mouse event. */ - onmousedown: (ev: MouseEvent) => any; + onmousedown: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse over the object. * @param ev The mouse event. */ - onmousemove: (ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse pointer outside the boundaries of the object. * @param ev The mouse event. */ - onmouseout: (ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse pointer into the object. * @param ev The mouse event. */ - onmouseover: (ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; /** * Fires when the user releases a mouse button while the mouse is over the object. * @param ev The mouse event. */ - onmouseup: (ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; /** * Fires when the wheel button is rotated. * @param ev The mouse event */ - onmousewheel: (ev: WheelEvent) => any; - onmscontentzoom: (ev: UIEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmscontentzoom: (this: this, ev: UIEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmsmanipulationstatechanged: (this: this, ev: MSManipulationEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; /** * Occurs when an item is removed from a Jump List of a webpage running in Site Mode. * @param ev The event. */ - onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any; + onmssitemodejumplistitemremoved: (this: this, ev: MSSiteModeEvent) => any; /** * Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode. * @param ev The event. */ - onmsthumbnailclick: (ev: MSSiteModeEvent) => any; + onmsthumbnailclick: (this: this, ev: MSSiteModeEvent) => any; /** * Occurs when playback is paused. * @param ev The event. */ - onpause: (ev: Event) => any; + onpause: (this: this, ev: Event) => any; /** * Occurs when the play method is requested. * @param ev The event. */ - onplay: (ev: Event) => any; + onplay: (this: this, ev: Event) => any; /** * Occurs when the audio or video has started playing. * @param ev The event. */ - onplaying: (ev: Event) => any; - onpointerlockchange: (ev: Event) => any; - onpointerlockerror: (ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onpointerlockchange: (this: this, ev: Event) => any; + onpointerlockerror: (this: this, ev: Event) => any; /** * Occurs to indicate progress while downloading media data. * @param ev The event. */ - onprogress: (ev: ProgressEvent) => any; + onprogress: (this: this, ev: ProgressEvent) => any; /** * Occurs when the playback rate is increased or decreased. * @param ev The event. */ - onratechange: (ev: Event) => any; + onratechange: (this: this, ev: Event) => any; /** * Fires when the state of the object has changed. * @param ev The event */ - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; /** * Fires when the user resets a form. * @param ev The event. */ - onreset: (ev: Event) => any; + onreset: (this: this, ev: Event) => any; /** * Fires when the user repositions the scroll box in the scroll bar on the object. * @param ev The event. */ - onscroll: (ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; /** * Occurs when the seek operation ends. * @param ev The event. */ - onseeked: (ev: Event) => any; + onseeked: (this: this, ev: Event) => any; /** * Occurs when the current playback position is moved. * @param ev The event. */ - onseeking: (ev: Event) => any; + onseeking: (this: this, ev: Event) => any; /** * Fires when the current selection changes. * @param ev The event. */ - onselect: (ev: UIEvent) => any; + onselect: (this: this, ev: UIEvent) => any; /** * Fires when the selection state of a document changes. * @param ev The event. */ - onselectionchange: (ev: Event) => any; - onselectstart: (ev: Event) => any; + onselectionchange: (this: this, ev: Event) => any; + onselectstart: (this: this, ev: Event) => any; /** * Occurs when the download has stopped. * @param ev The event. */ - onstalled: (ev: Event) => any; + onstalled: (this: this, ev: Event) => any; /** * Fires when the user clicks the Stop button or leaves the Web page. * @param ev The event. */ - onstop: (ev: Event) => any; - onsubmit: (ev: Event) => any; + onstop: (this: this, ev: Event) => any; + onsubmit: (this: this, ev: Event) => any; /** * Occurs if the load operation has been intentionally halted. * @param ev The event. */ - onsuspend: (ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; /** * Occurs to indicate the current playback position. * @param ev The event. */ - ontimeupdate: (ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; @@ -8298,14 +8389,14 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Occurs when the volume is changed, or playback is muted or unmuted. * @param ev The event. */ - onvolumechange: (ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; /** * Occurs when playback stops because the next frame of a video resource is not available. * @param ev The event. */ - onwaiting: (ev: Event) => any; - onwebkitfullscreenchange: (ev: Event) => any; - onwebkitfullscreenerror: (ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; + onwebkitfullscreenchange: (this: this, ev: Event) => any; + onwebkitfullscreenerror: (this: this, ev: Event) => any; plugins: HTMLCollectionOf; readonly pointerLockElement: Element; /** @@ -8580,7 +8671,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Returns a reference to the first object with the specified value of the ID or NAME attribute. * @param elementId String that specifies the ID value. Case-insensitive. */ - getElementById(elementId: string): HTMLElement; + getElementById(elementId: string): HTMLElement | null; getElementsByClassName(classNames: string): HTMLCollectionOf; /** * Gets a collection of objects based on the value of the NAME or ID attribute. @@ -8837,103 +8928,103 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param content The text and HTML tags to write. */ writeln(...content: string[]): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "fullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "fullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerlockchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointerlockerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectionchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "fullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "fullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mssitemodejumplistitemremoved", listener: (this: this, ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msthumbnailclick", listener: (this: this, ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerlockchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointerlockerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectionchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stop", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9021,33 +9112,33 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec id: string; msContentZoomFactor: number; readonly msRegionOverflow: string; - onariarequest: (ev: AriaRequestEvent) => any; - oncommand: (ev: CommandEvent) => any; - ongotpointercapture: (ev: PointerEvent) => any; - onlostpointercapture: (ev: PointerEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsgotpointercapture: (ev: MSPointerEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmslostpointercapture: (ev: MSPointerEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; + onariarequest: (this: this, ev: AriaRequestEvent) => any; + oncommand: (this: this, ev: CommandEvent) => any; + ongotpointercapture: (this: this, ev: PointerEvent) => any; + onlostpointercapture: (this: this, ev: PointerEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsgotpointercapture: (this: this, ev: MSPointerEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmslostpointercapture: (this: this, ev: MSPointerEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; ontouchstart: (ev: TouchEvent) => any; - onwebkitfullscreenchange: (ev: Event) => any; - onwebkitfullscreenerror: (ev: Event) => any; + onwebkitfullscreenchange: (this: this, ev: Event) => any; + onwebkitfullscreenerror: (this: this, ev: Event) => any; readonly prefix: string | null; readonly scrollHeight: number; scrollLeft: number; @@ -9055,7 +9146,7 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec readonly scrollWidth: number; readonly tagName: string; innerHTML: string; - getAttribute(name?: string): string | null; + getAttribute(name: string): string | null; getAttributeNS(namespaceURI: string, localName: string): string; getAttributeNode(name: string): Attr; getAttributeNodeNS(namespaceURI: string, localName: string): Attr; @@ -9265,42 +9356,43 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec webkitRequestFullscreen(): void; getElementsByClassName(classNames: string): NodeListOf; matches(selector: string): boolean; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + closest(selector: string): Element | null; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9791,147 +9883,147 @@ interface HTMLBodyElement extends HTMLElement { bgProperties: string; link: any; noWrap: boolean; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onblur: (ev: FocusEvent) => any; - onerror: (ev: Event) => any; - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - onload: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onpopstate: (ev: PopStateEvent) => any; - onresize: (ev: UIEvent) => any; - onstorage: (ev: StorageEvent) => any; - onunload: (ev: Event) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + onload: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onpopstate: (this: this, ev: PopStateEvent) => any; + onresize: (this: this, ev: UIEvent) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onunload: (this: this, ev: Event) => any; text: any; vLink: any; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (this: this, ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -10024,9 +10116,9 @@ interface HTMLCanvasElement extends HTMLElement { * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas. * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl"); */ - getContext(contextId: "2d"): CanvasRenderingContext2D; - getContext(contextId: "experimental-webgl"): WebGLRenderingContext; - getContext(contextId: string, ...args: any[]): CanvasRenderingContext2D | WebGLRenderingContext; + getContext(contextId: "2d", contextAttributes?: Canvas2DContextAttributes): CanvasRenderingContext2D | null; + getContext(contextId: "webgl" | "experimental-webgl", contextAttributes?: WebGLContextAttributes): WebGLRenderingContext | null; + getContext(contextId: string, contextAttributes?: {}): CanvasRenderingContext2D | WebGLRenderingContext | null; /** * Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing. */ @@ -10036,7 +10128,7 @@ interface HTMLCanvasElement extends HTMLElement { * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image. */ toDataURL(type?: string, ...args: any[]): string; - toBlob(): Blob; + toBlob(callback: (result: Blob | null) => void, ... arguments: any[]): void; } declare var HTMLCanvasElement: { @@ -10134,73 +10226,73 @@ interface HTMLElement extends Element { readonly offsetParent: Element; readonly offsetTop: number; readonly offsetWidth: number; - onabort: (ev: Event) => any; - onactivate: (ev: UIEvent) => any; - onbeforeactivate: (ev: UIEvent) => any; - onbeforecopy: (ev: ClipboardEvent) => any; - onbeforecut: (ev: ClipboardEvent) => any; - onbeforedeactivate: (ev: UIEvent) => any; - onbeforepaste: (ev: ClipboardEvent) => any; - onblur: (ev: FocusEvent) => any; - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; - onchange: (ev: Event) => any; - onclick: (ev: MouseEvent) => any; - oncontextmenu: (ev: PointerEvent) => any; - oncopy: (ev: ClipboardEvent) => any; - oncuechange: (ev: Event) => any; - oncut: (ev: ClipboardEvent) => any; - ondblclick: (ev: MouseEvent) => any; - ondeactivate: (ev: UIEvent) => any; - ondrag: (ev: DragEvent) => any; - ondragend: (ev: DragEvent) => any; - ondragenter: (ev: DragEvent) => any; - ondragleave: (ev: DragEvent) => any; - ondragover: (ev: DragEvent) => any; - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; - ondurationchange: (ev: Event) => any; - onemptied: (ev: Event) => any; - onended: (ev: MediaStreamErrorEvent) => any; - onerror: (ev: Event) => any; - onfocus: (ev: FocusEvent) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; - onkeydown: (ev: KeyboardEvent) => any; - onkeypress: (ev: KeyboardEvent) => any; - onkeyup: (ev: KeyboardEvent) => any; - onload: (ev: Event) => any; - onloadeddata: (ev: Event) => any; - onloadedmetadata: (ev: Event) => any; - onloadstart: (ev: Event) => any; - onmousedown: (ev: MouseEvent) => any; - onmouseenter: (ev: MouseEvent) => any; - onmouseleave: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; - onmousewheel: (ev: WheelEvent) => any; - onmscontentzoom: (ev: UIEvent) => any; - onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any; - onpaste: (ev: ClipboardEvent) => any; - onpause: (ev: Event) => any; - onplay: (ev: Event) => any; - onplaying: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - onratechange: (ev: Event) => any; - onreset: (ev: Event) => any; - onscroll: (ev: UIEvent) => any; - onseeked: (ev: Event) => any; - onseeking: (ev: Event) => any; - onselect: (ev: UIEvent) => any; - onselectstart: (ev: Event) => any; - onstalled: (ev: Event) => any; - onsubmit: (ev: Event) => any; - onsuspend: (ev: Event) => any; - ontimeupdate: (ev: Event) => any; - onvolumechange: (ev: Event) => any; - onwaiting: (ev: Event) => any; + onabort: (this: this, ev: UIEvent) => any; + onactivate: (this: this, ev: UIEvent) => any; + onbeforeactivate: (this: this, ev: UIEvent) => any; + onbeforecopy: (this: this, ev: ClipboardEvent) => any; + onbeforecut: (this: this, ev: ClipboardEvent) => any; + onbeforedeactivate: (this: this, ev: UIEvent) => any; + onbeforepaste: (this: this, ev: ClipboardEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; + onchange: (this: this, ev: Event) => any; + onclick: (this: this, ev: MouseEvent) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; + oncopy: (this: this, ev: ClipboardEvent) => any; + oncuechange: (this: this, ev: Event) => any; + oncut: (this: this, ev: ClipboardEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + ondeactivate: (this: this, ev: UIEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; + ondurationchange: (this: this, ev: Event) => any; + onemptied: (this: this, ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onfocus: (this: this, ev: FocusEvent) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; + onload: (this: this, ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmouseenter: (this: this, ev: MouseEvent) => any; + onmouseleave: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmscontentzoom: (this: this, ev: UIEvent) => any; + onmsmanipulationstatechanged: (this: this, ev: MSManipulationEvent) => any; + onpaste: (this: this, ev: ClipboardEvent) => any; + onpause: (this: this, ev: Event) => any; + onplay: (this: this, ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onratechange: (this: this, ev: Event) => any; + onreset: (this: this, ev: Event) => any; + onscroll: (this: this, ev: UIEvent) => any; + onseeked: (this: this, ev: Event) => any; + onseeking: (this: this, ev: Event) => any; + onselect: (this: this, ev: UIEvent) => any; + onselectstart: (this: this, ev: Event) => any; + onstalled: (this: this, ev: Event) => any; + onsubmit: (this: this, ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; outerHTML: string; outerText: string; spellcheck: boolean; @@ -10217,109 +10309,109 @@ interface HTMLElement extends Element { msGetInputContext(): MSInputMethodContext; scrollIntoView(top?: boolean): void; setActive(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -10561,7 +10653,7 @@ interface HTMLFrameElement extends HTMLElement, GetSVGDocument { /** * Raised when the object has been completely received from the server. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; /** * Sets or retrieves whether the frame can be scrolled. */ @@ -10574,110 +10666,110 @@ interface HTMLFrameElement extends HTMLElement, GetSVGDocument { * Sets or retrieves the width of the object. */ width: string | number; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -10705,152 +10797,152 @@ interface HTMLFrameSetElement extends HTMLElement { */ frameSpacing: any; name: string; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; /** * Fires when the object loses the input focus. */ - onblur: (ev: FocusEvent) => any; - onerror: (ev: Event) => any; + onblur: (this: this, ev: FocusEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; /** * Fires when the object receives focus. */ - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - onload: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onresize: (ev: UIEvent) => any; - onstorage: (ev: StorageEvent) => any; - onunload: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + onload: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onresize: (this: this, ev: UIEvent) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onunload: (this: this, ev: Event) => any; /** * Sets or retrieves the frame heights of the object. */ rows: string; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -10970,7 +11062,7 @@ interface HTMLIFrameElement extends HTMLElement, GetSVGDocument { /** * Raised when the object has been completely received from the server. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; readonly sandbox: DOMSettableTokenList; /** * Sets or retrieves whether the frame can be scrolled. @@ -10988,110 +11080,110 @@ interface HTMLIFrameElement extends HTMLElement, GetSVGDocument { * Sets or retrieves the width of the object. */ width: string; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11235,7 +11327,7 @@ interface HTMLInputElement extends HTMLElement { /** * Returns a FileList object on a file type input object. */ - readonly files: FileList; + readonly files: FileList | null; /** * Retrieves a reference to the form that the object is embedded in. */ @@ -11511,9 +11603,9 @@ interface HTMLMarqueeElement extends HTMLElement { height: string; hspace: number; loop: number; - onbounce: (ev: Event) => any; - onfinish: (ev: Event) => any; - onstart: (ev: Event) => any; + onbounce: (this: this, ev: Event) => any; + onfinish: (this: this, ev: Event) => any; + onstart: (this: this, ev: Event) => any; scrollAmount: number; scrollDelay: number; trueSpeed: boolean; @@ -11521,112 +11613,112 @@ interface HTMLMarqueeElement extends HTMLElement { width: string; start(): void; stop(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "bounce", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "finish", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "start", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11724,8 +11816,8 @@ interface HTMLMediaElement extends HTMLElement { * Gets the current network activity for the element. */ readonly networkState: number; - onencrypted: (ev: MediaEncryptedEvent) => any; - onmsneedkey: (ev: MSMediaKeyNeededEvent) => any; + onencrypted: (this: this, ev: MediaEncryptedEvent) => any; + onmsneedkey: (this: this, ev: MSMediaKeyNeededEvent) => any; /** * Gets a flag that specifies whether playback is paused. */ @@ -11803,111 +11895,111 @@ interface HTMLMediaElement extends HTMLElement { readonly NETWORK_IDLE: number; readonly NETWORK_LOADING: number; readonly NETWORK_NO_SOURCE: number; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "encrypted", listener: (ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "encrypted", listener: (this: this, ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (this: this, ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12206,7 +12298,7 @@ declare var HTMLOptionElement: { create(): HTMLOptionElement; } -interface HTMLOptionsCollection extends HTMLCollection { +interface HTMLOptionsCollection extends HTMLCollectionOf { length: number; selectedIndex: number; add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number): void; @@ -12370,7 +12462,7 @@ interface HTMLSelectElement extends HTMLElement { * Sets or retrieves the name of the object. */ name: string; - options: HTMLCollectionOf; + readonly options: HTMLOptionsCollection; /** * When present, marks an element that can't be submitted without a value. */ @@ -12959,9 +13051,9 @@ interface HTMLVideoElement extends HTMLMediaElement { msStereo3DPackingMode: string; msStereo3DRenderMode: string; msZoom: boolean; - onMSVideoFormatChanged: (ev: Event) => any; - onMSVideoFrameStepCompleted: (ev: Event) => any; - onMSVideoOptimalLayoutChanged: (ev: Event) => any; + onMSVideoFormatChanged: (this: this, ev: Event) => any; + onMSVideoFrameStepCompleted: (this: this, ev: Event) => any; + onMSVideoOptimalLayoutChanged: (this: this, ev: Event) => any; /** * Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available. */ @@ -12988,114 +13080,114 @@ interface HTMLVideoElement extends HTMLMediaElement { webkitEnterFullscreen(): void; webkitExitFullScreen(): void; webkitExitFullscreen(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFormatChanged", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "encrypted", listener: (ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFormatChanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFrameStepCompleted", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "encrypted", listener: (this: this, ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (this: this, ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13165,8 +13257,8 @@ declare var IDBCursorWithValue: { interface IDBDatabase extends EventTarget { readonly name: string; readonly objectStoreNames: DOMStringList; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; version: number; onversionchange: (ev: IDBVersionChangeEvent) => any; close(): void; @@ -13174,8 +13266,8 @@ interface IDBDatabase extends EventTarget { deleteObjectStore(name: string): void; transaction(storeNames: string | string[], mode?: string): IDBTransaction; addEventListener(type: "versionchange", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13253,12 +13345,12 @@ declare var IDBObjectStore: { } interface IDBOpenDBRequest extends IDBRequest { - onblocked: (ev: Event) => any; - onupgradeneeded: (ev: IDBVersionChangeEvent) => any; - addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; + onblocked: (this: this, ev: Event) => any; + onupgradeneeded: (this: this, ev: IDBVersionChangeEvent) => any; + addEventListener(type: "blocked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "upgradeneeded", listener: (this: this, ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13269,14 +13361,14 @@ declare var IDBOpenDBRequest: { interface IDBRequest extends EventTarget { readonly error: DOMError; - onerror: (ev: Event) => any; - onsuccess: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onsuccess: (this: this, ev: Event) => any; readonly readyState: string; readonly result: any; source: IDBObjectStore | IDBIndex | IDBCursor; readonly transaction: IDBTransaction; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13289,17 +13381,17 @@ interface IDBTransaction extends EventTarget { readonly db: IDBDatabase; readonly error: DOMError; readonly mode: string; - onabort: (ev: Event) => any; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; abort(): void; objectStore(name: string): IDBObjectStore; readonly READ_ONLY: string; readonly READ_WRITE: string; readonly VERSION_CHANGE: string; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13433,16 +13525,16 @@ declare var MSApp: MSApp; interface MSAppAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; start(): void; readonly COMPLETED: number; readonly ERROR: number; readonly STARTED: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13607,17 +13699,17 @@ declare var MSHTMLWebViewElement: { interface MSInputMethodContext extends EventTarget { readonly compositionEndOffset: number; readonly compositionStartOffset: number; - oncandidatewindowhide: (ev: Event) => any; - oncandidatewindowshow: (ev: Event) => any; - oncandidatewindowupdate: (ev: Event) => any; + oncandidatewindowhide: (this: this, ev: Event) => any; + oncandidatewindowshow: (this: this, ev: Event) => any; + oncandidatewindowupdate: (this: this, ev: Event) => any; readonly target: HTMLElement; getCandidateWindowClientRect(): ClientRect; getCompositionAlternatives(): string[]; hasComposition(): boolean; isCandidateWindowVisible(): boolean; - addEventListener(type: "MSCandidateWindowHide", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSCandidateWindowShow", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSCandidateWindowUpdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowHide", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowShow", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowUpdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13793,8 +13885,8 @@ declare var MSStreamReader: { interface MSWebViewAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; readonly target: MSHTMLWebViewElement; @@ -13806,8 +13898,8 @@ interface MSWebViewAsyncOperation extends EventTarget { readonly TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number; readonly TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number; readonly TYPE_INVOKE_SCRIPT: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13845,11 +13937,11 @@ declare var MediaDeviceInfo: { } interface MediaDevices extends EventTarget { - ondevicechange: (ev: Event) => any; + ondevicechange: (this: this, ev: Event) => any; enumerateDevices(): any; getSupportedConstraints(): MediaTrackSupportedConstraints; getUserMedia(constraints: MediaStreamConstraints): PromiseLike; - addEventListener(type: "devicechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "devicechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14002,10 +14094,10 @@ declare var MediaSource: { interface MediaStream extends EventTarget { readonly active: boolean; readonly id: string; - onactive: (ev: Event) => any; - onaddtrack: (ev: TrackEvent) => any; - oninactive: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onactive: (this: this, ev: Event) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + oninactive: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; addTrack(track: MediaStreamTrack): void; clone(): MediaStream; getAudioTracks(): MediaStreamTrack[]; @@ -14014,10 +14106,10 @@ interface MediaStream extends EventTarget { getVideoTracks(): MediaStreamTrack[]; removeTrack(track: MediaStreamTrack): void; stop(): void; - addEventListener(type: "active", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; - addEventListener(type: "inactive", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "active", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "inactive", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14060,10 +14152,10 @@ interface MediaStreamTrack extends EventTarget { readonly kind: string; readonly label: string; readonly muted: boolean; - onended: (ev: MediaStreamErrorEvent) => any; - onmute: (ev: Event) => any; - onoverconstrained: (ev: MediaStreamErrorEvent) => any; - onunmute: (ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; + onmute: (this: this, ev: Event) => any; + onoverconstrained: (this: this, ev: MediaStreamErrorEvent) => any; + onunmute: (this: this, ev: Event) => any; readonly readonly: boolean; readonly readyState: string; readonly remote: boolean; @@ -14073,10 +14165,10 @@ interface MediaStreamTrack extends EventTarget { getConstraints(): MediaTrackConstraints; getSettings(): MediaTrackSettings; stop(): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mute", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "overconstrained", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unmute", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mute", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "overconstrained", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unmute", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14118,11 +14210,11 @@ declare var MessageEvent: { } interface MessagePort extends EventTarget { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; close(): void; postMessage(message?: any, ports?: any): void; start(): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14330,7 +14422,7 @@ interface Node extends EventTarget { contains(child: Node): boolean; hasAttributes(): boolean; hasChildNodes(): boolean; - insertBefore(newChild: Node, refChild: Node): Node; + insertBefore(newChild: Node, refChild: Node | null): Node; isDefaultNamespace(namespaceURI: string | null): boolean; isEqualNode(arg: Node): boolean; isSameNode(other: Node): boolean; @@ -14339,7 +14431,6 @@ interface Node extends EventTarget { normalize(): void; removeChild(oldChild: Node): Node; replaceChild(newChild: Node, oldChild: Node): Node; - contains(node: Node): boolean; readonly ATTRIBUTE_NODE: number; readonly CDATA_SECTION_NODE: number; readonly COMMENT_NODE: number; @@ -14476,9 +14567,9 @@ declare var OfflineAudioCompletionEvent: { } interface OfflineAudioContext extends AudioContext { - oncomplete: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; startRendering(): PromiseLike; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14490,12 +14581,12 @@ declare var OfflineAudioContext: { interface OscillatorNode extends AudioNode { readonly detune: AudioParam; readonly frequency: AudioParam; - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; type: string; setPeriodicWave(periodicWave: PeriodicWave): void; start(when?: number): void; stop(when?: number): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14874,8 +14965,8 @@ declare var RTCDTMFToneChangeEvent: { } interface RTCDtlsTransport extends RTCStatsProvider { - ondtlsstatechange: ((ev: RTCDtlsTransportStateChangedEvent) => any) | null; - onerror: ((ev: Event) => any) | null; + ondtlsstatechange: ((this: this, ev: RTCDtlsTransportStateChangedEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly state: string; readonly transport: RTCIceTransport; getLocalParameters(): RTCDtlsParameters; @@ -14883,8 +14974,8 @@ interface RTCDtlsTransport extends RTCStatsProvider { getRemoteParameters(): RTCDtlsParameters | null; start(remoteParameters: RTCDtlsParameters): void; stop(): void; - addEventListener(type: "dtlsstatechange", listener: (ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dtlsstatechange", listener: (this: this, ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14906,11 +14997,11 @@ interface RTCDtmfSender extends EventTarget { readonly canInsertDTMF: boolean; readonly duration: number; readonly interToneGap: number; - ontonechange: (ev: RTCDTMFToneChangeEvent) => any; + ontonechange: (this: this, ev: RTCDTMFToneChangeEvent) => any; readonly sender: RTCRtpSender; readonly toneBuffer: string; insertDTMF(tones: string, duration?: number, interToneGap?: number): void; - addEventListener(type: "tonechange", listener: (ev: RTCDTMFToneChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "tonechange", listener: (this: this, ev: RTCDTMFToneChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14930,13 +15021,13 @@ declare var RTCIceCandidatePairChangedEvent: { interface RTCIceGatherer extends RTCStatsProvider { readonly component: string; - onerror: ((ev: Event) => any) | null; - onlocalcandidate: ((ev: RTCIceGathererEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; + onlocalcandidate: ((this: this, ev: RTCIceGathererEvent) => any) | null; createAssociatedGatherer(): RTCIceGatherer; getLocalCandidates(): RTCIceCandidate[]; getLocalParameters(): RTCIceParameters; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "localcandidate", listener: (ev: RTCIceGathererEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "localcandidate", listener: (this: this, ev: RTCIceGathererEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14957,8 +15048,8 @@ declare var RTCIceGathererEvent: { interface RTCIceTransport extends RTCStatsProvider { readonly component: string; readonly iceGatherer: RTCIceGatherer | null; - oncandidatepairchange: ((ev: RTCIceCandidatePairChangedEvent) => any) | null; - onicestatechange: ((ev: RTCIceTransportStateChangedEvent) => any) | null; + oncandidatepairchange: ((this: this, ev: RTCIceCandidatePairChangedEvent) => any) | null; + onicestatechange: ((this: this, ev: RTCIceTransportStateChangedEvent) => any) | null; readonly role: string; readonly state: string; addRemoteCandidate(remoteCandidate: RTCIceCandidate | RTCIceCandidateComplete): void; @@ -14969,8 +15060,8 @@ interface RTCIceTransport extends RTCStatsProvider { setRemoteCandidates(remoteCandidates: RTCIceCandidate[]): void; start(gatherer: RTCIceGatherer, remoteParameters: RTCIceParameters, role?: string): void; stop(): void; - addEventListener(type: "candidatepairchange", listener: (ev: RTCIceCandidatePairChangedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "icestatechange", listener: (ev: RTCIceTransportStateChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "candidatepairchange", listener: (this: this, ev: RTCIceCandidatePairChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "icestatechange", listener: (this: this, ev: RTCIceTransportStateChangedEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -14989,7 +15080,7 @@ declare var RTCIceTransportStateChangedEvent: { } interface RTCRtpReceiver extends RTCStatsProvider { - onerror: ((ev: Event) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack | null; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -14998,7 +15089,7 @@ interface RTCRtpReceiver extends RTCStatsProvider { requestSendCSRC(csrc: number): void; setTransport(transport: RTCDtlsTransport | RTCSrtpSdesTransport, rtcpTransport?: RTCDtlsTransport): void; stop(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -15009,8 +15100,8 @@ declare var RTCRtpReceiver: { } interface RTCRtpSender extends RTCStatsProvider { - onerror: ((ev: Event) => any) | null; - onssrcconflict: ((ev: RTCSsrcConflictEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; + onssrcconflict: ((this: this, ev: RTCSsrcConflictEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -15018,8 +15109,8 @@ interface RTCRtpSender extends RTCStatsProvider { setTrack(track: MediaStreamTrack): void; setTransport(transport: RTCDtlsTransport | RTCSrtpSdesTransport, rtcpTransport?: RTCDtlsTransport): void; stop(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ssrcconflict", listener: (ev: RTCSsrcConflictEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ssrcconflict", listener: (this: this, ev: RTCSsrcConflictEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -15030,9 +15121,9 @@ declare var RTCRtpSender: { } interface RTCSrtpSdesTransport extends EventTarget { - onerror: ((ev: Event) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly transport: RTCIceTransport; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -15327,66 +15418,66 @@ declare var SVGDescElement: { } interface SVGElement extends Element { - onclick: (ev: MouseEvent) => any; - ondblclick: (ev: MouseEvent) => any; - onfocusin: (ev: FocusEvent) => any; - onfocusout: (ev: FocusEvent) => any; - onload: (ev: Event) => any; - onmousedown: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; + onclick: (this: this, ev: MouseEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + onfocusin: (this: this, ev: FocusEvent) => any; + onfocusout: (this: this, ev: FocusEvent) => any; + onload: (this: this, ev: Event) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; readonly ownerSVGElement: SVGSVGElement; readonly viewportElement: SVGElement; xmlbase: string; className: any; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -16517,12 +16608,12 @@ interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTest currentScale: number; readonly currentTranslate: SVGPoint; readonly height: SVGAnimatedLength; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - onscroll: (ev: UIEvent) => any; - onunload: (ev: Event) => any; - onzoom: (ev: SVGZoomEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: Event) => any; + onresize: (this: this, ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; + onunload: (this: this, ev: Event) => any; + onzoom: (this: this, ev: SVGZoomEvent) => any; readonly pixelUnitToMillimeterX: number; readonly pixelUnitToMillimeterY: number; readonly screenPixelToMillimeterX: number; @@ -16554,58 +16645,58 @@ interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTest unpauseAnimations(): void; unsuspendRedraw(suspendHandleID: number): void; unsuspendRedrawAll(): void; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "SVGAbort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGError", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGUnload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGZoom", listener: (ev: SVGZoomEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "SVGAbort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGError", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGUnload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGZoom", listener: (this: this, ev: SVGZoomEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -16886,14 +16977,14 @@ interface Screen extends EventTarget { readonly logicalXDPI: number; readonly logicalYDPI: number; readonly msOrientation: string; - onmsorientationchange: (ev: Event) => any; + onmsorientationchange: (this: this, ev: Event) => any; readonly pixelDepth: number; readonly systemXDPI: number; readonly systemYDPI: number; readonly width: number; msLockOrientation(orientations: string | string[]): boolean; msUnlockOrientation(): void; - addEventListener(type: "MSOrientationChange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSOrientationChange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -16914,8 +17005,8 @@ declare var ScriptNotifyEvent: { interface ScriptProcessorNode extends AudioNode { readonly bufferSize: number; - onaudioprocess: (ev: AudioProcessingEvent) => any; - addEventListener(type: "audioprocess", listener: (ev: AudioProcessingEvent) => any, useCapture?: boolean): void; + onaudioprocess: (this: this, ev: AudioProcessingEvent) => any; + addEventListener(type: "audioprocess", listener: (this: this, ev: AudioProcessingEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -17070,18 +17161,24 @@ declare var StyleSheetPageList: { } interface SubtleCrypto { - decrypt(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; - deriveBits(algorithm: string | Algorithm, baseKey: CryptoKey, length: number): PromiseLike; - deriveKey(algorithm: string | Algorithm, baseKey: CryptoKey, derivedKeyType: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; - digest(algorithm: string | Algorithm, data: ArrayBufferView): PromiseLike; - 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 | 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 | 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; + decrypt(algorithm: string | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: BufferSource): PromiseLike; + deriveBits(algorithm: string | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, baseKey: CryptoKey, length: number): PromiseLike; + deriveKey(algorithm: string | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, extractable: boolean, keyUsages: string[]): PromiseLike; + digest(algorithm: AlgorithmIdentifier, data: BufferSource): PromiseLike; + encrypt(algorithm: string | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: BufferSource): PromiseLike; + exportKey(format: "jwk", key: CryptoKey): PromiseLike; + exportKey(format: "raw" | "pkcs8" | "spki", key: CryptoKey): PromiseLike; + exportKey(format: string, key: CryptoKey): PromiseLike; + generateKey(algorithm: string, extractable: boolean, keyUsages: string[]): PromiseLike; + generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams | DhKeyGenParams, extractable: boolean, keyUsages: string[]): PromiseLike; + generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: string[]): PromiseLike; + importKey(format: "jwk", keyData: JsonWebKey, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + importKey(format: "raw" | "pkcs8" | "spki", keyData: BufferSource, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + importKey(format: string, keyData: JsonWebKey | BufferSource, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + sign(algorithm: string | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, data: BufferSource): PromiseLike; + unwrapKey(format: string, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier, unwrappedKeyAlgorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: string[]): PromiseLike; + verify(algorithm: string | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, signature: BufferSource, data: BufferSource): PromiseLike; + wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier): PromiseLike; } declare var SubtleCrypto: { @@ -17148,9 +17245,9 @@ interface TextTrack extends EventTarget { readonly label: string; readonly language: string; mode: any; - oncuechange: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; + oncuechange: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; readonly readyState: number; addCue(cue: TextTrackCue): void; removeCue(cue: TextTrackCue): void; @@ -17161,9 +17258,9 @@ interface TextTrack extends EventTarget { readonly LOADING: number; readonly NONE: number; readonly SHOWING: number; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -17182,15 +17279,15 @@ declare var TextTrack: { interface TextTrackCue extends EventTarget { endTime: number; id: string; - onenter: (ev: Event) => any; - onexit: (ev: Event) => any; + onenter: (this: this, ev: Event) => any; + onexit: (this: this, ev: Event) => any; pauseOnExit: boolean; startTime: number; text: string; readonly track: TextTrack; getCueAsHTML(): DocumentFragment; - addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "enter", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "exit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -17213,9 +17310,9 @@ declare var TextTrackCueList: { interface TextTrackList extends EventTarget { readonly length: number; - onaddtrack: ((ev: TrackEvent) => any) | null; + onaddtrack: ((this: this, ev: TrackEvent) => any) | null; item(index: number): TextTrack; - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: TextTrack; } @@ -17407,15 +17504,15 @@ declare var VideoTrack: { interface VideoTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; - onchange: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + onchange: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; readonly selectedIndex: number; 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; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: VideoTrack; } @@ -17638,18 +17735,12 @@ interface WebGLRenderingContext { stencilMaskSeparate(face: number, mask: number): void; stencilOp(fail: number, zfail: number, zpass: number): void; stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void; - texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, image: HTMLImageElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, canvas: HTMLCanvasElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, video: HTMLVideoElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void; + texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels?: ArrayBufferView): void; + texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void; texParameterf(target: number, pname: number, param: number): void; texParameteri(target: number, pname: number, param: number): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, image: HTMLImageElement): void; - 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; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels?: ArrayBufferView): void; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void; uniform1f(location: WebGLUniformLocation | null, x: number): void; uniform1fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; uniform1i(location: WebGLUniformLocation | null, x: number): void; @@ -18371,10 +18462,10 @@ interface WebSocket extends EventTarget { binaryType: string; readonly bufferedAmount: number; readonly extensions: string; - onclose: (ev: CloseEvent) => any; - onerror: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onopen: (ev: Event) => any; + onclose: (this: this, ev: CloseEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onopen: (this: this, ev: Event) => any; readonly protocol: string; readonly readyState: number; readonly url: string; @@ -18384,10 +18475,10 @@ interface WebSocket extends EventTarget { readonly CLOSING: number; readonly CONNECTING: number; readonly OPEN: number; - addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "close", listener: (this: this, ev: CloseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "open", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -18447,97 +18538,97 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window name: string; readonly navigator: Navigator; offscreenBuffering: string | boolean; - onabort: (ev: Event) => any; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onblur: (ev: FocusEvent) => any; - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; - onchange: (ev: Event) => any; - onclick: (ev: MouseEvent) => any; - oncompassneedscalibration: (ev: Event) => any; - oncontextmenu: (ev: PointerEvent) => any; - ondblclick: (ev: MouseEvent) => any; - ondevicelight: (ev: DeviceLightEvent) => any; - ondevicemotion: (ev: DeviceMotionEvent) => any; - ondeviceorientation: (ev: DeviceOrientationEvent) => any; - ondrag: (ev: DragEvent) => any; - ondragend: (ev: DragEvent) => any; - ondragenter: (ev: DragEvent) => any; - ondragleave: (ev: DragEvent) => any; - ondragover: (ev: DragEvent) => any; - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; - ondurationchange: (ev: Event) => any; - onemptied: (ev: Event) => any; - onended: (ev: MediaStreamErrorEvent) => any; + onabort: (this: this, ev: UIEvent) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; + onchange: (this: this, ev: Event) => any; + onclick: (this: this, ev: MouseEvent) => any; + oncompassneedscalibration: (this: this, ev: Event) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + ondevicelight: (this: this, ev: DeviceLightEvent) => any; + ondevicemotion: (this: this, ev: DeviceMotionEvent) => any; + ondeviceorientation: (this: this, ev: DeviceOrientationEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; + ondurationchange: (this: this, ev: Event) => any; + onemptied: (this: this, ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; onerror: ErrorEventHandler; - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; - onkeydown: (ev: KeyboardEvent) => any; - onkeypress: (ev: KeyboardEvent) => any; - onkeyup: (ev: KeyboardEvent) => any; - onload: (ev: Event) => any; - onloadeddata: (ev: Event) => any; - onloadedmetadata: (ev: Event) => any; - onloadstart: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onmousedown: (ev: MouseEvent) => any; - onmouseenter: (ev: MouseEvent) => any; - onmouseleave: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; - onmousewheel: (ev: WheelEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onpause: (ev: Event) => any; - onplay: (ev: Event) => any; - onplaying: (ev: Event) => any; - onpopstate: (ev: PopStateEvent) => any; - onprogress: (ev: ProgressEvent) => any; - onratechange: (ev: Event) => any; - onreadystatechange: (ev: ProgressEvent) => any; - onreset: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - onscroll: (ev: UIEvent) => any; - onseeked: (ev: Event) => any; - onseeking: (ev: Event) => any; - onselect: (ev: UIEvent) => any; - onstalled: (ev: Event) => any; - onstorage: (ev: StorageEvent) => any; - onsubmit: (ev: Event) => any; - onsuspend: (ev: Event) => any; - ontimeupdate: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; + onload: (this: this, ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmouseenter: (this: this, ev: MouseEvent) => any; + onmouseleave: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onpause: (this: this, ev: Event) => any; + onplay: (this: this, ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onpopstate: (this: this, ev: PopStateEvent) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onratechange: (this: this, ev: Event) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; + onreset: (this: this, ev: Event) => any; + onresize: (this: this, ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; + onseeked: (this: this, ev: Event) => any; + onseeking: (this: this, ev: Event) => any; + onselect: (this: this, ev: UIEvent) => any; + onstalled: (this: this, ev: Event) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onsubmit: (this: this, ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; ontouchstart: (ev: TouchEvent) => any; - onunload: (ev: Event) => any; - onvolumechange: (ev: Event) => any; - onwaiting: (ev: Event) => any; + onunload: (this: this, ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; readonly opener: Window; orientation: string | number; readonly outerHeight: number; @@ -18563,6 +18654,7 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window readonly top: Window; readonly window: Window; URL: typeof URL; + Blob: typeof Blob; alert(message?: any): void; blur(): void; cancelAnimationFrame(handle: number): void; @@ -18592,101 +18684,101 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint; webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint; webkitRequestAnimationFrame(callback: FrameRequestCallback): number; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "devicelight", listener: (ev: DeviceLightEvent) => any, useCapture?: boolean): void; - addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "compassneedscalibration", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "devicelight", listener: (this: this, ev: DeviceLightEvent) => any, useCapture?: boolean): void; + addEventListener(type: "devicemotion", listener: (this: this, ev: DeviceMotionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deviceorientation", listener: (this: this, ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (this: this, ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: Window; } @@ -18697,11 +18789,11 @@ declare var Window: { } interface Worker extends EventTarget, AbstractWorker { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; postMessage(message: any, ports?: any): void; terminate(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -18719,8 +18811,7 @@ declare var XMLDocument: { } interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { - msCaching: string; - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly response: any; readonly responseText: string; @@ -18731,6 +18822,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { timeout: number; readonly upload: XMLHttpRequestUpload; withCredentials: boolean; + msCaching?: string; abort(): void; getAllResponseHeaders(): string; getResponseHeader(header: string): string | null; @@ -18746,14 +18838,14 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { readonly LOADING: number; readonly OPENED: number; readonly UNSENT: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -18869,8 +18961,8 @@ declare var XSLTProcessor: { } interface AbstractWorker { - onerror: (ev: Event) => any; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + onerror: (this: this, ev: ErrorEvent) => any; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -18982,24 +19074,24 @@ interface GetSVGDocument { } interface GlobalEventHandlers { - onpointercancel: (ev: PointerEvent) => any; - onpointerdown: (ev: PointerEvent) => any; - onpointerenter: (ev: PointerEvent) => any; - onpointerleave: (ev: PointerEvent) => any; - onpointermove: (ev: PointerEvent) => any; - onpointerout: (ev: PointerEvent) => any; - onpointerover: (ev: PointerEvent) => any; - onpointerup: (ev: PointerEvent) => any; - onwheel: (ev: WheelEvent) => any; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + onpointercancel: (this: this, ev: PointerEvent) => any; + onpointerdown: (this: this, ev: PointerEvent) => any; + onpointerenter: (this: this, ev: PointerEvent) => any; + onpointerleave: (this: this, ev: PointerEvent) => any; + onpointermove: (this: this, ev: PointerEvent) => any; + onpointerout: (this: this, ev: PointerEvent) => any; + onpointerover: (this: this, ev: PointerEvent) => any; + onpointerup: (this: this, ev: PointerEvent) => any; + onwheel: (this: this, ev: WheelEvent) => any; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -19027,24 +19119,24 @@ interface LinkStyle { } interface MSBaseReader { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly result: any; abort(): void; readonly DONE: number; readonly EMPTY: number; readonly LOADING: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -19093,7 +19185,359 @@ interface NavigatorUserMedia { } interface NodeSelector { + querySelector(selectors: "a"): HTMLAnchorElement; + querySelector(selectors: "abbr"): HTMLElement; + querySelector(selectors: "acronym"): HTMLElement; + querySelector(selectors: "address"): HTMLElement; + querySelector(selectors: "applet"): HTMLAppletElement; + querySelector(selectors: "area"): HTMLAreaElement; + querySelector(selectors: "article"): HTMLElement; + querySelector(selectors: "aside"): HTMLElement; + querySelector(selectors: "audio"): HTMLAudioElement; + querySelector(selectors: "b"): HTMLElement; + querySelector(selectors: "base"): HTMLBaseElement; + querySelector(selectors: "basefont"): HTMLBaseFontElement; + querySelector(selectors: "bdo"): HTMLElement; + querySelector(selectors: "big"): HTMLElement; + querySelector(selectors: "blockquote"): HTMLQuoteElement; + querySelector(selectors: "body"): HTMLBodyElement; + querySelector(selectors: "br"): HTMLBRElement; + querySelector(selectors: "button"): HTMLButtonElement; + querySelector(selectors: "canvas"): HTMLCanvasElement; + querySelector(selectors: "caption"): HTMLTableCaptionElement; + querySelector(selectors: "center"): HTMLElement; + querySelector(selectors: "circle"): SVGCircleElement; + querySelector(selectors: "cite"): HTMLElement; + querySelector(selectors: "clippath"): SVGClipPathElement; + querySelector(selectors: "code"): HTMLElement; + querySelector(selectors: "col"): HTMLTableColElement; + querySelector(selectors: "colgroup"): HTMLTableColElement; + querySelector(selectors: "datalist"): HTMLDataListElement; + querySelector(selectors: "dd"): HTMLElement; + querySelector(selectors: "defs"): SVGDefsElement; + querySelector(selectors: "del"): HTMLModElement; + querySelector(selectors: "desc"): SVGDescElement; + querySelector(selectors: "dfn"): HTMLElement; + querySelector(selectors: "dir"): HTMLDirectoryElement; + querySelector(selectors: "div"): HTMLDivElement; + querySelector(selectors: "dl"): HTMLDListElement; + querySelector(selectors: "dt"): HTMLElement; + querySelector(selectors: "ellipse"): SVGEllipseElement; + querySelector(selectors: "em"): HTMLElement; + querySelector(selectors: "embed"): HTMLEmbedElement; + querySelector(selectors: "feblend"): SVGFEBlendElement; + querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement; + querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement; + querySelector(selectors: "fecomposite"): SVGFECompositeElement; + querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement; + querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement; + querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement; + querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement; + querySelector(selectors: "feflood"): SVGFEFloodElement; + querySelector(selectors: "fefunca"): SVGFEFuncAElement; + querySelector(selectors: "fefuncb"): SVGFEFuncBElement; + querySelector(selectors: "fefuncg"): SVGFEFuncGElement; + querySelector(selectors: "fefuncr"): SVGFEFuncRElement; + querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement; + querySelector(selectors: "feimage"): SVGFEImageElement; + querySelector(selectors: "femerge"): SVGFEMergeElement; + querySelector(selectors: "femergenode"): SVGFEMergeNodeElement; + querySelector(selectors: "femorphology"): SVGFEMorphologyElement; + querySelector(selectors: "feoffset"): SVGFEOffsetElement; + querySelector(selectors: "fepointlight"): SVGFEPointLightElement; + querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement; + querySelector(selectors: "fespotlight"): SVGFESpotLightElement; + querySelector(selectors: "fetile"): SVGFETileElement; + querySelector(selectors: "feturbulence"): SVGFETurbulenceElement; + querySelector(selectors: "fieldset"): HTMLFieldSetElement; + querySelector(selectors: "figcaption"): HTMLElement; + querySelector(selectors: "figure"): HTMLElement; + querySelector(selectors: "filter"): SVGFilterElement; + querySelector(selectors: "font"): HTMLFontElement; + querySelector(selectors: "footer"): HTMLElement; + querySelector(selectors: "foreignobject"): SVGForeignObjectElement; + querySelector(selectors: "form"): HTMLFormElement; + querySelector(selectors: "frame"): HTMLFrameElement; + querySelector(selectors: "frameset"): HTMLFrameSetElement; + querySelector(selectors: "g"): SVGGElement; + querySelector(selectors: "h1"): HTMLHeadingElement; + querySelector(selectors: "h2"): HTMLHeadingElement; + querySelector(selectors: "h3"): HTMLHeadingElement; + querySelector(selectors: "h4"): HTMLHeadingElement; + querySelector(selectors: "h5"): HTMLHeadingElement; + querySelector(selectors: "h6"): HTMLHeadingElement; + querySelector(selectors: "head"): HTMLHeadElement; + querySelector(selectors: "header"): HTMLElement; + querySelector(selectors: "hgroup"): HTMLElement; + querySelector(selectors: "hr"): HTMLHRElement; + querySelector(selectors: "html"): HTMLHtmlElement; + querySelector(selectors: "i"): HTMLElement; + querySelector(selectors: "iframe"): HTMLIFrameElement; + querySelector(selectors: "image"): SVGImageElement; + querySelector(selectors: "img"): HTMLImageElement; + querySelector(selectors: "input"): HTMLInputElement; + querySelector(selectors: "ins"): HTMLModElement; + querySelector(selectors: "isindex"): HTMLUnknownElement; + querySelector(selectors: "kbd"): HTMLElement; + querySelector(selectors: "keygen"): HTMLElement; + querySelector(selectors: "label"): HTMLLabelElement; + querySelector(selectors: "legend"): HTMLLegendElement; + querySelector(selectors: "li"): HTMLLIElement; + querySelector(selectors: "line"): SVGLineElement; + querySelector(selectors: "lineargradient"): SVGLinearGradientElement; + querySelector(selectors: "link"): HTMLLinkElement; + querySelector(selectors: "listing"): HTMLPreElement; + querySelector(selectors: "map"): HTMLMapElement; + querySelector(selectors: "mark"): HTMLElement; + querySelector(selectors: "marker"): SVGMarkerElement; + querySelector(selectors: "marquee"): HTMLMarqueeElement; + querySelector(selectors: "mask"): SVGMaskElement; + querySelector(selectors: "menu"): HTMLMenuElement; + querySelector(selectors: "meta"): HTMLMetaElement; + querySelector(selectors: "metadata"): SVGMetadataElement; + querySelector(selectors: "meter"): HTMLMeterElement; + querySelector(selectors: "nav"): HTMLElement; + querySelector(selectors: "nextid"): HTMLUnknownElement; + querySelector(selectors: "nobr"): HTMLElement; + querySelector(selectors: "noframes"): HTMLElement; + querySelector(selectors: "noscript"): HTMLElement; + querySelector(selectors: "object"): HTMLObjectElement; + querySelector(selectors: "ol"): HTMLOListElement; + querySelector(selectors: "optgroup"): HTMLOptGroupElement; + querySelector(selectors: "option"): HTMLOptionElement; + querySelector(selectors: "p"): HTMLParagraphElement; + querySelector(selectors: "param"): HTMLParamElement; + querySelector(selectors: "path"): SVGPathElement; + querySelector(selectors: "pattern"): SVGPatternElement; + querySelector(selectors: "picture"): HTMLPictureElement; + querySelector(selectors: "plaintext"): HTMLElement; + querySelector(selectors: "polygon"): SVGPolygonElement; + querySelector(selectors: "polyline"): SVGPolylineElement; + querySelector(selectors: "pre"): HTMLPreElement; + querySelector(selectors: "progress"): HTMLProgressElement; + querySelector(selectors: "q"): HTMLQuoteElement; + querySelector(selectors: "radialgradient"): SVGRadialGradientElement; + querySelector(selectors: "rect"): SVGRectElement; + querySelector(selectors: "rt"): HTMLElement; + querySelector(selectors: "ruby"): HTMLElement; + querySelector(selectors: "s"): HTMLElement; + querySelector(selectors: "samp"): HTMLElement; + querySelector(selectors: "script"): HTMLScriptElement; + querySelector(selectors: "section"): HTMLElement; + querySelector(selectors: "select"): HTMLSelectElement; + querySelector(selectors: "small"): HTMLElement; + querySelector(selectors: "source"): HTMLSourceElement; + querySelector(selectors: "span"): HTMLSpanElement; + querySelector(selectors: "stop"): SVGStopElement; + querySelector(selectors: "strike"): HTMLElement; + querySelector(selectors: "strong"): HTMLElement; + querySelector(selectors: "style"): HTMLStyleElement; + querySelector(selectors: "sub"): HTMLElement; + querySelector(selectors: "sup"): HTMLElement; + querySelector(selectors: "svg"): SVGSVGElement; + querySelector(selectors: "switch"): SVGSwitchElement; + querySelector(selectors: "symbol"): SVGSymbolElement; + querySelector(selectors: "table"): HTMLTableElement; + querySelector(selectors: "tbody"): HTMLTableSectionElement; + querySelector(selectors: "td"): HTMLTableDataCellElement; + querySelector(selectors: "template"): HTMLTemplateElement; + querySelector(selectors: "text"): SVGTextElement; + querySelector(selectors: "textpath"): SVGTextPathElement; + querySelector(selectors: "textarea"): HTMLTextAreaElement; + querySelector(selectors: "tfoot"): HTMLTableSectionElement; + querySelector(selectors: "th"): HTMLTableHeaderCellElement; + querySelector(selectors: "thead"): HTMLTableSectionElement; + querySelector(selectors: "title"): HTMLTitleElement; + querySelector(selectors: "tr"): HTMLTableRowElement; + querySelector(selectors: "track"): HTMLTrackElement; + querySelector(selectors: "tspan"): SVGTSpanElement; + querySelector(selectors: "tt"): HTMLElement; + querySelector(selectors: "u"): HTMLElement; + querySelector(selectors: "ul"): HTMLUListElement; + querySelector(selectors: "use"): SVGUseElement; + querySelector(selectors: "var"): HTMLElement; + querySelector(selectors: "video"): HTMLVideoElement; + querySelector(selectors: "view"): SVGViewElement; + querySelector(selectors: "wbr"): HTMLElement; + querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement; + querySelector(selectors: "xmp"): HTMLPreElement; querySelector(selectors: string): Element; + querySelectorAll(selectors: "a"): NodeListOf; + querySelectorAll(selectors: "abbr"): NodeListOf; + querySelectorAll(selectors: "acronym"): NodeListOf; + querySelectorAll(selectors: "address"): NodeListOf; + querySelectorAll(selectors: "applet"): NodeListOf; + querySelectorAll(selectors: "area"): NodeListOf; + querySelectorAll(selectors: "article"): NodeListOf; + querySelectorAll(selectors: "aside"): NodeListOf; + querySelectorAll(selectors: "audio"): NodeListOf; + querySelectorAll(selectors: "b"): NodeListOf; + querySelectorAll(selectors: "base"): NodeListOf; + querySelectorAll(selectors: "basefont"): NodeListOf; + querySelectorAll(selectors: "bdo"): NodeListOf; + querySelectorAll(selectors: "big"): NodeListOf; + querySelectorAll(selectors: "blockquote"): NodeListOf; + querySelectorAll(selectors: "body"): NodeListOf; + querySelectorAll(selectors: "br"): NodeListOf; + querySelectorAll(selectors: "button"): NodeListOf; + querySelectorAll(selectors: "canvas"): NodeListOf; + querySelectorAll(selectors: "caption"): NodeListOf; + querySelectorAll(selectors: "center"): NodeListOf; + querySelectorAll(selectors: "circle"): NodeListOf; + querySelectorAll(selectors: "cite"): NodeListOf; + querySelectorAll(selectors: "clippath"): NodeListOf; + querySelectorAll(selectors: "code"): NodeListOf; + querySelectorAll(selectors: "col"): NodeListOf; + querySelectorAll(selectors: "colgroup"): NodeListOf; + querySelectorAll(selectors: "datalist"): NodeListOf; + querySelectorAll(selectors: "dd"): NodeListOf; + querySelectorAll(selectors: "defs"): NodeListOf; + querySelectorAll(selectors: "del"): NodeListOf; + querySelectorAll(selectors: "desc"): NodeListOf; + querySelectorAll(selectors: "dfn"): NodeListOf; + querySelectorAll(selectors: "dir"): NodeListOf; + querySelectorAll(selectors: "div"): NodeListOf; + querySelectorAll(selectors: "dl"): NodeListOf; + querySelectorAll(selectors: "dt"): NodeListOf; + querySelectorAll(selectors: "ellipse"): NodeListOf; + querySelectorAll(selectors: "em"): NodeListOf; + querySelectorAll(selectors: "embed"): NodeListOf; + querySelectorAll(selectors: "feblend"): NodeListOf; + querySelectorAll(selectors: "fecolormatrix"): NodeListOf; + querySelectorAll(selectors: "fecomponenttransfer"): NodeListOf; + querySelectorAll(selectors: "fecomposite"): NodeListOf; + querySelectorAll(selectors: "feconvolvematrix"): NodeListOf; + querySelectorAll(selectors: "fediffuselighting"): NodeListOf; + querySelectorAll(selectors: "fedisplacementmap"): NodeListOf; + querySelectorAll(selectors: "fedistantlight"): NodeListOf; + querySelectorAll(selectors: "feflood"): NodeListOf; + querySelectorAll(selectors: "fefunca"): NodeListOf; + querySelectorAll(selectors: "fefuncb"): NodeListOf; + querySelectorAll(selectors: "fefuncg"): NodeListOf; + querySelectorAll(selectors: "fefuncr"): NodeListOf; + querySelectorAll(selectors: "fegaussianblur"): NodeListOf; + querySelectorAll(selectors: "feimage"): NodeListOf; + querySelectorAll(selectors: "femerge"): NodeListOf; + querySelectorAll(selectors: "femergenode"): NodeListOf; + querySelectorAll(selectors: "femorphology"): NodeListOf; + querySelectorAll(selectors: "feoffset"): NodeListOf; + querySelectorAll(selectors: "fepointlight"): NodeListOf; + querySelectorAll(selectors: "fespecularlighting"): NodeListOf; + querySelectorAll(selectors: "fespotlight"): NodeListOf; + querySelectorAll(selectors: "fetile"): NodeListOf; + querySelectorAll(selectors: "feturbulence"): NodeListOf; + querySelectorAll(selectors: "fieldset"): NodeListOf; + querySelectorAll(selectors: "figcaption"): NodeListOf; + querySelectorAll(selectors: "figure"): NodeListOf; + querySelectorAll(selectors: "filter"): NodeListOf; + querySelectorAll(selectors: "font"): NodeListOf; + querySelectorAll(selectors: "footer"): NodeListOf; + querySelectorAll(selectors: "foreignobject"): NodeListOf; + querySelectorAll(selectors: "form"): NodeListOf; + querySelectorAll(selectors: "frame"): NodeListOf; + querySelectorAll(selectors: "frameset"): NodeListOf; + querySelectorAll(selectors: "g"): NodeListOf; + querySelectorAll(selectors: "h1"): NodeListOf; + querySelectorAll(selectors: "h2"): NodeListOf; + querySelectorAll(selectors: "h3"): NodeListOf; + querySelectorAll(selectors: "h4"): NodeListOf; + querySelectorAll(selectors: "h5"): NodeListOf; + querySelectorAll(selectors: "h6"): NodeListOf; + querySelectorAll(selectors: "head"): NodeListOf; + querySelectorAll(selectors: "header"): NodeListOf; + querySelectorAll(selectors: "hgroup"): NodeListOf; + querySelectorAll(selectors: "hr"): NodeListOf; + querySelectorAll(selectors: "html"): NodeListOf; + querySelectorAll(selectors: "i"): NodeListOf; + querySelectorAll(selectors: "iframe"): NodeListOf; + querySelectorAll(selectors: "image"): NodeListOf; + querySelectorAll(selectors: "img"): NodeListOf; + querySelectorAll(selectors: "input"): NodeListOf; + querySelectorAll(selectors: "ins"): NodeListOf; + querySelectorAll(selectors: "isindex"): NodeListOf; + querySelectorAll(selectors: "kbd"): NodeListOf; + querySelectorAll(selectors: "keygen"): NodeListOf; + querySelectorAll(selectors: "label"): NodeListOf; + querySelectorAll(selectors: "legend"): NodeListOf; + querySelectorAll(selectors: "li"): NodeListOf; + querySelectorAll(selectors: "line"): NodeListOf; + querySelectorAll(selectors: "lineargradient"): NodeListOf; + querySelectorAll(selectors: "link"): NodeListOf; + querySelectorAll(selectors: "listing"): NodeListOf; + querySelectorAll(selectors: "map"): NodeListOf; + querySelectorAll(selectors: "mark"): NodeListOf; + querySelectorAll(selectors: "marker"): NodeListOf; + querySelectorAll(selectors: "marquee"): NodeListOf; + querySelectorAll(selectors: "mask"): NodeListOf; + querySelectorAll(selectors: "menu"): NodeListOf; + querySelectorAll(selectors: "meta"): NodeListOf; + querySelectorAll(selectors: "metadata"): NodeListOf; + querySelectorAll(selectors: "meter"): NodeListOf; + querySelectorAll(selectors: "nav"): NodeListOf; + querySelectorAll(selectors: "nextid"): NodeListOf; + querySelectorAll(selectors: "nobr"): NodeListOf; + querySelectorAll(selectors: "noframes"): NodeListOf; + querySelectorAll(selectors: "noscript"): NodeListOf; + querySelectorAll(selectors: "object"): NodeListOf; + querySelectorAll(selectors: "ol"): NodeListOf; + querySelectorAll(selectors: "optgroup"): NodeListOf; + querySelectorAll(selectors: "option"): NodeListOf; + querySelectorAll(selectors: "p"): NodeListOf; + querySelectorAll(selectors: "param"): NodeListOf; + querySelectorAll(selectors: "path"): NodeListOf; + querySelectorAll(selectors: "pattern"): NodeListOf; + querySelectorAll(selectors: "picture"): NodeListOf; + querySelectorAll(selectors: "plaintext"): NodeListOf; + querySelectorAll(selectors: "polygon"): NodeListOf; + querySelectorAll(selectors: "polyline"): NodeListOf; + querySelectorAll(selectors: "pre"): NodeListOf; + querySelectorAll(selectors: "progress"): NodeListOf; + querySelectorAll(selectors: "q"): NodeListOf; + querySelectorAll(selectors: "radialgradient"): NodeListOf; + querySelectorAll(selectors: "rect"): NodeListOf; + querySelectorAll(selectors: "rt"): NodeListOf; + querySelectorAll(selectors: "ruby"): NodeListOf; + querySelectorAll(selectors: "s"): NodeListOf; + querySelectorAll(selectors: "samp"): NodeListOf; + querySelectorAll(selectors: "script"): NodeListOf; + querySelectorAll(selectors: "section"): NodeListOf; + querySelectorAll(selectors: "select"): NodeListOf; + querySelectorAll(selectors: "small"): NodeListOf; + querySelectorAll(selectors: "source"): NodeListOf; + querySelectorAll(selectors: "span"): NodeListOf; + querySelectorAll(selectors: "stop"): NodeListOf; + querySelectorAll(selectors: "strike"): NodeListOf; + querySelectorAll(selectors: "strong"): NodeListOf; + querySelectorAll(selectors: "style"): NodeListOf; + querySelectorAll(selectors: "sub"): NodeListOf; + querySelectorAll(selectors: "sup"): NodeListOf; + querySelectorAll(selectors: "svg"): NodeListOf; + querySelectorAll(selectors: "switch"): NodeListOf; + querySelectorAll(selectors: "symbol"): NodeListOf; + querySelectorAll(selectors: "table"): NodeListOf; + querySelectorAll(selectors: "tbody"): NodeListOf; + querySelectorAll(selectors: "td"): NodeListOf; + querySelectorAll(selectors: "template"): NodeListOf; + querySelectorAll(selectors: "text"): NodeListOf; + querySelectorAll(selectors: "textpath"): NodeListOf; + querySelectorAll(selectors: "textarea"): NodeListOf; + querySelectorAll(selectors: "tfoot"): NodeListOf; + querySelectorAll(selectors: "th"): NodeListOf; + querySelectorAll(selectors: "thead"): NodeListOf; + querySelectorAll(selectors: "title"): NodeListOf; + querySelectorAll(selectors: "tr"): NodeListOf; + querySelectorAll(selectors: "track"): NodeListOf; + querySelectorAll(selectors: "tspan"): NodeListOf; + querySelectorAll(selectors: "tt"): NodeListOf; + querySelectorAll(selectors: "u"): NodeListOf; + querySelectorAll(selectors: "ul"): NodeListOf; + querySelectorAll(selectors: "use"): NodeListOf; + querySelectorAll(selectors: "var"): NodeListOf; + querySelectorAll(selectors: "video"): NodeListOf; + querySelectorAll(selectors: "view"): NodeListOf; + querySelectorAll(selectors: "wbr"): NodeListOf; + querySelectorAll(selectors: "x-ms-webview"): NodeListOf; + querySelectorAll(selectors: "xmp"): NodeListOf; querySelectorAll(selectors: string): NodeListOf; } @@ -19181,30 +19625,33 @@ interface WindowSessionStorage { interface WindowTimers extends Object, WindowTimersExtension { clearInterval(handle: number): void; clearTimeout(handle: number): void; + setInterval(handler: (...args: any[]) => void, timeout: number): number; setInterval(handler: any, timeout?: any, ...args: any[]): number; + setTimeout(handler: (...args: any[]) => void, timeout: number): number; setTimeout(handler: any, timeout?: any, ...args: any[]): number; } interface WindowTimersExtension { clearImmediate(handle: number): void; - setImmediate(expression: any, ...args: any[]): number; + setImmediate(handler: (...args: any[]) => void): number; + setImmediate(handler: any, ...args: any[]): number; } interface XMLHttpRequestEventTarget { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - ontimeout: (ev: ProgressEvent) => any; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + ontimeout: (this: this, ev: ProgressEvent) => any; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -19216,6 +19663,13 @@ interface StorageEventInit extends EventInit { storageArea?: Storage; } +interface Canvas2DContextAttributes { + alpha?: boolean; + willReadFrequently?: boolean; + storage?: boolean; + [attribute: string]: boolean | string | undefined; +} + interface NodeListOf extends NodeList { length: number; item(index: number): TNode; @@ -19265,6 +19719,177 @@ interface ClipboardEventInit extends EventInit { interface IDBArrayKey extends Array { } +interface RsaKeyGenParams extends Algorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyGenParams extends RsaKeyGenParams { + hash: AlgorithmIdentifier; +} + +interface RsaKeyAlgorithm extends KeyAlgorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { + hash: AlgorithmIdentifier; +} + +interface RsaHashedImportParams { + hash: AlgorithmIdentifier; +} + +interface RsaPssParams { + saltLength: number; +} + +interface RsaOaepParams extends Algorithm { + label?: BufferSource; +} + +interface EcdsaParams extends Algorithm { + hash: AlgorithmIdentifier; +} + +interface EcKeyGenParams extends Algorithm { + typedCurve: string; +} + +interface EcKeyAlgorithm extends KeyAlgorithm { + typedCurve: string; +} + +interface EcKeyImportParams { + namedCurve: string; +} + +interface EcdhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface AesCtrParams extends Algorithm { + counter: BufferSource; + length: number; +} + +interface AesKeyAlgorithm extends KeyAlgorithm { + length: number; +} + +interface AesKeyGenParams extends Algorithm { + length: number; +} + +interface AesDerivedKeyParams extends Algorithm { + length: number; +} + +interface AesCbcParams extends Algorithm { + iv: BufferSource; +} + +interface AesCmacParams extends Algorithm { + length: number; +} + +interface AesGcmParams extends Algorithm { + iv: BufferSource; + additionalData?: BufferSource; + tagLength?: number; +} + +interface AesCfbParams extends Algorithm { + iv: BufferSource; +} + +interface HmacImportParams extends Algorithm { + hash?: AlgorithmIdentifier; + length?: number; +} + +interface HmacKeyAlgorithm extends KeyAlgorithm { + hash: AlgorithmIdentifier; + length: number; +} + +interface HmacKeyGenParams extends Algorithm { + hash: AlgorithmIdentifier; + length?: number; +} + +interface DhKeyGenParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyAlgorithm extends KeyAlgorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface DhImportKeyParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface ConcatParams extends Algorithm { + hash?: AlgorithmIdentifier; + algorithmId: Uint8Array; + partyUInfo: Uint8Array; + partyVInfo: Uint8Array; + publicInfo?: Uint8Array; + privateInfo?: Uint8Array; +} + +interface HkdfCtrParams extends Algorithm { + hash: AlgorithmIdentifier; + label: BufferSource; + context: BufferSource; +} + +interface Pbkdf2Params extends Algorithm { + salt: BufferSource; + iterations: number; + hash: AlgorithmIdentifier; +} + +interface RsaOtherPrimesInfo { + r: string; + d: string; + t: string; +} + +interface JsonWebKey { + kty: string; + use?: string; + key_ops?: string[]; + alg?: string; + kid?: string; + x5u?: string; + x5c?: string; + x5t?: string; + ext?: boolean; + crv?: string; + x?: string; + y?: string; + d?: string; + n?: string; + e?: string; + p?: string; + q?: string; + dp?: string; + dq?: string; + qi?: string; + oth?: RsaOtherPrimesInfo[]; + k?: string; +} + declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject; interface ErrorEventHandler { @@ -19338,97 +19963,97 @@ declare var msCredentials: MSCredentials; declare var name: string; declare var navigator: Navigator; declare var offscreenBuffering: string | boolean; -declare var onabort: (ev: Event) => any; -declare var onafterprint: (ev: Event) => any; -declare var onbeforeprint: (ev: Event) => any; -declare var onbeforeunload: (ev: BeforeUnloadEvent) => any; -declare var onblur: (ev: FocusEvent) => any; -declare var oncanplay: (ev: Event) => any; -declare var oncanplaythrough: (ev: Event) => any; -declare var onchange: (ev: Event) => any; -declare var onclick: (ev: MouseEvent) => any; -declare var oncompassneedscalibration: (ev: Event) => any; -declare var oncontextmenu: (ev: PointerEvent) => any; -declare var ondblclick: (ev: MouseEvent) => any; -declare var ondevicelight: (ev: DeviceLightEvent) => any; -declare var ondevicemotion: (ev: DeviceMotionEvent) => any; -declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any; -declare var ondrag: (ev: DragEvent) => any; -declare var ondragend: (ev: DragEvent) => any; -declare var ondragenter: (ev: DragEvent) => any; -declare var ondragleave: (ev: DragEvent) => any; -declare var ondragover: (ev: DragEvent) => any; -declare var ondragstart: (ev: DragEvent) => any; -declare var ondrop: (ev: DragEvent) => any; -declare var ondurationchange: (ev: Event) => any; -declare var onemptied: (ev: Event) => any; -declare var onended: (ev: MediaStreamErrorEvent) => any; +declare var onabort: (this: Window, ev: UIEvent) => any; +declare var onafterprint: (this: Window, ev: Event) => any; +declare var onbeforeprint: (this: Window, ev: Event) => any; +declare var onbeforeunload: (this: Window, ev: BeforeUnloadEvent) => any; +declare var onblur: (this: Window, ev: FocusEvent) => any; +declare var oncanplay: (this: Window, ev: Event) => any; +declare var oncanplaythrough: (this: Window, ev: Event) => any; +declare var onchange: (this: Window, ev: Event) => any; +declare var onclick: (this: Window, ev: MouseEvent) => any; +declare var oncompassneedscalibration: (this: Window, ev: Event) => any; +declare var oncontextmenu: (this: Window, ev: PointerEvent) => any; +declare var ondblclick: (this: Window, ev: MouseEvent) => any; +declare var ondevicelight: (this: Window, ev: DeviceLightEvent) => any; +declare var ondevicemotion: (this: Window, ev: DeviceMotionEvent) => any; +declare var ondeviceorientation: (this: Window, ev: DeviceOrientationEvent) => any; +declare var ondrag: (this: Window, ev: DragEvent) => any; +declare var ondragend: (this: Window, ev: DragEvent) => any; +declare var ondragenter: (this: Window, ev: DragEvent) => any; +declare var ondragleave: (this: Window, ev: DragEvent) => any; +declare var ondragover: (this: Window, ev: DragEvent) => any; +declare var ondragstart: (this: Window, ev: DragEvent) => any; +declare var ondrop: (this: Window, ev: DragEvent) => any; +declare var ondurationchange: (this: Window, ev: Event) => any; +declare var onemptied: (this: Window, ev: Event) => any; +declare var onended: (this: Window, ev: MediaStreamErrorEvent) => any; declare var onerror: ErrorEventHandler; -declare var onfocus: (ev: FocusEvent) => any; -declare var onhashchange: (ev: HashChangeEvent) => any; -declare var oninput: (ev: Event) => any; -declare var oninvalid: (ev: Event) => any; -declare var onkeydown: (ev: KeyboardEvent) => any; -declare var onkeypress: (ev: KeyboardEvent) => any; -declare var onkeyup: (ev: KeyboardEvent) => any; -declare var onload: (ev: Event) => any; -declare var onloadeddata: (ev: Event) => any; -declare var onloadedmetadata: (ev: Event) => any; -declare var onloadstart: (ev: Event) => any; -declare var onmessage: (ev: MessageEvent) => any; -declare var onmousedown: (ev: MouseEvent) => any; -declare var onmouseenter: (ev: MouseEvent) => any; -declare var onmouseleave: (ev: MouseEvent) => any; -declare var onmousemove: (ev: MouseEvent) => any; -declare var onmouseout: (ev: MouseEvent) => any; -declare var onmouseover: (ev: MouseEvent) => any; -declare var onmouseup: (ev: MouseEvent) => any; -declare var onmousewheel: (ev: WheelEvent) => any; -declare var onmsgesturechange: (ev: MSGestureEvent) => any; -declare var onmsgesturedoubletap: (ev: MSGestureEvent) => any; -declare var onmsgestureend: (ev: MSGestureEvent) => any; -declare var onmsgesturehold: (ev: MSGestureEvent) => any; -declare var onmsgesturestart: (ev: MSGestureEvent) => any; -declare var onmsgesturetap: (ev: MSGestureEvent) => any; -declare var onmsinertiastart: (ev: MSGestureEvent) => any; -declare var onmspointercancel: (ev: MSPointerEvent) => any; -declare var onmspointerdown: (ev: MSPointerEvent) => any; -declare var onmspointerenter: (ev: MSPointerEvent) => any; -declare var onmspointerleave: (ev: MSPointerEvent) => any; -declare var onmspointermove: (ev: MSPointerEvent) => any; -declare var onmspointerout: (ev: MSPointerEvent) => any; -declare var onmspointerover: (ev: MSPointerEvent) => any; -declare var onmspointerup: (ev: MSPointerEvent) => any; -declare var onoffline: (ev: Event) => any; -declare var ononline: (ev: Event) => any; -declare var onorientationchange: (ev: Event) => any; -declare var onpagehide: (ev: PageTransitionEvent) => any; -declare var onpageshow: (ev: PageTransitionEvent) => any; -declare var onpause: (ev: Event) => any; -declare var onplay: (ev: Event) => any; -declare var onplaying: (ev: Event) => any; -declare var onpopstate: (ev: PopStateEvent) => any; -declare var onprogress: (ev: ProgressEvent) => any; -declare var onratechange: (ev: Event) => any; -declare var onreadystatechange: (ev: ProgressEvent) => any; -declare var onreset: (ev: Event) => any; -declare var onresize: (ev: UIEvent) => any; -declare var onscroll: (ev: UIEvent) => any; -declare var onseeked: (ev: Event) => any; -declare var onseeking: (ev: Event) => any; -declare var onselect: (ev: UIEvent) => any; -declare var onstalled: (ev: Event) => any; -declare var onstorage: (ev: StorageEvent) => any; -declare var onsubmit: (ev: Event) => any; -declare var onsuspend: (ev: Event) => any; -declare var ontimeupdate: (ev: Event) => any; +declare var onfocus: (this: Window, ev: FocusEvent) => any; +declare var onhashchange: (this: Window, ev: HashChangeEvent) => any; +declare var oninput: (this: Window, ev: Event) => any; +declare var oninvalid: (this: Window, ev: Event) => any; +declare var onkeydown: (this: Window, ev: KeyboardEvent) => any; +declare var onkeypress: (this: Window, ev: KeyboardEvent) => any; +declare var onkeyup: (this: Window, ev: KeyboardEvent) => any; +declare var onload: (this: Window, ev: Event) => any; +declare var onloadeddata: (this: Window, ev: Event) => any; +declare var onloadedmetadata: (this: Window, ev: Event) => any; +declare var onloadstart: (this: Window, ev: Event) => any; +declare var onmessage: (this: Window, ev: MessageEvent) => any; +declare var onmousedown: (this: Window, ev: MouseEvent) => any; +declare var onmouseenter: (this: Window, ev: MouseEvent) => any; +declare var onmouseleave: (this: Window, ev: MouseEvent) => any; +declare var onmousemove: (this: Window, ev: MouseEvent) => any; +declare var onmouseout: (this: Window, ev: MouseEvent) => any; +declare var onmouseover: (this: Window, ev: MouseEvent) => any; +declare var onmouseup: (this: Window, ev: MouseEvent) => any; +declare var onmousewheel: (this: Window, ev: WheelEvent) => any; +declare var onmsgesturechange: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturedoubletap: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgestureend: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturehold: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturestart: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturetap: (this: Window, ev: MSGestureEvent) => any; +declare var onmsinertiastart: (this: Window, ev: MSGestureEvent) => any; +declare var onmspointercancel: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerdown: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerenter: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerleave: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointermove: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerout: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerover: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerup: (this: Window, ev: MSPointerEvent) => any; +declare var onoffline: (this: Window, ev: Event) => any; +declare var ononline: (this: Window, ev: Event) => any; +declare var onorientationchange: (this: Window, ev: Event) => any; +declare var onpagehide: (this: Window, ev: PageTransitionEvent) => any; +declare var onpageshow: (this: Window, ev: PageTransitionEvent) => any; +declare var onpause: (this: Window, ev: Event) => any; +declare var onplay: (this: Window, ev: Event) => any; +declare var onplaying: (this: Window, ev: Event) => any; +declare var onpopstate: (this: Window, ev: PopStateEvent) => any; +declare var onprogress: (this: Window, ev: ProgressEvent) => any; +declare var onratechange: (this: Window, ev: Event) => any; +declare var onreadystatechange: (this: Window, ev: ProgressEvent) => any; +declare var onreset: (this: Window, ev: Event) => any; +declare var onresize: (this: Window, ev: UIEvent) => any; +declare var onscroll: (this: Window, ev: UIEvent) => any; +declare var onseeked: (this: Window, ev: Event) => any; +declare var onseeking: (this: Window, ev: Event) => any; +declare var onselect: (this: Window, ev: UIEvent) => any; +declare var onstalled: (this: Window, ev: Event) => any; +declare var onstorage: (this: Window, ev: StorageEvent) => any; +declare var onsubmit: (this: Window, ev: Event) => any; +declare var onsuspend: (this: Window, ev: Event) => any; +declare var ontimeupdate: (this: Window, ev: Event) => any; declare var ontouchcancel: (ev: TouchEvent) => any; declare var ontouchend: (ev: TouchEvent) => any; declare var ontouchmove: (ev: TouchEvent) => any; declare var ontouchstart: (ev: TouchEvent) => any; -declare var onunload: (ev: Event) => any; -declare var onvolumechange: (ev: Event) => any; -declare var onwaiting: (ev: Event) => any; +declare var onunload: (this: Window, ev: Event) => any; +declare var onvolumechange: (this: Window, ev: Event) => any; +declare var onwaiting: (this: Window, ev: Event) => any; declare var opener: Window; declare var orientation: string | number; declare var outerHeight: number; @@ -19488,120 +20113,123 @@ declare function dispatchEvent(evt: Event): boolean; declare function removeEventListener(type: string, listener?: EventListenerOrEventListenerObject, useCapture?: boolean): void; declare function clearInterval(handle: number): void; declare function clearTimeout(handle: number): void; +declare function setInterval(handler: (...args: any[]) => void, timeout: number): number; declare function setInterval(handler: any, timeout?: any, ...args: any[]): number; +declare function setTimeout(handler: (...args: any[]) => void, timeout: number): number; declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number; declare function clearImmediate(handle: number): void; -declare function setImmediate(expression: any, ...args: any[]): number; +declare function setImmediate(handler: (...args: any[]) => void): number; +declare function setImmediate(handler: any, ...args: any[]): number; declare var sessionStorage: Storage; declare var localStorage: Storage; declare var console: Console; -declare var onpointercancel: (ev: PointerEvent) => any; -declare var onpointerdown: (ev: PointerEvent) => any; -declare var onpointerenter: (ev: PointerEvent) => any; -declare var onpointerleave: (ev: PointerEvent) => any; -declare var onpointermove: (ev: PointerEvent) => any; -declare var onpointerout: (ev: PointerEvent) => any; -declare var onpointerover: (ev: PointerEvent) => any; -declare var onpointerup: (ev: PointerEvent) => any; -declare var onwheel: (ev: WheelEvent) => any; +declare var onpointercancel: (this: Window, ev: PointerEvent) => any; +declare var onpointerdown: (this: Window, ev: PointerEvent) => any; +declare var onpointerenter: (this: Window, ev: PointerEvent) => any; +declare var onpointerleave: (this: Window, ev: PointerEvent) => any; +declare var onpointermove: (this: Window, ev: PointerEvent) => any; +declare var onpointerout: (this: Window, ev: PointerEvent) => any; +declare var onpointerover: (this: Window, ev: PointerEvent) => any; +declare var onpointerup: (this: Window, ev: PointerEvent) => any; +declare var onwheel: (this: Window, ev: WheelEvent) => any; declare var indexedDB: IDBFactory; declare function atob(encodedString: string): string; declare function btoa(rawString: string): string; -declare function addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "devicelight", listener: (ev: DeviceLightEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureChange", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureDoubleTap", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureEnd", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureHold", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureStart", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureTap", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSInertiaStart", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerCancel", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerDown", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerEnter", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerLeave", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerMove", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerOut", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerOver", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerUp", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "abort", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "afterprint", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "beforeprint", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "beforeunload", listener: (this: Window, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "blur", listener: (this: Window, ev: FocusEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "canplay", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "canplaythrough", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "change", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "click", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "compassneedscalibration", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "contextmenu", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dblclick", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "devicelight", listener: (this: Window, ev: DeviceLightEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "devicemotion", listener: (this: Window, ev: DeviceMotionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "deviceorientation", listener: (this: Window, ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "drag", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragend", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragenter", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragleave", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragover", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragstart", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "drop", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "durationchange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "emptied", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "ended", listener: (this: Window, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "focus", listener: (this: Window, ev: FocusEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "hashchange", listener: (this: Window, ev: HashChangeEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "input", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "invalid", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keydown", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keypress", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keyup", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "load", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadeddata", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadedmetadata", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadstart", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "message", listener: (this: Window, ev: MessageEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousedown", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseenter", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseleave", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousemove", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseout", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseover", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseup", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousewheel", listener: (this: Window, ev: WheelEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "offline", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "online", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "orientationchange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pagehide", listener: (this: Window, ev: PageTransitionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pageshow", listener: (this: Window, ev: PageTransitionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pause", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "play", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "playing", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointercancel", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerdown", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerenter", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerleave", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointermove", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerout", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerover", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerup", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "popstate", listener: (this: Window, ev: PopStateEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "progress", listener: (this: Window, ev: ProgressEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "ratechange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "readystatechange", listener: (this: Window, ev: ProgressEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "reset", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "resize", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "scroll", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "seeked", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "seeking", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "select", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "stalled", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "storage", listener: (this: Window, ev: StorageEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "submit", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "suspend", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "timeupdate", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "unload", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "volumechange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "waiting", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "wheel", listener: (this: Window, ev: WheelEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; type AAGUID = string; type AlgorithmIdentifier = string | Algorithm; @@ -19635,6 +20263,8 @@ type RTCIceGatherCandidate = RTCIceCandidate | RTCIceCandidateComplete; type RTCTransport = RTCDtlsTransport | RTCSrtpSdesTransport; type payloadtype = number; type IDBValidKey = number | string | Date | IDBArrayKey; +type BufferSource = ArrayBuffer | ArrayBufferView; +type MouseWheelEvent = WheelEvent; ///////////////////////////// /// WorkerGlobalScope APIs ///////////////////////////// @@ -19918,6 +20548,19 @@ interface VBArrayConstructor { } declare var VBArray: VBArrayConstructor; + +/** + * Automation date (VT_DATE) + */ +interface VarDate { } + +interface DateConstructor { + new (vd: VarDate): Date; +} + +interface Date { + getVarDate: () => VarDate; +} /// interface DOMTokenList { diff --git a/lib/lib.scripthost.d.ts b/lib/lib.scripthost.d.ts index d4c6131fd93..b4e52a342f1 100644 --- a/lib/lib.scripthost.d.ts +++ b/lib/lib.scripthost.d.ts @@ -292,3 +292,16 @@ interface VBArrayConstructor { } declare var VBArray: VBArrayConstructor; + +/** + * Automation date (VT_DATE) + */ +interface VarDate { } + +interface DateConstructor { + new (vd: VarDate): Date; +} + +interface Date { + getVarDate: () => VarDate; +} diff --git a/lib/lib.webworker.d.ts b/lib/lib.webworker.d.ts index cf5ce7e81d8..be707d274f1 100644 --- a/lib/lib.webworker.d.ts +++ b/lib/lib.webworker.d.ts @@ -19,6 +19,10 @@ and limitations under the License. /// IE Worker APIs ///////////////////////////// +interface Algorithm { + name: string; +} + interface EventInit { bubbles?: boolean; cancelable?: boolean; @@ -34,6 +38,10 @@ interface IDBObjectStoreParameters { keyPath?: IDBKeyPath; } +interface KeyAlgorithm { + name?: string; +} + interface EventListener { (evt: Event): void; } @@ -123,6 +131,18 @@ declare var Coordinates: { new(): Coordinates; } +interface CryptoKey { + readonly algorithm: KeyAlgorithm; + readonly extractable: boolean; + readonly type: string; + readonly usages: string[]; +} + +declare var CryptoKey: { + prototype: CryptoKey; + new(): CryptoKey; +} + interface DOMError { readonly name: string; toString(): string; @@ -338,8 +358,8 @@ declare var IDBCursorWithValue: { interface IDBDatabase extends EventTarget { readonly name: string; readonly objectStoreNames: DOMStringList; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; version: number; onversionchange: (ev: IDBVersionChangeEvent) => any; close(): void; @@ -347,8 +367,8 @@ interface IDBDatabase extends EventTarget { deleteObjectStore(name: string): void; transaction(storeNames: string | string[], mode?: string): IDBTransaction; addEventListener(type: "versionchange", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -426,12 +446,12 @@ declare var IDBObjectStore: { } interface IDBOpenDBRequest extends IDBRequest { - onblocked: (ev: Event) => any; - onupgradeneeded: (ev: IDBVersionChangeEvent) => any; - addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; + onblocked: (this: this, ev: Event) => any; + onupgradeneeded: (this: this, ev: IDBVersionChangeEvent) => any; + addEventListener(type: "blocked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "upgradeneeded", listener: (this: this, ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -442,14 +462,14 @@ declare var IDBOpenDBRequest: { interface IDBRequest extends EventTarget { readonly error: DOMError; - onerror: (ev: Event) => any; - onsuccess: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onsuccess: (this: this, ev: Event) => any; readonly readyState: string; readonly result: any; source: IDBObjectStore | IDBIndex | IDBCursor; readonly transaction: IDBTransaction; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -462,17 +482,17 @@ interface IDBTransaction extends EventTarget { readonly db: IDBDatabase; readonly error: DOMError; readonly mode: string; - onabort: (ev: Event) => any; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; abort(): void; objectStore(name: string): IDBObjectStore; readonly READ_ONLY: string; readonly READ_WRITE: string; readonly VERSION_CHANGE: string; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -531,16 +551,16 @@ declare var MSApp: MSApp; interface MSAppAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; start(): void; readonly COMPLETED: number; readonly ERROR: number; readonly STARTED: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -624,11 +644,11 @@ declare var MessageEvent: { } interface MessagePort extends EventTarget { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; close(): void; postMessage(message?: any, ports?: any): void; start(): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -680,10 +700,10 @@ interface WebSocket extends EventTarget { binaryType: string; readonly bufferedAmount: number; readonly extensions: string; - onclose: (ev: CloseEvent) => any; - onerror: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onopen: (ev: Event) => any; + onclose: (this: this, ev: CloseEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onopen: (this: this, ev: Event) => any; readonly protocol: string; readonly readyState: number; readonly url: string; @@ -693,10 +713,10 @@ interface WebSocket extends EventTarget { readonly CLOSING: number; readonly CONNECTING: number; readonly OPEN: number; - addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "close", listener: (this: this, ev: CloseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "open", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -710,11 +730,11 @@ declare var WebSocket: { } interface Worker extends EventTarget, AbstractWorker { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; postMessage(message: any, ports?: any): void; terminate(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -724,8 +744,7 @@ declare var Worker: { } interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { - msCaching: string; - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly response: any; readonly responseText: string; @@ -736,6 +755,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { timeout: number; readonly upload: XMLHttpRequestUpload; withCredentials: boolean; + msCaching?: string; abort(): void; getAllResponseHeaders(): string; getResponseHeader(header: string): string | null; @@ -750,14 +770,14 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { readonly LOADING: number; readonly OPENED: number; readonly UNSENT: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -782,30 +802,30 @@ declare var XMLHttpRequestUpload: { } interface AbstractWorker { - onerror: (ev: Event) => any; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + onerror: (this: this, ev: ErrorEvent) => any; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } interface MSBaseReader { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly result: any; abort(): void; readonly DONE: number; readonly EMPTY: number; readonly LOADING: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -834,20 +854,20 @@ interface WindowConsole { } interface XMLHttpRequestEventTarget { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - ontimeout: (ev: ProgressEvent) => any; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + ontimeout: (this: this, ev: ProgressEvent) => any; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -865,13 +885,13 @@ declare var FileReaderSync: { interface WorkerGlobalScope extends EventTarget, WorkerUtils, DedicatedWorkerGlobalScope, WindowConsole { readonly location: WorkerLocation; - onerror: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly self: WorkerGlobalScope; close(): void; msWriteProfilerMark(profilerMarkName: string): void; toString(): string; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -907,9 +927,9 @@ declare var WorkerNavigator: { } interface DedicatedWorkerGlobalScope { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; postMessage(data: any): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -921,8 +941,11 @@ interface WorkerUtils extends Object, WindowBase64 { clearInterval(handle: number): void; clearTimeout(handle: number): void; importScripts(...urls: string[]): void; + setImmediate(handler: (...args: any[]) => void): number; setImmediate(handler: any, ...args: any[]): number; + setInterval(handler: (...args: any[]) => void, timeout: number): number; setInterval(handler: any, timeout?: any, ...args: any[]): number; + setTimeout(handler: (...args: any[]) => void, timeout: number): number; setTimeout(handler: any, timeout?: any, ...args: any[]): number; } @@ -958,6 +981,177 @@ interface ProgressEventInit extends EventInit { interface IDBArrayKey extends Array { } +interface RsaKeyGenParams extends Algorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyGenParams extends RsaKeyGenParams { + hash: AlgorithmIdentifier; +} + +interface RsaKeyAlgorithm extends KeyAlgorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { + hash: AlgorithmIdentifier; +} + +interface RsaHashedImportParams { + hash: AlgorithmIdentifier; +} + +interface RsaPssParams { + saltLength: number; +} + +interface RsaOaepParams extends Algorithm { + label?: BufferSource; +} + +interface EcdsaParams extends Algorithm { + hash: AlgorithmIdentifier; +} + +interface EcKeyGenParams extends Algorithm { + typedCurve: string; +} + +interface EcKeyAlgorithm extends KeyAlgorithm { + typedCurve: string; +} + +interface EcKeyImportParams { + namedCurve: string; +} + +interface EcdhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface AesCtrParams extends Algorithm { + counter: BufferSource; + length: number; +} + +interface AesKeyAlgorithm extends KeyAlgorithm { + length: number; +} + +interface AesKeyGenParams extends Algorithm { + length: number; +} + +interface AesDerivedKeyParams extends Algorithm { + length: number; +} + +interface AesCbcParams extends Algorithm { + iv: BufferSource; +} + +interface AesCmacParams extends Algorithm { + length: number; +} + +interface AesGcmParams extends Algorithm { + iv: BufferSource; + additionalData?: BufferSource; + tagLength?: number; +} + +interface AesCfbParams extends Algorithm { + iv: BufferSource; +} + +interface HmacImportParams extends Algorithm { + hash?: AlgorithmIdentifier; + length?: number; +} + +interface HmacKeyAlgorithm extends KeyAlgorithm { + hash: AlgorithmIdentifier; + length: number; +} + +interface HmacKeyGenParams extends Algorithm { + hash: AlgorithmIdentifier; + length?: number; +} + +interface DhKeyGenParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyAlgorithm extends KeyAlgorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface DhImportKeyParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface ConcatParams extends Algorithm { + hash?: AlgorithmIdentifier; + algorithmId: Uint8Array; + partyUInfo: Uint8Array; + partyVInfo: Uint8Array; + publicInfo?: Uint8Array; + privateInfo?: Uint8Array; +} + +interface HkdfCtrParams extends Algorithm { + hash: AlgorithmIdentifier; + label: BufferSource; + context: BufferSource; +} + +interface Pbkdf2Params extends Algorithm { + salt: BufferSource; + iterations: number; + hash: AlgorithmIdentifier; +} + +interface RsaOtherPrimesInfo { + r: string; + d: string; + t: string; +} + +interface JsonWebKey { + kty: string; + use?: string; + key_ops?: string[]; + alg?: string; + kid?: string; + x5u?: string; + x5c?: string; + x5t?: string; + ext?: boolean; + crv?: string; + x?: string; + y?: string; + d?: string; + n?: string; + e?: string; + p?: string; + q?: string; + dp?: string; + dq?: string; + qi?: string; + oth?: RsaOtherPrimesInfo[]; + k?: string; +} + declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject; interface ErrorEventHandler { @@ -991,7 +1185,7 @@ interface FunctionStringCallback { (data: string): void; } declare var location: WorkerLocation; -declare var onerror: (ev: Event) => any; +declare var onerror: (this: WorkerGlobalScope, ev: ErrorEvent) => any; declare var self: WorkerGlobalScope; declare function close(): void; declare function msWriteProfilerMark(profilerMarkName: string): void; @@ -1006,16 +1200,21 @@ declare function clearImmediate(handle: number): void; declare function clearInterval(handle: number): void; declare function clearTimeout(handle: number): void; declare function importScripts(...urls: string[]): void; +declare function setImmediate(handler: (...args: any[]) => void): number; declare function setImmediate(handler: any, ...args: any[]): number; +declare function setInterval(handler: (...args: any[]) => void, timeout: number): number; declare function setInterval(handler: any, timeout?: any, ...args: any[]): number; +declare function setTimeout(handler: (...args: any[]) => void, timeout: number): number; declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number; declare function atob(encodedString: string): string; declare function btoa(rawString: string): string; -declare var onmessage: (ev: MessageEvent) => any; +declare var onmessage: (this: WorkerGlobalScope, ev: MessageEvent) => any; declare function postMessage(data: any): void; 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: "error", listener: (this: WorkerGlobalScope, ev: ErrorEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "message", listener: (this: WorkerGlobalScope, ev: MessageEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; +type AlgorithmIdentifier = string | Algorithm; type IDBKeyPath = string; -type IDBValidKey = number | string | Date | IDBArrayKey; \ No newline at end of file +type IDBValidKey = number | string | Date | IDBArrayKey; +type BufferSource = ArrayBuffer | ArrayBufferView; \ No newline at end of file diff --git a/lib/tsc.js b/lib/tsc.js index a53870ecffe..0e3d7285ac3 100644 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -142,6 +142,15 @@ var ts; return -1; } ts.indexOf = indexOf; + function indexOfAnyCharCode(text, charCodes, start) { + for (var i = start || 0, len = text.length; i < len; i++) { + if (contains(charCodes, text.charCodeAt(i))) { + return i; + } + } + return -1; + } + ts.indexOfAnyCharCode = indexOfAnyCharCode; function countWhere(array, predicate) { var count = 0; if (array) { @@ -169,12 +178,24 @@ var ts; return result; } ts.filter = filter; + function filterMutate(array, f) { + var outIndex = 0; + for (var _i = 0, array_4 = array; _i < array_4.length; _i++) { + var item = array_4[_i]; + if (f(item)) { + array[outIndex] = item; + outIndex++; + } + } + array.length = outIndex; + } + ts.filterMutate = filterMutate; 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]; + for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { + var v = array_5[_i]; result.push(f(v)); } } @@ -193,8 +214,8 @@ var ts; var result; if (array) { result = []; - for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { - var item = array_5[_i]; + for (var _i = 0, array_6 = array; _i < array_6.length; _i++) { + var item = array_6[_i]; if (!contains(result, item, areEqual)) { result.push(item); } @@ -205,8 +226,8 @@ var ts; 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]; + for (var _i = 0, array_7 = array; _i < array_7.length; _i++) { + var v = array_7[_i]; result += v[prop]; } return result; @@ -500,6 +521,30 @@ var ts; return a < b ? -1 : 1; } ts.compareValues = compareValues; + function compareStrings(a, b, ignoreCase) { + if (a === b) + return 0; + if (a === undefined) + return -1; + if (b === undefined) + return 1; + if (ignoreCase) { + if (String.prototype.localeCompare) { + var result = a.localeCompare(b, undefined, { usage: "sort", sensitivity: "accent" }); + return result < 0 ? -1 : result > 0 ? 1 : 0; + } + a = a.toUpperCase(); + b = b.toUpperCase(); + if (a === b) + return 0; + } + return a < b ? -1 : 1; + } + ts.compareStrings = compareStrings; + function compareStringsCaseInsensitive(a, b) { + return compareStrings(a, b, true); + } + ts.compareStringsCaseInsensitive = compareStringsCaseInsensitive; function getDiagnosticFileName(diagnostic) { return diagnostic.file ? diagnostic.file.fileName : undefined; } @@ -722,12 +767,219 @@ var ts; return path1 + ts.directorySeparator + path2; } ts.combinePaths = combinePaths; + function removeTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) === ts.directorySeparator) { + return path.substr(0, path.length - 1); + } + return path; + } + ts.removeTrailingDirectorySeparator = removeTrailingDirectorySeparator; + function ensureTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) !== ts.directorySeparator) { + return path + ts.directorySeparator; + } + return path; + } + ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator; + function comparePaths(a, b, currentDirectory, ignoreCase) { + if (a === b) + return 0; + if (a === undefined) + return -1; + if (b === undefined) + return 1; + a = removeTrailingDirectorySeparator(a); + b = removeTrailingDirectorySeparator(b); + var aComponents = getNormalizedPathComponents(a, currentDirectory); + var bComponents = getNormalizedPathComponents(b, currentDirectory); + var sharedLength = Math.min(aComponents.length, bComponents.length); + for (var i = 0; i < sharedLength; i++) { + var result = compareStrings(aComponents[i], bComponents[i], ignoreCase); + if (result !== 0) { + return result; + } + } + return compareValues(aComponents.length, bComponents.length); + } + ts.comparePaths = comparePaths; + function containsPath(parent, child, currentDirectory, ignoreCase) { + if (parent === undefined || child === undefined) + return false; + if (parent === child) + return true; + parent = removeTrailingDirectorySeparator(parent); + child = removeTrailingDirectorySeparator(child); + if (parent === child) + return true; + var parentComponents = getNormalizedPathComponents(parent, currentDirectory); + var childComponents = getNormalizedPathComponents(child, currentDirectory); + if (childComponents.length < parentComponents.length) { + return false; + } + for (var i = 0; i < parentComponents.length; i++) { + var result = compareStrings(parentComponents[i], childComponents[i], ignoreCase); + if (result !== 0) { + return false; + } + } + return true; + } + ts.containsPath = containsPath; function fileExtensionIs(path, extension) { var pathLen = path.length; var extLen = extension.length; return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } ts.fileExtensionIs = fileExtensionIs; + function fileExtensionIsAny(path, extensions) { + for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) { + var extension = extensions_1[_i]; + if (fileExtensionIs(path, extension)) { + return true; + } + } + return false; + } + ts.fileExtensionIsAny = fileExtensionIsAny; + var reservedCharacterPattern = /[^\w\s\/]/g; + var wildcardCharCodes = [42, 63]; + function getRegularExpressionForWildcard(specs, basePath, usage) { + if (specs === undefined || specs.length === 0) { + return undefined; + } + var pattern = ""; + var hasWrittenSubpattern = false; + spec: for (var _i = 0, specs_1 = specs; _i < specs_1.length; _i++) { + var spec = specs_1[_i]; + if (!spec) { + continue; + } + var subpattern = ""; + var hasRecursiveDirectoryWildcard = false; + var hasWrittenComponent = false; + var components = getNormalizedPathComponents(spec, basePath); + if (usage !== "exclude" && components[components.length - 1] === "**") { + continue spec; + } + components[0] = removeTrailingDirectorySeparator(components[0]); + var optionalCount = 0; + for (var _a = 0, components_1 = components; _a < components_1.length; _a++) { + var component = components_1[_a]; + if (component === "**") { + if (hasRecursiveDirectoryWildcard) { + continue spec; + } + subpattern += "(/.+?)?"; + hasRecursiveDirectoryWildcard = true; + hasWrittenComponent = true; + } + else { + if (usage === "directories") { + subpattern += "("; + optionalCount++; + } + if (hasWrittenComponent) { + subpattern += ts.directorySeparator; + } + subpattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter); + hasWrittenComponent = true; + } + } + while (optionalCount > 0) { + subpattern += ")?"; + optionalCount--; + } + if (hasWrittenSubpattern) { + pattern += "|"; + } + pattern += "(" + subpattern + ")"; + hasWrittenSubpattern = true; + } + if (!pattern) { + return undefined; + } + return "^(" + pattern + (usage === "exclude" ? ")($|/)" : ")$"); + } + ts.getRegularExpressionForWildcard = getRegularExpressionForWildcard; + function replaceWildcardCharacter(match) { + return match === "*" ? "[^/]*" : match === "?" ? "[^/]" : "\\" + match; + } + function getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var absolutePath = combinePaths(currentDirectory, path); + return { + includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"), + includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"), + excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"), + basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames) + }; + } + ts.getFileMatcherPatterns = getFileMatcherPatterns; + function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, getFileSystemEntries) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var patterns = getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory); + var regexFlag = useCaseSensitiveFileNames ? "" : "i"; + var includeFileRegex = patterns.includeFilePattern && new RegExp(patterns.includeFilePattern, regexFlag); + var includeDirectoryRegex = patterns.includeDirectoryPattern && new RegExp(patterns.includeDirectoryPattern, regexFlag); + var excludeRegex = patterns.excludePattern && new RegExp(patterns.excludePattern, regexFlag); + var result = []; + for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) { + var basePath = _a[_i]; + visitDirectory(basePath, combinePaths(currentDirectory, basePath)); + } + return result; + function visitDirectory(path, absolutePath) { + var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories; + for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { + var current = files_1[_i]; + var name_1 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!extensions || fileExtensionIsAny(name_1, extensions)) && + (!includeFileRegex || includeFileRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + result.push(name_1); + } + } + for (var _b = 0, directories_1 = directories; _b < directories_1.length; _b++) { + var current = directories_1[_b]; + var name_2 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + visitDirectory(name_2, absoluteName); + } + } + } + } + ts.matchFiles = matchFiles; + function getBasePaths(path, includes, useCaseSensitiveFileNames) { + var basePaths = [path]; + if (includes) { + var includeBasePaths = []; + for (var _i = 0, includes_1 = includes; _i < includes_1.length; _i++) { + var include = includes_1[_i]; + var absolute = isRootedDiskPath(include) ? include : normalizePath(combinePaths(path, include)); + var wildcardOffset = indexOfAnyCharCode(absolute, wildcardCharCodes); + var includeBasePath = wildcardOffset < 0 + ? removeTrailingDirectorySeparator(getDirectoryPath(absolute)) + : absolute.substring(0, absolute.lastIndexOf(ts.directorySeparator, wildcardOffset)); + includeBasePaths.push(includeBasePath); + } + includeBasePaths.sort(useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive); + include: for (var i = 0; i < includeBasePaths.length; i++) { + var includeBasePath = includeBasePaths[i]; + for (var j = 0; j < basePaths.length; j++) { + if (containsPath(basePaths[j], includeBasePath, path, !useCaseSensitiveFileNames)) { + continue include; + } + } + basePaths.push(includeBasePath); + } + } + return basePaths; + } function ensureScriptKind(fileName, scriptKind) { return (scriptKind || getScriptKindFromFileName(fileName)) || 3; } @@ -768,6 +1020,36 @@ var ts; return false; } ts.isSupportedSourceFileName = isSupportedSourceFileName; + function getExtensionPriority(path, supportedExtensions) { + for (var i = supportedExtensions.length - 1; i >= 0; i--) { + if (fileExtensionIs(path, supportedExtensions[i])) { + return adjustExtensionPriority(i); + } + } + return 0; + } + ts.getExtensionPriority = getExtensionPriority; + function adjustExtensionPriority(extensionPriority) { + if (extensionPriority < 2) { + return 0; + } + else if (extensionPriority < 5) { + return 2; + } + else { + return 5; + } + } + ts.adjustExtensionPriority = adjustExtensionPriority; + function getNextLowestExtensionPriority(extensionPriority) { + if (extensionPriority < 2) { + return 2; + } + else { + return 5; + } + } + ts.getNextLowestExtensionPriority = getNextLowestExtensionPriority; var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"]; function removeFileExtension(path) { for (var _i = 0, extensionsToRemove_1 = extensionsToRemove; _i < extensionsToRemove_1.length; _i++) { @@ -788,6 +1070,10 @@ var ts; return ext === ".jsx" || ext === ".tsx"; } ts.isJsxOrTsxExtension = isJsxOrTsxExtension; + function changeExtension(path, newExtension) { + return (removeFileExtension(path) + newExtension); + } + ts.changeExtension = changeExtension; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -858,6 +1144,7 @@ var ts; ts.sys = (function () { function getWScriptSystem() { var fso = new ActiveXObject("Scripting.FileSystemObject"); + var shell = new ActiveXObject("WScript.Shell"); var fileStream = new ActiveXObject("ADODB.Stream"); fileStream.Type = 2; var binaryStream = new ActiveXObject("ADODB.Stream"); @@ -912,9 +1199,6 @@ var ts; fileStream.Close(); } } - function getCanonicalPath(path) { - return path.toLowerCase(); - } function getNames(collection) { var result = []; for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) { @@ -926,30 +1210,19 @@ var ts; var folder = fso.GetFolder(path); return getNames(folder.subfolders); } - 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) { + function getAccessibleFileSystemEntries(path) { + try { 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); - } - } + var directories = getNames(folder.subfolders); + return { files: files, directories: directories }; } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, false, shell.CurrentDirectory, getAccessibleFileSystemEntries); } return { args: args, @@ -978,7 +1251,7 @@ var ts; return WScript.ScriptFullName; }, getCurrentDirectory: function () { - return new ActiveXObject("WScript.Shell").CurrentDirectory; + return shell.CurrentDirectory; }, getDirectories: getDirectories, readDirectory: readDirectory, @@ -1107,8 +1380,39 @@ var ts; } } } - function getCanonicalPath(path) { - return useCaseSensitiveFileNames ? path : path.toLowerCase(); + function getAccessibleFileSystemEntries(path) { + try { + var entries = _fs.readdirSync(path || ".").sort(); + var files = []; + var directories = []; + for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) { + var entry = entries_1[_i]; + if (entry === "." || entry === "..") { + continue; + } + var name_3 = ts.combinePaths(path, entry); + var stat = void 0; + try { + stat = _fs.statSync(name_3); + } + catch (e) { + continue; + } + if (stat.isFile()) { + files.push(entry); + } + else if (stat.isDirectory()) { + directories.push(entry); + } + } + return { files: files, directories: directories }; + } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), getAccessibleFileSystemEntries); } function fileSystemEntryExists(path, entryKind) { try { @@ -1131,38 +1435,6 @@ var ts; function getDirectories(path) { return ts.filter(_fs.readdirSync(path), function (p) { return fileSystemEntryExists(ts.combinePaths(path, p), 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, @@ -1244,6 +1516,16 @@ var ts; } return process.memoryUsage().heapUsed; }, + getFileSize: function (path) { + try { + var stat = _fs.statSync(path); + if (stat.isFile()) { + return stat.size; + } + } + catch (e) { } + return 0; + }, exit: function (exitCode) { process.exit(exitCode); }, @@ -1275,7 +1557,10 @@ var ts; getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, getDirectories: ChakraHost.getDirectories, - readDirectory: ChakraHost.readDirectory, + readDirectory: function (path, extensions, excludes, includes) { + var pattern = ts.getFileMatcherPatterns(path, extensions, excludes, includes, !!ChakraHost.useCaseSensitiveFileNames, ChakraHost.currentDirectory); + return ChakraHost.readDirectory(path, extensions, pattern.basePaths, pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern); + }, exit: ChakraHost.quit, realpath: realpath }; @@ -1440,7 +1725,7 @@ var ts; 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." }, + A_parameter_property_may_not_be_declared_using_a_binding_pattern: { code: 1187, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187", message: "A parameter property may not be declared using 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." }, @@ -1456,7 +1741,6 @@ var ts; 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_2015_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_2015_modules_Consider_using_import_Asteri_1202", message: "Import assignment cannot be used when targeting ECMAScript 2015 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_2015_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_2015_modules_Consider_using_export_defaul_1203", message: "Export assignment cannot be used when targeting ECMAScript 2015 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." }, @@ -1511,6 +1795,7 @@ var ts; 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." }, + A_parameter_property_cannot_be_declared_using_a_rest_parameter: { code: 1317, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317", message: "A parameter property cannot be declared using a rest parameter." }, 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." }, @@ -1781,6 +2066,8 @@ var ts; 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." }, Identifier_0_must_be_imported_from_a_module: { code: 2686, category: ts.DiagnosticCategory.Error, key: "Identifier_0_must_be_imported_from_a_module_2686", message: "Identifier '{0}' must be imported from a module" }, All_declarations_of_0_must_have_identical_modifiers: { code: 2687, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_0_must_have_identical_modifiers_2687", message: "All declarations of '{0}' must have identical modifiers." }, + Cannot_find_type_definition_file_for_0: { code: 2688, category: ts.DiagnosticCategory.Error, key: "Cannot_find_type_definition_file_for_0_2688", message: "Cannot find type definition file for '{0}'." }, + Cannot_extend_an_interface_0_Did_you_mean_implements: { code: 2689, category: ts.DiagnosticCategory.Error, key: "Cannot_extend_an_interface_0_Did_you_mean_implements_2689", message: "Cannot extend an interface '{0}'. Did you mean 'implements'?" }, 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}'." }, @@ -1854,6 +2141,8 @@ var ts; 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." }, + File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5010, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", message: "File specification cannot end in a recursive directory wildcard ('**'): '{0}'." }, + File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0: { code: 5011, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0_5011", message: "File specification cannot contain multiple recursive directory wildcards ('**'): '{0}'." }, 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}." }, @@ -1876,6 +2165,7 @@ var ts; 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" }, Substitutions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substitutions_for_pattern_0_should_be_an_array_5063", message: "Substitutions 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}'." }, + File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5065, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065", message: "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'." }, 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." }, @@ -1991,6 +2281,11 @@ var ts; 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}'" }, Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system: { code: 6131, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131", message: "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'." }, File_name_0_has_a_1_extension_stripping_it: { code: 6132, category: ts.DiagnosticCategory.Message, key: "File_name_0_has_a_1_extension_stripping_it_6132", message: "File name '{0}' has a '{1}' extension - stripping it" }, + _0_is_declared_but_never_used: { code: 6133, category: ts.DiagnosticCategory.Error, key: "_0_is_declared_but_never_used_6133", message: "'{0}' is declared but never used." }, + Report_Errors_on_Unused_Locals: { code: 6134, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Locals_6134", message: "Report Errors on Unused Locals." }, + Report_Errors_on_Unused_Parameters: { code: 6135, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Parameters_6135", message: "Report Errors on Unused Parameters." }, + The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files: { code: 6136, category: ts.DiagnosticCategory.Message, key: "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136", message: "The maximum dependency depth to search under node_modules and load JavaScript files" }, + No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0: { code: 6137, category: ts.DiagnosticCategory.Message, key: "No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0_6137", message: "No types specified in 'package.json' but 'allowJs' is set, so returning 'main' value of '{0}'" }, 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." }, @@ -2027,7 +2322,6 @@ var ts; 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." }, @@ -2290,6 +2584,10 @@ var ts; ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; var hasOwnProperty = Object.prototype.hasOwnProperty; function isWhiteSpace(ch) { + return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); + } + ts.isWhiteSpace = isWhiteSpace; + function isWhiteSpaceSingleLine(ch) { return ch === 32 || ch === 9 || ch === 11 || @@ -2303,7 +2601,7 @@ var ts; ch === 12288 || ch === 65279; } - ts.isWhiteSpace = isWhiteSpace; + ts.isWhiteSpaceSingleLine = isWhiteSpaceSingleLine; function isLineBreak(ch) { return ch === 10 || ch === 13 || @@ -2404,7 +2702,7 @@ var ts; } break; default: - if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 && (isWhiteSpace(ch))) { pos++; continue; } @@ -2525,7 +2823,7 @@ var ts; } break; default: - if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 && (isWhiteSpace(ch))) { if (result && result.length && isLineBreak(ch)) { ts.lastOrUndefined(result).hasTrailingNewLine = true; } @@ -2608,6 +2906,7 @@ var ts; scanJsxToken: scanJsxToken, scanJSDocToken: scanJSDocToken, scan: scan, + getText: getText, setText: setText, setScriptTarget: setScriptTarget, setLanguageVariant: setLanguageVariant, @@ -2973,7 +3272,7 @@ var ts; continue; } else { - while (pos < end && isWhiteSpace(text.charCodeAt(pos))) { + while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } return token = 5; @@ -3272,7 +3571,7 @@ var ts; } return token = getIdentifierToken(); } - else if (isWhiteSpace(ch)) { + else if (isWhiteSpaceSingleLine(ch)) { pos++; continue; } @@ -3413,7 +3712,7 @@ var ts; var ch = text.charCodeAt(pos); while (pos < end) { ch = text.charCodeAt(pos); - if (isWhiteSpace(ch)) { + if (isWhiteSpaceSingleLine(ch)) { pos++; } else { @@ -3500,6 +3799,9 @@ var ts; function tryScan(callback) { return speculationHelper(callback, false); } + function getText() { + return text; + } function setText(newText, start, length) { text = newText || ""; end = length === undefined ? text.length : start + length; @@ -3807,6 +4109,10 @@ var ts; (node.name.kind === 9 || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; + function isShorthandAmbientModule(node) { + return node.kind === 225 && (!node.body); + } + ts.isShorthandAmbientModule = isShorthandAmbientModule; function isBlockScopedContainerTopLevel(node) { return node.kind === 256 || node.kind === 225 || @@ -4194,6 +4500,7 @@ var ts; case 157: return true; } + return false; } ts.isFunctionLikeKind = isFunctionLikeKind; function introducesArgumentsExoticObject(node) { @@ -4571,6 +4878,14 @@ var ts; return charCode === 39 || charCode === 34; } ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; + function isDeclarationOfFunctionExpression(s) { + if (s.valueDeclaration && s.valueDeclaration.kind === 218) { + var declaration = s.valueDeclaration; + return declaration.initializer && declaration.initializer.kind === 179; + } + return false; + } + ts.isDeclarationOfFunctionExpression = isDeclarationOfFunctionExpression; function getSpecialPropertyAssignmentKind(expression) { if (!isInJavaScriptFile(expression)) { return 0; @@ -5415,7 +5730,7 @@ var ts; 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)) { + if (!isDeclarationFile(sourceFile) && !host.isSourceFileFromExternalLibrary(sourceFile)) { onSingleFileEmit(host, sourceFile); } } @@ -5441,10 +5756,10 @@ var ts; action(emitFileNames, [sourceFile], false); } function onBundledEmit(host) { - var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { - return !isDeclarationFile(sourceFile) - && (!ts.isExternalModule(sourceFile) || !!getEmitModuleKind(options)); - }); + var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { return !isDeclarationFile(sourceFile) && + !host.isSourceFileFromExternalLibrary(sourceFile) && + (!ts.isExternalModule(sourceFile) || + !!getEmitModuleKind(options)); }); if (bundledSources.length) { var jsFilePath = options.outFile || options.out; var emitFileNames = { @@ -5462,7 +5777,9 @@ var ts; ts.forEachExpectedEmitFile = forEachExpectedEmitFile; function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); - sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); + var commonSourceDirectory = host.getCommonSourceDirectory(); + var isSourceFileInCommonSourceDirectory = host.getCanonicalFileName(sourceFilePath).indexOf(host.getCanonicalFileName(commonSourceDirectory)) === 0; + sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath; return ts.combinePaths(newDirPath, sourceFilePath); } ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir; @@ -5667,7 +5984,7 @@ var ts; } function calculateIndent(text, pos, end) { var currentLineIndent = 0; - for (; pos < end && ts.isWhiteSpace(text.charCodeAt(pos)); pos++) { + for (; pos < end && ts.isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) { if (text.charCodeAt(pos) === 9) { currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); } @@ -5776,6 +6093,10 @@ var ts; return ts.forEach(ts.supportedJavascriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); } ts.hasJavaScriptFileExtension = hasJavaScriptFileExtension; + function hasTypeScriptFileExtension(fileName) { + return ts.forEach(ts.supportedTypeScriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); + } + ts.hasTypeScriptFileExtension = hasTypeScriptFileExtension; function getExpandedCharCodes(input) { var output = []; var length = input.length; @@ -6159,7 +6480,6 @@ var ts; 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) || @@ -6890,12 +7210,12 @@ var ts; if (token === 82) { nextToken(); if (token === 77) { - return lookAhead(nextTokenIsClassOrFunction); + return lookAhead(nextTokenIsClassOrFunctionOrAsync); } return token !== 37 && token !== 116 && token !== 15 && canFollowModifier(); } if (token === 77) { - return nextTokenIsClassOrFunction(); + return nextTokenIsClassOrFunctionOrAsync(); } if (token === 113) { nextToken(); @@ -6910,11 +7230,13 @@ var ts; return token === 19 || token === 15 || token === 37 + || token === 22 || isLiteralPropertyName(); } - function nextTokenIsClassOrFunction() { + function nextTokenIsClassOrFunctionOrAsync() { nextToken(); - return token === 73 || token === 87; + return token === 73 || token === 87 || + (token === 118 && lookAhead(nextTokenIsFunctionKeywordOnSameLine)); } function isListElement(parsingContext, inErrorRecovery) { var node = currentNode(parsingContext); @@ -8417,7 +8739,7 @@ var ts; } 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); + parseExpectedToken(21, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(true); return finishNode(node); } @@ -8428,8 +8750,11 @@ var ts; if (lhs.kind === 69) { return lhs.text === rhs.text; } - return lhs.right.text === rhs.right.text && - tagNamesAreEquivalent(lhs.left, rhs.left); + if (lhs.kind === 97) { + return true; + } + return lhs.name.text === rhs.name.text && + tagNamesAreEquivalent(lhs.expression, rhs.expression); } function parseJsxElementOrSelfClosingElement(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); @@ -8526,15 +8851,15 @@ var ts; } function parseJsxElementName() { scanJsxIdentifier(); - var elementName = parseIdentifierName(); + var expression = token === 97 ? + parseTokenNode() : parseIdentifierName(); while (parseOptional(21)) { - scanJsxIdentifier(); - var node = createNode(139, elementName.pos); - node.left = elementName; - node.right = parseIdentifierName(); - elementName = finishNode(node); + var propertyAccess = createNode(172, expression.pos); + propertyAccess.expression = expression; + propertyAccess.name = parseRightSideOfDot(true); + expression = finishNode(propertyAccess); } - return elementName; + return expression; } function parseJsxExpression(inExpressionContext) { var node = createNode(248); @@ -8605,7 +8930,6 @@ var ts; if (dotToken) { var propertyAccess = createNode(172, expression.pos); propertyAccess.expression = expression; - propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(true); expression = finishNode(propertyAccess); continue; @@ -9313,7 +9637,7 @@ var ts; case 56: return parseExportAssignment(fullStart, decorators, modifiers); case 116: - return parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers); + return parseNamespaceExportDeclaration(fullStart, decorators, modifiers); default: return parseExportDeclaration(fullStart, decorators, modifiers); } @@ -9793,7 +10117,12 @@ var ts; else { node.name = parseLiteralNode(true); } - node.body = parseModuleBlock(); + if (token === 15) { + node.body = parseModuleBlock(); + } + else { + parseSemicolon(); + } return finishNode(node); } function parseModuleDeclaration(fullStart, decorators, modifiers) { @@ -9822,7 +10151,7 @@ var ts; function nextTokenIsSlash() { return nextToken() === 39; } - function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { + function parseNamespaceExportDeclaration(fullStart, decorators, modifiers) { var exportDeclaration = createNode(228, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; @@ -10729,8 +11058,8 @@ var ts; 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]; + for (var _i = 0, array_8 = array; _i < array_8.length; _i++) { + var node = array_8[_i]; visitNode(node); } } @@ -10802,8 +11131,8 @@ var ts; 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]; + for (var _i = 0, array_9 = array; _i < array_9.length; _i++) { + var node = array_9[_i]; visitNode(node); } return; @@ -10983,7 +11312,8 @@ var ts; return state_1; } else if (node.kind === 225) { - return getModuleInstanceState(node.body); + var body = node.body; + return body ? getModuleInstanceState(body) : 1; } else { return 1; @@ -11326,6 +11656,9 @@ var ts; case 227: bindCaseBlock(node); break; + case 249: + bindCaseClause(node); + break; case 214: bindLabeledStatement(node); break; @@ -11352,11 +11685,6 @@ var ts; 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: @@ -11364,7 +11692,7 @@ var ts; case 172: return isNarrowableReference(expr); case 174: - return true; + return hasNarrowableArgument(expr); case 178: return isNarrowingExpression(expr.expression); case 187: @@ -11374,6 +11702,35 @@ var ts; } return false; } + function isNarrowableReference(expr) { + return expr.kind === 69 || + expr.kind === 97 || + expr.kind === 172 && isNarrowableReference(expr.expression); + } + function hasNarrowableArgument(expr) { + if (expr.arguments) { + for (var _i = 0, _a = expr.arguments; _i < _a.length; _i++) { + var argument = _a[_i]; + if (isNarrowableReference(argument)) { + return true; + } + } + } + if (expr.expression.kind === 172 && + isNarrowableReference(expr.expression.expression)) { + return true; + } + return false; + } + function isNarrowingNullCheckOperands(expr1, expr2) { + return (expr1.kind === 93 || expr1.kind === 69 && expr1.text === "undefined") && isNarrowableOperand(expr2); + } + function isNarrowingTypeofOperands(expr1, expr2) { + return expr1.kind === 182 && isNarrowableOperand(expr1.expression) && expr2.kind === 9; + } + function isNarrowingDiscriminant(expr) { + return expr.kind === 172 && isNarrowableReference(expr.expression); + } function isNarrowingBinaryExpression(expr) { switch (expr.operatorToken.kind) { case 56: @@ -11382,20 +11739,34 @@ var ts; 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; + return isNarrowingNullCheckOperands(expr.right, expr.left) || isNarrowingNullCheckOperands(expr.left, expr.right) || + isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right) || + isNarrowingDiscriminant(expr.left) || isNarrowingDiscriminant(expr.right); case 91: - return isNarrowingExpression(expr.left); + return isNarrowableOperand(expr.left); case 24: return isNarrowingExpression(expr.right); } return false; } + function isNarrowableOperand(expr) { + switch (expr.kind) { + case 178: + return isNarrowableOperand(expr.expression); + case 187: + switch (expr.operatorToken.kind) { + case 56: + return isNarrowableOperand(expr.left); + case 24: + return isNarrowableOperand(expr.right); + } + } + return isNarrowableReference(expr); + } + function isNarrowingSwitchStatement(switchStatement) { + var expr = switchStatement.expression; + return expr.kind === 172 && isNarrowableReference(expr.expression); + } function createBranchLabel() { return { flags: 4, @@ -11409,7 +11780,7 @@ var ts; }; } function setFlowNodeReferenced(flow) { - flow.flags |= flow.flags & 128 ? 256 : 128; + flow.flags |= flow.flags & 256 ? 512 : 256; } function addAntecedent(label, antecedent) { if (!(antecedent.flags & 1) && !ts.contains(label.antecedents, antecedent)) { @@ -11434,8 +11805,21 @@ var ts; setFlowNodeReferenced(antecedent); return { flags: flags, - antecedent: antecedent, - expression: expression + expression: expression, + antecedent: antecedent + }; + } + function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) { + if (!isNarrowingSwitchStatement(switchStatement)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: 128, + switchStatement: switchStatement, + clauseStart: clauseStart, + clauseEnd: clauseEnd, + antecedent: antecedent }; } function createFlowAssignment(antecedent, node) { @@ -11645,9 +12029,10 @@ var ts; preSwitchCaseFlow = currentFlow; bind(node.caseBlock); addAntecedent(postSwitchLabel, currentFlow); - var hasNonEmptyDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250 && c.statements.length; }); - if (!hasNonEmptyDefault) { - addAntecedent(postSwitchLabel, preSwitchCaseFlow); + var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250; }); + node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents; + if (!hasDefault) { + addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0)); } currentBreakTarget = saveBreakTarget; preSwitchCaseFlow = savePreSwitchCaseFlow; @@ -11655,28 +12040,32 @@ var ts; } function bindCaseBlock(node) { var clauses = node.clauses; + var fallthroughFlow = unreachableFlow; 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); - } + var clauseStart = i; + while (!clauses[i].statements.length && i + 1 < clauses.length) { + bind(clauses[i]); + i++; } - else { - bind(clause); + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1)); + addAntecedent(preCaseLabel, fallthroughFlow); + currentFlow = finishFlowLabel(preCaseLabel); + var clause = clauses[i]; + bind(clause); + fallthroughFlow = currentFlow; + if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); } } } + function bindCaseClause(node) { + var saveCurrentFlow = currentFlow; + currentFlow = preSwitchCaseFlow; + bind(node.expression); + currentFlow = saveCurrentFlow; + ts.forEach(node.statements, bind); + } function pushActiveLabel(name, breakTarget, continueTarget) { var activeLabel = { name: name, @@ -11938,7 +12327,7 @@ var ts; } function hasExportDeclarations(node) { var body = node.kind === 256 ? node : node.body; - if (body.kind === 256 || body.kind === 226) { + if (body && (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) { @@ -12458,7 +12847,7 @@ var ts; constructorFunction.parent = classPrototype; classPrototype.parent = leftSideOfAssignment; var funcSymbol = container.locals[constructorFunction.text]; - if (!funcSymbol || !(funcSymbol.flags & 16)) { + if (!funcSymbol || !(funcSymbol.flags & 16 || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return; } if (!funcSymbol.members) { @@ -12650,6 +13039,7 @@ var ts; var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || 0; var modulekind = ts.getEmitModuleKind(compilerOptions); + var noUnusedIdentifiers = !!compilerOptions.noUnusedLocals || !!compilerOptions.noUnusedParameters; var allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === ts.ModuleKind.System; var strictNullChecks = compilerOptions.strictNullChecks; var emitResolver = createResolver(); @@ -12756,6 +13146,7 @@ var ts; var getGlobalThenableType; var jsxElementClassType; var deferredNodes; + var deferredUnusedIdentifierNodes; var flowLoopStart = 0; var flowLoopCount = 0; var visitedFlowCount = 0; @@ -13043,7 +13434,8 @@ var ts; var declarationFile = ts.getSourceFileOfNode(declaration); var useFile = ts.getSourceFileOfNode(usage); if (declarationFile !== useFile) { - if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) { + if ((modulekind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) || + (!compilerOptions.outFile && !compilerOptions.out)) { return true; } var sourceFiles = host.getSourceFiles(); @@ -13235,12 +13627,16 @@ var ts; lastLocation = location; location = location.parent; } + if (result && nameNotFoundMessage && noUnusedIdentifiers) { + result.isReferenced = true; + } if (!result) { result = getSymbol(globals, name, meaning); } if (!result) { if (nameNotFoundMessage) { - if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg)) { + if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && + !checkAndReportErrorForExtendingInterface(errorLocation)) { error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); } } @@ -13296,6 +13692,29 @@ var ts; } return false; } + function checkAndReportErrorForExtendingInterface(errorLocation) { + var parentClassExpression = errorLocation; + while (parentClassExpression) { + var kind = parentClassExpression.kind; + if (kind === 69 || kind === 172) { + parentClassExpression = parentClassExpression.parent; + continue; + } + if (kind === 194) { + break; + } + return false; + } + if (!parentClassExpression) { + return false; + } + var expression = parentClassExpression.expression; + if (resolveEntityName(expression, 64, true)) { + error(errorLocation, ts.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, ts.getTextOfNode(expression)); + return true; + } + return false; + } function checkResolvedBlockScopedVariable(result, errorLocation) { ts.Debug.assert((result.flags & 2) !== 0); var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; }); @@ -13338,9 +13757,11 @@ var ts; 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"]); + var exportDefaultSymbol = ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration) ? + moduleSymbol : + 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)); } @@ -13391,6 +13812,9 @@ var ts; if (targetSymbol) { var name_10 = specifier.propertyName || specifier.name; if (name_10.text) { + if (ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration)) { + return moduleSymbol; + } var symbolFromVariable = void 0; if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports["export="]) { symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name_10.text); @@ -13413,7 +13837,7 @@ var ts; function getTargetOfImportSpecifier(node) { return getExternalModuleMember(node.parent.parent.parent, node); } - function getTargetOfGlobalModuleExportDeclaration(node) { + function getTargetOfNamespaceExportDeclaration(node) { return resolveExternalModuleSymbol(node.parent.symbol); } function getTargetOfExportSpecifier(node) { @@ -13439,7 +13863,7 @@ var ts; case 235: return getTargetOfExportAssignment(node); case 228: - return getTargetOfGlobalModuleExportDeclaration(node); + return getTargetOfNamespaceExportDeclaration(node); } } function resolveSymbol(symbol) { @@ -13522,9 +13946,12 @@ var ts; 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)) { + if (!namespace || ts.nodeIsMissing(right)) { return undefined; } + else if (namespace === unknownSymbol) { + return namespace; + } symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning); if (!symbol) { if (!ignoreErrors) { @@ -14485,16 +14912,13 @@ var ts; writePunctuation(writer, 27); } } - function buildDisplayForParametersAndDelimiters(thisType, parameters, writer, enclosingDeclaration, flags, symbolStack) { + function buildDisplayForParametersAndDelimiters(thisParameter, parameters, writer, enclosingDeclaration, flags, symbolStack) { writePunctuation(writer, 17); - if (thisType) { - writeKeyword(writer, 97); - writePunctuation(writer, 54); - writeSpace(writer); - buildTypeDisplay(thisType, writer, enclosingDeclaration, flags, symbolStack); + if (thisParameter) { + buildParameterDisplay(thisParameter, writer, enclosingDeclaration, flags, symbolStack); } for (var i = 0; i < parameters.length; i++) { - if (i > 0 || thisType) { + if (i > 0 || thisParameter) { writePunctuation(writer, 24); writeSpace(writer); } @@ -14542,7 +14966,7 @@ var ts; else { buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack); } - buildDisplayForParametersAndDelimiters(signature.thisType, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); + buildDisplayForParametersAndDelimiters(signature.thisParameter, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack); } return _displayBuilder || (_displayBuilder = { @@ -14739,6 +15163,9 @@ var ts; function isTypeAny(type) { return type && (type.flags & 1) !== 0; } + function isTypeNever(type) { + return type && (type.flags & 134217728) !== 0; + } function getTypeForBindingElementParent(node) { var symbol = getSymbolOfNode(node); return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, false); @@ -14870,12 +15297,13 @@ var ts; if (func.kind === 150 && !ts.hasDynamicName(func)) { var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149); if (getter) { - var signature = getSignatureFromDeclaration(getter); + var getterSignature = getSignatureFromDeclaration(getter); var thisParameter = getAccessorThisParameter(func); if (thisParameter && declaration === thisParameter) { - return signature.thisType; + ts.Debug.assert(!thisParameter.type); + return getTypeOfSymbol(getterSignature.thisParameter); } - return getReturnTypeOfSignature(signature); + return getReturnTypeOfSignature(getterSignature); } } var type = declaration.symbol.name === "this" @@ -14990,18 +15418,21 @@ var ts; 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); + var type = undefined; + if (declaration.kind === 187) { + type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); + } + else if (declaration.kind === 172) { + if (declaration.parent.kind === 187) { + type = checkExpressionCached(declaration.parent.right); + } + } + if (type === undefined) { + type = getWidenedTypeForVariableLikeDeclaration(declaration, true); + } if (!popTypeResolution()) { if (symbol.valueDeclaration.type) { type = unknownType; @@ -15030,14 +15461,12 @@ 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 getAnnotatedAccessorThisParameter(accessor) { + var parameter = getAccessorThisParameter(accessor); + return parameter && parameter.symbol; + } + function getThisTypeOfDeclaration(declaration) { + return getThisTypeOfSignature(getSignatureFromDeclaration(declaration)); } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); @@ -15089,9 +15518,14 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var type = createObjectType(65536, symbol); - links.type = strictNullChecks && symbol.flags & 536870912 ? - addTypeKind(type, 32) : type; + if (symbol.valueDeclaration.kind === 225 && ts.isShorthandAmbientModule(symbol.valueDeclaration)) { + links.type = anyType; + } + else { + var type = createObjectType(65536, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 ? + addTypeKind(type, 32) : type; + } } return links.type; } @@ -15612,12 +16046,12 @@ var ts; type.typeArguments : ts.concatenate(type.typeArguments, [type]); resolveObjectTypeMembers(type, source, typeParameters, typeArguments); } - function createSignature(declaration, typeParameters, thisType, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { + function createSignature(declaration, typeParameters, thisParameter, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { var sig = new Signature(checker); sig.declaration = declaration; sig.typeParameters = typeParameters; sig.parameters = parameters; - sig.thisType = thisType; + sig.thisParameter = thisParameter; sig.resolvedReturnType = resolvedReturnType; sig.typePredicate = typePredicate; sig.minArgumentCount = minArgumentCount; @@ -15626,7 +16060,7 @@ var ts; 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); + return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); } function getDefaultConstructSignatures(classType) { var baseConstructorType = getBaseConstructorTypeOfClass(classType); @@ -15710,8 +16144,9 @@ var ts; 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; })); + if (ts.forEach(unionSignatures, function (sig) { return sig.thisParameter; })) { + var thisType = getUnionType(ts.map(unionSignatures, function (sig) { return getTypeOfSymbol(sig.thisParameter) || anyType; })); + s.thisParameter = createTransientSymbol(signature.thisParameter, thisType); } s.resolvedReturnType = undefined; s.unionSignatures = unionSignatures; @@ -15896,6 +16331,7 @@ var ts; var types = containingType.types; var props; var commonFlags = (containingType.flags & 32768) ? 536870912 : 0; + var isReadonly = false; for (var _i = 0, types_2 = types; _i < types_2.length; _i++) { var current = types_2[_i]; var type = getApparentType(current); @@ -15909,6 +16345,9 @@ var ts; else if (!ts.contains(props, prop)) { props.push(prop); } + if (isReadonlySymbol(prop)) { + isReadonly = true; + } } else if (containingType.flags & 16384) { return undefined; @@ -15936,6 +16375,7 @@ var ts; commonFlags, name); result.containingType = containingType; result.declarations = declarations; + result.isReadonly = isReadonly; result.type = containingType.flags & 16384 ? getUnionType(propTypes) : getIntersectionType(propTypes); return result; } @@ -16042,7 +16482,7 @@ var ts; } return result; } - function isOptionalParameter(node) { + function isJSDocOptionalParameter(node) { if (node.flags & 134217728) { if (node.type && node.type.kind === 268) { return true; @@ -16057,7 +16497,9 @@ var ts; } } } - if (ts.hasQuestionToken(node)) { + } + function isOptionalParameter(node) { + if (ts.hasQuestionToken(node) || isJSDocOptionalParameter(node)) { return true; } if (node.initializer) { @@ -16092,7 +16534,7 @@ var ts; var parameters = []; var hasStringLiterals = false; var minArgumentCount = -1; - var thisType = undefined; + var thisParameter = undefined; var hasThisParameter = void 0; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); for (var i = isJSConstructSignature ? 1 : 0, n = declaration.parameters.length; i < n; i++) { @@ -16104,7 +16546,7 @@ var ts; } if (i === 0 && paramSymbol.name === "this") { hasThisParameter = true; - thisType = param.type ? getTypeFromTypeNode(param.type) : unknownType; + thisParameter = param.symbol; } else { parameters.push(paramSymbol); @@ -16112,7 +16554,7 @@ var ts; if (param.type && param.type.kind === 166) { hasStringLiterals = true; } - if (param.initializer || param.questionToken || param.dotDotDotToken) { + if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) { if (minArgumentCount < 0) { minArgumentCount = i - (hasThisParameter ? 1 : 0); } @@ -16123,10 +16565,12 @@ var ts; } if ((declaration.kind === 149 || declaration.kind === 150) && !ts.hasDynamicName(declaration) && - (!hasThisParameter || thisType === unknownType)) { + (!hasThisParameter || !thisParameter)) { var otherKind = declaration.kind === 149 ? 150 : 149; - var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); - thisType = getAnnotatedAccessorThisType(setter); + var other = ts.getDeclarationOfKind(declaration.symbol, otherKind); + if (other) { + thisParameter = getAnnotatedAccessorThisParameter(other); + } } if (minArgumentCount < 0) { minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); @@ -16144,7 +16588,7 @@ var ts; 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); + links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } @@ -16214,6 +16658,11 @@ var ts; } return anyType; } + function getThisTypeOfSignature(signature) { + if (signature.thisParameter) { + return getTypeOfSymbol(signature.thisParameter); + } + } function getReturnTypeOfSignature(signature) { if (!signature.resolvedReturnType) { if (!pushTypeResolution(signature, 3)) { @@ -16931,7 +17380,7 @@ var ts; 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); + var result = createSignature(signature.declaration, freshTypeParameters, signature.thisParameter && instantiateSymbol(signature.thisParameter, 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; @@ -17109,6 +17558,9 @@ var ts; function isTypeComparableTo(source, target) { return checkTypeComparableTo(source, target, undefined); } + function areTypesComparable(type1, type2) { + return isTypeComparableTo(type1, type2) || isTypeComparableTo(type2, type1); + } function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) { return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain); } @@ -17131,16 +17583,20 @@ var ts; 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); + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType && sourceThisType !== voidType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + var related = compareTypes(sourceThisType, targetThisType, false) + || compareTypes(targetThisType, sourceThisType, reportErrors); + if (!related) { + if (reportErrors) { + errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); + } + return 0; } - return 0; + result &= related; } - result &= related; } var sourceMax = getNumNonRestParameters(source); var targetMax = getNumNonRestParameters(target); @@ -17958,12 +18414,18 @@ var ts; 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; + if (!ignoreThisTypes) { + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + var related = compareTypes(sourceThisType, targetThisType); + if (!related) { + return 0; + } + result &= related; + } } - result &= related; } var targetLen = target.parameters.length; for (var i = 0; i < targetLen; i++) { @@ -18047,8 +18509,10 @@ var ts; function isTupleLikeType(type) { return !!getPropertyOfType(type, "0"); } - function isStringLiteralType(type) { - return type.flags & 256; + function isStringLiteralUnionType(type) { + return type.flags & 256 ? true : + type.flags & 16384 ? ts.forEach(type.types, isStringLiteralUnionType) : + false; } function isTupleType(type) { return !!(type.flags & 8192); @@ -18778,6 +19242,29 @@ var ts; } return node; } + function getTypeOfSwitchClause(clause) { + if (clause.kind === 249) { + var expr = clause.expression; + return expr.kind === 9 ? getStringLiteralTypeForText(expr.text) : checkExpression(expr); + } + return undefined; + } + function getSwitchClauseTypes(switchStatement) { + var links = getNodeLinks(switchStatement); + if (!links.switchTypes) { + var types = ts.map(switchStatement.caseBlock.clauses, getTypeOfSwitchClause); + links.switchTypes = ts.forEach(types, function (t) { return !t || t.flags & 256; }) ? types : emptyArray; + } + return links.switchTypes; + } + function eachTypeContainedIn(source, types) { + return source.flags & 16384 ? !ts.forEach(source.types, function (t) { return !ts.contains(types, t); }) : ts.contains(types, source); + } + function filterType(type, f) { + return type.flags & 16384 ? + getUnionType(ts.filter(type.types, f)) : + f(type) ? type : neverType; + } function getFlowTypeOfReference(reference, declaredType, assumeInitialized, includeOuterFunctions) { var key; if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 16908175)) { @@ -18793,7 +19280,7 @@ var ts; return result; function getTypeAtFlowNode(flow) { while (true) { - if (flow.flags & 256) { + if (flow.flags & 512) { for (var i = visitedFlowStart; i < visitedFlowCount; i++) { if (visitedFlowNodes[i] === flow) { return visitedFlowTypes[i]; @@ -18811,6 +19298,9 @@ var ts; else if (flow.flags & 96) { type = getTypeAtFlowCondition(flow); } + else if (flow.flags & 128) { + type = getTypeAtSwitchClause(flow); + } else if (flow.flags & 12) { if (flow.antecedents.length === 1) { flow = flow.antecedents[0]; @@ -18831,7 +19321,7 @@ var ts; else { type = declaredType; } - if (flow.flags & 256) { + if (flow.flags & 512) { visitedFlowNodes[visitedFlowCount] = flow; visitedFlowTypes[visitedFlowCount] = type; visitedFlowCount++; @@ -18869,6 +19359,10 @@ var ts; } return type; } + function getTypeAtSwitchClause(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + return narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd); + } function getTypeAtFlowBranchLabel(flow) { var antecedentTypes = []; for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { @@ -18929,11 +19423,26 @@ var ts; case 31: case 32: case 33: - if (isNullOrUndefinedLiteral(expr.right)) { - return narrowTypeByNullCheck(type, expr, assumeTrue); + var left = expr.left; + var operator = expr.operatorToken.kind; + var right = expr.right; + if (isNullOrUndefinedLiteral(right)) { + return narrowTypeByNullCheck(type, left, operator, right, assumeTrue); } - if (expr.left.kind === 182 && expr.right.kind === 9) { - return narrowTypeByTypeof(type, expr, assumeTrue); + if (isNullOrUndefinedLiteral(left)) { + return narrowTypeByNullCheck(type, right, operator, left, assumeTrue); + } + if (left.kind === 182 && right.kind === 9) { + return narrowTypeByTypeof(type, left, operator, right, assumeTrue); + } + if (right.kind === 182 && left.kind === 9) { + return narrowTypeByTypeof(type, right, operator, left, assumeTrue); + } + if (left.kind === 172) { + return narrowTypeByDiscriminant(type, left, operator, right, assumeTrue); + } + if (right.kind === 172) { + return narrowTypeByDiscriminant(type, right, operator, left, assumeTrue); } break; case 91: @@ -18943,46 +19452,91 @@ var ts; } return type; } - function narrowTypeByNullCheck(type, expr, assumeTrue) { - var operator = expr.operatorToken.kind; + function narrowTypeByNullCheck(type, target, operator, literal, assumeTrue) { if (operator === 31 || operator === 33) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(expr.left))) { + if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(target))) { return type; } var doubleEquals = operator === 30 || operator === 31; var facts = doubleEquals ? assumeTrue ? 65536 : 524288 : - expr.right.kind === 93 ? + literal.kind === 93 ? assumeTrue ? 32768 : 262144 : assumeTrue ? 16384 : 131072; return getTypeWithFacts(type, facts); } - function narrowTypeByTypeof(type, expr, assumeTrue) { - var left = getReferenceFromExpression(expr.left.expression); - var right = expr.right; - if (!isMatchingReference(reference, left)) { - if (containsMatchingReference(reference, left)) { + function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) { + var target = getReferenceFromExpression(typeOfExpr.expression); + if (!isMatchingReference(reference, target)) { + if (containsMatchingReference(reference, target)) { return declaredType; } return type; } - if (expr.operatorToken.kind === 31 || - expr.operatorToken.kind === 33) { + if (operator === 31 || operator === 33) { assumeTrue = !assumeTrue; } if (assumeTrue && !(type.flags & 16384)) { - var targetType = ts.getProperty(typeofTypesByName, right.text); + var targetType = ts.getProperty(typeofTypesByName, literal.text); if (targetType && isTypeSubtypeOf(targetType, type)) { return targetType; } } var facts = assumeTrue ? - ts.getProperty(typeofEQFacts, right.text) || 64 : - ts.getProperty(typeofNEFacts, right.text) || 8192; + ts.getProperty(typeofEQFacts, literal.text) || 64 : + ts.getProperty(typeofNEFacts, literal.text) || 8192; return getTypeWithFacts(type, facts); } + function narrowTypeByDiscriminant(type, propAccess, operator, value, assumeTrue) { + if (!isMatchingReference(reference, propAccess.expression)) { + return type; + } + var propName = propAccess.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var discriminantType = value.kind === 9 ? getStringLiteralTypeForText(value.text) : checkExpression(value); + if (!isStringLiteralUnionType(discriminantType)) { + return type; + } + if (operator === 31 || operator === 33) { + assumeTrue = !assumeTrue; + } + if (assumeTrue) { + return filterType(type, function (t) { return areTypesComparable(getTypeOfPropertyOfType(t, propName), discriminantType); }); + } + if (discriminantType.flags & 256) { + return filterType(type, function (t) { return getTypeOfPropertyOfType(t, propName) !== discriminantType; }); + } + return type; + } + function narrowTypeBySwitchOnDiscriminant(type, switchStatement, clauseStart, clauseEnd) { + if (!isMatchingReference(reference, switchStatement.expression.expression)) { + return type; + } + var propName = switchStatement.expression.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var switchTypes = getSwitchClauseTypes(switchStatement); + if (!switchTypes.length) { + return type; + } + var clauseTypes = switchTypes.slice(clauseStart, clauseEnd); + var hasDefaultClause = clauseStart === clauseEnd || ts.contains(clauseTypes, undefined); + var caseTypes = hasDefaultClause ? ts.filter(clauseTypes, function (t) { return !!t; }) : clauseTypes; + var discriminantType = caseTypes.length ? getUnionType(caseTypes) : undefined; + var caseType = discriminantType && filterType(type, function (t) { return isTypeComparableTo(discriminantType, getTypeOfPropertyOfType(t, propName)); }); + if (!hasDefaultClause) { + return caseType; + } + var defaultType = filterType(type, function (t) { return !eachTypeContainedIn(getTypeOfPropertyOfType(t, propName), switchTypes); }); + return caseType ? getUnionType([caseType, defaultType]) : defaultType; + } function narrowTypeByInstanceof(type, expr, assumeTrue) { var left = getReferenceFromExpression(expr.left); if (!isMatchingReference(reference, left)) { @@ -19345,9 +19899,9 @@ var ts; if (type) { return type; } - var signature = getSignatureFromDeclaration(container); - if (signature.thisType) { - return signature.thisType; + var thisType = getThisTypeOfDeclaration(container); + if (thisType) { + return thisType; } } if (ts.isClassLike(container.parent)) { @@ -19490,7 +20044,7 @@ var ts; if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { - return contextualSignature.thisType; + return getThisTypeOfSignature(contextualSignature); } } return undefined; @@ -19681,9 +20235,6 @@ var ts; 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)); } @@ -20075,7 +20626,7 @@ var ts; return name.indexOf("-") < 0; } function isJsxIntrinsicIdentifier(tagName) { - if (tagName.kind === 139) { + if (tagName.kind === 172 || tagName.kind === 97) { return false; } else { @@ -20211,6 +20762,25 @@ var ts; return getResolvedJsxType(node, type, elemClassType); })); } + if (elemType.flags & 2) { + return anyType; + } + else if (elemType.flags & 256) { + var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements); + if (intrinsicElementsType !== unknownType) { + var stringLiteralTypeName = elemType.text; + var intrinsicProp = getPropertyOfType(intrinsicElementsType, stringLiteralTypeName); + if (intrinsicProp) { + return getTypeOfSymbol(intrinsicProp); + } + var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0); + if (indexSignatureType) { + return indexSignatureType; + } + error(node, ts.Diagnostics.Property_0_does_not_exist_on_type_1, stringLiteralTypeName, "JSX." + JsxNames.IntrinsicElements); + } + return anyType; + } var elemInstanceType = getJsxElementInstanceType(node, elemType); if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { if (jsxElementType) { @@ -20450,11 +21020,21 @@ var ts; } var prop = getPropertyOfType(apparentType, right.text); if (!prop) { - if (right.text) { + if (right.text && !checkAndReportErrorForExtendingInterface(node)) { error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(right), typeToString(type.flags & 33554432 ? apparentType : type)); } return unknownType; } + if (noUnusedIdentifiers && + (prop.flags & 106500) && + prop.valueDeclaration && (prop.valueDeclaration.flags & 8)) { + if (prop.flags & 16777216) { + getSymbolLinks(prop).target.isReferenced = true; + } + else { + prop.isReferenced = true; + } + } getNodeLinks(node).resolvedSymbol = prop; if (prop.parent && prop.parent.flags & 32) { checkClassPropertyAccess(node, left, apparentType, prop); @@ -20767,10 +21347,11 @@ var ts; if (context.failedTypeParameterIndex !== undefined && !context.inferences[context.failedTypeParameterIndex].isFixed) { context.failedTypeParameterIndex = undefined; } - if (signature.thisType) { + var thisType = getThisTypeOfSignature(signature); + if (thisType) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; - inferTypes(context, thisArgumentType, signature.thisType); + inferTypes(context, thisArgumentType, thisType); } var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { @@ -20821,12 +21402,13 @@ var ts; return typeArgumentsAreAssignable; } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { - if (signature.thisType && signature.thisType !== voidType && node.kind !== 175) { + var thisType = getThisTypeOfSignature(signature); + if (thisType && 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)) { + if (!checkTypeRelatedTo(thisArgumentType, getThisTypeOfSignature(signature), relation, errorNode, headMessage_1)) { return false; } } @@ -21242,7 +21824,7 @@ var ts; if (getReturnTypeOfSignature(signature) !== voidType) { error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); } - if (signature.thisType === voidType) { + if (getThisTypeOfSignature(signature) === voidType) { error(node, ts.Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void); } return signature; @@ -21370,8 +21952,10 @@ var ts; declaration.kind !== 152 && declaration.kind !== 157 && !ts.isJSDocConstructSignature(declaration)) { - var funcSymbol = checkExpression(node.expression).symbol; - if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16)) { + var funcSymbol = node.expression.kind === 69 ? + getResolvedSymbol(node.expression) : + checkExpression(node.expression).symbol; + if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16 || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return getInferredClassType(funcSymbol); } else if (compilerOptions.noImplicitAny) { @@ -21390,6 +21974,7 @@ var ts; } function checkAssertion(node) { var exprType = getRegularTypeOfObjectLiteral(checkExpression(node.expression)); + checkSourceElement(node.type); var targetType = getTypeFromTypeNode(node.type); if (produceDiagnostics && targetType !== unknownType) { var widenedType = getWidenedType(exprType); @@ -21473,6 +22058,14 @@ var ts; } return emptyObjectType; } + function createPromiseReturnType(func, promisedType) { + var promiseType = createPromiseType(promisedType); + if (promiseType === emptyObjectType) { + error(func, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + return unknownType; + } + return promiseType; + } function getReturnTypeFromBody(func, contextualMapper) { var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); if (!func.body) { @@ -21502,18 +22095,10 @@ var ts; else { types = checkAndAggregateReturnExpressionTypes(func, contextualMapper); if (!types) { - return neverType; + return isAsync ? createPromiseReturnType(func, neverType) : 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; + return isAsync ? createPromiseReturnType(func, voidType) : voidType; } } type = contextualSignature ? getUnionType(types) : getCommonSupertype(types); @@ -21524,7 +22109,7 @@ var ts; } else { error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); - return getUnionType(types); + return isAsync ? createPromiseReturnType(func, getUnionType(types)) : getUnionType(types); } } if (funcIsGenerator) { @@ -21535,17 +22120,7 @@ var ts; 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; - } + return isAsync ? createPromiseReturnType(func, widenedType) : widenedType; } function checkAndAggregateYieldOperandTypes(func, contextualMapper) { var aggregatedTypes = []; @@ -21563,10 +22138,40 @@ var ts; }); return aggregatedTypes; } + function isExhaustiveSwitchStatement(node) { + var expr = node.expression; + if (!node.possiblyExhaustive || expr.kind !== 172) { + return false; + } + var type = checkExpression(expr.expression); + if (!(type.flags & 16384)) { + return false; + } + var propName = expr.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return false; + } + var switchTypes = getSwitchClauseTypes(node); + if (!switchTypes.length) { + return false; + } + return eachTypeContainedIn(propType, switchTypes); + } + function functionHasImplicitReturn(func) { + if (!(func.flags & 32768)) { + return false; + } + var lastStatement = ts.lastOrUndefined(func.body.statements); + if (lastStatement && lastStatement.kind === 213 && isExhaustiveSwitchStatement(lastStatement)) { + return false; + } + return true; + } function checkAndAggregateReturnExpressionTypes(func, contextualMapper) { var isAsync = ts.isAsyncFunctionLike(func); var aggregatedTypes = []; - var hasReturnWithNoExpression = !!(func.flags & 32768); + var hasReturnWithNoExpression = functionHasImplicitReturn(func); var hasReturnOfTypeNever = false; ts.forEachReturnStatement(func.body, function (returnStatement) { var expr = returnStatement.expression; @@ -21604,7 +22209,7 @@ var ts; if (returnType && maybeTypeOfKind(returnType, 1 | 16)) { return; } - if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 || !(func.flags & 32768)) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 || !functionHasImplicitReturn(func)) { return; } var hasExplicitReturn = func.flags & 65536; @@ -21699,6 +22304,7 @@ var ts; } } } + registerForUnusedIdentifiersCheck(node); } } function checkArithmeticOperandType(operand, type, diagnostic) { @@ -21709,7 +22315,8 @@ var ts; return true; } function isReadonlySymbol(symbol) { - return symbol.flags & 4 && (getDeclarationFlagsFromSymbol(symbol) & 64) !== 0 || + return symbol.isReadonly || + symbol.flags & 4 && (getDeclarationFlagsFromSymbol(symbol) & 64) !== 0 || symbol.flags & 3 && (getDeclarationFlagsFromSymbol(symbol) & 2048) !== 0 || symbol.flags & 98304 && !(symbol.flags & 65536) || (symbol.flags & 8) !== 0; @@ -21979,6 +22586,10 @@ var ts; if (exprOrAssignment.kind === 254) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { + if (strictNullChecks && + !(getCombinedTypeFlags(checkExpression(prop.objectAssignmentInitializer)) & 32)) { + sourceType = getTypeWithFacts(sourceType, 131072); + } checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); } target = exprOrAssignment.name; @@ -22115,7 +22726,7 @@ var ts; case 90: return checkInExpression(left, right, leftType, rightType); case 51: - return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 126) : rightType; + return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 112) : rightType; case 52: return getUnionType([getNonNullableType(leftType), rightType]); case 56: @@ -22215,7 +22826,7 @@ var ts; } function checkStringLiteralExpression(node) { var contextualType = getContextualType(node); - if (contextualType && contextualTypeIsStringLiteralType(contextualType)) { + if (contextualType && isStringLiteralUnionType(contextualType)) { return getStringLiteralTypeForText(node.text); } return stringType; @@ -22544,6 +23155,9 @@ var ts; checkAsyncFunctionReturnType(node); } } + if (!node.body) { + checkUnusedTypeParameters(node); + } } } function checkClassForDuplicateDeclarations(node) { @@ -22561,8 +23175,8 @@ var ts; } } else { - var static = ts.forEach(member.modifiers, function (m) { return m.kind === 113; }); - var names = static ? staticNames : instanceNames; + var isStatic = ts.forEach(member.modifiers, function (m) { return m.kind === 113; }); + var names = isStatic ? staticNames : instanceNames; var memberName = member.name && ts.getPropertyNameForPropertyNameNode(member.name); if (memberName) { switch (member.kind) { @@ -22671,6 +23285,7 @@ var ts; checkSignatureDeclaration(node); checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node); checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); var symbol = getSymbolOfNode(node); var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind); if (node === firstDeclaration) { @@ -22774,13 +23389,14 @@ var ts; 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); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getThisTypeOfDeclaration, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } if (node.parent.kind !== 171) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } else { checkNodeDeferred(node); @@ -22795,6 +23411,7 @@ var ts; } function checkAccessorDeferred(node) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } function checkMissingDeclaration(node) { checkDecorators(node); @@ -22819,12 +23436,14 @@ var ts; 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); + if (type !== unknownType) { + if (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); + } } } } @@ -22964,7 +23583,6 @@ var ts; } } } - 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++) { @@ -22989,7 +23607,7 @@ var ts; duplicateFunctionDeclaration = true; } } - else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { + else if (previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { reportImplementationExpectedError(previousDeclaration); } if (ts.nodeIsPresent(node.body)) { @@ -23016,7 +23634,7 @@ var ts; error(declaration.name, ts.Diagnostics.Duplicate_function_implementation); }); } - if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && + if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && !(lastSeenNonAmbientDeclaration.flags & 128) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } @@ -23107,7 +23725,7 @@ var ts; } function checkNonThenableType(type, location, message) { type = getWidenedType(type); - if (!isTypeAny(type) && isTypeAssignableTo(type, getGlobalThenableType())) { + if (!isTypeAny(type) && !isTypeNever(type) && isTypeAssignableTo(type, getGlobalThenableType())) { if (location) { if (!message) { message = ts.Diagnostics.Operand_for_await_does_not_have_a_valid_callable_then_member; @@ -23119,37 +23737,39 @@ var ts; return type; } function getPromisedType(promise) { - if (promise.flags & 1) { + if (isTypeAny(promise)) { return undefined; } - if ((promise.flags & 4096) && promise.target === tryGetGlobalPromiseType()) { - return promise.typeArguments[0]; + if (promise.flags & 4096) { + if (promise.target === tryGetGlobalPromiseType() + || promise.target === getGlobalPromiseLikeType()) { + 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)) { + if (!thenFunction || isTypeAny(thenFunction)) { return undefined; } - var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0) : emptyArray; + var thenSignatures = getSignaturesOfType(thenFunction, 0); if (thenSignatures.length === 0) { return undefined; } var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072); - if (onfulfilledParameterType.flags & 1) { + if (isTypeAny(onfulfilledParameterType)) { return undefined; } var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0); if (onfulfilledParameterSignatures.length === 0) { return undefined; } - var valueParameterType = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); - return valueParameterType; + return getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); } function getTypeOfFirstParameterOfSignature(signature) { - return getTypeAtPosition(signature, 0); + return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : neverType; } function getAwaitedType(type) { return checkAwaitedType(type, undefined, undefined); @@ -23365,12 +23985,149 @@ var ts; getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } } + registerForUnusedIdentifiersCheck(node); + } + function registerForUnusedIdentifiersCheck(node) { + if (deferredUnusedIdentifierNodes) { + deferredUnusedIdentifierNodes.push(node); + } + } + function checkUnusedIdentifiers() { + if (deferredUnusedIdentifierNodes) { + for (var _i = 0, deferredUnusedIdentifierNodes_1 = deferredUnusedIdentifierNodes; _i < deferredUnusedIdentifierNodes_1.length; _i++) { + var node = deferredUnusedIdentifierNodes_1[_i]; + switch (node.kind) { + case 256: + case 225: + checkUnusedModuleMembers(node); + break; + case 221: + case 192: + checkUnusedClassMembers(node); + checkUnusedTypeParameters(node); + break; + case 222: + checkUnusedTypeParameters(node); + break; + case 199: + case 227: + case 206: + case 207: + case 208: + checkUnusedLocalsAndParameters(node); + break; + case 148: + case 179: + case 220: + case 180: + case 147: + case 149: + case 150: + if (node.body) { + checkUnusedLocalsAndParameters(node); + } + checkUnusedTypeParameters(node); + break; + case 146: + case 151: + case 152: + case 153: + case 156: + case 157: + checkUnusedTypeParameters(node); + break; + } + ; + } + } + } + function checkUnusedLocalsAndParameters(node) { + if (node.parent.kind !== 222 && noUnusedIdentifiers && !ts.isInAmbientContext(node)) { + var _loop_1 = function(key) { + if (ts.hasProperty(node.locals, key)) { + var local_1 = node.locals[key]; + if (!local_1.isReferenced) { + if (local_1.valueDeclaration && local_1.valueDeclaration.kind === 142) { + var parameter = local_1.valueDeclaration; + if (compilerOptions.noUnusedParameters && + !ts.isParameterPropertyDeclaration(parameter) && + !parameterNameStartsWithUnderscore(parameter)) { + error(local_1.valueDeclaration.name, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); + } + } + else if (compilerOptions.noUnusedLocals) { + ts.forEach(local_1.declarations, function (d) { return error(d.name || d, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); }); + } + } + } + }; + for (var key in node.locals) { + _loop_1(key); + } + } + } + function parameterNameStartsWithUnderscore(parameter) { + return parameter.name && parameter.name.kind === 69 && parameter.name.text.charCodeAt(0) === 95; + } + function checkUnusedClassMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.members) { + for (var _i = 0, _a = node.members; _i < _a.length; _i++) { + var member = _a[_i]; + if (member.kind === 147 || member.kind === 145) { + if (!member.symbol.isReferenced && member.flags & 8) { + error(member.name, ts.Diagnostics._0_is_declared_but_never_used, member.symbol.name); + } + } + else if (member.kind === 148) { + for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) { + var parameter = _c[_b]; + if (!parameter.symbol.isReferenced && parameter.flags & 8) { + error(parameter.name, ts.Diagnostics._0_is_declared_but_never_used, parameter.symbol.name); + } + } + } + } + } + } + } + function checkUnusedTypeParameters(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.typeParameters) { + for (var _i = 0, _a = node.typeParameters; _i < _a.length; _i++) { + var typeParameter = _a[_i]; + if (!typeParameter.symbol.isReferenced) { + error(typeParameter.name, ts.Diagnostics._0_is_declared_but_never_used, typeParameter.symbol.name); + } + } + } + } + } + function checkUnusedModuleMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + for (var key in node.locals) { + if (ts.hasProperty(node.locals, key)) { + var local = node.locals[key]; + if (!local.isReferenced && !local.exportSymbol) { + for (var _i = 0, _a = local.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + if (!ts.isAmbientModule(declaration)) { + error(declaration.name, ts.Diagnostics._0_is_declared_but_never_used, local.name); + } + } + } + } + } + } } function checkBlock(node) { if (node.kind === 199) { checkGrammarStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkCollisionWithArgumentsInGeneratedCode(node) { if (!ts.hasDeclaredRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { @@ -23695,6 +24452,9 @@ var ts; if (node.incrementor) checkExpression(node.incrementor); checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForOfStatement(node) { checkGrammarForInOrForOfStatement(node); @@ -23716,6 +24476,9 @@ var ts; } } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInStatement(node) { checkGrammarForInOrForOfStatement(node); @@ -23744,6 +24507,9 @@ var ts; error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter); } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInOrForOfVariableDeclaration(iterationStatement) { var variableDeclarationList = iterationStatement.initializer; @@ -23903,7 +24669,7 @@ var ts; } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; - return maybeTypeOfKind(unwrappedReturnType, 16 | 1); + return unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 16 | 1); } function checkReturnStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { @@ -23985,6 +24751,9 @@ var ts; } ts.forEach(clause.statements, checkSourceElement); }); + if (node.caseBlock.locals) { + registerForUnusedIdentifiersCheck(node.caseBlock); + } } function checkLabeledStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { @@ -24155,6 +24924,7 @@ var ts; } function checkClassExpressionDeferred(node) { ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassDeclaration(node) { if (!node.name && !(node.flags & 512)) { @@ -24162,6 +24932,7 @@ var ts; } checkClassLikeDeclaration(node); ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassLikeDeclaration(node) { checkGrammarClassDeclarationHeritageClauses(node); @@ -24402,6 +25173,7 @@ var ts; ts.forEach(node.members, checkSourceElement); if (produceDiagnostics) { checkTypeForDuplicateIndexSignatures(node); + checkUnusedTypeParameters(node); } } function checkTypeAliasDeclaration(node) { @@ -24691,7 +25463,7 @@ var ts; if (isAmbientExternalModule) { if (ts.isExternalModuleAugmentation(node)) { var checkBody = isGlobalAugmentation || (getSymbolOfNode(node).flags & 33554432); - if (checkBody) { + if (checkBody && node.body) { for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) { var statement = _a[_i]; checkModuleAugmentationElement(statement, isGlobalAugmentation); @@ -24716,7 +25488,15 @@ var ts; } } } - checkSourceElement(node.body); + if (compilerOptions.noImplicitAny && !node.body) { + reportImplicitAnyError(node, anyType); + } + if (node.body) { + checkSourceElement(node.body); + if (!ts.isGlobalScopeAugmentation(node)) { + registerForUnusedIdentifiersCheck(node); + } + } } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { @@ -25152,9 +25932,17 @@ var ts; checkGrammarSourceFile(node); potentialThisCollisions.length = 0; deferredNodes = []; + deferredUnusedIdentifierNodes = produceDiagnostics && noUnusedIdentifiers ? [] : undefined; ts.forEach(node.statements, checkSourceElement); checkDeferredNodes(); + if (ts.isExternalModule(node)) { + registerForUnusedIdentifiersCheck(node); + } + if (!node.isDeclarationFile) { + checkUnusedIdentifiers(); + } deferredNodes = undefined; + deferredUnusedIdentifierNodes = undefined; if (ts.isExternalOrCommonJsModule(node)) { checkExternalModuleExports(node); } @@ -25441,6 +26229,13 @@ var ts; case 139: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 97: + var container = ts.getThisContainer(node, false); + if (ts.isFunctionLike(container)) { + var sig = getSignatureFromDeclaration(container); + if (sig.thisParameter) { + return sig.thisParameter; + } + } case 95: var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; @@ -25629,7 +26424,9 @@ var ts; var parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { if (parentSymbol.flags & 512 && parentSymbol.valueDeclaration.kind === 256) { - return parentSymbol.valueDeclaration; + if (parentSymbol.valueDeclaration === ts.getSourceFileOfNode(node)) { + return parentSymbol.valueDeclaration; + } } for (var n = node.parent; n; n = n.parent) { if ((n.kind === 225 || n.kind === 224) && getSymbolOfNode(n) === parentSymbol) { @@ -26276,7 +27073,10 @@ var ts; 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); + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern); + } + else if (node.kind === 142 && (flags & 92) && node.dotDotDotToken) { + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter); } if (flags & 256) { return checkGrammarAsyncModifier(node, lastAsync); @@ -26519,7 +27319,7 @@ var ts; var GetAccessor = 2; var SetAccessor = 4; var GetOrSetAccessor = GetAccessor | SetAccessor; - var _loop_1 = function(prop) { + var _loop_2 = function(prop) { var name_21 = prop.name; if (prop.kind === 193 || name_21.kind === 140) { @@ -26580,8 +27380,8 @@ var ts; }; 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; + var state_3 = _loop_2(prop); + if (typeof state_3 === "object") return state_3.value; } } function checkGrammarJsxElement(node) { @@ -27930,21 +28730,26 @@ var ts; writeTextOfNode(currentText, node.name); } } - while (node.body.kind !== 226) { + while (node.body && 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; + if (node.body) { + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + else { + write(";"); + } } function writeTypeAliasDeclaration(node) { var prevEnclosingDeclaration = enclosingDeclaration; @@ -29206,6 +30011,8 @@ var ts; return generateNameForExportDefault(); case 192: return generateNameForClassExpression(); + default: + ts.Debug.fail(); } } function getGeneratedNameForNode(node) { @@ -29903,6 +30710,20 @@ var ts; } return false; } + function getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node) { + if (languageVersion >= 2) { + var parent_14 = node.parent; + if (parent_14.kind === 172 && parent_14.expression === node) { + parent_14 = parent_14.parent; + while (parent_14 && parent_14.kind !== 145) { + parent_14 = parent_14.parent; + } + return parent_14 && parent_14.kind === 145 && (parent_14.flags & 32) !== 0 && + parent_14.parent.kind === 192 ? parent_14.parent : undefined; + } + } + return undefined; + } function emitIdentifier(node) { if (convertedLoopState) { if (node.text == "arguments" && resolver.isArgumentsLocalBinding(node)) { @@ -29915,6 +30736,14 @@ var ts; write(node.text); } else if (isExpressionIdentifier(node)) { + var classExpression = getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node); + if (classExpression) { + var declaration = resolver.getReferencedValueDeclaration(node); + if (declaration === classExpression) { + write(getGeneratedNameForNode(declaration.name)); + return; + } + } emitExpressionIdentifier(node); } else if (isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node)) { @@ -30245,7 +31074,6 @@ var ts; function createPropertyAccessExpression(expression, name) { var result = ts.createSynthesizedNode(172); result.expression = parenthesizeForAccess(expression); - result.dotToken = ts.createSynthesizedNode(21); result.name = name; return result; } @@ -30291,9 +31119,9 @@ var ts; emitTrailingCommentsOfPosition(node.initializer.pos); emit(node.initializer); } - function isNamespaceExportReference(node) { + function isExportReference(node) { var container = resolver.getReferencedExportContainer(node); - return container && container.kind !== 256; + return !!container; } function isImportedReference(node) { var declaration = resolver.getReferencedImportDeclaration(node); @@ -30301,9 +31129,9 @@ var ts; } function emitShorthandPropertyAssignment(node) { writeTextOfNode(currentText, node.name); - if (languageVersion < 2 || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isNamespaceExportReference(node.name)) { + if (languageVersion < 2 || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isExportReference(node.name)) { write(": "); - emit(node.name); + emitExpressionIdentifier(node.name); } if (languageVersion >= 2 && node.objectAssignmentInitializer) { write(" = "); @@ -30358,7 +31186,10 @@ var ts; return; } emit(node.expression); - var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, node.dotToken); + var dotRangeStart = ts.nodeIsSynthesized(node.expression) ? -1 : node.expression.end; + var dotRangeEnd = ts.nodeIsSynthesized(node.expression) ? -1 : ts.skipTrivia(currentText, node.expression.end) + 1; + var dotToken = { pos: dotRangeStart, end: dotRangeEnd }; + var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, dotToken); var shouldEmitSpace = false; if (!indentedBeforeDot) { if (node.expression.kind === 8) { @@ -30376,7 +31207,7 @@ var ts; else { write("."); } - var indentedAfterDot = indentIfOnDifferentLines(node, node.dotToken, node.name); + var indentedAfterDot = indentIfOnDifferentLines(node, dotToken, node.name); emit(node.name); decreaseIndentIf(indentedBeforeDot, indentedAfterDot); } @@ -30749,7 +31580,6 @@ var ts; synthesizedLHS = ts.createSynthesizedNode(172, false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false); synthesizedLHS.expression = identifier; - synthesizedLHS.dotToken = leftHandSideExpression.dotToken; synthesizedLHS.name = leftHandSideExpression.name; write(", "); } @@ -32066,8 +32896,8 @@ var ts; emit(initializer); } write(";"); - tempIndex_1++; } + tempIndex_1++; } else if (initializer) { writeLine(); @@ -32453,7 +33283,7 @@ var ts; emitStart(property); emitStart(property.name); if (receiver) { - emit(receiver); + write(receiver); } else { if (property.flags & 32) { @@ -32736,12 +33566,15 @@ var ts; } var staticProperties = getInitializedProperties(node, true); var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192; - var tempVariable; + var generatedName; if (isClassExpressionWithStaticProperties) { - tempVariable = createAndRecordTempVariable(0); + generatedName = getGeneratedNameForNode(node.name); + var synthesizedNode = ts.createSynthesizedNode(69); + synthesizedNode.text = generatedName; + recordTempDeclaration(synthesizedNode); write("("); increaseIndent(); - emit(tempVariable); + emit(synthesizedNode); write(" = "); } write("class"); @@ -32781,11 +33614,11 @@ var ts; var property = staticProperties_1[_a]; write(","); writeLine(); - emitPropertyDeclaration(node, property, tempVariable, true); + emitPropertyDeclaration(node, property, generatedName, true); } write(","); writeLine(); - emit(tempVariable); + write(generatedName); decreaseIndent(); write(")"); } @@ -32821,7 +33654,11 @@ var ts; } } function emitClassLikeDeclarationBelowES6(node) { + var isES6ExportedClass = isES6ExportedDeclaration(node); if (node.kind === 221) { + if (isES6ExportedClass && !(node.flags & 512)) { + write("export "); + } if (!shouldHoistDeclarationInSystemJsModule(node)) { write("var "); } @@ -32885,9 +33722,15 @@ var ts; write(";"); } emitEnd(node); - if (node.kind === 221) { + if (node.kind === 221 && !isES6ExportedClass) { emitExportMemberAssignment(node); } + else if (isES6ExportedClass && (node.flags & 512)) { + writeLine(); + write("export default "); + emitDeclarationName(node); + write(";"); + } } function emitClassMemberPrefix(node, member) { emitDeclarationName(node); @@ -33183,10 +34026,10 @@ var ts; } if (parameters[i].dotDotDotToken) { var parameterType = parameters[i].type; - if (parameterType.kind === 160) { + if (parameterType && parameterType.kind === 160) { parameterType = parameterType.elementType; } - else if (parameterType.kind === 155 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + else if (parameterType && parameterType.kind === 155 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { parameterType = parameterType.typeArguments[0]; } else { @@ -33203,9 +34046,15 @@ var ts; } } function emitSerializedReturnTypeOfNode(node) { - if (node && ts.isFunctionLike(node) && node.type) { - emitSerializedTypeNode(node.type); - return; + if (node && ts.isFunctionLike(node)) { + if (node.type) { + emitSerializedTypeNode(node.type); + return; + } + else if (ts.isAsyncFunctionLike(node)) { + write("Promise"); + return; + } } write("void 0"); } @@ -33338,7 +34187,7 @@ var ts; } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 225) { + if (moduleDeclaration.body && moduleDeclaration.body.kind === 225) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -33379,6 +34228,7 @@ var ts; write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); + ts.Debug.assert(node.body !== undefined); if (node.body.kind === 226) { var saveConvertedLoopState = convertedLoopState; var saveTempFlags = tempFlags; @@ -34379,7 +35229,7 @@ var ts; } firstNonWhitespace = -1; } - else if (!ts.isWhiteSpace(c)) { + else if (!ts.isWhiteSpaceSingleLine(c)) { lastNonWhitespace = i; if (firstNonWhitespace === -1) { firstNonWhitespace = i; @@ -34946,13 +35796,9 @@ var ts; ts.emitTime = 0; ts.ioReadTime = 0; ts.ioWriteTime = 0; + ts.version = "2.0.0"; var emptyArray = []; - var defaultLibrarySearchPaths = [ - "types/", - "node_modules/", - "node_modules/@types/", - ]; - ts.version = "1.9.0"; + var defaultTypeRoots = ["node_modules/@types"]; function findConfigFile(searchPath, fileExists) { while (true) { var fileName = ts.combinePaths(searchPath, "tsconfig.json"); @@ -35077,9 +35923,32 @@ var ts; } return typesFilePath; } + if (state.compilerOptions.allowJs && jsonContent.main && typeof jsonContent.main === "string") { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0, jsonContent.main); + } + var mainFilePath = ts.normalizePath(ts.combinePaths(baseDirectory, jsonContent.main)); + return mainFilePath; + } return undefined; } var typeReferenceExtensions = [".d.ts"]; + function getEffectiveTypeRoots(options, host) { + if (options.typeRoots) { + return options.typeRoots; + } + var currentDirectory; + if (options.configFilePath) { + currentDirectory = ts.getDirectoryPath(options.configFilePath); + } + else if (host.getCurrentDirectory) { + currentDirectory = host.getCurrentDirectory(); + } + if (!currentDirectory) { + return undefined; + } + return ts.map(defaultTypeRoots, function (d) { return ts.combinePaths(currentDirectory, d); }); + } function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host) { var traceEnabled = isTraceEnabled(options, host); var moduleResolutionState = { @@ -35088,35 +35957,34 @@ var ts; skipTsx: true, traceEnabled: traceEnabled }; - var rootDir = options.typesRoot || (options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : (host.getCurrentDirectory && host.getCurrentDirectory())); + var typeRoots = getEffectiveTypeRoots(options, host); if (traceEnabled) { if (containingFile === undefined) { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set, typeReferenceDirectiveName); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, typeRoots); } } else { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set, typeReferenceDirectiveName, containingFile); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, typeRoots); } } } 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); + if (typeRoots && typeRoots.length) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", ")); + } + var primarySearchPaths = typeRoots; + for (var _i = 0, primarySearchPaths_1 = primarySearchPaths; _i < primarySearchPaths_1.length; _i++) { + var typeRoot = primarySearchPaths_1[_i]; + var candidate = ts.combinePaths(typeRoot, typeReferenceDirectiveName); var candidateDirectory = ts.getDirectoryPath(candidate); var resolvedFile_1 = loadNodeModuleFromDirectory(typeReferenceExtensions, candidate, failedLookupLocations, !directoryProbablyExists(candidateDirectory, host), moduleResolutionState); if (resolvedFile_1) { @@ -35140,9 +36008,6 @@ var ts; 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); @@ -35486,11 +36351,12 @@ var ts; 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); + var supportedExtensions = ts.getSupportedExtensions(state.compilerOptions); + var result = loadModuleFromFile(candidate, supportedExtensions, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } - result = loadNodeModuleFromDirectory(ts.supportedTypeScriptExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); + result = loadNodeModuleFromDirectory(supportedExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } @@ -35500,10 +36366,15 @@ var ts; 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 packageResult = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state); + if (packageResult && ts.hasTypeScriptFileExtension(packageResult)) { + return packageResult; + } + else { + var typesResult = loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state); + if (typesResult || packageResult) { + return typesResult || packageResult; + } } } var parentPath = ts.getDirectoryPath(directory); @@ -35635,25 +36506,12 @@ var ts; } } } - function getDefaultTypeDirectiveNames(rootPath) { - var localTypes = ts.combinePaths(rootPath, "types"); - var npmTypes = ts.combinePaths(rootPath, "node_modules/@types"); - var result = []; - if (ts.sys.directoryExists(localTypes)) { - result = result.concat(ts.sys.getDirectories(localTypes)); - } - if (ts.sys.directoryExists(npmTypes)) { - result = result.concat(ts.sys.getDirectories(npmTypes)); - } - return result; - } 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 { - getDefaultTypeDirectiveNames: getDefaultTypeDirectiveNames, getSourceFile: getSourceFile, getDefaultLibLocation: getDefaultLibLocation, getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); }, @@ -35666,6 +36524,7 @@ var ts; 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); }, + getDirectories: function (path) { return ts.sys.getDirectories(path); }, realpath: realpath }; } @@ -35721,19 +36580,28 @@ var ts; } return resolutions; } - function getDefaultTypeDirectiveNames(options, rootFiles, host) { + function getInferredTypesRoot(options, rootFiles, host) { + return computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); + } + function getAutomaticTypeDirectiveNames(options, rootFiles, host) { if (options.types) { return options.types; } - if (host && host.getDefaultTypeDirectiveNames) { - var commonRoot = computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); - if (commonRoot) { - return host.getDefaultTypeDirectiveNames(commonRoot); + var result = []; + if (host.directoryExists && host.getDirectories) { + var typeRoots = getEffectiveTypeRoots(options, host); + if (typeRoots) { + for (var _i = 0, typeRoots_1 = typeRoots; _i < typeRoots_1.length; _i++) { + var root = typeRoots_1[_i]; + if (host.directoryExists(root)) { + result = result.concat(host.getDirectories(root)); + } + } } } - return undefined; + return result; } - ts.getDefaultTypeDirectiveNames = getDefaultTypeDirectiveNames; + ts.getAutomaticTypeDirectiveNames = getAutomaticTypeDirectiveNames; function createProgram(rootNames, options, host, oldProgram) { var program; var files = []; @@ -35743,6 +36611,10 @@ var ts; var classifiableNames; var resolvedTypeReferenceDirectives = {}; var fileProcessingDiagnostics = ts.createDiagnosticCollection(); + var maxNodeModulesJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 2; + var currentNodeModulesJsDepth = 0; + var modulesWithElidedImports = {}; + var sourceFilesFoundSearchingNodeModules = {}; var start = new Date().getTime(); host = host || createCompilerHost(options); var skipDefaultLib = options.noLib; @@ -35770,9 +36642,11 @@ var ts; var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? ts.createFileMap(function (fileName) { return fileName.toLowerCase(); }) : undefined; if (!tryReuseStructureFromOldProgram()) { ts.forEach(rootNames, function (name) { return processRootFile(name, false); }); - var typeReferences = getDefaultTypeDirectiveNames(options, rootNames, host); + var typeReferences = getAutomaticTypeDirectiveNames(options, rootNames, host); if (typeReferences) { - var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, undefined); + var inferredRoot = getInferredTypesRoot(options, rootNames, host); + var containingFilename = ts.combinePaths(inferredRoot, "__inferred type names__.ts"); + var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename); for (var i = 0; i < typeReferences.length; i++) { processTypeReferenceDirective(typeReferences[i], resolutions[i]); } @@ -35835,8 +36709,8 @@ var ts; if (!classifiableNames) { getTypeChecker(); classifiableNames = {}; - for (var _i = 0, files_3 = files; _i < files_3.length; _i++) { - var sourceFile = files_3[_i]; + for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { + var sourceFile = files_2[_i]; ts.copyMap(sourceFile.classifiableNames, classifiableNames); } } @@ -35855,10 +36729,10 @@ var ts; (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) || + (oldOptions.maxNodeModuleJsDepth !== options.maxNodeModuleJsDepth) || + !ts.arrayIsEqualTo(oldOptions.typeRoots, oldOptions.typeRoots) || !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { return false; @@ -35950,6 +36824,7 @@ var ts; getSourceFile: program.getSourceFile, getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, + isSourceFileFromExternalLibrary: function (file) { return !!ts.lookUp(sourceFilesFoundSearchingNodeModules, file.path); }, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked }; @@ -36150,8 +37025,20 @@ var ts; } break; case 145: - diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); - return true; + var propertyDeclaration = node; + if (propertyDeclaration.modifiers) { + for (var _i = 0, _a = propertyDeclaration.modifiers; _i < _a.length; _i++) { + var modifier = _a[_i]; + if (modifier.kind !== 113) { + diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); + return true; + } + } + } + if (checkTypeAnnotation(node.type)) { + return true; + } + break; case 224: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; @@ -36283,9 +37170,12 @@ var ts; (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); + var body = node.body; + if (body) { + for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + collectModuleReferences(statement, true); + } } } } @@ -36354,6 +37244,12 @@ var ts; 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 && ts.lookUp(modulesWithElidedImports, file_1.path)) { + if (currentNodeModulesJsDepth < maxNodeModulesJsDepth) { + modulesWithElidedImports[file_1.path] = false; + processImportedModules(file_1, ts.getDirectoryPath(fileName)); + } + } return file_1; } var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { @@ -36432,7 +37328,7 @@ var ts; } } else { - fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_name_0, typeReferenceDirective)); + fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_type_definition_file_for_0, typeReferenceDirective)); } if (saveResolution) { resolvedTypeReferenceDirectives[typeReferenceDirective] = resolvedTypeReferenceDirective; @@ -36462,11 +37358,25 @@ var ts; 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) { - findSourceFile(resolution.resolvedFileName, ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName), false, false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + var resolvedPath = resolution ? ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName) : undefined; + var isFromNodeModulesSearch = resolution && resolution.isExternalLibraryImport; + var isJsFileFromNodeModules = isFromNodeModulesSearch && ts.hasJavaScriptFileExtension(resolution.resolvedFileName); + if (isFromNodeModulesSearch) { + sourceFilesFoundSearchingNodeModules[resolvedPath] = true; + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth++; + } + var elideImport = isJsFileFromNodeModules && currentNodeModulesJsDepth > maxNodeModulesJsDepth; + var shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport; + if (elideImport) { + modulesWithElidedImports[file.path] = true; + } + else if (shouldAddFile) { + findSourceFile(resolution.resolvedFileName, resolvedPath, false, false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth--; } } } @@ -36597,9 +37507,6 @@ var ts; var span = ts.getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator); programDiagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); } - 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) { if (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")); @@ -36785,6 +37692,16 @@ var ts; type: "boolean", description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type }, + { + name: "noUnusedLocals", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Locals + }, + { + name: "noUnusedParameters", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Parameters + }, { name: "noLib", type: "boolean" @@ -36975,19 +37892,14 @@ var ts; } }, { - name: "typesSearchPaths", + name: "typeRoots", type: "list", - isTSConfigOnly: true, element: { - name: "typesSearchPaths", + name: "typeRoots", type: "string", isFilePath: true } }, - { - name: "typesRoot", - type: "string" - }, { name: "types", type: "list", @@ -37017,6 +37929,11 @@ var ts; type: "boolean", description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output }, + { + name: "maxNodeModuleJsDepth", + type: "number", + description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files + }, { name: "listEmittedFiles", type: "boolean" @@ -37052,6 +37969,10 @@ var ts; }, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon }, + { + name: "disableSizeLimit", + type: "boolean" + }, { name: "strictNullChecks", type: "boolean", @@ -37117,7 +38038,15 @@ var ts; } ts.parseCustomTypeOption = parseCustomTypeOption; function parseListTypeOption(opt, value, errors) { - var values = trimString((value || "")).split(","); + if (value === void 0) { value = ""; } + value = trimString(value); + if (ts.startsWith(value, "-")) { + return undefined; + } + if (value === "") { + return []; + } + var values = value.split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); @@ -37174,8 +38103,11 @@ var ts; i++; break; case "list": - options[opt.name] = parseListTypeOption(opt, args[i], errors); - i++; + var result = parseListTypeOption(opt, args[i], errors); + options[opt.name] = result || []; + if (result) { + i++; + } break; default: options[opt.name] = parseCustomTypeOption(opt, args[i], errors); @@ -37267,7 +38199,7 @@ var ts; } return output; } - var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; + var ignoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName) { if (existingOptions === void 0) { existingOptions = {}; } var errors = []; @@ -37275,66 +38207,57 @@ var ts; var options = ts.extend(existingOptions, compilerOptions); var typingOptions = convertTypingOptionsFromJsonWorker(json["typingOptions"], basePath, errors, configFileName); options.configFilePath = configFileName; - var fileNames = getFileNames(errors); + var _a = getFileNames(errors), fileNames = _a.fileNames, wildcardDirectories = _a.wildcardDirectories; return { options: options, fileNames: fileNames, typingOptions: typingOptions, raw: json, - errors: errors + errors: errors, + wildcardDirectories: wildcardDirectories }; function getFileNames(errors) { - var fileNames = []; + var fileNames; if (ts.hasProperty(json, "files")) { if (ts.isArray(json["files"])) { - fileNames = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); }); + fileNames = json["files"]; } 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"]; + var includeSpecs; + if (ts.hasProperty(json, "include")) { + if (ts.isArray(json["include"])) { + includeSpecs = json["include"]; } else { - exclude = ["node_modules", "bower_components", "jspm_packages"]; - } - var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } - exclude = ts.map(exclude, function (e) { return ts.getNormalizedAbsolutePath(e, basePath); }); - 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); - } + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array")); } } - if (ts.hasProperty(json, "excludes") && !ts.hasProperty(json, "exclude")) { + var excludeSpecs; + if (ts.hasProperty(json, "exclude")) { + if (ts.isArray(json["exclude"])) { + excludeSpecs = json["exclude"]; + } + else { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array")); + } + } + else if (ts.hasProperty(json, "excludes")) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); } - return fileNames; + else { + excludeSpecs = ["node_modules", "bower_components", "jspm_packages"]; + } + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + excludeSpecs.push(outDir); + } + if (fileNames === undefined && includeSpecs === undefined) { + includeSpecs = ["**/*"]; + } + return matchFileNames(fileNames, includeSpecs, excludeSpecs, basePath, options, host, errors); } } ts.parseJsonConfigFileContent = parseJsonConfigFileContent; @@ -37416,6 +38339,143 @@ var ts; function trimString(s) { return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, ""); } + var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; + var invalidMultipleRecursionPatterns = /(^|\/)\*\*\/(.*\/)?\*\*($|\/)/; + var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/; + var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//; + var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; + function matchFileNames(fileNames, include, exclude, basePath, options, host, errors) { + basePath = ts.normalizePath(basePath); + var keyMapper = host.useCaseSensitiveFileNames ? caseSensitiveKeyMapper : caseInsensitiveKeyMapper; + var literalFileMap = {}; + var wildcardFileMap = {}; + if (include) { + include = validateSpecs(include, errors, false); + } + if (exclude) { + exclude = validateSpecs(exclude, errors, true); + } + var wildcardDirectories = getWildcardDirectories(include, exclude, basePath, host.useCaseSensitiveFileNames); + var supportedExtensions = ts.getSupportedExtensions(options); + if (fileNames) { + for (var _i = 0, fileNames_1 = fileNames; _i < fileNames_1.length; _i++) { + var fileName = fileNames_1[_i]; + var file = ts.combinePaths(basePath, fileName); + literalFileMap[keyMapper(file)] = file; + } + } + if (include && include.length > 0) { + for (var _a = 0, _b = host.readDirectory(basePath, supportedExtensions, exclude, include); _a < _b.length; _a++) { + var file = _b[_a]; + if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) { + continue; + } + if (ignoreFileNamePattern.test(file)) { + continue; + } + removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper); + var key = keyMapper(file); + if (!ts.hasProperty(literalFileMap, key) && !ts.hasProperty(wildcardFileMap, key)) { + wildcardFileMap[key] = file; + } + } + } + var literalFiles = ts.reduceProperties(literalFileMap, addFileToOutput, []); + var wildcardFiles = ts.reduceProperties(wildcardFileMap, addFileToOutput, []); + wildcardFiles.sort(host.useCaseSensitiveFileNames ? ts.compareStrings : ts.compareStringsCaseInsensitive); + return { + fileNames: literalFiles.concat(wildcardFiles), + wildcardDirectories: wildcardDirectories + }; + } + function validateSpecs(specs, errors, allowTrailingRecursion) { + var validSpecs = []; + for (var _i = 0, specs_2 = specs; _i < specs_2.length; _i++) { + var spec = specs_2[_i]; + if (!allowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidMultipleRecursionPatterns.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else { + validSpecs.push(spec); + } + } + return validSpecs; + } + function getWildcardDirectories(include, exclude, path, useCaseSensitiveFileNames) { + var rawExcludeRegex = ts.getRegularExpressionForWildcard(exclude, path, "exclude"); + var excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames ? "" : "i"); + var wildcardDirectories = {}; + if (include !== undefined) { + var recursiveKeys = []; + for (var _i = 0, include_1 = include; _i < include_1.length; _i++) { + var file = include_1[_i]; + var name_35 = ts.normalizePath(ts.combinePaths(path, file)); + if (excludeRegex && excludeRegex.test(name_35)) { + continue; + } + var match = wildcardDirectoryPattern.exec(name_35); + if (match) { + var key = useCaseSensitiveFileNames ? match[0] : match[0].toLowerCase(); + var flags = watchRecursivePattern.test(name_35) ? 1 : 0; + var existingFlags = ts.getProperty(wildcardDirectories, key); + if (existingFlags === undefined || existingFlags < flags) { + wildcardDirectories[key] = flags; + if (flags === 1) { + recursiveKeys.push(key); + } + } + } + } + for (var key in wildcardDirectories) { + if (ts.hasProperty(wildcardDirectories, key)) { + for (var _a = 0, recursiveKeys_1 = recursiveKeys; _a < recursiveKeys_1.length; _a++) { + var recursiveKey = recursiveKeys_1[_a]; + if (key !== recursiveKey && ts.containsPath(recursiveKey, key, path, !useCaseSensitiveFileNames)) { + delete wildcardDirectories[key]; + } + } + } + } + } + return wildcardDirectories; + } + function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var adjustedExtensionPriority = ts.adjustExtensionPriority(extensionPriority); + for (var i = 0; i < adjustedExtensionPriority; i++) { + var higherPriorityExtension = extensions[i]; + var higherPriorityPath = keyMapper(ts.changeExtension(file, higherPriorityExtension)); + if (ts.hasProperty(literalFiles, higherPriorityPath) || ts.hasProperty(wildcardFiles, higherPriorityPath)) { + return true; + } + } + return false; + } + function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var nextExtensionPriority = ts.getNextLowestExtensionPriority(extensionPriority); + for (var i = nextExtensionPriority; i < extensions.length; i++) { + var lowerPriorityExtension = extensions[i]; + var lowerPriorityPath = keyMapper(ts.changeExtension(file, lowerPriorityExtension)); + delete wildcardFiles[lowerPriorityPath]; + } + } + function addFileToOutput(output, file) { + output.push(file); + return output; + } + function caseSensitiveKeyMapper(key) { + return key; + } + function caseInsensitiveKeyMapper(key) { + return key.toLowerCase(); + } })(ts || (ts = {})); var ts; (function (ts) { @@ -37431,8 +38491,8 @@ var ts; return; } var currentDir = ts.sys.getCurrentDirectory(); - for (var _i = 0, files_4 = files; _i < files_4.length; _i++) { - var file = files_4[_i]; + for (var _i = 0, files_3 = files; _i < files_3.length; _i++) { + var file = files_3[_i]; var filepath = ts.getNormalizedAbsolutePath(file, currentDir); ts.sys.write("TSFILE: " + filepath + ts.sys.newLine); } @@ -37929,7 +38989,7 @@ var ts; var usageColumn = []; var descriptionColumn = []; var optionsDescriptionMap = {}; - var _loop_2 = function(i) { + var _loop_3 = function(i) { var option = optsList[i]; if (!option.description) { return "continue"; @@ -37960,7 +39020,7 @@ var ts; marginLength = Math.max(usageText_1.length, marginLength); }; for (var i = 0; i < optsList.length; i++) { - _loop_2(i); + _loop_3(i); } var usageText = " @<" + getDiagnosticText(ts.Diagnostics.file) + ">"; usageColumn.push(usageText); @@ -38019,10 +39079,10 @@ var ts; function serializeCompilerOptions(options) { var result = {}; var optionsNameMap = ts.getOptionNameMap().optionNameMap; - for (var name_35 in options) { - if (ts.hasProperty(options, name_35)) { - var value = options[name_35]; - switch (name_35) { + for (var name_36 in options) { + if (ts.hasProperty(options, name_36)) { + var value = options[name_36]; + switch (name_36) { case "init": case "watch": case "version": @@ -38030,17 +39090,17 @@ var ts; case "project": break; default: - var optionDefinition = optionsNameMap[name_35.toLowerCase()]; + var optionDefinition = optionsNameMap[name_36.toLowerCase()]; if (optionDefinition) { if (typeof optionDefinition.type === "string") { - result[name_35] = value; + result[name_36] = value; } else { var typeMap = optionDefinition.type; for (var key in typeMap) { if (ts.hasProperty(typeMap, key)) { if (typeMap[key] === value) - result[name_35] = key; + result[name_36] = key; } } } diff --git a/lib/tsserver.js b/lib/tsserver.js index 6565ba47042..af6ee897902 100644 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -147,6 +147,15 @@ var ts; return -1; } ts.indexOf = indexOf; + function indexOfAnyCharCode(text, charCodes, start) { + for (var i = start || 0, len = text.length; i < len; i++) { + if (contains(charCodes, text.charCodeAt(i))) { + return i; + } + } + return -1; + } + ts.indexOfAnyCharCode = indexOfAnyCharCode; function countWhere(array, predicate) { var count = 0; if (array) { @@ -174,12 +183,24 @@ var ts; return result; } ts.filter = filter; + function filterMutate(array, f) { + var outIndex = 0; + for (var _i = 0, array_4 = array; _i < array_4.length; _i++) { + var item = array_4[_i]; + if (f(item)) { + array[outIndex] = item; + outIndex++; + } + } + array.length = outIndex; + } + ts.filterMutate = filterMutate; 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]; + for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { + var v = array_5[_i]; result.push(f(v)); } } @@ -198,8 +219,8 @@ var ts; var result; if (array) { result = []; - for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { - var item = array_5[_i]; + for (var _i = 0, array_6 = array; _i < array_6.length; _i++) { + var item = array_6[_i]; if (!contains(result, item, areEqual)) { result.push(item); } @@ -210,8 +231,8 @@ var ts; 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]; + for (var _i = 0, array_7 = array; _i < array_7.length; _i++) { + var v = array_7[_i]; result += v[prop]; } return result; @@ -505,6 +526,30 @@ var ts; return a < b ? -1 : 1; } ts.compareValues = compareValues; + function compareStrings(a, b, ignoreCase) { + if (a === b) + return 0; + if (a === undefined) + return -1; + if (b === undefined) + return 1; + if (ignoreCase) { + if (String.prototype.localeCompare) { + var result = a.localeCompare(b, undefined, { usage: "sort", sensitivity: "accent" }); + return result < 0 ? -1 : result > 0 ? 1 : 0; + } + a = a.toUpperCase(); + b = b.toUpperCase(); + if (a === b) + return 0; + } + return a < b ? -1 : 1; + } + ts.compareStrings = compareStrings; + function compareStringsCaseInsensitive(a, b) { + return compareStrings(a, b, true); + } + ts.compareStringsCaseInsensitive = compareStringsCaseInsensitive; function getDiagnosticFileName(diagnostic) { return diagnostic.file ? diagnostic.file.fileName : undefined; } @@ -727,12 +772,219 @@ var ts; return path1 + ts.directorySeparator + path2; } ts.combinePaths = combinePaths; + function removeTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) === ts.directorySeparator) { + return path.substr(0, path.length - 1); + } + return path; + } + ts.removeTrailingDirectorySeparator = removeTrailingDirectorySeparator; + function ensureTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) !== ts.directorySeparator) { + return path + ts.directorySeparator; + } + return path; + } + ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator; + function comparePaths(a, b, currentDirectory, ignoreCase) { + if (a === b) + return 0; + if (a === undefined) + return -1; + if (b === undefined) + return 1; + a = removeTrailingDirectorySeparator(a); + b = removeTrailingDirectorySeparator(b); + var aComponents = getNormalizedPathComponents(a, currentDirectory); + var bComponents = getNormalizedPathComponents(b, currentDirectory); + var sharedLength = Math.min(aComponents.length, bComponents.length); + for (var i = 0; i < sharedLength; i++) { + var result = compareStrings(aComponents[i], bComponents[i], ignoreCase); + if (result !== 0) { + return result; + } + } + return compareValues(aComponents.length, bComponents.length); + } + ts.comparePaths = comparePaths; + function containsPath(parent, child, currentDirectory, ignoreCase) { + if (parent === undefined || child === undefined) + return false; + if (parent === child) + return true; + parent = removeTrailingDirectorySeparator(parent); + child = removeTrailingDirectorySeparator(child); + if (parent === child) + return true; + var parentComponents = getNormalizedPathComponents(parent, currentDirectory); + var childComponents = getNormalizedPathComponents(child, currentDirectory); + if (childComponents.length < parentComponents.length) { + return false; + } + for (var i = 0; i < parentComponents.length; i++) { + var result = compareStrings(parentComponents[i], childComponents[i], ignoreCase); + if (result !== 0) { + return false; + } + } + return true; + } + ts.containsPath = containsPath; function fileExtensionIs(path, extension) { var pathLen = path.length; var extLen = extension.length; return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } ts.fileExtensionIs = fileExtensionIs; + function fileExtensionIsAny(path, extensions) { + for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) { + var extension = extensions_1[_i]; + if (fileExtensionIs(path, extension)) { + return true; + } + } + return false; + } + ts.fileExtensionIsAny = fileExtensionIsAny; + var reservedCharacterPattern = /[^\w\s\/]/g; + var wildcardCharCodes = [42, 63]; + function getRegularExpressionForWildcard(specs, basePath, usage) { + if (specs === undefined || specs.length === 0) { + return undefined; + } + var pattern = ""; + var hasWrittenSubpattern = false; + spec: for (var _i = 0, specs_1 = specs; _i < specs_1.length; _i++) { + var spec = specs_1[_i]; + if (!spec) { + continue; + } + var subpattern = ""; + var hasRecursiveDirectoryWildcard = false; + var hasWrittenComponent = false; + var components = getNormalizedPathComponents(spec, basePath); + if (usage !== "exclude" && components[components.length - 1] === "**") { + continue spec; + } + components[0] = removeTrailingDirectorySeparator(components[0]); + var optionalCount = 0; + for (var _a = 0, components_1 = components; _a < components_1.length; _a++) { + var component = components_1[_a]; + if (component === "**") { + if (hasRecursiveDirectoryWildcard) { + continue spec; + } + subpattern += "(/.+?)?"; + hasRecursiveDirectoryWildcard = true; + hasWrittenComponent = true; + } + else { + if (usage === "directories") { + subpattern += "("; + optionalCount++; + } + if (hasWrittenComponent) { + subpattern += ts.directorySeparator; + } + subpattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter); + hasWrittenComponent = true; + } + } + while (optionalCount > 0) { + subpattern += ")?"; + optionalCount--; + } + if (hasWrittenSubpattern) { + pattern += "|"; + } + pattern += "(" + subpattern + ")"; + hasWrittenSubpattern = true; + } + if (!pattern) { + return undefined; + } + return "^(" + pattern + (usage === "exclude" ? ")($|/)" : ")$"); + } + ts.getRegularExpressionForWildcard = getRegularExpressionForWildcard; + function replaceWildcardCharacter(match) { + return match === "*" ? "[^/]*" : match === "?" ? "[^/]" : "\\" + match; + } + function getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var absolutePath = combinePaths(currentDirectory, path); + return { + includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"), + includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"), + excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"), + basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames) + }; + } + ts.getFileMatcherPatterns = getFileMatcherPatterns; + function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, getFileSystemEntries) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var patterns = getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory); + var regexFlag = useCaseSensitiveFileNames ? "" : "i"; + var includeFileRegex = patterns.includeFilePattern && new RegExp(patterns.includeFilePattern, regexFlag); + var includeDirectoryRegex = patterns.includeDirectoryPattern && new RegExp(patterns.includeDirectoryPattern, regexFlag); + var excludeRegex = patterns.excludePattern && new RegExp(patterns.excludePattern, regexFlag); + var result = []; + for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) { + var basePath = _a[_i]; + visitDirectory(basePath, combinePaths(currentDirectory, basePath)); + } + return result; + function visitDirectory(path, absolutePath) { + var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories; + for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { + var current = files_1[_i]; + var name_1 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!extensions || fileExtensionIsAny(name_1, extensions)) && + (!includeFileRegex || includeFileRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + result.push(name_1); + } + } + for (var _b = 0, directories_1 = directories; _b < directories_1.length; _b++) { + var current = directories_1[_b]; + var name_2 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + visitDirectory(name_2, absoluteName); + } + } + } + } + ts.matchFiles = matchFiles; + function getBasePaths(path, includes, useCaseSensitiveFileNames) { + var basePaths = [path]; + if (includes) { + var includeBasePaths = []; + for (var _i = 0, includes_1 = includes; _i < includes_1.length; _i++) { + var include = includes_1[_i]; + var absolute = isRootedDiskPath(include) ? include : normalizePath(combinePaths(path, include)); + var wildcardOffset = indexOfAnyCharCode(absolute, wildcardCharCodes); + var includeBasePath = wildcardOffset < 0 + ? removeTrailingDirectorySeparator(getDirectoryPath(absolute)) + : absolute.substring(0, absolute.lastIndexOf(ts.directorySeparator, wildcardOffset)); + includeBasePaths.push(includeBasePath); + } + includeBasePaths.sort(useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive); + include: for (var i = 0; i < includeBasePaths.length; i++) { + var includeBasePath = includeBasePaths[i]; + for (var j = 0; j < basePaths.length; j++) { + if (containsPath(basePaths[j], includeBasePath, path, !useCaseSensitiveFileNames)) { + continue include; + } + } + basePaths.push(includeBasePath); + } + } + return basePaths; + } function ensureScriptKind(fileName, scriptKind) { return (scriptKind || getScriptKindFromFileName(fileName)) || 3; } @@ -773,6 +1025,36 @@ var ts; return false; } ts.isSupportedSourceFileName = isSupportedSourceFileName; + function getExtensionPriority(path, supportedExtensions) { + for (var i = supportedExtensions.length - 1; i >= 0; i--) { + if (fileExtensionIs(path, supportedExtensions[i])) { + return adjustExtensionPriority(i); + } + } + return 0; + } + ts.getExtensionPriority = getExtensionPriority; + function adjustExtensionPriority(extensionPriority) { + if (extensionPriority < 2) { + return 0; + } + else if (extensionPriority < 5) { + return 2; + } + else { + return 5; + } + } + ts.adjustExtensionPriority = adjustExtensionPriority; + function getNextLowestExtensionPriority(extensionPriority) { + if (extensionPriority < 2) { + return 2; + } + else { + return 5; + } + } + ts.getNextLowestExtensionPriority = getNextLowestExtensionPriority; var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"]; function removeFileExtension(path) { for (var _i = 0, extensionsToRemove_1 = extensionsToRemove; _i < extensionsToRemove_1.length; _i++) { @@ -793,6 +1075,10 @@ var ts; return ext === ".jsx" || ext === ".tsx"; } ts.isJsxOrTsxExtension = isJsxOrTsxExtension; + function changeExtension(path, newExtension) { + return (removeFileExtension(path) + newExtension); + } + ts.changeExtension = changeExtension; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -863,6 +1149,7 @@ var ts; ts.sys = (function () { function getWScriptSystem() { var fso = new ActiveXObject("Scripting.FileSystemObject"); + var shell = new ActiveXObject("WScript.Shell"); var fileStream = new ActiveXObject("ADODB.Stream"); fileStream.Type = 2; var binaryStream = new ActiveXObject("ADODB.Stream"); @@ -917,9 +1204,6 @@ var ts; fileStream.Close(); } } - function getCanonicalPath(path) { - return path.toLowerCase(); - } function getNames(collection) { var result = []; for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) { @@ -931,30 +1215,19 @@ var ts; var folder = fso.GetFolder(path); return getNames(folder.subfolders); } - 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) { + function getAccessibleFileSystemEntries(path) { + try { 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); - } - } + var directories = getNames(folder.subfolders); + return { files: files, directories: directories }; } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, false, shell.CurrentDirectory, getAccessibleFileSystemEntries); } return { args: args, @@ -983,7 +1256,7 @@ var ts; return WScript.ScriptFullName; }, getCurrentDirectory: function () { - return new ActiveXObject("WScript.Shell").CurrentDirectory; + return shell.CurrentDirectory; }, getDirectories: getDirectories, readDirectory: readDirectory, @@ -1112,8 +1385,39 @@ var ts; } } } - function getCanonicalPath(path) { - return useCaseSensitiveFileNames ? path : path.toLowerCase(); + function getAccessibleFileSystemEntries(path) { + try { + var entries = _fs.readdirSync(path || ".").sort(); + var files = []; + var directories = []; + for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) { + var entry = entries_1[_i]; + if (entry === "." || entry === "..") { + continue; + } + var name_3 = ts.combinePaths(path, entry); + var stat = void 0; + try { + stat = _fs.statSync(name_3); + } + catch (e) { + continue; + } + if (stat.isFile()) { + files.push(entry); + } + else if (stat.isDirectory()) { + directories.push(entry); + } + } + return { files: files, directories: directories }; + } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), getAccessibleFileSystemEntries); } function fileSystemEntryExists(path, entryKind) { try { @@ -1136,38 +1440,6 @@ var ts; function getDirectories(path) { return ts.filter(_fs.readdirSync(path), function (p) { return fileSystemEntryExists(ts.combinePaths(path, p), 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, @@ -1249,6 +1521,16 @@ var ts; } return process.memoryUsage().heapUsed; }, + getFileSize: function (path) { + try { + var stat = _fs.statSync(path); + if (stat.isFile()) { + return stat.size; + } + } + catch (e) { } + return 0; + }, exit: function (exitCode) { process.exit(exitCode); }, @@ -1280,7 +1562,10 @@ var ts; getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, getDirectories: ChakraHost.getDirectories, - readDirectory: ChakraHost.readDirectory, + readDirectory: function (path, extensions, excludes, includes) { + var pattern = ts.getFileMatcherPatterns(path, extensions, excludes, includes, !!ChakraHost.useCaseSensitiveFileNames, ChakraHost.currentDirectory); + return ChakraHost.readDirectory(path, extensions, pattern.basePaths, pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern); + }, exit: ChakraHost.quit, realpath: realpath }; @@ -1445,7 +1730,7 @@ var ts; 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." }, + A_parameter_property_may_not_be_declared_using_a_binding_pattern: { code: 1187, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187", message: "A parameter property may not be declared using 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." }, @@ -1461,7 +1746,6 @@ var ts; 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_2015_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_2015_modules_Consider_using_import_Asteri_1202", message: "Import assignment cannot be used when targeting ECMAScript 2015 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_2015_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_2015_modules_Consider_using_export_defaul_1203", message: "Export assignment cannot be used when targeting ECMAScript 2015 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." }, @@ -1516,6 +1800,7 @@ var ts; 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." }, + A_parameter_property_cannot_be_declared_using_a_rest_parameter: { code: 1317, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317", message: "A parameter property cannot be declared using a rest parameter." }, 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." }, @@ -1786,6 +2071,8 @@ var ts; 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." }, Identifier_0_must_be_imported_from_a_module: { code: 2686, category: ts.DiagnosticCategory.Error, key: "Identifier_0_must_be_imported_from_a_module_2686", message: "Identifier '{0}' must be imported from a module" }, All_declarations_of_0_must_have_identical_modifiers: { code: 2687, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_0_must_have_identical_modifiers_2687", message: "All declarations of '{0}' must have identical modifiers." }, + Cannot_find_type_definition_file_for_0: { code: 2688, category: ts.DiagnosticCategory.Error, key: "Cannot_find_type_definition_file_for_0_2688", message: "Cannot find type definition file for '{0}'." }, + Cannot_extend_an_interface_0_Did_you_mean_implements: { code: 2689, category: ts.DiagnosticCategory.Error, key: "Cannot_extend_an_interface_0_Did_you_mean_implements_2689", message: "Cannot extend an interface '{0}'. Did you mean 'implements'?" }, 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}'." }, @@ -1859,6 +2146,8 @@ var ts; 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." }, + File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5010, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", message: "File specification cannot end in a recursive directory wildcard ('**'): '{0}'." }, + File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0: { code: 5011, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0_5011", message: "File specification cannot contain multiple recursive directory wildcards ('**'): '{0}'." }, 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}." }, @@ -1881,6 +2170,7 @@ var ts; 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" }, Substitutions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substitutions_for_pattern_0_should_be_an_array_5063", message: "Substitutions 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}'." }, + File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5065, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065", message: "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'." }, 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." }, @@ -1996,6 +2286,11 @@ var ts; 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}'" }, Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system: { code: 6131, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131", message: "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'." }, File_name_0_has_a_1_extension_stripping_it: { code: 6132, category: ts.DiagnosticCategory.Message, key: "File_name_0_has_a_1_extension_stripping_it_6132", message: "File name '{0}' has a '{1}' extension - stripping it" }, + _0_is_declared_but_never_used: { code: 6133, category: ts.DiagnosticCategory.Error, key: "_0_is_declared_but_never_used_6133", message: "'{0}' is declared but never used." }, + Report_Errors_on_Unused_Locals: { code: 6134, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Locals_6134", message: "Report Errors on Unused Locals." }, + Report_Errors_on_Unused_Parameters: { code: 6135, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Parameters_6135", message: "Report Errors on Unused Parameters." }, + The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files: { code: 6136, category: ts.DiagnosticCategory.Message, key: "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136", message: "The maximum dependency depth to search under node_modules and load JavaScript files" }, + No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0: { code: 6137, category: ts.DiagnosticCategory.Message, key: "No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0_6137", message: "No types specified in 'package.json' but 'allowJs' is set, so returning 'main' value of '{0}'" }, 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." }, @@ -2032,7 +2327,6 @@ var ts; 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." }, @@ -2295,6 +2589,10 @@ var ts; ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; var hasOwnProperty = Object.prototype.hasOwnProperty; function isWhiteSpace(ch) { + return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); + } + ts.isWhiteSpace = isWhiteSpace; + function isWhiteSpaceSingleLine(ch) { return ch === 32 || ch === 9 || ch === 11 || @@ -2308,7 +2606,7 @@ var ts; ch === 12288 || ch === 65279; } - ts.isWhiteSpace = isWhiteSpace; + ts.isWhiteSpaceSingleLine = isWhiteSpaceSingleLine; function isLineBreak(ch) { return ch === 10 || ch === 13 || @@ -2409,7 +2707,7 @@ var ts; } break; default: - if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 && (isWhiteSpace(ch))) { pos++; continue; } @@ -2530,7 +2828,7 @@ var ts; } break; default: - if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 && (isWhiteSpace(ch))) { if (result && result.length && isLineBreak(ch)) { ts.lastOrUndefined(result).hasTrailingNewLine = true; } @@ -2613,6 +2911,7 @@ var ts; scanJsxToken: scanJsxToken, scanJSDocToken: scanJSDocToken, scan: scan, + getText: getText, setText: setText, setScriptTarget: setScriptTarget, setLanguageVariant: setLanguageVariant, @@ -2978,7 +3277,7 @@ var ts; continue; } else { - while (pos < end && isWhiteSpace(text.charCodeAt(pos))) { + while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } return token = 5; @@ -3277,7 +3576,7 @@ var ts; } return token = getIdentifierToken(); } - else if (isWhiteSpace(ch)) { + else if (isWhiteSpaceSingleLine(ch)) { pos++; continue; } @@ -3418,7 +3717,7 @@ var ts; var ch = text.charCodeAt(pos); while (pos < end) { ch = text.charCodeAt(pos); - if (isWhiteSpace(ch)) { + if (isWhiteSpaceSingleLine(ch)) { pos++; } else { @@ -3505,6 +3804,9 @@ var ts; function tryScan(callback) { return speculationHelper(callback, false); } + function getText() { + return text; + } function setText(newText, start, length) { text = newText || ""; end = length === undefined ? text.length : start + length; @@ -3661,6 +3963,16 @@ var ts; type: "boolean", description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type }, + { + name: "noUnusedLocals", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Locals + }, + { + name: "noUnusedParameters", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Parameters + }, { name: "noLib", type: "boolean" @@ -3851,19 +4163,14 @@ var ts; } }, { - name: "typesSearchPaths", + name: "typeRoots", type: "list", - isTSConfigOnly: true, element: { - name: "typesSearchPaths", + name: "typeRoots", type: "string", isFilePath: true } }, - { - name: "typesRoot", - type: "string" - }, { name: "types", type: "list", @@ -3893,6 +4200,11 @@ var ts; type: "boolean", description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output }, + { + name: "maxNodeModuleJsDepth", + type: "number", + description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files + }, { name: "listEmittedFiles", type: "boolean" @@ -3928,6 +4240,10 @@ var ts; }, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon }, + { + name: "disableSizeLimit", + type: "boolean" + }, { name: "strictNullChecks", type: "boolean", @@ -3993,7 +4309,15 @@ var ts; } ts.parseCustomTypeOption = parseCustomTypeOption; function parseListTypeOption(opt, value, errors) { - var values = trimString((value || "")).split(","); + if (value === void 0) { value = ""; } + value = trimString(value); + if (ts.startsWith(value, "-")) { + return undefined; + } + if (value === "") { + return []; + } + var values = value.split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); @@ -4050,8 +4374,11 @@ var ts; i++; break; case "list": - options[opt.name] = parseListTypeOption(opt, args[i], errors); - i++; + var result = parseListTypeOption(opt, args[i], errors); + options[opt.name] = result || []; + if (result) { + i++; + } break; default: options[opt.name] = parseCustomTypeOption(opt, args[i], errors); @@ -4143,7 +4470,7 @@ var ts; } return output; } - var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; + var ignoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName) { if (existingOptions === void 0) { existingOptions = {}; } var errors = []; @@ -4151,66 +4478,57 @@ var ts; var options = ts.extend(existingOptions, compilerOptions); var typingOptions = convertTypingOptionsFromJsonWorker(json["typingOptions"], basePath, errors, configFileName); options.configFilePath = configFileName; - var fileNames = getFileNames(errors); + var _a = getFileNames(errors), fileNames = _a.fileNames, wildcardDirectories = _a.wildcardDirectories; return { options: options, fileNames: fileNames, typingOptions: typingOptions, raw: json, - errors: errors + errors: errors, + wildcardDirectories: wildcardDirectories }; function getFileNames(errors) { - var fileNames = []; + var fileNames; if (ts.hasProperty(json, "files")) { if (ts.isArray(json["files"])) { - fileNames = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); }); + fileNames = json["files"]; } 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"]; + var includeSpecs; + if (ts.hasProperty(json, "include")) { + if (ts.isArray(json["include"])) { + includeSpecs = json["include"]; } else { - exclude = ["node_modules", "bower_components", "jspm_packages"]; - } - var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } - exclude = ts.map(exclude, function (e) { return ts.getNormalizedAbsolutePath(e, basePath); }); - 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); - } + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array")); } } - if (ts.hasProperty(json, "excludes") && !ts.hasProperty(json, "exclude")) { + var excludeSpecs; + if (ts.hasProperty(json, "exclude")) { + if (ts.isArray(json["exclude"])) { + excludeSpecs = json["exclude"]; + } + else { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array")); + } + } + else if (ts.hasProperty(json, "excludes")) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); } - return fileNames; + else { + excludeSpecs = ["node_modules", "bower_components", "jspm_packages"]; + } + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + excludeSpecs.push(outDir); + } + if (fileNames === undefined && includeSpecs === undefined) { + includeSpecs = ["**/*"]; + } + return matchFileNames(fileNames, includeSpecs, excludeSpecs, basePath, options, host, errors); } } ts.parseJsonConfigFileContent = parseJsonConfigFileContent; @@ -4292,6 +4610,143 @@ var ts; function trimString(s) { return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, ""); } + var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; + var invalidMultipleRecursionPatterns = /(^|\/)\*\*\/(.*\/)?\*\*($|\/)/; + var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/; + var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//; + var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; + function matchFileNames(fileNames, include, exclude, basePath, options, host, errors) { + basePath = ts.normalizePath(basePath); + var keyMapper = host.useCaseSensitiveFileNames ? caseSensitiveKeyMapper : caseInsensitiveKeyMapper; + var literalFileMap = {}; + var wildcardFileMap = {}; + if (include) { + include = validateSpecs(include, errors, false); + } + if (exclude) { + exclude = validateSpecs(exclude, errors, true); + } + var wildcardDirectories = getWildcardDirectories(include, exclude, basePath, host.useCaseSensitiveFileNames); + var supportedExtensions = ts.getSupportedExtensions(options); + if (fileNames) { + for (var _i = 0, fileNames_1 = fileNames; _i < fileNames_1.length; _i++) { + var fileName = fileNames_1[_i]; + var file = ts.combinePaths(basePath, fileName); + literalFileMap[keyMapper(file)] = file; + } + } + if (include && include.length > 0) { + for (var _a = 0, _b = host.readDirectory(basePath, supportedExtensions, exclude, include); _a < _b.length; _a++) { + var file = _b[_a]; + if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) { + continue; + } + if (ignoreFileNamePattern.test(file)) { + continue; + } + removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper); + var key = keyMapper(file); + if (!ts.hasProperty(literalFileMap, key) && !ts.hasProperty(wildcardFileMap, key)) { + wildcardFileMap[key] = file; + } + } + } + var literalFiles = ts.reduceProperties(literalFileMap, addFileToOutput, []); + var wildcardFiles = ts.reduceProperties(wildcardFileMap, addFileToOutput, []); + wildcardFiles.sort(host.useCaseSensitiveFileNames ? ts.compareStrings : ts.compareStringsCaseInsensitive); + return { + fileNames: literalFiles.concat(wildcardFiles), + wildcardDirectories: wildcardDirectories + }; + } + function validateSpecs(specs, errors, allowTrailingRecursion) { + var validSpecs = []; + for (var _i = 0, specs_2 = specs; _i < specs_2.length; _i++) { + var spec = specs_2[_i]; + if (!allowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidMultipleRecursionPatterns.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else { + validSpecs.push(spec); + } + } + return validSpecs; + } + function getWildcardDirectories(include, exclude, path, useCaseSensitiveFileNames) { + var rawExcludeRegex = ts.getRegularExpressionForWildcard(exclude, path, "exclude"); + var excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames ? "" : "i"); + var wildcardDirectories = {}; + if (include !== undefined) { + var recursiveKeys = []; + for (var _i = 0, include_1 = include; _i < include_1.length; _i++) { + var file = include_1[_i]; + var name_5 = ts.normalizePath(ts.combinePaths(path, file)); + if (excludeRegex && excludeRegex.test(name_5)) { + continue; + } + var match = wildcardDirectoryPattern.exec(name_5); + if (match) { + var key = useCaseSensitiveFileNames ? match[0] : match[0].toLowerCase(); + var flags = watchRecursivePattern.test(name_5) ? 1 : 0; + var existingFlags = ts.getProperty(wildcardDirectories, key); + if (existingFlags === undefined || existingFlags < flags) { + wildcardDirectories[key] = flags; + if (flags === 1) { + recursiveKeys.push(key); + } + } + } + } + for (var key in wildcardDirectories) { + if (ts.hasProperty(wildcardDirectories, key)) { + for (var _a = 0, recursiveKeys_1 = recursiveKeys; _a < recursiveKeys_1.length; _a++) { + var recursiveKey = recursiveKeys_1[_a]; + if (key !== recursiveKey && ts.containsPath(recursiveKey, key, path, !useCaseSensitiveFileNames)) { + delete wildcardDirectories[key]; + } + } + } + } + } + return wildcardDirectories; + } + function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var adjustedExtensionPriority = ts.adjustExtensionPriority(extensionPriority); + for (var i = 0; i < adjustedExtensionPriority; i++) { + var higherPriorityExtension = extensions[i]; + var higherPriorityPath = keyMapper(ts.changeExtension(file, higherPriorityExtension)); + if (ts.hasProperty(literalFiles, higherPriorityPath) || ts.hasProperty(wildcardFiles, higherPriorityPath)) { + return true; + } + } + return false; + } + function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var nextExtensionPriority = ts.getNextLowestExtensionPriority(extensionPriority); + for (var i = nextExtensionPriority; i < extensions.length; i++) { + var lowerPriorityExtension = extensions[i]; + var lowerPriorityPath = keyMapper(ts.changeExtension(file, lowerPriorityExtension)); + delete wildcardFiles[lowerPriorityPath]; + } + } + function addFileToOutput(output, file) { + output.push(file); + return output; + } + function caseSensitiveKeyMapper(key) { + return key; + } + function caseInsensitiveKeyMapper(key) { + return key.toLowerCase(); + } })(ts || (ts = {})); var ts; (function (ts) { @@ -4572,6 +5027,10 @@ var ts; (node.name.kind === 9 || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; + function isShorthandAmbientModule(node) { + return node.kind === 225 && (!node.body); + } + ts.isShorthandAmbientModule = isShorthandAmbientModule; function isBlockScopedContainerTopLevel(node) { return node.kind === 256 || node.kind === 225 || @@ -4900,9 +5359,9 @@ var ts; return; default: if (isFunctionLike(node)) { - var name_5 = node.name; - if (name_5 && name_5.kind === 140) { - traverse(name_5.expression); + var name_6 = node.name; + if (name_6 && name_6.kind === 140) { + traverse(name_6.expression); return; } } @@ -4959,6 +5418,7 @@ var ts; case 157: return true; } + return false; } ts.isFunctionLikeKind = isFunctionLikeKind; function introducesArgumentsExoticObject(node) { @@ -5336,6 +5796,14 @@ var ts; return charCode === 39 || charCode === 34; } ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; + function isDeclarationOfFunctionExpression(s) { + if (s.valueDeclaration && s.valueDeclaration.kind === 218) { + var declaration = s.valueDeclaration; + return declaration.initializer && declaration.initializer.kind === 179; + } + return false; + } + ts.isDeclarationOfFunctionExpression = isDeclarationOfFunctionExpression; function getSpecialPropertyAssignmentKind(expression) { if (!isInJavaScriptFile(expression)) { return 0; @@ -5483,8 +5951,8 @@ var ts; var tag = _b[_a]; if (tag.kind === 275) { var parameterTag = tag; - var name_6 = parameterTag.preParameterName || parameterTag.postParameterName; - if (name_6.text === parameterName) { + var name_7 = parameterTag.preParameterName || parameterTag.postParameterName; + if (name_7.text === parameterName) { return parameterTag; } } @@ -6180,7 +6648,7 @@ var ts; 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)) { + if (!isDeclarationFile(sourceFile) && !host.isSourceFileFromExternalLibrary(sourceFile)) { onSingleFileEmit(host, sourceFile); } } @@ -6206,10 +6674,10 @@ var ts; action(emitFileNames, [sourceFile], false); } function onBundledEmit(host) { - var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { - return !isDeclarationFile(sourceFile) - && (!ts.isExternalModule(sourceFile) || !!getEmitModuleKind(options)); - }); + var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { return !isDeclarationFile(sourceFile) && + !host.isSourceFileFromExternalLibrary(sourceFile) && + (!ts.isExternalModule(sourceFile) || + !!getEmitModuleKind(options)); }); if (bundledSources.length) { var jsFilePath = options.outFile || options.out; var emitFileNames = { @@ -6227,7 +6695,9 @@ var ts; ts.forEachExpectedEmitFile = forEachExpectedEmitFile; function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); - sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); + var commonSourceDirectory = host.getCommonSourceDirectory(); + var isSourceFileInCommonSourceDirectory = host.getCanonicalFileName(sourceFilePath).indexOf(host.getCanonicalFileName(commonSourceDirectory)) === 0; + sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath; return ts.combinePaths(newDirPath, sourceFilePath); } ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir; @@ -6432,7 +6902,7 @@ var ts; } function calculateIndent(text, pos, end) { var currentLineIndent = 0; - for (; pos < end && ts.isWhiteSpace(text.charCodeAt(pos)); pos++) { + for (; pos < end && ts.isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) { if (text.charCodeAt(pos) === 9) { currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); } @@ -6541,6 +7011,10 @@ var ts; return ts.forEach(ts.supportedJavascriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); } ts.hasJavaScriptFileExtension = hasJavaScriptFileExtension; + function hasTypeScriptFileExtension(fileName) { + return ts.forEach(ts.supportedTypeScriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); + } + ts.hasTypeScriptFileExtension = hasTypeScriptFileExtension; function getExpandedCharCodes(input) { var output = []; var length = input.length; @@ -6924,7 +7398,6 @@ var ts; 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) || @@ -7655,12 +8128,12 @@ var ts; if (token === 82) { nextToken(); if (token === 77) { - return lookAhead(nextTokenIsClassOrFunction); + return lookAhead(nextTokenIsClassOrFunctionOrAsync); } return token !== 37 && token !== 116 && token !== 15 && canFollowModifier(); } if (token === 77) { - return nextTokenIsClassOrFunction(); + return nextTokenIsClassOrFunctionOrAsync(); } if (token === 113) { nextToken(); @@ -7675,11 +8148,13 @@ var ts; return token === 19 || token === 15 || token === 37 + || token === 22 || isLiteralPropertyName(); } - function nextTokenIsClassOrFunction() { + function nextTokenIsClassOrFunctionOrAsync() { nextToken(); - return token === 73 || token === 87; + return token === 73 || token === 87 || + (token === 118 && lookAhead(nextTokenIsFunctionKeywordOnSameLine)); } function isListElement(parsingContext, inErrorRecovery) { var node = currentNode(parsingContext); @@ -9182,7 +9657,7 @@ var ts; } 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); + parseExpectedToken(21, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(true); return finishNode(node); } @@ -9193,8 +9668,11 @@ var ts; if (lhs.kind === 69) { return lhs.text === rhs.text; } - return lhs.right.text === rhs.right.text && - tagNamesAreEquivalent(lhs.left, rhs.left); + if (lhs.kind === 97) { + return true; + } + return lhs.name.text === rhs.name.text && + tagNamesAreEquivalent(lhs.expression, rhs.expression); } function parseJsxElementOrSelfClosingElement(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); @@ -9291,15 +9769,15 @@ var ts; } function parseJsxElementName() { scanJsxIdentifier(); - var elementName = parseIdentifierName(); + var expression = token === 97 ? + parseTokenNode() : parseIdentifierName(); while (parseOptional(21)) { - scanJsxIdentifier(); - var node = createNode(139, elementName.pos); - node.left = elementName; - node.right = parseIdentifierName(); - elementName = finishNode(node); + var propertyAccess = createNode(172, expression.pos); + propertyAccess.expression = expression; + propertyAccess.name = parseRightSideOfDot(true); + expression = finishNode(propertyAccess); } - return elementName; + return expression; } function parseJsxExpression(inExpressionContext) { var node = createNode(248); @@ -9370,7 +9848,6 @@ var ts; if (dotToken) { var propertyAccess = createNode(172, expression.pos); propertyAccess.expression = expression; - propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(true); expression = finishNode(propertyAccess); continue; @@ -10078,7 +10555,7 @@ var ts; case 56: return parseExportAssignment(fullStart, decorators, modifiers); case 116: - return parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers); + return parseNamespaceExportDeclaration(fullStart, decorators, modifiers); default: return parseExportDeclaration(fullStart, decorators, modifiers); } @@ -10414,8 +10891,8 @@ var ts; 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); + var name_8 = createMissingNode(69, true, ts.Diagnostics.Declaration_expected); + return parsePropertyDeclaration(fullStart, decorators, modifiers, name_8, undefined); } ts.Debug.fail("Should not have attempted to parse class member declaration."); } @@ -10558,7 +11035,12 @@ var ts; else { node.name = parseLiteralNode(true); } - node.body = parseModuleBlock(); + if (token === 15) { + node.body = parseModuleBlock(); + } + else { + parseSemicolon(); + } return finishNode(node); } function parseModuleDeclaration(fullStart, decorators, modifiers) { @@ -10587,7 +11069,7 @@ var ts; function nextTokenIsSlash() { return nextToken() === 39; } - function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { + function parseNamespaceExportDeclaration(fullStart, decorators, modifiers) { var exportDeclaration = createNode(228, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; @@ -11302,8 +11784,8 @@ var ts; if (typeExpression.type.kind === 267) { var jsDocTypeReference = typeExpression.type; if (jsDocTypeReference.name.kind === 69) { - var name_8 = jsDocTypeReference.name; - if (name_8.text === "Object") { + var name_9 = jsDocTypeReference.name; + if (name_9.text === "Object") { typedefTag.jsDocTypeLiteral = scanChildTags(); } } @@ -11386,13 +11868,13 @@ var ts; var typeParameters = []; typeParameters.pos = scanner.getStartPos(); while (true) { - var name_9 = parseJSDocIdentifierName(); - if (!name_9) { + var name_10 = parseJSDocIdentifierName(); + if (!name_10) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); return undefined; } - var typeParameter = createNode(141, name_9.pos); - typeParameter.name = name_9; + var typeParameter = createNode(141, name_10.pos); + typeParameter.name = name_10; finishNode(typeParameter); typeParameters.push(typeParameter); if (token === 24) { @@ -11494,8 +11976,8 @@ var ts; 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]; + for (var _i = 0, array_8 = array; _i < array_8.length; _i++) { + var node = array_8[_i]; visitNode(node); } } @@ -11567,8 +12049,8 @@ var ts; 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]; + for (var _i = 0, array_9 = array; _i < array_9.length; _i++) { + var node = array_9[_i]; visitNode(node); } return; @@ -11748,7 +12230,8 @@ var ts; return state_1; } else if (node.kind === 225) { - return getModuleInstanceState(node.body); + var body = node.body; + return body ? getModuleInstanceState(body) : 1; } else { return 1; @@ -12091,6 +12574,9 @@ var ts; case 227: bindCaseBlock(node); break; + case 249: + bindCaseClause(node); + break; case 214: bindLabeledStatement(node); break; @@ -12117,11 +12603,6 @@ var ts; 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: @@ -12129,7 +12610,7 @@ var ts; case 172: return isNarrowableReference(expr); case 174: - return true; + return hasNarrowableArgument(expr); case 178: return isNarrowingExpression(expr.expression); case 187: @@ -12139,6 +12620,35 @@ var ts; } return false; } + function isNarrowableReference(expr) { + return expr.kind === 69 || + expr.kind === 97 || + expr.kind === 172 && isNarrowableReference(expr.expression); + } + function hasNarrowableArgument(expr) { + if (expr.arguments) { + for (var _i = 0, _a = expr.arguments; _i < _a.length; _i++) { + var argument = _a[_i]; + if (isNarrowableReference(argument)) { + return true; + } + } + } + if (expr.expression.kind === 172 && + isNarrowableReference(expr.expression.expression)) { + return true; + } + return false; + } + function isNarrowingNullCheckOperands(expr1, expr2) { + return (expr1.kind === 93 || expr1.kind === 69 && expr1.text === "undefined") && isNarrowableOperand(expr2); + } + function isNarrowingTypeofOperands(expr1, expr2) { + return expr1.kind === 182 && isNarrowableOperand(expr1.expression) && expr2.kind === 9; + } + function isNarrowingDiscriminant(expr) { + return expr.kind === 172 && isNarrowableReference(expr.expression); + } function isNarrowingBinaryExpression(expr) { switch (expr.operatorToken.kind) { case 56: @@ -12147,20 +12657,34 @@ var ts; 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; + return isNarrowingNullCheckOperands(expr.right, expr.left) || isNarrowingNullCheckOperands(expr.left, expr.right) || + isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right) || + isNarrowingDiscriminant(expr.left) || isNarrowingDiscriminant(expr.right); case 91: - return isNarrowingExpression(expr.left); + return isNarrowableOperand(expr.left); case 24: return isNarrowingExpression(expr.right); } return false; } + function isNarrowableOperand(expr) { + switch (expr.kind) { + case 178: + return isNarrowableOperand(expr.expression); + case 187: + switch (expr.operatorToken.kind) { + case 56: + return isNarrowableOperand(expr.left); + case 24: + return isNarrowableOperand(expr.right); + } + } + return isNarrowableReference(expr); + } + function isNarrowingSwitchStatement(switchStatement) { + var expr = switchStatement.expression; + return expr.kind === 172 && isNarrowableReference(expr.expression); + } function createBranchLabel() { return { flags: 4, @@ -12174,7 +12698,7 @@ var ts; }; } function setFlowNodeReferenced(flow) { - flow.flags |= flow.flags & 128 ? 256 : 128; + flow.flags |= flow.flags & 256 ? 512 : 256; } function addAntecedent(label, antecedent) { if (!(antecedent.flags & 1) && !ts.contains(label.antecedents, antecedent)) { @@ -12199,8 +12723,21 @@ var ts; setFlowNodeReferenced(antecedent); return { flags: flags, - antecedent: antecedent, - expression: expression + expression: expression, + antecedent: antecedent + }; + } + function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) { + if (!isNarrowingSwitchStatement(switchStatement)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: 128, + switchStatement: switchStatement, + clauseStart: clauseStart, + clauseEnd: clauseEnd, + antecedent: antecedent }; } function createFlowAssignment(antecedent, node) { @@ -12410,9 +12947,10 @@ var ts; preSwitchCaseFlow = currentFlow; bind(node.caseBlock); addAntecedent(postSwitchLabel, currentFlow); - var hasNonEmptyDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250 && c.statements.length; }); - if (!hasNonEmptyDefault) { - addAntecedent(postSwitchLabel, preSwitchCaseFlow); + var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250; }); + node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents; + if (!hasDefault) { + addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0)); } currentBreakTarget = saveBreakTarget; preSwitchCaseFlow = savePreSwitchCaseFlow; @@ -12420,28 +12958,32 @@ var ts; } function bindCaseBlock(node) { var clauses = node.clauses; + var fallthroughFlow = unreachableFlow; 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); - } + var clauseStart = i; + while (!clauses[i].statements.length && i + 1 < clauses.length) { + bind(clauses[i]); + i++; } - else { - bind(clause); + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1)); + addAntecedent(preCaseLabel, fallthroughFlow); + currentFlow = finishFlowLabel(preCaseLabel); + var clause = clauses[i]; + bind(clause); + fallthroughFlow = currentFlow; + if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); } } } + function bindCaseClause(node) { + var saveCurrentFlow = currentFlow; + currentFlow = preSwitchCaseFlow; + bind(node.expression); + currentFlow = saveCurrentFlow; + ts.forEach(node.statements, bind); + } function pushActiveLabel(name, breakTarget, continueTarget) { var activeLabel = { name: name, @@ -12703,7 +13245,7 @@ var ts; } function hasExportDeclarations(node) { var body = node.kind === 256 ? node : node.body; - if (body.kind === 256 || body.kind === 226) { + if (body && (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) { @@ -13223,7 +13765,7 @@ var ts; constructorFunction.parent = classPrototype; classPrototype.parent = leftSideOfAssignment; var funcSymbol = container.locals[constructorFunction.text]; - if (!funcSymbol || !(funcSymbol.flags & 16)) { + if (!funcSymbol || !(funcSymbol.flags & 16 || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return; } if (!funcSymbol.members) { @@ -13415,6 +13957,7 @@ var ts; var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || 0; var modulekind = ts.getEmitModuleKind(compilerOptions); + var noUnusedIdentifiers = !!compilerOptions.noUnusedLocals || !!compilerOptions.noUnusedParameters; var allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === ts.ModuleKind.System; var strictNullChecks = compilerOptions.strictNullChecks; var emitResolver = createResolver(); @@ -13521,6 +14064,7 @@ var ts; var getGlobalThenableType; var jsxElementClassType; var deferredNodes; + var deferredUnusedIdentifierNodes; var flowLoopStart = 0; var flowLoopCount = 0; var visitedFlowCount = 0; @@ -13808,7 +14352,8 @@ var ts; var declarationFile = ts.getSourceFileOfNode(declaration); var useFile = ts.getSourceFileOfNode(usage); if (declarationFile !== useFile) { - if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) { + if ((modulekind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) || + (!compilerOptions.outFile && !compilerOptions.out)) { return true; } var sourceFiles = host.getSourceFiles(); @@ -14000,12 +14545,16 @@ var ts; lastLocation = location; location = location.parent; } + if (result && nameNotFoundMessage && noUnusedIdentifiers) { + result.isReferenced = true; + } if (!result) { result = getSymbol(globals, name, meaning); } if (!result) { if (nameNotFoundMessage) { - if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg)) { + if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && + !checkAndReportErrorForExtendingInterface(errorLocation)) { error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); } } @@ -14061,6 +14610,29 @@ var ts; } return false; } + function checkAndReportErrorForExtendingInterface(errorLocation) { + var parentClassExpression = errorLocation; + while (parentClassExpression) { + var kind = parentClassExpression.kind; + if (kind === 69 || kind === 172) { + parentClassExpression = parentClassExpression.parent; + continue; + } + if (kind === 194) { + break; + } + return false; + } + if (!parentClassExpression) { + return false; + } + var expression = parentClassExpression.expression; + if (resolveEntityName(expression, 64, true)) { + error(errorLocation, ts.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, ts.getTextOfNode(expression)); + return true; + } + return false; + } function checkResolvedBlockScopedVariable(result, errorLocation) { ts.Debug.assert((result.flags & 2) !== 0); var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; }); @@ -14103,9 +14675,11 @@ var ts; 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"]); + var exportDefaultSymbol = ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration) ? + moduleSymbol : + 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)); } @@ -14154,22 +14728,25 @@ var ts; var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier); var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier); if (targetSymbol) { - var name_10 = specifier.propertyName || specifier.name; - if (name_10.text) { + var name_11 = specifier.propertyName || specifier.name; + if (name_11.text) { + if (ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration)) { + return moduleSymbol; + } var symbolFromVariable = void 0; if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports["export="]) { - symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name_10.text); + symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name_11.text); } else { - symbolFromVariable = getPropertyOfVariable(targetSymbol, name_10.text); + symbolFromVariable = getPropertyOfVariable(targetSymbol, name_11.text); } symbolFromVariable = resolveSymbol(symbolFromVariable); - var symbolFromModule = getExportOfModule(targetSymbol, name_10.text); + var symbolFromModule = getExportOfModule(targetSymbol, name_11.text); var symbol = symbolFromModule && symbolFromVariable ? combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : symbolFromModule || symbolFromVariable; if (!symbol) { - error(name_10, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_10)); + error(name_11, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_11)); } return symbol; } @@ -14178,7 +14755,7 @@ var ts; function getTargetOfImportSpecifier(node) { return getExternalModuleMember(node.parent.parent.parent, node); } - function getTargetOfGlobalModuleExportDeclaration(node) { + function getTargetOfNamespaceExportDeclaration(node) { return resolveExternalModuleSymbol(node.parent.symbol); } function getTargetOfExportSpecifier(node) { @@ -14204,7 +14781,7 @@ var ts; case 235: return getTargetOfExportAssignment(node); case 228: - return getTargetOfGlobalModuleExportDeclaration(node); + return getTargetOfNamespaceExportDeclaration(node); } } function resolveSymbol(symbol) { @@ -14287,9 +14864,12 @@ var ts; 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)) { + if (!namespace || ts.nodeIsMissing(right)) { return undefined; } + else if (namespace === unknownSymbol) { + return namespace; + } symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning); if (!symbol) { if (!ignoreErrors) { @@ -15250,16 +15830,13 @@ var ts; writePunctuation(writer, 27); } } - function buildDisplayForParametersAndDelimiters(thisType, parameters, writer, enclosingDeclaration, flags, symbolStack) { + function buildDisplayForParametersAndDelimiters(thisParameter, parameters, writer, enclosingDeclaration, flags, symbolStack) { writePunctuation(writer, 17); - if (thisType) { - writeKeyword(writer, 97); - writePunctuation(writer, 54); - writeSpace(writer); - buildTypeDisplay(thisType, writer, enclosingDeclaration, flags, symbolStack); + if (thisParameter) { + buildParameterDisplay(thisParameter, writer, enclosingDeclaration, flags, symbolStack); } for (var i = 0; i < parameters.length; i++) { - if (i > 0 || thisType) { + if (i > 0 || thisParameter) { writePunctuation(writer, 24); writeSpace(writer); } @@ -15307,7 +15884,7 @@ var ts; else { buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack); } - buildDisplayForParametersAndDelimiters(signature.thisType, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); + buildDisplayForParametersAndDelimiters(signature.thisParameter, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack); } return _displayBuilder || (_displayBuilder = { @@ -15504,6 +16081,9 @@ var ts; function isTypeAny(type) { return type && (type.flags & 1) !== 0; } + function isTypeNever(type) { + return type && (type.flags & 134217728) !== 0; + } function getTypeForBindingElementParent(node) { var symbol = getSymbolOfNode(node); return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, false); @@ -15539,19 +16119,19 @@ var ts; } var type; if (pattern.kind === 167) { - var name_11 = declaration.propertyName || declaration.name; - if (isComputedNonLiteralName(name_11)) { + var name_12 = declaration.propertyName || declaration.name; + if (isComputedNonLiteralName(name_12)) { return anyType; } if (declaration.initializer) { getContextualType(declaration.initializer); } - var text = getTextOfPropertyName(name_11); + var text = getTextOfPropertyName(name_12); type = getTypeOfPropertyOfType(parentType, text) || isNumericLiteralName(text) && getIndexTypeOfType(parentType, 1) || getIndexTypeOfType(parentType, 0); if (!type) { - error(name_11, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_11)); + error(name_12, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_12)); return unknownType; } } @@ -15635,12 +16215,13 @@ var ts; if (func.kind === 150 && !ts.hasDynamicName(func)) { var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149); if (getter) { - var signature = getSignatureFromDeclaration(getter); + var getterSignature = getSignatureFromDeclaration(getter); var thisParameter = getAccessorThisParameter(func); if (thisParameter && declaration === thisParameter) { - return signature.thisType; + ts.Debug.assert(!thisParameter.type); + return getTypeOfSymbol(getterSignature.thisParameter); } - return getReturnTypeOfSignature(signature); + return getReturnTypeOfSignature(getterSignature); } } var type = declaration.symbol.name === "this" @@ -15755,18 +16336,21 @@ var ts; 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); + var type = undefined; + if (declaration.kind === 187) { + type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); + } + else if (declaration.kind === 172) { + if (declaration.parent.kind === 187) { + type = checkExpressionCached(declaration.parent.right); + } + } + if (type === undefined) { + type = getWidenedTypeForVariableLikeDeclaration(declaration, true); + } if (!popTypeResolution()) { if (symbol.valueDeclaration.type) { type = unknownType; @@ -15795,14 +16379,12 @@ 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 getAnnotatedAccessorThisParameter(accessor) { + var parameter = getAccessorThisParameter(accessor); + return parameter && parameter.symbol; + } + function getThisTypeOfDeclaration(declaration) { + return getThisTypeOfSignature(getSignatureFromDeclaration(declaration)); } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); @@ -15854,9 +16436,14 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var type = createObjectType(65536, symbol); - links.type = strictNullChecks && symbol.flags & 536870912 ? - addTypeKind(type, 32) : type; + if (symbol.valueDeclaration.kind === 225 && ts.isShorthandAmbientModule(symbol.valueDeclaration)) { + links.type = anyType; + } + else { + var type = createObjectType(65536, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 ? + addTypeKind(type, 32) : type; + } } return links.type; } @@ -16377,12 +16964,12 @@ var ts; type.typeArguments : ts.concatenate(type.typeArguments, [type]); resolveObjectTypeMembers(type, source, typeParameters, typeArguments); } - function createSignature(declaration, typeParameters, thisType, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { + function createSignature(declaration, typeParameters, thisParameter, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { var sig = new Signature(checker); sig.declaration = declaration; sig.typeParameters = typeParameters; sig.parameters = parameters; - sig.thisType = thisType; + sig.thisParameter = thisParameter; sig.resolvedReturnType = resolvedReturnType; sig.typePredicate = typePredicate; sig.minArgumentCount = minArgumentCount; @@ -16391,7 +16978,7 @@ var ts; 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); + return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); } function getDefaultConstructSignatures(classType) { var baseConstructorType = getBaseConstructorTypeOfClass(classType); @@ -16475,8 +17062,9 @@ var ts; 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; })); + if (ts.forEach(unionSignatures, function (sig) { return sig.thisParameter; })) { + var thisType = getUnionType(ts.map(unionSignatures, function (sig) { return getTypeOfSymbol(sig.thisParameter) || anyType; })); + s.thisParameter = createTransientSymbol(signature.thisParameter, thisType); } s.resolvedReturnType = undefined; s.unionSignatures = unionSignatures; @@ -16661,6 +17249,7 @@ var ts; var types = containingType.types; var props; var commonFlags = (containingType.flags & 32768) ? 536870912 : 0; + var isReadonly = false; for (var _i = 0, types_2 = types; _i < types_2.length; _i++) { var current = types_2[_i]; var type = getApparentType(current); @@ -16674,6 +17263,9 @@ var ts; else if (!ts.contains(props, prop)) { props.push(prop); } + if (isReadonlySymbol(prop)) { + isReadonly = true; + } } else if (containingType.flags & 16384) { return undefined; @@ -16701,6 +17293,7 @@ var ts; commonFlags, name); result.containingType = containingType; result.declarations = declarations; + result.isReadonly = isReadonly; result.type = containingType.flags & 16384 ? getUnionType(propTypes) : getIntersectionType(propTypes); return result; } @@ -16807,7 +17400,7 @@ var ts; } return result; } - function isOptionalParameter(node) { + function isJSDocOptionalParameter(node) { if (node.flags & 134217728) { if (node.type && node.type.kind === 268) { return true; @@ -16822,7 +17415,9 @@ var ts; } } } - if (ts.hasQuestionToken(node)) { + } + function isOptionalParameter(node) { + if (ts.hasQuestionToken(node) || isJSDocOptionalParameter(node)) { return true; } if (node.initializer) { @@ -16857,7 +17452,7 @@ var ts; var parameters = []; var hasStringLiterals = false; var minArgumentCount = -1; - var thisType = undefined; + var thisParameter = undefined; var hasThisParameter = void 0; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); for (var i = isJSConstructSignature ? 1 : 0, n = declaration.parameters.length; i < n; i++) { @@ -16869,7 +17464,7 @@ var ts; } if (i === 0 && paramSymbol.name === "this") { hasThisParameter = true; - thisType = param.type ? getTypeFromTypeNode(param.type) : unknownType; + thisParameter = param.symbol; } else { parameters.push(paramSymbol); @@ -16877,7 +17472,7 @@ var ts; if (param.type && param.type.kind === 166) { hasStringLiterals = true; } - if (param.initializer || param.questionToken || param.dotDotDotToken) { + if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) { if (minArgumentCount < 0) { minArgumentCount = i - (hasThisParameter ? 1 : 0); } @@ -16888,10 +17483,12 @@ var ts; } if ((declaration.kind === 149 || declaration.kind === 150) && !ts.hasDynamicName(declaration) && - (!hasThisParameter || thisType === unknownType)) { + (!hasThisParameter || !thisParameter)) { var otherKind = declaration.kind === 149 ? 150 : 149; - var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); - thisType = getAnnotatedAccessorThisType(setter); + var other = ts.getDeclarationOfKind(declaration.symbol, otherKind); + if (other) { + thisParameter = getAnnotatedAccessorThisParameter(other); + } } if (minArgumentCount < 0) { minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); @@ -16909,7 +17506,7 @@ var ts; 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); + links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } @@ -16979,6 +17576,11 @@ var ts; } return anyType; } + function getThisTypeOfSignature(signature) { + if (signature.thisParameter) { + return getTypeOfSymbol(signature.thisParameter); + } + } function getReturnTypeOfSignature(signature) { if (!signature.resolvedReturnType) { if (!pushTypeResolution(signature, 3)) { @@ -17696,7 +18298,7 @@ var ts; 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); + var result = createSignature(signature.declaration, freshTypeParameters, signature.thisParameter && instantiateSymbol(signature.thisParameter, 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; @@ -17874,6 +18476,9 @@ var ts; function isTypeComparableTo(source, target) { return checkTypeComparableTo(source, target, undefined); } + function areTypesComparable(type1, type2) { + return isTypeComparableTo(type1, type2) || isTypeComparableTo(type2, type1); + } function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) { return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain); } @@ -17896,16 +18501,20 @@ var ts; 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); + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType && sourceThisType !== voidType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + var related = compareTypes(sourceThisType, targetThisType, false) + || compareTypes(targetThisType, sourceThisType, reportErrors); + if (!related) { + if (reportErrors) { + errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); + } + return 0; } - return 0; + result &= related; } - result &= related; } var sourceMax = getNumNonRestParameters(source); var targetMax = getNumNonRestParameters(target); @@ -18723,12 +19332,18 @@ var ts; 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; + if (!ignoreThisTypes) { + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + var related = compareTypes(sourceThisType, targetThisType); + if (!related) { + return 0; + } + result &= related; + } } - result &= related; } var targetLen = target.parameters.length; for (var i = 0; i < targetLen; i++) { @@ -18812,8 +19427,10 @@ var ts; function isTupleLikeType(type) { return !!getPropertyOfType(type, "0"); } - function isStringLiteralType(type) { - return type.flags & 256; + function isStringLiteralUnionType(type) { + return type.flags & 256 ? true : + type.flags & 16384 ? ts.forEach(type.types, isStringLiteralUnionType) : + false; } function isTupleType(type) { return !!(type.flags & 8192); @@ -19543,6 +20160,29 @@ var ts; } return node; } + function getTypeOfSwitchClause(clause) { + if (clause.kind === 249) { + var expr = clause.expression; + return expr.kind === 9 ? getStringLiteralTypeForText(expr.text) : checkExpression(expr); + } + return undefined; + } + function getSwitchClauseTypes(switchStatement) { + var links = getNodeLinks(switchStatement); + if (!links.switchTypes) { + var types = ts.map(switchStatement.caseBlock.clauses, getTypeOfSwitchClause); + links.switchTypes = ts.forEach(types, function (t) { return !t || t.flags & 256; }) ? types : emptyArray; + } + return links.switchTypes; + } + function eachTypeContainedIn(source, types) { + return source.flags & 16384 ? !ts.forEach(source.types, function (t) { return !ts.contains(types, t); }) : ts.contains(types, source); + } + function filterType(type, f) { + return type.flags & 16384 ? + getUnionType(ts.filter(type.types, f)) : + f(type) ? type : neverType; + } function getFlowTypeOfReference(reference, declaredType, assumeInitialized, includeOuterFunctions) { var key; if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 16908175)) { @@ -19558,7 +20198,7 @@ var ts; return result; function getTypeAtFlowNode(flow) { while (true) { - if (flow.flags & 256) { + if (flow.flags & 512) { for (var i = visitedFlowStart; i < visitedFlowCount; i++) { if (visitedFlowNodes[i] === flow) { return visitedFlowTypes[i]; @@ -19576,6 +20216,9 @@ var ts; else if (flow.flags & 96) { type = getTypeAtFlowCondition(flow); } + else if (flow.flags & 128) { + type = getTypeAtSwitchClause(flow); + } else if (flow.flags & 12) { if (flow.antecedents.length === 1) { flow = flow.antecedents[0]; @@ -19596,7 +20239,7 @@ var ts; else { type = declaredType; } - if (flow.flags & 256) { + if (flow.flags & 512) { visitedFlowNodes[visitedFlowCount] = flow; visitedFlowTypes[visitedFlowCount] = type; visitedFlowCount++; @@ -19634,6 +20277,10 @@ var ts; } return type; } + function getTypeAtSwitchClause(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + return narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd); + } function getTypeAtFlowBranchLabel(flow) { var antecedentTypes = []; for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { @@ -19694,11 +20341,26 @@ var ts; case 31: case 32: case 33: - if (isNullOrUndefinedLiteral(expr.right)) { - return narrowTypeByNullCheck(type, expr, assumeTrue); + var left = expr.left; + var operator = expr.operatorToken.kind; + var right = expr.right; + if (isNullOrUndefinedLiteral(right)) { + return narrowTypeByNullCheck(type, left, operator, right, assumeTrue); } - if (expr.left.kind === 182 && expr.right.kind === 9) { - return narrowTypeByTypeof(type, expr, assumeTrue); + if (isNullOrUndefinedLiteral(left)) { + return narrowTypeByNullCheck(type, right, operator, left, assumeTrue); + } + if (left.kind === 182 && right.kind === 9) { + return narrowTypeByTypeof(type, left, operator, right, assumeTrue); + } + if (right.kind === 182 && left.kind === 9) { + return narrowTypeByTypeof(type, right, operator, left, assumeTrue); + } + if (left.kind === 172) { + return narrowTypeByDiscriminant(type, left, operator, right, assumeTrue); + } + if (right.kind === 172) { + return narrowTypeByDiscriminant(type, right, operator, left, assumeTrue); } break; case 91: @@ -19708,46 +20370,91 @@ var ts; } return type; } - function narrowTypeByNullCheck(type, expr, assumeTrue) { - var operator = expr.operatorToken.kind; + function narrowTypeByNullCheck(type, target, operator, literal, assumeTrue) { if (operator === 31 || operator === 33) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(expr.left))) { + if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(target))) { return type; } var doubleEquals = operator === 30 || operator === 31; var facts = doubleEquals ? assumeTrue ? 65536 : 524288 : - expr.right.kind === 93 ? + literal.kind === 93 ? assumeTrue ? 32768 : 262144 : assumeTrue ? 16384 : 131072; return getTypeWithFacts(type, facts); } - function narrowTypeByTypeof(type, expr, assumeTrue) { - var left = getReferenceFromExpression(expr.left.expression); - var right = expr.right; - if (!isMatchingReference(reference, left)) { - if (containsMatchingReference(reference, left)) { + function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) { + var target = getReferenceFromExpression(typeOfExpr.expression); + if (!isMatchingReference(reference, target)) { + if (containsMatchingReference(reference, target)) { return declaredType; } return type; } - if (expr.operatorToken.kind === 31 || - expr.operatorToken.kind === 33) { + if (operator === 31 || operator === 33) { assumeTrue = !assumeTrue; } if (assumeTrue && !(type.flags & 16384)) { - var targetType = ts.getProperty(typeofTypesByName, right.text); + var targetType = ts.getProperty(typeofTypesByName, literal.text); if (targetType && isTypeSubtypeOf(targetType, type)) { return targetType; } } var facts = assumeTrue ? - ts.getProperty(typeofEQFacts, right.text) || 64 : - ts.getProperty(typeofNEFacts, right.text) || 8192; + ts.getProperty(typeofEQFacts, literal.text) || 64 : + ts.getProperty(typeofNEFacts, literal.text) || 8192; return getTypeWithFacts(type, facts); } + function narrowTypeByDiscriminant(type, propAccess, operator, value, assumeTrue) { + if (!isMatchingReference(reference, propAccess.expression)) { + return type; + } + var propName = propAccess.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var discriminantType = value.kind === 9 ? getStringLiteralTypeForText(value.text) : checkExpression(value); + if (!isStringLiteralUnionType(discriminantType)) { + return type; + } + if (operator === 31 || operator === 33) { + assumeTrue = !assumeTrue; + } + if (assumeTrue) { + return filterType(type, function (t) { return areTypesComparable(getTypeOfPropertyOfType(t, propName), discriminantType); }); + } + if (discriminantType.flags & 256) { + return filterType(type, function (t) { return getTypeOfPropertyOfType(t, propName) !== discriminantType; }); + } + return type; + } + function narrowTypeBySwitchOnDiscriminant(type, switchStatement, clauseStart, clauseEnd) { + if (!isMatchingReference(reference, switchStatement.expression.expression)) { + return type; + } + var propName = switchStatement.expression.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var switchTypes = getSwitchClauseTypes(switchStatement); + if (!switchTypes.length) { + return type; + } + var clauseTypes = switchTypes.slice(clauseStart, clauseEnd); + var hasDefaultClause = clauseStart === clauseEnd || ts.contains(clauseTypes, undefined); + var caseTypes = hasDefaultClause ? ts.filter(clauseTypes, function (t) { return !!t; }) : clauseTypes; + var discriminantType = caseTypes.length ? getUnionType(caseTypes) : undefined; + var caseType = discriminantType && filterType(type, function (t) { return isTypeComparableTo(discriminantType, getTypeOfPropertyOfType(t, propName)); }); + if (!hasDefaultClause) { + return caseType; + } + var defaultType = filterType(type, function (t) { return !eachTypeContainedIn(getTypeOfPropertyOfType(t, propName), switchTypes); }); + return caseType ? getUnionType([caseType, defaultType]) : defaultType; + } function narrowTypeByInstanceof(type, expr, assumeTrue) { var left = getReferenceFromExpression(expr.left); if (!isMatchingReference(reference, left)) { @@ -20110,9 +20817,9 @@ var ts; if (type) { return type; } - var signature = getSignatureFromDeclaration(container); - if (signature.thisType) { - return signature.thisType; + var thisType = getThisTypeOfDeclaration(container); + if (thisType) { + return thisType; } } if (ts.isClassLike(container.parent)) { @@ -20255,7 +20962,7 @@ var ts; if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { - return contextualSignature.thisType; + return getThisTypeOfSignature(contextualSignature); } } return undefined; @@ -20316,11 +21023,11 @@ var ts; } if (ts.isBindingPattern(declaration.parent)) { var parentDeclaration = declaration.parent.parent; - var name_12 = declaration.propertyName || declaration.name; + var name_13 = declaration.propertyName || declaration.name; if (ts.isVariableLike(parentDeclaration) && parentDeclaration.type && - !ts.isBindingPattern(name_12)) { - var text = getTextOfPropertyName(name_12); + !ts.isBindingPattern(name_13)) { + var text = getTextOfPropertyName(name_13); if (text) { return getTypeOfPropertyOfType(getTypeFromTypeNode(parentDeclaration.type), text); } @@ -20446,9 +21153,6 @@ var ts; 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)); } @@ -20840,7 +21544,7 @@ var ts; return name.indexOf("-") < 0; } function isJsxIntrinsicIdentifier(tagName) { - if (tagName.kind === 139) { + if (tagName.kind === 172 || tagName.kind === 97) { return false; } else { @@ -20976,6 +21680,25 @@ var ts; return getResolvedJsxType(node, type, elemClassType); })); } + if (elemType.flags & 2) { + return anyType; + } + else if (elemType.flags & 256) { + var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements); + if (intrinsicElementsType !== unknownType) { + var stringLiteralTypeName = elemType.text; + var intrinsicProp = getPropertyOfType(intrinsicElementsType, stringLiteralTypeName); + if (intrinsicProp) { + return getTypeOfSymbol(intrinsicProp); + } + var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0); + if (indexSignatureType) { + return indexSignatureType; + } + error(node, ts.Diagnostics.Property_0_does_not_exist_on_type_1, stringLiteralTypeName, "JSX." + JsxNames.IntrinsicElements); + } + return anyType; + } var elemInstanceType = getJsxElementInstanceType(node, elemType); if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { if (jsxElementType) { @@ -21215,11 +21938,21 @@ var ts; } var prop = getPropertyOfType(apparentType, right.text); if (!prop) { - if (right.text) { + if (right.text && !checkAndReportErrorForExtendingInterface(node)) { error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(right), typeToString(type.flags & 33554432 ? apparentType : type)); } return unknownType; } + if (noUnusedIdentifiers && + (prop.flags & 106500) && + prop.valueDeclaration && (prop.valueDeclaration.flags & 8)) { + if (prop.flags & 16777216) { + getSymbolLinks(prop).target.isReferenced = true; + } + else { + prop.isReferenced = true; + } + } getNodeLinks(node).resolvedSymbol = prop; if (prop.parent && prop.parent.flags & 32) { checkClassPropertyAccess(node, left, apparentType, prop); @@ -21308,15 +22041,15 @@ var ts; return unknownType; } if (node.argumentExpression) { - var name_13 = getPropertyNameForIndexedAccess(node.argumentExpression, indexType); - if (name_13 !== undefined) { - var prop = getPropertyOfType(objectType, name_13); + var name_14 = getPropertyNameForIndexedAccess(node.argumentExpression, indexType); + if (name_14 !== undefined) { + var prop = getPropertyOfType(objectType, name_14); 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_13, symbolToString(objectType.symbol)); + error(node.argumentExpression, ts.Diagnostics.Property_0_does_not_exist_on_const_enum_1, name_14, symbolToString(objectType.symbol)); return unknownType; } } @@ -21532,10 +22265,11 @@ var ts; if (context.failedTypeParameterIndex !== undefined && !context.inferences[context.failedTypeParameterIndex].isFixed) { context.failedTypeParameterIndex = undefined; } - if (signature.thisType) { + var thisType = getThisTypeOfSignature(signature); + if (thisType) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; - inferTypes(context, thisArgumentType, signature.thisType); + inferTypes(context, thisArgumentType, thisType); } var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { @@ -21586,12 +22320,13 @@ var ts; return typeArgumentsAreAssignable; } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { - if (signature.thisType && signature.thisType !== voidType && node.kind !== 175) { + var thisType = getThisTypeOfSignature(signature); + if (thisType && 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)) { + if (!checkTypeRelatedTo(thisArgumentType, getThisTypeOfSignature(signature), relation, errorNode, headMessage_1)) { return false; } } @@ -22007,7 +22742,7 @@ var ts; if (getReturnTypeOfSignature(signature) !== voidType) { error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); } - if (signature.thisType === voidType) { + if (getThisTypeOfSignature(signature) === voidType) { error(node, ts.Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void); } return signature; @@ -22135,8 +22870,10 @@ var ts; declaration.kind !== 152 && declaration.kind !== 157 && !ts.isJSDocConstructSignature(declaration)) { - var funcSymbol = checkExpression(node.expression).symbol; - if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16)) { + var funcSymbol = node.expression.kind === 69 ? + getResolvedSymbol(node.expression) : + checkExpression(node.expression).symbol; + if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16 || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return getInferredClassType(funcSymbol); } else if (compilerOptions.noImplicitAny) { @@ -22155,6 +22892,7 @@ var ts; } function checkAssertion(node) { var exprType = getRegularTypeOfObjectLiteral(checkExpression(node.expression)); + checkSourceElement(node.type); var targetType = getTypeFromTypeNode(node.type); if (produceDiagnostics && targetType !== unknownType) { var widenedType = getWidenedType(exprType); @@ -22238,6 +22976,14 @@ var ts; } return emptyObjectType; } + function createPromiseReturnType(func, promisedType) { + var promiseType = createPromiseType(promisedType); + if (promiseType === emptyObjectType) { + error(func, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + return unknownType; + } + return promiseType; + } function getReturnTypeFromBody(func, contextualMapper) { var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); if (!func.body) { @@ -22267,18 +23013,10 @@ var ts; else { types = checkAndAggregateReturnExpressionTypes(func, contextualMapper); if (!types) { - return neverType; + return isAsync ? createPromiseReturnType(func, neverType) : 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; + return isAsync ? createPromiseReturnType(func, voidType) : voidType; } } type = contextualSignature ? getUnionType(types) : getCommonSupertype(types); @@ -22289,7 +23027,7 @@ var ts; } else { error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); - return getUnionType(types); + return isAsync ? createPromiseReturnType(func, getUnionType(types)) : getUnionType(types); } } if (funcIsGenerator) { @@ -22300,17 +23038,7 @@ var ts; 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; - } + return isAsync ? createPromiseReturnType(func, widenedType) : widenedType; } function checkAndAggregateYieldOperandTypes(func, contextualMapper) { var aggregatedTypes = []; @@ -22328,10 +23056,40 @@ var ts; }); return aggregatedTypes; } + function isExhaustiveSwitchStatement(node) { + var expr = node.expression; + if (!node.possiblyExhaustive || expr.kind !== 172) { + return false; + } + var type = checkExpression(expr.expression); + if (!(type.flags & 16384)) { + return false; + } + var propName = expr.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return false; + } + var switchTypes = getSwitchClauseTypes(node); + if (!switchTypes.length) { + return false; + } + return eachTypeContainedIn(propType, switchTypes); + } + function functionHasImplicitReturn(func) { + if (!(func.flags & 32768)) { + return false; + } + var lastStatement = ts.lastOrUndefined(func.body.statements); + if (lastStatement && lastStatement.kind === 213 && isExhaustiveSwitchStatement(lastStatement)) { + return false; + } + return true; + } function checkAndAggregateReturnExpressionTypes(func, contextualMapper) { var isAsync = ts.isAsyncFunctionLike(func); var aggregatedTypes = []; - var hasReturnWithNoExpression = !!(func.flags & 32768); + var hasReturnWithNoExpression = functionHasImplicitReturn(func); var hasReturnOfTypeNever = false; ts.forEachReturnStatement(func.body, function (returnStatement) { var expr = returnStatement.expression; @@ -22369,7 +23127,7 @@ var ts; if (returnType && maybeTypeOfKind(returnType, 1 | 16)) { return; } - if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 || !(func.flags & 32768)) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 || !functionHasImplicitReturn(func)) { return; } var hasExplicitReturn = func.flags & 65536; @@ -22464,6 +23222,7 @@ var ts; } } } + registerForUnusedIdentifiersCheck(node); } } function checkArithmeticOperandType(operand, type, diagnostic) { @@ -22474,7 +23233,8 @@ var ts; return true; } function isReadonlySymbol(symbol) { - return symbol.flags & 4 && (getDeclarationFlagsFromSymbol(symbol) & 64) !== 0 || + return symbol.isReadonly || + symbol.flags & 4 && (getDeclarationFlagsFromSymbol(symbol) & 64) !== 0 || symbol.flags & 3 && (getDeclarationFlagsFromSymbol(symbol) & 2048) !== 0 || symbol.flags & 98304 && !(symbol.flags & 65536) || (symbol.flags & 8) !== 0; @@ -22662,14 +23422,14 @@ var ts; } function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, contextualMapper) { if (property.kind === 253 || property.kind === 254) { - var name_14 = property.name; - if (name_14.kind === 140) { - checkComputedPropertyName(name_14); + var name_15 = property.name; + if (name_15.kind === 140) { + checkComputedPropertyName(name_15); } - if (isComputedNonLiteralName(name_14)) { + if (isComputedNonLiteralName(name_15)) { return undefined; } - var text = getTextOfPropertyName(name_14); + var text = getTextOfPropertyName(name_15); var type = isTypeAny(objectLiteralType) ? objectLiteralType : getTypeOfPropertyOfType(objectLiteralType, text) || @@ -22684,7 +23444,7 @@ var ts; } } else { - error(name_14, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_14)); + error(name_15, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_15)); } } else { @@ -22744,6 +23504,10 @@ var ts; if (exprOrAssignment.kind === 254) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { + if (strictNullChecks && + !(getCombinedTypeFlags(checkExpression(prop.objectAssignmentInitializer)) & 32)) { + sourceType = getTypeWithFacts(sourceType, 131072); + } checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); } target = exprOrAssignment.name; @@ -22880,7 +23644,7 @@ var ts; case 90: return checkInExpression(left, right, leftType, rightType); case 51: - return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 126) : rightType; + return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 112) : rightType; case 52: return getUnionType([getNonNullableType(leftType), rightType]); case 56: @@ -22980,7 +23744,7 @@ var ts; } function checkStringLiteralExpression(node) { var contextualType = getContextualType(node); - if (contextualType && contextualTypeIsStringLiteralType(contextualType)) { + if (contextualType && isStringLiteralUnionType(contextualType)) { return getStringLiteralTypeForText(node.text); } return stringType; @@ -23223,9 +23987,9 @@ var ts; else if (parameterName) { var hasReportedError = false; for (var _i = 0, _a = parent.parameters; _i < _a.length; _i++) { - var name_15 = _a[_i].name; - if (ts.isBindingPattern(name_15) && - checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_15, parameterName, typePredicate.parameterName)) { + var name_16 = _a[_i].name; + if (ts.isBindingPattern(name_16) && + checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_16, parameterName, typePredicate.parameterName)) { hasReportedError = true; break; } @@ -23253,15 +24017,15 @@ var ts; } function checkIfTypePredicateVariableIsDeclaredInBindingPattern(pattern, predicateVariableNode, predicateVariableName) { for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) { - var name_16 = _a[_i].name; - if (name_16.kind === 69 && - name_16.text === predicateVariableName) { + var name_17 = _a[_i].name; + if (name_17.kind === 69 && + name_17.text === predicateVariableName) { error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName); return true; } - else if (name_16.kind === 168 || - name_16.kind === 167) { - if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_16, predicateVariableNode, predicateVariableName)) { + else if (name_17.kind === 168 || + name_17.kind === 167) { + if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_17, predicateVariableNode, predicateVariableName)) { return true; } } @@ -23309,6 +24073,9 @@ var ts; checkAsyncFunctionReturnType(node); } } + if (!node.body) { + checkUnusedTypeParameters(node); + } } } function checkClassForDuplicateDeclarations(node) { @@ -23326,8 +24093,8 @@ var ts; } } else { - var static = ts.forEach(member.modifiers, function (m) { return m.kind === 113; }); - var names = static ? staticNames : instanceNames; + var isStatic = ts.forEach(member.modifiers, function (m) { return m.kind === 113; }); + var names = isStatic ? staticNames : instanceNames; var memberName = member.name && ts.getPropertyNameForPropertyNameNode(member.name); if (memberName) { switch (member.kind) { @@ -23436,6 +24203,7 @@ var ts; checkSignatureDeclaration(node); checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node); checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); var symbol = getSymbolOfNode(node); var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind); if (node === firstDeclaration) { @@ -23539,13 +24307,14 @@ var ts; 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); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getThisTypeOfDeclaration, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } if (node.parent.kind !== 171) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } else { checkNodeDeferred(node); @@ -23560,6 +24329,7 @@ var ts; } function checkAccessorDeferred(node) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } function checkMissingDeclaration(node) { checkDecorators(node); @@ -23584,12 +24354,14 @@ var ts; 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); + if (type !== unknownType) { + if (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); + } } } } @@ -23729,7 +24501,6 @@ var ts; } } } - 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++) { @@ -23754,7 +24525,7 @@ var ts; duplicateFunctionDeclaration = true; } } - else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { + else if (previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { reportImplementationExpectedError(previousDeclaration); } if (ts.nodeIsPresent(node.body)) { @@ -23781,7 +24552,7 @@ var ts; error(declaration.name, ts.Diagnostics.Duplicate_function_implementation); }); } - if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && + if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && !(lastSeenNonAmbientDeclaration.flags & 128) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } @@ -23872,7 +24643,7 @@ var ts; } function checkNonThenableType(type, location, message) { type = getWidenedType(type); - if (!isTypeAny(type) && isTypeAssignableTo(type, getGlobalThenableType())) { + if (!isTypeAny(type) && !isTypeNever(type) && isTypeAssignableTo(type, getGlobalThenableType())) { if (location) { if (!message) { message = ts.Diagnostics.Operand_for_await_does_not_have_a_valid_callable_then_member; @@ -23884,37 +24655,39 @@ var ts; return type; } function getPromisedType(promise) { - if (promise.flags & 1) { + if (isTypeAny(promise)) { return undefined; } - if ((promise.flags & 4096) && promise.target === tryGetGlobalPromiseType()) { - return promise.typeArguments[0]; + if (promise.flags & 4096) { + if (promise.target === tryGetGlobalPromiseType() + || promise.target === getGlobalPromiseLikeType()) { + 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)) { + if (!thenFunction || isTypeAny(thenFunction)) { return undefined; } - var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0) : emptyArray; + var thenSignatures = getSignaturesOfType(thenFunction, 0); if (thenSignatures.length === 0) { return undefined; } var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072); - if (onfulfilledParameterType.flags & 1) { + if (isTypeAny(onfulfilledParameterType)) { return undefined; } var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0); if (onfulfilledParameterSignatures.length === 0) { return undefined; } - var valueParameterType = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); - return valueParameterType; + return getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); } function getTypeOfFirstParameterOfSignature(signature) { - return getTypeAtPosition(signature, 0); + return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : neverType; } function getAwaitedType(type) { return checkAwaitedType(type, undefined, undefined); @@ -24130,12 +24903,149 @@ var ts; getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } } + registerForUnusedIdentifiersCheck(node); + } + function registerForUnusedIdentifiersCheck(node) { + if (deferredUnusedIdentifierNodes) { + deferredUnusedIdentifierNodes.push(node); + } + } + function checkUnusedIdentifiers() { + if (deferredUnusedIdentifierNodes) { + for (var _i = 0, deferredUnusedIdentifierNodes_1 = deferredUnusedIdentifierNodes; _i < deferredUnusedIdentifierNodes_1.length; _i++) { + var node = deferredUnusedIdentifierNodes_1[_i]; + switch (node.kind) { + case 256: + case 225: + checkUnusedModuleMembers(node); + break; + case 221: + case 192: + checkUnusedClassMembers(node); + checkUnusedTypeParameters(node); + break; + case 222: + checkUnusedTypeParameters(node); + break; + case 199: + case 227: + case 206: + case 207: + case 208: + checkUnusedLocalsAndParameters(node); + break; + case 148: + case 179: + case 220: + case 180: + case 147: + case 149: + case 150: + if (node.body) { + checkUnusedLocalsAndParameters(node); + } + checkUnusedTypeParameters(node); + break; + case 146: + case 151: + case 152: + case 153: + case 156: + case 157: + checkUnusedTypeParameters(node); + break; + } + ; + } + } + } + function checkUnusedLocalsAndParameters(node) { + if (node.parent.kind !== 222 && noUnusedIdentifiers && !ts.isInAmbientContext(node)) { + var _loop_1 = function(key) { + if (ts.hasProperty(node.locals, key)) { + var local_1 = node.locals[key]; + if (!local_1.isReferenced) { + if (local_1.valueDeclaration && local_1.valueDeclaration.kind === 142) { + var parameter = local_1.valueDeclaration; + if (compilerOptions.noUnusedParameters && + !ts.isParameterPropertyDeclaration(parameter) && + !parameterNameStartsWithUnderscore(parameter)) { + error(local_1.valueDeclaration.name, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); + } + } + else if (compilerOptions.noUnusedLocals) { + ts.forEach(local_1.declarations, function (d) { return error(d.name || d, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); }); + } + } + } + }; + for (var key in node.locals) { + _loop_1(key); + } + } + } + function parameterNameStartsWithUnderscore(parameter) { + return parameter.name && parameter.name.kind === 69 && parameter.name.text.charCodeAt(0) === 95; + } + function checkUnusedClassMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.members) { + for (var _i = 0, _a = node.members; _i < _a.length; _i++) { + var member = _a[_i]; + if (member.kind === 147 || member.kind === 145) { + if (!member.symbol.isReferenced && member.flags & 8) { + error(member.name, ts.Diagnostics._0_is_declared_but_never_used, member.symbol.name); + } + } + else if (member.kind === 148) { + for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) { + var parameter = _c[_b]; + if (!parameter.symbol.isReferenced && parameter.flags & 8) { + error(parameter.name, ts.Diagnostics._0_is_declared_but_never_used, parameter.symbol.name); + } + } + } + } + } + } + } + function checkUnusedTypeParameters(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.typeParameters) { + for (var _i = 0, _a = node.typeParameters; _i < _a.length; _i++) { + var typeParameter = _a[_i]; + if (!typeParameter.symbol.isReferenced) { + error(typeParameter.name, ts.Diagnostics._0_is_declared_but_never_used, typeParameter.symbol.name); + } + } + } + } + } + function checkUnusedModuleMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + for (var key in node.locals) { + if (ts.hasProperty(node.locals, key)) { + var local = node.locals[key]; + if (!local.isReferenced && !local.exportSymbol) { + for (var _i = 0, _a = local.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + if (!ts.isAmbientModule(declaration)) { + error(declaration.name, ts.Diagnostics._0_is_declared_but_never_used, local.name); + } + } + } + } + } + } } function checkBlock(node) { if (node.kind === 199) { checkGrammarStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkCollisionWithArgumentsInGeneratedCode(node) { if (!ts.hasDeclaredRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { @@ -24255,8 +25165,8 @@ var ts; container.kind === 225 || container.kind === 256); if (!namesShareScope) { - var name_17 = symbolToString(localDeclarationSymbol); - error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_17, name_17); + var name_18 = symbolToString(localDeclarationSymbol); + error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_18, name_18); } } } @@ -24326,8 +25236,8 @@ var ts; } var parent_11 = node.parent.parent; var parentType = getTypeForBindingElementParent(parent_11); - var name_18 = node.propertyName || node.name; - var property = getPropertyOfType(parentType, getTextOfPropertyName(name_18)); + var name_19 = node.propertyName || node.name; + var property = getPropertyOfType(parentType, getTextOfPropertyName(name_19)); if (parent_11.initializer && property && getParentOfSymbol(property)) { checkClassPropertyAccess(parent_11, parent_11.initializer, parentType, property); } @@ -24460,6 +25370,9 @@ var ts; if (node.incrementor) checkExpression(node.incrementor); checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForOfStatement(node) { checkGrammarForInOrForOfStatement(node); @@ -24481,6 +25394,9 @@ var ts; } } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInStatement(node) { checkGrammarForInOrForOfStatement(node); @@ -24509,6 +25425,9 @@ var ts; error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter); } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInOrForOfVariableDeclaration(iterationStatement) { var variableDeclarationList = iterationStatement.initializer; @@ -24668,7 +25587,7 @@ var ts; } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; - return maybeTypeOfKind(unwrappedReturnType, 16 | 1); + return unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 16 | 1); } function checkReturnStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { @@ -24750,6 +25669,9 @@ var ts; } ts.forEach(clause.statements, checkSourceElement); }); + if (node.caseBlock.locals) { + registerForUnusedIdentifiersCheck(node.caseBlock); + } } function checkLabeledStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { @@ -24920,6 +25842,7 @@ var ts; } function checkClassExpressionDeferred(node) { ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassDeclaration(node) { if (!node.name && !(node.flags & 512)) { @@ -24927,6 +25850,7 @@ var ts; } checkClassLikeDeclaration(node); ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassLikeDeclaration(node) { checkGrammarClassDeclarationHeritageClauses(node); @@ -25167,6 +26091,7 @@ var ts; ts.forEach(node.members, checkSourceElement); if (produceDiagnostics) { checkTypeForDuplicateIndexSignatures(node); + checkUnusedTypeParameters(node); } } function checkTypeAliasDeclaration(node) { @@ -25456,7 +26381,7 @@ var ts; if (isAmbientExternalModule) { if (ts.isExternalModuleAugmentation(node)) { var checkBody = isGlobalAugmentation || (getSymbolOfNode(node).flags & 33554432); - if (checkBody) { + if (checkBody && node.body) { for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) { var statement = _a[_i]; checkModuleAugmentationElement(statement, isGlobalAugmentation); @@ -25481,7 +26406,15 @@ var ts; } } } - checkSourceElement(node.body); + if (compilerOptions.noImplicitAny && !node.body) { + reportImplicitAnyError(node, anyType); + } + if (node.body) { + checkSourceElement(node.body); + if (!ts.isGlobalScopeAugmentation(node)) { + registerForUnusedIdentifiersCheck(node); + } + } } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { @@ -25501,9 +26434,9 @@ var ts; break; case 169: case 218: - var name_19 = node.name; - if (ts.isBindingPattern(name_19)) { - for (var _b = 0, _c = name_19.elements; _b < _c.length; _b++) { + var name_20 = node.name; + if (ts.isBindingPattern(name_20)) { + for (var _b = 0, _c = name_20.elements; _b < _c.length; _b++) { var el = _c[_b]; checkModuleAugmentationElement(el, isGlobalAugmentation); } @@ -25917,9 +26850,17 @@ var ts; checkGrammarSourceFile(node); potentialThisCollisions.length = 0; deferredNodes = []; + deferredUnusedIdentifierNodes = produceDiagnostics && noUnusedIdentifiers ? [] : undefined; ts.forEach(node.statements, checkSourceElement); checkDeferredNodes(); + if (ts.isExternalModule(node)) { + registerForUnusedIdentifiersCheck(node); + } + if (!node.isDeclarationFile) { + checkUnusedIdentifiers(); + } deferredNodes = undefined; + deferredUnusedIdentifierNodes = undefined; if (ts.isExternalOrCommonJsModule(node)) { checkExternalModuleExports(node); } @@ -26206,6 +27147,13 @@ var ts; case 139: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 97: + var container = ts.getThisContainer(node, false); + if (ts.isFunctionLike(container)) { + var sig = getSignatureFromDeclaration(container); + if (sig.thisParameter) { + return sig.thisParameter; + } + } case 95: var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; @@ -26338,9 +27286,9 @@ var ts; function getRootSymbols(symbol) { if (symbol.flags & 268435456) { var symbols_3 = []; - var name_20 = symbol.name; + var name_21 = symbol.name; ts.forEach(getSymbolLinks(symbol).containingType.types, function (t) { - var symbol = getPropertyOfType(t, name_20); + var symbol = getPropertyOfType(t, name_21); if (symbol) { symbols_3.push(symbol); } @@ -26394,7 +27342,9 @@ var ts; var parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { if (parentSymbol.flags & 512 && parentSymbol.valueDeclaration.kind === 256) { - return parentSymbol.valueDeclaration; + if (parentSymbol.valueDeclaration === ts.getSourceFileOfNode(node)) { + return parentSymbol.valueDeclaration; + } } for (var n = node.parent; n; n = n.parent) { if ((n.kind === 225 || n.kind === 224) && getSymbolOfNode(n) === parentSymbol) { @@ -27041,7 +27991,10 @@ var ts; 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); + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern); + } + else if (node.kind === 142 && (flags & 92) && node.dotDotDotToken) { + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter); } if (flags & 256) { return checkGrammarAsyncModifier(node, lastAsync); @@ -27284,11 +28237,11 @@ var ts; var GetAccessor = 2; var SetAccessor = 4; var GetOrSetAccessor = GetAccessor | SetAccessor; - var _loop_1 = function(prop) { - var name_21 = prop.name; + var _loop_2 = function(prop) { + var name_22 = prop.name; if (prop.kind === 193 || - name_21.kind === 140) { - checkGrammarComputedPropertyName(name_21); + name_22.kind === 140) { + checkGrammarComputedPropertyName(name_22); } 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) }; @@ -27301,8 +28254,8 @@ var ts; 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_21.kind === 8) { - checkGrammarNumericLiteral(name_21); + if (name_22.kind === 8) { + checkGrammarNumericLiteral(name_22); } currentKind = Property; } @@ -27318,7 +28271,7 @@ var ts; else { ts.Debug.fail("Unexpected syntax kind:" + prop.kind); } - var effectiveName = ts.getPropertyNameForPropertyNameNode(name_21); + var effectiveName = ts.getPropertyNameForPropertyNameNode(name_22); if (effectiveName === undefined) { return "continue"; } @@ -27328,25 +28281,25 @@ var ts; else { var existingKind = seen[effectiveName]; if (currentKind === Property && existingKind === Property) { - grammarErrorOnNode(name_21, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name_21)); + grammarErrorOnNode(name_22, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name_22)); } else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { seen[effectiveName] = currentKind | existingKind; } else { - return { value: grammarErrorOnNode(name_21, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name) }; + return { value: grammarErrorOnNode(name_22, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name) }; } } else { - return { value: grammarErrorOnNode(name_21, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name) }; + return { value: grammarErrorOnNode(name_22, 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; + var state_3 = _loop_2(prop); + if (typeof state_3 === "object") return state_3.value; } } function checkGrammarJsxElement(node) { @@ -27357,12 +28310,12 @@ var ts; continue; } var jsxAttr = attr; - var name_22 = jsxAttr.name; - if (!ts.hasProperty(seen, name_22.text)) { - seen[name_22.text] = true; + var name_23 = jsxAttr.name; + if (!ts.hasProperty(seen, name_23.text)) { + seen[name_23.text] = true; } else { - return grammarErrorOnNode(name_22, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); + return grammarErrorOnNode(name_23, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); } var initializer = jsxAttr.initializer; if (initializer && initializer.kind === 248 && !initializer.expression) { @@ -28425,9 +29378,9 @@ var ts; var count = 0; while (true) { count++; - var name_23 = baseName + "_" + count; - if (!ts.hasProperty(currentIdentifiers, name_23)) { - return name_23; + var name_24 = baseName + "_" + count; + if (!ts.hasProperty(currentIdentifiers, name_24)) { + return name_24; } } } @@ -28695,21 +29648,26 @@ var ts; writeTextOfNode(currentText, node.name); } } - while (node.body.kind !== 226) { + while (node.body && 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; + if (node.body) { + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + else { + write(";"); + } } function writeTypeAliasDeclaration(node) { var prevEnclosingDeclaration = enclosingDeclaration; @@ -29909,19 +30867,19 @@ var ts; } function makeTempVariableName(flags) { if (flags && !(tempFlags & flags)) { - var name_24 = flags === 268435456 ? "_i" : "_n"; - if (isUniqueName(name_24)) { + var name_25 = flags === 268435456 ? "_i" : "_n"; + if (isUniqueName(name_25)) { tempFlags |= flags; - return name_24; + return name_25; } } while (true) { var count = tempFlags & 268435455; tempFlags++; if (count !== 8 && count !== 13) { - var name_25 = count < 26 ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26); - if (isUniqueName(name_25)) { - return name_25; + var name_26 = count < 26 ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26); + if (isUniqueName(name_26)) { + return name_26; } } } @@ -29971,6 +30929,8 @@ var ts; return generateNameForExportDefault(); case 192: return generateNameForClassExpression(); + default: + ts.Debug.fail(); } } function getGeneratedNameForNode(node) { @@ -30617,8 +31577,8 @@ var ts; } else if (declaration.kind === 234) { write(getGeneratedNameForNode(declaration.parent.parent.parent)); - var name_26 = declaration.propertyName || declaration.name; - var identifier = ts.getTextOfNodeFromSourceText(currentText, name_26); + var name_27 = declaration.propertyName || declaration.name; + var identifier = ts.getTextOfNodeFromSourceText(currentText, name_27); if (languageVersion === 0 && identifier === "default") { write('["default"]'); } @@ -30668,11 +31628,25 @@ var ts; } return false; } + function getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node) { + if (languageVersion >= 2) { + var parent_14 = node.parent; + if (parent_14.kind === 172 && parent_14.expression === node) { + parent_14 = parent_14.parent; + while (parent_14 && parent_14.kind !== 145) { + parent_14 = parent_14.parent; + } + return parent_14 && parent_14.kind === 145 && (parent_14.flags & 32) !== 0 && + parent_14.parent.kind === 192 ? parent_14.parent : undefined; + } + } + return undefined; + } function emitIdentifier(node) { if (convertedLoopState) { if (node.text == "arguments" && resolver.isArgumentsLocalBinding(node)) { - var name_27 = convertedLoopState.argumentsName || (convertedLoopState.argumentsName = makeUniqueName("arguments")); - write(name_27); + var name_28 = convertedLoopState.argumentsName || (convertedLoopState.argumentsName = makeUniqueName("arguments")); + write(name_28); return; } } @@ -30680,6 +31654,14 @@ var ts; write(node.text); } else if (isExpressionIdentifier(node)) { + var classExpression = getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node); + if (classExpression) { + var declaration = resolver.getReferencedValueDeclaration(node); + if (declaration === classExpression) { + write(getGeneratedNameForNode(declaration.name)); + return; + } + } emitExpressionIdentifier(node); } else if (isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node)) { @@ -31010,7 +31992,6 @@ var ts; function createPropertyAccessExpression(expression, name) { var result = ts.createSynthesizedNode(172); result.expression = parenthesizeForAccess(expression); - result.dotToken = ts.createSynthesizedNode(21); result.name = name; return result; } @@ -31056,9 +32037,9 @@ var ts; emitTrailingCommentsOfPosition(node.initializer.pos); emit(node.initializer); } - function isNamespaceExportReference(node) { + function isExportReference(node) { var container = resolver.getReferencedExportContainer(node); - return container && container.kind !== 256; + return !!container; } function isImportedReference(node) { var declaration = resolver.getReferencedImportDeclaration(node); @@ -31066,9 +32047,9 @@ var ts; } function emitShorthandPropertyAssignment(node) { writeTextOfNode(currentText, node.name); - if (languageVersion < 2 || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isNamespaceExportReference(node.name)) { + if (languageVersion < 2 || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isExportReference(node.name)) { write(": "); - emit(node.name); + emitExpressionIdentifier(node.name); } if (languageVersion >= 2 && node.objectAssignmentInitializer) { write(" = "); @@ -31117,13 +32098,16 @@ var ts; if (languageVersion === 2 && node.expression.kind === 95 && isInAsyncMethodWithSuperInES6(node)) { - var name_28 = ts.createSynthesizedNode(9); - name_28.text = node.name.text; - emitSuperAccessInAsyncMethod(node.expression, name_28); + var name_29 = ts.createSynthesizedNode(9); + name_29.text = node.name.text; + emitSuperAccessInAsyncMethod(node.expression, name_29); return; } emit(node.expression); - var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, node.dotToken); + var dotRangeStart = ts.nodeIsSynthesized(node.expression) ? -1 : node.expression.end; + var dotRangeEnd = ts.nodeIsSynthesized(node.expression) ? -1 : ts.skipTrivia(currentText, node.expression.end) + 1; + var dotToken = { pos: dotRangeStart, end: dotRangeEnd }; + var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, dotToken); var shouldEmitSpace = false; if (!indentedBeforeDot) { if (node.expression.kind === 8) { @@ -31141,7 +32125,7 @@ var ts; else { write("."); } - var indentedAfterDot = indentIfOnDifferentLines(node, node.dotToken, node.name); + var indentedAfterDot = indentIfOnDifferentLines(node, dotToken, node.name); emit(node.name); decreaseIndentIf(indentedBeforeDot, indentedAfterDot); } @@ -31514,7 +32498,6 @@ var ts; synthesizedLHS = ts.createSynthesizedNode(172, false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false); synthesizedLHS.expression = identifier; - synthesizedLHS.dotToken = leftHandSideExpression.dotToken; synthesizedLHS.name = leftHandSideExpression.name; write(", "); } @@ -32790,12 +33773,12 @@ var ts; function emitParameter(node) { if (languageVersion < 2) { if (ts.isBindingPattern(node.name)) { - var name_29 = createTempVariable(0); + var name_30 = createTempVariable(0); if (!tempParameters) { tempParameters = []; } - tempParameters.push(name_29); - emit(name_29); + tempParameters.push(name_30); + emit(name_30); } else { emit(node.name); @@ -32831,8 +33814,8 @@ var ts; emit(initializer); } write(";"); - tempIndex_1++; } + tempIndex_1++; } else if (initializer) { writeLine(); @@ -33218,7 +34201,7 @@ var ts; emitStart(property); emitStart(property.name); if (receiver) { - emit(receiver); + write(receiver); } else { if (property.flags & 32) { @@ -33501,12 +34484,15 @@ var ts; } var staticProperties = getInitializedProperties(node, true); var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192; - var tempVariable; + var generatedName; if (isClassExpressionWithStaticProperties) { - tempVariable = createAndRecordTempVariable(0); + generatedName = getGeneratedNameForNode(node.name); + var synthesizedNode = ts.createSynthesizedNode(69); + synthesizedNode.text = generatedName; + recordTempDeclaration(synthesizedNode); write("("); increaseIndent(); - emit(tempVariable); + emit(synthesizedNode); write(" = "); } write("class"); @@ -33546,11 +34532,11 @@ var ts; var property = staticProperties_1[_a]; write(","); writeLine(); - emitPropertyDeclaration(node, property, tempVariable, true); + emitPropertyDeclaration(node, property, generatedName, true); } write(","); writeLine(); - emit(tempVariable); + write(generatedName); decreaseIndent(); write(")"); } @@ -33586,7 +34572,11 @@ var ts; } } function emitClassLikeDeclarationBelowES6(node) { + var isES6ExportedClass = isES6ExportedDeclaration(node); if (node.kind === 221) { + if (isES6ExportedClass && !(node.flags & 512)) { + write("export "); + } if (!shouldHoistDeclarationInSystemJsModule(node)) { write("var "); } @@ -33650,9 +34640,15 @@ var ts; write(";"); } emitEnd(node); - if (node.kind === 221) { + if (node.kind === 221 && !isES6ExportedClass) { emitExportMemberAssignment(node); } + else if (isES6ExportedClass && (node.flags & 512)) { + writeLine(); + write("export default "); + emitDeclarationName(node); + write(";"); + } } function emitClassMemberPrefix(node, member) { emitDeclarationName(node); @@ -33948,10 +34944,10 @@ var ts; } if (parameters[i].dotDotDotToken) { var parameterType = parameters[i].type; - if (parameterType.kind === 160) { + if (parameterType && parameterType.kind === 160) { parameterType = parameterType.elementType; } - else if (parameterType.kind === 155 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + else if (parameterType && parameterType.kind === 155 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { parameterType = parameterType.typeArguments[0]; } else { @@ -33968,9 +34964,15 @@ var ts; } } function emitSerializedReturnTypeOfNode(node) { - if (node && ts.isFunctionLike(node) && node.type) { - emitSerializedTypeNode(node.type); - return; + if (node && ts.isFunctionLike(node)) { + if (node.type) { + emitSerializedTypeNode(node.type); + return; + } + else if (ts.isAsyncFunctionLike(node)) { + write("Promise"); + return; + } } write("void 0"); } @@ -34103,7 +35105,7 @@ var ts; } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 225) { + if (moduleDeclaration.body && moduleDeclaration.body.kind === 225) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -34144,6 +35146,7 @@ var ts; write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); + ts.Debug.assert(node.body !== undefined); if (node.body.kind === 226) { var saveConvertedLoopState = convertedLoopState; var saveTempFlags = tempFlags; @@ -34523,8 +35526,8 @@ var ts; else { for (var _c = 0, _d = node.exportClause.elements; _c < _d.length; _c++) { var specifier = _d[_c]; - var name_30 = (specifier.propertyName || specifier.name).text; - (exportSpecifiers[name_30] || (exportSpecifiers[name_30] = [])).push(specifier); + var name_31 = (specifier.propertyName || specifier.name).text; + (exportSpecifiers[name_31] || (exportSpecifiers[name_31] = [])).push(specifier); } } break; @@ -34562,9 +35565,9 @@ var ts; } function getExternalModuleNameText(importNode, emitRelativePathAsModuleName) { if (emitRelativePathAsModuleName) { - var name_31 = getExternalModuleNameFromDeclaration(host, resolver, importNode); - if (name_31) { - return "\"" + name_31 + "\""; + var name_32 = getExternalModuleNameFromDeclaration(host, resolver, importNode); + if (name_32) { + return "\"" + name_32 + "\""; } } var moduleName = ts.getExternalModuleName(importNode); @@ -34710,11 +35713,11 @@ var ts; var seen = {}; for (var i = 0; i < hoistedVars.length; i++) { var local = hoistedVars[i]; - var name_32 = local.kind === 69 + var name_33 = local.kind === 69 ? local : local.name; - if (name_32) { - var text = ts.unescapeIdentifier(name_32.text); + if (name_33) { + var text = ts.unescapeIdentifier(name_33.text); if (ts.hasProperty(seen, text)) { continue; } @@ -34793,15 +35796,15 @@ var ts; } if (node.kind === 218 || node.kind === 169) { if (shouldHoistVariable(node, false)) { - var name_33 = node.name; - if (name_33.kind === 69) { + var name_34 = node.name; + if (name_34.kind === 69) { if (!hoistedVars) { hoistedVars = []; } - hoistedVars.push(name_33); + hoistedVars.push(name_34); } else { - ts.forEachChild(name_33, visit); + ts.forEachChild(name_34, visit); } } return; @@ -35144,7 +36147,7 @@ var ts; } firstNonWhitespace = -1; } - else if (!ts.isWhiteSpace(c)) { + else if (!ts.isWhiteSpaceSingleLine(c)) { lastNonWhitespace = i; if (firstNonWhitespace === -1) { firstNonWhitespace = i; @@ -35711,13 +36714,9 @@ var ts; ts.emitTime = 0; ts.ioReadTime = 0; ts.ioWriteTime = 0; + ts.version = "2.0.0"; var emptyArray = []; - var defaultLibrarySearchPaths = [ - "types/", - "node_modules/", - "node_modules/@types/", - ]; - ts.version = "1.9.0"; + var defaultTypeRoots = ["node_modules/@types"]; function findConfigFile(searchPath, fileExists) { while (true) { var fileName = ts.combinePaths(searchPath, "tsconfig.json"); @@ -35842,9 +36841,32 @@ var ts; } return typesFilePath; } + if (state.compilerOptions.allowJs && jsonContent.main && typeof jsonContent.main === "string") { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0, jsonContent.main); + } + var mainFilePath = ts.normalizePath(ts.combinePaths(baseDirectory, jsonContent.main)); + return mainFilePath; + } return undefined; } var typeReferenceExtensions = [".d.ts"]; + function getEffectiveTypeRoots(options, host) { + if (options.typeRoots) { + return options.typeRoots; + } + var currentDirectory; + if (options.configFilePath) { + currentDirectory = ts.getDirectoryPath(options.configFilePath); + } + else if (host.getCurrentDirectory) { + currentDirectory = host.getCurrentDirectory(); + } + if (!currentDirectory) { + return undefined; + } + return ts.map(defaultTypeRoots, function (d) { return ts.combinePaths(currentDirectory, d); }); + } function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host) { var traceEnabled = isTraceEnabled(options, host); var moduleResolutionState = { @@ -35853,35 +36875,34 @@ var ts; skipTsx: true, traceEnabled: traceEnabled }; - var rootDir = options.typesRoot || (options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : (host.getCurrentDirectory && host.getCurrentDirectory())); + var typeRoots = getEffectiveTypeRoots(options, host); if (traceEnabled) { if (containingFile === undefined) { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set, typeReferenceDirectiveName); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, typeRoots); } } else { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set, typeReferenceDirectiveName, containingFile); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, typeRoots); } } } 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); + if (typeRoots && typeRoots.length) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", ")); + } + var primarySearchPaths = typeRoots; + for (var _i = 0, primarySearchPaths_1 = primarySearchPaths; _i < primarySearchPaths_1.length; _i++) { + var typeRoot = primarySearchPaths_1[_i]; + var candidate = ts.combinePaths(typeRoot, typeReferenceDirectiveName); var candidateDirectory = ts.getDirectoryPath(candidate); var resolvedFile_1 = loadNodeModuleFromDirectory(typeReferenceExtensions, candidate, failedLookupLocations, !directoryProbablyExists(candidateDirectory, host), moduleResolutionState); if (resolvedFile_1) { @@ -35905,9 +36926,6 @@ var ts; 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); @@ -36251,11 +37269,12 @@ var ts; 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); + var supportedExtensions = ts.getSupportedExtensions(state.compilerOptions); + var result = loadModuleFromFile(candidate, supportedExtensions, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } - result = loadNodeModuleFromDirectory(ts.supportedTypeScriptExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); + result = loadNodeModuleFromDirectory(supportedExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } @@ -36265,10 +37284,15 @@ var ts; 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 packageResult = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state); + if (packageResult && ts.hasTypeScriptFileExtension(packageResult)) { + return packageResult; + } + else { + var typesResult = loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state); + if (typesResult || packageResult) { + return typesResult || packageResult; + } } } var parentPath = ts.getDirectoryPath(directory); @@ -36400,25 +37424,12 @@ var ts; } } } - function getDefaultTypeDirectiveNames(rootPath) { - var localTypes = ts.combinePaths(rootPath, "types"); - var npmTypes = ts.combinePaths(rootPath, "node_modules/@types"); - var result = []; - if (ts.sys.directoryExists(localTypes)) { - result = result.concat(ts.sys.getDirectories(localTypes)); - } - if (ts.sys.directoryExists(npmTypes)) { - result = result.concat(ts.sys.getDirectories(npmTypes)); - } - return result; - } 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 { - getDefaultTypeDirectiveNames: getDefaultTypeDirectiveNames, getSourceFile: getSourceFile, getDefaultLibLocation: getDefaultLibLocation, getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); }, @@ -36431,6 +37442,7 @@ var ts; 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); }, + getDirectories: function (path) { return ts.sys.getDirectories(path); }, realpath: realpath }; } @@ -36473,32 +37485,41 @@ var ts; var resolutions = []; var cache = {}; for (var _i = 0, names_1 = names; _i < names_1.length; _i++) { - var name_34 = names_1[_i]; + var name_35 = names_1[_i]; var result = void 0; - if (ts.hasProperty(cache, name_34)) { - result = cache[name_34]; + if (ts.hasProperty(cache, name_35)) { + result = cache[name_35]; } else { - result = loader(name_34, containingFile); - cache[name_34] = result; + result = loader(name_35, containingFile); + cache[name_35] = result; } resolutions.push(result); } return resolutions; } - function getDefaultTypeDirectiveNames(options, rootFiles, host) { + function getInferredTypesRoot(options, rootFiles, host) { + return computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); + } + function getAutomaticTypeDirectiveNames(options, rootFiles, host) { if (options.types) { return options.types; } - if (host && host.getDefaultTypeDirectiveNames) { - var commonRoot = computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); - if (commonRoot) { - return host.getDefaultTypeDirectiveNames(commonRoot); + var result = []; + if (host.directoryExists && host.getDirectories) { + var typeRoots = getEffectiveTypeRoots(options, host); + if (typeRoots) { + for (var _i = 0, typeRoots_1 = typeRoots; _i < typeRoots_1.length; _i++) { + var root = typeRoots_1[_i]; + if (host.directoryExists(root)) { + result = result.concat(host.getDirectories(root)); + } + } } } - return undefined; + return result; } - ts.getDefaultTypeDirectiveNames = getDefaultTypeDirectiveNames; + ts.getAutomaticTypeDirectiveNames = getAutomaticTypeDirectiveNames; function createProgram(rootNames, options, host, oldProgram) { var program; var files = []; @@ -36508,6 +37529,10 @@ var ts; var classifiableNames; var resolvedTypeReferenceDirectives = {}; var fileProcessingDiagnostics = ts.createDiagnosticCollection(); + var maxNodeModulesJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 2; + var currentNodeModulesJsDepth = 0; + var modulesWithElidedImports = {}; + var sourceFilesFoundSearchingNodeModules = {}; var start = new Date().getTime(); host = host || createCompilerHost(options); var skipDefaultLib = options.noLib; @@ -36535,9 +37560,11 @@ var ts; var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? ts.createFileMap(function (fileName) { return fileName.toLowerCase(); }) : undefined; if (!tryReuseStructureFromOldProgram()) { ts.forEach(rootNames, function (name) { return processRootFile(name, false); }); - var typeReferences = getDefaultTypeDirectiveNames(options, rootNames, host); + var typeReferences = getAutomaticTypeDirectiveNames(options, rootNames, host); if (typeReferences) { - var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, undefined); + var inferredRoot = getInferredTypesRoot(options, rootNames, host); + var containingFilename = ts.combinePaths(inferredRoot, "__inferred type names__.ts"); + var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename); for (var i = 0; i < typeReferences.length; i++) { processTypeReferenceDirective(typeReferences[i], resolutions[i]); } @@ -36600,8 +37627,8 @@ var ts; if (!classifiableNames) { getTypeChecker(); classifiableNames = {}; - for (var _i = 0, files_3 = files; _i < files_3.length; _i++) { - var sourceFile = files_3[_i]; + for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { + var sourceFile = files_2[_i]; ts.copyMap(sourceFile.classifiableNames, classifiableNames); } } @@ -36620,10 +37647,10 @@ var ts; (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) || + (oldOptions.maxNodeModuleJsDepth !== options.maxNodeModuleJsDepth) || + !ts.arrayIsEqualTo(oldOptions.typeRoots, oldOptions.typeRoots) || !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { return false; @@ -36715,6 +37742,7 @@ var ts; getSourceFile: program.getSourceFile, getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, + isSourceFileFromExternalLibrary: function (file) { return !!ts.lookUp(sourceFilesFoundSearchingNodeModules, file.path); }, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked }; @@ -36915,8 +37943,20 @@ var ts; } break; case 145: - diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); - return true; + var propertyDeclaration = node; + if (propertyDeclaration.modifiers) { + for (var _i = 0, _a = propertyDeclaration.modifiers; _i < _a.length; _i++) { + var modifier = _a[_i]; + if (modifier.kind !== 113) { + diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); + return true; + } + } + } + if (checkTypeAnnotation(node.type)) { + return true; + } + break; case 224: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; @@ -37048,9 +38088,12 @@ var ts; (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); + var body = node.body; + if (body) { + for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + collectModuleReferences(statement, true); + } } } } @@ -37119,6 +38162,12 @@ var ts; 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 && ts.lookUp(modulesWithElidedImports, file_1.path)) { + if (currentNodeModulesJsDepth < maxNodeModulesJsDepth) { + modulesWithElidedImports[file_1.path] = false; + processImportedModules(file_1, ts.getDirectoryPath(fileName)); + } + } return file_1; } var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { @@ -37197,7 +38246,7 @@ var ts; } } else { - fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_name_0, typeReferenceDirective)); + fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_type_definition_file_for_0, typeReferenceDirective)); } if (saveResolution) { resolvedTypeReferenceDirectives[typeReferenceDirective] = resolvedTypeReferenceDirective; @@ -37227,11 +38276,25 @@ var ts; 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) { - findSourceFile(resolution.resolvedFileName, ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName), false, false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + var resolvedPath = resolution ? ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName) : undefined; + var isFromNodeModulesSearch = resolution && resolution.isExternalLibraryImport; + var isJsFileFromNodeModules = isFromNodeModulesSearch && ts.hasJavaScriptFileExtension(resolution.resolvedFileName); + if (isFromNodeModulesSearch) { + sourceFilesFoundSearchingNodeModules[resolvedPath] = true; + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth++; + } + var elideImport = isJsFileFromNodeModules && currentNodeModulesJsDepth > maxNodeModulesJsDepth; + var shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport; + if (elideImport) { + modulesWithElidedImports[file.path] = true; + } + else if (shouldAddFile) { + findSourceFile(resolution.resolvedFileName, resolvedPath, false, false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth--; } } } @@ -37362,9 +38425,6 @@ var ts; var span = ts.getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator); programDiagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); } - 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) { if (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")); @@ -37989,24 +39049,24 @@ var ts; switch (n.kind) { case 199: if (!ts.isFunctionBlock(n)) { - var parent_14 = n.parent; + var parent_15 = 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)); + if (parent_15.kind === 204 || + parent_15.kind === 207 || + parent_15.kind === 208 || + parent_15.kind === 206 || + parent_15.kind === 203 || + parent_15.kind === 205 || + parent_15.kind === 212 || + parent_15.kind === 252) { + addOutliningSpan(parent_15, openBrace, closeBrace, autoCollapse(n)); break; } - if (parent_14.kind === 216) { - var tryStatement = parent_14; + if (parent_15.kind === 216) { + var tryStatement = parent_15; if (tryStatement.tryBlock === n) { - addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); + addOutliningSpan(parent_15, openBrace, closeBrace, autoCollapse(n)); break; } else if (tryStatement.finallyBlock === n) { @@ -38069,10 +39129,10 @@ var ts; ts.forEach(program.getSourceFiles(), function (sourceFile) { cancellationToken.throwIfCancellationRequested(); var nameToDeclarations = sourceFile.getNamedDeclarations(); - for (var name_35 in nameToDeclarations) { - var declarations = ts.getProperty(nameToDeclarations, name_35); + for (var name_36 in nameToDeclarations) { + var declarations = ts.getProperty(nameToDeclarations, name_36); if (declarations) { - var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_35); + var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_36); if (!matches) { continue; } @@ -38083,14 +39143,14 @@ var ts; if (!containers) { return undefined; } - matches = patternMatcher.getMatches(containers, name_35); + matches = patternMatcher.getMatches(containers, name_36); if (!matches) { continue; } } var fileName = sourceFile.fileName; var matchKind = bestMatchKind(matches); - rawItems.push({ name: name_35, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration }); + rawItems.push({ name: name_36, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration }); } } } @@ -38220,622 +39280,538 @@ var ts; (function (ts) { var NavigationBar; (function (NavigationBar) { - function getNavigationBarItems(sourceFile, compilerOptions) { - if (ts.isSourceFileJavaScript(sourceFile)) { - return getJsNavigationBarItems(sourceFile, compilerOptions); + function getNavigationBarItems(sourceFile) { + curSourceFile = sourceFile; + var result = ts.map(topLevelItems(rootNavigationBarNode(sourceFile)), convertToTopLevelItem); + curSourceFile = undefined; + return result; + } + NavigationBar.getNavigationBarItems = getNavigationBarItems; + var curSourceFile; + function nodeText(node) { + return node.getText(curSourceFile); + } + function navigationBarNodeKind(n) { + return n.node.kind; + } + function pushChild(parent, child) { + if (parent.children) { + parent.children.push(child); } - return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); - function getIndent(node) { - var indent = 1; - 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++; + else { + parent.children = [child]; + } + } + var parentsStack = []; + var parent; + function rootNavigationBarNode(sourceFile) { + ts.Debug.assert(!parentsStack.length); + var root = { node: sourceFile, additionalNodes: undefined, parent: undefined, children: undefined, indent: 0 }; + parent = root; + for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + addChildrenRecursively(statement); + } + endNode(); + ts.Debug.assert(!parent && !parentsStack.length); + return root; + } + function addLeafNode(node) { + pushChild(parent, emptyNavigationBarNode(node)); + } + function emptyNavigationBarNode(node) { + return { + node: node, + additionalNodes: undefined, + parent: parent, + children: undefined, + indent: parent.indent + 1 + }; + } + function startNode(node) { + var navNode = emptyNavigationBarNode(node); + pushChild(parent, navNode); + parentsStack.push(parent); + parent = navNode; + } + function endNode() { + if (parent.children) { + mergeChildren(parent.children); + sortChildren(parent.children); + } + parent = parentsStack.pop(); + } + function addNodeWithRecursiveChild(node, child) { + startNode(node); + addChildrenRecursively(child); + endNode(); + } + function addChildrenRecursively(node) { + if (!node || ts.isToken(node)) { + return; + } + switch (node.kind) { + case 148: + var ctr = node; + addNodeWithRecursiveChild(ctr, ctr.body); + for (var _i = 0, _a = ctr.parameters; _i < _a.length; _i++) { + var param = _a[_i]; + if (ts.isParameterPropertyDeclaration(param)) { + addLeafNode(param); + } } - 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 147: + case 149: + case 150: + case 146: + if (!ts.hasDynamicName(node)) { + addNodeWithRecursiveChild(node, node.body); + } + break; + case 145: + case 144: + if (!ts.hasDynamicName(node)) { + addLeafNode(node); + } + break; + case 231: + var importClause = node; + if (importClause.name) { + addLeafNode(importClause); + } + var namedBindings = importClause.namedBindings; + if (namedBindings) { + if (namedBindings.kind === 232) { + addLeafNode(namedBindings); + } + else { + for (var _b = 0, _c = namedBindings.elements; _b < _c.length; _b++) { + var element = _c[_b]; + addLeafNode(element); } - 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: - case 223: - 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 localeCompareFix(ts.getPropertyNameForPropertyNameNode(n1.name), ts.getPropertyNameForPropertyNameNode(n2.name)); + break; + case 169: + case 218: + var decl = node; + var name_37 = decl.name; + if (ts.isBindingPattern(name_37)) { + addChildrenRecursively(name_37); } - else if (n1.name) { - return 1; - } - else if (n2.name) { - return -1; + else if (decl.initializer && isFunctionOrClassExpression(decl.initializer)) { + addChildrenRecursively(decl.initializer); } else { - return n1.kind - n2.kind; + addNodeWithRecursiveChild(decl, decl.initializer); } - }); - function localeCompareFix(a, b) { - var cmp = a.toLowerCase().localeCompare(b.toLowerCase()); - if (cmp !== 0) - return cmp; - return a < b ? 1 : a > b ? -1 : 0; - } - } - 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 180: + case 220: + case 179: + addNodeWithRecursiveChild(node, node.body); + break; + case 224: + startNode(node); + for (var _d = 0, _e = node.members; _d < _e.length; _d++) { + var member = _e[_d]; + if (!isComputedProperty(member)) { + addLeafNode(member); + } + } + endNode(); + break; + case 221: + case 192: + case 222: + startNode(node); + for (var _f = 0, _g = node.members; _f < _g.length; _f++) { + var member = _g[_f]; + addChildrenRecursively(member); + } + endNode(); + break; + case 225: + addNodeWithRecursiveChild(node, getInteriorModule(node).body); + break; + case 238: + case 229: + case 153: + case 151: + case 152: + case 223: + addLeafNode(node); + break; + default: + if (node.jsDocComments) { + for (var _h = 0, _j = node.jsDocComments; _h < _j.length; _h++) { + var jsDocComment = _j[_h]; + for (var _k = 0, _l = jsDocComment.tags; _k < _l.length; _k++) { + var tag = _l[_k]; + if (tag.kind === 279) { + addLeafNode(tag); } } - 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; + } } - } + ts.forEachChild(node, addChildrenRecursively); } - 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)) { + } + function mergeChildren(children) { + var nameToItems = {}; + ts.filterMutate(children, function (child) { + var decl = child.node; + var name = decl.name && nodeText(decl.name); + if (!name) { + return true; + } + var itemsWithSameName = ts.getProperty(nameToItems, name); + if (!itemsWithSameName) { + nameToItems[name] = child; + return true; + } + if (itemsWithSameName instanceof Array) { + for (var _i = 0, itemsWithSameName_1 = itemsWithSameName; _i < itemsWithSameName_1.length; _i++) { + var itemWithSameName = itemsWithSameName_1[_i]; + if (tryMerge(itemWithSameName, child)) { + return false; + } + } + itemsWithSameName.push(child); + return true; + } + else { + var itemWithSameName = itemsWithSameName; + if (tryMerge(itemWithSameName, child)) { + return false; + } + nameToItems[name] = [itemWithSameName, child]; + return true; + } + function tryMerge(a, b) { + if (shouldReallyMerge(a.node, b.node)) { + merge(a, b); return true; } + return false; } - 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; - } - } + }); + function shouldReallyMerge(a, b) { + return a.kind === b.kind && (a.kind !== 225 || areSameModule(a, b)); + function areSameModule(a, b) { + if (a.body.kind !== b.body.kind) { + return false; } - } - 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); - } - } + if (a.body.kind !== 225) { + return true; } + return areSameModule(a.body, b.body); } - 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); - } + target.additionalNodes = target.additionalNodes || []; + target.additionalNodes.push(source.node); + if (source.additionalNodes) { + (_a = target.additionalNodes).push.apply(_a, source.additionalNodes); + } + target.children = ts.concatenate(target.children, source.children); + if (target.children) { + mergeChildren(target.children); + sortChildren(target.children); + } + var _a; + } + } + function sortChildren(children) { + children.sort(compareChildren); + } + function compareChildren(child1, child2) { + var name1 = tryGetName(child1.node), name2 = tryGetName(child2.node); + if (name1 && name2) { + var cmp = localeCompareFix(name1, name2); + return cmp !== 0 ? cmp : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + else { + return name1 ? 1 : name2 ? -1 : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + } + var collator = typeof Intl === "undefined" ? undefined : new Intl.Collator(); + var localeCompareIsCorrect = collator && collator.compare("a", "B") < 0; + var localeCompareFix = localeCompareIsCorrect ? collator.compare : function (a, b) { + for (var i = 0; i < Math.min(a.length, b.length); i++) { + var chA = a.charAt(i), chB = b.charAt(i); + if (chA === "\"" && chB === "'") { + return 1; + } + if (chA === "'" && chB === "\"") { + return -1; + } + var cmp = chA.toLocaleLowerCase().localeCompare(chB.toLocaleLowerCase()); + if (cmp !== 0) { + return cmp; } } - 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 224: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.enumElement); - case 255: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 225: - return createItem(node, getModuleName(node), ts.ScriptElementKind.moduleElement); - case 222: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.interfaceElement); - case 223: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.typeElement); - 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 221: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.classElement); - case 220: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); - case 218: - case 169: - var variableDeclarationNode = void 0; - var name_36; - if (node.kind === 169) { - name_36 = 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_36 = node.name; - } - if (ts.isConst(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.constElement); - } - else if (ts.isLet(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.letElement); - } - else { - return createItem(node, getTextOfNode(name_36), 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)]); - } + return a.length - b.length; + }; + function tryGetName(node) { + if (node.kind === 225) { + return getModuleName(node); } - function isEmpty(text) { - return !text || text.trim() === ""; + var decl = node; + if (decl.name) { + return ts.getPropertyNameForPropertyNameNode(decl.name); } - function getNavigationBarItem(text, kind, kindModifiers, spans, childItems, indent) { - if (childItems === void 0) { childItems = []; } - if (indent === void 0) { indent = 0; } - if (isEmpty(text)) { + switch (node.kind) { + case 179: + case 180: + case 192: + return getFunctionOrClassName(node); + case 279: + return getJSDocTypedefTagName(node); + default: return undefined; + } + } + function getItemName(node) { + if (node.kind === 225) { + return getModuleName(node); + } + var name = node.name; + if (name) { + var text = nodeText(name); + if (text.length > 0) { + return text; } + } + switch (node.kind) { + case 256: + var sourceFile = node; + return ts.isExternalModule(sourceFile) + ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\"" + : ""; + case 180: + case 220: + case 179: + case 221: + case 192: + if (node.flags & 512) { + return "default"; + } + return getFunctionOrClassName(node); + case 148: + return "constructor"; + case 152: + return "new()"; + case 151: + return "()"; + case 153: + return "[]"; + case 279: + return getJSDocTypedefTagName(node); + default: + return ""; + } + } + function getJSDocTypedefTagName(node) { + if (node.name) { + return node.name.text; + } + else { + var parentNode = node.parent && node.parent.parent; + if (parentNode && parentNode.kind === 200) { + if (parentNode.declarationList.declarations.length > 0) { + var nameIdentifier = parentNode.declarationList.declarations[0].name; + if (nameIdentifier.kind === 69) { + return nameIdentifier.text; + } + } + } + return ""; + } + } + function topLevelItems(root) { + var topLevel = []; + function recur(item) { + if (isTopLevel(item)) { + topLevel.push(item); + if (item.children) { + for (var _i = 0, _a = item.children; _i < _a.length; _i++) { + var child = _a[_i]; + recur(child); + } + } + } + } + recur(root); + return topLevel; + function isTopLevel(item) { + switch (navigationBarNodeKind(item)) { + case 221: + case 192: + case 224: + case 222: + case 225: + case 256: + case 223: + case 279: + return true; + case 148: + case 147: + case 149: + case 150: + return hasSomeImportantChild(item); + case 180: + case 220: + case 179: + return isTopLevelFunctionDeclaration(item); + default: + return false; + } + function isTopLevelFunctionDeclaration(item) { + if (!item.node.body) { + return false; + } + switch (navigationBarNodeKind(item.parent)) { + case 226: + case 256: + case 147: + case 148: + return true; + default: + return hasSomeImportantChild(item); + } + } + function hasSomeImportantChild(item) { + return ts.forEach(item.children, function (child) { + var childKind = navigationBarNodeKind(child); + return childKind !== 218 && childKind !== 169; + }); + } + } + } + var emptyChildItemArray = []; + function convertToTopLevelItem(n) { + return { + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: ts.getNodeModifiers(n.node), + spans: getSpans(n), + childItems: ts.map(n.children, convertToChildItem) || emptyChildItemArray, + indent: n.indent, + bolded: false, + grayed: false + }; + function convertToChildItem(n) { return { - text: text, - kind: kind, - kindModifiers: kindModifiers, - spans: spans, - childItems: childItems, - indent: indent, + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: ts.getNodeModifiers(n.node), + spans: getSpans(n), + childItems: emptyChildItemArray, + indent: 0, 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 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)); + function getSpans(n) { + var spans = [getNodeSpan(n.node)]; + if (n.additionalNodes) { + for (var _i = 0, _a = n.additionalNodes; _i < _a.length; _i++) { + var node = _a[_i]; + spans.push(getNodeSpan(node)); } - return 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); - 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 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 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); + return spans; } } - 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 (node.jsDocComments && node.jsDocComments.length > 0) { - for (var _i = 0, _a = node.jsDocComments; _i < _a.length; _i++) { - var jsDocComment = _a[_i]; - visitNode(jsDocComment); - } - } - 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; + function nodeKind(node) { + switch (node.kind) { + case 256: + return ts.ScriptElementKind.moduleElement; + case 255: + return ts.ScriptElementKind.memberVariableElement; + case 218: + case 169: + var variableDeclarationNode = void 0; + var name_38; + if (node.kind === 169) { + name_38 = node.name; + variableDeclarationNode = node; + while (variableDeclarationNode && variableDeclarationNode.kind !== 218) { + variableDeclarationNode = variableDeclarationNode.parent; } - 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_37 = node.flags && (node.flags & 512) && !node.name ? "default" : - node.kind === 148 ? "constructor" : - ts.declarationNameToString(node.name); - return getNavBarItem(name_37, 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)]); - case 279: - if (node.name) { - return getNavBarItem(node.name.text, ts.ScriptElementKind.typeElement, [getNodeSpan(node)]); - } - else { - var parentNode = node.parent && node.parent.parent; - if (parentNode && parentNode.kind === 200) { - if (parentNode.declarationList.declarations.length > 0) { - var nameIdentifier = parentNode.declarationList.declarations[0].name; - if (nameIdentifier.kind === 69) { - return getNavBarItem(nameIdentifier.text, ts.ScriptElementKind.typeElement, [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(); + ts.Debug.assert(!!variableDeclarationNode); } else { - fnName = node.kind === 192 ? anonClassText : anonFnText; + ts.Debug.assert(!ts.isBindingPattern(node.name)); + variableDeclarationNode = node; + name_38 = node.name; } - } - 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: + if (ts.isConst(variableDeclarationNode)) { + return ts.ScriptElementKind.constElement; + } + else if (ts.isLet(variableDeclarationNode)) { + return ts.ScriptElementKind.letElement; + } + else { 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"; - } + } + case 180: + return ts.ScriptElementKind.functionElement; + case 279: + return ts.ScriptElementKind.typeElement; + default: + return ts.getNodeKind(node); } - return sourceFileItem.childItems; } - NavigationBar.getJsNavigationBarItems = getJsNavigationBarItems; + function getModuleName(moduleDeclaration) { + if (ts.isAmbientModule(moduleDeclaration)) { + return ts.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 getInteriorModule(decl) { + return decl.body.kind === 225 ? getInteriorModule(decl.body) : decl; + } + function isComputedProperty(member) { + return !member.name || member.name.kind === 140; + } + function getNodeSpan(node) { + return node.kind === 256 + ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) + : ts.createTextSpanFromBounds(node.getStart(curSourceFile), node.getEnd()); + } + function getFunctionOrClassName(node) { + if (node.name && ts.getFullWidth(node.name) > 0) { + return ts.declarationNameToString(node.name); + } + else if (node.parent.kind === 218) { + return ts.declarationNameToString(node.parent.name); + } + else if (node.parent.kind === 187 && + node.parent.operatorToken.kind === 56) { + return nodeText(node.parent.left); + } + else if (node.parent.kind === 253 && node.parent.name) { + return nodeText(node.parent.name); + } + else if (node.flags & 512) { + return "default"; + } + else { + return ts.isClassLike(node) ? "" : ""; + } + } + function isFunctionOrClassExpression(node) { + return node.kind === 179 || node.kind === 180 || node.kind === 192; + } })(NavigationBar = ts.NavigationBar || (ts.NavigationBar = {})); })(ts || (ts = {})); var ts; @@ -39497,7 +40473,7 @@ var ts; 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); + return typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisParameter, candidateSignature.parameters, writer, invocation); }); ts.addRange(suffixDisplayParts, parameterParts); } @@ -39611,6 +40587,8 @@ var ts; case 199: case 226: case 227: + case 233: + case 237: return nodeEndsWith(n, 16, sourceFile); case 252: return isCompletedNode(n.block, sourceFile); @@ -39693,6 +40671,9 @@ var ts; return isCompletedNode(lastSpan, sourceFile); case 197: return ts.nodeIsPresent(n.literal); + case 236: + case 230: + return ts.nodeIsPresent(n.moduleSpecifier); case 185: return isCompletedNode(n.operand, sourceFile); case 187: @@ -40372,9 +41353,9 @@ var ts; getTypingNamesFromNodeModuleFolder(nodeModulesPath); } getTypingNamesFromSourceFileNames(fileNames); - for (var name_38 in packageNameToTypingLocation) { - if (ts.hasProperty(inferredTypings, name_38) && !inferredTypings[name_38]) { - inferredTypings[name_38] = packageNameToTypingLocation[name_38]; + for (var name_39 in packageNameToTypingLocation) { + if (ts.hasProperty(inferredTypings, name_39) && !inferredTypings[name_39]) { + inferredTypings[name_39] = packageNameToTypingLocation[name_39]; } } for (var _a = 0, exclude_1 = exclude; _a < exclude_1.length; _a++) { @@ -40442,9 +41423,9 @@ var ts; 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 fileNames = host.readDirectory(nodeModulesPath, ["*.json"], undefined, undefined, 2); + for (var _i = 0, fileNames_2 = fileNames; _i < fileNames_2.length; _i++) { + var fileName = fileNames_2[_i]; var normalizedFileName = ts.normalizePath(fileName); if (ts.getBaseFileName(normalizedFileName) !== "package.json") { continue; @@ -40499,6 +41480,7 @@ var ts; isOnToken: isOnToken, getCurrentLeadingTrivia: function () { return leadingTrivia; }, lastTrailingTriviaWasNewLine: function () { return wasNewLine; }, + skipToEndOf: skipToEndOf, close: function () { ts.Debug.assert(scanner !== undefined); lastTokenInfo = undefined; @@ -40673,6 +41655,15 @@ var ts; } return tokenInfo; } + function skipToEndOf(node) { + scanner.setTextPos(node.end); + savedPos = scanner.getStartPos(); + lastScanAction = undefined; + lastTokenInfo = undefined; + wasNewLine = false; + leadingTrivia = undefined; + trailingTrivia = undefined; + } } formatting.getFormattingScanner = getFormattingScanner; })(formatting = ts.formatting || (ts.formatting = {})); @@ -40888,7 +41879,7 @@ var ts; 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.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([69, 3, 73, 82, 89]); 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); @@ -40916,15 +41907,15 @@ var ts; 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.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.isNonJsxElementContext, 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.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, 136]), 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, 136])), 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)); @@ -41000,8 +41991,8 @@ var ts; 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.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext, Rules.IsNextTokenNotCloseBracket), 2)); + this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext), 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)); @@ -41027,14 +42018,18 @@ var ts; 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.NoSpaceAfterOpenBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 8)); + this.SpaceAfterOpenBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 2)); + this.NoSpaceBeforeCloseBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 8)); + this.SpaceBeforeCloseBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 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_39 in o) { - if (o[name_39] === rule) { - return name_39; + for (var name_40 in o) { + if (o[name_40] === rule) { + return name_40; } } throw new Error("Unknown rule"); @@ -41050,6 +42045,8 @@ var ts; case 187: case 188: case 195: + case 238: + case 234: case 154: case 162: case 163: @@ -41137,6 +42134,10 @@ var ts; case 224: case 159: case 225: + case 236: + case 237: + case 230: + case 233: return true; } return false; @@ -41195,6 +42196,12 @@ var ts; Rules.IsNonJsxSameLineTokenContext = function (context) { return context.TokensAreOnSameLine() && context.contextNode.kind !== 244; }; + Rules.isNonJsxElementContext = function (context) { + return context.contextNode.kind !== 241; + }; + Rules.isJsxExpressionContext = function (context) { + return context.contextNode.kind === 248; + }; Rules.IsNotBeforeBlockInFunctionDeclarationContext = function (context) { return !Rules.IsFunctionDeclContext(context) && !Rules.IsBeforeBlockContext(context); }; @@ -41590,6 +42597,14 @@ var ts; rules.push(this.globalRules.NoSpaceAfterTemplateHeadAndMiddle); rules.push(this.globalRules.NoSpaceBeforeTemplateMiddleAndTail); } + if (options.InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces) { + rules.push(this.globalRules.SpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.SpaceBeforeCloseBraceInJsxExpression); + } + else { + rules.push(this.globalRules.NoSpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.NoSpaceBeforeCloseBraceInJsxExpression); + } if (options.InsertSpaceAfterSemicolonInForStatements) { rules.push(this.globalRules.SpaceAfterSemicolonInFor); } @@ -41629,7 +42644,7 @@ var ts; return []; } var endOfFormatSpan = ts.getEndLinePosition(line, sourceFile); - while (ts.isWhiteSpace(sourceFile.text.charCodeAt(endOfFormatSpan)) && !ts.isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { + while (ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(endOfFormatSpan))) { endOfFormatSpan--; } if (ts.isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { @@ -41828,7 +42843,8 @@ var ts; var startLinePosition = ts.getLineStartPositionForPosition(startPos, sourceFile); var column = formatting.SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options); if (startLine !== parentStartLine || startPos === column) { - return column; + var baseIndentSize = formatting.SmartIndenter.getBaseIndentation(options); + return baseIndentSize > column ? baseIndentSize : column; } } return -1; @@ -41963,6 +42979,9 @@ var ts; } } if (!ts.rangeOverlapsWithStartEnd(originalRange, child.pos, child.end)) { + if (child.end < originalRange.pos) { + formattingScanner.skipToEndOf(child); + } return inheritedIndentation; } if (child.getFullWidth() === 0) { @@ -42226,14 +43245,14 @@ var ts; } var whitespaceStart = getTrailingWhitespaceStartPosition(lineStartPosition, lineEndPosition); if (whitespaceStart !== -1) { - ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpace(sourceFile.text.charCodeAt(whitespaceStart - 1))); + ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(whitespaceStart - 1))); recordDelete(whitespaceStart, lineEndPosition + 1 - whitespaceStart); } } } function getTrailingWhitespaceStartPosition(start, end) { var pos = end; - while (pos >= start && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos >= start && ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos--; } if (pos !== end) { @@ -42389,14 +43408,14 @@ var ts; (function (SmartIndenter) { function getIndentation(position, sourceFile, options) { if (position > sourceFile.text.length) { - return 0; + return getBaseIndentation(options); } if (options.IndentStyle === ts.IndentStyle.None) { return 0; } var precedingToken = ts.findPrecedingToken(position, sourceFile); if (!precedingToken) { - return 0; + return getBaseIndentation(options); } var precedingTokenIsLiteral = ts.isStringOrRegularExpressionOrTemplateLiteral(precedingToken.kind); if (precedingTokenIsLiteral && precedingToken.getStart(sourceFile) <= position && precedingToken.end > position) { @@ -42407,7 +43426,7 @@ var ts; var current_1 = position; while (current_1 > 0) { var char = sourceFile.text.charCodeAt(current_1); - if (!ts.isWhiteSpace(char) && !ts.isLineBreak(char)) { + if (!ts.isWhiteSpace(char)) { break; } current_1--; @@ -42448,11 +43467,15 @@ var ts; current = current.parent; } if (!current) { - return 0; + return getBaseIndentation(options); } return getIndentationForNodeWorker(current, currentStart, undefined, indentationDelta, sourceFile, options); } SmartIndenter.getIndentation = getIndentation; + function getBaseIndentation(options) { + return options.BaseIndentSize || 0; + } + SmartIndenter.getBaseIndentation = getBaseIndentation; function getIndentationForNode(n, ignoreActualIndentationRange, sourceFile, options) { var start = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); return getIndentationForNodeWorker(n, start, ignoreActualIndentationRange, 0, sourceFile, options); @@ -42493,7 +43516,7 @@ var ts; currentStart = parentStart; parent = current.parent; } - return indentationDelta; + return indentationDelta + getBaseIndentation(options); } function getParentStart(parent, child, sourceFile) { var containingList = getContainingList(child, sourceFile); @@ -42661,7 +43684,7 @@ var ts; var column = 0; for (var pos = startPos; pos < endPos; pos++) { var ch = sourceFile.text.charCodeAt(pos); - if (!ts.isWhiteSpace(ch)) { + if (!ts.isWhiteSpaceSingleLine(ch)) { break; } if (ch === 9) { @@ -42719,7 +43742,10 @@ var ts; case 164: case 176: case 184: + case 237: case 233: + case 238: + case 234: return true; } return false; @@ -42741,6 +43767,11 @@ var ts; case 149: case 150: return childKind !== 199; + case 236: + return childKind !== 237; + case 230: + return childKind !== 231 || + (child.namedBindings && child.namedBindings.kind !== 233); case 241: return childKind !== 245; } @@ -42880,8 +43911,8 @@ var ts; var list = createNode(282, 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]; + for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) { + var node = nodes_4[_i]; if (pos < node.pos) { pos = this.addSyntheticNodes(list._children, pos, node.pos); } @@ -43007,7 +44038,7 @@ var ts; } addCommentParts(declaration.parent, sourceFileOfDeclaration, getCleanedParamJsDocComment); } - if (declaration.kind === 225 && declaration.body.kind === 225) { + if (declaration.kind === 225 && declaration.body && declaration.body.kind === 225) { return; } if ((declaration.kind === 179 || declaration.kind === 180) && @@ -43050,7 +44081,7 @@ var ts; } for (; pos < end; pos++) { var ch = sourceFile.text.charCodeAt(pos); - if (!ts.isWhiteSpace(ch) || ts.isLineBreak(ch)) { + if (!ts.isWhiteSpaceSingleLine(ch)) { return pos; } } @@ -43065,8 +44096,7 @@ var ts; 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))); + ts.isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)); } function isParamTag(pos, end, sourceFile) { return isName(pos, end, sourceFile, paramTag); @@ -43203,7 +44233,7 @@ var ts; } return paramDocComments; function consumeWhiteSpaces(pos) { - while (pos < end && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos < end && ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos++; } return pos; @@ -43594,8 +44624,8 @@ var ts; 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) { + for (var parent_16 = declaration.parent; !ts.isFunctionBlock(parent_16); parent_16 = parent_16.parent) { + if (parent_16.kind === 256 || parent_16.kind === 226) { return false; } } @@ -43706,13 +44736,13 @@ var ts; sourceFile.version = version; sourceFile.scriptSnapshot = scriptSnapshot; } - var commandLineOptions_stringToEnum; + var commandLineOptionsStringToEnum; function fixupCompilerOptions(options, diagnostics) { - commandLineOptions_stringToEnum = commandLineOptions_stringToEnum || ts.filter(ts.optionDeclarations, function (o) { + commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || ts.filter(ts.optionDeclarations, function (o) { return typeof o.type === "object" && !ts.forEachValue(o.type, function (v) { return typeof v !== "number"; }); }); options = ts.clone(options); - var _loop_2 = function(opt) { + var _loop_3 = function(opt) { if (!ts.hasProperty(options, opt.name)) { return "continue"; } @@ -43726,9 +44756,9 @@ var ts; } } }; - for (var _i = 0, commandLineOptions_stringToEnum_1 = commandLineOptions_stringToEnum; _i < commandLineOptions_stringToEnum_1.length; _i++) { - var opt = commandLineOptions_stringToEnum_1[_i]; - _loop_2(opt); + for (var _i = 0, commandLineOptionsStringToEnum_1 = commandLineOptionsStringToEnum; _i < commandLineOptionsStringToEnum_1.length; _i++) { + var opt = commandLineOptionsStringToEnum_1[_i]; + _loop_3(opt); } return options; } @@ -43739,6 +44769,16 @@ var ts; options.suppressOutputPathCheck = true; options.allowNonTsExtensions = true; options.noLib = true; + options.lib = undefined; + options.types = undefined; + options.noEmit = undefined; + options.noEmitOnError = undefined; + options.paths = undefined; + options.rootDirs = undefined; + options.declaration = undefined; + options.declarationDir = undefined; + options.out = undefined; + options.outFile = undefined; options.noResolve = true; var inputFileName = transpileOptions.fileName || (options.jsx ? "module.tsx" : "module.ts"); var sourceFile = ts.createSourceFile(inputFileName, input, options.target); @@ -43768,7 +44808,8 @@ var ts; getNewLine: function () { return newLine; }, fileExists: function (fileName) { return fileName === inputFileName; }, readFile: function (fileName) { return ""; }, - directoryExists: function (directoryExists) { return true; } + directoryExists: function (directoryExists) { return true; }, + getDirectories: function (path) { return []; } }; var program = ts.createProgram([inputFileName], options, compilerHost); if (transpileOptions.reportDiagnostics) { @@ -43837,7 +44878,7 @@ var ts; 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)); + return ("_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + "|" + settings.allowJs + "|" + settings.baseUrl + "|" + JSON.stringify(settings.typeRoots) + "|" + JSON.stringify(settings.rootDirs) + "|" + JSON.stringify(settings.paths)); } function getBucketForCompilationSettings(key, createIfMissing) { var bucket = ts.lookUp(buckets, key); @@ -44487,7 +45528,8 @@ var ts; oldSettings.moduleResolution !== newSettings.moduleResolution || oldSettings.noResolve !== newSettings.noResolve || oldSettings.jsx !== newSettings.jsx || - oldSettings.allowJs !== newSettings.allowJs); + oldSettings.allowJs !== newSettings.allowJs || + oldSettings.disableSizeLimit !== oldSettings.disableSizeLimit); var compilerHost = { getSourceFile: getOrCreateSourceFile, getSourceFileByPath: getOrCreateSourceFileByPath, @@ -44507,8 +45549,10 @@ var ts; return entry && entry.scriptSnapshot.getText(0, entry.scriptSnapshot.getLength()); }, directoryExists: function (directoryName) { - ts.Debug.assert(!host.resolveModuleNames || !host.resolveTypeReferenceDirectives); return ts.directoryProbablyExists(directoryName, host); + }, + getDirectories: function (path) { + return host.getDirectories ? host.getDirectories(path) : []; } }; if (host.trace) { @@ -44695,13 +45739,13 @@ var ts; log("Returning an empty list because completion was requested in an invalid position."); return undefined; } - var parent_16 = contextToken.parent, kind = contextToken.kind; + var parent_17 = contextToken.parent, kind = contextToken.kind; if (kind === 21) { - if (parent_16.kind === 172) { + if (parent_17.kind === 172) { node = contextToken.parent.expression; isRightOfDot = true; } - else if (parent_16.kind === 139) { + else if (parent_17.kind === 139) { node = contextToken.parent.left; isRightOfDot = true; } @@ -44989,9 +46033,9 @@ var ts; 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; + var parent_18 = contextToken.parent; + if (parent_18 && (parent_18.kind === 171 || parent_18.kind === 167)) { + return parent_18; } break; } @@ -45014,34 +46058,34 @@ var ts; } function tryGetContainingJsxElement(contextToken) { if (contextToken) { - var parent_18 = contextToken.parent; + var parent_19 = 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; + if (parent_19 && (parent_19.kind === 242 || parent_19.kind === 243)) { + return parent_19; } - else if (parent_18.kind === 246) { - return parent_18.parent; + else if (parent_19.kind === 246) { + return parent_19.parent; } break; case 9: - if (parent_18 && ((parent_18.kind === 246) || (parent_18.kind === 247))) { - return parent_18.parent; + if (parent_19 && ((parent_19.kind === 246) || (parent_19.kind === 247))) { + return parent_19.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_19 && + parent_19.kind === 248 && + parent_19.parent && + (parent_19.parent.kind === 246)) { + return parent_19.parent.parent; } - if (parent_18 && parent_18.kind === 247) { - return parent_18.parent; + if (parent_19 && parent_19.kind === 247) { + return parent_19.parent; } break; } @@ -45164,8 +46208,8 @@ var ts; if (element.getStart() <= position && position <= element.getEnd()) { continue; } - var name_40 = element.propertyName || element.name; - existingImportsOrExports[name_40.text] = true; + var name_41 = element.propertyName || element.name; + existingImportsOrExports[name_41.text] = true; } if (ts.isEmpty(existingImportsOrExports)) { return ts.filter(exportsOfModule, function (e) { return e.name !== "default"; }); @@ -45260,13 +46304,13 @@ var ts; var entries = []; var target = program.getCompilerOptions().target; var nameTable = getNameTable(sourceFile); - for (var name_41 in nameTable) { - if (nameTable[name_41] === position) { + for (var name_42 in nameTable) { + if (nameTable[name_42] === position) { continue; } - if (!uniqueNames[name_41]) { - uniqueNames[name_41] = name_41; - var displayName = getCompletionEntryDisplayName(name_41, target, true); + if (!uniqueNames[name_42]) { + uniqueNames[name_42] = name_42; + var displayName = getCompletionEntryDisplayName(ts.unescapeIdentifier(name_42), target, true); if (displayName) { var entry = { name: displayName, @@ -45370,10 +46414,10 @@ var ts; var typeChecker = program.getTypeChecker(); var type = typeChecker.getContextualType(node); if (type) { - var entries_1 = []; - addStringLiteralCompletionsFromType(type, entries_1); - if (entries_1.length) { - return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries_1 }; + var entries_2 = []; + addStringLiteralCompletionsFromType(type, entries_2); + if (entries_2.length) { + return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries_2 }; } } return undefined; @@ -46242,17 +47286,17 @@ var ts; 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; + var parent_20 = child.parent; + if (ts.isFunctionBlock(parent_20) || parent_20.kind === 256) { + return parent_20; } - if (parent_19.kind === 216) { - var tryStatement = parent_19; + if (parent_20.kind === 216) { + var tryStatement = parent_20; if (tryStatement.tryBlock === child && tryStatement.catchClause) { return child; } } - child = parent_19; + child = parent_20; } return undefined; } @@ -46536,7 +47580,7 @@ var ts; 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))) { + if (!ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(j))) { shouldCombindElseAndIf = false; break; } @@ -46572,7 +47616,8 @@ var ts; result.push({ fileName: entry.fileName, textSpan: highlightSpan.textSpan, - isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference + isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference, + isDefinition: false }); } } @@ -46609,13 +47654,27 @@ var ts; if (node === sourceFile) { return undefined; } - if (node.kind !== 69 && - node.kind !== 9 && - !isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { - return undefined; + switch (node.kind) { + case 8: + if (!isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + break; + } + case 69: + case 97: + case 9: + return getReferencedSymbolsForNode(node, program.getSourceFiles(), findInStrings, findInComments); + } + return undefined; + } + function isThis(node) { + switch (node.kind) { + case 97: + return true; + case 69: + return node.originalKeywordKind === 97 && node.parent.kind === 142; + default: + return false; } - 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(); @@ -46628,7 +47687,7 @@ var ts; return getLabelReferencesInNode(node.parent, node); } } - if (node.kind === 97 || node.kind === 165) { + if (isThis(node)) { return getReferencesForThisKeyword(node, sourceFiles); } if (node.kind === 95) { @@ -46853,7 +47912,8 @@ var ts; references: [{ fileName: sourceFile.fileName, textSpan: ts.createTextSpan(position, searchText.length), - isWriteAccess: false + isWriteAccess: false, + isDefinition: false }] }); } @@ -46992,7 +48052,7 @@ var ts; ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); var node = ts.getTouchingWord(sourceFile, position); - if (!node || (node.kind !== 97 && node.kind !== 165)) { + if (!node || !isThis(node)) { return; } var container = ts.getThisContainer(node, false); @@ -47231,7 +48291,8 @@ var ts; return { fileName: node.getSourceFile().fileName, textSpan: ts.createTextSpanFromBounds(start, end), - isWriteAccess: isWriteAccess(node) + isWriteAccess: isWriteAccess(node), + isDefinition: ts.isDeclarationName(node) || ts.isLiteralComputedPropertyDeclarationName(node) }; } function isWriteAccess(node) { @@ -47452,7 +48513,7 @@ var ts; } function getNavigationBarItems(fileName) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); - return ts.NavigationBar.getNavigationBarItems(sourceFile, host.getCompilationSettings()); + return ts.NavigationBar.getNavigationBarItems(sourceFile); } function getSemanticClassifications(fileName, span) { return convertClassifications(getEncodedSemanticClassifications(fileName, span)); @@ -47831,7 +48892,8 @@ var ts; return; case 142: if (token.parent.name === token) { - return 17; + var isThis_1 = token.kind === 69 && token.originalKeywordKind === 97; + return isThis_1 ? 3 : 17; } return; } @@ -47981,7 +49043,7 @@ var ts; (tokenStart === position ? newLine + indentationStr : ""); return { newText: result, caretOffset: preamble.length }; } - function isValidBraceCompletionAtPostion(fileName, position, openingBrace) { + function isValidBraceCompletionAtPosition(fileName, position, openingBrace) { if (openingBrace === 60) { return false; } @@ -48106,7 +49168,8 @@ var ts; if (node) { if (node.kind === 69 || node.kind === 9 || - isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || + isThis(node)) { var symbol = typeChecker.getSymbolAtLocation(node); if (symbol) { var declarations = symbol.getDeclarations(); @@ -48217,7 +49280,7 @@ var ts; getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition, - isValidBraceCompletionAtPostion: isValidBraceCompletionAtPostion, + isValidBraceCompletionAtPosition: isValidBraceCompletionAtPosition, getEmitOutput: getEmitOutput, getNonBoundSourceFile: getNonBoundSourceFile, getProgram: getProgram @@ -48712,6 +49775,8 @@ var ts; CommandNames.Formatonkey = "formatonkey"; CommandNames.Geterr = "geterr"; CommandNames.GeterrForProject = "geterrForProject"; + CommandNames.SemanticDiagnosticsSync = "semanticDiagnosticsSync"; + CommandNames.SyntacticDiagnosticsSync = "syntacticDiagnosticsSync"; CommandNames.NavBar = "navbar"; CommandNames.Navto = "navto"; CommandNames.Occurrences = "occurrences"; @@ -48731,6 +49796,7 @@ var ts; var Errors; (function (Errors) { Errors.NoProject = new Error("No Project."); + Errors.ProjectLanguageServiceDisabled = new Error("The project's language service is disabled."); })(Errors || (Errors = {})); var Session = (function () { function Session(host, byteLength, hrtime, logger) { @@ -48807,6 +49873,12 @@ var ts; var signatureHelpArgs = request.arguments; return { response: _this.getSignatureHelpItems(signatureHelpArgs.line, signatureHelpArgs.offset, signatureHelpArgs.file), responseRequired: true }; }, + _a[CommandNames.SemanticDiagnosticsSync] = function (request) { + return _this.requiredResponse(_this.getSemanticDiagnosticsSync(request.arguments)); + }, + _a[CommandNames.SyntacticDiagnosticsSync] = function (request) { + return _this.requiredResponse(_this.getSyntacticDiagnosticsSync(request.arguments)); + }, _a[CommandNames.Geterr] = function (request) { var geterrArgs = request.arguments; return { response: _this.getDiagnostics(geterrArgs.delay, geterrArgs.files), responseRequired: false }; @@ -49028,7 +50100,7 @@ var ts; Session.prototype.getDefinition = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49046,7 +50118,7 @@ var ts; Session.prototype.getTypeDefinition = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49064,7 +50136,7 @@ var ts; Session.prototype.getOccurrences = function (line, offset, fileName) { fileName = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(fileName); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49085,10 +50157,28 @@ var ts; }; }); }; + Session.prototype.getDiagnosticsWorker = function (args, selector) { + var file = ts.normalizePath(args.file); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + if (project.languageServiceDiabled) { + throw Errors.ProjectLanguageServiceDisabled; + } + var diagnostics = selector(project, file); + return ts.map(diagnostics, function (originalDiagnostic) { return formatDiag(file, project, originalDiagnostic); }); + }; + Session.prototype.getSyntacticDiagnosticsSync = function (args) { + return this.getDiagnosticsWorker(args, function (project, file) { return project.compilerService.languageService.getSyntacticDiagnostics(file); }); + }; + Session.prototype.getSemanticDiagnosticsSync = function (args) { + return this.getDiagnosticsWorker(args, function (project, file) { return project.compilerService.languageService.getSemanticDiagnostics(file); }); + }; Session.prototype.getDocumentHighlights = function (line, offset, fileName, filesToSearch) { fileName = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(fileName); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49115,8 +50205,12 @@ var ts; Session.prototype.getProjectInfo = function (fileName, needFileNameList) { fileName = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(fileName); + if (!project) { + throw Errors.NoProject; + } var projectInfo = { - configFileName: project.projectFilename + configFileName: project.projectFilename, + languageServiceDisabled: project.languageServiceDiabled }; if (needFileNameList) { projectInfo.fileNames = project.getFileNames(); @@ -49127,10 +50221,11 @@ var ts; var file = ts.normalizePath(fileName); var info = this.projectService.getScriptInfo(file); var projects = this.projectService.findReferencingProjects(info); - if (!projects.length) { + var projectsWithLanguageServiceEnabeld = ts.filter(projects, function (p) { return !p.languageServiceDiabled; }); + if (projectsWithLanguageServiceEnabeld.length === 0) { throw Errors.NoProject; } - var defaultProject = projects[0]; + var defaultProject = projectsWithLanguageServiceEnabeld[0]; var defaultProjectCompilerService = defaultProject.compilerService; var position = defaultProjectCompilerService.host.lineOffsetToPosition(file, line, offset); var renameInfo = defaultProjectCompilerService.languageService.getRenameInfo(file, position); @@ -49143,7 +50238,7 @@ var ts; locs: [] }; } - var fileSpans = server.combineProjectOutput(projects, function (project) { + var fileSpans = server.combineProjectOutput(projectsWithLanguageServiceEnabeld, function (project) { var compilerService = project.compilerService; var renameLocations = compilerService.languageService.findRenameLocations(file, position, findInStrings, findInComments); if (!renameLocations) { @@ -49195,10 +50290,11 @@ var ts; var file = ts.normalizePath(fileName); var info = this.projectService.getScriptInfo(file); var projects = this.projectService.findReferencingProjects(info); - if (!projects.length) { + var projectsWithLanguageServiceEnabeld = ts.filter(projects, function (p) { return !p.languageServiceDiabled; }); + if (projectsWithLanguageServiceEnabeld.length === 0) { throw Errors.NoProject; } - var defaultProject = projects[0]; + var defaultProject = projectsWithLanguageServiceEnabeld[0]; var position = defaultProject.compilerService.host.lineOffsetToPosition(file, line, offset); var nameInfo = defaultProject.compilerService.languageService.getQuickInfoAtPosition(file, position); if (!nameInfo) { @@ -49208,7 +50304,7 @@ var ts; 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 refs = server.combineProjectOutput(projectsWithLanguageServiceEnabeld, function (project) { var compilerService = project.compilerService; var references = compilerService.languageService.getReferencesAtPosition(file, position); if (!references) { @@ -49224,7 +50320,8 @@ var ts; start: start, lineText: lineText, end: compilerService.host.positionToLineOffset(ref.fileName, ts.textSpanEnd(ref.textSpan)), - isWriteAccess: ref.isWriteAccess + isWriteAccess: ref.isWriteAccess, + isDefinition: ref.isDefinition }; }); }, compareFileStart, areReferencesResponseItemsForTheSameLocation); @@ -49253,7 +50350,7 @@ var ts; Session.prototype.getQuickInfo = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49276,7 +50373,7 @@ var ts; Session.prototype.getFormattingEditsForRange = function (line, offset, endLine, endOffset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49297,7 +50394,7 @@ var ts; Session.prototype.getFormattingEditsAfterKeystroke = function (line, offset, key, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49312,6 +50409,7 @@ var ts; var lineText = lineInfo.leaf.text; if (lineText.search("\\S") < 0) { var editorOptions = { + BaseIndentSize: formatOptions.BaseIndentSize, IndentSize: formatOptions.IndentSize, TabSize: formatOptions.TabSize, NewLineCharacter: formatOptions.NewLineCharacter, @@ -49360,7 +50458,7 @@ var ts; } var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49379,7 +50477,7 @@ var ts; Session.prototype.getCompletionEntryDetails = function (line, offset, entryNames, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49395,7 +50493,7 @@ var ts; Session.prototype.getSignatureHelpItems = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49422,7 +50520,7 @@ var ts; var checkList = fileNames.reduce(function (accum, fileName) { fileName = ts.normalizePath(fileName); var project = _this.projectService.getProjectForFile(fileName); - if (project) { + if (project && !project.languageServiceDiabled) { accum.push({ fileName: fileName, project: project }); } return accum; @@ -49435,7 +50533,7 @@ var ts; var _this = this; var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (project) { + if (project && !project.languageServiceDiabled) { var compilerService = project.compilerService; var start = compilerService.host.lineOffsetToPosition(file, line, offset); var end = compilerService.host.lineOffsetToPosition(file, endLine, endOffset); @@ -49452,7 +50550,7 @@ var ts; var file = ts.normalizePath(fileName); var tmpfile = ts.normalizePath(tempFileName); var project = this.projectService.getProjectForFile(file); - if (project) { + if (project && !project.languageServiceDiabled) { this.changeSeq++; project.compilerService.host.reloadScript(file, tmpfile, function () { _this.output(undefined, CommandNames.Reload, reqSeq); @@ -49463,7 +50561,7 @@ var ts; var file = ts.normalizePath(fileName); var tmpfile = ts.normalizePath(tempFileName); var project = this.projectService.getProjectForFile(file); - if (project) { + if (project && !project.languageServiceDiabled) { project.compilerService.host.saveTo(file, tmpfile); } }; @@ -49474,7 +50572,7 @@ var ts; var file = ts.normalizePath(fileName); this.projectService.closeClientFile(file); }; - Session.prototype.decorateNavigationBarItem = function (project, fileName, items) { + Session.prototype.decorateNavigationBarItem = function (project, fileName, items, lineIndex) { var _this = this; if (!items) { return undefined; @@ -49485,17 +50583,17 @@ var ts; 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)) + start: compilerService.host.positionToLineOffset(fileName, span.start, lineIndex), + end: compilerService.host.positionToLineOffset(fileName, ts.textSpanEnd(span), lineIndex) }); }), - childItems: _this.decorateNavigationBarItem(project, fileName, item.childItems), + childItems: _this.decorateNavigationBarItem(project, fileName, item.childItems, lineIndex), indent: item.indent }); }); }; Session.prototype.getNavigationBarItems = function (fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49503,17 +50601,17 @@ var ts; if (!items) { return undefined; } - return this.decorateNavigationBarItem(project, fileName, items); + return this.decorateNavigationBarItem(project, fileName, items, compilerService.host.getLineIndex(fileName)); }; 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) { + var projectsWithLanguageServiceEnabeld = ts.filter(projects, function (p) { return !p.languageServiceDiabled; }); + if (projectsWithLanguageServiceEnabeld.length === 0) { throw Errors.NoProject; } - var allNavToItems = server.combineProjectOutput(projects, function (project) { + var allNavToItems = server.combineProjectOutput(projectsWithLanguageServiceEnabeld, function (project) { var compilerService = project.compilerService; var navItems = compilerService.languageService.getNavigateToItems(searchValue, maxResultCount); if (!navItems) { @@ -49557,7 +50655,7 @@ var ts; Session.prototype.getBraceMatching = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49573,7 +50671,10 @@ var ts; }; Session.prototype.getDiagnosticsForProject = function (delay, fileName) { var _this = this; - var fileNames = this.getProjectInfo(fileName, true).fileNames; + var _a = this.getProjectInfo(fileName, true), fileNames = _a.fileNames, languageServiceDisabled = _a.languageServiceDisabled; + if (languageServiceDisabled) { + return; + } var fileNamesInProject = fileNames.filter(function (value, index, array) { return value.indexOf("lib.d.ts") < 0; }); var highPriorityFiles = []; var mediumPriorityFiles = []; @@ -49612,6 +50713,9 @@ var ts; }; Session.prototype.exit = function () { }; + Session.prototype.requiredResponse = function (response) { + return { response: response, responseRequired: true }; + }; Session.prototype.addProtocolHandler = function (command, handler) { if (this.handlers[command]) { throw new Error("Protocol handler already exists for command \"" + command + "\""); @@ -49683,6 +50787,7 @@ var ts; } }); } + server.maxProgramSizeForNonTsFiles = 20 * 1024 * 1024; var ScriptInfo = (function () { function ScriptInfo(host, fileName, content, isOpen) { if (isOpen === void 0) { isOpen = false; } @@ -49752,17 +50857,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_43 = names_2[_i]; + var resolution = ts.lookUp(newResolutions, name_43); if (!resolution) { - var existingResolution = currentResolutionsInFile && ts.lookUp(currentResolutionsInFile, name_42); + var existingResolution = currentResolutionsInFile && ts.lookUp(currentResolutionsInFile, name_43); if (moduleResolutionIsValid(existingResolution)) { resolution = existingResolution; } else { - resolution = loader(name_42, containingFile, compilerOptions, this.moduleResolutionHost); + resolution = loader(name_43, containingFile, compilerOptions, this.moduleResolutionHost); resolution.lastCheckTime = Date.now(); - newResolutions[name_42] = resolution; + newResolutions[name_43] = resolution; } } ts.Debug.assert(resolution !== undefined); @@ -49898,6 +51003,9 @@ var ts; LSHost.prototype.directoryExists = function (path) { return this.host.directoryExists(path); }; + LSHost.prototype.getDirectories = function (path) { + return this.host.getDirectories(path); + }; LSHost.prototype.lineToTextSpan = function (filename, line) { var path = ts.toPath(filename, this.host.getCurrentDirectory(), this.getCanonicalFileName); var script = this.filenameToScript.get(path); @@ -49920,20 +51028,25 @@ var ts; var lineInfo = index.lineNumberToInfo(line); return (lineInfo.offset + offset - 1); }; - LSHost.prototype.positionToLineOffset = function (filename, position) { + LSHost.prototype.positionToLineOffset = function (filename, position, lineIndex) { + lineIndex = lineIndex || this.getLineIndex(filename); + var lineOffset = lineIndex.charOffsetToLineNumberAndPos(position); + return { line: lineOffset.line, offset: lineOffset.offset + 1 }; + }; + LSHost.prototype.getLineIndex = function (filename) { 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 script.snap().index; }; return LSHost; }()); server.LSHost = LSHost; var Project = (function () { - function Project(projectService, projectOptions) { + function Project(projectService, projectOptions, languageServiceDiabled) { + if (languageServiceDiabled === void 0) { languageServiceDiabled = false; } this.projectService = projectService; this.projectOptions = projectOptions; + this.languageServiceDiabled = languageServiceDiabled; this.directoriesWatchedForTsconfig = []; this.filenameToSourceFile = {}; this.updateGraphSeq = 0; @@ -49941,8 +51054,19 @@ var ts; if (projectOptions && projectOptions.files) { projectOptions.compilerOptions.allowNonTsExtensions = true; } - this.compilerService = new CompilerService(this, projectOptions && projectOptions.compilerOptions); + if (!languageServiceDiabled) { + this.compilerService = new CompilerService(this, projectOptions && projectOptions.compilerOptions); + } } + Project.prototype.enableLanguageService = function () { + if (this.languageServiceDiabled) { + this.compilerService = new CompilerService(this, this.projectOptions && this.projectOptions.compilerOptions); + } + this.languageServiceDiabled = false; + }; + Project.prototype.disableLanguageService = function () { + this.languageServiceDiabled = true; + }; Project.prototype.addOpenRef = function () { this.openRefCount++; }; @@ -49954,16 +51078,36 @@ var ts; return this.projectService.openFile(filename, false); }; Project.prototype.getRootFiles = function () { + if (this.languageServiceDiabled) { + return this.projectOptions ? this.projectOptions.files : undefined; + } return this.compilerService.host.roots.map(function (info) { return info.fileName; }); }; Project.prototype.getFileNames = function () { + if (this.languageServiceDiabled) { + if (!this.projectOptions) { + return undefined; + } + var fileNames = []; + if (this.projectOptions && this.projectOptions.compilerOptions) { + fileNames.push(ts.getDefaultLibFilePath(this.projectOptions.compilerOptions)); + } + ts.addRange(fileNames, this.projectOptions.files); + return fileNames; + } var sourceFiles = this.program.getSourceFiles(); return sourceFiles.map(function (sourceFile) { return sourceFile.fileName; }); }; Project.prototype.getSourceFile = function (info) { + if (this.languageServiceDiabled) { + return undefined; + } return this.filenameToSourceFile[info.fileName]; }; Project.prototype.getSourceFileFromName = function (filename, requireOpen) { + if (this.languageServiceDiabled) { + return undefined; + } var info = this.projectService.getScriptInfo(filename); if (info) { if ((!requireOpen) || info.isOpen) { @@ -49972,13 +51116,22 @@ var ts; } }; Project.prototype.isRoot = function (info) { + if (this.languageServiceDiabled) { + return undefined; + } return this.compilerService.host.roots.some(function (root) { return root === info; }); }; Project.prototype.removeReferencedFile = function (info) { + if (this.languageServiceDiabled) { + return; + } this.compilerService.host.removeReferencedFile(info); this.updateGraph(); }; Project.prototype.updateFileMap = function () { + if (this.languageServiceDiabled) { + return; + } this.filenameToSourceFile = {}; var sourceFiles = this.program.getSourceFiles(); for (var i = 0, len = sourceFiles.length; i < len; i++) { @@ -49987,10 +51140,16 @@ var ts; } }; Project.prototype.finishGraph = function () { + if (this.languageServiceDiabled) { + return; + } this.updateGraph(); this.compilerService.languageService.getNavigateToItems(".*"); }; Project.prototype.updateGraph = function () { + if (this.languageServiceDiabled) { + return; + } this.program = this.compilerService.languageService.getProgram(); this.updateFileMap(); }; @@ -49998,12 +51157,25 @@ var ts; return this.projectFilename; }; Project.prototype.addRoot = function (info) { + if (this.languageServiceDiabled) { + return; + } this.compilerService.host.addRoot(info); }; Project.prototype.removeRoot = function (info) { + if (this.languageServiceDiabled) { + return; + } this.compilerService.host.removeRoot(info); }; Project.prototype.filesToString = function () { + if (this.languageServiceDiabled) { + if (this.projectOptions) { + var strBuilder_1 = ""; + ts.forEach(this.projectOptions.files, function (file) { strBuilder_1 += file + "\n"; }); + return strBuilder_1; + } + } var strBuilder = ""; ts.forEachValue(this.filenameToSourceFile, function (sourceFile) { strBuilder += sourceFile.fileName + "\n"; }); return strBuilder; @@ -50012,7 +51184,9 @@ var ts; this.projectOptions = projectOptions; if (projectOptions.compilerOptions) { projectOptions.compilerOptions.allowNonTsExtensions = true; - this.compilerService.setCompilerOptions(projectOptions.compilerOptions); + if (!this.languageServiceDiabled) { + this.compilerService.setCompilerOptions(projectOptions.compilerOptions); + } } }; return Project; @@ -50222,6 +51396,8 @@ var ts; if (project.isConfiguredProject()) { project.projectFileWatcher.close(); project.directoryWatcher.close(); + ts.forEachValue(project.directoriesWatchedForWildcards, function (watcher) { watcher.close(); }); + delete project.directoriesWatchedForWildcards; this.configuredProjects = copyListRemovingItem(project, this.configuredProjects); } else { @@ -50237,8 +51413,8 @@ var ts; 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]; + for (var _b = 0, fileNames_3 = fileNames; _b < fileNames_3.length; _b++) { + var fileName = fileNames_3[_b]; var info = this.getScriptInfo(fileName); if (info.defaultProject == project) { info.defaultProject = undefined; @@ -50263,6 +51439,7 @@ var ts; else { this.findReferencingProjects(info); if (info.defaultProject) { + info.defaultProject.addOpenRef(); this.openFilesReferenced.push(info); } else { @@ -50615,12 +51792,30 @@ var ts; else { var projectOptions = { files: parsedCommandLine.fileNames, + wildcardDirectories: parsedCommandLine.wildcardDirectories, compilerOptions: parsedCommandLine.options }; return { succeeded: true, projectOptions: projectOptions }; } } }; + ProjectService.prototype.exceedTotalNonTsFileSizeLimit = function (fileNames) { + var totalNonTsFileSize = 0; + if (!this.host.getFileSize) { + return false; + } + for (var _i = 0, fileNames_4 = fileNames; _i < fileNames_4.length; _i++) { + var fileName = fileNames_4[_i]; + if (ts.hasTypeScriptFileExtension(fileName)) { + continue; + } + totalNonTsFileSize += this.host.getFileSize(fileName); + if (totalNonTsFileSize > server.maxProgramSizeForNonTsFiles) { + return true; + } + } + return false; + }; ProjectService.prototype.openConfigFile = function (configFilename, clientFileName) { var _this = this; var _a = this.configFileToProjectOptions(configFilename), succeeded = _a.succeeded, projectOptions = _a.projectOptions, errors = _a.errors; @@ -50628,23 +51823,39 @@ var ts; return { success: false, errors: errors }; } else { - var project_1 = this.createProject(configFilename, projectOptions); + if (!projectOptions.compilerOptions.disableSizeLimit && projectOptions.compilerOptions.allowJs) { + if (this.exceedTotalNonTsFileSizeLimit(projectOptions.files)) { + var project_1 = this.createProject(configFilename, projectOptions, true); + project_1.projectFileWatcher = this.host.watchFile(ts.toPath(configFilename, configFilename, ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)), function (_) { return _this.watchedProjectConfigFileChanged(project_1); }); + return { success: true, project: project_1 }; + } + } + var project_2 = 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); + project_2.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 }; + project_2.finishGraph(); + project_2.projectFileWatcher = this.host.watchFile(configFilename, function (_) { return _this.watchedProjectConfigFileChanged(project_2); }); + var configDirectoryPath_1 = ts.getDirectoryPath(configFilename); + this.log("Add recursive watcher for: " + configDirectoryPath_1); + project_2.directoryWatcher = this.host.watchDirectory(configDirectoryPath_1, function (path) { return _this.directoryWatchedForSourceFilesChanged(project_2, path); }, true); + project_2.directoriesWatchedForWildcards = ts.reduceProperties(projectOptions.wildcardDirectories, function (watchers, flag, directory) { + if (ts.comparePaths(configDirectoryPath_1, directory, ".", !_this.host.useCaseSensitiveFileNames) !== 0) { + var recursive = (flag & 1) !== 0; + _this.log("Add " + (recursive ? "recursive " : "") + "watcher for: " + directory); + watchers[directory] = _this.host.watchDirectory(directory, function (path) { return _this.directoryWatchedForSourceFilesChanged(project_2, path); }, recursive); + } + return watchers; + }, {}); + return { success: true, project: project_2, errors: errors_1 }; } }; ProjectService.prototype.updateConfiguredProject = function (project) { @@ -50659,19 +51870,45 @@ var ts; return errors; } else { - var oldFileNames_1 = project.compilerService.host.roots.map(function (info) { return info.fileName; }); + if (projectOptions.compilerOptions && !projectOptions.compilerOptions.disableSizeLimit && this.exceedTotalNonTsFileSizeLimit(projectOptions.files)) { + project.setProjectOptions(projectOptions); + if (project.languageServiceDiabled) { + return; + } + project.disableLanguageService(); + if (project.directoryWatcher) { + project.directoryWatcher.close(); + project.directoryWatcher = undefined; + } + return; + } + if (project.languageServiceDiabled) { + project.setProjectOptions(projectOptions); + project.enableLanguageService(); + project.directoryWatcher = this.host.watchDirectory(ts.getDirectoryPath(project.projectFilename), function (path) { return _this.directoryWatchedForSourceFilesChanged(project, path); }, true); + 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, false); + project.addRoot(info); + } + } + project.finishGraph(); + return; + } + var oldFileNames_1 = project.projectOptions ? project.projectOptions.files : 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]; + for (var _c = 0, fileNamesToRemove_1 = fileNamesToRemove; _c < fileNamesToRemove_1.length; _c++) { + var fileName = fileNamesToRemove_1[_c]; 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]; + for (var _d = 0, fileNamesToAdd_1 = fileNamesToAdd; _d < fileNamesToAdd_1.length; _d++) { + var fileName = fileNamesToAdd_1[_d]; var info = this.getScriptInfo(fileName); if (!info) { info = this.openFile(fileName, false); @@ -50698,8 +51935,8 @@ var ts; } } }; - ProjectService.prototype.createProject = function (projectFilename, projectOptions) { - var project = new Project(this, projectOptions); + ProjectService.prototype.createProject = function (projectFilename, projectOptions, languageServiceDisabled) { + var project = new Project(this, projectOptions, languageServiceDisabled); project.projectFilename = projectFilename; return project; }; @@ -50733,6 +51970,7 @@ var ts; }; CompilerService.getDefaultFormatCodeOptions = function (host) { return ts.clone({ + BaseIndentSize: 0, IndentSize: 4, TabSize: 4, NewLineCharacter: host.newLine || "\n", @@ -50746,6 +51984,7 @@ var ts; InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, + InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false, PlaceOpenBraceOnNewLineForFunctions: false, PlaceOpenBraceOnNewLineForControlBlocks: false }); @@ -51986,6 +53225,7 @@ var ts; function CoreServicesShimHostAdapter(shimHost) { var _this = this; this.shimHost = shimHost; + this.useCaseSensitiveFileNames = this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; if ("directoryExists" in this.shimHost) { this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; } @@ -51993,15 +53233,24 @@ var ts; this.realpath = function (path) { return _this.shimHost.realpath(path); }; } } - CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extension, exclude, depth) { - var encoded; + CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extensions, exclude, include, depth) { try { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude), depth); + var pattern = ts.getFileMatcherPatterns(rootDir, extensions, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); + return JSON.parse(this.shimHost.readDirectory(rootDir, JSON.stringify(extensions), JSON.stringify(pattern.basePaths), pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern, depth)); } catch (e) { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude)); + var results = []; + for (var _i = 0, extensions_2 = extensions; _i < extensions_2.length; _i++) { + var extension = extensions_2[_i]; + for (var _a = 0, _b = this.readDirectoryFallback(rootDir, extension, exclude); _a < _b.length; _a++) { + var file = _b[_a]; + if (!ts.contains(results, file)) { + results.push(file); + } + } + } + return results; } - return JSON.parse(encoded); }; CoreServicesShimHostAdapter.prototype.fileExists = function (fileName) { return this.shimHost.fileExists(fileName); @@ -52009,6 +53258,9 @@ var ts; CoreServicesShimHostAdapter.prototype.readFile = function (fileName) { return this.shimHost.readFile(fileName); }; + CoreServicesShimHostAdapter.prototype.readDirectoryFallback = function (rootDir, extension, exclude) { + return JSON.parse(this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude))); + }; return CoreServicesShimHostAdapter; }()); ts.CoreServicesShimHostAdapter = CoreServicesShimHostAdapter; @@ -52033,9 +53285,12 @@ var ts; return result; } function forwardJSONCall(logger, actionDescription, action, logPerformance) { + return forwardCall(logger, actionDescription, true, action, logPerformance); + } + function forwardCall(logger, actionDescription, returnJson, action, logPerformance) { try { var result = simpleForwardCall(logger, actionDescription, action, logPerformance); - return JSON.stringify({ result: result }); + return returnJson ? JSON.stringify({ result: result }) : result; } catch (err) { if (err instanceof ts.OperationCanceledException) { @@ -52179,9 +53434,9 @@ 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) { + LanguageServiceShimObject.prototype.isValidBraceCompletionAtPosition = function (fileName, position, openingBrace) { var _this = this; - return this.forwardJSONCall("isValidBraceCompletionAtPostion('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPostion(fileName, position, openingBrace); }); + return this.forwardJSONCall("isValidBraceCompletionAtPosition('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPosition(fileName, position, openingBrace); }); }; LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options) { var _this = this; @@ -52263,6 +53518,10 @@ var ts; var _this = this; return this.forwardJSONCall("getEmitOutput('" + fileName + "')", function () { return _this.languageService.getEmitOutput(fileName); }); }; + LanguageServiceShimObject.prototype.getEmitOutputObject = function (fileName) { + var _this = this; + return forwardCall(this.logger, "getEmitOutput('" + fileName + "')", false, function () { return _this.languageService.getEmitOutput(fileName); }, this.logPerformance); + }; return LanguageServiceShimObject; }(ShimBase)); function convertClassifications(classifications) { diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts index e8eae372528..2c9fffcfcfb 100644 --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -403,7 +403,7 @@ declare namespace ts { hasTrailingComma?: boolean; } interface ModifiersArray extends NodeArray { - flags: number; + flags: NodeFlags; } interface Modifier extends Node { } @@ -704,7 +704,6 @@ declare namespace ts { } interface PropertyAccessExpression extends MemberExpression, Declaration { expression: LeftHandSideExpression; - dotToken: Node; name: Identifier; } type IdentifierOrPropertyAccess = Identifier | PropertyAccessExpression; @@ -745,9 +744,10 @@ declare namespace ts { children: NodeArray; closingElement: JsxClosingElement; } + type JsxTagNameExpression = PrimaryExpression | PropertyAccessExpression; interface JsxOpeningElement extends Expression { _openingElementBrand?: any; - tagName: EntityName; + tagName: JsxTagNameExpression; attributes: NodeArray; } interface JsxSelfClosingElement extends PrimaryExpression, JsxOpeningElement { @@ -762,7 +762,7 @@ declare namespace ts { expression: Expression; } interface JsxClosingElement extends Node { - tagName: EntityName; + tagName: JsxTagNameExpression; } interface JsxExpression extends Expression { expression?: Expression; @@ -835,6 +835,7 @@ declare namespace ts { interface SwitchStatement extends Statement { expression: Expression; caseBlock: CaseBlock; + possiblyExhaustive?: boolean; } interface CaseBlock extends Node { clauses: NodeArray; @@ -910,7 +911,7 @@ declare namespace ts { type ModuleBody = ModuleBlock | ModuleDeclaration; interface ModuleDeclaration extends DeclarationStatement { name: Identifier | LiteralExpression; - body: ModuleBlock | ModuleDeclaration; + body?: ModuleBlock | ModuleDeclaration; } interface ModuleBlock extends Node, Statement { statements: NodeArray; @@ -1066,8 +1067,9 @@ declare namespace ts { Assignment = 16, TrueCondition = 32, FalseCondition = 64, - Referenced = 128, - Shared = 256, + SwitchClause = 128, + Referenced = 256, + Shared = 512, Label = 12, Condition = 96, } @@ -1089,6 +1091,12 @@ declare namespace ts { expression: Expression; antecedent: FlowNode; } + interface FlowSwitchClause extends FlowNode { + switchStatement: SwitchStatement; + clauseStart: number; + clauseEnd: number; + antecedent: FlowNode; + } interface AmdDependency { path: string; name: string; @@ -1132,7 +1140,9 @@ declare namespace ts { getCurrentDirectory(): string; } interface ParseConfigHost { - readDirectory(rootDir: string, extension: string, exclude: string[]): string[]; + useCaseSensitiveFileNames: boolean; + readDirectory(rootDir: string, extensions: string[], excludes: string[], includes: string[]): string[]; + fileExists(path: string): boolean; } interface WriteFileCallback { (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void, sourceFiles?: SourceFile[]): void; @@ -1254,7 +1264,7 @@ declare namespace ts { 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; + buildDisplayForParametersAndDelimiters(thisParameter: Symbol, 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; } @@ -1427,6 +1437,7 @@ declare namespace ts { BlockScoped = 418, PropertyOrAccessor = 98308, Export = 7340032, + ClassMember = 106500, Classifiable = 788448, } interface Symbol { @@ -1437,11 +1448,13 @@ declare namespace ts { members?: SymbolTable; exports?: SymbolTable; globalExports?: SymbolTable; + isReadonly?: boolean; id?: number; mergeId?: number; parent?: Symbol; exportSymbol?: Symbol; constEnumOnlyModule?: boolean; + isReferenced?: boolean; } interface SymbolLinks { target?: Symbol; @@ -1504,6 +1517,7 @@ declare namespace ts { resolvedJsxType?: Type; hasSuperCall?: boolean; superCall?: ExpressionStatement; + switchTypes?: Type[]; } const enum TypeFlags { Any = 1, @@ -1535,7 +1549,7 @@ declare namespace ts { ObjectLiteralPatternWithComputedProperties = 67108864, Never = 134217728, Nullable = 96, - Falsy = 126, + Falsy = 112, Intrinsic = 150995071, Primitive = 16777726, StringLike = 258, @@ -1629,7 +1643,7 @@ declare namespace ts { declaration: SignatureDeclaration; typeParameters: TypeParameter[]; parameters: Symbol[]; - thisType?: Type; + thisParameter?: Symbol; resolvedReturnType: Type; minArgumentCount: number; hasRestParameter: boolean; @@ -1721,6 +1735,7 @@ declare namespace ts { declaration?: boolean; declarationDir?: string; diagnostics?: boolean; + disableSizeLimit?: boolean; emitBOM?: boolean; emitDecoratorMetadata?: boolean; experimentalDecorators?: boolean; @@ -1736,6 +1751,7 @@ declare namespace ts { listFiles?: boolean; locale?: string; mapRoot?: string; + maxNodeModuleJsDepth?: number; module?: ModuleKind; moduleResolution?: ModuleResolutionKind; newLine?: NewLineKind; @@ -1747,6 +1763,8 @@ declare namespace ts { noImplicitAny?: boolean; noImplicitReturns?: boolean; noImplicitThis?: boolean; + noUnusedLocals?: boolean; + noUnusedParameters?: boolean; noImplicitUseStrict?: boolean; noLib?: boolean; noResolve?: boolean; @@ -1773,8 +1791,7 @@ declare namespace ts { target?: ScriptTarget; traceResolution?: boolean; types?: string[]; - typesRoot?: string; - typesSearchPaths?: string[]; + typeRoots?: string[]; version?: boolean; watch?: boolean; [option: string]: CompilerOptionsValue | undefined; @@ -1843,6 +1860,15 @@ declare namespace ts { fileNames: string[]; raw?: any; errors: Diagnostic[]; + wildcardDirectories?: Map; + } + const enum WatchDirectoryFlags { + None = 0, + Recursive = 1, + } + interface ExpandResult { + fileNames: string[]; + wildcardDirectories: Map; } interface CommandLineOptionBase { name: string; @@ -2027,6 +2053,7 @@ declare namespace ts { getDefaultTypeDirectiveNames?(rootPath: string): string[]; writeFile: WriteFileCallback; getCurrentDirectory(): string; + getDirectories(path: string): string[]; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; getNewLine(): string; @@ -2068,8 +2095,10 @@ declare namespace ts { 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 indexOfAnyCharCode(text: string, charCodes: number[], start?: number): number; function countWhere(array: T[], predicate: (x: T) => boolean): number; function filter(array: T[], f: (x: T) => boolean): T[]; + function filterMutate(array: T[], f: (x: T) => boolean): void; 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[]; @@ -2104,6 +2133,8 @@ declare namespace ts { function chainDiagnosticMessages(details: DiagnosticMessageChain, message: DiagnosticMessage, ...args: any[]): DiagnosticMessageChain; function concatenateDiagnosticMessageChains(headChain: DiagnosticMessageChain, tailChain: DiagnosticMessageChain): DiagnosticMessageChain; function compareValues(a: T, b: T): Comparison; + function compareStrings(a: string, b: string, ignoreCase?: boolean): Comparison; + function compareStringsCaseInsensitive(a: string, b: string): Comparison; function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): Comparison; function sortAndDeduplicateDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]; function deduplicateSortedDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]; @@ -2121,16 +2152,45 @@ declare namespace ts { 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 removeTrailingDirectorySeparator(path: string): string; + function ensureTrailingDirectorySeparator(path: string): string; + function comparePaths(a: string, b: string, currentDirectory: string, ignoreCase?: boolean): Comparison; + function containsPath(parent: string, child: string, currentDirectory: string, ignoreCase?: boolean): boolean; function fileExtensionIs(path: string, extension: string): boolean; + function fileExtensionIsAny(path: string, extensions: string[]): boolean; + function getRegularExpressionForWildcard(specs: string[], basePath: string, usage: "files" | "directories" | "exclude"): string; + interface FileSystemEntries { + files: string[]; + directories: string[]; + } + interface FileMatcherPatterns { + includeFilePattern: string; + includeDirectoryPattern: string; + excludePattern: string; + basePaths: string[]; + } + function getFileMatcherPatterns(path: string, extensions: string[], excludes: string[], includes: string[], useCaseSensitiveFileNames: boolean, currentDirectory: string): FileMatcherPatterns; + function matchFiles(path: string, extensions: string[], excludes: string[], includes: string[], useCaseSensitiveFileNames: boolean, currentDirectory: string, getFileSystemEntries: (path: string) => FileSystemEntries): string[]; 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; + const enum ExtensionPriority { + TypeScriptFiles = 0, + DeclarationAndJavaScriptFiles = 2, + Limit = 5, + Highest = 0, + Lowest = 2, + } + function getExtensionPriority(path: string, supportedExtensions: string[]): ExtensionPriority; + function adjustExtensionPriority(extensionPriority: ExtensionPriority): ExtensionPriority; + function getNextLowestExtensionPriority(extensionPriority: ExtensionPriority): ExtensionPriority; function removeFileExtension(path: string): string; function tryRemoveExtension(path: string, extension: string): string; function isJsxOrTsxExtension(ext: string): boolean; + function changeExtension(path: T, newExtension: string): T; interface ObjectAllocator { getNodeConstructor(): new (kind: SyntaxKind, pos?: number, end?: number) => Node; getSourceFileConstructor(): new (kind: SyntaxKind, pos?: number, end?: number) => SourceFile; @@ -2167,6 +2227,7 @@ declare namespace ts { useCaseSensitiveFileNames: boolean; write(s: string): void; readFile(path: string, encoding?: string): string; + getFileSize?(path: string): number; writeFile(path: string, data: string, writeByteOrderMark?: boolean): void; watchFile?(path: string, callback: FileWatcherCallback): FileWatcher; watchDirectory?(path: string, callback: DirectoryWatcherCallback, recursive?: boolean): FileWatcher; @@ -2177,7 +2238,7 @@ declare namespace ts { getExecutingFilePath(): string; getCurrentDirectory(): string; getDirectories(path: string): string[]; - readDirectory(path: string, extension?: string, exclude?: string[]): string[]; + readDirectory(path: string, extensions?: string[], exclude?: string[], include?: string[]): string[]; getModifiedTime?(path: string): Date; createHash?(data: string): string; getMemoryUsage?(): number; @@ -3053,7 +3114,7 @@ declare namespace ts { key: string; message: string; }; - A_parameter_property_may_not_be_a_binding_pattern: { + A_parameter_property_may_not_be_declared_using_a_binding_pattern: { code: number; category: DiagnosticCategory; key: string; @@ -3149,12 +3210,6 @@ declare namespace ts { 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; @@ -3479,6 +3534,12 @@ declare namespace ts { key: string; message: string; }; + A_parameter_property_cannot_be_declared_using_a_rest_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; Duplicate_identifier_0: { code: number; category: DiagnosticCategory; @@ -5099,6 +5160,18 @@ declare namespace ts { key: string; message: string; }; + Cannot_find_type_definition_file_for_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_extend_an_interface_0_Did_you_mean_implements: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; Import_declaration_0_is_using_private_name_1: { code: number; category: DiagnosticCategory; @@ -5537,6 +5610,18 @@ declare namespace ts { key: string; message: string; }; + File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; Cannot_read_file_0_Colon_1: { code: number; category: DiagnosticCategory; @@ -5669,6 +5754,12 @@ declare namespace ts { key: string; message: string; }; + File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; Concatenate_and_emit_output_to_single_file: { code: number; category: DiagnosticCategory; @@ -6359,6 +6450,36 @@ declare namespace ts { key: string; message: string; }; + _0_is_declared_but_never_used: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Report_Errors_on_Unused_Locals: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Report_Errors_on_Unused_Parameters: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; Variable_0_implicitly_has_an_1_type: { code: number; category: DiagnosticCategory; @@ -6575,12 +6696,6 @@ declare namespace ts { 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; @@ -6698,6 +6813,7 @@ declare namespace ts { scanJsxToken(): SyntaxKind; scanJSDocToken(): SyntaxKind; scan(): SyntaxKind; + getText(): string; setText(text: string, start?: number, length?: number): void; setOnError(onError: ErrorCallback): void; setScriptTarget(scriptTarget: ScriptTarget): void; @@ -6720,6 +6836,7 @@ declare namespace ts { }; function getLineAndCharacterOfPosition(sourceFile: SourceFile, position: number): LineAndCharacter; function isWhiteSpace(ch: number): boolean; + function isWhiteSpaceSingleLine(ch: number): boolean; function isLineBreak(ch: number): boolean; function isOctalDigit(ch: number): boolean; function couldStartTrivia(text: string, pos: number): boolean; @@ -6742,7 +6859,7 @@ declare namespace ts { 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 parseListTypeOption(opt: CommandLineOptionOfListType, value: string, errors: Diagnostic[]): (string | number)[] | undefined; function parseCommandLine(commandLine: string[], readFile?: (path: string) => string): ParsedCommandLine; function readConfigFile(fileName: string, readFile: (path: string) => string): { config?: any; @@ -6780,6 +6897,7 @@ declare namespace ts { } interface EmitHost extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; + isSourceFileFromExternalLibrary(file: SourceFile): boolean; getCommonSourceDirectory(): string; getCanonicalFileName(fileName: string): string; getNewLine(): string; @@ -6818,6 +6936,7 @@ declare namespace ts { function makeIdentifierFromModuleName(moduleName: string): string; function isBlockOrCatchScoped(declaration: Declaration): boolean; function isAmbientModule(node: Node): boolean; + function isShorthandAmbientModule(node: Node): boolean; function isBlockScopedContainerTopLevel(node: Node): boolean; function isGlobalScopeAugmentation(module: ModuleDeclaration): boolean; function isExternalModuleAugmentation(node: Node): boolean; @@ -6880,6 +6999,7 @@ declare namespace ts { function isInJavaScriptFile(node: Node): boolean; function isRequireCall(expression: Node, checkArgumentIsStringLiteral: boolean): expression is CallExpression; function isSingleOrDoubleQuote(charCode: number): boolean; + function isDeclarationOfFunctionExpression(s: Symbol): boolean; function getSpecialPropertyAssignmentKind(expression: Node): SpecialPropertyAssignmentKind; function getExternalModuleName(node: Node): Expression; function hasQuestionToken(node: Node): boolean; @@ -6906,7 +7026,7 @@ declare namespace ts { function isLiteralComputedPropertyDeclarationName(node: Node): boolean; function isIdentifierName(node: Identifier): boolean; function isAliasSymbolDeclaration(node: Node): boolean; - function getClassExtendsHeritageClauseElement(node: ClassLikeDeclaration): ExpressionWithTypeArguments; + function getClassExtendsHeritageClauseElement(node: ClassLikeDeclaration | InterfaceDeclaration): ExpressionWithTypeArguments; function getClassImplementsHeritageClauseElements(node: ClassLikeDeclaration): NodeArray; function getInterfaceBaseTypeNodes(node: InterfaceDeclaration): NodeArray; function getHeritageClause(clauses: NodeArray, kind: SyntaxKind): HeritageClause; @@ -6994,6 +7114,7 @@ declare namespace ts { function isEmptyObjectLiteralOrArrayLiteral(expression: Node): boolean; function getLocalSymbolForExportDefault(symbol: Symbol): Symbol; function hasJavaScriptFileExtension(fileName: string): boolean; + function hasTypeScriptFileExtension(fileName: string): boolean; const stringify: (value: any) => string; function convertToBase64(input: string): string; function convertToRelativePath(absoluteOrRelativePath: string, basePath: string, getCanonicalFileName: (path: string) => string): string; @@ -7105,7 +7226,7 @@ declare namespace ts { 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 getDefaultTypeDirectiveNames(options: CompilerOptions, rootFiles: string[], host: CompilerHost): string[]; + function getAutomaticTypeDirectiveNames(options: CompilerOptions, rootFiles: string[], host: CompilerHost): string[]; function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost, oldProgram?: Program): Program; } declare namespace ts.BreakpointResolver { @@ -7118,8 +7239,7 @@ declare namespace ts.NavigateTo { function getNavigateToItems(program: Program, checker: TypeChecker, 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[]; + function getNavigationBarItems(sourceFile: SourceFile): NavigationBarItem[]; } declare namespace ts { enum PatternMatchKind { @@ -7229,7 +7349,7 @@ declare namespace ts.JsTyping { directoryExists: (path: string) => boolean; fileExists: (fileName: string) => boolean; readFile: (path: string, encoding?: string) => string; - readDirectory: (path: string, extension?: string, exclude?: string[], depth?: number) => string[]; + readDirectory: (rootDir: string, extensions: string[], excludes: string[], includes: string[], depth?: number) => string[]; } function discoverTypings(host: TypingResolutionHost, fileNames: string[], projectRootPath: Path, safeListPath: Path, packageNameToTypingLocation: Map, typingOptions: TypingOptions, compilerOptions: CompilerOptions): { cachedTypingPaths: string[]; @@ -7244,6 +7364,7 @@ declare namespace ts.formatting { readTokenInfo(n: Node): TokenInfo; getCurrentLeadingTrivia(): TextRangeWithKind[]; lastTrailingTriviaWasNewLine(): boolean; + skipToEndOf(node: Node): void; close(): void; } function getFormattingScanner(sourceFile: SourceFile, startPos: number, endPos: number): FormattingScanner; @@ -7451,6 +7572,10 @@ declare namespace ts.formatting { SpaceAfterTemplateHeadAndMiddle: Rule; NoSpaceBeforeTemplateMiddleAndTail: Rule; SpaceBeforeTemplateMiddleAndTail: Rule; + NoSpaceAfterOpenBraceInJsxExpression: Rule; + SpaceAfterOpenBraceInJsxExpression: Rule; + NoSpaceBeforeCloseBraceInJsxExpression: Rule; + SpaceBeforeCloseBraceInJsxExpression: Rule; constructor(); static IsForContext(context: FormattingContext): boolean; static IsNotForContext(context: FormattingContext): boolean; @@ -7478,6 +7603,8 @@ declare namespace ts.formatting { static IsNextTokenNotCloseBracket(context: FormattingContext): boolean; static IsArrowFunctionContext(context: FormattingContext): boolean; static IsNonJsxSameLineTokenContext(context: FormattingContext): boolean; + static isNonJsxElementContext(context: FormattingContext): boolean; + static isJsxExpressionContext(context: FormattingContext): boolean; static IsNotBeforeBlockInFunctionDeclarationContext(context: FormattingContext): boolean; static IsEndOfDecoratorContextOnSameLine(context: FormattingContext): boolean; static NodeIsInDecoratorContext(node: Node): boolean; @@ -7613,6 +7740,7 @@ declare namespace ts.formatting { declare namespace ts.formatting { namespace SmartIndenter { function getIndentation(position: number, sourceFile: SourceFile, options: EditorOptions): number; + function getBaseIndentation(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): { @@ -7716,6 +7844,7 @@ declare namespace ts { resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[]; resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[]; directoryExists?(directoryName: string): boolean; + getDirectories?(directoryName: string): string[]; } interface LanguageService { cleanupSemanticCache(): void; @@ -7750,7 +7879,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; + isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean; getEmitOutput(fileName: string): EmitOutput; getProgram(): Program; getNonBoundSourceFile(fileName: string): SourceFile; @@ -7799,6 +7928,7 @@ declare namespace ts { textSpan: TextSpan; fileName: string; isWriteAccess: boolean; + isDefinition: boolean; } interface DocumentHighlights { fileName: string; @@ -7827,6 +7957,7 @@ declare namespace ts { containerKind: string; } interface EditorOptions { + BaseIndentSize?: number; IndentSize: number; TabSize: number; NewLineCharacter: string; @@ -7847,9 +7978,10 @@ declare namespace ts { InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean; InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: boolean; InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean; + InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean; PlaceOpenBraceOnNewLineForFunctions: boolean; PlaceOpenBraceOnNewLineForControlBlocks: boolean; - [s: string]: boolean | number | string; + [s: string]: boolean | number | string | undefined; } interface DefinitionInfo { fileName: string; @@ -8154,6 +8286,8 @@ declare namespace ts.server { const Formatonkey: string; const Geterr: string; const GeterrForProject: string; + const SemanticDiagnosticsSync: string; + const SyntacticDiagnosticsSync: string; const NavBar: string; const Navto: string; const Occurrences: string; @@ -8200,6 +8334,9 @@ declare namespace ts.server { private getDefinition(line, offset, fileName); private getTypeDefinition(line, offset, fileName); private getOccurrences(line, offset, fileName); + private getDiagnosticsWorker(args, selector); + private getSyntacticDiagnosticsSync(args); + private getSemanticDiagnosticsSync(args); private getDocumentHighlights(line, offset, fileName, filesToSearch); private getProjectInfo(fileName, needFileNameList); private getRenameLocations(line, offset, fileName, findInComments, findInStrings); @@ -8216,13 +8353,14 @@ declare namespace ts.server { private reload(fileName, tempFileName, reqSeq?); private saveToTmp(fileName, tempFileName); private closeClientFile(fileName); - private decorateNavigationBarItem(project, fileName, items); + private decorateNavigationBarItem(project, fileName, items, lineIndex); 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 requiredResponse(response); private handlers; addProtocolHandler(command: string, handler: (request: protocol.Request) => { response?: any; @@ -8246,6 +8384,7 @@ declare namespace ts.server { endGroup(): void; msg(s: string, type?: string): void; } + const maxProgramSizeForNonTsFiles: number; class ScriptInfo { private host; fileName: string; @@ -8304,27 +8443,34 @@ declare namespace ts.server { resolvePath(path: string): string; fileExists(path: string): boolean; directoryExists(path: string): boolean; + getDirectories(path: string): string[]; lineToTextSpan(filename: string, line: number): ts.TextSpan; lineOffsetToPosition(filename: string, line: number, offset: number): number; - positionToLineOffset(filename: string, position: number): ILineInfo; + positionToLineOffset(filename: string, position: number, lineIndex?: LineIndex): ILineInfo; + getLineIndex(filename: string): LineIndex; } interface ProjectOptions { files?: string[]; + wildcardDirectories?: ts.Map; compilerOptions?: ts.CompilerOptions; } class Project { projectService: ProjectService; projectOptions?: ProjectOptions; + languageServiceDiabled: boolean; compilerService: CompilerService; projectFilename: string; projectFileWatcher: FileWatcher; directoryWatcher: FileWatcher; + directoriesWatchedForWildcards: Map; directoriesWatchedForTsconfig: string[]; program: ts.Program; filenameToSourceFile: ts.Map; updateGraphSeq: number; openRefCount: number; - constructor(projectService: ProjectService, projectOptions?: ProjectOptions); + constructor(projectService: ProjectService, projectOptions?: ProjectOptions, languageServiceDiabled?: boolean); + enableLanguageService(): void; + disableLanguageService(): void; addOpenRef(): void; deleteOpenRef(): number; openReferencedFile(filename: string): ScriptInfo; @@ -8415,13 +8561,14 @@ declare namespace ts.server { projectOptions?: ProjectOptions; errors?: Diagnostic[]; }; + private exceedTotalNonTsFileSizeLimit(fileNames); openConfigFile(configFilename: string, clientFileName?: string): { success: boolean; project?: Project; errors?: Diagnostic[]; }; updateConfiguredProject(project: Project): Diagnostic[]; - createProject(projectFilename: string, projectOptions?: ProjectOptions): Project; + createProject(projectFilename: string, projectOptions?: ProjectOptions, languageServiceDisabled?: boolean): Project; } class CompilerService { project: Project; @@ -8592,7 +8739,9 @@ declare namespace ts { directoryExists(directoryName: string): boolean; } interface CoreServicesShimHost extends Logger, ModuleResolutionHost { - readDirectory(rootDir: string, extension: string, exclude?: string, depth?: number): string; + readDirectory(rootDir: string, extension: string, basePaths?: string, excludeEx?: string, includeFileEx?: string, includeDirEx?: string, depth?: number): string; + useCaseSensitiveFileNames?(): boolean; + getCurrentDirectory(): string; trace(s: string): void; } interface IFileReference { @@ -8643,8 +8792,9 @@ declare namespace ts { 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; + isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): string; getEmitOutput(fileName: string): string; + getEmitOutputObject(fileName: string): EmitOutput; } interface ClassifierShim extends Shim { getEncodedLexicalClassifications(text: string, lexState: EndOfLineState, syntacticClassifierAbsent?: boolean): string; @@ -8685,10 +8835,12 @@ declare namespace ts { private shimHost; directoryExists: (directoryName: string) => boolean; realpath: (path: string) => string; + useCaseSensitiveFileNames: boolean; constructor(shimHost: CoreServicesShimHost); - readDirectory(rootDir: string, extension: string, exclude: string[], depth?: number): string[]; + readDirectory(rootDir: string, extensions: string[], exclude: string[], include: string[], depth?: number): string[]; fileExists(fileName: string): boolean; readFile(fileName: string): string; + private readDirectoryFallback(rootDir, extension, exclude); } function realizeDiagnostics(diagnostics: Diagnostic[], newLine: string): { message: string; diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js index 2da5d67be8a..5dafd5528a8 100644 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -147,6 +147,15 @@ var ts; return -1; } ts.indexOf = indexOf; + function indexOfAnyCharCode(text, charCodes, start) { + for (var i = start || 0, len = text.length; i < len; i++) { + if (contains(charCodes, text.charCodeAt(i))) { + return i; + } + } + return -1; + } + ts.indexOfAnyCharCode = indexOfAnyCharCode; function countWhere(array, predicate) { var count = 0; if (array) { @@ -174,12 +183,24 @@ var ts; return result; } ts.filter = filter; + function filterMutate(array, f) { + var outIndex = 0; + for (var _i = 0, array_4 = array; _i < array_4.length; _i++) { + var item = array_4[_i]; + if (f(item)) { + array[outIndex] = item; + outIndex++; + } + } + array.length = outIndex; + } + ts.filterMutate = filterMutate; 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]; + for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { + var v = array_5[_i]; result.push(f(v)); } } @@ -198,8 +219,8 @@ var ts; var result; if (array) { result = []; - for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { - var item = array_5[_i]; + for (var _i = 0, array_6 = array; _i < array_6.length; _i++) { + var item = array_6[_i]; if (!contains(result, item, areEqual)) { result.push(item); } @@ -210,8 +231,8 @@ var ts; 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]; + for (var _i = 0, array_7 = array; _i < array_7.length; _i++) { + var v = array_7[_i]; result += v[prop]; } return result; @@ -505,6 +526,30 @@ var ts; return a < b ? -1 : 1; } ts.compareValues = compareValues; + function compareStrings(a, b, ignoreCase) { + if (a === b) + return 0; + if (a === undefined) + return -1; + if (b === undefined) + return 1; + if (ignoreCase) { + if (String.prototype.localeCompare) { + var result = a.localeCompare(b, undefined, { usage: "sort", sensitivity: "accent" }); + return result < 0 ? -1 : result > 0 ? 1 : 0; + } + a = a.toUpperCase(); + b = b.toUpperCase(); + if (a === b) + return 0; + } + return a < b ? -1 : 1; + } + ts.compareStrings = compareStrings; + function compareStringsCaseInsensitive(a, b) { + return compareStrings(a, b, true); + } + ts.compareStringsCaseInsensitive = compareStringsCaseInsensitive; function getDiagnosticFileName(diagnostic) { return diagnostic.file ? diagnostic.file.fileName : undefined; } @@ -727,12 +772,219 @@ var ts; return path1 + ts.directorySeparator + path2; } ts.combinePaths = combinePaths; + function removeTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) === ts.directorySeparator) { + return path.substr(0, path.length - 1); + } + return path; + } + ts.removeTrailingDirectorySeparator = removeTrailingDirectorySeparator; + function ensureTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) !== ts.directorySeparator) { + return path + ts.directorySeparator; + } + return path; + } + ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator; + function comparePaths(a, b, currentDirectory, ignoreCase) { + if (a === b) + return 0; + if (a === undefined) + return -1; + if (b === undefined) + return 1; + a = removeTrailingDirectorySeparator(a); + b = removeTrailingDirectorySeparator(b); + var aComponents = getNormalizedPathComponents(a, currentDirectory); + var bComponents = getNormalizedPathComponents(b, currentDirectory); + var sharedLength = Math.min(aComponents.length, bComponents.length); + for (var i = 0; i < sharedLength; i++) { + var result = compareStrings(aComponents[i], bComponents[i], ignoreCase); + if (result !== 0) { + return result; + } + } + return compareValues(aComponents.length, bComponents.length); + } + ts.comparePaths = comparePaths; + function containsPath(parent, child, currentDirectory, ignoreCase) { + if (parent === undefined || child === undefined) + return false; + if (parent === child) + return true; + parent = removeTrailingDirectorySeparator(parent); + child = removeTrailingDirectorySeparator(child); + if (parent === child) + return true; + var parentComponents = getNormalizedPathComponents(parent, currentDirectory); + var childComponents = getNormalizedPathComponents(child, currentDirectory); + if (childComponents.length < parentComponents.length) { + return false; + } + for (var i = 0; i < parentComponents.length; i++) { + var result = compareStrings(parentComponents[i], childComponents[i], ignoreCase); + if (result !== 0) { + return false; + } + } + return true; + } + ts.containsPath = containsPath; function fileExtensionIs(path, extension) { var pathLen = path.length; var extLen = extension.length; return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } ts.fileExtensionIs = fileExtensionIs; + function fileExtensionIsAny(path, extensions) { + for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) { + var extension = extensions_1[_i]; + if (fileExtensionIs(path, extension)) { + return true; + } + } + return false; + } + ts.fileExtensionIsAny = fileExtensionIsAny; + var reservedCharacterPattern = /[^\w\s\/]/g; + var wildcardCharCodes = [42, 63]; + function getRegularExpressionForWildcard(specs, basePath, usage) { + if (specs === undefined || specs.length === 0) { + return undefined; + } + var pattern = ""; + var hasWrittenSubpattern = false; + spec: for (var _i = 0, specs_1 = specs; _i < specs_1.length; _i++) { + var spec = specs_1[_i]; + if (!spec) { + continue; + } + var subpattern = ""; + var hasRecursiveDirectoryWildcard = false; + var hasWrittenComponent = false; + var components = getNormalizedPathComponents(spec, basePath); + if (usage !== "exclude" && components[components.length - 1] === "**") { + continue spec; + } + components[0] = removeTrailingDirectorySeparator(components[0]); + var optionalCount = 0; + for (var _a = 0, components_1 = components; _a < components_1.length; _a++) { + var component = components_1[_a]; + if (component === "**") { + if (hasRecursiveDirectoryWildcard) { + continue spec; + } + subpattern += "(/.+?)?"; + hasRecursiveDirectoryWildcard = true; + hasWrittenComponent = true; + } + else { + if (usage === "directories") { + subpattern += "("; + optionalCount++; + } + if (hasWrittenComponent) { + subpattern += ts.directorySeparator; + } + subpattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter); + hasWrittenComponent = true; + } + } + while (optionalCount > 0) { + subpattern += ")?"; + optionalCount--; + } + if (hasWrittenSubpattern) { + pattern += "|"; + } + pattern += "(" + subpattern + ")"; + hasWrittenSubpattern = true; + } + if (!pattern) { + return undefined; + } + return "^(" + pattern + (usage === "exclude" ? ")($|/)" : ")$"); + } + ts.getRegularExpressionForWildcard = getRegularExpressionForWildcard; + function replaceWildcardCharacter(match) { + return match === "*" ? "[^/]*" : match === "?" ? "[^/]" : "\\" + match; + } + function getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var absolutePath = combinePaths(currentDirectory, path); + return { + includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"), + includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"), + excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"), + basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames) + }; + } + ts.getFileMatcherPatterns = getFileMatcherPatterns; + function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, getFileSystemEntries) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var patterns = getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory); + var regexFlag = useCaseSensitiveFileNames ? "" : "i"; + var includeFileRegex = patterns.includeFilePattern && new RegExp(patterns.includeFilePattern, regexFlag); + var includeDirectoryRegex = patterns.includeDirectoryPattern && new RegExp(patterns.includeDirectoryPattern, regexFlag); + var excludeRegex = patterns.excludePattern && new RegExp(patterns.excludePattern, regexFlag); + var result = []; + for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) { + var basePath = _a[_i]; + visitDirectory(basePath, combinePaths(currentDirectory, basePath)); + } + return result; + function visitDirectory(path, absolutePath) { + var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories; + for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { + var current = files_1[_i]; + var name_1 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!extensions || fileExtensionIsAny(name_1, extensions)) && + (!includeFileRegex || includeFileRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + result.push(name_1); + } + } + for (var _b = 0, directories_1 = directories; _b < directories_1.length; _b++) { + var current = directories_1[_b]; + var name_2 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + visitDirectory(name_2, absoluteName); + } + } + } + } + ts.matchFiles = matchFiles; + function getBasePaths(path, includes, useCaseSensitiveFileNames) { + var basePaths = [path]; + if (includes) { + var includeBasePaths = []; + for (var _i = 0, includes_1 = includes; _i < includes_1.length; _i++) { + var include = includes_1[_i]; + var absolute = isRootedDiskPath(include) ? include : normalizePath(combinePaths(path, include)); + var wildcardOffset = indexOfAnyCharCode(absolute, wildcardCharCodes); + var includeBasePath = wildcardOffset < 0 + ? removeTrailingDirectorySeparator(getDirectoryPath(absolute)) + : absolute.substring(0, absolute.lastIndexOf(ts.directorySeparator, wildcardOffset)); + includeBasePaths.push(includeBasePath); + } + includeBasePaths.sort(useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive); + include: for (var i = 0; i < includeBasePaths.length; i++) { + var includeBasePath = includeBasePaths[i]; + for (var j = 0; j < basePaths.length; j++) { + if (containsPath(basePaths[j], includeBasePath, path, !useCaseSensitiveFileNames)) { + continue include; + } + } + basePaths.push(includeBasePath); + } + } + return basePaths; + } function ensureScriptKind(fileName, scriptKind) { return (scriptKind || getScriptKindFromFileName(fileName)) || 3; } @@ -773,6 +1025,36 @@ var ts; return false; } ts.isSupportedSourceFileName = isSupportedSourceFileName; + function getExtensionPriority(path, supportedExtensions) { + for (var i = supportedExtensions.length - 1; i >= 0; i--) { + if (fileExtensionIs(path, supportedExtensions[i])) { + return adjustExtensionPriority(i); + } + } + return 0; + } + ts.getExtensionPriority = getExtensionPriority; + function adjustExtensionPriority(extensionPriority) { + if (extensionPriority < 2) { + return 0; + } + else if (extensionPriority < 5) { + return 2; + } + else { + return 5; + } + } + ts.adjustExtensionPriority = adjustExtensionPriority; + function getNextLowestExtensionPriority(extensionPriority) { + if (extensionPriority < 2) { + return 2; + } + else { + return 5; + } + } + ts.getNextLowestExtensionPriority = getNextLowestExtensionPriority; var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"]; function removeFileExtension(path) { for (var _i = 0, extensionsToRemove_1 = extensionsToRemove; _i < extensionsToRemove_1.length; _i++) { @@ -793,6 +1075,10 @@ var ts; return ext === ".jsx" || ext === ".tsx"; } ts.isJsxOrTsxExtension = isJsxOrTsxExtension; + function changeExtension(path, newExtension) { + return (removeFileExtension(path) + newExtension); + } + ts.changeExtension = changeExtension; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -863,6 +1149,7 @@ var ts; ts.sys = (function () { function getWScriptSystem() { var fso = new ActiveXObject("Scripting.FileSystemObject"); + var shell = new ActiveXObject("WScript.Shell"); var fileStream = new ActiveXObject("ADODB.Stream"); fileStream.Type = 2; var binaryStream = new ActiveXObject("ADODB.Stream"); @@ -917,9 +1204,6 @@ var ts; fileStream.Close(); } } - function getCanonicalPath(path) { - return path.toLowerCase(); - } function getNames(collection) { var result = []; for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) { @@ -931,30 +1215,19 @@ var ts; var folder = fso.GetFolder(path); return getNames(folder.subfolders); } - 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) { + function getAccessibleFileSystemEntries(path) { + try { 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); - } - } + var directories = getNames(folder.subfolders); + return { files: files, directories: directories }; } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, false, shell.CurrentDirectory, getAccessibleFileSystemEntries); } return { args: args, @@ -983,7 +1256,7 @@ var ts; return WScript.ScriptFullName; }, getCurrentDirectory: function () { - return new ActiveXObject("WScript.Shell").CurrentDirectory; + return shell.CurrentDirectory; }, getDirectories: getDirectories, readDirectory: readDirectory, @@ -1112,8 +1385,39 @@ var ts; } } } - function getCanonicalPath(path) { - return useCaseSensitiveFileNames ? path : path.toLowerCase(); + function getAccessibleFileSystemEntries(path) { + try { + var entries = _fs.readdirSync(path || ".").sort(); + var files = []; + var directories = []; + for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) { + var entry = entries_1[_i]; + if (entry === "." || entry === "..") { + continue; + } + var name_3 = ts.combinePaths(path, entry); + var stat = void 0; + try { + stat = _fs.statSync(name_3); + } + catch (e) { + continue; + } + if (stat.isFile()) { + files.push(entry); + } + else if (stat.isDirectory()) { + directories.push(entry); + } + } + return { files: files, directories: directories }; + } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), getAccessibleFileSystemEntries); } function fileSystemEntryExists(path, entryKind) { try { @@ -1136,38 +1440,6 @@ var ts; function getDirectories(path) { return ts.filter(_fs.readdirSync(path), function (p) { return fileSystemEntryExists(ts.combinePaths(path, p), 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, @@ -1249,6 +1521,16 @@ var ts; } return process.memoryUsage().heapUsed; }, + getFileSize: function (path) { + try { + var stat = _fs.statSync(path); + if (stat.isFile()) { + return stat.size; + } + } + catch (e) { } + return 0; + }, exit: function (exitCode) { process.exit(exitCode); }, @@ -1280,7 +1562,10 @@ var ts; getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, getDirectories: ChakraHost.getDirectories, - readDirectory: ChakraHost.readDirectory, + readDirectory: function (path, extensions, excludes, includes) { + var pattern = ts.getFileMatcherPatterns(path, extensions, excludes, includes, !!ChakraHost.useCaseSensitiveFileNames, ChakraHost.currentDirectory); + return ChakraHost.readDirectory(path, extensions, pattern.basePaths, pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern); + }, exit: ChakraHost.quit, realpath: realpath }; @@ -1445,7 +1730,7 @@ var ts; 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." }, + A_parameter_property_may_not_be_declared_using_a_binding_pattern: { code: 1187, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187", message: "A parameter property may not be declared using 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." }, @@ -1461,7 +1746,6 @@ var ts; 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_2015_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_2015_modules_Consider_using_import_Asteri_1202", message: "Import assignment cannot be used when targeting ECMAScript 2015 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_2015_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_2015_modules_Consider_using_export_defaul_1203", message: "Export assignment cannot be used when targeting ECMAScript 2015 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." }, @@ -1516,6 +1800,7 @@ var ts; 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." }, + A_parameter_property_cannot_be_declared_using_a_rest_parameter: { code: 1317, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317", message: "A parameter property cannot be declared using a rest parameter." }, 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." }, @@ -1786,6 +2071,8 @@ var ts; 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." }, Identifier_0_must_be_imported_from_a_module: { code: 2686, category: ts.DiagnosticCategory.Error, key: "Identifier_0_must_be_imported_from_a_module_2686", message: "Identifier '{0}' must be imported from a module" }, All_declarations_of_0_must_have_identical_modifiers: { code: 2687, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_0_must_have_identical_modifiers_2687", message: "All declarations of '{0}' must have identical modifiers." }, + Cannot_find_type_definition_file_for_0: { code: 2688, category: ts.DiagnosticCategory.Error, key: "Cannot_find_type_definition_file_for_0_2688", message: "Cannot find type definition file for '{0}'." }, + Cannot_extend_an_interface_0_Did_you_mean_implements: { code: 2689, category: ts.DiagnosticCategory.Error, key: "Cannot_extend_an_interface_0_Did_you_mean_implements_2689", message: "Cannot extend an interface '{0}'. Did you mean 'implements'?" }, 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}'." }, @@ -1859,6 +2146,8 @@ var ts; 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." }, + File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5010, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", message: "File specification cannot end in a recursive directory wildcard ('**'): '{0}'." }, + File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0: { code: 5011, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0_5011", message: "File specification cannot contain multiple recursive directory wildcards ('**'): '{0}'." }, 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}." }, @@ -1881,6 +2170,7 @@ var ts; 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" }, Substitutions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substitutions_for_pattern_0_should_be_an_array_5063", message: "Substitutions 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}'." }, + File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5065, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065", message: "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'." }, 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." }, @@ -1996,6 +2286,11 @@ var ts; 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}'" }, Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system: { code: 6131, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131", message: "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'." }, File_name_0_has_a_1_extension_stripping_it: { code: 6132, category: ts.DiagnosticCategory.Message, key: "File_name_0_has_a_1_extension_stripping_it_6132", message: "File name '{0}' has a '{1}' extension - stripping it" }, + _0_is_declared_but_never_used: { code: 6133, category: ts.DiagnosticCategory.Error, key: "_0_is_declared_but_never_used_6133", message: "'{0}' is declared but never used." }, + Report_Errors_on_Unused_Locals: { code: 6134, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Locals_6134", message: "Report Errors on Unused Locals." }, + Report_Errors_on_Unused_Parameters: { code: 6135, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Parameters_6135", message: "Report Errors on Unused Parameters." }, + The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files: { code: 6136, category: ts.DiagnosticCategory.Message, key: "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136", message: "The maximum dependency depth to search under node_modules and load JavaScript files" }, + No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0: { code: 6137, category: ts.DiagnosticCategory.Message, key: "No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0_6137", message: "No types specified in 'package.json' but 'allowJs' is set, so returning 'main' value of '{0}'" }, 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." }, @@ -2032,7 +2327,6 @@ var ts; 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." }, @@ -2295,6 +2589,10 @@ var ts; ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; var hasOwnProperty = Object.prototype.hasOwnProperty; function isWhiteSpace(ch) { + return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); + } + ts.isWhiteSpace = isWhiteSpace; + function isWhiteSpaceSingleLine(ch) { return ch === 32 || ch === 9 || ch === 11 || @@ -2308,7 +2606,7 @@ var ts; ch === 12288 || ch === 65279; } - ts.isWhiteSpace = isWhiteSpace; + ts.isWhiteSpaceSingleLine = isWhiteSpaceSingleLine; function isLineBreak(ch) { return ch === 10 || ch === 13 || @@ -2409,7 +2707,7 @@ var ts; } break; default: - if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 && (isWhiteSpace(ch))) { pos++; continue; } @@ -2530,7 +2828,7 @@ var ts; } break; default: - if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 && (isWhiteSpace(ch))) { if (result && result.length && isLineBreak(ch)) { ts.lastOrUndefined(result).hasTrailingNewLine = true; } @@ -2613,6 +2911,7 @@ var ts; scanJsxToken: scanJsxToken, scanJSDocToken: scanJSDocToken, scan: scan, + getText: getText, setText: setText, setScriptTarget: setScriptTarget, setLanguageVariant: setLanguageVariant, @@ -2978,7 +3277,7 @@ var ts; continue; } else { - while (pos < end && isWhiteSpace(text.charCodeAt(pos))) { + while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } return token = 5; @@ -3277,7 +3576,7 @@ var ts; } return token = getIdentifierToken(); } - else if (isWhiteSpace(ch)) { + else if (isWhiteSpaceSingleLine(ch)) { pos++; continue; } @@ -3418,7 +3717,7 @@ var ts; var ch = text.charCodeAt(pos); while (pos < end) { ch = text.charCodeAt(pos); - if (isWhiteSpace(ch)) { + if (isWhiteSpaceSingleLine(ch)) { pos++; } else { @@ -3505,6 +3804,9 @@ var ts; function tryScan(callback) { return speculationHelper(callback, false); } + function getText() { + return text; + } function setText(newText, start, length) { text = newText || ""; end = length === undefined ? text.length : start + length; @@ -3661,6 +3963,16 @@ var ts; type: "boolean", description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type }, + { + name: "noUnusedLocals", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Locals + }, + { + name: "noUnusedParameters", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Parameters + }, { name: "noLib", type: "boolean" @@ -3851,19 +4163,14 @@ var ts; } }, { - name: "typesSearchPaths", + name: "typeRoots", type: "list", - isTSConfigOnly: true, element: { - name: "typesSearchPaths", + name: "typeRoots", type: "string", isFilePath: true } }, - { - name: "typesRoot", - type: "string" - }, { name: "types", type: "list", @@ -3893,6 +4200,11 @@ var ts; type: "boolean", description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output }, + { + name: "maxNodeModuleJsDepth", + type: "number", + description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files + }, { name: "listEmittedFiles", type: "boolean" @@ -3928,6 +4240,10 @@ var ts; }, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon }, + { + name: "disableSizeLimit", + type: "boolean" + }, { name: "strictNullChecks", type: "boolean", @@ -3993,7 +4309,15 @@ var ts; } ts.parseCustomTypeOption = parseCustomTypeOption; function parseListTypeOption(opt, value, errors) { - var values = trimString((value || "")).split(","); + if (value === void 0) { value = ""; } + value = trimString(value); + if (ts.startsWith(value, "-")) { + return undefined; + } + if (value === "") { + return []; + } + var values = value.split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); @@ -4050,8 +4374,11 @@ var ts; i++; break; case "list": - options[opt.name] = parseListTypeOption(opt, args[i], errors); - i++; + var result = parseListTypeOption(opt, args[i], errors); + options[opt.name] = result || []; + if (result) { + i++; + } break; default: options[opt.name] = parseCustomTypeOption(opt, args[i], errors); @@ -4143,7 +4470,7 @@ var ts; } return output; } - var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; + var ignoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName) { if (existingOptions === void 0) { existingOptions = {}; } var errors = []; @@ -4151,66 +4478,57 @@ var ts; var options = ts.extend(existingOptions, compilerOptions); var typingOptions = convertTypingOptionsFromJsonWorker(json["typingOptions"], basePath, errors, configFileName); options.configFilePath = configFileName; - var fileNames = getFileNames(errors); + var _a = getFileNames(errors), fileNames = _a.fileNames, wildcardDirectories = _a.wildcardDirectories; return { options: options, fileNames: fileNames, typingOptions: typingOptions, raw: json, - errors: errors + errors: errors, + wildcardDirectories: wildcardDirectories }; function getFileNames(errors) { - var fileNames = []; + var fileNames; if (ts.hasProperty(json, "files")) { if (ts.isArray(json["files"])) { - fileNames = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); }); + fileNames = json["files"]; } 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"]; + var includeSpecs; + if (ts.hasProperty(json, "include")) { + if (ts.isArray(json["include"])) { + includeSpecs = json["include"]; } else { - exclude = ["node_modules", "bower_components", "jspm_packages"]; - } - var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } - exclude = ts.map(exclude, function (e) { return ts.getNormalizedAbsolutePath(e, basePath); }); - 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); - } + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array")); } } - if (ts.hasProperty(json, "excludes") && !ts.hasProperty(json, "exclude")) { + var excludeSpecs; + if (ts.hasProperty(json, "exclude")) { + if (ts.isArray(json["exclude"])) { + excludeSpecs = json["exclude"]; + } + else { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array")); + } + } + else if (ts.hasProperty(json, "excludes")) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); } - return fileNames; + else { + excludeSpecs = ["node_modules", "bower_components", "jspm_packages"]; + } + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + excludeSpecs.push(outDir); + } + if (fileNames === undefined && includeSpecs === undefined) { + includeSpecs = ["**/*"]; + } + return matchFileNames(fileNames, includeSpecs, excludeSpecs, basePath, options, host, errors); } } ts.parseJsonConfigFileContent = parseJsonConfigFileContent; @@ -4292,6 +4610,143 @@ var ts; function trimString(s) { return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, ""); } + var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; + var invalidMultipleRecursionPatterns = /(^|\/)\*\*\/(.*\/)?\*\*($|\/)/; + var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/; + var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//; + var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; + function matchFileNames(fileNames, include, exclude, basePath, options, host, errors) { + basePath = ts.normalizePath(basePath); + var keyMapper = host.useCaseSensitiveFileNames ? caseSensitiveKeyMapper : caseInsensitiveKeyMapper; + var literalFileMap = {}; + var wildcardFileMap = {}; + if (include) { + include = validateSpecs(include, errors, false); + } + if (exclude) { + exclude = validateSpecs(exclude, errors, true); + } + var wildcardDirectories = getWildcardDirectories(include, exclude, basePath, host.useCaseSensitiveFileNames); + var supportedExtensions = ts.getSupportedExtensions(options); + if (fileNames) { + for (var _i = 0, fileNames_1 = fileNames; _i < fileNames_1.length; _i++) { + var fileName = fileNames_1[_i]; + var file = ts.combinePaths(basePath, fileName); + literalFileMap[keyMapper(file)] = file; + } + } + if (include && include.length > 0) { + for (var _a = 0, _b = host.readDirectory(basePath, supportedExtensions, exclude, include); _a < _b.length; _a++) { + var file = _b[_a]; + if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) { + continue; + } + if (ignoreFileNamePattern.test(file)) { + continue; + } + removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper); + var key = keyMapper(file); + if (!ts.hasProperty(literalFileMap, key) && !ts.hasProperty(wildcardFileMap, key)) { + wildcardFileMap[key] = file; + } + } + } + var literalFiles = ts.reduceProperties(literalFileMap, addFileToOutput, []); + var wildcardFiles = ts.reduceProperties(wildcardFileMap, addFileToOutput, []); + wildcardFiles.sort(host.useCaseSensitiveFileNames ? ts.compareStrings : ts.compareStringsCaseInsensitive); + return { + fileNames: literalFiles.concat(wildcardFiles), + wildcardDirectories: wildcardDirectories + }; + } + function validateSpecs(specs, errors, allowTrailingRecursion) { + var validSpecs = []; + for (var _i = 0, specs_2 = specs; _i < specs_2.length; _i++) { + var spec = specs_2[_i]; + if (!allowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidMultipleRecursionPatterns.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else { + validSpecs.push(spec); + } + } + return validSpecs; + } + function getWildcardDirectories(include, exclude, path, useCaseSensitiveFileNames) { + var rawExcludeRegex = ts.getRegularExpressionForWildcard(exclude, path, "exclude"); + var excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames ? "" : "i"); + var wildcardDirectories = {}; + if (include !== undefined) { + var recursiveKeys = []; + for (var _i = 0, include_1 = include; _i < include_1.length; _i++) { + var file = include_1[_i]; + var name_5 = ts.normalizePath(ts.combinePaths(path, file)); + if (excludeRegex && excludeRegex.test(name_5)) { + continue; + } + var match = wildcardDirectoryPattern.exec(name_5); + if (match) { + var key = useCaseSensitiveFileNames ? match[0] : match[0].toLowerCase(); + var flags = watchRecursivePattern.test(name_5) ? 1 : 0; + var existingFlags = ts.getProperty(wildcardDirectories, key); + if (existingFlags === undefined || existingFlags < flags) { + wildcardDirectories[key] = flags; + if (flags === 1) { + recursiveKeys.push(key); + } + } + } + } + for (var key in wildcardDirectories) { + if (ts.hasProperty(wildcardDirectories, key)) { + for (var _a = 0, recursiveKeys_1 = recursiveKeys; _a < recursiveKeys_1.length; _a++) { + var recursiveKey = recursiveKeys_1[_a]; + if (key !== recursiveKey && ts.containsPath(recursiveKey, key, path, !useCaseSensitiveFileNames)) { + delete wildcardDirectories[key]; + } + } + } + } + } + return wildcardDirectories; + } + function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var adjustedExtensionPriority = ts.adjustExtensionPriority(extensionPriority); + for (var i = 0; i < adjustedExtensionPriority; i++) { + var higherPriorityExtension = extensions[i]; + var higherPriorityPath = keyMapper(ts.changeExtension(file, higherPriorityExtension)); + if (ts.hasProperty(literalFiles, higherPriorityPath) || ts.hasProperty(wildcardFiles, higherPriorityPath)) { + return true; + } + } + return false; + } + function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var nextExtensionPriority = ts.getNextLowestExtensionPriority(extensionPriority); + for (var i = nextExtensionPriority; i < extensions.length; i++) { + var lowerPriorityExtension = extensions[i]; + var lowerPriorityPath = keyMapper(ts.changeExtension(file, lowerPriorityExtension)); + delete wildcardFiles[lowerPriorityPath]; + } + } + function addFileToOutput(output, file) { + output.push(file); + return output; + } + function caseSensitiveKeyMapper(key) { + return key; + } + function caseInsensitiveKeyMapper(key) { + return key.toLowerCase(); + } })(ts || (ts = {})); var ts; (function (ts) { @@ -4572,6 +5027,10 @@ var ts; (node.name.kind === 9 || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; + function isShorthandAmbientModule(node) { + return node.kind === 225 && (!node.body); + } + ts.isShorthandAmbientModule = isShorthandAmbientModule; function isBlockScopedContainerTopLevel(node) { return node.kind === 256 || node.kind === 225 || @@ -4900,9 +5359,9 @@ var ts; return; default: if (isFunctionLike(node)) { - var name_5 = node.name; - if (name_5 && name_5.kind === 140) { - traverse(name_5.expression); + var name_6 = node.name; + if (name_6 && name_6.kind === 140) { + traverse(name_6.expression); return; } } @@ -4959,6 +5418,7 @@ var ts; case 157: return true; } + return false; } ts.isFunctionLikeKind = isFunctionLikeKind; function introducesArgumentsExoticObject(node) { @@ -5336,6 +5796,14 @@ var ts; return charCode === 39 || charCode === 34; } ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; + function isDeclarationOfFunctionExpression(s) { + if (s.valueDeclaration && s.valueDeclaration.kind === 218) { + var declaration = s.valueDeclaration; + return declaration.initializer && declaration.initializer.kind === 179; + } + return false; + } + ts.isDeclarationOfFunctionExpression = isDeclarationOfFunctionExpression; function getSpecialPropertyAssignmentKind(expression) { if (!isInJavaScriptFile(expression)) { return 0; @@ -5483,8 +5951,8 @@ var ts; var tag = _b[_a]; if (tag.kind === 275) { var parameterTag = tag; - var name_6 = parameterTag.preParameterName || parameterTag.postParameterName; - if (name_6.text === parameterName) { + var name_7 = parameterTag.preParameterName || parameterTag.postParameterName; + if (name_7.text === parameterName) { return parameterTag; } } @@ -6180,7 +6648,7 @@ var ts; 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)) { + if (!isDeclarationFile(sourceFile) && !host.isSourceFileFromExternalLibrary(sourceFile)) { onSingleFileEmit(host, sourceFile); } } @@ -6206,10 +6674,10 @@ var ts; action(emitFileNames, [sourceFile], false); } function onBundledEmit(host) { - var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { - return !isDeclarationFile(sourceFile) - && (!ts.isExternalModule(sourceFile) || !!getEmitModuleKind(options)); - }); + var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { return !isDeclarationFile(sourceFile) && + !host.isSourceFileFromExternalLibrary(sourceFile) && + (!ts.isExternalModule(sourceFile) || + !!getEmitModuleKind(options)); }); if (bundledSources.length) { var jsFilePath = options.outFile || options.out; var emitFileNames = { @@ -6227,7 +6695,9 @@ var ts; ts.forEachExpectedEmitFile = forEachExpectedEmitFile; function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); - sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); + var commonSourceDirectory = host.getCommonSourceDirectory(); + var isSourceFileInCommonSourceDirectory = host.getCanonicalFileName(sourceFilePath).indexOf(host.getCanonicalFileName(commonSourceDirectory)) === 0; + sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath; return ts.combinePaths(newDirPath, sourceFilePath); } ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir; @@ -6432,7 +6902,7 @@ var ts; } function calculateIndent(text, pos, end) { var currentLineIndent = 0; - for (; pos < end && ts.isWhiteSpace(text.charCodeAt(pos)); pos++) { + for (; pos < end && ts.isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) { if (text.charCodeAt(pos) === 9) { currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); } @@ -6541,6 +7011,10 @@ var ts; return ts.forEach(ts.supportedJavascriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); } ts.hasJavaScriptFileExtension = hasJavaScriptFileExtension; + function hasTypeScriptFileExtension(fileName) { + return ts.forEach(ts.supportedTypeScriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); + } + ts.hasTypeScriptFileExtension = hasTypeScriptFileExtension; function getExpandedCharCodes(input) { var output = []; var length = input.length; @@ -6924,7 +7398,6 @@ var ts; 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) || @@ -7655,12 +8128,12 @@ var ts; if (token === 82) { nextToken(); if (token === 77) { - return lookAhead(nextTokenIsClassOrFunction); + return lookAhead(nextTokenIsClassOrFunctionOrAsync); } return token !== 37 && token !== 116 && token !== 15 && canFollowModifier(); } if (token === 77) { - return nextTokenIsClassOrFunction(); + return nextTokenIsClassOrFunctionOrAsync(); } if (token === 113) { nextToken(); @@ -7675,11 +8148,13 @@ var ts; return token === 19 || token === 15 || token === 37 + || token === 22 || isLiteralPropertyName(); } - function nextTokenIsClassOrFunction() { + function nextTokenIsClassOrFunctionOrAsync() { nextToken(); - return token === 73 || token === 87; + return token === 73 || token === 87 || + (token === 118 && lookAhead(nextTokenIsFunctionKeywordOnSameLine)); } function isListElement(parsingContext, inErrorRecovery) { var node = currentNode(parsingContext); @@ -9182,7 +9657,7 @@ var ts; } 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); + parseExpectedToken(21, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(true); return finishNode(node); } @@ -9193,8 +9668,11 @@ var ts; if (lhs.kind === 69) { return lhs.text === rhs.text; } - return lhs.right.text === rhs.right.text && - tagNamesAreEquivalent(lhs.left, rhs.left); + if (lhs.kind === 97) { + return true; + } + return lhs.name.text === rhs.name.text && + tagNamesAreEquivalent(lhs.expression, rhs.expression); } function parseJsxElementOrSelfClosingElement(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); @@ -9291,15 +9769,15 @@ var ts; } function parseJsxElementName() { scanJsxIdentifier(); - var elementName = parseIdentifierName(); + var expression = token === 97 ? + parseTokenNode() : parseIdentifierName(); while (parseOptional(21)) { - scanJsxIdentifier(); - var node = createNode(139, elementName.pos); - node.left = elementName; - node.right = parseIdentifierName(); - elementName = finishNode(node); + var propertyAccess = createNode(172, expression.pos); + propertyAccess.expression = expression; + propertyAccess.name = parseRightSideOfDot(true); + expression = finishNode(propertyAccess); } - return elementName; + return expression; } function parseJsxExpression(inExpressionContext) { var node = createNode(248); @@ -9370,7 +9848,6 @@ var ts; if (dotToken) { var propertyAccess = createNode(172, expression.pos); propertyAccess.expression = expression; - propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(true); expression = finishNode(propertyAccess); continue; @@ -10078,7 +10555,7 @@ var ts; case 56: return parseExportAssignment(fullStart, decorators, modifiers); case 116: - return parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers); + return parseNamespaceExportDeclaration(fullStart, decorators, modifiers); default: return parseExportDeclaration(fullStart, decorators, modifiers); } @@ -10414,8 +10891,8 @@ var ts; 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); + var name_8 = createMissingNode(69, true, ts.Diagnostics.Declaration_expected); + return parsePropertyDeclaration(fullStart, decorators, modifiers, name_8, undefined); } ts.Debug.fail("Should not have attempted to parse class member declaration."); } @@ -10558,7 +11035,12 @@ var ts; else { node.name = parseLiteralNode(true); } - node.body = parseModuleBlock(); + if (token === 15) { + node.body = parseModuleBlock(); + } + else { + parseSemicolon(); + } return finishNode(node); } function parseModuleDeclaration(fullStart, decorators, modifiers) { @@ -10587,7 +11069,7 @@ var ts; function nextTokenIsSlash() { return nextToken() === 39; } - function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { + function parseNamespaceExportDeclaration(fullStart, decorators, modifiers) { var exportDeclaration = createNode(228, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; @@ -11302,8 +11784,8 @@ var ts; if (typeExpression.type.kind === 267) { var jsDocTypeReference = typeExpression.type; if (jsDocTypeReference.name.kind === 69) { - var name_8 = jsDocTypeReference.name; - if (name_8.text === "Object") { + var name_9 = jsDocTypeReference.name; + if (name_9.text === "Object") { typedefTag.jsDocTypeLiteral = scanChildTags(); } } @@ -11386,13 +11868,13 @@ var ts; var typeParameters = []; typeParameters.pos = scanner.getStartPos(); while (true) { - var name_9 = parseJSDocIdentifierName(); - if (!name_9) { + var name_10 = parseJSDocIdentifierName(); + if (!name_10) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); return undefined; } - var typeParameter = createNode(141, name_9.pos); - typeParameter.name = name_9; + var typeParameter = createNode(141, name_10.pos); + typeParameter.name = name_10; finishNode(typeParameter); typeParameters.push(typeParameter); if (token === 24) { @@ -11494,8 +11976,8 @@ var ts; 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]; + for (var _i = 0, array_8 = array; _i < array_8.length; _i++) { + var node = array_8[_i]; visitNode(node); } } @@ -11567,8 +12049,8 @@ var ts; 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]; + for (var _i = 0, array_9 = array; _i < array_9.length; _i++) { + var node = array_9[_i]; visitNode(node); } return; @@ -11748,7 +12230,8 @@ var ts; return state_1; } else if (node.kind === 225) { - return getModuleInstanceState(node.body); + var body = node.body; + return body ? getModuleInstanceState(body) : 1; } else { return 1; @@ -12091,6 +12574,9 @@ var ts; case 227: bindCaseBlock(node); break; + case 249: + bindCaseClause(node); + break; case 214: bindLabeledStatement(node); break; @@ -12117,11 +12603,6 @@ var ts; 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: @@ -12129,7 +12610,7 @@ var ts; case 172: return isNarrowableReference(expr); case 174: - return true; + return hasNarrowableArgument(expr); case 178: return isNarrowingExpression(expr.expression); case 187: @@ -12139,6 +12620,35 @@ var ts; } return false; } + function isNarrowableReference(expr) { + return expr.kind === 69 || + expr.kind === 97 || + expr.kind === 172 && isNarrowableReference(expr.expression); + } + function hasNarrowableArgument(expr) { + if (expr.arguments) { + for (var _i = 0, _a = expr.arguments; _i < _a.length; _i++) { + var argument = _a[_i]; + if (isNarrowableReference(argument)) { + return true; + } + } + } + if (expr.expression.kind === 172 && + isNarrowableReference(expr.expression.expression)) { + return true; + } + return false; + } + function isNarrowingNullCheckOperands(expr1, expr2) { + return (expr1.kind === 93 || expr1.kind === 69 && expr1.text === "undefined") && isNarrowableOperand(expr2); + } + function isNarrowingTypeofOperands(expr1, expr2) { + return expr1.kind === 182 && isNarrowableOperand(expr1.expression) && expr2.kind === 9; + } + function isNarrowingDiscriminant(expr) { + return expr.kind === 172 && isNarrowableReference(expr.expression); + } function isNarrowingBinaryExpression(expr) { switch (expr.operatorToken.kind) { case 56: @@ -12147,20 +12657,34 @@ var ts; 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; + return isNarrowingNullCheckOperands(expr.right, expr.left) || isNarrowingNullCheckOperands(expr.left, expr.right) || + isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right) || + isNarrowingDiscriminant(expr.left) || isNarrowingDiscriminant(expr.right); case 91: - return isNarrowingExpression(expr.left); + return isNarrowableOperand(expr.left); case 24: return isNarrowingExpression(expr.right); } return false; } + function isNarrowableOperand(expr) { + switch (expr.kind) { + case 178: + return isNarrowableOperand(expr.expression); + case 187: + switch (expr.operatorToken.kind) { + case 56: + return isNarrowableOperand(expr.left); + case 24: + return isNarrowableOperand(expr.right); + } + } + return isNarrowableReference(expr); + } + function isNarrowingSwitchStatement(switchStatement) { + var expr = switchStatement.expression; + return expr.kind === 172 && isNarrowableReference(expr.expression); + } function createBranchLabel() { return { flags: 4, @@ -12174,7 +12698,7 @@ var ts; }; } function setFlowNodeReferenced(flow) { - flow.flags |= flow.flags & 128 ? 256 : 128; + flow.flags |= flow.flags & 256 ? 512 : 256; } function addAntecedent(label, antecedent) { if (!(antecedent.flags & 1) && !ts.contains(label.antecedents, antecedent)) { @@ -12199,8 +12723,21 @@ var ts; setFlowNodeReferenced(antecedent); return { flags: flags, - antecedent: antecedent, - expression: expression + expression: expression, + antecedent: antecedent + }; + } + function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) { + if (!isNarrowingSwitchStatement(switchStatement)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: 128, + switchStatement: switchStatement, + clauseStart: clauseStart, + clauseEnd: clauseEnd, + antecedent: antecedent }; } function createFlowAssignment(antecedent, node) { @@ -12410,9 +12947,10 @@ var ts; preSwitchCaseFlow = currentFlow; bind(node.caseBlock); addAntecedent(postSwitchLabel, currentFlow); - var hasNonEmptyDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250 && c.statements.length; }); - if (!hasNonEmptyDefault) { - addAntecedent(postSwitchLabel, preSwitchCaseFlow); + var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250; }); + node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents; + if (!hasDefault) { + addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0)); } currentBreakTarget = saveBreakTarget; preSwitchCaseFlow = savePreSwitchCaseFlow; @@ -12420,28 +12958,32 @@ var ts; } function bindCaseBlock(node) { var clauses = node.clauses; + var fallthroughFlow = unreachableFlow; 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); - } + var clauseStart = i; + while (!clauses[i].statements.length && i + 1 < clauses.length) { + bind(clauses[i]); + i++; } - else { - bind(clause); + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1)); + addAntecedent(preCaseLabel, fallthroughFlow); + currentFlow = finishFlowLabel(preCaseLabel); + var clause = clauses[i]; + bind(clause); + fallthroughFlow = currentFlow; + if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); } } } + function bindCaseClause(node) { + var saveCurrentFlow = currentFlow; + currentFlow = preSwitchCaseFlow; + bind(node.expression); + currentFlow = saveCurrentFlow; + ts.forEach(node.statements, bind); + } function pushActiveLabel(name, breakTarget, continueTarget) { var activeLabel = { name: name, @@ -12703,7 +13245,7 @@ var ts; } function hasExportDeclarations(node) { var body = node.kind === 256 ? node : node.body; - if (body.kind === 256 || body.kind === 226) { + if (body && (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) { @@ -13223,7 +13765,7 @@ var ts; constructorFunction.parent = classPrototype; classPrototype.parent = leftSideOfAssignment; var funcSymbol = container.locals[constructorFunction.text]; - if (!funcSymbol || !(funcSymbol.flags & 16)) { + if (!funcSymbol || !(funcSymbol.flags & 16 || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return; } if (!funcSymbol.members) { @@ -13415,6 +13957,7 @@ var ts; var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || 0; var modulekind = ts.getEmitModuleKind(compilerOptions); + var noUnusedIdentifiers = !!compilerOptions.noUnusedLocals || !!compilerOptions.noUnusedParameters; var allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === ts.ModuleKind.System; var strictNullChecks = compilerOptions.strictNullChecks; var emitResolver = createResolver(); @@ -13521,6 +14064,7 @@ var ts; var getGlobalThenableType; var jsxElementClassType; var deferredNodes; + var deferredUnusedIdentifierNodes; var flowLoopStart = 0; var flowLoopCount = 0; var visitedFlowCount = 0; @@ -13808,7 +14352,8 @@ var ts; var declarationFile = ts.getSourceFileOfNode(declaration); var useFile = ts.getSourceFileOfNode(usage); if (declarationFile !== useFile) { - if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) { + if ((modulekind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) || + (!compilerOptions.outFile && !compilerOptions.out)) { return true; } var sourceFiles = host.getSourceFiles(); @@ -14000,12 +14545,16 @@ var ts; lastLocation = location; location = location.parent; } + if (result && nameNotFoundMessage && noUnusedIdentifiers) { + result.isReferenced = true; + } if (!result) { result = getSymbol(globals, name, meaning); } if (!result) { if (nameNotFoundMessage) { - if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg)) { + if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && + !checkAndReportErrorForExtendingInterface(errorLocation)) { error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); } } @@ -14061,6 +14610,29 @@ var ts; } return false; } + function checkAndReportErrorForExtendingInterface(errorLocation) { + var parentClassExpression = errorLocation; + while (parentClassExpression) { + var kind = parentClassExpression.kind; + if (kind === 69 || kind === 172) { + parentClassExpression = parentClassExpression.parent; + continue; + } + if (kind === 194) { + break; + } + return false; + } + if (!parentClassExpression) { + return false; + } + var expression = parentClassExpression.expression; + if (resolveEntityName(expression, 64, true)) { + error(errorLocation, ts.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, ts.getTextOfNode(expression)); + return true; + } + return false; + } function checkResolvedBlockScopedVariable(result, errorLocation) { ts.Debug.assert((result.flags & 2) !== 0); var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; }); @@ -14103,9 +14675,11 @@ var ts; 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"]); + var exportDefaultSymbol = ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration) ? + moduleSymbol : + 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)); } @@ -14154,22 +14728,25 @@ var ts; var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier); var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier); if (targetSymbol) { - var name_10 = specifier.propertyName || specifier.name; - if (name_10.text) { + var name_11 = specifier.propertyName || specifier.name; + if (name_11.text) { + if (ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration)) { + return moduleSymbol; + } var symbolFromVariable = void 0; if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports["export="]) { - symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name_10.text); + symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name_11.text); } else { - symbolFromVariable = getPropertyOfVariable(targetSymbol, name_10.text); + symbolFromVariable = getPropertyOfVariable(targetSymbol, name_11.text); } symbolFromVariable = resolveSymbol(symbolFromVariable); - var symbolFromModule = getExportOfModule(targetSymbol, name_10.text); + var symbolFromModule = getExportOfModule(targetSymbol, name_11.text); var symbol = symbolFromModule && symbolFromVariable ? combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : symbolFromModule || symbolFromVariable; if (!symbol) { - error(name_10, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_10)); + error(name_11, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_11)); } return symbol; } @@ -14178,7 +14755,7 @@ var ts; function getTargetOfImportSpecifier(node) { return getExternalModuleMember(node.parent.parent.parent, node); } - function getTargetOfGlobalModuleExportDeclaration(node) { + function getTargetOfNamespaceExportDeclaration(node) { return resolveExternalModuleSymbol(node.parent.symbol); } function getTargetOfExportSpecifier(node) { @@ -14204,7 +14781,7 @@ var ts; case 235: return getTargetOfExportAssignment(node); case 228: - return getTargetOfGlobalModuleExportDeclaration(node); + return getTargetOfNamespaceExportDeclaration(node); } } function resolveSymbol(symbol) { @@ -14287,9 +14864,12 @@ var ts; 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)) { + if (!namespace || ts.nodeIsMissing(right)) { return undefined; } + else if (namespace === unknownSymbol) { + return namespace; + } symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning); if (!symbol) { if (!ignoreErrors) { @@ -15250,16 +15830,13 @@ var ts; writePunctuation(writer, 27); } } - function buildDisplayForParametersAndDelimiters(thisType, parameters, writer, enclosingDeclaration, flags, symbolStack) { + function buildDisplayForParametersAndDelimiters(thisParameter, parameters, writer, enclosingDeclaration, flags, symbolStack) { writePunctuation(writer, 17); - if (thisType) { - writeKeyword(writer, 97); - writePunctuation(writer, 54); - writeSpace(writer); - buildTypeDisplay(thisType, writer, enclosingDeclaration, flags, symbolStack); + if (thisParameter) { + buildParameterDisplay(thisParameter, writer, enclosingDeclaration, flags, symbolStack); } for (var i = 0; i < parameters.length; i++) { - if (i > 0 || thisType) { + if (i > 0 || thisParameter) { writePunctuation(writer, 24); writeSpace(writer); } @@ -15307,7 +15884,7 @@ var ts; else { buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack); } - buildDisplayForParametersAndDelimiters(signature.thisType, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); + buildDisplayForParametersAndDelimiters(signature.thisParameter, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack); } return _displayBuilder || (_displayBuilder = { @@ -15504,6 +16081,9 @@ var ts; function isTypeAny(type) { return type && (type.flags & 1) !== 0; } + function isTypeNever(type) { + return type && (type.flags & 134217728) !== 0; + } function getTypeForBindingElementParent(node) { var symbol = getSymbolOfNode(node); return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, false); @@ -15539,19 +16119,19 @@ var ts; } var type; if (pattern.kind === 167) { - var name_11 = declaration.propertyName || declaration.name; - if (isComputedNonLiteralName(name_11)) { + var name_12 = declaration.propertyName || declaration.name; + if (isComputedNonLiteralName(name_12)) { return anyType; } if (declaration.initializer) { getContextualType(declaration.initializer); } - var text = getTextOfPropertyName(name_11); + var text = getTextOfPropertyName(name_12); type = getTypeOfPropertyOfType(parentType, text) || isNumericLiteralName(text) && getIndexTypeOfType(parentType, 1) || getIndexTypeOfType(parentType, 0); if (!type) { - error(name_11, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_11)); + error(name_12, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_12)); return unknownType; } } @@ -15635,12 +16215,13 @@ var ts; if (func.kind === 150 && !ts.hasDynamicName(func)) { var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149); if (getter) { - var signature = getSignatureFromDeclaration(getter); + var getterSignature = getSignatureFromDeclaration(getter); var thisParameter = getAccessorThisParameter(func); if (thisParameter && declaration === thisParameter) { - return signature.thisType; + ts.Debug.assert(!thisParameter.type); + return getTypeOfSymbol(getterSignature.thisParameter); } - return getReturnTypeOfSignature(signature); + return getReturnTypeOfSignature(getterSignature); } } var type = declaration.symbol.name === "this" @@ -15755,18 +16336,21 @@ var ts; 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); + var type = undefined; + if (declaration.kind === 187) { + type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); + } + else if (declaration.kind === 172) { + if (declaration.parent.kind === 187) { + type = checkExpressionCached(declaration.parent.right); + } + } + if (type === undefined) { + type = getWidenedTypeForVariableLikeDeclaration(declaration, true); + } if (!popTypeResolution()) { if (symbol.valueDeclaration.type) { type = unknownType; @@ -15795,14 +16379,12 @@ 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 getAnnotatedAccessorThisParameter(accessor) { + var parameter = getAccessorThisParameter(accessor); + return parameter && parameter.symbol; + } + function getThisTypeOfDeclaration(declaration) { + return getThisTypeOfSignature(getSignatureFromDeclaration(declaration)); } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); @@ -15854,9 +16436,14 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var type = createObjectType(65536, symbol); - links.type = strictNullChecks && symbol.flags & 536870912 ? - addTypeKind(type, 32) : type; + if (symbol.valueDeclaration.kind === 225 && ts.isShorthandAmbientModule(symbol.valueDeclaration)) { + links.type = anyType; + } + else { + var type = createObjectType(65536, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 ? + addTypeKind(type, 32) : type; + } } return links.type; } @@ -16377,12 +16964,12 @@ var ts; type.typeArguments : ts.concatenate(type.typeArguments, [type]); resolveObjectTypeMembers(type, source, typeParameters, typeArguments); } - function createSignature(declaration, typeParameters, thisType, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { + function createSignature(declaration, typeParameters, thisParameter, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { var sig = new Signature(checker); sig.declaration = declaration; sig.typeParameters = typeParameters; sig.parameters = parameters; - sig.thisType = thisType; + sig.thisParameter = thisParameter; sig.resolvedReturnType = resolvedReturnType; sig.typePredicate = typePredicate; sig.minArgumentCount = minArgumentCount; @@ -16391,7 +16978,7 @@ var ts; 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); + return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); } function getDefaultConstructSignatures(classType) { var baseConstructorType = getBaseConstructorTypeOfClass(classType); @@ -16475,8 +17062,9 @@ var ts; 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; })); + if (ts.forEach(unionSignatures, function (sig) { return sig.thisParameter; })) { + var thisType = getUnionType(ts.map(unionSignatures, function (sig) { return getTypeOfSymbol(sig.thisParameter) || anyType; })); + s.thisParameter = createTransientSymbol(signature.thisParameter, thisType); } s.resolvedReturnType = undefined; s.unionSignatures = unionSignatures; @@ -16661,6 +17249,7 @@ var ts; var types = containingType.types; var props; var commonFlags = (containingType.flags & 32768) ? 536870912 : 0; + var isReadonly = false; for (var _i = 0, types_2 = types; _i < types_2.length; _i++) { var current = types_2[_i]; var type = getApparentType(current); @@ -16674,6 +17263,9 @@ var ts; else if (!ts.contains(props, prop)) { props.push(prop); } + if (isReadonlySymbol(prop)) { + isReadonly = true; + } } else if (containingType.flags & 16384) { return undefined; @@ -16701,6 +17293,7 @@ var ts; commonFlags, name); result.containingType = containingType; result.declarations = declarations; + result.isReadonly = isReadonly; result.type = containingType.flags & 16384 ? getUnionType(propTypes) : getIntersectionType(propTypes); return result; } @@ -16807,7 +17400,7 @@ var ts; } return result; } - function isOptionalParameter(node) { + function isJSDocOptionalParameter(node) { if (node.flags & 134217728) { if (node.type && node.type.kind === 268) { return true; @@ -16822,7 +17415,9 @@ var ts; } } } - if (ts.hasQuestionToken(node)) { + } + function isOptionalParameter(node) { + if (ts.hasQuestionToken(node) || isJSDocOptionalParameter(node)) { return true; } if (node.initializer) { @@ -16857,7 +17452,7 @@ var ts; var parameters = []; var hasStringLiterals = false; var minArgumentCount = -1; - var thisType = undefined; + var thisParameter = undefined; var hasThisParameter = void 0; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); for (var i = isJSConstructSignature ? 1 : 0, n = declaration.parameters.length; i < n; i++) { @@ -16869,7 +17464,7 @@ var ts; } if (i === 0 && paramSymbol.name === "this") { hasThisParameter = true; - thisType = param.type ? getTypeFromTypeNode(param.type) : unknownType; + thisParameter = param.symbol; } else { parameters.push(paramSymbol); @@ -16877,7 +17472,7 @@ var ts; if (param.type && param.type.kind === 166) { hasStringLiterals = true; } - if (param.initializer || param.questionToken || param.dotDotDotToken) { + if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) { if (minArgumentCount < 0) { minArgumentCount = i - (hasThisParameter ? 1 : 0); } @@ -16888,10 +17483,12 @@ var ts; } if ((declaration.kind === 149 || declaration.kind === 150) && !ts.hasDynamicName(declaration) && - (!hasThisParameter || thisType === unknownType)) { + (!hasThisParameter || !thisParameter)) { var otherKind = declaration.kind === 149 ? 150 : 149; - var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); - thisType = getAnnotatedAccessorThisType(setter); + var other = ts.getDeclarationOfKind(declaration.symbol, otherKind); + if (other) { + thisParameter = getAnnotatedAccessorThisParameter(other); + } } if (minArgumentCount < 0) { minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); @@ -16909,7 +17506,7 @@ var ts; 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); + links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } @@ -16979,6 +17576,11 @@ var ts; } return anyType; } + function getThisTypeOfSignature(signature) { + if (signature.thisParameter) { + return getTypeOfSymbol(signature.thisParameter); + } + } function getReturnTypeOfSignature(signature) { if (!signature.resolvedReturnType) { if (!pushTypeResolution(signature, 3)) { @@ -17696,7 +18298,7 @@ var ts; 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); + var result = createSignature(signature.declaration, freshTypeParameters, signature.thisParameter && instantiateSymbol(signature.thisParameter, 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; @@ -17874,6 +18476,9 @@ var ts; function isTypeComparableTo(source, target) { return checkTypeComparableTo(source, target, undefined); } + function areTypesComparable(type1, type2) { + return isTypeComparableTo(type1, type2) || isTypeComparableTo(type2, type1); + } function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) { return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain); } @@ -17896,16 +18501,20 @@ var ts; 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); + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType && sourceThisType !== voidType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + var related = compareTypes(sourceThisType, targetThisType, false) + || compareTypes(targetThisType, sourceThisType, reportErrors); + if (!related) { + if (reportErrors) { + errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); + } + return 0; } - return 0; + result &= related; } - result &= related; } var sourceMax = getNumNonRestParameters(source); var targetMax = getNumNonRestParameters(target); @@ -18723,12 +19332,18 @@ var ts; 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; + if (!ignoreThisTypes) { + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + var related = compareTypes(sourceThisType, targetThisType); + if (!related) { + return 0; + } + result &= related; + } } - result &= related; } var targetLen = target.parameters.length; for (var i = 0; i < targetLen; i++) { @@ -18812,8 +19427,10 @@ var ts; function isTupleLikeType(type) { return !!getPropertyOfType(type, "0"); } - function isStringLiteralType(type) { - return type.flags & 256; + function isStringLiteralUnionType(type) { + return type.flags & 256 ? true : + type.flags & 16384 ? ts.forEach(type.types, isStringLiteralUnionType) : + false; } function isTupleType(type) { return !!(type.flags & 8192); @@ -19543,6 +20160,29 @@ var ts; } return node; } + function getTypeOfSwitchClause(clause) { + if (clause.kind === 249) { + var expr = clause.expression; + return expr.kind === 9 ? getStringLiteralTypeForText(expr.text) : checkExpression(expr); + } + return undefined; + } + function getSwitchClauseTypes(switchStatement) { + var links = getNodeLinks(switchStatement); + if (!links.switchTypes) { + var types = ts.map(switchStatement.caseBlock.clauses, getTypeOfSwitchClause); + links.switchTypes = ts.forEach(types, function (t) { return !t || t.flags & 256; }) ? types : emptyArray; + } + return links.switchTypes; + } + function eachTypeContainedIn(source, types) { + return source.flags & 16384 ? !ts.forEach(source.types, function (t) { return !ts.contains(types, t); }) : ts.contains(types, source); + } + function filterType(type, f) { + return type.flags & 16384 ? + getUnionType(ts.filter(type.types, f)) : + f(type) ? type : neverType; + } function getFlowTypeOfReference(reference, declaredType, assumeInitialized, includeOuterFunctions) { var key; if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 16908175)) { @@ -19558,7 +20198,7 @@ var ts; return result; function getTypeAtFlowNode(flow) { while (true) { - if (flow.flags & 256) { + if (flow.flags & 512) { for (var i = visitedFlowStart; i < visitedFlowCount; i++) { if (visitedFlowNodes[i] === flow) { return visitedFlowTypes[i]; @@ -19576,6 +20216,9 @@ var ts; else if (flow.flags & 96) { type = getTypeAtFlowCondition(flow); } + else if (flow.flags & 128) { + type = getTypeAtSwitchClause(flow); + } else if (flow.flags & 12) { if (flow.antecedents.length === 1) { flow = flow.antecedents[0]; @@ -19596,7 +20239,7 @@ var ts; else { type = declaredType; } - if (flow.flags & 256) { + if (flow.flags & 512) { visitedFlowNodes[visitedFlowCount] = flow; visitedFlowTypes[visitedFlowCount] = type; visitedFlowCount++; @@ -19634,6 +20277,10 @@ var ts; } return type; } + function getTypeAtSwitchClause(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + return narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd); + } function getTypeAtFlowBranchLabel(flow) { var antecedentTypes = []; for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { @@ -19694,11 +20341,26 @@ var ts; case 31: case 32: case 33: - if (isNullOrUndefinedLiteral(expr.right)) { - return narrowTypeByNullCheck(type, expr, assumeTrue); + var left = expr.left; + var operator = expr.operatorToken.kind; + var right = expr.right; + if (isNullOrUndefinedLiteral(right)) { + return narrowTypeByNullCheck(type, left, operator, right, assumeTrue); } - if (expr.left.kind === 182 && expr.right.kind === 9) { - return narrowTypeByTypeof(type, expr, assumeTrue); + if (isNullOrUndefinedLiteral(left)) { + return narrowTypeByNullCheck(type, right, operator, left, assumeTrue); + } + if (left.kind === 182 && right.kind === 9) { + return narrowTypeByTypeof(type, left, operator, right, assumeTrue); + } + if (right.kind === 182 && left.kind === 9) { + return narrowTypeByTypeof(type, right, operator, left, assumeTrue); + } + if (left.kind === 172) { + return narrowTypeByDiscriminant(type, left, operator, right, assumeTrue); + } + if (right.kind === 172) { + return narrowTypeByDiscriminant(type, right, operator, left, assumeTrue); } break; case 91: @@ -19708,46 +20370,91 @@ var ts; } return type; } - function narrowTypeByNullCheck(type, expr, assumeTrue) { - var operator = expr.operatorToken.kind; + function narrowTypeByNullCheck(type, target, operator, literal, assumeTrue) { if (operator === 31 || operator === 33) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(expr.left))) { + if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(target))) { return type; } var doubleEquals = operator === 30 || operator === 31; var facts = doubleEquals ? assumeTrue ? 65536 : 524288 : - expr.right.kind === 93 ? + literal.kind === 93 ? assumeTrue ? 32768 : 262144 : assumeTrue ? 16384 : 131072; return getTypeWithFacts(type, facts); } - function narrowTypeByTypeof(type, expr, assumeTrue) { - var left = getReferenceFromExpression(expr.left.expression); - var right = expr.right; - if (!isMatchingReference(reference, left)) { - if (containsMatchingReference(reference, left)) { + function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) { + var target = getReferenceFromExpression(typeOfExpr.expression); + if (!isMatchingReference(reference, target)) { + if (containsMatchingReference(reference, target)) { return declaredType; } return type; } - if (expr.operatorToken.kind === 31 || - expr.operatorToken.kind === 33) { + if (operator === 31 || operator === 33) { assumeTrue = !assumeTrue; } if (assumeTrue && !(type.flags & 16384)) { - var targetType = ts.getProperty(typeofTypesByName, right.text); + var targetType = ts.getProperty(typeofTypesByName, literal.text); if (targetType && isTypeSubtypeOf(targetType, type)) { return targetType; } } var facts = assumeTrue ? - ts.getProperty(typeofEQFacts, right.text) || 64 : - ts.getProperty(typeofNEFacts, right.text) || 8192; + ts.getProperty(typeofEQFacts, literal.text) || 64 : + ts.getProperty(typeofNEFacts, literal.text) || 8192; return getTypeWithFacts(type, facts); } + function narrowTypeByDiscriminant(type, propAccess, operator, value, assumeTrue) { + if (!isMatchingReference(reference, propAccess.expression)) { + return type; + } + var propName = propAccess.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var discriminantType = value.kind === 9 ? getStringLiteralTypeForText(value.text) : checkExpression(value); + if (!isStringLiteralUnionType(discriminantType)) { + return type; + } + if (operator === 31 || operator === 33) { + assumeTrue = !assumeTrue; + } + if (assumeTrue) { + return filterType(type, function (t) { return areTypesComparable(getTypeOfPropertyOfType(t, propName), discriminantType); }); + } + if (discriminantType.flags & 256) { + return filterType(type, function (t) { return getTypeOfPropertyOfType(t, propName) !== discriminantType; }); + } + return type; + } + function narrowTypeBySwitchOnDiscriminant(type, switchStatement, clauseStart, clauseEnd) { + if (!isMatchingReference(reference, switchStatement.expression.expression)) { + return type; + } + var propName = switchStatement.expression.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var switchTypes = getSwitchClauseTypes(switchStatement); + if (!switchTypes.length) { + return type; + } + var clauseTypes = switchTypes.slice(clauseStart, clauseEnd); + var hasDefaultClause = clauseStart === clauseEnd || ts.contains(clauseTypes, undefined); + var caseTypes = hasDefaultClause ? ts.filter(clauseTypes, function (t) { return !!t; }) : clauseTypes; + var discriminantType = caseTypes.length ? getUnionType(caseTypes) : undefined; + var caseType = discriminantType && filterType(type, function (t) { return isTypeComparableTo(discriminantType, getTypeOfPropertyOfType(t, propName)); }); + if (!hasDefaultClause) { + return caseType; + } + var defaultType = filterType(type, function (t) { return !eachTypeContainedIn(getTypeOfPropertyOfType(t, propName), switchTypes); }); + return caseType ? getUnionType([caseType, defaultType]) : defaultType; + } function narrowTypeByInstanceof(type, expr, assumeTrue) { var left = getReferenceFromExpression(expr.left); if (!isMatchingReference(reference, left)) { @@ -20110,9 +20817,9 @@ var ts; if (type) { return type; } - var signature = getSignatureFromDeclaration(container); - if (signature.thisType) { - return signature.thisType; + var thisType = getThisTypeOfDeclaration(container); + if (thisType) { + return thisType; } } if (ts.isClassLike(container.parent)) { @@ -20255,7 +20962,7 @@ var ts; if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { - return contextualSignature.thisType; + return getThisTypeOfSignature(contextualSignature); } } return undefined; @@ -20316,11 +21023,11 @@ var ts; } if (ts.isBindingPattern(declaration.parent)) { var parentDeclaration = declaration.parent.parent; - var name_12 = declaration.propertyName || declaration.name; + var name_13 = declaration.propertyName || declaration.name; if (ts.isVariableLike(parentDeclaration) && parentDeclaration.type && - !ts.isBindingPattern(name_12)) { - var text = getTextOfPropertyName(name_12); + !ts.isBindingPattern(name_13)) { + var text = getTextOfPropertyName(name_13); if (text) { return getTypeOfPropertyOfType(getTypeFromTypeNode(parentDeclaration.type), text); } @@ -20446,9 +21153,6 @@ var ts; 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)); } @@ -20840,7 +21544,7 @@ var ts; return name.indexOf("-") < 0; } function isJsxIntrinsicIdentifier(tagName) { - if (tagName.kind === 139) { + if (tagName.kind === 172 || tagName.kind === 97) { return false; } else { @@ -20976,6 +21680,25 @@ var ts; return getResolvedJsxType(node, type, elemClassType); })); } + if (elemType.flags & 2) { + return anyType; + } + else if (elemType.flags & 256) { + var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements); + if (intrinsicElementsType !== unknownType) { + var stringLiteralTypeName = elemType.text; + var intrinsicProp = getPropertyOfType(intrinsicElementsType, stringLiteralTypeName); + if (intrinsicProp) { + return getTypeOfSymbol(intrinsicProp); + } + var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0); + if (indexSignatureType) { + return indexSignatureType; + } + error(node, ts.Diagnostics.Property_0_does_not_exist_on_type_1, stringLiteralTypeName, "JSX." + JsxNames.IntrinsicElements); + } + return anyType; + } var elemInstanceType = getJsxElementInstanceType(node, elemType); if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { if (jsxElementType) { @@ -21215,11 +21938,21 @@ var ts; } var prop = getPropertyOfType(apparentType, right.text); if (!prop) { - if (right.text) { + if (right.text && !checkAndReportErrorForExtendingInterface(node)) { error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(right), typeToString(type.flags & 33554432 ? apparentType : type)); } return unknownType; } + if (noUnusedIdentifiers && + (prop.flags & 106500) && + prop.valueDeclaration && (prop.valueDeclaration.flags & 8)) { + if (prop.flags & 16777216) { + getSymbolLinks(prop).target.isReferenced = true; + } + else { + prop.isReferenced = true; + } + } getNodeLinks(node).resolvedSymbol = prop; if (prop.parent && prop.parent.flags & 32) { checkClassPropertyAccess(node, left, apparentType, prop); @@ -21308,15 +22041,15 @@ var ts; return unknownType; } if (node.argumentExpression) { - var name_13 = getPropertyNameForIndexedAccess(node.argumentExpression, indexType); - if (name_13 !== undefined) { - var prop = getPropertyOfType(objectType, name_13); + var name_14 = getPropertyNameForIndexedAccess(node.argumentExpression, indexType); + if (name_14 !== undefined) { + var prop = getPropertyOfType(objectType, name_14); 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_13, symbolToString(objectType.symbol)); + error(node.argumentExpression, ts.Diagnostics.Property_0_does_not_exist_on_const_enum_1, name_14, symbolToString(objectType.symbol)); return unknownType; } } @@ -21532,10 +22265,11 @@ var ts; if (context.failedTypeParameterIndex !== undefined && !context.inferences[context.failedTypeParameterIndex].isFixed) { context.failedTypeParameterIndex = undefined; } - if (signature.thisType) { + var thisType = getThisTypeOfSignature(signature); + if (thisType) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; - inferTypes(context, thisArgumentType, signature.thisType); + inferTypes(context, thisArgumentType, thisType); } var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { @@ -21586,12 +22320,13 @@ var ts; return typeArgumentsAreAssignable; } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { - if (signature.thisType && signature.thisType !== voidType && node.kind !== 175) { + var thisType = getThisTypeOfSignature(signature); + if (thisType && 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)) { + if (!checkTypeRelatedTo(thisArgumentType, getThisTypeOfSignature(signature), relation, errorNode, headMessage_1)) { return false; } } @@ -22007,7 +22742,7 @@ var ts; if (getReturnTypeOfSignature(signature) !== voidType) { error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); } - if (signature.thisType === voidType) { + if (getThisTypeOfSignature(signature) === voidType) { error(node, ts.Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void); } return signature; @@ -22135,8 +22870,10 @@ var ts; declaration.kind !== 152 && declaration.kind !== 157 && !ts.isJSDocConstructSignature(declaration)) { - var funcSymbol = checkExpression(node.expression).symbol; - if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16)) { + var funcSymbol = node.expression.kind === 69 ? + getResolvedSymbol(node.expression) : + checkExpression(node.expression).symbol; + if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16 || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return getInferredClassType(funcSymbol); } else if (compilerOptions.noImplicitAny) { @@ -22155,6 +22892,7 @@ var ts; } function checkAssertion(node) { var exprType = getRegularTypeOfObjectLiteral(checkExpression(node.expression)); + checkSourceElement(node.type); var targetType = getTypeFromTypeNode(node.type); if (produceDiagnostics && targetType !== unknownType) { var widenedType = getWidenedType(exprType); @@ -22238,6 +22976,14 @@ var ts; } return emptyObjectType; } + function createPromiseReturnType(func, promisedType) { + var promiseType = createPromiseType(promisedType); + if (promiseType === emptyObjectType) { + error(func, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + return unknownType; + } + return promiseType; + } function getReturnTypeFromBody(func, contextualMapper) { var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); if (!func.body) { @@ -22267,18 +23013,10 @@ var ts; else { types = checkAndAggregateReturnExpressionTypes(func, contextualMapper); if (!types) { - return neverType; + return isAsync ? createPromiseReturnType(func, neverType) : 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; + return isAsync ? createPromiseReturnType(func, voidType) : voidType; } } type = contextualSignature ? getUnionType(types) : getCommonSupertype(types); @@ -22289,7 +23027,7 @@ var ts; } else { error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); - return getUnionType(types); + return isAsync ? createPromiseReturnType(func, getUnionType(types)) : getUnionType(types); } } if (funcIsGenerator) { @@ -22300,17 +23038,7 @@ var ts; 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; - } + return isAsync ? createPromiseReturnType(func, widenedType) : widenedType; } function checkAndAggregateYieldOperandTypes(func, contextualMapper) { var aggregatedTypes = []; @@ -22328,10 +23056,40 @@ var ts; }); return aggregatedTypes; } + function isExhaustiveSwitchStatement(node) { + var expr = node.expression; + if (!node.possiblyExhaustive || expr.kind !== 172) { + return false; + } + var type = checkExpression(expr.expression); + if (!(type.flags & 16384)) { + return false; + } + var propName = expr.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return false; + } + var switchTypes = getSwitchClauseTypes(node); + if (!switchTypes.length) { + return false; + } + return eachTypeContainedIn(propType, switchTypes); + } + function functionHasImplicitReturn(func) { + if (!(func.flags & 32768)) { + return false; + } + var lastStatement = ts.lastOrUndefined(func.body.statements); + if (lastStatement && lastStatement.kind === 213 && isExhaustiveSwitchStatement(lastStatement)) { + return false; + } + return true; + } function checkAndAggregateReturnExpressionTypes(func, contextualMapper) { var isAsync = ts.isAsyncFunctionLike(func); var aggregatedTypes = []; - var hasReturnWithNoExpression = !!(func.flags & 32768); + var hasReturnWithNoExpression = functionHasImplicitReturn(func); var hasReturnOfTypeNever = false; ts.forEachReturnStatement(func.body, function (returnStatement) { var expr = returnStatement.expression; @@ -22369,7 +23127,7 @@ var ts; if (returnType && maybeTypeOfKind(returnType, 1 | 16)) { return; } - if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 || !(func.flags & 32768)) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 || !functionHasImplicitReturn(func)) { return; } var hasExplicitReturn = func.flags & 65536; @@ -22464,6 +23222,7 @@ var ts; } } } + registerForUnusedIdentifiersCheck(node); } } function checkArithmeticOperandType(operand, type, diagnostic) { @@ -22474,7 +23233,8 @@ var ts; return true; } function isReadonlySymbol(symbol) { - return symbol.flags & 4 && (getDeclarationFlagsFromSymbol(symbol) & 64) !== 0 || + return symbol.isReadonly || + symbol.flags & 4 && (getDeclarationFlagsFromSymbol(symbol) & 64) !== 0 || symbol.flags & 3 && (getDeclarationFlagsFromSymbol(symbol) & 2048) !== 0 || symbol.flags & 98304 && !(symbol.flags & 65536) || (symbol.flags & 8) !== 0; @@ -22662,14 +23422,14 @@ var ts; } function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, contextualMapper) { if (property.kind === 253 || property.kind === 254) { - var name_14 = property.name; - if (name_14.kind === 140) { - checkComputedPropertyName(name_14); + var name_15 = property.name; + if (name_15.kind === 140) { + checkComputedPropertyName(name_15); } - if (isComputedNonLiteralName(name_14)) { + if (isComputedNonLiteralName(name_15)) { return undefined; } - var text = getTextOfPropertyName(name_14); + var text = getTextOfPropertyName(name_15); var type = isTypeAny(objectLiteralType) ? objectLiteralType : getTypeOfPropertyOfType(objectLiteralType, text) || @@ -22684,7 +23444,7 @@ var ts; } } else { - error(name_14, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_14)); + error(name_15, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_15)); } } else { @@ -22744,6 +23504,10 @@ var ts; if (exprOrAssignment.kind === 254) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { + if (strictNullChecks && + !(getCombinedTypeFlags(checkExpression(prop.objectAssignmentInitializer)) & 32)) { + sourceType = getTypeWithFacts(sourceType, 131072); + } checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); } target = exprOrAssignment.name; @@ -22880,7 +23644,7 @@ var ts; case 90: return checkInExpression(left, right, leftType, rightType); case 51: - return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 126) : rightType; + return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 112) : rightType; case 52: return getUnionType([getNonNullableType(leftType), rightType]); case 56: @@ -22980,7 +23744,7 @@ var ts; } function checkStringLiteralExpression(node) { var contextualType = getContextualType(node); - if (contextualType && contextualTypeIsStringLiteralType(contextualType)) { + if (contextualType && isStringLiteralUnionType(contextualType)) { return getStringLiteralTypeForText(node.text); } return stringType; @@ -23223,9 +23987,9 @@ var ts; else if (parameterName) { var hasReportedError = false; for (var _i = 0, _a = parent.parameters; _i < _a.length; _i++) { - var name_15 = _a[_i].name; - if (ts.isBindingPattern(name_15) && - checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_15, parameterName, typePredicate.parameterName)) { + var name_16 = _a[_i].name; + if (ts.isBindingPattern(name_16) && + checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_16, parameterName, typePredicate.parameterName)) { hasReportedError = true; break; } @@ -23253,15 +24017,15 @@ var ts; } function checkIfTypePredicateVariableIsDeclaredInBindingPattern(pattern, predicateVariableNode, predicateVariableName) { for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) { - var name_16 = _a[_i].name; - if (name_16.kind === 69 && - name_16.text === predicateVariableName) { + var name_17 = _a[_i].name; + if (name_17.kind === 69 && + name_17.text === predicateVariableName) { error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName); return true; } - else if (name_16.kind === 168 || - name_16.kind === 167) { - if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_16, predicateVariableNode, predicateVariableName)) { + else if (name_17.kind === 168 || + name_17.kind === 167) { + if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_17, predicateVariableNode, predicateVariableName)) { return true; } } @@ -23309,6 +24073,9 @@ var ts; checkAsyncFunctionReturnType(node); } } + if (!node.body) { + checkUnusedTypeParameters(node); + } } } function checkClassForDuplicateDeclarations(node) { @@ -23326,8 +24093,8 @@ var ts; } } else { - var static = ts.forEach(member.modifiers, function (m) { return m.kind === 113; }); - var names = static ? staticNames : instanceNames; + var isStatic = ts.forEach(member.modifiers, function (m) { return m.kind === 113; }); + var names = isStatic ? staticNames : instanceNames; var memberName = member.name && ts.getPropertyNameForPropertyNameNode(member.name); if (memberName) { switch (member.kind) { @@ -23436,6 +24203,7 @@ var ts; checkSignatureDeclaration(node); checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node); checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); var symbol = getSymbolOfNode(node); var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind); if (node === firstDeclaration) { @@ -23539,13 +24307,14 @@ var ts; 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); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getThisTypeOfDeclaration, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } if (node.parent.kind !== 171) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } else { checkNodeDeferred(node); @@ -23560,6 +24329,7 @@ var ts; } function checkAccessorDeferred(node) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } function checkMissingDeclaration(node) { checkDecorators(node); @@ -23584,12 +24354,14 @@ var ts; 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); + if (type !== unknownType) { + if (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); + } } } } @@ -23729,7 +24501,6 @@ var ts; } } } - 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++) { @@ -23754,7 +24525,7 @@ var ts; duplicateFunctionDeclaration = true; } } - else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { + else if (previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { reportImplementationExpectedError(previousDeclaration); } if (ts.nodeIsPresent(node.body)) { @@ -23781,7 +24552,7 @@ var ts; error(declaration.name, ts.Diagnostics.Duplicate_function_implementation); }); } - if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && + if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && !(lastSeenNonAmbientDeclaration.flags & 128) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } @@ -23872,7 +24643,7 @@ var ts; } function checkNonThenableType(type, location, message) { type = getWidenedType(type); - if (!isTypeAny(type) && isTypeAssignableTo(type, getGlobalThenableType())) { + if (!isTypeAny(type) && !isTypeNever(type) && isTypeAssignableTo(type, getGlobalThenableType())) { if (location) { if (!message) { message = ts.Diagnostics.Operand_for_await_does_not_have_a_valid_callable_then_member; @@ -23884,37 +24655,39 @@ var ts; return type; } function getPromisedType(promise) { - if (promise.flags & 1) { + if (isTypeAny(promise)) { return undefined; } - if ((promise.flags & 4096) && promise.target === tryGetGlobalPromiseType()) { - return promise.typeArguments[0]; + if (promise.flags & 4096) { + if (promise.target === tryGetGlobalPromiseType() + || promise.target === getGlobalPromiseLikeType()) { + 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)) { + if (!thenFunction || isTypeAny(thenFunction)) { return undefined; } - var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0) : emptyArray; + var thenSignatures = getSignaturesOfType(thenFunction, 0); if (thenSignatures.length === 0) { return undefined; } var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072); - if (onfulfilledParameterType.flags & 1) { + if (isTypeAny(onfulfilledParameterType)) { return undefined; } var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0); if (onfulfilledParameterSignatures.length === 0) { return undefined; } - var valueParameterType = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); - return valueParameterType; + return getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); } function getTypeOfFirstParameterOfSignature(signature) { - return getTypeAtPosition(signature, 0); + return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : neverType; } function getAwaitedType(type) { return checkAwaitedType(type, undefined, undefined); @@ -24130,12 +24903,149 @@ var ts; getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } } + registerForUnusedIdentifiersCheck(node); + } + function registerForUnusedIdentifiersCheck(node) { + if (deferredUnusedIdentifierNodes) { + deferredUnusedIdentifierNodes.push(node); + } + } + function checkUnusedIdentifiers() { + if (deferredUnusedIdentifierNodes) { + for (var _i = 0, deferredUnusedIdentifierNodes_1 = deferredUnusedIdentifierNodes; _i < deferredUnusedIdentifierNodes_1.length; _i++) { + var node = deferredUnusedIdentifierNodes_1[_i]; + switch (node.kind) { + case 256: + case 225: + checkUnusedModuleMembers(node); + break; + case 221: + case 192: + checkUnusedClassMembers(node); + checkUnusedTypeParameters(node); + break; + case 222: + checkUnusedTypeParameters(node); + break; + case 199: + case 227: + case 206: + case 207: + case 208: + checkUnusedLocalsAndParameters(node); + break; + case 148: + case 179: + case 220: + case 180: + case 147: + case 149: + case 150: + if (node.body) { + checkUnusedLocalsAndParameters(node); + } + checkUnusedTypeParameters(node); + break; + case 146: + case 151: + case 152: + case 153: + case 156: + case 157: + checkUnusedTypeParameters(node); + break; + } + ; + } + } + } + function checkUnusedLocalsAndParameters(node) { + if (node.parent.kind !== 222 && noUnusedIdentifiers && !ts.isInAmbientContext(node)) { + var _loop_1 = function(key) { + if (ts.hasProperty(node.locals, key)) { + var local_1 = node.locals[key]; + if (!local_1.isReferenced) { + if (local_1.valueDeclaration && local_1.valueDeclaration.kind === 142) { + var parameter = local_1.valueDeclaration; + if (compilerOptions.noUnusedParameters && + !ts.isParameterPropertyDeclaration(parameter) && + !parameterNameStartsWithUnderscore(parameter)) { + error(local_1.valueDeclaration.name, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); + } + } + else if (compilerOptions.noUnusedLocals) { + ts.forEach(local_1.declarations, function (d) { return error(d.name || d, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); }); + } + } + } + }; + for (var key in node.locals) { + _loop_1(key); + } + } + } + function parameterNameStartsWithUnderscore(parameter) { + return parameter.name && parameter.name.kind === 69 && parameter.name.text.charCodeAt(0) === 95; + } + function checkUnusedClassMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.members) { + for (var _i = 0, _a = node.members; _i < _a.length; _i++) { + var member = _a[_i]; + if (member.kind === 147 || member.kind === 145) { + if (!member.symbol.isReferenced && member.flags & 8) { + error(member.name, ts.Diagnostics._0_is_declared_but_never_used, member.symbol.name); + } + } + else if (member.kind === 148) { + for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) { + var parameter = _c[_b]; + if (!parameter.symbol.isReferenced && parameter.flags & 8) { + error(parameter.name, ts.Diagnostics._0_is_declared_but_never_used, parameter.symbol.name); + } + } + } + } + } + } + } + function checkUnusedTypeParameters(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.typeParameters) { + for (var _i = 0, _a = node.typeParameters; _i < _a.length; _i++) { + var typeParameter = _a[_i]; + if (!typeParameter.symbol.isReferenced) { + error(typeParameter.name, ts.Diagnostics._0_is_declared_but_never_used, typeParameter.symbol.name); + } + } + } + } + } + function checkUnusedModuleMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + for (var key in node.locals) { + if (ts.hasProperty(node.locals, key)) { + var local = node.locals[key]; + if (!local.isReferenced && !local.exportSymbol) { + for (var _i = 0, _a = local.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + if (!ts.isAmbientModule(declaration)) { + error(declaration.name, ts.Diagnostics._0_is_declared_but_never_used, local.name); + } + } + } + } + } + } } function checkBlock(node) { if (node.kind === 199) { checkGrammarStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkCollisionWithArgumentsInGeneratedCode(node) { if (!ts.hasDeclaredRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { @@ -24255,8 +25165,8 @@ var ts; container.kind === 225 || container.kind === 256); if (!namesShareScope) { - var name_17 = symbolToString(localDeclarationSymbol); - error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_17, name_17); + var name_18 = symbolToString(localDeclarationSymbol); + error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_18, name_18); } } } @@ -24326,8 +25236,8 @@ var ts; } var parent_11 = node.parent.parent; var parentType = getTypeForBindingElementParent(parent_11); - var name_18 = node.propertyName || node.name; - var property = getPropertyOfType(parentType, getTextOfPropertyName(name_18)); + var name_19 = node.propertyName || node.name; + var property = getPropertyOfType(parentType, getTextOfPropertyName(name_19)); if (parent_11.initializer && property && getParentOfSymbol(property)) { checkClassPropertyAccess(parent_11, parent_11.initializer, parentType, property); } @@ -24460,6 +25370,9 @@ var ts; if (node.incrementor) checkExpression(node.incrementor); checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForOfStatement(node) { checkGrammarForInOrForOfStatement(node); @@ -24481,6 +25394,9 @@ var ts; } } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInStatement(node) { checkGrammarForInOrForOfStatement(node); @@ -24509,6 +25425,9 @@ var ts; error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter); } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInOrForOfVariableDeclaration(iterationStatement) { var variableDeclarationList = iterationStatement.initializer; @@ -24668,7 +25587,7 @@ var ts; } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; - return maybeTypeOfKind(unwrappedReturnType, 16 | 1); + return unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 16 | 1); } function checkReturnStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { @@ -24750,6 +25669,9 @@ var ts; } ts.forEach(clause.statements, checkSourceElement); }); + if (node.caseBlock.locals) { + registerForUnusedIdentifiersCheck(node.caseBlock); + } } function checkLabeledStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { @@ -24920,6 +25842,7 @@ var ts; } function checkClassExpressionDeferred(node) { ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassDeclaration(node) { if (!node.name && !(node.flags & 512)) { @@ -24927,6 +25850,7 @@ var ts; } checkClassLikeDeclaration(node); ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassLikeDeclaration(node) { checkGrammarClassDeclarationHeritageClauses(node); @@ -25167,6 +26091,7 @@ var ts; ts.forEach(node.members, checkSourceElement); if (produceDiagnostics) { checkTypeForDuplicateIndexSignatures(node); + checkUnusedTypeParameters(node); } } function checkTypeAliasDeclaration(node) { @@ -25456,7 +26381,7 @@ var ts; if (isAmbientExternalModule) { if (ts.isExternalModuleAugmentation(node)) { var checkBody = isGlobalAugmentation || (getSymbolOfNode(node).flags & 33554432); - if (checkBody) { + if (checkBody && node.body) { for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) { var statement = _a[_i]; checkModuleAugmentationElement(statement, isGlobalAugmentation); @@ -25481,7 +26406,15 @@ var ts; } } } - checkSourceElement(node.body); + if (compilerOptions.noImplicitAny && !node.body) { + reportImplicitAnyError(node, anyType); + } + if (node.body) { + checkSourceElement(node.body); + if (!ts.isGlobalScopeAugmentation(node)) { + registerForUnusedIdentifiersCheck(node); + } + } } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { @@ -25501,9 +26434,9 @@ var ts; break; case 169: case 218: - var name_19 = node.name; - if (ts.isBindingPattern(name_19)) { - for (var _b = 0, _c = name_19.elements; _b < _c.length; _b++) { + var name_20 = node.name; + if (ts.isBindingPattern(name_20)) { + for (var _b = 0, _c = name_20.elements; _b < _c.length; _b++) { var el = _c[_b]; checkModuleAugmentationElement(el, isGlobalAugmentation); } @@ -25917,9 +26850,17 @@ var ts; checkGrammarSourceFile(node); potentialThisCollisions.length = 0; deferredNodes = []; + deferredUnusedIdentifierNodes = produceDiagnostics && noUnusedIdentifiers ? [] : undefined; ts.forEach(node.statements, checkSourceElement); checkDeferredNodes(); + if (ts.isExternalModule(node)) { + registerForUnusedIdentifiersCheck(node); + } + if (!node.isDeclarationFile) { + checkUnusedIdentifiers(); + } deferredNodes = undefined; + deferredUnusedIdentifierNodes = undefined; if (ts.isExternalOrCommonJsModule(node)) { checkExternalModuleExports(node); } @@ -26206,6 +27147,13 @@ var ts; case 139: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 97: + var container = ts.getThisContainer(node, false); + if (ts.isFunctionLike(container)) { + var sig = getSignatureFromDeclaration(container); + if (sig.thisParameter) { + return sig.thisParameter; + } + } case 95: var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; @@ -26338,9 +27286,9 @@ var ts; function getRootSymbols(symbol) { if (symbol.flags & 268435456) { var symbols_3 = []; - var name_20 = symbol.name; + var name_21 = symbol.name; ts.forEach(getSymbolLinks(symbol).containingType.types, function (t) { - var symbol = getPropertyOfType(t, name_20); + var symbol = getPropertyOfType(t, name_21); if (symbol) { symbols_3.push(symbol); } @@ -26394,7 +27342,9 @@ var ts; var parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { if (parentSymbol.flags & 512 && parentSymbol.valueDeclaration.kind === 256) { - return parentSymbol.valueDeclaration; + if (parentSymbol.valueDeclaration === ts.getSourceFileOfNode(node)) { + return parentSymbol.valueDeclaration; + } } for (var n = node.parent; n; n = n.parent) { if ((n.kind === 225 || n.kind === 224) && getSymbolOfNode(n) === parentSymbol) { @@ -27041,7 +27991,10 @@ var ts; 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); + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern); + } + else if (node.kind === 142 && (flags & 92) && node.dotDotDotToken) { + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter); } if (flags & 256) { return checkGrammarAsyncModifier(node, lastAsync); @@ -27284,11 +28237,11 @@ var ts; var GetAccessor = 2; var SetAccessor = 4; var GetOrSetAccessor = GetAccessor | SetAccessor; - var _loop_1 = function(prop) { - var name_21 = prop.name; + var _loop_2 = function(prop) { + var name_22 = prop.name; if (prop.kind === 193 || - name_21.kind === 140) { - checkGrammarComputedPropertyName(name_21); + name_22.kind === 140) { + checkGrammarComputedPropertyName(name_22); } 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) }; @@ -27301,8 +28254,8 @@ var ts; 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_21.kind === 8) { - checkGrammarNumericLiteral(name_21); + if (name_22.kind === 8) { + checkGrammarNumericLiteral(name_22); } currentKind = Property; } @@ -27318,7 +28271,7 @@ var ts; else { ts.Debug.fail("Unexpected syntax kind:" + prop.kind); } - var effectiveName = ts.getPropertyNameForPropertyNameNode(name_21); + var effectiveName = ts.getPropertyNameForPropertyNameNode(name_22); if (effectiveName === undefined) { return "continue"; } @@ -27328,25 +28281,25 @@ var ts; else { var existingKind = seen[effectiveName]; if (currentKind === Property && existingKind === Property) { - grammarErrorOnNode(name_21, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name_21)); + grammarErrorOnNode(name_22, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name_22)); } else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { seen[effectiveName] = currentKind | existingKind; } else { - return { value: grammarErrorOnNode(name_21, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name) }; + return { value: grammarErrorOnNode(name_22, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name) }; } } else { - return { value: grammarErrorOnNode(name_21, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name) }; + return { value: grammarErrorOnNode(name_22, 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; + var state_3 = _loop_2(prop); + if (typeof state_3 === "object") return state_3.value; } } function checkGrammarJsxElement(node) { @@ -27357,12 +28310,12 @@ var ts; continue; } var jsxAttr = attr; - var name_22 = jsxAttr.name; - if (!ts.hasProperty(seen, name_22.text)) { - seen[name_22.text] = true; + var name_23 = jsxAttr.name; + if (!ts.hasProperty(seen, name_23.text)) { + seen[name_23.text] = true; } else { - return grammarErrorOnNode(name_22, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); + return grammarErrorOnNode(name_23, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); } var initializer = jsxAttr.initializer; if (initializer && initializer.kind === 248 && !initializer.expression) { @@ -28425,9 +29378,9 @@ var ts; var count = 0; while (true) { count++; - var name_23 = baseName + "_" + count; - if (!ts.hasProperty(currentIdentifiers, name_23)) { - return name_23; + var name_24 = baseName + "_" + count; + if (!ts.hasProperty(currentIdentifiers, name_24)) { + return name_24; } } } @@ -28695,21 +29648,26 @@ var ts; writeTextOfNode(currentText, node.name); } } - while (node.body.kind !== 226) { + while (node.body && 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; + if (node.body) { + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + else { + write(";"); + } } function writeTypeAliasDeclaration(node) { var prevEnclosingDeclaration = enclosingDeclaration; @@ -29909,19 +30867,19 @@ var ts; } function makeTempVariableName(flags) { if (flags && !(tempFlags & flags)) { - var name_24 = flags === 268435456 ? "_i" : "_n"; - if (isUniqueName(name_24)) { + var name_25 = flags === 268435456 ? "_i" : "_n"; + if (isUniqueName(name_25)) { tempFlags |= flags; - return name_24; + return name_25; } } while (true) { var count = tempFlags & 268435455; tempFlags++; if (count !== 8 && count !== 13) { - var name_25 = count < 26 ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26); - if (isUniqueName(name_25)) { - return name_25; + var name_26 = count < 26 ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26); + if (isUniqueName(name_26)) { + return name_26; } } } @@ -29971,6 +30929,8 @@ var ts; return generateNameForExportDefault(); case 192: return generateNameForClassExpression(); + default: + ts.Debug.fail(); } } function getGeneratedNameForNode(node) { @@ -30617,8 +31577,8 @@ var ts; } else if (declaration.kind === 234) { write(getGeneratedNameForNode(declaration.parent.parent.parent)); - var name_26 = declaration.propertyName || declaration.name; - var identifier = ts.getTextOfNodeFromSourceText(currentText, name_26); + var name_27 = declaration.propertyName || declaration.name; + var identifier = ts.getTextOfNodeFromSourceText(currentText, name_27); if (languageVersion === 0 && identifier === "default") { write('["default"]'); } @@ -30668,11 +31628,25 @@ var ts; } return false; } + function getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node) { + if (languageVersion >= 2) { + var parent_14 = node.parent; + if (parent_14.kind === 172 && parent_14.expression === node) { + parent_14 = parent_14.parent; + while (parent_14 && parent_14.kind !== 145) { + parent_14 = parent_14.parent; + } + return parent_14 && parent_14.kind === 145 && (parent_14.flags & 32) !== 0 && + parent_14.parent.kind === 192 ? parent_14.parent : undefined; + } + } + return undefined; + } function emitIdentifier(node) { if (convertedLoopState) { if (node.text == "arguments" && resolver.isArgumentsLocalBinding(node)) { - var name_27 = convertedLoopState.argumentsName || (convertedLoopState.argumentsName = makeUniqueName("arguments")); - write(name_27); + var name_28 = convertedLoopState.argumentsName || (convertedLoopState.argumentsName = makeUniqueName("arguments")); + write(name_28); return; } } @@ -30680,6 +31654,14 @@ var ts; write(node.text); } else if (isExpressionIdentifier(node)) { + var classExpression = getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node); + if (classExpression) { + var declaration = resolver.getReferencedValueDeclaration(node); + if (declaration === classExpression) { + write(getGeneratedNameForNode(declaration.name)); + return; + } + } emitExpressionIdentifier(node); } else if (isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node)) { @@ -31010,7 +31992,6 @@ var ts; function createPropertyAccessExpression(expression, name) { var result = ts.createSynthesizedNode(172); result.expression = parenthesizeForAccess(expression); - result.dotToken = ts.createSynthesizedNode(21); result.name = name; return result; } @@ -31056,9 +32037,9 @@ var ts; emitTrailingCommentsOfPosition(node.initializer.pos); emit(node.initializer); } - function isNamespaceExportReference(node) { + function isExportReference(node) { var container = resolver.getReferencedExportContainer(node); - return container && container.kind !== 256; + return !!container; } function isImportedReference(node) { var declaration = resolver.getReferencedImportDeclaration(node); @@ -31066,9 +32047,9 @@ var ts; } function emitShorthandPropertyAssignment(node) { writeTextOfNode(currentText, node.name); - if (languageVersion < 2 || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isNamespaceExportReference(node.name)) { + if (languageVersion < 2 || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isExportReference(node.name)) { write(": "); - emit(node.name); + emitExpressionIdentifier(node.name); } if (languageVersion >= 2 && node.objectAssignmentInitializer) { write(" = "); @@ -31117,13 +32098,16 @@ var ts; if (languageVersion === 2 && node.expression.kind === 95 && isInAsyncMethodWithSuperInES6(node)) { - var name_28 = ts.createSynthesizedNode(9); - name_28.text = node.name.text; - emitSuperAccessInAsyncMethod(node.expression, name_28); + var name_29 = ts.createSynthesizedNode(9); + name_29.text = node.name.text; + emitSuperAccessInAsyncMethod(node.expression, name_29); return; } emit(node.expression); - var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, node.dotToken); + var dotRangeStart = ts.nodeIsSynthesized(node.expression) ? -1 : node.expression.end; + var dotRangeEnd = ts.nodeIsSynthesized(node.expression) ? -1 : ts.skipTrivia(currentText, node.expression.end) + 1; + var dotToken = { pos: dotRangeStart, end: dotRangeEnd }; + var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, dotToken); var shouldEmitSpace = false; if (!indentedBeforeDot) { if (node.expression.kind === 8) { @@ -31141,7 +32125,7 @@ var ts; else { write("."); } - var indentedAfterDot = indentIfOnDifferentLines(node, node.dotToken, node.name); + var indentedAfterDot = indentIfOnDifferentLines(node, dotToken, node.name); emit(node.name); decreaseIndentIf(indentedBeforeDot, indentedAfterDot); } @@ -31514,7 +32498,6 @@ var ts; synthesizedLHS = ts.createSynthesizedNode(172, false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false); synthesizedLHS.expression = identifier; - synthesizedLHS.dotToken = leftHandSideExpression.dotToken; synthesizedLHS.name = leftHandSideExpression.name; write(", "); } @@ -32790,12 +33773,12 @@ var ts; function emitParameter(node) { if (languageVersion < 2) { if (ts.isBindingPattern(node.name)) { - var name_29 = createTempVariable(0); + var name_30 = createTempVariable(0); if (!tempParameters) { tempParameters = []; } - tempParameters.push(name_29); - emit(name_29); + tempParameters.push(name_30); + emit(name_30); } else { emit(node.name); @@ -32831,8 +33814,8 @@ var ts; emit(initializer); } write(";"); - tempIndex_1++; } + tempIndex_1++; } else if (initializer) { writeLine(); @@ -33218,7 +34201,7 @@ var ts; emitStart(property); emitStart(property.name); if (receiver) { - emit(receiver); + write(receiver); } else { if (property.flags & 32) { @@ -33501,12 +34484,15 @@ var ts; } var staticProperties = getInitializedProperties(node, true); var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192; - var tempVariable; + var generatedName; if (isClassExpressionWithStaticProperties) { - tempVariable = createAndRecordTempVariable(0); + generatedName = getGeneratedNameForNode(node.name); + var synthesizedNode = ts.createSynthesizedNode(69); + synthesizedNode.text = generatedName; + recordTempDeclaration(synthesizedNode); write("("); increaseIndent(); - emit(tempVariable); + emit(synthesizedNode); write(" = "); } write("class"); @@ -33546,11 +34532,11 @@ var ts; var property = staticProperties_1[_a]; write(","); writeLine(); - emitPropertyDeclaration(node, property, tempVariable, true); + emitPropertyDeclaration(node, property, generatedName, true); } write(","); writeLine(); - emit(tempVariable); + write(generatedName); decreaseIndent(); write(")"); } @@ -33586,7 +34572,11 @@ var ts; } } function emitClassLikeDeclarationBelowES6(node) { + var isES6ExportedClass = isES6ExportedDeclaration(node); if (node.kind === 221) { + if (isES6ExportedClass && !(node.flags & 512)) { + write("export "); + } if (!shouldHoistDeclarationInSystemJsModule(node)) { write("var "); } @@ -33650,9 +34640,15 @@ var ts; write(";"); } emitEnd(node); - if (node.kind === 221) { + if (node.kind === 221 && !isES6ExportedClass) { emitExportMemberAssignment(node); } + else if (isES6ExportedClass && (node.flags & 512)) { + writeLine(); + write("export default "); + emitDeclarationName(node); + write(";"); + } } function emitClassMemberPrefix(node, member) { emitDeclarationName(node); @@ -33948,10 +34944,10 @@ var ts; } if (parameters[i].dotDotDotToken) { var parameterType = parameters[i].type; - if (parameterType.kind === 160) { + if (parameterType && parameterType.kind === 160) { parameterType = parameterType.elementType; } - else if (parameterType.kind === 155 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + else if (parameterType && parameterType.kind === 155 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { parameterType = parameterType.typeArguments[0]; } else { @@ -33968,9 +34964,15 @@ var ts; } } function emitSerializedReturnTypeOfNode(node) { - if (node && ts.isFunctionLike(node) && node.type) { - emitSerializedTypeNode(node.type); - return; + if (node && ts.isFunctionLike(node)) { + if (node.type) { + emitSerializedTypeNode(node.type); + return; + } + else if (ts.isAsyncFunctionLike(node)) { + write("Promise"); + return; + } } write("void 0"); } @@ -34103,7 +35105,7 @@ var ts; } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 225) { + if (moduleDeclaration.body && moduleDeclaration.body.kind === 225) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -34144,6 +35146,7 @@ var ts; write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); + ts.Debug.assert(node.body !== undefined); if (node.body.kind === 226) { var saveConvertedLoopState = convertedLoopState; var saveTempFlags = tempFlags; @@ -34523,8 +35526,8 @@ var ts; else { for (var _c = 0, _d = node.exportClause.elements; _c < _d.length; _c++) { var specifier = _d[_c]; - var name_30 = (specifier.propertyName || specifier.name).text; - (exportSpecifiers[name_30] || (exportSpecifiers[name_30] = [])).push(specifier); + var name_31 = (specifier.propertyName || specifier.name).text; + (exportSpecifiers[name_31] || (exportSpecifiers[name_31] = [])).push(specifier); } } break; @@ -34562,9 +35565,9 @@ var ts; } function getExternalModuleNameText(importNode, emitRelativePathAsModuleName) { if (emitRelativePathAsModuleName) { - var name_31 = getExternalModuleNameFromDeclaration(host, resolver, importNode); - if (name_31) { - return "\"" + name_31 + "\""; + var name_32 = getExternalModuleNameFromDeclaration(host, resolver, importNode); + if (name_32) { + return "\"" + name_32 + "\""; } } var moduleName = ts.getExternalModuleName(importNode); @@ -34710,11 +35713,11 @@ var ts; var seen = {}; for (var i = 0; i < hoistedVars.length; i++) { var local = hoistedVars[i]; - var name_32 = local.kind === 69 + var name_33 = local.kind === 69 ? local : local.name; - if (name_32) { - var text = ts.unescapeIdentifier(name_32.text); + if (name_33) { + var text = ts.unescapeIdentifier(name_33.text); if (ts.hasProperty(seen, text)) { continue; } @@ -34793,15 +35796,15 @@ var ts; } if (node.kind === 218 || node.kind === 169) { if (shouldHoistVariable(node, false)) { - var name_33 = node.name; - if (name_33.kind === 69) { + var name_34 = node.name; + if (name_34.kind === 69) { if (!hoistedVars) { hoistedVars = []; } - hoistedVars.push(name_33); + hoistedVars.push(name_34); } else { - ts.forEachChild(name_33, visit); + ts.forEachChild(name_34, visit); } } return; @@ -35144,7 +36147,7 @@ var ts; } firstNonWhitespace = -1; } - else if (!ts.isWhiteSpace(c)) { + else if (!ts.isWhiteSpaceSingleLine(c)) { lastNonWhitespace = i; if (firstNonWhitespace === -1) { firstNonWhitespace = i; @@ -35711,13 +36714,9 @@ var ts; ts.emitTime = 0; ts.ioReadTime = 0; ts.ioWriteTime = 0; + ts.version = "2.0.0"; var emptyArray = []; - var defaultLibrarySearchPaths = [ - "types/", - "node_modules/", - "node_modules/@types/", - ]; - ts.version = "1.9.0"; + var defaultTypeRoots = ["node_modules/@types"]; function findConfigFile(searchPath, fileExists) { while (true) { var fileName = ts.combinePaths(searchPath, "tsconfig.json"); @@ -35842,9 +36841,32 @@ var ts; } return typesFilePath; } + if (state.compilerOptions.allowJs && jsonContent.main && typeof jsonContent.main === "string") { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0, jsonContent.main); + } + var mainFilePath = ts.normalizePath(ts.combinePaths(baseDirectory, jsonContent.main)); + return mainFilePath; + } return undefined; } var typeReferenceExtensions = [".d.ts"]; + function getEffectiveTypeRoots(options, host) { + if (options.typeRoots) { + return options.typeRoots; + } + var currentDirectory; + if (options.configFilePath) { + currentDirectory = ts.getDirectoryPath(options.configFilePath); + } + else if (host.getCurrentDirectory) { + currentDirectory = host.getCurrentDirectory(); + } + if (!currentDirectory) { + return undefined; + } + return ts.map(defaultTypeRoots, function (d) { return ts.combinePaths(currentDirectory, d); }); + } function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host) { var traceEnabled = isTraceEnabled(options, host); var moduleResolutionState = { @@ -35853,35 +36875,34 @@ var ts; skipTsx: true, traceEnabled: traceEnabled }; - var rootDir = options.typesRoot || (options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : (host.getCurrentDirectory && host.getCurrentDirectory())); + var typeRoots = getEffectiveTypeRoots(options, host); if (traceEnabled) { if (containingFile === undefined) { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set, typeReferenceDirectiveName); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, typeRoots); } } else { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set, typeReferenceDirectiveName, containingFile); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, typeRoots); } } } 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); + if (typeRoots && typeRoots.length) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", ")); + } + var primarySearchPaths = typeRoots; + for (var _i = 0, primarySearchPaths_1 = primarySearchPaths; _i < primarySearchPaths_1.length; _i++) { + var typeRoot = primarySearchPaths_1[_i]; + var candidate = ts.combinePaths(typeRoot, typeReferenceDirectiveName); var candidateDirectory = ts.getDirectoryPath(candidate); var resolvedFile_1 = loadNodeModuleFromDirectory(typeReferenceExtensions, candidate, failedLookupLocations, !directoryProbablyExists(candidateDirectory, host), moduleResolutionState); if (resolvedFile_1) { @@ -35905,9 +36926,6 @@ var ts; 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); @@ -36251,11 +37269,12 @@ var ts; 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); + var supportedExtensions = ts.getSupportedExtensions(state.compilerOptions); + var result = loadModuleFromFile(candidate, supportedExtensions, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } - result = loadNodeModuleFromDirectory(ts.supportedTypeScriptExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); + result = loadNodeModuleFromDirectory(supportedExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } @@ -36265,10 +37284,15 @@ var ts; 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 packageResult = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state); + if (packageResult && ts.hasTypeScriptFileExtension(packageResult)) { + return packageResult; + } + else { + var typesResult = loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state); + if (typesResult || packageResult) { + return typesResult || packageResult; + } } } var parentPath = ts.getDirectoryPath(directory); @@ -36400,25 +37424,12 @@ var ts; } } } - function getDefaultTypeDirectiveNames(rootPath) { - var localTypes = ts.combinePaths(rootPath, "types"); - var npmTypes = ts.combinePaths(rootPath, "node_modules/@types"); - var result = []; - if (ts.sys.directoryExists(localTypes)) { - result = result.concat(ts.sys.getDirectories(localTypes)); - } - if (ts.sys.directoryExists(npmTypes)) { - result = result.concat(ts.sys.getDirectories(npmTypes)); - } - return result; - } 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 { - getDefaultTypeDirectiveNames: getDefaultTypeDirectiveNames, getSourceFile: getSourceFile, getDefaultLibLocation: getDefaultLibLocation, getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); }, @@ -36431,6 +37442,7 @@ var ts; 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); }, + getDirectories: function (path) { return ts.sys.getDirectories(path); }, realpath: realpath }; } @@ -36473,32 +37485,41 @@ var ts; var resolutions = []; var cache = {}; for (var _i = 0, names_1 = names; _i < names_1.length; _i++) { - var name_34 = names_1[_i]; + var name_35 = names_1[_i]; var result = void 0; - if (ts.hasProperty(cache, name_34)) { - result = cache[name_34]; + if (ts.hasProperty(cache, name_35)) { + result = cache[name_35]; } else { - result = loader(name_34, containingFile); - cache[name_34] = result; + result = loader(name_35, containingFile); + cache[name_35] = result; } resolutions.push(result); } return resolutions; } - function getDefaultTypeDirectiveNames(options, rootFiles, host) { + function getInferredTypesRoot(options, rootFiles, host) { + return computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); + } + function getAutomaticTypeDirectiveNames(options, rootFiles, host) { if (options.types) { return options.types; } - if (host && host.getDefaultTypeDirectiveNames) { - var commonRoot = computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); - if (commonRoot) { - return host.getDefaultTypeDirectiveNames(commonRoot); + var result = []; + if (host.directoryExists && host.getDirectories) { + var typeRoots = getEffectiveTypeRoots(options, host); + if (typeRoots) { + for (var _i = 0, typeRoots_1 = typeRoots; _i < typeRoots_1.length; _i++) { + var root = typeRoots_1[_i]; + if (host.directoryExists(root)) { + result = result.concat(host.getDirectories(root)); + } + } } } - return undefined; + return result; } - ts.getDefaultTypeDirectiveNames = getDefaultTypeDirectiveNames; + ts.getAutomaticTypeDirectiveNames = getAutomaticTypeDirectiveNames; function createProgram(rootNames, options, host, oldProgram) { var program; var files = []; @@ -36508,6 +37529,10 @@ var ts; var classifiableNames; var resolvedTypeReferenceDirectives = {}; var fileProcessingDiagnostics = ts.createDiagnosticCollection(); + var maxNodeModulesJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 2; + var currentNodeModulesJsDepth = 0; + var modulesWithElidedImports = {}; + var sourceFilesFoundSearchingNodeModules = {}; var start = new Date().getTime(); host = host || createCompilerHost(options); var skipDefaultLib = options.noLib; @@ -36535,9 +37560,11 @@ var ts; var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? ts.createFileMap(function (fileName) { return fileName.toLowerCase(); }) : undefined; if (!tryReuseStructureFromOldProgram()) { ts.forEach(rootNames, function (name) { return processRootFile(name, false); }); - var typeReferences = getDefaultTypeDirectiveNames(options, rootNames, host); + var typeReferences = getAutomaticTypeDirectiveNames(options, rootNames, host); if (typeReferences) { - var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, undefined); + var inferredRoot = getInferredTypesRoot(options, rootNames, host); + var containingFilename = ts.combinePaths(inferredRoot, "__inferred type names__.ts"); + var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename); for (var i = 0; i < typeReferences.length; i++) { processTypeReferenceDirective(typeReferences[i], resolutions[i]); } @@ -36600,8 +37627,8 @@ var ts; if (!classifiableNames) { getTypeChecker(); classifiableNames = {}; - for (var _i = 0, files_3 = files; _i < files_3.length; _i++) { - var sourceFile = files_3[_i]; + for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { + var sourceFile = files_2[_i]; ts.copyMap(sourceFile.classifiableNames, classifiableNames); } } @@ -36620,10 +37647,10 @@ var ts; (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) || + (oldOptions.maxNodeModuleJsDepth !== options.maxNodeModuleJsDepth) || + !ts.arrayIsEqualTo(oldOptions.typeRoots, oldOptions.typeRoots) || !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { return false; @@ -36715,6 +37742,7 @@ var ts; getSourceFile: program.getSourceFile, getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, + isSourceFileFromExternalLibrary: function (file) { return !!ts.lookUp(sourceFilesFoundSearchingNodeModules, file.path); }, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked }; @@ -36915,8 +37943,20 @@ var ts; } break; case 145: - diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); - return true; + var propertyDeclaration = node; + if (propertyDeclaration.modifiers) { + for (var _i = 0, _a = propertyDeclaration.modifiers; _i < _a.length; _i++) { + var modifier = _a[_i]; + if (modifier.kind !== 113) { + diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); + return true; + } + } + } + if (checkTypeAnnotation(node.type)) { + return true; + } + break; case 224: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; @@ -37048,9 +38088,12 @@ var ts; (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); + var body = node.body; + if (body) { + for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + collectModuleReferences(statement, true); + } } } } @@ -37119,6 +38162,12 @@ var ts; 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 && ts.lookUp(modulesWithElidedImports, file_1.path)) { + if (currentNodeModulesJsDepth < maxNodeModulesJsDepth) { + modulesWithElidedImports[file_1.path] = false; + processImportedModules(file_1, ts.getDirectoryPath(fileName)); + } + } return file_1; } var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { @@ -37197,7 +38246,7 @@ var ts; } } else { - fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_name_0, typeReferenceDirective)); + fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_type_definition_file_for_0, typeReferenceDirective)); } if (saveResolution) { resolvedTypeReferenceDirectives[typeReferenceDirective] = resolvedTypeReferenceDirective; @@ -37227,11 +38276,25 @@ var ts; 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) { - findSourceFile(resolution.resolvedFileName, ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName), false, false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + var resolvedPath = resolution ? ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName) : undefined; + var isFromNodeModulesSearch = resolution && resolution.isExternalLibraryImport; + var isJsFileFromNodeModules = isFromNodeModulesSearch && ts.hasJavaScriptFileExtension(resolution.resolvedFileName); + if (isFromNodeModulesSearch) { + sourceFilesFoundSearchingNodeModules[resolvedPath] = true; + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth++; + } + var elideImport = isJsFileFromNodeModules && currentNodeModulesJsDepth > maxNodeModulesJsDepth; + var shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport; + if (elideImport) { + modulesWithElidedImports[file.path] = true; + } + else if (shouldAddFile) { + findSourceFile(resolution.resolvedFileName, resolvedPath, false, false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth--; } } } @@ -37362,9 +38425,6 @@ var ts; var span = ts.getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator); programDiagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); } - 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) { if (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")); @@ -37989,24 +39049,24 @@ var ts; switch (n.kind) { case 199: if (!ts.isFunctionBlock(n)) { - var parent_14 = n.parent; + var parent_15 = 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)); + if (parent_15.kind === 204 || + parent_15.kind === 207 || + parent_15.kind === 208 || + parent_15.kind === 206 || + parent_15.kind === 203 || + parent_15.kind === 205 || + parent_15.kind === 212 || + parent_15.kind === 252) { + addOutliningSpan(parent_15, openBrace, closeBrace, autoCollapse(n)); break; } - if (parent_14.kind === 216) { - var tryStatement = parent_14; + if (parent_15.kind === 216) { + var tryStatement = parent_15; if (tryStatement.tryBlock === n) { - addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); + addOutliningSpan(parent_15, openBrace, closeBrace, autoCollapse(n)); break; } else if (tryStatement.finallyBlock === n) { @@ -38069,10 +39129,10 @@ var ts; ts.forEach(program.getSourceFiles(), function (sourceFile) { cancellationToken.throwIfCancellationRequested(); var nameToDeclarations = sourceFile.getNamedDeclarations(); - for (var name_35 in nameToDeclarations) { - var declarations = ts.getProperty(nameToDeclarations, name_35); + for (var name_36 in nameToDeclarations) { + var declarations = ts.getProperty(nameToDeclarations, name_36); if (declarations) { - var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_35); + var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_36); if (!matches) { continue; } @@ -38083,14 +39143,14 @@ var ts; if (!containers) { return undefined; } - matches = patternMatcher.getMatches(containers, name_35); + matches = patternMatcher.getMatches(containers, name_36); if (!matches) { continue; } } var fileName = sourceFile.fileName; var matchKind = bestMatchKind(matches); - rawItems.push({ name: name_35, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration }); + rawItems.push({ name: name_36, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration }); } } } @@ -38220,622 +39280,538 @@ var ts; (function (ts) { var NavigationBar; (function (NavigationBar) { - function getNavigationBarItems(sourceFile, compilerOptions) { - if (ts.isSourceFileJavaScript(sourceFile)) { - return getJsNavigationBarItems(sourceFile, compilerOptions); + function getNavigationBarItems(sourceFile) { + curSourceFile = sourceFile; + var result = ts.map(topLevelItems(rootNavigationBarNode(sourceFile)), convertToTopLevelItem); + curSourceFile = undefined; + return result; + } + NavigationBar.getNavigationBarItems = getNavigationBarItems; + var curSourceFile; + function nodeText(node) { + return node.getText(curSourceFile); + } + function navigationBarNodeKind(n) { + return n.node.kind; + } + function pushChild(parent, child) { + if (parent.children) { + parent.children.push(child); } - return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); - function getIndent(node) { - var indent = 1; - 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++; + else { + parent.children = [child]; + } + } + var parentsStack = []; + var parent; + function rootNavigationBarNode(sourceFile) { + ts.Debug.assert(!parentsStack.length); + var root = { node: sourceFile, additionalNodes: undefined, parent: undefined, children: undefined, indent: 0 }; + parent = root; + for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + addChildrenRecursively(statement); + } + endNode(); + ts.Debug.assert(!parent && !parentsStack.length); + return root; + } + function addLeafNode(node) { + pushChild(parent, emptyNavigationBarNode(node)); + } + function emptyNavigationBarNode(node) { + return { + node: node, + additionalNodes: undefined, + parent: parent, + children: undefined, + indent: parent.indent + 1 + }; + } + function startNode(node) { + var navNode = emptyNavigationBarNode(node); + pushChild(parent, navNode); + parentsStack.push(parent); + parent = navNode; + } + function endNode() { + if (parent.children) { + mergeChildren(parent.children); + sortChildren(parent.children); + } + parent = parentsStack.pop(); + } + function addNodeWithRecursiveChild(node, child) { + startNode(node); + addChildrenRecursively(child); + endNode(); + } + function addChildrenRecursively(node) { + if (!node || ts.isToken(node)) { + return; + } + switch (node.kind) { + case 148: + var ctr = node; + addNodeWithRecursiveChild(ctr, ctr.body); + for (var _i = 0, _a = ctr.parameters; _i < _a.length; _i++) { + var param = _a[_i]; + if (ts.isParameterPropertyDeclaration(param)) { + addLeafNode(param); + } } - 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 147: + case 149: + case 150: + case 146: + if (!ts.hasDynamicName(node)) { + addNodeWithRecursiveChild(node, node.body); + } + break; + case 145: + case 144: + if (!ts.hasDynamicName(node)) { + addLeafNode(node); + } + break; + case 231: + var importClause = node; + if (importClause.name) { + addLeafNode(importClause); + } + var namedBindings = importClause.namedBindings; + if (namedBindings) { + if (namedBindings.kind === 232) { + addLeafNode(namedBindings); + } + else { + for (var _b = 0, _c = namedBindings.elements; _b < _c.length; _b++) { + var element = _c[_b]; + addLeafNode(element); } - 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: - case 223: - 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 localeCompareFix(ts.getPropertyNameForPropertyNameNode(n1.name), ts.getPropertyNameForPropertyNameNode(n2.name)); + break; + case 169: + case 218: + var decl = node; + var name_37 = decl.name; + if (ts.isBindingPattern(name_37)) { + addChildrenRecursively(name_37); } - else if (n1.name) { - return 1; - } - else if (n2.name) { - return -1; + else if (decl.initializer && isFunctionOrClassExpression(decl.initializer)) { + addChildrenRecursively(decl.initializer); } else { - return n1.kind - n2.kind; + addNodeWithRecursiveChild(decl, decl.initializer); } - }); - function localeCompareFix(a, b) { - var cmp = a.toLowerCase().localeCompare(b.toLowerCase()); - if (cmp !== 0) - return cmp; - return a < b ? 1 : a > b ? -1 : 0; - } - } - 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 180: + case 220: + case 179: + addNodeWithRecursiveChild(node, node.body); + break; + case 224: + startNode(node); + for (var _d = 0, _e = node.members; _d < _e.length; _d++) { + var member = _e[_d]; + if (!isComputedProperty(member)) { + addLeafNode(member); + } + } + endNode(); + break; + case 221: + case 192: + case 222: + startNode(node); + for (var _f = 0, _g = node.members; _f < _g.length; _f++) { + var member = _g[_f]; + addChildrenRecursively(member); + } + endNode(); + break; + case 225: + addNodeWithRecursiveChild(node, getInteriorModule(node).body); + break; + case 238: + case 229: + case 153: + case 151: + case 152: + case 223: + addLeafNode(node); + break; + default: + if (node.jsDocComments) { + for (var _h = 0, _j = node.jsDocComments; _h < _j.length; _h++) { + var jsDocComment = _j[_h]; + for (var _k = 0, _l = jsDocComment.tags; _k < _l.length; _k++) { + var tag = _l[_k]; + if (tag.kind === 279) { + addLeafNode(tag); } } - 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; + } } - } + ts.forEachChild(node, addChildrenRecursively); } - 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)) { + } + function mergeChildren(children) { + var nameToItems = {}; + ts.filterMutate(children, function (child) { + var decl = child.node; + var name = decl.name && nodeText(decl.name); + if (!name) { + return true; + } + var itemsWithSameName = ts.getProperty(nameToItems, name); + if (!itemsWithSameName) { + nameToItems[name] = child; + return true; + } + if (itemsWithSameName instanceof Array) { + for (var _i = 0, itemsWithSameName_1 = itemsWithSameName; _i < itemsWithSameName_1.length; _i++) { + var itemWithSameName = itemsWithSameName_1[_i]; + if (tryMerge(itemWithSameName, child)) { + return false; + } + } + itemsWithSameName.push(child); + return true; + } + else { + var itemWithSameName = itemsWithSameName; + if (tryMerge(itemWithSameName, child)) { + return false; + } + nameToItems[name] = [itemWithSameName, child]; + return true; + } + function tryMerge(a, b) { + if (shouldReallyMerge(a.node, b.node)) { + merge(a, b); return true; } + return false; } - 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; - } - } + }); + function shouldReallyMerge(a, b) { + return a.kind === b.kind && (a.kind !== 225 || areSameModule(a, b)); + function areSameModule(a, b) { + if (a.body.kind !== b.body.kind) { + return false; } - } - 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); - } - } + if (a.body.kind !== 225) { + return true; } + return areSameModule(a.body, b.body); } - 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); - } + target.additionalNodes = target.additionalNodes || []; + target.additionalNodes.push(source.node); + if (source.additionalNodes) { + (_a = target.additionalNodes).push.apply(_a, source.additionalNodes); + } + target.children = ts.concatenate(target.children, source.children); + if (target.children) { + mergeChildren(target.children); + sortChildren(target.children); + } + var _a; + } + } + function sortChildren(children) { + children.sort(compareChildren); + } + function compareChildren(child1, child2) { + var name1 = tryGetName(child1.node), name2 = tryGetName(child2.node); + if (name1 && name2) { + var cmp = localeCompareFix(name1, name2); + return cmp !== 0 ? cmp : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + else { + return name1 ? 1 : name2 ? -1 : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + } + var collator = typeof Intl === "undefined" ? undefined : new Intl.Collator(); + var localeCompareIsCorrect = collator && collator.compare("a", "B") < 0; + var localeCompareFix = localeCompareIsCorrect ? collator.compare : function (a, b) { + for (var i = 0; i < Math.min(a.length, b.length); i++) { + var chA = a.charAt(i), chB = b.charAt(i); + if (chA === "\"" && chB === "'") { + return 1; + } + if (chA === "'" && chB === "\"") { + return -1; + } + var cmp = chA.toLocaleLowerCase().localeCompare(chB.toLocaleLowerCase()); + if (cmp !== 0) { + return cmp; } } - 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 224: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.enumElement); - case 255: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 225: - return createItem(node, getModuleName(node), ts.ScriptElementKind.moduleElement); - case 222: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.interfaceElement); - case 223: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.typeElement); - 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 221: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.classElement); - case 220: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); - case 218: - case 169: - var variableDeclarationNode = void 0; - var name_36; - if (node.kind === 169) { - name_36 = 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_36 = node.name; - } - if (ts.isConst(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.constElement); - } - else if (ts.isLet(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.letElement); - } - else { - return createItem(node, getTextOfNode(name_36), 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)]); - } + return a.length - b.length; + }; + function tryGetName(node) { + if (node.kind === 225) { + return getModuleName(node); } - function isEmpty(text) { - return !text || text.trim() === ""; + var decl = node; + if (decl.name) { + return ts.getPropertyNameForPropertyNameNode(decl.name); } - function getNavigationBarItem(text, kind, kindModifiers, spans, childItems, indent) { - if (childItems === void 0) { childItems = []; } - if (indent === void 0) { indent = 0; } - if (isEmpty(text)) { + switch (node.kind) { + case 179: + case 180: + case 192: + return getFunctionOrClassName(node); + case 279: + return getJSDocTypedefTagName(node); + default: return undefined; + } + } + function getItemName(node) { + if (node.kind === 225) { + return getModuleName(node); + } + var name = node.name; + if (name) { + var text = nodeText(name); + if (text.length > 0) { + return text; } + } + switch (node.kind) { + case 256: + var sourceFile = node; + return ts.isExternalModule(sourceFile) + ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\"" + : ""; + case 180: + case 220: + case 179: + case 221: + case 192: + if (node.flags & 512) { + return "default"; + } + return getFunctionOrClassName(node); + case 148: + return "constructor"; + case 152: + return "new()"; + case 151: + return "()"; + case 153: + return "[]"; + case 279: + return getJSDocTypedefTagName(node); + default: + return ""; + } + } + function getJSDocTypedefTagName(node) { + if (node.name) { + return node.name.text; + } + else { + var parentNode = node.parent && node.parent.parent; + if (parentNode && parentNode.kind === 200) { + if (parentNode.declarationList.declarations.length > 0) { + var nameIdentifier = parentNode.declarationList.declarations[0].name; + if (nameIdentifier.kind === 69) { + return nameIdentifier.text; + } + } + } + return ""; + } + } + function topLevelItems(root) { + var topLevel = []; + function recur(item) { + if (isTopLevel(item)) { + topLevel.push(item); + if (item.children) { + for (var _i = 0, _a = item.children; _i < _a.length; _i++) { + var child = _a[_i]; + recur(child); + } + } + } + } + recur(root); + return topLevel; + function isTopLevel(item) { + switch (navigationBarNodeKind(item)) { + case 221: + case 192: + case 224: + case 222: + case 225: + case 256: + case 223: + case 279: + return true; + case 148: + case 147: + case 149: + case 150: + return hasSomeImportantChild(item); + case 180: + case 220: + case 179: + return isTopLevelFunctionDeclaration(item); + default: + return false; + } + function isTopLevelFunctionDeclaration(item) { + if (!item.node.body) { + return false; + } + switch (navigationBarNodeKind(item.parent)) { + case 226: + case 256: + case 147: + case 148: + return true; + default: + return hasSomeImportantChild(item); + } + } + function hasSomeImportantChild(item) { + return ts.forEach(item.children, function (child) { + var childKind = navigationBarNodeKind(child); + return childKind !== 218 && childKind !== 169; + }); + } + } + } + var emptyChildItemArray = []; + function convertToTopLevelItem(n) { + return { + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: ts.getNodeModifiers(n.node), + spans: getSpans(n), + childItems: ts.map(n.children, convertToChildItem) || emptyChildItemArray, + indent: n.indent, + bolded: false, + grayed: false + }; + function convertToChildItem(n) { return { - text: text, - kind: kind, - kindModifiers: kindModifiers, - spans: spans, - childItems: childItems, - indent: indent, + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: ts.getNodeModifiers(n.node), + spans: getSpans(n), + childItems: emptyChildItemArray, + indent: 0, 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 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)); + function getSpans(n) { + var spans = [getNodeSpan(n.node)]; + if (n.additionalNodes) { + for (var _i = 0, _a = n.additionalNodes; _i < _a.length; _i++) { + var node = _a[_i]; + spans.push(getNodeSpan(node)); } - return 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); - 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 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 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); + return spans; } } - 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 (node.jsDocComments && node.jsDocComments.length > 0) { - for (var _i = 0, _a = node.jsDocComments; _i < _a.length; _i++) { - var jsDocComment = _a[_i]; - visitNode(jsDocComment); - } - } - 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; + function nodeKind(node) { + switch (node.kind) { + case 256: + return ts.ScriptElementKind.moduleElement; + case 255: + return ts.ScriptElementKind.memberVariableElement; + case 218: + case 169: + var variableDeclarationNode = void 0; + var name_38; + if (node.kind === 169) { + name_38 = node.name; + variableDeclarationNode = node; + while (variableDeclarationNode && variableDeclarationNode.kind !== 218) { + variableDeclarationNode = variableDeclarationNode.parent; } - 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_37 = node.flags && (node.flags & 512) && !node.name ? "default" : - node.kind === 148 ? "constructor" : - ts.declarationNameToString(node.name); - return getNavBarItem(name_37, 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)]); - case 279: - if (node.name) { - return getNavBarItem(node.name.text, ts.ScriptElementKind.typeElement, [getNodeSpan(node)]); - } - else { - var parentNode = node.parent && node.parent.parent; - if (parentNode && parentNode.kind === 200) { - if (parentNode.declarationList.declarations.length > 0) { - var nameIdentifier = parentNode.declarationList.declarations[0].name; - if (nameIdentifier.kind === 69) { - return getNavBarItem(nameIdentifier.text, ts.ScriptElementKind.typeElement, [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(); + ts.Debug.assert(!!variableDeclarationNode); } else { - fnName = node.kind === 192 ? anonClassText : anonFnText; + ts.Debug.assert(!ts.isBindingPattern(node.name)); + variableDeclarationNode = node; + name_38 = node.name; } - } - 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: + if (ts.isConst(variableDeclarationNode)) { + return ts.ScriptElementKind.constElement; + } + else if (ts.isLet(variableDeclarationNode)) { + return ts.ScriptElementKind.letElement; + } + else { 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"; - } + } + case 180: + return ts.ScriptElementKind.functionElement; + case 279: + return ts.ScriptElementKind.typeElement; + default: + return ts.getNodeKind(node); } - return sourceFileItem.childItems; } - NavigationBar.getJsNavigationBarItems = getJsNavigationBarItems; + function getModuleName(moduleDeclaration) { + if (ts.isAmbientModule(moduleDeclaration)) { + return ts.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 getInteriorModule(decl) { + return decl.body.kind === 225 ? getInteriorModule(decl.body) : decl; + } + function isComputedProperty(member) { + return !member.name || member.name.kind === 140; + } + function getNodeSpan(node) { + return node.kind === 256 + ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) + : ts.createTextSpanFromBounds(node.getStart(curSourceFile), node.getEnd()); + } + function getFunctionOrClassName(node) { + if (node.name && ts.getFullWidth(node.name) > 0) { + return ts.declarationNameToString(node.name); + } + else if (node.parent.kind === 218) { + return ts.declarationNameToString(node.parent.name); + } + else if (node.parent.kind === 187 && + node.parent.operatorToken.kind === 56) { + return nodeText(node.parent.left); + } + else if (node.parent.kind === 253 && node.parent.name) { + return nodeText(node.parent.name); + } + else if (node.flags & 512) { + return "default"; + } + else { + return ts.isClassLike(node) ? "" : ""; + } + } + function isFunctionOrClassExpression(node) { + return node.kind === 179 || node.kind === 180 || node.kind === 192; + } })(NavigationBar = ts.NavigationBar || (ts.NavigationBar = {})); })(ts || (ts = {})); var ts; @@ -39497,7 +40473,7 @@ var ts; 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); + return typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisParameter, candidateSignature.parameters, writer, invocation); }); ts.addRange(suffixDisplayParts, parameterParts); } @@ -39611,6 +40587,8 @@ var ts; case 199: case 226: case 227: + case 233: + case 237: return nodeEndsWith(n, 16, sourceFile); case 252: return isCompletedNode(n.block, sourceFile); @@ -39693,6 +40671,9 @@ var ts; return isCompletedNode(lastSpan, sourceFile); case 197: return ts.nodeIsPresent(n.literal); + case 236: + case 230: + return ts.nodeIsPresent(n.moduleSpecifier); case 185: return isCompletedNode(n.operand, sourceFile); case 187: @@ -40372,9 +41353,9 @@ var ts; getTypingNamesFromNodeModuleFolder(nodeModulesPath); } getTypingNamesFromSourceFileNames(fileNames); - for (var name_38 in packageNameToTypingLocation) { - if (ts.hasProperty(inferredTypings, name_38) && !inferredTypings[name_38]) { - inferredTypings[name_38] = packageNameToTypingLocation[name_38]; + for (var name_39 in packageNameToTypingLocation) { + if (ts.hasProperty(inferredTypings, name_39) && !inferredTypings[name_39]) { + inferredTypings[name_39] = packageNameToTypingLocation[name_39]; } } for (var _a = 0, exclude_1 = exclude; _a < exclude_1.length; _a++) { @@ -40442,9 +41423,9 @@ var ts; 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 fileNames = host.readDirectory(nodeModulesPath, ["*.json"], undefined, undefined, 2); + for (var _i = 0, fileNames_2 = fileNames; _i < fileNames_2.length; _i++) { + var fileName = fileNames_2[_i]; var normalizedFileName = ts.normalizePath(fileName); if (ts.getBaseFileName(normalizedFileName) !== "package.json") { continue; @@ -40499,6 +41480,7 @@ var ts; isOnToken: isOnToken, getCurrentLeadingTrivia: function () { return leadingTrivia; }, lastTrailingTriviaWasNewLine: function () { return wasNewLine; }, + skipToEndOf: skipToEndOf, close: function () { ts.Debug.assert(scanner !== undefined); lastTokenInfo = undefined; @@ -40673,6 +41655,15 @@ var ts; } return tokenInfo; } + function skipToEndOf(node) { + scanner.setTextPos(node.end); + savedPos = scanner.getStartPos(); + lastScanAction = undefined; + lastTokenInfo = undefined; + wasNewLine = false; + leadingTrivia = undefined; + trailingTrivia = undefined; + } } formatting.getFormattingScanner = getFormattingScanner; })(formatting = ts.formatting || (ts.formatting = {})); @@ -40888,7 +41879,7 @@ var ts; 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.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([69, 3, 73, 82, 89]); 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); @@ -40916,15 +41907,15 @@ var ts; 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.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.isNonJsxElementContext, 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.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, 136]), 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, 136])), 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)); @@ -41000,8 +41991,8 @@ var ts; 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.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext, Rules.IsNextTokenNotCloseBracket), 2)); + this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext), 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)); @@ -41027,14 +42018,18 @@ var ts; 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.NoSpaceAfterOpenBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 8)); + this.SpaceAfterOpenBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 2)); + this.NoSpaceBeforeCloseBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 8)); + this.SpaceBeforeCloseBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 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_39 in o) { - if (o[name_39] === rule) { - return name_39; + for (var name_40 in o) { + if (o[name_40] === rule) { + return name_40; } } throw new Error("Unknown rule"); @@ -41050,6 +42045,8 @@ var ts; case 187: case 188: case 195: + case 238: + case 234: case 154: case 162: case 163: @@ -41137,6 +42134,10 @@ var ts; case 224: case 159: case 225: + case 236: + case 237: + case 230: + case 233: return true; } return false; @@ -41195,6 +42196,12 @@ var ts; Rules.IsNonJsxSameLineTokenContext = function (context) { return context.TokensAreOnSameLine() && context.contextNode.kind !== 244; }; + Rules.isNonJsxElementContext = function (context) { + return context.contextNode.kind !== 241; + }; + Rules.isJsxExpressionContext = function (context) { + return context.contextNode.kind === 248; + }; Rules.IsNotBeforeBlockInFunctionDeclarationContext = function (context) { return !Rules.IsFunctionDeclContext(context) && !Rules.IsBeforeBlockContext(context); }; @@ -41590,6 +42597,14 @@ var ts; rules.push(this.globalRules.NoSpaceAfterTemplateHeadAndMiddle); rules.push(this.globalRules.NoSpaceBeforeTemplateMiddleAndTail); } + if (options.InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces) { + rules.push(this.globalRules.SpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.SpaceBeforeCloseBraceInJsxExpression); + } + else { + rules.push(this.globalRules.NoSpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.NoSpaceBeforeCloseBraceInJsxExpression); + } if (options.InsertSpaceAfterSemicolonInForStatements) { rules.push(this.globalRules.SpaceAfterSemicolonInFor); } @@ -41629,7 +42644,7 @@ var ts; return []; } var endOfFormatSpan = ts.getEndLinePosition(line, sourceFile); - while (ts.isWhiteSpace(sourceFile.text.charCodeAt(endOfFormatSpan)) && !ts.isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { + while (ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(endOfFormatSpan))) { endOfFormatSpan--; } if (ts.isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { @@ -41828,7 +42843,8 @@ var ts; var startLinePosition = ts.getLineStartPositionForPosition(startPos, sourceFile); var column = formatting.SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options); if (startLine !== parentStartLine || startPos === column) { - return column; + var baseIndentSize = formatting.SmartIndenter.getBaseIndentation(options); + return baseIndentSize > column ? baseIndentSize : column; } } return -1; @@ -41963,6 +42979,9 @@ var ts; } } if (!ts.rangeOverlapsWithStartEnd(originalRange, child.pos, child.end)) { + if (child.end < originalRange.pos) { + formattingScanner.skipToEndOf(child); + } return inheritedIndentation; } if (child.getFullWidth() === 0) { @@ -42226,14 +43245,14 @@ var ts; } var whitespaceStart = getTrailingWhitespaceStartPosition(lineStartPosition, lineEndPosition); if (whitespaceStart !== -1) { - ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpace(sourceFile.text.charCodeAt(whitespaceStart - 1))); + ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(whitespaceStart - 1))); recordDelete(whitespaceStart, lineEndPosition + 1 - whitespaceStart); } } } function getTrailingWhitespaceStartPosition(start, end) { var pos = end; - while (pos >= start && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos >= start && ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos--; } if (pos !== end) { @@ -42389,14 +43408,14 @@ var ts; (function (SmartIndenter) { function getIndentation(position, sourceFile, options) { if (position > sourceFile.text.length) { - return 0; + return getBaseIndentation(options); } if (options.IndentStyle === ts.IndentStyle.None) { return 0; } var precedingToken = ts.findPrecedingToken(position, sourceFile); if (!precedingToken) { - return 0; + return getBaseIndentation(options); } var precedingTokenIsLiteral = ts.isStringOrRegularExpressionOrTemplateLiteral(precedingToken.kind); if (precedingTokenIsLiteral && precedingToken.getStart(sourceFile) <= position && precedingToken.end > position) { @@ -42407,7 +43426,7 @@ var ts; var current_1 = position; while (current_1 > 0) { var char = sourceFile.text.charCodeAt(current_1); - if (!ts.isWhiteSpace(char) && !ts.isLineBreak(char)) { + if (!ts.isWhiteSpace(char)) { break; } current_1--; @@ -42448,11 +43467,15 @@ var ts; current = current.parent; } if (!current) { - return 0; + return getBaseIndentation(options); } return getIndentationForNodeWorker(current, currentStart, undefined, indentationDelta, sourceFile, options); } SmartIndenter.getIndentation = getIndentation; + function getBaseIndentation(options) { + return options.BaseIndentSize || 0; + } + SmartIndenter.getBaseIndentation = getBaseIndentation; function getIndentationForNode(n, ignoreActualIndentationRange, sourceFile, options) { var start = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); return getIndentationForNodeWorker(n, start, ignoreActualIndentationRange, 0, sourceFile, options); @@ -42493,7 +43516,7 @@ var ts; currentStart = parentStart; parent = current.parent; } - return indentationDelta; + return indentationDelta + getBaseIndentation(options); } function getParentStart(parent, child, sourceFile) { var containingList = getContainingList(child, sourceFile); @@ -42661,7 +43684,7 @@ var ts; var column = 0; for (var pos = startPos; pos < endPos; pos++) { var ch = sourceFile.text.charCodeAt(pos); - if (!ts.isWhiteSpace(ch)) { + if (!ts.isWhiteSpaceSingleLine(ch)) { break; } if (ch === 9) { @@ -42719,7 +43742,10 @@ var ts; case 164: case 176: case 184: + case 237: case 233: + case 238: + case 234: return true; } return false; @@ -42741,6 +43767,11 @@ var ts; case 149: case 150: return childKind !== 199; + case 236: + return childKind !== 237; + case 230: + return childKind !== 231 || + (child.namedBindings && child.namedBindings.kind !== 233); case 241: return childKind !== 245; } @@ -42880,8 +43911,8 @@ var ts; var list = createNode(282, 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]; + for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) { + var node = nodes_4[_i]; if (pos < node.pos) { pos = this.addSyntheticNodes(list._children, pos, node.pos); } @@ -43007,7 +44038,7 @@ var ts; } addCommentParts(declaration.parent, sourceFileOfDeclaration, getCleanedParamJsDocComment); } - if (declaration.kind === 225 && declaration.body.kind === 225) { + if (declaration.kind === 225 && declaration.body && declaration.body.kind === 225) { return; } if ((declaration.kind === 179 || declaration.kind === 180) && @@ -43050,7 +44081,7 @@ var ts; } for (; pos < end; pos++) { var ch = sourceFile.text.charCodeAt(pos); - if (!ts.isWhiteSpace(ch) || ts.isLineBreak(ch)) { + if (!ts.isWhiteSpaceSingleLine(ch)) { return pos; } } @@ -43065,8 +44096,7 @@ var ts; 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))); + ts.isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)); } function isParamTag(pos, end, sourceFile) { return isName(pos, end, sourceFile, paramTag); @@ -43203,7 +44233,7 @@ var ts; } return paramDocComments; function consumeWhiteSpaces(pos) { - while (pos < end && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos < end && ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos++; } return pos; @@ -43594,8 +44624,8 @@ var ts; 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) { + for (var parent_16 = declaration.parent; !ts.isFunctionBlock(parent_16); parent_16 = parent_16.parent) { + if (parent_16.kind === 256 || parent_16.kind === 226) { return false; } } @@ -43706,13 +44736,13 @@ var ts; sourceFile.version = version; sourceFile.scriptSnapshot = scriptSnapshot; } - var commandLineOptions_stringToEnum; + var commandLineOptionsStringToEnum; function fixupCompilerOptions(options, diagnostics) { - commandLineOptions_stringToEnum = commandLineOptions_stringToEnum || ts.filter(ts.optionDeclarations, function (o) { + commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || ts.filter(ts.optionDeclarations, function (o) { return typeof o.type === "object" && !ts.forEachValue(o.type, function (v) { return typeof v !== "number"; }); }); options = ts.clone(options); - var _loop_2 = function(opt) { + var _loop_3 = function(opt) { if (!ts.hasProperty(options, opt.name)) { return "continue"; } @@ -43726,9 +44756,9 @@ var ts; } } }; - for (var _i = 0, commandLineOptions_stringToEnum_1 = commandLineOptions_stringToEnum; _i < commandLineOptions_stringToEnum_1.length; _i++) { - var opt = commandLineOptions_stringToEnum_1[_i]; - _loop_2(opt); + for (var _i = 0, commandLineOptionsStringToEnum_1 = commandLineOptionsStringToEnum; _i < commandLineOptionsStringToEnum_1.length; _i++) { + var opt = commandLineOptionsStringToEnum_1[_i]; + _loop_3(opt); } return options; } @@ -43739,6 +44769,16 @@ var ts; options.suppressOutputPathCheck = true; options.allowNonTsExtensions = true; options.noLib = true; + options.lib = undefined; + options.types = undefined; + options.noEmit = undefined; + options.noEmitOnError = undefined; + options.paths = undefined; + options.rootDirs = undefined; + options.declaration = undefined; + options.declarationDir = undefined; + options.out = undefined; + options.outFile = undefined; options.noResolve = true; var inputFileName = transpileOptions.fileName || (options.jsx ? "module.tsx" : "module.ts"); var sourceFile = ts.createSourceFile(inputFileName, input, options.target); @@ -43768,7 +44808,8 @@ var ts; getNewLine: function () { return newLine; }, fileExists: function (fileName) { return fileName === inputFileName; }, readFile: function (fileName) { return ""; }, - directoryExists: function (directoryExists) { return true; } + directoryExists: function (directoryExists) { return true; }, + getDirectories: function (path) { return []; } }; var program = ts.createProgram([inputFileName], options, compilerHost); if (transpileOptions.reportDiagnostics) { @@ -43837,7 +44878,7 @@ var ts; 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)); + return ("_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + "|" + settings.allowJs + "|" + settings.baseUrl + "|" + JSON.stringify(settings.typeRoots) + "|" + JSON.stringify(settings.rootDirs) + "|" + JSON.stringify(settings.paths)); } function getBucketForCompilationSettings(key, createIfMissing) { var bucket = ts.lookUp(buckets, key); @@ -44487,7 +45528,8 @@ var ts; oldSettings.moduleResolution !== newSettings.moduleResolution || oldSettings.noResolve !== newSettings.noResolve || oldSettings.jsx !== newSettings.jsx || - oldSettings.allowJs !== newSettings.allowJs); + oldSettings.allowJs !== newSettings.allowJs || + oldSettings.disableSizeLimit !== oldSettings.disableSizeLimit); var compilerHost = { getSourceFile: getOrCreateSourceFile, getSourceFileByPath: getOrCreateSourceFileByPath, @@ -44507,8 +45549,10 @@ var ts; return entry && entry.scriptSnapshot.getText(0, entry.scriptSnapshot.getLength()); }, directoryExists: function (directoryName) { - ts.Debug.assert(!host.resolveModuleNames || !host.resolveTypeReferenceDirectives); return ts.directoryProbablyExists(directoryName, host); + }, + getDirectories: function (path) { + return host.getDirectories ? host.getDirectories(path) : []; } }; if (host.trace) { @@ -44695,13 +45739,13 @@ var ts; log("Returning an empty list because completion was requested in an invalid position."); return undefined; } - var parent_16 = contextToken.parent, kind = contextToken.kind; + var parent_17 = contextToken.parent, kind = contextToken.kind; if (kind === 21) { - if (parent_16.kind === 172) { + if (parent_17.kind === 172) { node = contextToken.parent.expression; isRightOfDot = true; } - else if (parent_16.kind === 139) { + else if (parent_17.kind === 139) { node = contextToken.parent.left; isRightOfDot = true; } @@ -44989,9 +46033,9 @@ var ts; 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; + var parent_18 = contextToken.parent; + if (parent_18 && (parent_18.kind === 171 || parent_18.kind === 167)) { + return parent_18; } break; } @@ -45014,34 +46058,34 @@ var ts; } function tryGetContainingJsxElement(contextToken) { if (contextToken) { - var parent_18 = contextToken.parent; + var parent_19 = 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; + if (parent_19 && (parent_19.kind === 242 || parent_19.kind === 243)) { + return parent_19; } - else if (parent_18.kind === 246) { - return parent_18.parent; + else if (parent_19.kind === 246) { + return parent_19.parent; } break; case 9: - if (parent_18 && ((parent_18.kind === 246) || (parent_18.kind === 247))) { - return parent_18.parent; + if (parent_19 && ((parent_19.kind === 246) || (parent_19.kind === 247))) { + return parent_19.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_19 && + parent_19.kind === 248 && + parent_19.parent && + (parent_19.parent.kind === 246)) { + return parent_19.parent.parent; } - if (parent_18 && parent_18.kind === 247) { - return parent_18.parent; + if (parent_19 && parent_19.kind === 247) { + return parent_19.parent; } break; } @@ -45164,8 +46208,8 @@ var ts; if (element.getStart() <= position && position <= element.getEnd()) { continue; } - var name_40 = element.propertyName || element.name; - existingImportsOrExports[name_40.text] = true; + var name_41 = element.propertyName || element.name; + existingImportsOrExports[name_41.text] = true; } if (ts.isEmpty(existingImportsOrExports)) { return ts.filter(exportsOfModule, function (e) { return e.name !== "default"; }); @@ -45260,13 +46304,13 @@ var ts; var entries = []; var target = program.getCompilerOptions().target; var nameTable = getNameTable(sourceFile); - for (var name_41 in nameTable) { - if (nameTable[name_41] === position) { + for (var name_42 in nameTable) { + if (nameTable[name_42] === position) { continue; } - if (!uniqueNames[name_41]) { - uniqueNames[name_41] = name_41; - var displayName = getCompletionEntryDisplayName(name_41, target, true); + if (!uniqueNames[name_42]) { + uniqueNames[name_42] = name_42; + var displayName = getCompletionEntryDisplayName(ts.unescapeIdentifier(name_42), target, true); if (displayName) { var entry = { name: displayName, @@ -45370,10 +46414,10 @@ var ts; var typeChecker = program.getTypeChecker(); var type = typeChecker.getContextualType(node); if (type) { - var entries_1 = []; - addStringLiteralCompletionsFromType(type, entries_1); - if (entries_1.length) { - return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries_1 }; + var entries_2 = []; + addStringLiteralCompletionsFromType(type, entries_2); + if (entries_2.length) { + return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries_2 }; } } return undefined; @@ -46242,17 +47286,17 @@ var ts; 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; + var parent_20 = child.parent; + if (ts.isFunctionBlock(parent_20) || parent_20.kind === 256) { + return parent_20; } - if (parent_19.kind === 216) { - var tryStatement = parent_19; + if (parent_20.kind === 216) { + var tryStatement = parent_20; if (tryStatement.tryBlock === child && tryStatement.catchClause) { return child; } } - child = parent_19; + child = parent_20; } return undefined; } @@ -46536,7 +47580,7 @@ var ts; 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))) { + if (!ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(j))) { shouldCombindElseAndIf = false; break; } @@ -46572,7 +47616,8 @@ var ts; result.push({ fileName: entry.fileName, textSpan: highlightSpan.textSpan, - isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference + isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference, + isDefinition: false }); } } @@ -46609,13 +47654,27 @@ var ts; if (node === sourceFile) { return undefined; } - if (node.kind !== 69 && - node.kind !== 9 && - !isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { - return undefined; + switch (node.kind) { + case 8: + if (!isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + break; + } + case 69: + case 97: + case 9: + return getReferencedSymbolsForNode(node, program.getSourceFiles(), findInStrings, findInComments); + } + return undefined; + } + function isThis(node) { + switch (node.kind) { + case 97: + return true; + case 69: + return node.originalKeywordKind === 97 && node.parent.kind === 142; + default: + return false; } - 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(); @@ -46628,7 +47687,7 @@ var ts; return getLabelReferencesInNode(node.parent, node); } } - if (node.kind === 97 || node.kind === 165) { + if (isThis(node)) { return getReferencesForThisKeyword(node, sourceFiles); } if (node.kind === 95) { @@ -46853,7 +47912,8 @@ var ts; references: [{ fileName: sourceFile.fileName, textSpan: ts.createTextSpan(position, searchText.length), - isWriteAccess: false + isWriteAccess: false, + isDefinition: false }] }); } @@ -46992,7 +48052,7 @@ var ts; ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); var node = ts.getTouchingWord(sourceFile, position); - if (!node || (node.kind !== 97 && node.kind !== 165)) { + if (!node || !isThis(node)) { return; } var container = ts.getThisContainer(node, false); @@ -47231,7 +48291,8 @@ var ts; return { fileName: node.getSourceFile().fileName, textSpan: ts.createTextSpanFromBounds(start, end), - isWriteAccess: isWriteAccess(node) + isWriteAccess: isWriteAccess(node), + isDefinition: ts.isDeclarationName(node) || ts.isLiteralComputedPropertyDeclarationName(node) }; } function isWriteAccess(node) { @@ -47452,7 +48513,7 @@ var ts; } function getNavigationBarItems(fileName) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); - return ts.NavigationBar.getNavigationBarItems(sourceFile, host.getCompilationSettings()); + return ts.NavigationBar.getNavigationBarItems(sourceFile); } function getSemanticClassifications(fileName, span) { return convertClassifications(getEncodedSemanticClassifications(fileName, span)); @@ -47831,7 +48892,8 @@ var ts; return; case 142: if (token.parent.name === token) { - return 17; + var isThis_1 = token.kind === 69 && token.originalKeywordKind === 97; + return isThis_1 ? 3 : 17; } return; } @@ -47981,7 +49043,7 @@ var ts; (tokenStart === position ? newLine + indentationStr : ""); return { newText: result, caretOffset: preamble.length }; } - function isValidBraceCompletionAtPostion(fileName, position, openingBrace) { + function isValidBraceCompletionAtPosition(fileName, position, openingBrace) { if (openingBrace === 60) { return false; } @@ -48106,7 +49168,8 @@ var ts; if (node) { if (node.kind === 69 || node.kind === 9 || - isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || + isThis(node)) { var symbol = typeChecker.getSymbolAtLocation(node); if (symbol) { var declarations = symbol.getDeclarations(); @@ -48217,7 +49280,7 @@ var ts; getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition, - isValidBraceCompletionAtPostion: isValidBraceCompletionAtPostion, + isValidBraceCompletionAtPosition: isValidBraceCompletionAtPosition, getEmitOutput: getEmitOutput, getNonBoundSourceFile: getNonBoundSourceFile, getProgram: getProgram @@ -48712,6 +49775,8 @@ var ts; CommandNames.Formatonkey = "formatonkey"; CommandNames.Geterr = "geterr"; CommandNames.GeterrForProject = "geterrForProject"; + CommandNames.SemanticDiagnosticsSync = "semanticDiagnosticsSync"; + CommandNames.SyntacticDiagnosticsSync = "syntacticDiagnosticsSync"; CommandNames.NavBar = "navbar"; CommandNames.Navto = "navto"; CommandNames.Occurrences = "occurrences"; @@ -48731,6 +49796,7 @@ var ts; var Errors; (function (Errors) { Errors.NoProject = new Error("No Project."); + Errors.ProjectLanguageServiceDisabled = new Error("The project's language service is disabled."); })(Errors || (Errors = {})); var Session = (function () { function Session(host, byteLength, hrtime, logger) { @@ -48807,6 +49873,12 @@ var ts; var signatureHelpArgs = request.arguments; return { response: _this.getSignatureHelpItems(signatureHelpArgs.line, signatureHelpArgs.offset, signatureHelpArgs.file), responseRequired: true }; }, + _a[CommandNames.SemanticDiagnosticsSync] = function (request) { + return _this.requiredResponse(_this.getSemanticDiagnosticsSync(request.arguments)); + }, + _a[CommandNames.SyntacticDiagnosticsSync] = function (request) { + return _this.requiredResponse(_this.getSyntacticDiagnosticsSync(request.arguments)); + }, _a[CommandNames.Geterr] = function (request) { var geterrArgs = request.arguments; return { response: _this.getDiagnostics(geterrArgs.delay, geterrArgs.files), responseRequired: false }; @@ -49028,7 +50100,7 @@ var ts; Session.prototype.getDefinition = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49046,7 +50118,7 @@ var ts; Session.prototype.getTypeDefinition = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49064,7 +50136,7 @@ var ts; Session.prototype.getOccurrences = function (line, offset, fileName) { fileName = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(fileName); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49085,10 +50157,28 @@ var ts; }; }); }; + Session.prototype.getDiagnosticsWorker = function (args, selector) { + var file = ts.normalizePath(args.file); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + if (project.languageServiceDiabled) { + throw Errors.ProjectLanguageServiceDisabled; + } + var diagnostics = selector(project, file); + return ts.map(diagnostics, function (originalDiagnostic) { return formatDiag(file, project, originalDiagnostic); }); + }; + Session.prototype.getSyntacticDiagnosticsSync = function (args) { + return this.getDiagnosticsWorker(args, function (project, file) { return project.compilerService.languageService.getSyntacticDiagnostics(file); }); + }; + Session.prototype.getSemanticDiagnosticsSync = function (args) { + return this.getDiagnosticsWorker(args, function (project, file) { return project.compilerService.languageService.getSemanticDiagnostics(file); }); + }; Session.prototype.getDocumentHighlights = function (line, offset, fileName, filesToSearch) { fileName = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(fileName); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49115,8 +50205,12 @@ var ts; Session.prototype.getProjectInfo = function (fileName, needFileNameList) { fileName = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(fileName); + if (!project) { + throw Errors.NoProject; + } var projectInfo = { - configFileName: project.projectFilename + configFileName: project.projectFilename, + languageServiceDisabled: project.languageServiceDiabled }; if (needFileNameList) { projectInfo.fileNames = project.getFileNames(); @@ -49127,10 +50221,11 @@ var ts; var file = ts.normalizePath(fileName); var info = this.projectService.getScriptInfo(file); var projects = this.projectService.findReferencingProjects(info); - if (!projects.length) { + var projectsWithLanguageServiceEnabeld = ts.filter(projects, function (p) { return !p.languageServiceDiabled; }); + if (projectsWithLanguageServiceEnabeld.length === 0) { throw Errors.NoProject; } - var defaultProject = projects[0]; + var defaultProject = projectsWithLanguageServiceEnabeld[0]; var defaultProjectCompilerService = defaultProject.compilerService; var position = defaultProjectCompilerService.host.lineOffsetToPosition(file, line, offset); var renameInfo = defaultProjectCompilerService.languageService.getRenameInfo(file, position); @@ -49143,7 +50238,7 @@ var ts; locs: [] }; } - var fileSpans = server.combineProjectOutput(projects, function (project) { + var fileSpans = server.combineProjectOutput(projectsWithLanguageServiceEnabeld, function (project) { var compilerService = project.compilerService; var renameLocations = compilerService.languageService.findRenameLocations(file, position, findInStrings, findInComments); if (!renameLocations) { @@ -49195,10 +50290,11 @@ var ts; var file = ts.normalizePath(fileName); var info = this.projectService.getScriptInfo(file); var projects = this.projectService.findReferencingProjects(info); - if (!projects.length) { + var projectsWithLanguageServiceEnabeld = ts.filter(projects, function (p) { return !p.languageServiceDiabled; }); + if (projectsWithLanguageServiceEnabeld.length === 0) { throw Errors.NoProject; } - var defaultProject = projects[0]; + var defaultProject = projectsWithLanguageServiceEnabeld[0]; var position = defaultProject.compilerService.host.lineOffsetToPosition(file, line, offset); var nameInfo = defaultProject.compilerService.languageService.getQuickInfoAtPosition(file, position); if (!nameInfo) { @@ -49208,7 +50304,7 @@ var ts; 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 refs = server.combineProjectOutput(projectsWithLanguageServiceEnabeld, function (project) { var compilerService = project.compilerService; var references = compilerService.languageService.getReferencesAtPosition(file, position); if (!references) { @@ -49224,7 +50320,8 @@ var ts; start: start, lineText: lineText, end: compilerService.host.positionToLineOffset(ref.fileName, ts.textSpanEnd(ref.textSpan)), - isWriteAccess: ref.isWriteAccess + isWriteAccess: ref.isWriteAccess, + isDefinition: ref.isDefinition }; }); }, compareFileStart, areReferencesResponseItemsForTheSameLocation); @@ -49253,7 +50350,7 @@ var ts; Session.prototype.getQuickInfo = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49276,7 +50373,7 @@ var ts; Session.prototype.getFormattingEditsForRange = function (line, offset, endLine, endOffset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49297,7 +50394,7 @@ var ts; Session.prototype.getFormattingEditsAfterKeystroke = function (line, offset, key, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49312,6 +50409,7 @@ var ts; var lineText = lineInfo.leaf.text; if (lineText.search("\\S") < 0) { var editorOptions = { + BaseIndentSize: formatOptions.BaseIndentSize, IndentSize: formatOptions.IndentSize, TabSize: formatOptions.TabSize, NewLineCharacter: formatOptions.NewLineCharacter, @@ -49360,7 +50458,7 @@ var ts; } var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49379,7 +50477,7 @@ var ts; Session.prototype.getCompletionEntryDetails = function (line, offset, entryNames, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49395,7 +50493,7 @@ var ts; Session.prototype.getSignatureHelpItems = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49422,7 +50520,7 @@ var ts; var checkList = fileNames.reduce(function (accum, fileName) { fileName = ts.normalizePath(fileName); var project = _this.projectService.getProjectForFile(fileName); - if (project) { + if (project && !project.languageServiceDiabled) { accum.push({ fileName: fileName, project: project }); } return accum; @@ -49435,7 +50533,7 @@ var ts; var _this = this; var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (project) { + if (project && !project.languageServiceDiabled) { var compilerService = project.compilerService; var start = compilerService.host.lineOffsetToPosition(file, line, offset); var end = compilerService.host.lineOffsetToPosition(file, endLine, endOffset); @@ -49452,7 +50550,7 @@ var ts; var file = ts.normalizePath(fileName); var tmpfile = ts.normalizePath(tempFileName); var project = this.projectService.getProjectForFile(file); - if (project) { + if (project && !project.languageServiceDiabled) { this.changeSeq++; project.compilerService.host.reloadScript(file, tmpfile, function () { _this.output(undefined, CommandNames.Reload, reqSeq); @@ -49463,7 +50561,7 @@ var ts; var file = ts.normalizePath(fileName); var tmpfile = ts.normalizePath(tempFileName); var project = this.projectService.getProjectForFile(file); - if (project) { + if (project && !project.languageServiceDiabled) { project.compilerService.host.saveTo(file, tmpfile); } }; @@ -49474,7 +50572,7 @@ var ts; var file = ts.normalizePath(fileName); this.projectService.closeClientFile(file); }; - Session.prototype.decorateNavigationBarItem = function (project, fileName, items) { + Session.prototype.decorateNavigationBarItem = function (project, fileName, items, lineIndex) { var _this = this; if (!items) { return undefined; @@ -49485,17 +50583,17 @@ var ts; 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)) + start: compilerService.host.positionToLineOffset(fileName, span.start, lineIndex), + end: compilerService.host.positionToLineOffset(fileName, ts.textSpanEnd(span), lineIndex) }); }), - childItems: _this.decorateNavigationBarItem(project, fileName, item.childItems), + childItems: _this.decorateNavigationBarItem(project, fileName, item.childItems, lineIndex), indent: item.indent }); }); }; Session.prototype.getNavigationBarItems = function (fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49503,17 +50601,17 @@ var ts; if (!items) { return undefined; } - return this.decorateNavigationBarItem(project, fileName, items); + return this.decorateNavigationBarItem(project, fileName, items, compilerService.host.getLineIndex(fileName)); }; 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) { + var projectsWithLanguageServiceEnabeld = ts.filter(projects, function (p) { return !p.languageServiceDiabled; }); + if (projectsWithLanguageServiceEnabeld.length === 0) { throw Errors.NoProject; } - var allNavToItems = server.combineProjectOutput(projects, function (project) { + var allNavToItems = server.combineProjectOutput(projectsWithLanguageServiceEnabeld, function (project) { var compilerService = project.compilerService; var navItems = compilerService.languageService.getNavigateToItems(searchValue, maxResultCount); if (!navItems) { @@ -49557,7 +50655,7 @@ var ts; Session.prototype.getBraceMatching = function (line, offset, fileName) { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } var compilerService = project.compilerService; @@ -49573,7 +50671,10 @@ var ts; }; Session.prototype.getDiagnosticsForProject = function (delay, fileName) { var _this = this; - var fileNames = this.getProjectInfo(fileName, true).fileNames; + var _a = this.getProjectInfo(fileName, true), fileNames = _a.fileNames, languageServiceDisabled = _a.languageServiceDisabled; + if (languageServiceDisabled) { + return; + } var fileNamesInProject = fileNames.filter(function (value, index, array) { return value.indexOf("lib.d.ts") < 0; }); var highPriorityFiles = []; var mediumPriorityFiles = []; @@ -49612,6 +50713,9 @@ var ts; }; Session.prototype.exit = function () { }; + Session.prototype.requiredResponse = function (response) { + return { response: response, responseRequired: true }; + }; Session.prototype.addProtocolHandler = function (command, handler) { if (this.handlers[command]) { throw new Error("Protocol handler already exists for command \"" + command + "\""); @@ -49683,6 +50787,7 @@ var ts; } }); } + server.maxProgramSizeForNonTsFiles = 20 * 1024 * 1024; var ScriptInfo = (function () { function ScriptInfo(host, fileName, content, isOpen) { if (isOpen === void 0) { isOpen = false; } @@ -49752,17 +50857,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_43 = names_2[_i]; + var resolution = ts.lookUp(newResolutions, name_43); if (!resolution) { - var existingResolution = currentResolutionsInFile && ts.lookUp(currentResolutionsInFile, name_42); + var existingResolution = currentResolutionsInFile && ts.lookUp(currentResolutionsInFile, name_43); if (moduleResolutionIsValid(existingResolution)) { resolution = existingResolution; } else { - resolution = loader(name_42, containingFile, compilerOptions, this.moduleResolutionHost); + resolution = loader(name_43, containingFile, compilerOptions, this.moduleResolutionHost); resolution.lastCheckTime = Date.now(); - newResolutions[name_42] = resolution; + newResolutions[name_43] = resolution; } } ts.Debug.assert(resolution !== undefined); @@ -49898,6 +51003,9 @@ var ts; LSHost.prototype.directoryExists = function (path) { return this.host.directoryExists(path); }; + LSHost.prototype.getDirectories = function (path) { + return this.host.getDirectories(path); + }; LSHost.prototype.lineToTextSpan = function (filename, line) { var path = ts.toPath(filename, this.host.getCurrentDirectory(), this.getCanonicalFileName); var script = this.filenameToScript.get(path); @@ -49920,20 +51028,25 @@ var ts; var lineInfo = index.lineNumberToInfo(line); return (lineInfo.offset + offset - 1); }; - LSHost.prototype.positionToLineOffset = function (filename, position) { + LSHost.prototype.positionToLineOffset = function (filename, position, lineIndex) { + lineIndex = lineIndex || this.getLineIndex(filename); + var lineOffset = lineIndex.charOffsetToLineNumberAndPos(position); + return { line: lineOffset.line, offset: lineOffset.offset + 1 }; + }; + LSHost.prototype.getLineIndex = function (filename) { 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 script.snap().index; }; return LSHost; }()); server.LSHost = LSHost; var Project = (function () { - function Project(projectService, projectOptions) { + function Project(projectService, projectOptions, languageServiceDiabled) { + if (languageServiceDiabled === void 0) { languageServiceDiabled = false; } this.projectService = projectService; this.projectOptions = projectOptions; + this.languageServiceDiabled = languageServiceDiabled; this.directoriesWatchedForTsconfig = []; this.filenameToSourceFile = {}; this.updateGraphSeq = 0; @@ -49941,8 +51054,19 @@ var ts; if (projectOptions && projectOptions.files) { projectOptions.compilerOptions.allowNonTsExtensions = true; } - this.compilerService = new CompilerService(this, projectOptions && projectOptions.compilerOptions); + if (!languageServiceDiabled) { + this.compilerService = new CompilerService(this, projectOptions && projectOptions.compilerOptions); + } } + Project.prototype.enableLanguageService = function () { + if (this.languageServiceDiabled) { + this.compilerService = new CompilerService(this, this.projectOptions && this.projectOptions.compilerOptions); + } + this.languageServiceDiabled = false; + }; + Project.prototype.disableLanguageService = function () { + this.languageServiceDiabled = true; + }; Project.prototype.addOpenRef = function () { this.openRefCount++; }; @@ -49954,16 +51078,36 @@ var ts; return this.projectService.openFile(filename, false); }; Project.prototype.getRootFiles = function () { + if (this.languageServiceDiabled) { + return this.projectOptions ? this.projectOptions.files : undefined; + } return this.compilerService.host.roots.map(function (info) { return info.fileName; }); }; Project.prototype.getFileNames = function () { + if (this.languageServiceDiabled) { + if (!this.projectOptions) { + return undefined; + } + var fileNames = []; + if (this.projectOptions && this.projectOptions.compilerOptions) { + fileNames.push(ts.getDefaultLibFilePath(this.projectOptions.compilerOptions)); + } + ts.addRange(fileNames, this.projectOptions.files); + return fileNames; + } var sourceFiles = this.program.getSourceFiles(); return sourceFiles.map(function (sourceFile) { return sourceFile.fileName; }); }; Project.prototype.getSourceFile = function (info) { + if (this.languageServiceDiabled) { + return undefined; + } return this.filenameToSourceFile[info.fileName]; }; Project.prototype.getSourceFileFromName = function (filename, requireOpen) { + if (this.languageServiceDiabled) { + return undefined; + } var info = this.projectService.getScriptInfo(filename); if (info) { if ((!requireOpen) || info.isOpen) { @@ -49972,13 +51116,22 @@ var ts; } }; Project.prototype.isRoot = function (info) { + if (this.languageServiceDiabled) { + return undefined; + } return this.compilerService.host.roots.some(function (root) { return root === info; }); }; Project.prototype.removeReferencedFile = function (info) { + if (this.languageServiceDiabled) { + return; + } this.compilerService.host.removeReferencedFile(info); this.updateGraph(); }; Project.prototype.updateFileMap = function () { + if (this.languageServiceDiabled) { + return; + } this.filenameToSourceFile = {}; var sourceFiles = this.program.getSourceFiles(); for (var i = 0, len = sourceFiles.length; i < len; i++) { @@ -49987,10 +51140,16 @@ var ts; } }; Project.prototype.finishGraph = function () { + if (this.languageServiceDiabled) { + return; + } this.updateGraph(); this.compilerService.languageService.getNavigateToItems(".*"); }; Project.prototype.updateGraph = function () { + if (this.languageServiceDiabled) { + return; + } this.program = this.compilerService.languageService.getProgram(); this.updateFileMap(); }; @@ -49998,12 +51157,25 @@ var ts; return this.projectFilename; }; Project.prototype.addRoot = function (info) { + if (this.languageServiceDiabled) { + return; + } this.compilerService.host.addRoot(info); }; Project.prototype.removeRoot = function (info) { + if (this.languageServiceDiabled) { + return; + } this.compilerService.host.removeRoot(info); }; Project.prototype.filesToString = function () { + if (this.languageServiceDiabled) { + if (this.projectOptions) { + var strBuilder_1 = ""; + ts.forEach(this.projectOptions.files, function (file) { strBuilder_1 += file + "\n"; }); + return strBuilder_1; + } + } var strBuilder = ""; ts.forEachValue(this.filenameToSourceFile, function (sourceFile) { strBuilder += sourceFile.fileName + "\n"; }); return strBuilder; @@ -50012,7 +51184,9 @@ var ts; this.projectOptions = projectOptions; if (projectOptions.compilerOptions) { projectOptions.compilerOptions.allowNonTsExtensions = true; - this.compilerService.setCompilerOptions(projectOptions.compilerOptions); + if (!this.languageServiceDiabled) { + this.compilerService.setCompilerOptions(projectOptions.compilerOptions); + } } }; return Project; @@ -50222,6 +51396,8 @@ var ts; if (project.isConfiguredProject()) { project.projectFileWatcher.close(); project.directoryWatcher.close(); + ts.forEachValue(project.directoriesWatchedForWildcards, function (watcher) { watcher.close(); }); + delete project.directoriesWatchedForWildcards; this.configuredProjects = copyListRemovingItem(project, this.configuredProjects); } else { @@ -50237,8 +51413,8 @@ var ts; 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]; + for (var _b = 0, fileNames_3 = fileNames; _b < fileNames_3.length; _b++) { + var fileName = fileNames_3[_b]; var info = this.getScriptInfo(fileName); if (info.defaultProject == project) { info.defaultProject = undefined; @@ -50263,6 +51439,7 @@ var ts; else { this.findReferencingProjects(info); if (info.defaultProject) { + info.defaultProject.addOpenRef(); this.openFilesReferenced.push(info); } else { @@ -50615,12 +51792,30 @@ var ts; else { var projectOptions = { files: parsedCommandLine.fileNames, + wildcardDirectories: parsedCommandLine.wildcardDirectories, compilerOptions: parsedCommandLine.options }; return { succeeded: true, projectOptions: projectOptions }; } } }; + ProjectService.prototype.exceedTotalNonTsFileSizeLimit = function (fileNames) { + var totalNonTsFileSize = 0; + if (!this.host.getFileSize) { + return false; + } + for (var _i = 0, fileNames_4 = fileNames; _i < fileNames_4.length; _i++) { + var fileName = fileNames_4[_i]; + if (ts.hasTypeScriptFileExtension(fileName)) { + continue; + } + totalNonTsFileSize += this.host.getFileSize(fileName); + if (totalNonTsFileSize > server.maxProgramSizeForNonTsFiles) { + return true; + } + } + return false; + }; ProjectService.prototype.openConfigFile = function (configFilename, clientFileName) { var _this = this; var _a = this.configFileToProjectOptions(configFilename), succeeded = _a.succeeded, projectOptions = _a.projectOptions, errors = _a.errors; @@ -50628,23 +51823,39 @@ var ts; return { success: false, errors: errors }; } else { - var project_1 = this.createProject(configFilename, projectOptions); + if (!projectOptions.compilerOptions.disableSizeLimit && projectOptions.compilerOptions.allowJs) { + if (this.exceedTotalNonTsFileSizeLimit(projectOptions.files)) { + var project_1 = this.createProject(configFilename, projectOptions, true); + project_1.projectFileWatcher = this.host.watchFile(ts.toPath(configFilename, configFilename, ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)), function (_) { return _this.watchedProjectConfigFileChanged(project_1); }); + return { success: true, project: project_1 }; + } + } + var project_2 = 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); + project_2.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 }; + project_2.finishGraph(); + project_2.projectFileWatcher = this.host.watchFile(configFilename, function (_) { return _this.watchedProjectConfigFileChanged(project_2); }); + var configDirectoryPath_1 = ts.getDirectoryPath(configFilename); + this.log("Add recursive watcher for: " + configDirectoryPath_1); + project_2.directoryWatcher = this.host.watchDirectory(configDirectoryPath_1, function (path) { return _this.directoryWatchedForSourceFilesChanged(project_2, path); }, true); + project_2.directoriesWatchedForWildcards = ts.reduceProperties(projectOptions.wildcardDirectories, function (watchers, flag, directory) { + if (ts.comparePaths(configDirectoryPath_1, directory, ".", !_this.host.useCaseSensitiveFileNames) !== 0) { + var recursive = (flag & 1) !== 0; + _this.log("Add " + (recursive ? "recursive " : "") + "watcher for: " + directory); + watchers[directory] = _this.host.watchDirectory(directory, function (path) { return _this.directoryWatchedForSourceFilesChanged(project_2, path); }, recursive); + } + return watchers; + }, {}); + return { success: true, project: project_2, errors: errors_1 }; } }; ProjectService.prototype.updateConfiguredProject = function (project) { @@ -50659,19 +51870,45 @@ var ts; return errors; } else { - var oldFileNames_1 = project.compilerService.host.roots.map(function (info) { return info.fileName; }); + if (projectOptions.compilerOptions && !projectOptions.compilerOptions.disableSizeLimit && this.exceedTotalNonTsFileSizeLimit(projectOptions.files)) { + project.setProjectOptions(projectOptions); + if (project.languageServiceDiabled) { + return; + } + project.disableLanguageService(); + if (project.directoryWatcher) { + project.directoryWatcher.close(); + project.directoryWatcher = undefined; + } + return; + } + if (project.languageServiceDiabled) { + project.setProjectOptions(projectOptions); + project.enableLanguageService(); + project.directoryWatcher = this.host.watchDirectory(ts.getDirectoryPath(project.projectFilename), function (path) { return _this.directoryWatchedForSourceFilesChanged(project, path); }, true); + 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, false); + project.addRoot(info); + } + } + project.finishGraph(); + return; + } + var oldFileNames_1 = project.projectOptions ? project.projectOptions.files : 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]; + for (var _c = 0, fileNamesToRemove_1 = fileNamesToRemove; _c < fileNamesToRemove_1.length; _c++) { + var fileName = fileNamesToRemove_1[_c]; 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]; + for (var _d = 0, fileNamesToAdd_1 = fileNamesToAdd; _d < fileNamesToAdd_1.length; _d++) { + var fileName = fileNamesToAdd_1[_d]; var info = this.getScriptInfo(fileName); if (!info) { info = this.openFile(fileName, false); @@ -50698,8 +51935,8 @@ var ts; } } }; - ProjectService.prototype.createProject = function (projectFilename, projectOptions) { - var project = new Project(this, projectOptions); + ProjectService.prototype.createProject = function (projectFilename, projectOptions, languageServiceDisabled) { + var project = new Project(this, projectOptions, languageServiceDisabled); project.projectFilename = projectFilename; return project; }; @@ -50733,6 +51970,7 @@ var ts; }; CompilerService.getDefaultFormatCodeOptions = function (host) { return ts.clone({ + BaseIndentSize: 0, IndentSize: 4, TabSize: 4, NewLineCharacter: host.newLine || "\n", @@ -50746,6 +51984,7 @@ var ts; InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, + InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false, PlaceOpenBraceOnNewLineForFunctions: false, PlaceOpenBraceOnNewLineForControlBlocks: false }); @@ -51752,6 +52991,7 @@ var ts; function CoreServicesShimHostAdapter(shimHost) { var _this = this; this.shimHost = shimHost; + this.useCaseSensitiveFileNames = this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; if ("directoryExists" in this.shimHost) { this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; } @@ -51759,15 +52999,24 @@ var ts; this.realpath = function (path) { return _this.shimHost.realpath(path); }; } } - CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extension, exclude, depth) { - var encoded; + CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extensions, exclude, include, depth) { try { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude), depth); + var pattern = ts.getFileMatcherPatterns(rootDir, extensions, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); + return JSON.parse(this.shimHost.readDirectory(rootDir, JSON.stringify(extensions), JSON.stringify(pattern.basePaths), pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern, depth)); } catch (e) { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude)); + var results = []; + for (var _i = 0, extensions_2 = extensions; _i < extensions_2.length; _i++) { + var extension = extensions_2[_i]; + for (var _a = 0, _b = this.readDirectoryFallback(rootDir, extension, exclude); _a < _b.length; _a++) { + var file = _b[_a]; + if (!ts.contains(results, file)) { + results.push(file); + } + } + } + return results; } - return JSON.parse(encoded); }; CoreServicesShimHostAdapter.prototype.fileExists = function (fileName) { return this.shimHost.fileExists(fileName); @@ -51775,6 +53024,9 @@ var ts; CoreServicesShimHostAdapter.prototype.readFile = function (fileName) { return this.shimHost.readFile(fileName); }; + CoreServicesShimHostAdapter.prototype.readDirectoryFallback = function (rootDir, extension, exclude) { + return JSON.parse(this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude))); + }; return CoreServicesShimHostAdapter; }()); ts.CoreServicesShimHostAdapter = CoreServicesShimHostAdapter; @@ -51799,9 +53051,12 @@ var ts; return result; } function forwardJSONCall(logger, actionDescription, action, logPerformance) { + return forwardCall(logger, actionDescription, true, action, logPerformance); + } + function forwardCall(logger, actionDescription, returnJson, action, logPerformance) { try { var result = simpleForwardCall(logger, actionDescription, action, logPerformance); - return JSON.stringify({ result: result }); + return returnJson ? JSON.stringify({ result: result }) : result; } catch (err) { if (err instanceof ts.OperationCanceledException) { @@ -51945,9 +53200,9 @@ 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) { + LanguageServiceShimObject.prototype.isValidBraceCompletionAtPosition = function (fileName, position, openingBrace) { var _this = this; - return this.forwardJSONCall("isValidBraceCompletionAtPostion('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPostion(fileName, position, openingBrace); }); + return this.forwardJSONCall("isValidBraceCompletionAtPosition('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPosition(fileName, position, openingBrace); }); }; LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options) { var _this = this; @@ -52029,6 +53284,10 @@ var ts; var _this = this; return this.forwardJSONCall("getEmitOutput('" + fileName + "')", function () { return _this.languageService.getEmitOutput(fileName); }); }; + LanguageServiceShimObject.prototype.getEmitOutputObject = function (fileName) { + var _this = this; + return forwardCall(this.logger, "getEmitOutput('" + fileName + "')", false, function () { return _this.languageService.getEmitOutput(fileName); }, this.logPerformance); + }; return LanguageServiceShimObject; }(ShimBase)); function convertClassifications(classifications) { diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts index 533903795cf..c322ba1dd0c 100644 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -407,7 +407,7 @@ declare namespace ts { hasTrailingComma?: boolean; } interface ModifiersArray extends NodeArray { - flags: number; + flags: NodeFlags; } interface Modifier extends Node { } @@ -713,7 +713,6 @@ declare namespace ts { } interface PropertyAccessExpression extends MemberExpression, Declaration { expression: LeftHandSideExpression; - dotToken: Node; name: Identifier; } type IdentifierOrPropertyAccess = Identifier | PropertyAccessExpression; @@ -754,9 +753,10 @@ declare namespace ts { children: NodeArray; closingElement: JsxClosingElement; } + type JsxTagNameExpression = PrimaryExpression | PropertyAccessExpression; interface JsxOpeningElement extends Expression { _openingElementBrand?: any; - tagName: EntityName; + tagName: JsxTagNameExpression; attributes: NodeArray; } interface JsxSelfClosingElement extends PrimaryExpression, JsxOpeningElement { @@ -771,7 +771,7 @@ declare namespace ts { expression: Expression; } interface JsxClosingElement extends Node { - tagName: EntityName; + tagName: JsxTagNameExpression; } interface JsxExpression extends Expression { expression?: Expression; @@ -844,6 +844,7 @@ declare namespace ts { interface SwitchStatement extends Statement { expression: Expression; caseBlock: CaseBlock; + possiblyExhaustive?: boolean; } interface CaseBlock extends Node { clauses: NodeArray; @@ -919,7 +920,7 @@ declare namespace ts { type ModuleBody = ModuleBlock | ModuleDeclaration; interface ModuleDeclaration extends DeclarationStatement { name: Identifier | LiteralExpression; - body: ModuleBlock | ModuleDeclaration; + body?: ModuleBlock | ModuleDeclaration; } interface ModuleBlock extends Node, Statement { statements: NodeArray; @@ -1075,8 +1076,9 @@ declare namespace ts { Assignment = 16, TrueCondition = 32, FalseCondition = 64, - Referenced = 128, - Shared = 256, + SwitchClause = 128, + Referenced = 256, + Shared = 512, Label = 12, Condition = 96, } @@ -1098,6 +1100,12 @@ declare namespace ts { expression: Expression; antecedent: FlowNode; } + interface FlowSwitchClause extends FlowNode { + switchStatement: SwitchStatement; + clauseStart: number; + clauseEnd: number; + antecedent: FlowNode; + } interface AmdDependency { path: string; name: string; @@ -1132,7 +1140,13 @@ declare namespace ts { getCurrentDirectory(): string; } interface ParseConfigHost { - readDirectory(rootDir: string, extension: string, exclude: string[]): string[]; + useCaseSensitiveFileNames: boolean; + readDirectory(rootDir: string, extensions: string[], excludes: string[], includes: string[]): string[]; + /** + * Gets a value indicating whether the specified path exists and is a file. + * @param path The path to test. + */ + fileExists(path: string): boolean; } interface WriteFileCallback { (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void, sourceFiles?: SourceFile[]): void; @@ -1258,7 +1272,7 @@ declare namespace ts { 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; + buildDisplayForParametersAndDelimiters(thisParameter: Symbol, 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; } @@ -1375,6 +1389,7 @@ declare namespace ts { BlockScoped = 418, PropertyOrAccessor = 98308, Export = 7340032, + ClassMember = 106500, } interface Symbol { flags: SymbolFlags; @@ -1412,7 +1427,6 @@ declare namespace ts { ThisType = 33554432, ObjectLiteralPatternWithComputedProperties = 67108864, Never = 134217728, - Falsy = 126, StringLike = 258, NumberLike = 132, ObjectType = 80896, @@ -1471,7 +1485,6 @@ declare namespace ts { declaration: SignatureDeclaration; typeParameters: TypeParameter[]; parameters: Symbol[]; - thisType?: Type; } enum IndexKind { String = 0, @@ -1530,6 +1543,7 @@ declare namespace ts { charset?: string; declaration?: boolean; declarationDir?: string; + disableSizeLimit?: boolean; emitBOM?: boolean; emitDecoratorMetadata?: boolean; experimentalDecorators?: boolean; @@ -1541,6 +1555,7 @@ declare namespace ts { lib?: string[]; locale?: string; mapRoot?: string; + maxNodeModuleJsDepth?: number; module?: ModuleKind; moduleResolution?: ModuleResolutionKind; newLine?: NewLineKind; @@ -1552,6 +1567,8 @@ declare namespace ts { noImplicitAny?: boolean; noImplicitReturns?: boolean; noImplicitThis?: boolean; + noUnusedLocals?: boolean; + noUnusedParameters?: boolean; noImplicitUseStrict?: boolean; noLib?: boolean; noResolve?: boolean; @@ -1575,7 +1592,8 @@ declare namespace ts { target?: ScriptTarget; traceResolution?: boolean; types?: string[]; - typesSearchPaths?: string[]; + /** Paths used to used to compute primary types search locations */ + typeRoots?: string[]; [option: string]: CompilerOptionsValue | undefined; } interface TypingOptions { @@ -1638,6 +1656,15 @@ declare namespace ts { fileNames: string[]; raw?: any; errors: Diagnostic[]; + wildcardDirectories?: Map; + } + enum WatchDirectoryFlags { + None = 0, + Recursive = 1, + } + interface ExpandResult { + fileNames: string[]; + wildcardDirectories: Map; } interface ModuleResolutionHost { fileExists(fileName: string): boolean; @@ -1672,6 +1699,7 @@ declare namespace ts { getDefaultTypeDirectiveNames?(rootPath: string): string[]; writeFile: WriteFileCallback; getCurrentDirectory(): string; + getDirectories(path: string): string[]; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; getNewLine(): string; @@ -1707,6 +1735,7 @@ declare namespace ts { useCaseSensitiveFileNames: boolean; write(s: string): void; readFile(path: string, encoding?: string): string; + getFileSize?(path: string): number; writeFile(path: string, data: string, writeByteOrderMark?: boolean): void; watchFile?(path: string, callback: FileWatcherCallback): FileWatcher; watchDirectory?(path: string, callback: DirectoryWatcherCallback, recursive?: boolean): FileWatcher; @@ -1717,7 +1746,7 @@ declare namespace ts { getExecutingFilePath(): string; getCurrentDirectory(): string; getDirectories(path: string): string[]; - readDirectory(path: string, extension?: string, exclude?: string[]): string[]; + readDirectory(path: string, extensions?: string[], exclude?: string[], include?: string[]): string[]; getModifiedTime?(path: string): Date; createHash?(data: string): string; getMemoryUsage?(): number; @@ -1757,6 +1786,7 @@ declare namespace ts { scanJsxToken(): SyntaxKind; scanJSDocToken(): SyntaxKind; scan(): SyntaxKind; + getText(): string; setText(text: string, start?: number, length?: number): void; setOnError(onError: ErrorCallback): void; setScriptTarget(scriptTarget: ScriptTarget): void; @@ -1770,6 +1800,8 @@ declare namespace ts { function getPositionOfLineAndCharacter(sourceFile: SourceFile, line: number, character: number): number; function getLineAndCharacterOfPosition(sourceFile: SourceFile, position: number): LineAndCharacter; function isWhiteSpace(ch: number): boolean; + /** Does not include line breaks. For that, see isWhiteSpaceLike. */ + function isWhiteSpaceSingleLine(ch: number): boolean; function isLineBreak(ch: number): boolean; function couldStartTrivia(text: string, pos: number): boolean; function getLeadingCommentRanges(text: string, pos: number): CommentRange[]; @@ -1821,6 +1853,7 @@ declare namespace ts { function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean): SourceFile; } declare namespace ts { + /** The version of the TypeScript compiler release */ const version: string; function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean): string; function resolveTripleslashReference(moduleName: string, containingFile: string): string; @@ -1836,7 +1869,15 @@ declare namespace ts { 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 getDefaultTypeDirectiveNames(options: CompilerOptions, rootFiles: string[], host: CompilerHost): string[]; + /** + * Given a set of options and a set of root files, returns the set of type directive names + * that should be included for this program automatically. + * This list could either come from the config file, + * or from enumerating the types root + initial secondary types lookup location. + * More type directives might appear in the program later as a result of loading actual source files; + * this list is only the set of defaults that are implicitly included. + */ + function getAutomaticTypeDirectiveNames(options: CompilerOptions, rootFiles: string[], host: CompilerHost): string[]; function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost, oldProgram?: Program): Program; } declare namespace ts { @@ -1978,6 +2019,7 @@ declare namespace ts { resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[]; resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[]; directoryExists?(directoryName: string): boolean; + getDirectories?(directoryName: string): string[]; } interface LanguageService { cleanupSemanticCache(): void; @@ -2019,7 +2061,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; + isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean; getEmitOutput(fileName: string): EmitOutput; getProgram(): Program; dispose(): void; @@ -2068,6 +2110,7 @@ declare namespace ts { textSpan: TextSpan; fileName: string; isWriteAccess: boolean; + isDefinition: boolean; } interface DocumentHighlights { fileName: string; @@ -2096,6 +2139,7 @@ declare namespace ts { containerKind: string; } interface EditorOptions { + BaseIndentSize?: number; IndentSize: number; TabSize: number; NewLineCharacter: string; @@ -2116,9 +2160,10 @@ declare namespace ts { InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean; InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: boolean; InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean; + InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean; PlaceOpenBraceOnNewLineForFunctions: boolean; PlaceOpenBraceOnNewLineForControlBlocks: boolean; - [s: string]: boolean | number | string; + [s: string]: boolean | number | string | undefined; } interface DefinitionInfo { fileName: string; diff --git a/lib/typescript.js b/lib/typescript.js index 9e41f640305..22cbe79129c 100644 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -439,8 +439,9 @@ var ts; 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["SwitchClause"] = 128] = "SwitchClause"; + FlowFlags[FlowFlags["Referenced"] = 256] = "Referenced"; + FlowFlags[FlowFlags["Shared"] = 512] = "Shared"; FlowFlags[FlowFlags["Label"] = 12] = "Label"; FlowFlags[FlowFlags["Condition"] = 96] = "Condition"; })(ts.FlowFlags || (ts.FlowFlags = {})); @@ -591,6 +592,7 @@ var ts; SymbolFlags[SymbolFlags["BlockScoped"] = 418] = "BlockScoped"; SymbolFlags[SymbolFlags["PropertyOrAccessor"] = 98308] = "PropertyOrAccessor"; SymbolFlags[SymbolFlags["Export"] = 7340032] = "Export"; + SymbolFlags[SymbolFlags["ClassMember"] = 106500] = "ClassMember"; /* @internal */ // The set of things we consider semantically classifiable. Used to speed up the LS during // classification. @@ -654,7 +656,8 @@ var ts; TypeFlags[TypeFlags["Never"] = 134217728] = "Never"; /* @internal */ TypeFlags[TypeFlags["Nullable"] = 96] = "Nullable"; - TypeFlags[TypeFlags["Falsy"] = 126] = "Falsy"; + /* @internal */ + TypeFlags[TypeFlags["Falsy"] = 112] = "Falsy"; /* @internal */ TypeFlags[TypeFlags["Intrinsic"] = 150995071] = "Intrinsic"; /* @internal */ @@ -755,6 +758,11 @@ var ts; DiagnosticStyle[DiagnosticStyle["Pretty"] = 1] = "Pretty"; })(ts.DiagnosticStyle || (ts.DiagnosticStyle = {})); var DiagnosticStyle = ts.DiagnosticStyle; + (function (WatchDirectoryFlags) { + WatchDirectoryFlags[WatchDirectoryFlags["None"] = 0] = "None"; + WatchDirectoryFlags[WatchDirectoryFlags["Recursive"] = 1] = "Recursive"; + })(ts.WatchDirectoryFlags || (ts.WatchDirectoryFlags = {})); + var WatchDirectoryFlags = ts.WatchDirectoryFlags; /* @internal */ (function (CharacterCodes) { CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; @@ -994,6 +1002,15 @@ var ts; return -1; } ts.indexOf = indexOf; + function indexOfAnyCharCode(text, charCodes, start) { + for (var i = start || 0, len = text.length; i < len; i++) { + if (contains(charCodes, text.charCodeAt(i))) { + return i; + } + } + return -1; + } + ts.indexOfAnyCharCode = indexOfAnyCharCode; function countWhere(array, predicate) { var count = 0; if (array) { @@ -1021,12 +1038,24 @@ var ts; return result; } ts.filter = filter; + function filterMutate(array, f) { + var outIndex = 0; + for (var _i = 0, array_4 = array; _i < array_4.length; _i++) { + var item = array_4[_i]; + if (f(item)) { + array[outIndex] = item; + outIndex++; + } + } + array.length = outIndex; + } + ts.filterMutate = filterMutate; 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]; + for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { + var v = array_5[_i]; result.push(f(v)); } } @@ -1045,8 +1074,8 @@ var ts; var result; if (array) { result = []; - for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { - var item = array_5[_i]; + for (var _i = 0, array_6 = array; _i < array_6.length; _i++) { + var item = array_6[_i]; if (!contains(result, item, areEqual)) { result.push(item); } @@ -1057,8 +1086,8 @@ var ts; 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]; + for (var _i = 0, array_7 = array; _i < array_7.length; _i++) { + var v = array_7[_i]; result += v[prop]; } return result; @@ -1383,6 +1412,30 @@ var ts; return a < b ? -1 /* LessThan */ : 1 /* GreaterThan */; } ts.compareValues = compareValues; + function compareStrings(a, b, ignoreCase) { + if (a === b) + return 0 /* EqualTo */; + if (a === undefined) + return -1 /* LessThan */; + if (b === undefined) + return 1 /* GreaterThan */; + if (ignoreCase) { + if (String.prototype.localeCompare) { + var result = a.localeCompare(b, /*locales*/ undefined, { usage: "sort", sensitivity: "accent" }); + return result < 0 ? -1 /* LessThan */ : result > 0 ? 1 /* GreaterThan */ : 0 /* EqualTo */; + } + a = a.toUpperCase(); + b = b.toUpperCase(); + if (a === b) + return 0 /* EqualTo */; + } + return a < b ? -1 /* LessThan */ : 1 /* GreaterThan */; + } + ts.compareStrings = compareStrings; + function compareStringsCaseInsensitive(a, b) { + return compareStrings(a, b, /*ignoreCase*/ true); + } + ts.compareStringsCaseInsensitive = compareStringsCaseInsensitive; function getDiagnosticFileName(diagnostic) { return diagnostic.file ? diagnostic.file.fileName : undefined; } @@ -1637,12 +1690,243 @@ var ts; return path1 + ts.directorySeparator + path2; } ts.combinePaths = combinePaths; + /** + * Removes a trailing directory separator from a path. + * @param path The path. + */ + function removeTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) === ts.directorySeparator) { + return path.substr(0, path.length - 1); + } + return path; + } + ts.removeTrailingDirectorySeparator = removeTrailingDirectorySeparator; + /** + * Adds a trailing directory separator to a path, if it does not already have one. + * @param path The path. + */ + function ensureTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) !== ts.directorySeparator) { + return path + ts.directorySeparator; + } + return path; + } + ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator; + function comparePaths(a, b, currentDirectory, ignoreCase) { + if (a === b) + return 0 /* EqualTo */; + if (a === undefined) + return -1 /* LessThan */; + if (b === undefined) + return 1 /* GreaterThan */; + a = removeTrailingDirectorySeparator(a); + b = removeTrailingDirectorySeparator(b); + var aComponents = getNormalizedPathComponents(a, currentDirectory); + var bComponents = getNormalizedPathComponents(b, currentDirectory); + var sharedLength = Math.min(aComponents.length, bComponents.length); + for (var i = 0; i < sharedLength; i++) { + var result = compareStrings(aComponents[i], bComponents[i], ignoreCase); + if (result !== 0 /* EqualTo */) { + return result; + } + } + return compareValues(aComponents.length, bComponents.length); + } + ts.comparePaths = comparePaths; + function containsPath(parent, child, currentDirectory, ignoreCase) { + if (parent === undefined || child === undefined) + return false; + if (parent === child) + return true; + parent = removeTrailingDirectorySeparator(parent); + child = removeTrailingDirectorySeparator(child); + if (parent === child) + return true; + var parentComponents = getNormalizedPathComponents(parent, currentDirectory); + var childComponents = getNormalizedPathComponents(child, currentDirectory); + if (childComponents.length < parentComponents.length) { + return false; + } + for (var i = 0; i < parentComponents.length; i++) { + var result = compareStrings(parentComponents[i], childComponents[i], ignoreCase); + if (result !== 0 /* EqualTo */) { + return false; + } + } + return true; + } + ts.containsPath = containsPath; 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 fileExtensionIsAny(path, extensions) { + for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) { + var extension = extensions_1[_i]; + if (fileExtensionIs(path, extension)) { + return true; + } + } + return false; + } + ts.fileExtensionIsAny = fileExtensionIsAny; + // Reserved characters, forces escaping of any non-word (or digit), non-whitespace character. + // It may be inefficient (we could just match (/[-[\]{}()*+?.,\\^$|#\s]/g), but this is future + // proof. + var reservedCharacterPattern = /[^\w\s\/]/g; + var wildcardCharCodes = [42 /* asterisk */, 63 /* question */]; + function getRegularExpressionForWildcard(specs, basePath, usage) { + if (specs === undefined || specs.length === 0) { + return undefined; + } + var pattern = ""; + var hasWrittenSubpattern = false; + spec: for (var _i = 0, specs_1 = specs; _i < specs_1.length; _i++) { + var spec = specs_1[_i]; + if (!spec) { + continue; + } + var subpattern = ""; + var hasRecursiveDirectoryWildcard = false; + var hasWrittenComponent = false; + var components = getNormalizedPathComponents(spec, basePath); + if (usage !== "exclude" && components[components.length - 1] === "**") { + continue spec; + } + // getNormalizedPathComponents includes the separator for the root component. + // We need to remove to create our regex correctly. + components[0] = removeTrailingDirectorySeparator(components[0]); + var optionalCount = 0; + for (var _a = 0, components_1 = components; _a < components_1.length; _a++) { + var component = components_1[_a]; + if (component === "**") { + if (hasRecursiveDirectoryWildcard) { + continue spec; + } + subpattern += "(/.+?)?"; + hasRecursiveDirectoryWildcard = true; + hasWrittenComponent = true; + } + else { + if (usage === "directories") { + subpattern += "("; + optionalCount++; + } + if (hasWrittenComponent) { + subpattern += ts.directorySeparator; + } + subpattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter); + hasWrittenComponent = true; + } + } + while (optionalCount > 0) { + subpattern += ")?"; + optionalCount--; + } + if (hasWrittenSubpattern) { + pattern += "|"; + } + pattern += "(" + subpattern + ")"; + hasWrittenSubpattern = true; + } + if (!pattern) { + return undefined; + } + return "^(" + pattern + (usage === "exclude" ? ")($|/)" : ")$"); + } + ts.getRegularExpressionForWildcard = getRegularExpressionForWildcard; + function replaceWildcardCharacter(match) { + return match === "*" ? "[^/]*" : match === "?" ? "[^/]" : "\\" + match; + } + function getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var absolutePath = combinePaths(currentDirectory, path); + return { + includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"), + includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"), + excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"), + basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames) + }; + } + ts.getFileMatcherPatterns = getFileMatcherPatterns; + function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, getFileSystemEntries) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var patterns = getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory); + var regexFlag = useCaseSensitiveFileNames ? "" : "i"; + var includeFileRegex = patterns.includeFilePattern && new RegExp(patterns.includeFilePattern, regexFlag); + var includeDirectoryRegex = patterns.includeDirectoryPattern && new RegExp(patterns.includeDirectoryPattern, regexFlag); + var excludeRegex = patterns.excludePattern && new RegExp(patterns.excludePattern, regexFlag); + var result = []; + for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) { + var basePath = _a[_i]; + visitDirectory(basePath, combinePaths(currentDirectory, basePath)); + } + return result; + function visitDirectory(path, absolutePath) { + var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories; + for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { + var current = files_1[_i]; + var name_1 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!extensions || fileExtensionIsAny(name_1, extensions)) && + (!includeFileRegex || includeFileRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + result.push(name_1); + } + } + for (var _b = 0, directories_1 = directories; _b < directories_1.length; _b++) { + var current = directories_1[_b]; + var name_2 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + visitDirectory(name_2, absoluteName); + } + } + } + } + ts.matchFiles = matchFiles; + /** + * Computes the unique non-wildcard base paths amongst the provided include patterns. + */ + function getBasePaths(path, includes, useCaseSensitiveFileNames) { + // Storage for our results in the form of literal paths (e.g. the paths as written by the user). + var basePaths = [path]; + if (includes) { + // Storage for literal base paths amongst the include patterns. + var includeBasePaths = []; + for (var _i = 0, includes_1 = includes; _i < includes_1.length; _i++) { + var include = includes_1[_i]; + // We also need to check the relative paths by converting them to absolute and normalizing + // in case they escape the base path (e.g "..\somedirectory") + var absolute = isRootedDiskPath(include) ? include : normalizePath(combinePaths(path, include)); + var wildcardOffset = indexOfAnyCharCode(absolute, wildcardCharCodes); + var includeBasePath = wildcardOffset < 0 + ? removeTrailingDirectorySeparator(getDirectoryPath(absolute)) + : absolute.substring(0, absolute.lastIndexOf(ts.directorySeparator, wildcardOffset)); + // Append the literal and canonical candidate base paths. + includeBasePaths.push(includeBasePath); + } + // Sort the offsets array using either the literal or canonical path representations. + includeBasePaths.sort(useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive); + // Iterate over each include base path and include unique base paths that are not a + // subpath of an existing base path + include: for (var i = 0; i < includeBasePaths.length; i++) { + var includeBasePath = includeBasePaths[i]; + for (var j = 0; j < basePaths.length; j++) { + if (containsPath(basePaths[j], includeBasePath, path, !useCaseSensitiveFileNames)) { + continue include; + } + } + basePaths.push(includeBasePath); + } + } + return basePaths; + } function ensureScriptKind(fileName, scriptKind) { // Using scriptKind as a condition handles both: // - 'scriptKind' is unspecified and thus it is `undefined` @@ -1692,6 +1976,57 @@ var ts; return false; } ts.isSupportedSourceFileName = isSupportedSourceFileName; + /** + * Extension boundaries by priority. Lower numbers indicate higher priorities, and are + * aligned to the offset of the highest priority extension in the + * allSupportedExtensions array. + */ + (function (ExtensionPriority) { + ExtensionPriority[ExtensionPriority["TypeScriptFiles"] = 0] = "TypeScriptFiles"; + ExtensionPriority[ExtensionPriority["DeclarationAndJavaScriptFiles"] = 2] = "DeclarationAndJavaScriptFiles"; + ExtensionPriority[ExtensionPriority["Limit"] = 5] = "Limit"; + ExtensionPriority[ExtensionPriority["Highest"] = 0] = "Highest"; + ExtensionPriority[ExtensionPriority["Lowest"] = 2] = "Lowest"; + })(ts.ExtensionPriority || (ts.ExtensionPriority = {})); + var ExtensionPriority = ts.ExtensionPriority; + function getExtensionPriority(path, supportedExtensions) { + for (var i = supportedExtensions.length - 1; i >= 0; i--) { + if (fileExtensionIs(path, supportedExtensions[i])) { + return adjustExtensionPriority(i); + } + } + // If its not in the list of supported extensions, this is likely a + // TypeScript file with a non-ts extension + return 0 /* Highest */; + } + ts.getExtensionPriority = getExtensionPriority; + /** + * Adjusts an extension priority to be the highest priority within the same range. + */ + function adjustExtensionPriority(extensionPriority) { + if (extensionPriority < 2 /* DeclarationAndJavaScriptFiles */) { + return 0 /* TypeScriptFiles */; + } + else if (extensionPriority < 5 /* Limit */) { + return 2 /* DeclarationAndJavaScriptFiles */; + } + else { + return 5 /* Limit */; + } + } + ts.adjustExtensionPriority = adjustExtensionPriority; + /** + * Gets the next lowest extension priority for a given priority. + */ + function getNextLowestExtensionPriority(extensionPriority) { + if (extensionPriority < 2 /* DeclarationAndJavaScriptFiles */) { + return 2 /* DeclarationAndJavaScriptFiles */; + } + else { + return 5 /* Limit */; + } + } + ts.getNextLowestExtensionPriority = getNextLowestExtensionPriority; var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"]; function removeFileExtension(path) { for (var _i = 0, extensionsToRemove_1 = extensionsToRemove; _i < extensionsToRemove_1.length; _i++) { @@ -1712,6 +2047,10 @@ var ts; return ext === ".jsx" || ext === ".tsx"; } ts.isJsxOrTsxExtension = isJsxOrTsxExtension; + function changeExtension(path, newExtension) { + return (removeFileExtension(path) + newExtension); + } + ts.changeExtension = changeExtension; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -1790,6 +2129,7 @@ var ts; ts.sys = (function () { function getWScriptSystem() { var fso = new ActiveXObject("Scripting.FileSystemObject"); + var shell = new ActiveXObject("WScript.Shell"); var fileStream = new ActiveXObject("ADODB.Stream"); fileStream.Type = 2 /*text*/; var binaryStream = new ActiveXObject("ADODB.Stream"); @@ -1851,9 +2191,6 @@ var ts; fileStream.Close(); } } - function getCanonicalPath(path) { - return path.toLowerCase(); - } function getNames(collection) { var result = []; for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) { @@ -1865,30 +2202,19 @@ var ts; var folder = fso.GetFolder(path); return getNames(folder.subfolders); } - 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) { + function getAccessibleFileSystemEntries(path) { + try { 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); - } - } + var directories = getNames(folder.subfolders); + return { files: files, directories: directories }; } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, /*useCaseSensitiveFileNames*/ false, shell.CurrentDirectory, getAccessibleFileSystemEntries); } return { args: args, @@ -1917,7 +2243,7 @@ var ts; return WScript.ScriptFullName; }, getCurrentDirectory: function () { - return new ActiveXObject("WScript.Shell").CurrentDirectory; + return shell.CurrentDirectory; }, getDirectories: getDirectories, readDirectory: readDirectory, @@ -2056,8 +2382,41 @@ var ts; } } } - function getCanonicalPath(path) { - return useCaseSensitiveFileNames ? path : path.toLowerCase(); + function getAccessibleFileSystemEntries(path) { + try { + var entries = _fs.readdirSync(path || ".").sort(); + var files = []; + var directories = []; + for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) { + var entry = entries_1[_i]; + // This is necessary because on some file system node fails to exclude + // "." and "..". See https://github.com/nodejs/node/issues/4002 + if (entry === "." || entry === "..") { + continue; + } + var name_3 = ts.combinePaths(path, entry); + var stat = void 0; + try { + stat = _fs.statSync(name_3); + } + catch (e) { + continue; + } + if (stat.isFile()) { + files.push(entry); + } + else if (stat.isDirectory()) { + directories.push(entry); + } + } + return { files: files, directories: directories }; + } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), getAccessibleFileSystemEntries); } var FileSystemEntryKind; (function (FileSystemEntryKind) { @@ -2085,40 +2444,6 @@ var ts; function getDirectories(path) { return ts.filter(_fs.readdirSync(path), function (p) { return fileSystemEntryExists(ts.combinePaths(path, p), 1 /* Directory */); }); } - 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]; - // 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; - } - 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, @@ -2206,6 +2531,16 @@ var ts; } return process.memoryUsage().heapUsed; }, + getFileSize: function (path) { + try { + var stat = _fs.statSync(path); + if (stat.isFile()) { + return stat.size; + } + } + catch (e) { } + return 0; + }, exit: function (exitCode) { process.exit(exitCode); }, @@ -2239,7 +2574,10 @@ var ts; getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, getDirectories: ChakraHost.getDirectories, - readDirectory: ChakraHost.readDirectory, + readDirectory: function (path, extensions, excludes, includes) { + var pattern = ts.getFileMatcherPatterns(path, extensions, excludes, includes, !!ChakraHost.useCaseSensitiveFileNames, ChakraHost.currentDirectory); + return ChakraHost.readDirectory(path, extensions, pattern.basePaths, pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern); + }, exit: ChakraHost.quit, realpath: realpath }; @@ -2409,7 +2747,7 @@ var ts; 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." }, + A_parameter_property_may_not_be_declared_using_a_binding_pattern: { code: 1187, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187", message: "A parameter property may not be declared using 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." }, @@ -2425,7 +2763,6 @@ var ts; 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_2015_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_2015_modules_Consider_using_import_Asteri_1202", message: "Import assignment cannot be used when targeting ECMAScript 2015 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_2015_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_2015_modules_Consider_using_export_defaul_1203", message: "Export assignment cannot be used when targeting ECMAScript 2015 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." }, @@ -2480,6 +2817,7 @@ var ts; 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." }, + A_parameter_property_cannot_be_declared_using_a_rest_parameter: { code: 1317, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317", message: "A parameter property cannot be declared using a rest parameter." }, 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." }, @@ -2750,6 +3088,8 @@ var ts; 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." }, Identifier_0_must_be_imported_from_a_module: { code: 2686, category: ts.DiagnosticCategory.Error, key: "Identifier_0_must_be_imported_from_a_module_2686", message: "Identifier '{0}' must be imported from a module" }, All_declarations_of_0_must_have_identical_modifiers: { code: 2687, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_0_must_have_identical_modifiers_2687", message: "All declarations of '{0}' must have identical modifiers." }, + Cannot_find_type_definition_file_for_0: { code: 2688, category: ts.DiagnosticCategory.Error, key: "Cannot_find_type_definition_file_for_0_2688", message: "Cannot find type definition file for '{0}'." }, + Cannot_extend_an_interface_0_Did_you_mean_implements: { code: 2689, category: ts.DiagnosticCategory.Error, key: "Cannot_extend_an_interface_0_Did_you_mean_implements_2689", message: "Cannot extend an interface '{0}'. Did you mean 'implements'?" }, 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}'." }, @@ -2823,6 +3163,8 @@ var ts; 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." }, + File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5010, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", message: "File specification cannot end in a recursive directory wildcard ('**'): '{0}'." }, + File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0: { code: 5011, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0_5011", message: "File specification cannot contain multiple recursive directory wildcards ('**'): '{0}'." }, 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}." }, @@ -2845,6 +3187,7 @@ var ts; 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" }, Substitutions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substitutions_for_pattern_0_should_be_an_array_5063", message: "Substitutions 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}'." }, + File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5065, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065", message: "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'." }, 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." }, @@ -2960,6 +3303,11 @@ var ts; 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}'" }, Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system: { code: 6131, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131", message: "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'." }, File_name_0_has_a_1_extension_stripping_it: { code: 6132, category: ts.DiagnosticCategory.Message, key: "File_name_0_has_a_1_extension_stripping_it_6132", message: "File name '{0}' has a '{1}' extension - stripping it" }, + _0_is_declared_but_never_used: { code: 6133, category: ts.DiagnosticCategory.Error, key: "_0_is_declared_but_never_used_6133", message: "'{0}' is declared but never used." }, + Report_Errors_on_Unused_Locals: { code: 6134, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Locals_6134", message: "Report Errors on Unused Locals." }, + Report_Errors_on_Unused_Parameters: { code: 6135, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Parameters_6135", message: "Report Errors on Unused Parameters." }, + The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files: { code: 6136, category: ts.DiagnosticCategory.Message, key: "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136", message: "The maximum dependency depth to search under node_modules and load JavaScript files" }, + No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0: { code: 6137, category: ts.DiagnosticCategory.Message, key: "No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0_6137", message: "No types specified in 'package.json' but 'allowJs' is set, so returning 'main' value of '{0}'" }, 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." }, @@ -2996,7 +3344,6 @@ var ts; 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." }, @@ -3322,6 +3669,11 @@ var ts; ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; var hasOwnProperty = Object.prototype.hasOwnProperty; function isWhiteSpace(ch) { + return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); + } + ts.isWhiteSpace = isWhiteSpace; + /** Does not include line breaks. For that, see isWhiteSpaceLike. */ + function isWhiteSpaceSingleLine(ch) { // Note: nextLine is in the Zs space, and should be considered to be a whitespace. // It is explicitly not a line-break as it isn't in the exact set specified by EcmaScript. return ch === 32 /* space */ || @@ -3337,7 +3689,7 @@ var ts; ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; } - ts.isWhiteSpace = isWhiteSpace; + ts.isWhiteSpaceSingleLine = isWhiteSpaceSingleLine; function isLineBreak(ch) { // ES5 7.3: // The ECMAScript line terminator characters are listed in Table 3. @@ -3457,7 +3809,7 @@ var ts; } break; default: - if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch))) { pos++; continue; } @@ -3595,7 +3947,7 @@ var ts; } break; default: - if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch))) { if (result && result.length && isLineBreak(ch)) { ts.lastOrUndefined(result).hasTrailingNewLine = true; } @@ -3685,6 +4037,7 @@ var ts; scanJsxToken: scanJsxToken, scanJSDocToken: scanJSDocToken, scan: scan, + getText: getText, setText: setText, setScriptTarget: setScriptTarget, setLanguageVariant: setLanguageVariant, @@ -4085,7 +4438,7 @@ var ts; continue; } else { - while (pos < end && isWhiteSpace(text.charCodeAt(pos))) { + while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } return token = 5 /* WhitespaceTrivia */; @@ -4390,7 +4743,7 @@ var ts; } return token = getIdentifierToken(); } - else if (isWhiteSpace(ch)) { + else if (isWhiteSpaceSingleLine(ch)) { pos++; continue; } @@ -4543,7 +4896,7 @@ var ts; var ch = text.charCodeAt(pos); while (pos < end) { ch = text.charCodeAt(pos); - if (isWhiteSpace(ch)) { + if (isWhiteSpaceSingleLine(ch)) { pos++; } else { @@ -4632,6 +4985,9 @@ var ts; function tryScan(callback) { return speculationHelper(callback, /*isLookahead*/ false); } + function getText() { + return text; + } function setText(newText, start, length) { text = newText || ""; end = length === undefined ? text.length : start + length; @@ -4985,6 +5341,11 @@ var ts; (node.name.kind === 9 /* StringLiteral */ || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; + function isShorthandAmbientModule(node) { + // The only kind of module that can be missing a body is a shorthand ambient module. + return node.kind === 225 /* ModuleDeclaration */ && (!node.body); + } + ts.isShorthandAmbientModule = isShorthandAmbientModule; function isBlockScopedContainerTopLevel(node) { return node.kind === 256 /* SourceFile */ || node.kind === 225 /* ModuleDeclaration */ || @@ -5417,6 +5778,7 @@ var ts; case 157 /* ConstructorType */: return true; } + return false; } ts.isFunctionLikeKind = isFunctionLikeKind; function introducesArgumentsExoticObject(node) { @@ -5839,6 +6201,18 @@ var ts; return charCode === 39 /* singleQuote */ || charCode === 34 /* doubleQuote */; } ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; + /** + * Returns true if the node is a variable declaration whose initializer is a function expression. + * This function does not test if the node is in a JavaScript file or not. + */ + function isDeclarationOfFunctionExpression(s) { + if (s.valueDeclaration && s.valueDeclaration.kind === 218 /* VariableDeclaration */) { + var declaration = s.valueDeclaration; + return declaration.initializer && declaration.initializer.kind === 179 /* FunctionExpression */; + } + return false; + } + ts.isDeclarationOfFunctionExpression = isDeclarationOfFunctionExpression; /// Given a BinaryExpression, returns SpecialPropertyAssignmentKind for the various kinds of property /// assignments we treat as special in the binder function getSpecialPropertyAssignmentKind(expression) { @@ -6763,7 +7137,8 @@ var ts; 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)) { + // Don't emit if source file is a declaration file, or was located under node_modules + if (!isDeclarationFile(sourceFile) && !host.isSourceFileFromExternalLibrary(sourceFile)) { onSingleFileEmit(host, sourceFile); } } @@ -6793,11 +7168,12 @@ var ts; action(emitFileNames, [sourceFile], /*isBundledEmit*/ false); } function onBundledEmit(host) { - // Can emit only sources that are not declaration file and are either non module code or module with --module or --target es6 specified - var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { - return !isDeclarationFile(sourceFile) // Not a declaration file - && (!ts.isExternalModule(sourceFile) || !!getEmitModuleKind(options)); - }); // and not a module, unless module emit enabled + // Can emit only sources that are not declaration file and are either non module code or module with + // --module or --target es6 specified. Files included by searching under node_modules are also not emitted. + var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { return !isDeclarationFile(sourceFile) && + !host.isSourceFileFromExternalLibrary(sourceFile) && + (!ts.isExternalModule(sourceFile) || + !!getEmitModuleKind(options)); }); if (bundledSources.length) { var jsFilePath = options.outFile || options.out; var emitFileNames = { @@ -6815,7 +7191,9 @@ var ts; ts.forEachExpectedEmitFile = forEachExpectedEmitFile; function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); - sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); + var commonSourceDirectory = host.getCommonSourceDirectory(); + var isSourceFileInCommonSourceDirectory = host.getCanonicalFileName(sourceFilePath).indexOf(host.getCanonicalFileName(commonSourceDirectory)) === 0; + sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath; return ts.combinePaths(newDirPath, sourceFilePath); } ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir; @@ -7062,7 +7440,7 @@ var ts; } function calculateIndent(text, pos, end) { var currentLineIndent = 0; - for (; pos < end && ts.isWhiteSpace(text.charCodeAt(pos)); pos++) { + for (; pos < end && ts.isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) { if (text.charCodeAt(pos) === 9 /* tab */) { // Tabs = TabSize = indent size and go to next tabStop currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); @@ -7175,6 +7553,10 @@ var ts; return ts.forEach(ts.supportedJavascriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); } ts.hasJavaScriptFileExtension = hasJavaScriptFileExtension; + function hasTypeScriptFileExtension(fileName) { + return ts.forEach(ts.supportedTypeScriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); + } + ts.hasTypeScriptFileExtension = hasTypeScriptFileExtension; /** * Replace each instance of non-ascii characters by one, two, three, or four escape sequences * representing the UTF-8 encoding of the character, and return the expanded char code list. @@ -7679,7 +8061,6 @@ var ts; return visitNodes(cbNodes, node.properties); case 172 /* PropertyAccessExpression */: return visitNode(cbNode, node.expression) || - visitNode(cbNode, node.dotToken) || visitNode(cbNode, node.name); case 173 /* ElementAccessExpression */: return visitNode(cbNode, node.expression) || @@ -8582,12 +8963,12 @@ var ts; if (token === 82 /* ExportKeyword */) { nextToken(); if (token === 77 /* DefaultKeyword */) { - return lookAhead(nextTokenIsClassOrFunction); + return lookAhead(nextTokenIsClassOrFunctionOrAsync); } return token !== 37 /* AsteriskToken */ && token !== 116 /* AsKeyword */ && token !== 15 /* OpenBraceToken */ && canFollowModifier(); } if (token === 77 /* DefaultKeyword */) { - return nextTokenIsClassOrFunction(); + return nextTokenIsClassOrFunctionOrAsync(); } if (token === 113 /* StaticKeyword */) { nextToken(); @@ -8602,11 +8983,13 @@ var ts; return token === 19 /* OpenBracketToken */ || token === 15 /* OpenBraceToken */ || token === 37 /* AsteriskToken */ + || token === 22 /* DotDotDotToken */ || isLiteralPropertyName(); } - function nextTokenIsClassOrFunction() { + function nextTokenIsClassOrFunctionOrAsync() { nextToken(); - return token === 73 /* ClassKeyword */ || token === 87 /* FunctionKeyword */; + return token === 73 /* ClassKeyword */ || token === 87 /* FunctionKeyword */ || + (token === 118 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine)); } // True if positioned at the start of a list element function isListElement(parsingContext, inErrorRecovery) { @@ -10703,7 +11086,7 @@ var ts; // If it wasn't then just try to parse out a '.' and report an error. 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); + parseExpectedToken(21 /* DotToken */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); return finishNode(node); } @@ -10714,8 +11097,14 @@ var ts; if (lhs.kind === 69 /* Identifier */) { return lhs.text === rhs.text; } - return lhs.right.text === rhs.right.text && - tagNamesAreEquivalent(lhs.left, rhs.left); + if (lhs.kind === 97 /* ThisKeyword */) { + return true; + } + // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only + // take forms of JsxTagNameExpression which includes an identifier, "this" expression, or another propertyAccessExpression + // it is safe to case the expression property as such. See parseJsxElementName for how we parse tag name in Jsx element + return lhs.name.text === rhs.name.text && + tagNamesAreEquivalent(lhs.expression, rhs.expression); } function parseJsxElementOrSelfClosingElement(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); @@ -10826,15 +11215,20 @@ var ts; } function parseJsxElementName() { scanJsxIdentifier(); - var elementName = parseIdentifierName(); + // JsxElement can have name in the form of + // propertyAccessExpression + // primaryExpression in the form of an identifier and "this" keyword + // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword + // We only want to consider "this" as a primaryExpression + var expression = token === 97 /* ThisKeyword */ ? + parseTokenNode() : parseIdentifierName(); while (parseOptional(21 /* DotToken */)) { - scanJsxIdentifier(); - var node = createNode(139 /* QualifiedName */, elementName.pos); // !!! - node.left = elementName; - node.right = parseIdentifierName(); - elementName = finishNode(node); + var propertyAccess = createNode(172 /* PropertyAccessExpression */, expression.pos); + propertyAccess.expression = expression; + propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); + expression = finishNode(propertyAccess); } - return elementName; + return expression; } function parseJsxExpression(inExpressionContext) { var node = createNode(248 /* JsxExpression */); @@ -10905,7 +11299,6 @@ var ts; if (dotToken) { var propertyAccess = createNode(172 /* PropertyAccessExpression */, expression.pos); propertyAccess.expression = expression; - propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); expression = finishNode(propertyAccess); continue; @@ -11696,7 +12089,7 @@ var ts; case 56 /* EqualsToken */: return parseExportAssignment(fullStart, decorators, modifiers); case 116 /* AsKeyword */: - return parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers); + return parseNamespaceExportDeclaration(fullStart, decorators, modifiers); default: return parseExportDeclaration(fullStart, decorators, modifiers); } @@ -12250,7 +12643,12 @@ var ts; else { node.name = parseLiteralNode(/*internName*/ true); } - node.body = parseModuleBlock(); + if (token === 15 /* OpenBraceToken */) { + node.body = parseModuleBlock(); + } + else { + parseSemicolon(); + } return finishNode(node); } function parseModuleDeclaration(fullStart, decorators, modifiers) { @@ -12280,7 +12678,7 @@ var ts; function nextTokenIsSlash() { return nextToken() === 39 /* SlashToken */; } - function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { + function parseNamespaceExportDeclaration(fullStart, decorators, modifiers) { var exportDeclaration = createNode(228 /* NamespaceExportDeclaration */, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; @@ -13341,8 +13739,8 @@ var ts; 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]; + for (var _i = 0, array_8 = array; _i < array_8.length; _i++) { + var node = array_8[_i]; visitNode(node); } } @@ -13479,8 +13877,8 @@ var ts; array._children = undefined; // Adjust the pos or end (or both) of the intersecting array accordingly. adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); - for (var _i = 0, array_8 = array; _i < array_8.length; _i++) { - var node = array_8[_i]; + for (var _i = 0, array_9 = array; _i < array_9.length; _i++) { + var node = array_9[_i]; visitNode(node); } return; @@ -13752,7 +14150,8 @@ var ts; return state_1; } else if (node.kind === 225 /* ModuleDeclaration */) { - return getModuleInstanceState(node.body); + var body = node.body; + return body ? getModuleInstanceState(body) : 1 /* Instantiated */; } else { return 1 /* Instantiated */; @@ -14206,6 +14605,9 @@ var ts; case 227 /* CaseBlock */: bindCaseBlock(node); break; + case 249 /* CaseClause */: + bindCaseClause(node); + break; case 214 /* LabeledStatement */: bindLabeledStatement(node); break; @@ -14232,11 +14634,6 @@ var ts; break; } } - function isNarrowableReference(expr) { - return expr.kind === 69 /* Identifier */ || - expr.kind === 97 /* ThisKeyword */ || - expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); - } function isNarrowingExpression(expr) { switch (expr.kind) { case 69 /* Identifier */: @@ -14244,7 +14641,7 @@ var ts; case 172 /* PropertyAccessExpression */: return isNarrowableReference(expr); case 174 /* CallExpression */: - return true; + return hasNarrowableArgument(expr); case 178 /* ParenthesizedExpression */: return isNarrowingExpression(expr.expression); case 187 /* BinaryExpression */: @@ -14254,6 +14651,35 @@ var ts; } return false; } + function isNarrowableReference(expr) { + return expr.kind === 69 /* Identifier */ || + expr.kind === 97 /* ThisKeyword */ || + expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); + } + function hasNarrowableArgument(expr) { + if (expr.arguments) { + for (var _i = 0, _a = expr.arguments; _i < _a.length; _i++) { + var argument = _a[_i]; + if (isNarrowableReference(argument)) { + return true; + } + } + } + if (expr.expression.kind === 172 /* PropertyAccessExpression */ && + isNarrowableReference(expr.expression.expression)) { + return true; + } + return false; + } + function isNarrowingNullCheckOperands(expr1, expr2) { + return (expr1.kind === 93 /* NullKeyword */ || expr1.kind === 69 /* Identifier */ && expr1.text === "undefined") && isNarrowableOperand(expr2); + } + function isNarrowingTypeofOperands(expr1, expr2) { + return expr1.kind === 182 /* TypeOfExpression */ && isNarrowableOperand(expr1.expression) && expr2.kind === 9 /* StringLiteral */; + } + function isNarrowingDiscriminant(expr) { + return expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); + } function isNarrowingBinaryExpression(expr) { switch (expr.operatorToken.kind) { case 56 /* EqualsToken */: @@ -14262,20 +14688,34 @@ var ts; 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; + return isNarrowingNullCheckOperands(expr.right, expr.left) || isNarrowingNullCheckOperands(expr.left, expr.right) || + isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right) || + isNarrowingDiscriminant(expr.left) || isNarrowingDiscriminant(expr.right); case 91 /* InstanceOfKeyword */: - return isNarrowingExpression(expr.left); + return isNarrowableOperand(expr.left); case 24 /* CommaToken */: return isNarrowingExpression(expr.right); } return false; } + function isNarrowableOperand(expr) { + switch (expr.kind) { + case 178 /* ParenthesizedExpression */: + return isNarrowableOperand(expr.expression); + case 187 /* BinaryExpression */: + switch (expr.operatorToken.kind) { + case 56 /* EqualsToken */: + return isNarrowableOperand(expr.left); + case 24 /* CommaToken */: + return isNarrowableOperand(expr.right); + } + } + return isNarrowableReference(expr); + } + function isNarrowingSwitchStatement(switchStatement) { + var expr = switchStatement.expression; + return expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); + } function createBranchLabel() { return { flags: 4 /* BranchLabel */, @@ -14290,7 +14730,7 @@ var ts; } 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 */; + flow.flags |= flow.flags & 256 /* Referenced */ ? 512 /* Shared */ : 256 /* Referenced */; } function addAntecedent(label, antecedent) { if (!(antecedent.flags & 1 /* Unreachable */) && !ts.contains(label.antecedents, antecedent)) { @@ -14315,8 +14755,21 @@ var ts; setFlowNodeReferenced(antecedent); return { flags: flags, - antecedent: antecedent, - expression: expression + expression: expression, + antecedent: antecedent + }; + } + function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) { + if (!isNarrowingSwitchStatement(switchStatement)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: 128 /* SwitchClause */, + switchStatement: switchStatement, + clauseStart: clauseStart, + clauseEnd: clauseEnd, + antecedent: antecedent }; } function createFlowAssignment(antecedent, node) { @@ -14527,9 +14980,12 @@ var ts; preSwitchCaseFlow = currentFlow; bind(node.caseBlock); addAntecedent(postSwitchLabel, currentFlow); - var hasNonEmptyDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250 /* DefaultClause */ && c.statements.length; }); - if (!hasNonEmptyDefault) { - addAntecedent(postSwitchLabel, preSwitchCaseFlow); + var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250 /* DefaultClause */; }); + // We mark a switch statement as possibly exhaustive if it has no default clause and if all + // case clauses have unreachable end points (e.g. they all return). + node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents; + if (!hasDefault) { + addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0)); } currentBreakTarget = saveBreakTarget; preSwitchCaseFlow = savePreSwitchCaseFlow; @@ -14537,28 +14993,32 @@ var ts; } function bindCaseBlock(node) { var clauses = node.clauses; + var fallthroughFlow = unreachableFlow; 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); - } + var clauseStart = i; + while (!clauses[i].statements.length && i + 1 < clauses.length) { + bind(clauses[i]); + i++; } - else { - bind(clause); + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1)); + addAntecedent(preCaseLabel, fallthroughFlow); + currentFlow = finishFlowLabel(preCaseLabel); + var clause = clauses[i]; + bind(clause); + fallthroughFlow = currentFlow; + if (!(currentFlow.flags & 1 /* Unreachable */) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); } } } + function bindCaseClause(node) { + var saveCurrentFlow = currentFlow; + currentFlow = preSwitchCaseFlow; + bind(node.expression); + currentFlow = saveCurrentFlow; + ts.forEach(node.statements, bind); + } function pushActiveLabel(name, breakTarget, continueTarget) { var activeLabel = { name: name, @@ -14855,7 +15315,7 @@ var ts; } function hasExportDeclarations(node) { var body = node.kind === 256 /* SourceFile */ ? node : node.body; - if (body.kind === 256 /* SourceFile */ || body.kind === 226 /* ModuleBlock */) { + if (body && (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 === 236 /* ExportDeclaration */ || stat.kind === 235 /* ExportAssignment */) { @@ -15471,7 +15931,7 @@ var ts; constructorFunction.parent = classPrototype; classPrototype.parent = leftSideOfAssignment; var funcSymbol = container.locals[constructorFunction.text]; - if (!funcSymbol || !(funcSymbol.flags & 16 /* Function */)) { + if (!funcSymbol || !(funcSymbol.flags & 16 /* Function */ || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return; } // Set up the members collection if it doesn't exist already @@ -15716,6 +16176,7 @@ var ts; var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || 0 /* ES3 */; var modulekind = ts.getEmitModuleKind(compilerOptions); + var noUnusedIdentifiers = !!compilerOptions.noUnusedLocals || !!compilerOptions.noUnusedParameters; var allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === ts.ModuleKind.System; var strictNullChecks = compilerOptions.strictNullChecks; var emitResolver = createResolver(); @@ -15832,6 +16293,7 @@ var ts; var getGlobalThenableType; var jsxElementClassType; var deferredNodes; + var deferredUnusedIdentifierNodes; var flowLoopStart = 0; var flowLoopCount = 0; var visitedFlowCount = 0; @@ -16193,7 +16655,8 @@ var ts; var declarationFile = ts.getSourceFileOfNode(declaration); var useFile = ts.getSourceFileOfNode(usage); if (declarationFile !== useFile) { - if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) { + if ((modulekind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) || + (!compilerOptions.outFile && !compilerOptions.out)) { // nodes are in different files and order cannot be determines return true; } @@ -16453,12 +16916,16 @@ var ts; lastLocation = location; location = location.parent; } + if (result && nameNotFoundMessage && noUnusedIdentifiers) { + result.isReferenced = true; + } if (!result) { result = getSymbol(globals, name, meaning); } if (!result) { if (nameNotFoundMessage) { - if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg)) { + if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && + !checkAndReportErrorForExtendingInterface(errorLocation)) { error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); } } @@ -16532,6 +16999,29 @@ var ts; } return false; } + function checkAndReportErrorForExtendingInterface(errorLocation) { + var parentClassExpression = errorLocation; + while (parentClassExpression) { + var kind = parentClassExpression.kind; + if (kind === 69 /* Identifier */ || kind === 172 /* PropertyAccessExpression */) { + parentClassExpression = parentClassExpression.parent; + continue; + } + if (kind === 194 /* ExpressionWithTypeArguments */) { + break; + } + return false; + } + if (!parentClassExpression) { + return false; + } + var expression = parentClassExpression.expression; + if (resolveEntityName(expression, 64 /* Interface */, /*ignoreErrors*/ true)) { + error(errorLocation, ts.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, ts.getTextOfNode(expression)); + return true; + } + return false; + } function checkResolvedBlockScopedVariable(result, errorLocation) { ts.Debug.assert((result.flags & 2 /* BlockScopedVariable */) !== 0); // Block-scoped variables cannot be used before their definition @@ -16579,9 +17069,11 @@ var ts; 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"]); + var exportDefaultSymbol = ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration) ? + moduleSymbol : + 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)); } @@ -16650,6 +17142,9 @@ var ts; if (targetSymbol) { var name_10 = specifier.propertyName || specifier.name; if (name_10.text) { + if (ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration)) { + return moduleSymbol; + } var symbolFromVariable = void 0; // First check if module was specified with "export=". If so, get the member from the resolved type if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports["export="]) { @@ -16674,7 +17169,7 @@ var ts; function getTargetOfImportSpecifier(node) { return getExternalModuleMember(node.parent.parent.parent, node); } - function getTargetOfGlobalModuleExportDeclaration(node) { + function getTargetOfNamespaceExportDeclaration(node) { return resolveExternalModuleSymbol(node.parent.symbol); } function getTargetOfExportSpecifier(node) { @@ -16700,7 +17195,7 @@ var ts; case 235 /* ExportAssignment */: return getTargetOfExportAssignment(node); case 228 /* NamespaceExportDeclaration */: - return getTargetOfGlobalModuleExportDeclaration(node); + return getTargetOfNamespaceExportDeclaration(node); } } function resolveSymbol(symbol) { @@ -16800,9 +17295,12 @@ var ts; 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)) { + if (!namespace || ts.nodeIsMissing(right)) { return undefined; } + else if (namespace === unknownSymbol) { + return namespace; + } symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning); if (!symbol) { if (!ignoreErrors) { @@ -17883,16 +18381,13 @@ var ts; writePunctuation(writer, 27 /* GreaterThanToken */); } } - function buildDisplayForParametersAndDelimiters(thisType, parameters, writer, enclosingDeclaration, flags, symbolStack) { + function buildDisplayForParametersAndDelimiters(thisParameter, parameters, writer, enclosingDeclaration, flags, symbolStack) { writePunctuation(writer, 17 /* OpenParenToken */); - if (thisType) { - writeKeyword(writer, 97 /* ThisKeyword */); - writePunctuation(writer, 54 /* ColonToken */); - writeSpace(writer); - buildTypeDisplay(thisType, writer, enclosingDeclaration, flags, symbolStack); + if (thisParameter) { + buildParameterDisplay(thisParameter, writer, enclosingDeclaration, flags, symbolStack); } for (var i = 0; i < parameters.length; i++) { - if (i > 0 || thisType) { + if (i > 0 || thisParameter) { writePunctuation(writer, 24 /* CommaToken */); writeSpace(writer); } @@ -17942,7 +18437,7 @@ var ts; else { buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack); } - buildDisplayForParametersAndDelimiters(signature.thisType, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); + buildDisplayForParametersAndDelimiters(signature.thisParameter, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack); } return _displayBuilder || (_displayBuilder = { @@ -18171,6 +18666,9 @@ var ts; function isTypeAny(type) { return type && (type.flags & 1 /* Any */) !== 0; } + function isTypeNever(type) { + return type && (type.flags & 134217728 /* Never */) !== 0; + } // Return the type of a binding element parent. We check SymbolLinks first to see if a type has been // assigned by contextual typing. function getTypeForBindingElementParent(node) { @@ -18335,12 +18833,14 @@ var ts; if (func.kind === 150 /* SetAccessor */ && !ts.hasDynamicName(func)) { var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149 /* GetAccessor */); if (getter) { - var signature = getSignatureFromDeclaration(getter); + var getterSignature = getSignatureFromDeclaration(getter); var thisParameter = getAccessorThisParameter(func); if (thisParameter && declaration === thisParameter) { - return signature.thisType; + // Use the type from the *getter* + ts.Debug.assert(!thisParameter.type); + return getTypeOfSymbol(getterSignature.thisParameter); } - return getReturnTypeOfSignature(signature); + return getReturnTypeOfSignature(getterSignature); } } // Use contextual parameter type if one is available @@ -18491,23 +18991,26 @@ var ts; if (declaration.kind === 235 /* ExportAssignment */) { return links.type = checkExpression(declaration.expression); } - // Handle module.exports = expr - if (declaration.kind === 187 /* BinaryExpression */) { - return links.type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); - } - if (declaration.kind === 172 /* PropertyAccessExpression */) { - // Declarations only exist for property access expressions for certain - // special assignment kinds - 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); - } - } // Handle variable, parameter or property if (!pushTypeResolution(symbol, 0 /* Type */)) { return unknownType; } - var type = getWidenedTypeForVariableLikeDeclaration(declaration, /*reportErrors*/ true); + var type = undefined; + // Handle module.exports = expr or this.p = expr + if (declaration.kind === 187 /* BinaryExpression */) { + type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); + } + else if (declaration.kind === 172 /* PropertyAccessExpression */) { + // Declarations only exist for property access expressions for certain + // special assignment kinds + if (declaration.parent.kind === 187 /* BinaryExpression */) { + // Handle exports.p = expr or className.prototype.method = expr + type = checkExpressionCached(declaration.parent.right); + } + } + if (type === undefined) { + type = getWidenedTypeForVariableLikeDeclaration(declaration, /*reportErrors*/ true); + } if (!popTypeResolution()) { if (symbol.valueDeclaration.type) { // Variable has type annotation that circularly references the variable itself @@ -18538,14 +19041,12 @@ 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 getAnnotatedAccessorThisParameter(accessor) { + var parameter = getAccessorThisParameter(accessor); + return parameter && parameter.symbol; + } + function getThisTypeOfDeclaration(declaration) { + return getThisTypeOfSignature(getSignatureFromDeclaration(declaration)); } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); @@ -18600,9 +19101,14 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var type = createObjectType(65536 /* Anonymous */, symbol); - links.type = strictNullChecks && symbol.flags & 536870912 /* Optional */ ? - addTypeKind(type, 32 /* Undefined */) : type; + if (symbol.valueDeclaration.kind === 225 /* ModuleDeclaration */ && ts.isShorthandAmbientModule(symbol.valueDeclaration)) { + links.type = anyType; + } + else { + var type = createObjectType(65536 /* Anonymous */, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 /* Optional */ ? + addTypeKind(type, 32 /* Undefined */) : type; + } } return links.type; } @@ -19181,12 +19687,12 @@ var ts; type.typeArguments : ts.concatenate(type.typeArguments, [type]); resolveObjectTypeMembers(type, source, typeParameters, typeArguments); } - function createSignature(declaration, typeParameters, thisType, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { + function createSignature(declaration, typeParameters, thisParameter, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { var sig = new Signature(checker); sig.declaration = declaration; sig.typeParameters = typeParameters; sig.parameters = parameters; - sig.thisType = thisType; + sig.thisParameter = thisParameter; sig.resolvedReturnType = resolvedReturnType; sig.typePredicate = typePredicate; sig.minArgumentCount = minArgumentCount; @@ -19195,7 +19701,7 @@ var ts; 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); + return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); } function getDefaultConstructSignatures(classType) { var baseConstructorType = getBaseConstructorTypeOfClass(classType); @@ -19289,8 +19795,9 @@ var ts; // Union the result types when more than one signature matches 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; })); + if (ts.forEach(unionSignatures, function (sig) { return sig.thisParameter; })) { + var thisType = getUnionType(ts.map(unionSignatures, function (sig) { return getTypeOfSymbol(sig.thisParameter) || anyType; })); + s.thisParameter = createTransientSymbol(signature.thisParameter, thisType); } // Clear resolved return type we possibly got from cloneSignature s.resolvedReturnType = undefined; @@ -19500,6 +20007,7 @@ var ts; var props; // Flags we want to propagate to the result if they exist in all source symbols var commonFlags = (containingType.flags & 32768 /* Intersection */) ? 536870912 /* Optional */ : 0 /* None */; + var isReadonly = false; for (var _i = 0, types_2 = types; _i < types_2.length; _i++) { var current = types_2[_i]; var type = getApparentType(current); @@ -19513,6 +20021,9 @@ var ts; else if (!ts.contains(props, prop)) { props.push(prop); } + if (isReadonlySymbol(prop)) { + isReadonly = true; + } } else if (containingType.flags & 16384 /* Union */) { // A union type requires the property to be present in all constituent types @@ -19541,6 +20052,7 @@ var ts; commonFlags, name); result.containingType = containingType; result.declarations = declarations; + result.isReadonly = isReadonly; result.type = containingType.flags & 16384 /* Union */ ? getUnionType(propTypes) : getIntersectionType(propTypes); return result; } @@ -19660,7 +20172,7 @@ var ts; } return result; } - function isOptionalParameter(node) { + function isJSDocOptionalParameter(node) { if (node.flags & 134217728 /* JavaScriptFile */) { if (node.type && node.type.kind === 268 /* JSDocOptionalType */) { return true; @@ -19675,7 +20187,9 @@ var ts; } } } - if (ts.hasQuestionToken(node)) { + } + function isOptionalParameter(node) { + if (ts.hasQuestionToken(node) || isJSDocOptionalParameter(node)) { return true; } if (node.initializer) { @@ -19710,7 +20224,7 @@ var ts; var parameters = []; var hasStringLiterals = false; var minArgumentCount = -1; - var thisType = undefined; + var thisParameter = undefined; var hasThisParameter = void 0; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); // If this is a JSDoc construct signature, then skip the first parameter in the @@ -19726,7 +20240,7 @@ var ts; } if (i === 0 && paramSymbol.name === "this") { hasThisParameter = true; - thisType = param.type ? getTypeFromTypeNode(param.type) : unknownType; + thisParameter = param.symbol; } else { parameters.push(paramSymbol); @@ -19734,7 +20248,7 @@ var ts; if (param.type && param.type.kind === 166 /* StringLiteralType */) { hasStringLiterals = true; } - if (param.initializer || param.questionToken || param.dotDotDotToken) { + if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) { if (minArgumentCount < 0) { minArgumentCount = i - (hasThisParameter ? 1 : 0); } @@ -19747,10 +20261,12 @@ var ts; // 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)) { + (!hasThisParameter || !thisParameter)) { var otherKind = declaration.kind === 149 /* GetAccessor */ ? 150 /* SetAccessor */ : 149 /* GetAccessor */; - var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); - thisType = getAnnotatedAccessorThisType(setter); + var other = ts.getDeclarationOfKind(declaration.symbol, otherKind); + if (other) { + thisParameter = getAnnotatedAccessorThisParameter(other); + } } if (minArgumentCount < 0) { minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); @@ -19768,7 +20284,7 @@ var ts; 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); + links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } @@ -19843,6 +20359,11 @@ var ts; } return anyType; } + function getThisTypeOfSignature(signature) { + if (signature.thisParameter) { + return getTypeOfSymbol(signature.thisParameter); + } + } function getReturnTypeOfSignature(signature) { if (!signature.resolvedReturnType) { if (!pushTypeResolution(signature, 3 /* ResolvedReturnType */)) { @@ -20618,7 +21139,7 @@ var ts; 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); + var result = createSignature(signature.declaration, freshTypeParameters, signature.thisParameter && instantiateSymbol(signature.thisParameter, 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; @@ -20818,6 +21339,9 @@ var ts; function isTypeComparableTo(source, target) { return checkTypeComparableTo(source, target, /*errorNode*/ undefined); } + function areTypesComparable(type1, type2) { + return isTypeComparableTo(type1, type2) || isTypeComparableTo(type2, type1); + } function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) { return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain); } @@ -20850,17 +21374,21 @@ var ts; source = getErasedSignature(source); target = getErasedSignature(target); var result = -1 /* True */; - if (source.thisType && target.thisType && source.thisType !== voidType) { - // void sources are assignable to anything. - var related = compareTypes(source.thisType, target.thisType, /*reportErrors*/ false) - || compareTypes(target.thisType, source.thisType, reportErrors); - if (!related) { - if (reportErrors) { - errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType && sourceThisType !== voidType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + // void sources are assignable to anything. + var related = compareTypes(sourceThisType, targetThisType, /*reportErrors*/ false) + || compareTypes(targetThisType, sourceThisType, reportErrors); + if (!related) { + if (reportErrors) { + errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); + } + return 0 /* False */; } - return 0 /* False */; + result &= related; } - result &= related; } var sourceMax = getNumNonRestParameters(source); var targetMax = getNumNonRestParameters(target); @@ -21800,12 +22328,18 @@ var ts; source = getErasedSignature(source); target = getErasedSignature(target); var result = -1 /* True */; - if (!ignoreThisTypes && source.thisType && target.thisType) { - var related = compareTypes(source.thisType, target.thisType); - if (!related) { - return 0 /* False */; + if (!ignoreThisTypes) { + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + var related = compareTypes(sourceThisType, targetThisType); + if (!related) { + return 0 /* False */; + } + result &= related; + } } - result &= related; } var targetLen = target.parameters.length; for (var i = 0; i < targetLen; i++) { @@ -21897,8 +22431,10 @@ var ts; function isTupleLikeType(type) { return !!getPropertyOfType(type, "0"); } - function isStringLiteralType(type) { - return type.flags & 256 /* StringLiteral */; + function isStringLiteralUnionType(type) { + return type.flags & 256 /* StringLiteral */ ? true : + type.flags & 16384 /* Union */ ? ts.forEach(type.types, isStringLiteralUnionType) : + false; } /** * Check if a Type was written as a tuple type literal. @@ -22709,6 +23245,31 @@ var ts; } return node; } + function getTypeOfSwitchClause(clause) { + if (clause.kind === 249 /* CaseClause */) { + var expr = clause.expression; + return expr.kind === 9 /* StringLiteral */ ? getStringLiteralTypeForText(expr.text) : checkExpression(expr); + } + return undefined; + } + function getSwitchClauseTypes(switchStatement) { + var links = getNodeLinks(switchStatement); + if (!links.switchTypes) { + // If all case clauses specify expressions that have unit types, we return an array + // of those unit types. Otherwise we return an empty array. + var types = ts.map(switchStatement.caseBlock.clauses, getTypeOfSwitchClause); + links.switchTypes = ts.forEach(types, function (t) { return !t || t.flags & 256 /* StringLiteral */; }) ? types : emptyArray; + } + return links.switchTypes; + } + function eachTypeContainedIn(source, types) { + return source.flags & 16384 /* Union */ ? !ts.forEach(source.types, function (t) { return !ts.contains(types, t); }) : ts.contains(types, source); + } + function filterType(type, f) { + return type.flags & 16384 /* Union */ ? + getUnionType(ts.filter(type.types, f)) : + f(type) ? type : neverType; + } function getFlowTypeOfReference(reference, declaredType, assumeInitialized, includeOuterFunctions) { var key; if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 16908175 /* Narrowable */)) { @@ -22724,7 +23285,7 @@ var ts; return result; function getTypeAtFlowNode(flow) { while (true) { - if (flow.flags & 256 /* Shared */) { + if (flow.flags & 512 /* 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. @@ -22745,6 +23306,9 @@ var ts; else if (flow.flags & 96 /* Condition */) { type = getTypeAtFlowCondition(flow); } + else if (flow.flags & 128 /* SwitchClause */) { + type = getTypeAtSwitchClause(flow); + } else if (flow.flags & 12 /* Label */) { if (flow.antecedents.length === 1) { flow = flow.antecedents[0]; @@ -22769,7 +23333,7 @@ var ts; // simply return the declared type to reduce follow-on errors. type = declaredType; } - if (flow.flags & 256 /* Shared */) { + if (flow.flags & 512 /* Shared */) { // Record visited node and the associated type in the cache. visitedFlowNodes[visitedFlowCount] = flow; visitedFlowTypes[visitedFlowCount] = type; @@ -22825,6 +23389,10 @@ var ts; } return type; } + function getTypeAtSwitchClause(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + return narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd); + } function getTypeAtFlowBranchLabel(flow) { var antecedentTypes = []; for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { @@ -22903,11 +23471,26 @@ var ts; case 31 /* ExclamationEqualsToken */: case 32 /* EqualsEqualsEqualsToken */: case 33 /* ExclamationEqualsEqualsToken */: - if (isNullOrUndefinedLiteral(expr.right)) { - return narrowTypeByNullCheck(type, expr, assumeTrue); + var left = expr.left; + var operator = expr.operatorToken.kind; + var right = expr.right; + if (isNullOrUndefinedLiteral(right)) { + return narrowTypeByNullCheck(type, left, operator, right, assumeTrue); } - if (expr.left.kind === 182 /* TypeOfExpression */ && expr.right.kind === 9 /* StringLiteral */) { - return narrowTypeByTypeof(type, expr, assumeTrue); + if (isNullOrUndefinedLiteral(left)) { + return narrowTypeByNullCheck(type, right, operator, left, assumeTrue); + } + if (left.kind === 182 /* TypeOfExpression */ && right.kind === 9 /* StringLiteral */) { + return narrowTypeByTypeof(type, left, operator, right, assumeTrue); + } + if (right.kind === 182 /* TypeOfExpression */ && left.kind === 9 /* StringLiteral */) { + return narrowTypeByTypeof(type, right, operator, left, assumeTrue); + } + if (left.kind === 172 /* PropertyAccessExpression */) { + return narrowTypeByDiscriminant(type, left, operator, right, assumeTrue); + } + if (right.kind === 172 /* PropertyAccessExpression */) { + return narrowTypeByDiscriminant(type, right, operator, left, assumeTrue); } break; case 91 /* InstanceOfKeyword */: @@ -22917,54 +23500,100 @@ var ts; } return type; } - function narrowTypeByNullCheck(type, expr, assumeTrue) { - // We have '==', '!=', '===', or '!==' operator with 'null' or 'undefined' on the right - var operator = expr.operatorToken.kind; + function narrowTypeByNullCheck(type, target, operator, literal, assumeTrue) { + // We have '==', '!=', '===', or '!==' operator with 'null' or 'undefined' as value if (operator === 31 /* ExclamationEqualsToken */ || operator === 33 /* ExclamationEqualsEqualsToken */) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(expr.left))) { + if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(target))) { return type; } var doubleEquals = operator === 30 /* EqualsEqualsToken */ || operator === 31 /* ExclamationEqualsToken */; var facts = doubleEquals ? assumeTrue ? 65536 /* EQUndefinedOrNull */ : 524288 /* NEUndefinedOrNull */ : - expr.right.kind === 93 /* NullKeyword */ ? + literal.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 = getReferenceFromExpression(expr.left.expression); - var right = expr.right; - if (!isMatchingReference(reference, left)) { + function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) { + // We have '==', '!=', '====', or !==' operator with 'typeof xxx' and string literal operands + var target = getReferenceFromExpression(typeOfExpr.expression); + if (!isMatchingReference(reference, target)) { // 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)) { + if (containsMatchingReference(reference, target)) { return declaredType; } return type; } - if (expr.operatorToken.kind === 31 /* ExclamationEqualsToken */ || - expr.operatorToken.kind === 33 /* ExclamationEqualsEqualsToken */) { + if (operator === 31 /* ExclamationEqualsToken */ || operator === 33 /* ExclamationEqualsEqualsToken */) { assumeTrue = !assumeTrue; } 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); + var targetType = ts.getProperty(typeofTypesByName, literal.text); if (targetType && isTypeSubtypeOf(targetType, type)) { return targetType; } } var facts = assumeTrue ? - ts.getProperty(typeofEQFacts, right.text) || 64 /* TypeofEQHostObject */ : - ts.getProperty(typeofNEFacts, right.text) || 8192 /* TypeofNEHostObject */; + ts.getProperty(typeofEQFacts, literal.text) || 64 /* TypeofEQHostObject */ : + ts.getProperty(typeofNEFacts, literal.text) || 8192 /* TypeofNEHostObject */; return getTypeWithFacts(type, facts); } + function narrowTypeByDiscriminant(type, propAccess, operator, value, assumeTrue) { + // We have '==', '!=', '===', or '!==' operator with property access as target + if (!isMatchingReference(reference, propAccess.expression)) { + return type; + } + var propName = propAccess.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var discriminantType = value.kind === 9 /* StringLiteral */ ? getStringLiteralTypeForText(value.text) : checkExpression(value); + if (!isStringLiteralUnionType(discriminantType)) { + return type; + } + if (operator === 31 /* ExclamationEqualsToken */ || operator === 33 /* ExclamationEqualsEqualsToken */) { + assumeTrue = !assumeTrue; + } + if (assumeTrue) { + return filterType(type, function (t) { return areTypesComparable(getTypeOfPropertyOfType(t, propName), discriminantType); }); + } + if (discriminantType.flags & 256 /* StringLiteral */) { + return filterType(type, function (t) { return getTypeOfPropertyOfType(t, propName) !== discriminantType; }); + } + return type; + } + function narrowTypeBySwitchOnDiscriminant(type, switchStatement, clauseStart, clauseEnd) { + // We have switch statement with property access expression + if (!isMatchingReference(reference, switchStatement.expression.expression)) { + return type; + } + var propName = switchStatement.expression.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var switchTypes = getSwitchClauseTypes(switchStatement); + if (!switchTypes.length) { + return type; + } + var clauseTypes = switchTypes.slice(clauseStart, clauseEnd); + var hasDefaultClause = clauseStart === clauseEnd || ts.contains(clauseTypes, undefined); + var caseTypes = hasDefaultClause ? ts.filter(clauseTypes, function (t) { return !!t; }) : clauseTypes; + var discriminantType = caseTypes.length ? getUnionType(caseTypes) : undefined; + var caseType = discriminantType && filterType(type, function (t) { return isTypeComparableTo(discriminantType, getTypeOfPropertyOfType(t, propName)); }); + if (!hasDefaultClause) { + return caseType; + } + var defaultType = filterType(type, function (t) { return !eachTypeContainedIn(getTypeOfPropertyOfType(t, propName), switchTypes); }); + return caseType ? getUnionType([caseType, defaultType]) : defaultType; + } function narrowTypeByInstanceof(type, expr, assumeTrue) { var left = getReferenceFromExpression(expr.left); if (!isMatchingReference(reference, left)) { @@ -23403,9 +24032,9 @@ var ts; if (type) { return type; } - var signature = getSignatureFromDeclaration(container); - if (signature.thisType) { - return signature.thisType; + var thisType = getThisTypeOfDeclaration(container); + if (thisType) { + return thisType; } } if (ts.isClassLike(container.parent)) { @@ -23624,7 +24253,7 @@ var ts; if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180 /* ArrowFunction */) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { - return contextualSignature.thisType; + return getThisTypeOfSignature(contextualSignature); } } return undefined; @@ -23836,9 +24465,6 @@ var ts; function getIndexTypeOfContextualType(type, kind) { return applyToContextualType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }); } - function contextualTypeIsStringLiteralType(type) { - return !!(type.flags & 16384 /* Union */ ? ts.forEach(type.types, isStringLiteralType) : isStringLiteralType(type)); - } // Return true if the given contextual type is a tuple-like type function contextualTypeIsTupleLikeType(type) { return !!(type.flags & 16384 /* Union */ ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type)); @@ -24360,7 +24986,8 @@ 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 === 139 /* QualifiedName */) { + // TODO (yuisu): comment + if (tagName.kind === 172 /* PropertyAccessExpression */ || tagName.kind === 97 /* ThisKeyword */) { return false; } else { @@ -24536,6 +25163,28 @@ var ts; return getResolvedJsxType(node, type, elemClassType); })); } + // If the elemType is a string type, we have to return anyType to prevent an error downstream as we will try to find construct or call signature of the type + if (elemType.flags & 2 /* String */) { + return anyType; + } + else if (elemType.flags & 256 /* StringLiteral */) { + // If the elemType is a stringLiteral type, we can then provide a check to make sure that the string literal type is one of the Jsx intrinsic element type + var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements); + if (intrinsicElementsType !== unknownType) { + var stringLiteralTypeName = elemType.text; + var intrinsicProp = getPropertyOfType(intrinsicElementsType, stringLiteralTypeName); + if (intrinsicProp) { + return getTypeOfSymbol(intrinsicProp); + } + var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */); + if (indexSignatureType) { + return indexSignatureType; + } + error(node, ts.Diagnostics.Property_0_does_not_exist_on_type_1, stringLiteralTypeName, "JSX." + JsxNames.IntrinsicElements); + } + // If we need to report an error, we already done so here. So just return any to prevent any more error downstream + return anyType; + } // Get the element instance type (the result of newing or invoking this tag) var elemInstanceType = getJsxElementInstanceType(node, elemType); if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { @@ -24839,11 +25488,21 @@ var ts; } var prop = getPropertyOfType(apparentType, right.text); if (!prop) { - if (right.text) { + if (right.text && !checkAndReportErrorForExtendingInterface(node)) { error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(right), typeToString(type.flags & 33554432 /* ThisType */ ? apparentType : type)); } return unknownType; } + if (noUnusedIdentifiers && + (prop.flags & 106500 /* ClassMember */) && + prop.valueDeclaration && (prop.valueDeclaration.flags & 8 /* Private */)) { + if (prop.flags & 16777216 /* Instantiated */) { + getSymbolLinks(prop).target.isReferenced = true; + } + else { + prop.isReferenced = true; + } + } getNodeLinks(node).resolvedSymbol = prop; if (prop.parent && prop.parent.flags & 32 /* Class */) { checkClassPropertyAccess(node, left, apparentType, prop); @@ -25249,10 +25908,11 @@ var ts; if (context.failedTypeParameterIndex !== undefined && !context.inferences[context.failedTypeParameterIndex].isFixed) { context.failedTypeParameterIndex = undefined; } - if (signature.thisType) { + var thisType = getThisTypeOfSignature(signature); + if (thisType) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; - inferTypes(context, thisArgumentType, signature.thisType); + inferTypes(context, thisArgumentType, thisType); } // We perform two passes over the arguments. In the first pass we infer from all arguments, but use // wildcards for all context sensitive function expressions. @@ -25316,7 +25976,8 @@ var ts; return typeArgumentsAreAssignable; } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { - if (signature.thisType && signature.thisType !== voidType && node.kind !== 175 /* NewExpression */) { + var thisType = getThisTypeOfSignature(signature); + if (thisType && 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. @@ -25324,7 +25985,7 @@ var ts; 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)) { + if (!checkTypeRelatedTo(thisArgumentType, getThisTypeOfSignature(signature), relation, errorNode, headMessage_1)) { return false; } } @@ -25969,7 +26630,7 @@ var ts; if (getReturnTypeOfSignature(signature) !== voidType) { error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); } - if (signature.thisType === voidType) { + if (getThisTypeOfSignature(signature) === voidType) { error(node, ts.Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void); } return signature; @@ -26126,8 +26787,12 @@ var ts; // 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 // in a JS file - var funcSymbol = checkExpression(node.expression).symbol; - if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16 /* Function */)) { + // Note:JS inferred classes might come from a variable declaration instead of a function declaration. + // In this case, using getResolvedSymbol directly is required to avoid losing the members from the declaration. + var funcSymbol = node.expression.kind === 69 /* Identifier */ ? + getResolvedSymbol(node.expression) : + checkExpression(node.expression).symbol; + if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16 /* Function */ || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return getInferredClassType(funcSymbol); } else if (compilerOptions.noImplicitAny) { @@ -26147,6 +26812,7 @@ var ts; } function checkAssertion(node) { var exprType = getRegularTypeOfObjectLiteral(checkExpression(node.expression)); + checkSourceElement(node.type); var targetType = getTypeFromTypeNode(node.type); if (produceDiagnostics && targetType !== unknownType) { var widenedType = getWidenedType(exprType); @@ -26264,6 +26930,14 @@ var ts; } return emptyObjectType; } + function createPromiseReturnType(func, promisedType) { + var promiseType = createPromiseType(promisedType); + if (promiseType === emptyObjectType) { + error(func, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + return unknownType; + } + return promiseType; + } function getReturnTypeFromBody(func, contextualMapper) { var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); if (!func.body) { @@ -26297,19 +26971,12 @@ var ts; else { types = checkAndAggregateReturnExpressionTypes(func, contextualMapper); if (!types) { - return neverType; + // For an async function, the return type will not be never, but rather a Promise for never. + return isAsync ? createPromiseReturnType(func, neverType) : neverType; } if (types.length === 0) { - if (isAsync) { - // For an async function, the return type will not be void, but rather a Promise for void. - 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; + // For an async function, the return type will not be void, but rather a Promise for void. + return isAsync ? createPromiseReturnType(func, voidType) : voidType; } } // When yield/return statements are contextually typed we allow the return type to be a union type. @@ -26323,7 +26990,7 @@ var ts; else { error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); // Defer to unioning the return types so we get a) downstream errors earlier and b) better Salsa experience - return getUnionType(types); + return isAsync ? createPromiseReturnType(func, getUnionType(types)) : getUnionType(types); } } if (funcIsGenerator) { @@ -26334,20 +27001,10 @@ var ts; reportErrorsFromWidening(func, type); } var widenedType = getWidenedType(type); - if (isAsync) { - // From within an async function you can return either a non-promise value or a promise. Any - // Promise/A+ compatible implementation will always assimilate any foreign promise, so the - // return type of the body is awaited type of the body, wrapped in a native Promise type. - 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; - } + // From within an async function you can return either a non-promise value or a promise. Any + // Promise/A+ compatible implementation will always assimilate any foreign promise, so the + // return type of the body is awaited type of the body, wrapped in a native Promise type. + return isAsync ? createPromiseReturnType(func, widenedType) : widenedType; } function checkAndAggregateYieldOperandTypes(func, contextualMapper) { var aggregatedTypes = []; @@ -26366,10 +27023,40 @@ var ts; }); return aggregatedTypes; } + function isExhaustiveSwitchStatement(node) { + var expr = node.expression; + if (!node.possiblyExhaustive || expr.kind !== 172 /* PropertyAccessExpression */) { + return false; + } + var type = checkExpression(expr.expression); + if (!(type.flags & 16384 /* Union */)) { + return false; + } + var propName = expr.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return false; + } + var switchTypes = getSwitchClauseTypes(node); + if (!switchTypes.length) { + return false; + } + return eachTypeContainedIn(propType, switchTypes); + } + function functionHasImplicitReturn(func) { + if (!(func.flags & 32768 /* HasImplicitReturn */)) { + return false; + } + var lastStatement = ts.lastOrUndefined(func.body.statements); + if (lastStatement && lastStatement.kind === 213 /* SwitchStatement */ && isExhaustiveSwitchStatement(lastStatement)) { + return false; + } + return true; + } function checkAndAggregateReturnExpressionTypes(func, contextualMapper) { var isAsync = ts.isAsyncFunctionLike(func); var aggregatedTypes = []; - var hasReturnWithNoExpression = !!(func.flags & 32768 /* HasImplicitReturn */); + var hasReturnWithNoExpression = functionHasImplicitReturn(func); var hasReturnOfTypeNever = false; ts.forEachReturnStatement(func.body, function (returnStatement) { var expr = returnStatement.expression; @@ -26423,7 +27110,7 @@ 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 !== 199 /* Block */ || !(func.flags & 32768 /* HasImplicitReturn */)) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 /* Block */ || !functionHasImplicitReturn(func)) { return; } var hasExplicitReturn = func.flags & 65536 /* HasExplicitReturn */; @@ -26543,6 +27230,7 @@ var ts; } } } + registerForUnusedIdentifiersCheck(node); } } function checkArithmeticOperandType(operand, type, diagnostic) { @@ -26558,7 +27246,9 @@ var ts; // Variables declared with 'const' // Get accessors without matching set accessors // Enum members - return symbol.flags & 4 /* Property */ && (getDeclarationFlagsFromSymbol(symbol) & 64 /* Readonly */) !== 0 || + // Unions and intersections of the above (unions and intersections eagerly set isReadonly on creation) + return symbol.isReadonly || + symbol.flags & 4 /* Property */ && (getDeclarationFlagsFromSymbol(symbol) & 64 /* Readonly */) !== 0 || symbol.flags & 3 /* Variable */ && (getDeclarationFlagsFromSymbol(symbol) & 2048 /* Const */) !== 0 || symbol.flags & 98304 /* Accessor */ && !(symbol.flags & 65536 /* SetAccessor */) || (symbol.flags & 8 /* EnumMember */) !== 0; @@ -26861,6 +27551,12 @@ var ts; if (exprOrAssignment.kind === 254 /* ShorthandPropertyAssignment */) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { + // In strict null checking mode, if a default value of a non-undefined type is specified, remove + // undefined from the final type. + if (strictNullChecks && + !(getCombinedTypeFlags(checkExpression(prop.objectAssignmentInitializer)) & 32 /* Undefined */)) { + sourceType = getTypeWithFacts(sourceType, 131072 /* NEUndefined */); + } checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); } target = exprOrAssignment.name; @@ -27016,7 +27712,7 @@ var ts; case 90 /* InKeyword */: return checkInExpression(left, right, leftType, rightType); case 51 /* AmpersandAmpersandToken */: - return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 126 /* Falsy */) : rightType; + return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 112 /* Falsy */) : rightType; case 52 /* BarBarToken */: return getUnionType([getNonNullableType(leftType), rightType]); case 56 /* EqualsToken */: @@ -27132,7 +27828,7 @@ var ts; } function checkStringLiteralExpression(node) { var contextualType = getContextualType(node); - if (contextualType && contextualTypeIsStringLiteralType(contextualType)) { + if (contextualType && isStringLiteralUnionType(contextualType)) { return getStringLiteralTypeForText(node.text); } return stringType; @@ -27506,6 +28202,9 @@ var ts; checkAsyncFunctionReturnType(node); } } + if (!node.body) { + checkUnusedTypeParameters(node); + } } } function checkClassForDuplicateDeclarations(node) { @@ -27523,8 +28222,8 @@ var ts; } } else { - var static = ts.forEach(member.modifiers, function (m) { return m.kind === 113 /* StaticKeyword */; }); - var names = static ? staticNames : instanceNames; + var isStatic = ts.forEach(member.modifiers, function (m) { return m.kind === 113 /* StaticKeyword */; }); + var names = isStatic ? staticNames : instanceNames; var memberName = member.name && ts.getPropertyNameForPropertyNameNode(member.name); if (memberName) { switch (member.kind) { @@ -27645,6 +28344,7 @@ var ts; // Grammar check for checking only related to constructorDeclaration checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node); checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); var symbol = getSymbolOfNode(node); var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind); // Only type check the symbol once @@ -27768,13 +28468,14 @@ var ts; // TypeScript 1.0 spec (April 2014): 4.5 // If both accessors include type annotations, the specified types must be identical. 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); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getThisTypeOfDeclaration, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } if (node.parent.kind !== 171 /* ObjectLiteralExpression */) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } else { checkNodeDeferred(node); @@ -27789,6 +28490,7 @@ var ts; } function checkAccessorDeferred(node) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } function checkMissingDeclaration(node) { checkDecorators(node); @@ -27813,13 +28515,15 @@ var ts; function checkTypeReferenceNode(node) { checkGrammarTypeArguments(node, node.typeArguments); var type = getTypeFromTypeReference(node); - if (type !== unknownType && node.typeArguments) { - // Do type argument local checks only if referenced type is successfully resolved - ts.forEach(node.typeArguments, checkSourceElement); - if (produceDiagnostics) { - var symbol = getNodeLinks(node).resolvedSymbol; - var typeParameters = symbol.flags & 524288 /* TypeAlias */ ? getSymbolLinks(symbol).typeParameters : type.target.localTypeParameters; - checkTypeArgumentConstraints(typeParameters, node.typeArguments); + if (type !== unknownType) { + if (node.typeArguments) { + // Do type argument local checks only if referenced type is successfully resolved + ts.forEach(node.typeArguments, checkSourceElement); + if (produceDiagnostics) { + var symbol = getNodeLinks(node).resolvedSymbol; + var typeParameters = symbol.flags & 524288 /* TypeAlias */ ? getSymbolLinks(symbol).typeParameters : type.target.localTypeParameters; + checkTypeArgumentConstraints(typeParameters, node.typeArguments); + } } } } @@ -27979,9 +28683,6 @@ var ts; } } } - // when checking exported function declarations across modules check only duplicate implementations - // names and consistency of modifiers are verified when we check local symbol - var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & 1536 /* Module */; var duplicateFunctionDeclaration = false; var multipleConstructorImplementation = false; for (var _i = 0, declarations_4 = declarations; _i < declarations_4.length; _i++) { @@ -28013,7 +28714,7 @@ var ts; duplicateFunctionDeclaration = true; } } - else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { + else if (previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { reportImplementationExpectedError(previousDeclaration); } if (ts.nodeIsPresent(node.body)) { @@ -28041,7 +28742,7 @@ var ts; }); } // Abstract methods can't have an implementation -- in particular, they don't need one. - if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && + if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && !(lastSeenNonAmbientDeclaration.flags & 128 /* Abstract */) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } @@ -28142,7 +28843,7 @@ var ts; } function checkNonThenableType(type, location, message) { type = getWidenedType(type); - if (!isTypeAny(type) && isTypeAssignableTo(type, getGlobalThenableType())) { + if (!isTypeAny(type) && !isTypeNever(type) && isTypeAssignableTo(type, getGlobalThenableType())) { if (location) { if (!message) { message = ts.Diagnostics.Operand_for_await_does_not_have_a_valid_callable_then_member; @@ -28168,37 +28869,39 @@ var ts; // ): any; // } // - if (promise.flags & 1 /* Any */) { + if (isTypeAny(promise)) { return undefined; } - if ((promise.flags & 4096 /* Reference */) && promise.target === tryGetGlobalPromiseType()) { - return promise.typeArguments[0]; + if (promise.flags & 4096 /* Reference */) { + if (promise.target === tryGetGlobalPromiseType() + || promise.target === getGlobalPromiseLikeType()) { + 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 /* Any */)) { + if (!thenFunction || isTypeAny(thenFunction)) { return undefined; } - var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0 /* Call */) : emptyArray; + var thenSignatures = getSignaturesOfType(thenFunction, 0 /* Call */); if (thenSignatures.length === 0) { return undefined; } var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072 /* NEUndefined */); - if (onfulfilledParameterType.flags & 1 /* Any */) { + if (isTypeAny(onfulfilledParameterType)) { return undefined; } var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0 /* Call */); if (onfulfilledParameterSignatures.length === 0) { return undefined; } - var valueParameterType = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); - return valueParameterType; + return getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); } function getTypeOfFirstParameterOfSignature(signature) { - return getTypeAtPosition(signature, 0); + return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : neverType; } /** * Gets the "awaited type" of a type. @@ -28572,6 +29275,140 @@ var ts; getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } } + registerForUnusedIdentifiersCheck(node); + } + function registerForUnusedIdentifiersCheck(node) { + if (deferredUnusedIdentifierNodes) { + deferredUnusedIdentifierNodes.push(node); + } + } + function checkUnusedIdentifiers() { + if (deferredUnusedIdentifierNodes) { + for (var _i = 0, deferredUnusedIdentifierNodes_1 = deferredUnusedIdentifierNodes; _i < deferredUnusedIdentifierNodes_1.length; _i++) { + var node = deferredUnusedIdentifierNodes_1[_i]; + switch (node.kind) { + case 256 /* SourceFile */: + case 225 /* ModuleDeclaration */: + checkUnusedModuleMembers(node); + break; + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + checkUnusedClassMembers(node); + checkUnusedTypeParameters(node); + break; + case 222 /* InterfaceDeclaration */: + checkUnusedTypeParameters(node); + break; + case 199 /* Block */: + case 227 /* CaseBlock */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + checkUnusedLocalsAndParameters(node); + break; + case 148 /* Constructor */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + if (node.body) { + checkUnusedLocalsAndParameters(node); + } + checkUnusedTypeParameters(node); + break; + case 146 /* MethodSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + checkUnusedTypeParameters(node); + break; + } + ; + } + } + } + function checkUnusedLocalsAndParameters(node) { + if (node.parent.kind !== 222 /* InterfaceDeclaration */ && noUnusedIdentifiers && !ts.isInAmbientContext(node)) { + var _loop_1 = function(key) { + if (ts.hasProperty(node.locals, key)) { + var local_1 = node.locals[key]; + if (!local_1.isReferenced) { + if (local_1.valueDeclaration && local_1.valueDeclaration.kind === 142 /* Parameter */) { + var parameter = local_1.valueDeclaration; + if (compilerOptions.noUnusedParameters && + !ts.isParameterPropertyDeclaration(parameter) && + !parameterNameStartsWithUnderscore(parameter)) { + error(local_1.valueDeclaration.name, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); + } + } + else if (compilerOptions.noUnusedLocals) { + ts.forEach(local_1.declarations, function (d) { return error(d.name || d, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); }); + } + } + } + }; + for (var key in node.locals) { + _loop_1(key); + } + } + } + function parameterNameStartsWithUnderscore(parameter) { + return parameter.name && parameter.name.kind === 69 /* Identifier */ && parameter.name.text.charCodeAt(0) === 95 /* _ */; + } + function checkUnusedClassMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.members) { + for (var _i = 0, _a = node.members; _i < _a.length; _i++) { + var member = _a[_i]; + if (member.kind === 147 /* MethodDeclaration */ || member.kind === 145 /* PropertyDeclaration */) { + if (!member.symbol.isReferenced && member.flags & 8 /* Private */) { + error(member.name, ts.Diagnostics._0_is_declared_but_never_used, member.symbol.name); + } + } + else if (member.kind === 148 /* Constructor */) { + for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) { + var parameter = _c[_b]; + if (!parameter.symbol.isReferenced && parameter.flags & 8 /* Private */) { + error(parameter.name, ts.Diagnostics._0_is_declared_but_never_used, parameter.symbol.name); + } + } + } + } + } + } + } + function checkUnusedTypeParameters(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.typeParameters) { + for (var _i = 0, _a = node.typeParameters; _i < _a.length; _i++) { + var typeParameter = _a[_i]; + if (!typeParameter.symbol.isReferenced) { + error(typeParameter.name, ts.Diagnostics._0_is_declared_but_never_used, typeParameter.symbol.name); + } + } + } + } + } + function checkUnusedModuleMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + for (var key in node.locals) { + if (ts.hasProperty(node.locals, key)) { + var local = node.locals[key]; + if (!local.isReferenced && !local.exportSymbol) { + for (var _i = 0, _a = local.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + if (!ts.isAmbientModule(declaration)) { + error(declaration.name, ts.Diagnostics._0_is_declared_but_never_used, local.name); + } + } + } + } + } + } } function checkBlock(node) { // Grammar checking for SyntaxKind.Block @@ -28579,6 +29416,9 @@ var ts; checkGrammarStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkCollisionWithArgumentsInGeneratedCode(node) { // no rest parameters \ declaration context \ overload - no codegen impact @@ -28985,6 +29825,9 @@ var ts; if (node.incrementor) checkExpression(node.incrementor); checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForOfStatement(node) { checkGrammarForInOrForOfStatement(node); @@ -29020,6 +29863,9 @@ var ts; } } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInStatement(node) { // Grammar checking @@ -29061,6 +29907,9 @@ var ts; error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter); } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInOrForOfVariableDeclaration(iterationStatement) { var variableDeclarationList = iterationStatement.initializer; @@ -29294,7 +30143,7 @@ var ts; } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; - return maybeTypeOfKind(unwrappedReturnType, 16 /* Void */ | 1 /* Any */); + return unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 16 /* Void */ | 1 /* Any */); } function checkReturnStatement(node) { // Grammar checking @@ -29392,6 +30241,9 @@ var ts; } ts.forEach(clause.statements, checkSourceElement); }); + if (node.caseBlock.locals) { + registerForUnusedIdentifiersCheck(node.caseBlock); + } } function checkLabeledStatement(node) { // Grammar checking @@ -29581,6 +30433,7 @@ var ts; } function checkClassExpressionDeferred(node) { ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassDeclaration(node) { if (!node.name && !(node.flags & 512 /* Default */)) { @@ -29588,6 +30441,7 @@ var ts; } checkClassLikeDeclaration(node); ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassLikeDeclaration(node) { checkGrammarClassDeclarationHeritageClauses(node); @@ -29865,6 +30719,7 @@ var ts; ts.forEach(node.members, checkSourceElement); if (produceDiagnostics) { checkTypeForDuplicateIndexSignatures(node); + checkUnusedTypeParameters(node); } } function checkTypeAliasDeclaration(node) { @@ -30189,7 +31044,7 @@ var ts; // - augmentation for a global scope is always applied // - augmentation for some external module is applied if symbol for augmentation is merged (it was combined with target module). var checkBody = isGlobalAugmentation || (getSymbolOfNode(node).flags & 33554432 /* Merged */); - if (checkBody) { + if (checkBody && node.body) { // body of ambient external module is always a module block for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) { var statement = _a[_i]; @@ -30217,7 +31072,16 @@ var ts; } } } - checkSourceElement(node.body); + if (compilerOptions.noImplicitAny && !node.body) { + // Ambient shorthand module is an implicit any + reportImplicitAnyError(node, anyType); + } + if (node.body) { + checkSourceElement(node.body); + if (!ts.isGlobalScopeAugmentation(node)) { + registerForUnusedIdentifiersCheck(node); + } + } } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { @@ -30708,9 +31572,17 @@ var ts; checkGrammarSourceFile(node); potentialThisCollisions.length = 0; deferredNodes = []; + deferredUnusedIdentifierNodes = produceDiagnostics && noUnusedIdentifiers ? [] : undefined; ts.forEach(node.statements, checkSourceElement); checkDeferredNodes(); + if (ts.isExternalModule(node)) { + registerForUnusedIdentifiersCheck(node); + } + if (!node.isDeclarationFile) { + checkUnusedIdentifiers(); + } deferredNodes = undefined; + deferredUnusedIdentifierNodes = undefined; if (ts.isExternalOrCommonJsModule(node)) { checkExternalModuleExports(node); } @@ -31027,6 +31899,14 @@ var ts; case 139 /* QualifiedName */: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 97 /* ThisKeyword */: + var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false); + if (ts.isFunctionLike(container)) { + var sig = getSignatureFromDeclaration(container); + if (sig.thisParameter) { + return sig.thisParameter; + } + } + // fallthrough case 95 /* SuperKeyword */: var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; @@ -31267,7 +32147,10 @@ var ts; var parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { if (parentSymbol.flags & 512 /* ValueModule */ && parentSymbol.valueDeclaration.kind === 256 /* SourceFile */) { - return parentSymbol.valueDeclaration; + // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined. + if (parentSymbol.valueDeclaration === ts.getSourceFileOfNode(node)) { + return parentSymbol.valueDeclaration; + } } for (var n = node.parent; n; n = n.parent) { if ((n.kind === 225 /* ModuleDeclaration */ || n.kind === 224 /* EnumDeclaration */) && getSymbolOfNode(n) === parentSymbol) { @@ -31982,7 +32865,10 @@ var ts; return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); } 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); + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern); + } + else if (node.kind === 142 /* Parameter */ && (flags & 92 /* ParameterPropertyModifier */) && node.dotDotDotToken) { + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter); } if (flags & 256 /* Async */) { return checkGrammarAsyncModifier(node, lastAsync); @@ -32230,7 +33116,7 @@ var ts; var GetAccessor = 2; var SetAccessor = 4; var GetOrSetAccessor = GetAccessor | SetAccessor; - var _loop_1 = function(prop) { + var _loop_2 = function(prop) { var name_21 = prop.name; if (prop.kind === 193 /* OmittedExpression */ || name_21.kind === 140 /* ComputedPropertyName */) { @@ -32304,8 +33190,8 @@ var ts; }; 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; + var state_3 = _loop_2(prop); + if (typeof state_3 === "object") return state_3.value; } } function checkGrammarJsxElement(node) { @@ -33812,21 +34698,26 @@ var ts; writeTextOfNode(currentText, node.name); } } - while (node.body.kind !== 226 /* ModuleBlock */) { + while (node.body && node.body.kind !== 226 /* ModuleBlock */) { 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; + if (node.body) { + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + else { + write(";"); + } } function writeTypeAliasDeclaration(node) { var prevEnclosingDeclaration = enclosingDeclaration; @@ -35218,6 +36109,8 @@ var ts; return generateNameForExportDefault(); case 192 /* ClassExpression */: return generateNameForClassExpression(); + default: + ts.Debug.fail(); } } function getGeneratedNameForNode(node) { @@ -36033,6 +36926,20 @@ var ts; } return false; } + function getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node) { + if (languageVersion >= 2 /* ES6 */) { + var parent_14 = node.parent; + if (parent_14.kind === 172 /* PropertyAccessExpression */ && parent_14.expression === node) { + parent_14 = parent_14.parent; + while (parent_14 && parent_14.kind !== 145 /* PropertyDeclaration */) { + parent_14 = parent_14.parent; + } + return parent_14 && parent_14.kind === 145 /* PropertyDeclaration */ && (parent_14.flags & 32 /* Static */) !== 0 && + parent_14.parent.kind === 192 /* ClassExpression */ ? parent_14.parent : undefined; + } + } + return undefined; + } function emitIdentifier(node) { if (convertedLoopState) { if (node.text == "arguments" && resolver.isArgumentsLocalBinding(node)) { @@ -36046,6 +36953,14 @@ var ts; write(node.text); } else if (isExpressionIdentifier(node)) { + var classExpression = getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node); + if (classExpression) { + var declaration = resolver.getReferencedValueDeclaration(node); + if (declaration === classExpression) { + write(getGeneratedNameForNode(declaration.name)); + return; + } + } emitExpressionIdentifier(node); } else if (isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node)) { @@ -36393,7 +37308,6 @@ var ts; function createPropertyAccessExpression(expression, name) { var result = ts.createSynthesizedNode(172 /* PropertyAccessExpression */); result.expression = parenthesizeForAccess(expression); - result.dotToken = ts.createSynthesizedNode(21 /* DotToken */); result.name = name; return result; } @@ -36457,9 +37371,9 @@ var ts; emit(node.initializer); } // Return true if identifier resolves to an exported member of a namespace - function isNamespaceExportReference(node) { + function isExportReference(node) { var container = resolver.getReferencedExportContainer(node); - return container && container.kind !== 256 /* SourceFile */; + return !!container; } // Return true if identifier resolves to an imported identifier function isImportedReference(node) { @@ -36490,10 +37404,10 @@ var ts; // const foo_1 = require('./foo'); // exports.baz = { foo: foo_1.foo }; // - if (languageVersion < 2 /* ES6 */ || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isNamespaceExportReference(node.name)) { + if (languageVersion < 2 /* ES6 */ || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isExportReference(node.name)) { // Emit identifier as an identifier write(": "); - emit(node.name); + emitExpressionIdentifier(node.name); } if (languageVersion >= 2 /* ES6 */ && node.objectAssignmentInitializer) { write(" = "); @@ -36552,7 +37466,10 @@ var ts; return; } emit(node.expression); - var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, node.dotToken); + var dotRangeStart = ts.nodeIsSynthesized(node.expression) ? -1 : node.expression.end; + var dotRangeEnd = ts.nodeIsSynthesized(node.expression) ? -1 : ts.skipTrivia(currentText, node.expression.end) + 1; + var dotToken = { pos: dotRangeStart, end: dotRangeEnd }; + var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, dotToken); // 1 .toString is a valid property access, emit a space after the literal // Also emit a space if expression is a integer const enum value - it will appear in generated code as numeric literal var shouldEmitSpace = false; @@ -36575,7 +37492,7 @@ var ts; else { write("."); } - var indentedAfterDot = indentIfOnDifferentLines(node, node.dotToken, node.name); + var indentedAfterDot = indentIfOnDifferentLines(node, dotToken, node.name); emit(node.name); decreaseIndentIf(indentedBeforeDot, indentedAfterDot); } @@ -37014,7 +37931,6 @@ var ts; synthesizedLHS = ts.createSynthesizedNode(172 /* PropertyAccessExpression */, /*startsOnNewLine*/ false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, /*canDefineTempVariablesInPlace*/ false, /*shouldEmitCommaBeforeAssignment*/ false); synthesizedLHS.expression = identifier; - synthesizedLHS.dotToken = leftHandSideExpression.dotToken; synthesizedLHS.name = leftHandSideExpression.name; write(", "); } @@ -38561,8 +39477,10 @@ var ts; emit(initializer); } write(";"); - tempIndex_1++; } + // Regardless of whether we will emit a var declaration for the binding pattern, we generate the temporary + // variable for the parameter (see: emitParameter) + tempIndex_1++; } else if (initializer) { writeLine(); @@ -39069,7 +39987,7 @@ var ts; emitStart(property); emitStart(property.name); if (receiver) { - emit(receiver); + write(receiver); } else { if (property.flags & 32 /* Static */) { @@ -39460,12 +40378,15 @@ var ts; // of it have been initialized by the time it is used. var staticProperties = getInitializedProperties(node, /*isStatic*/ true); var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192 /* ClassExpression */; - var tempVariable; + var generatedName; if (isClassExpressionWithStaticProperties) { - tempVariable = createAndRecordTempVariable(0 /* Auto */); + generatedName = getGeneratedNameForNode(node.name); + var synthesizedNode = ts.createSynthesizedNode(69 /* Identifier */); + synthesizedNode.text = generatedName; + recordTempDeclaration(synthesizedNode); write("("); increaseIndent(); - emit(tempVariable); + emit(synthesizedNode); write(" = "); } write("class"); @@ -39513,11 +40434,11 @@ var ts; var property = staticProperties_1[_a]; write(","); writeLine(); - emitPropertyDeclaration(node, property, /*receiver*/ tempVariable, /*isExpression*/ true); + emitPropertyDeclaration(node, property, /*receiver*/ generatedName, /*isExpression*/ true); } write(","); writeLine(); - emit(tempVariable); + write(generatedName); decreaseIndent(); write(")"); } @@ -39556,7 +40477,11 @@ var ts; } } function emitClassLikeDeclarationBelowES6(node) { + var isES6ExportedClass = isES6ExportedDeclaration(node); if (node.kind === 221 /* ClassDeclaration */) { + if (isES6ExportedClass && !(node.flags & 512 /* Default */)) { + write("export "); + } // source file level classes in system modules are hoisted so 'var's for them are already defined if (!shouldHoistDeclarationInSystemJsModule(node)) { write("var "); @@ -39621,9 +40546,15 @@ var ts; write(";"); } emitEnd(node); - if (node.kind === 221 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */ && !isES6ExportedClass) { emitExportMemberAssignment(node); } + else if (isES6ExportedClass && (node.flags & 512 /* Default */)) { + writeLine(); + write("export default "); + emitDeclarationName(node); + write(";"); + } } function emitClassMemberPrefix(node, member) { emitDeclarationName(node); @@ -40000,10 +40931,10 @@ var ts; } if (parameters[i].dotDotDotToken) { var parameterType = parameters[i].type; - if (parameterType.kind === 160 /* ArrayType */) { + if (parameterType && parameterType.kind === 160 /* ArrayType */) { parameterType = parameterType.elementType; } - else if (parameterType.kind === 155 /* TypeReference */ && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + else if (parameterType && parameterType.kind === 155 /* TypeReference */ && parameterType.typeArguments && parameterType.typeArguments.length === 1) { parameterType = parameterType.typeArguments[0]; } else { @@ -40021,9 +40952,15 @@ var ts; } /** Serializes the return type of function. Used by the __metadata decorator for a method. */ function emitSerializedReturnTypeOfNode(node) { - if (node && ts.isFunctionLike(node) && node.type) { - emitSerializedTypeNode(node.type); - return; + if (node && ts.isFunctionLike(node)) { + if (node.type) { + emitSerializedTypeNode(node.type); + return; + } + else if (ts.isAsyncFunctionLike(node)) { + write("Promise"); + return; + } } write("void 0"); } @@ -40162,7 +41099,7 @@ var ts; } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 225 /* ModuleDeclaration */) { + if (moduleDeclaration.body && moduleDeclaration.body.kind === 225 /* ModuleDeclaration */) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -40204,6 +41141,7 @@ var ts; write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); + ts.Debug.assert(node.body !== undefined); // node.body must exist, as this is a non-ambient module if (node.body.kind === 226 /* ModuleBlock */) { var saveConvertedLoopState = convertedLoopState; var saveTempFlags = tempFlags; @@ -41366,7 +42304,7 @@ var ts; } firstNonWhitespace = -1; } - else if (!ts.isWhiteSpace(c)) { + else if (!ts.isWhiteSpaceSingleLine(c)) { lastNonWhitespace = i; if (firstNonWhitespace === -1) { firstNonWhitespace = i; @@ -41998,13 +42936,9 @@ var ts; /* @internal */ ts.ioReadTime = 0; /* @internal */ ts.ioWriteTime = 0; /** The version of the TypeScript compiler release */ + ts.version = "2.0.0"; var emptyArray = []; - var defaultLibrarySearchPaths = [ - "types/", - "node_modules/", - "node_modules/@types/", - ]; - ts.version = "1.9.0"; + var defaultTypeRoots = ["node_modules/@types"]; function findConfigFile(searchPath, fileExists) { while (true) { var fileName = ts.combinePaths(searchPath, "tsconfig.json"); @@ -42141,9 +43075,33 @@ var ts; } return typesFilePath; } + // Use the main module for inferring types if no types package specified and the allowJs is set + if (state.compilerOptions.allowJs && jsonContent.main && typeof jsonContent.main === "string") { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0, jsonContent.main); + } + var mainFilePath = ts.normalizePath(ts.combinePaths(baseDirectory, jsonContent.main)); + return mainFilePath; + } return undefined; } var typeReferenceExtensions = [".d.ts"]; + function getEffectiveTypeRoots(options, host) { + if (options.typeRoots) { + return options.typeRoots; + } + var currentDirectory; + if (options.configFilePath) { + currentDirectory = ts.getDirectoryPath(options.configFilePath); + } + else if (host.getCurrentDirectory) { + currentDirectory = host.getCurrentDirectory(); + } + if (!currentDirectory) { + return undefined; + } + return ts.map(defaultTypeRoots, function (d) { return ts.combinePaths(currentDirectory, d); }); + } /** * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups @@ -42157,37 +43115,35 @@ var ts; skipTsx: true, traceEnabled: traceEnabled }; - // use typesRoot and fallback to directory that contains tsconfig or current directory if typesRoot is not set - var rootDir = options.typesRoot || (options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : (host.getCurrentDirectory && host.getCurrentDirectory())); + var typeRoots = getEffectiveTypeRoots(options, host); if (traceEnabled) { if (containingFile === undefined) { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set, typeReferenceDirectiveName); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, typeRoots); } } else { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set, typeReferenceDirectiveName, containingFile); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, typeRoots); } } } var failedLookupLocations = []; // Check primary library paths - 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); + if (typeRoots && typeRoots.length) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", ")); + } + var primarySearchPaths = typeRoots; + for (var _i = 0, primarySearchPaths_1 = primarySearchPaths; _i < primarySearchPaths_1.length; _i++) { + var typeRoot = primarySearchPaths_1[_i]; + var candidate = ts.combinePaths(typeRoot, typeReferenceDirectiveName); var candidateDirectory = ts.getDirectoryPath(candidate); var resolvedFile_1 = loadNodeModuleFromDirectory(typeReferenceExtensions, candidate, failedLookupLocations, !directoryProbablyExists(candidateDirectory, host), moduleResolutionState); if (resolvedFile_1) { @@ -42211,9 +43167,6 @@ var ts; if (containingFile) { initialLocationForSecondaryLookup = ts.getDirectoryPath(containingFile); } - else { - initialLocationForSecondaryLookup = rootDir; - } if (initialLocationForSecondaryLookup !== undefined) { // check secondary locations if (traceEnabled) { @@ -42650,12 +43603,12 @@ var ts; var nodeModulesFolder = ts.combinePaths(directory, "node_modules"); var nodeModulesFolderExists = directoryProbablyExists(nodeModulesFolder, state.host); var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName)); - // Load only typescript files irrespective of allowJs option if loading from node modules - var result = loadModuleFromFile(candidate, ts.supportedTypeScriptExtensions, failedLookupLocations, !nodeModulesFolderExists, state); + var supportedExtensions = ts.getSupportedExtensions(state.compilerOptions); + var result = loadModuleFromFile(candidate, supportedExtensions, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } - result = loadNodeModuleFromDirectory(ts.supportedTypeScriptExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); + result = loadNodeModuleFromDirectory(supportedExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } @@ -42665,13 +43618,18 @@ var ts; while (true) { var baseName = ts.getBaseFileName(directory); if (baseName !== "node_modules") { - var result = - // first: try to load module as-is - loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state) || - // second: try to load module from the scope '@types' - loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state); - if (result) { - return result; + // Try to load source from the package + var packageResult = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state); + if (packageResult && ts.hasTypeScriptFileExtension(packageResult)) { + // Always prefer a TypeScript (.ts, .tsx, .d.ts) file shipped with the package + return packageResult; + } + else { + // Else prefer a types package over non-TypeScript results (e.g. JavaScript files) + var typesResult = loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state); + if (typesResult || packageResult) { + return typesResult || packageResult; + } } } var parentPath = ts.getDirectoryPath(directory); @@ -42808,25 +43766,12 @@ var ts; } } } - function getDefaultTypeDirectiveNames(rootPath) { - var localTypes = ts.combinePaths(rootPath, "types"); - var npmTypes = ts.combinePaths(rootPath, "node_modules/@types"); - var result = []; - if (ts.sys.directoryExists(localTypes)) { - result = result.concat(ts.sys.getDirectories(localTypes)); - } - if (ts.sys.directoryExists(npmTypes)) { - result = result.concat(ts.sys.getDirectories(npmTypes)); - } - return result; - } 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 { - getDefaultTypeDirectiveNames: getDefaultTypeDirectiveNames, getSourceFile: getSourceFile, getDefaultLibLocation: getDefaultLibLocation, getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); }, @@ -42839,6 +43784,7 @@ var ts; 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); }, + getDirectories: function (path) { return ts.sys.getDirectories(path); }, realpath: realpath }; } @@ -42894,21 +43840,38 @@ var ts; } return resolutions; } - function getDefaultTypeDirectiveNames(options, rootFiles, host) { + function getInferredTypesRoot(options, rootFiles, host) { + return computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); + } + /** + * Given a set of options and a set of root files, returns the set of type directive names + * that should be included for this program automatically. + * This list could either come from the config file, + * or from enumerating the types root + initial secondary types lookup location. + * More type directives might appear in the program later as a result of loading actual source files; + * this list is only the set of defaults that are implicitly included. + */ + function getAutomaticTypeDirectiveNames(options, rootFiles, host) { // Use explicit type list from tsconfig.json if (options.types) { return options.types; } - // or load all types from the automatic type import fields - if (host && host.getDefaultTypeDirectiveNames) { - var commonRoot = computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); - if (commonRoot) { - return host.getDefaultTypeDirectiveNames(commonRoot); + // Walk the primary type lookup locations + var result = []; + if (host.directoryExists && host.getDirectories) { + var typeRoots = getEffectiveTypeRoots(options, host); + if (typeRoots) { + for (var _i = 0, typeRoots_1 = typeRoots; _i < typeRoots_1.length; _i++) { + var root = typeRoots_1[_i]; + if (host.directoryExists(root)) { + result = result.concat(host.getDirectories(root)); + } + } } } - return undefined; + return result; } - ts.getDefaultTypeDirectiveNames = getDefaultTypeDirectiveNames; + ts.getAutomaticTypeDirectiveNames = getAutomaticTypeDirectiveNames; function createProgram(rootNames, options, host, oldProgram) { var program; var files = []; @@ -42918,6 +43881,20 @@ var ts; var classifiableNames; var resolvedTypeReferenceDirectives = {}; var fileProcessingDiagnostics = ts.createDiagnosticCollection(); + // The below settings are to track if a .js file should be add to the program if loaded via searching under node_modules. + // This works as imported modules are discovered recursively in a depth first manner, specifically: + // - For each root file, findSourceFile is called. + // - This calls processImportedModules for each module imported in the source file. + // - This calls resolveModuleNames, and then calls findSourceFile for each resolved module. + // As all these operations happen - and are nested - within the createProgram call, they close over the below variables. + // The current resolution depth is tracked by incrementing/decrementing as the depth first search progresses. + var maxNodeModulesJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 2; + var currentNodeModulesJsDepth = 0; + // If a module has some of its imports skipped due to being at the depth limit under node_modules, then track + // this, as it may be imported at a shallower depth later, and then it will need its skipped imports processed. + var modulesWithElidedImports = {}; + // Track source files that are JavaScript files found by searching under node_modules, as these shouldn't be compiled. + var sourceFilesFoundSearchingNodeModules = {}; var start = new Date().getTime(); host = host || createCompilerHost(options); var skipDefaultLib = options.noLib; @@ -42948,10 +43925,12 @@ var ts; var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? ts.createFileMap(function (fileName) { return fileName.toLowerCase(); }) : undefined; if (!tryReuseStructureFromOldProgram()) { ts.forEach(rootNames, function (name) { return processRootFile(name, /*isDefaultLib*/ false); }); - // load type declarations specified via 'types' argument - var typeReferences = getDefaultTypeDirectiveNames(options, rootNames, host); + // load type declarations specified via 'types' argument or implicitly from types/ and node_modules/@types folders + var typeReferences = getAutomaticTypeDirectiveNames(options, rootNames, host); if (typeReferences) { - var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, /*containingFile*/ undefined); + var inferredRoot = getInferredTypesRoot(options, rootNames, host); + var containingFilename = ts.combinePaths(inferredRoot, "__inferred type names__.ts"); + var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename); for (var i = 0; i < typeReferences.length; i++) { processTypeReferenceDirective(typeReferences[i], resolutions[i]); } @@ -43026,8 +44005,8 @@ var ts; // Initialize a checker so that all our files are bound. getTypeChecker(); classifiableNames = {}; - for (var _i = 0, files_3 = files; _i < files_3.length; _i++) { - var sourceFile = files_3[_i]; + for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { + var sourceFile = files_2[_i]; ts.copyMap(sourceFile.classifiableNames, classifiableNames); } } @@ -43048,10 +44027,10 @@ var ts; (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) || + (oldOptions.maxNodeModuleJsDepth !== options.maxNodeModuleJsDepth) || + !ts.arrayIsEqualTo(oldOptions.typeRoots, oldOptions.typeRoots) || !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { return false; @@ -43159,6 +44138,7 @@ var ts; getSourceFile: program.getSourceFile, getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, + isSourceFileFromExternalLibrary: function (file) { return !!ts.lookUp(sourceFilesFoundSearchingNodeModules, file.path); }, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked }; @@ -43383,8 +44363,20 @@ var ts; } break; case 145 /* PropertyDeclaration */: - diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); - return true; + var propertyDeclaration = node; + if (propertyDeclaration.modifiers) { + for (var _i = 0, _a = propertyDeclaration.modifiers; _i < _a.length; _i++) { + var modifier = _a[_i]; + if (modifier.kind !== 113 /* StaticKeyword */) { + diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); + return true; + } + } + } + if (checkTypeAnnotation(node.type)) { + return true; + } + break; case 224 /* EnumDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; @@ -43530,10 +44522,13 @@ var ts; // This type of declaration is permitted only in the global module. // The StringLiteral must specify a top - level external module name. // Relative external module names are not permitted - // NOTE: body of ambient module is always a module block - for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) { - var statement = _a[_i]; - collectModuleReferences(statement, /*inAmbientModule*/ true); + // NOTE: body of ambient module is always a module block, if it exists + var body = node.body; + if (body) { + for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + collectModuleReferences(statement, /*inAmbientModule*/ true); + } } } } @@ -43608,6 +44603,13 @@ var ts; if (file_1 && options.forceConsistentCasingInFileNames && ts.getNormalizedAbsolutePath(file_1.fileName, currentDirectory) !== ts.getNormalizedAbsolutePath(fileName, currentDirectory)) { reportFileNamesDifferOnlyInCasingError(fileName, file_1.fileName, refFile, refPos, refEnd); } + // See if we need to reprocess the imports due to prior skipped imports + if (file_1 && ts.lookUp(modulesWithElidedImports, file_1.path)) { + if (currentNodeModulesJsDepth < maxNodeModulesJsDepth) { + modulesWithElidedImports[file_1.path] = false; + processImportedModules(file_1, ts.getDirectoryPath(fileName)); + } + } return file_1; } // We haven't looked for this file, do so now and cache result @@ -43696,7 +44698,7 @@ var ts; } } else { - fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_name_0, typeReferenceDirective)); + fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_type_definition_file_for_0, typeReferenceDirective)); } if (saveResolution) { resolvedTypeReferenceDirectives[typeReferenceDirective] = resolvedTypeReferenceDirective; @@ -43726,15 +44728,31 @@ var ts; for (var i = 0; i < moduleNames.length; i++) { var resolution = resolutions[i]; ts.setResolvedModule(file, moduleNames[i], resolution); + var resolvedPath = resolution ? ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName) : undefined; // add file to program only if: // - resolution was successful // - noResolve is falsy // - module name comes from the list of imports - var shouldAddFile = resolution && - !options.noResolve && - i < file.imports.length; - if (shouldAddFile) { - findSourceFile(resolution.resolvedFileName, ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName), /*isDefaultLib*/ false, /*isReference*/ false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + // - it's not a top level JavaScript module that exceeded the search max + var isFromNodeModulesSearch = resolution && resolution.isExternalLibraryImport; + var isJsFileFromNodeModules = isFromNodeModulesSearch && ts.hasJavaScriptFileExtension(resolution.resolvedFileName); + if (isFromNodeModulesSearch) { + sourceFilesFoundSearchingNodeModules[resolvedPath] = true; + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth++; + } + var elideImport = isJsFileFromNodeModules && currentNodeModulesJsDepth > maxNodeModulesJsDepth; + var shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport; + if (elideImport) { + modulesWithElidedImports[file.path] = true; + } + else if (shouldAddFile) { + findSourceFile(resolution.resolvedFileName, resolvedPath, + /*isDefaultLib*/ false, /*isReference*/ false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth--; } } } @@ -43868,10 +44886,6 @@ var ts; var span = ts.getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator); programDiagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); } - // Cannot specify module gen target of es6 when below es6 - if (options.module === ts.ModuleKind.ES6 && languageVersion < 2 /* ES6 */) { - programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_compile_modules_into_es2015_when_targeting_ES5_or_lower)); - } // Cannot specify module gen that isn't amd or system with --out if (outFile) { if (options.module && !(options.module === ts.ModuleKind.AMD || options.module === ts.ModuleKind.System)) { @@ -44073,6 +45087,16 @@ var ts; type: "boolean", description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type }, + { + name: "noUnusedLocals", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Locals + }, + { + name: "noUnusedParameters", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Parameters + }, { name: "noLib", type: "boolean" @@ -44268,19 +45292,14 @@ var ts; } }, { - name: "typesSearchPaths", + name: "typeRoots", type: "list", - isTSConfigOnly: true, element: { - name: "typesSearchPaths", + name: "typeRoots", type: "string", isFilePath: true } }, - { - name: "typesRoot", - type: "string" - }, { name: "types", type: "list", @@ -44310,6 +45329,11 @@ var ts; type: "boolean", description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output }, + { + name: "maxNodeModuleJsDepth", + type: "number", + description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files + }, { name: "listEmittedFiles", type: "boolean" @@ -44348,6 +45372,10 @@ var ts; }, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon }, + { + name: "disableSizeLimit", + type: "boolean" + }, { name: "strictNullChecks", type: "boolean", @@ -44418,7 +45446,15 @@ var ts; ts.parseCustomTypeOption = parseCustomTypeOption; /* @internal */ function parseListTypeOption(opt, value, errors) { - var values = trimString((value || "")).split(","); + if (value === void 0) { value = ""; } + value = trimString(value); + if (ts.startsWith(value, "-")) { + return undefined; + } + if (value === "") { + return []; + } + var values = value.split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); @@ -44478,8 +45514,11 @@ var ts; i++; break; case "list": - options[opt.name] = parseListTypeOption(opt, args[i], errors); - i++; + var result = parseListTypeOption(opt, args[i], errors); + options[opt.name] = result || []; + if (result) { + i++; + } break; // If not a primitive, the possible types are specified in what is effectively a map of options. default: @@ -44590,7 +45629,7 @@ var ts; } // Skip over any minified JavaScript files (ending in ".min.js") // Skip over dotted files and folders as well - var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; + var ignoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; /** * Parse the contents of a config file (tsconfig.json). * @param json The contents of the config file to parse @@ -44605,72 +45644,59 @@ var ts; var options = ts.extend(existingOptions, compilerOptions); var typingOptions = convertTypingOptionsFromJsonWorker(json["typingOptions"], basePath, errors, configFileName); options.configFilePath = configFileName; - var fileNames = getFileNames(errors); + var _a = getFileNames(errors), fileNames = _a.fileNames, wildcardDirectories = _a.wildcardDirectories; return { options: options, fileNames: fileNames, typingOptions: typingOptions, raw: json, - errors: errors + errors: errors, + wildcardDirectories: wildcardDirectories }; function getFileNames(errors) { - var fileNames = []; + var fileNames; if (ts.hasProperty(json, "files")) { if (ts.isArray(json["files"])) { - fileNames = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); }); + fileNames = json["files"]; } 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"]; + var includeSpecs; + if (ts.hasProperty(json, "include")) { + if (ts.isArray(json["include"])) { + includeSpecs = json["include"]; } else { - // by default exclude node_modules, and any specificied output directory - exclude = ["node_modules", "bower_components", "jspm_packages"]; - } - var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } - exclude = ts.map(exclude, function (e) { return ts.getNormalizedAbsolutePath(e, basePath); }); - var supportedExtensions = ts.getSupportedExtensions(options); - ts.Debug.assert(ts.indexOf(supportedExtensions, ".ts") < ts.indexOf(supportedExtensions, ".d.ts"), "Changed priority of extensions to pick"); - // Get files of supported extensions in their order of resolution - 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]; - // .ts extension would read the .d.ts extension files too but since .d.ts is lower priority extension, - // lets pick them when its turn comes up - if (extension === ".ts" && ts.fileExtensionIs(fileName, ".d.ts")) { - continue; - } - 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) - // do not include this file if we included .ts or .tsx file with same base name as it could be output of the earlier compilation - 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); - } + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array")); } } - if (ts.hasProperty(json, "excludes") && !ts.hasProperty(json, "exclude")) { + var excludeSpecs; + if (ts.hasProperty(json, "exclude")) { + if (ts.isArray(json["exclude"])) { + excludeSpecs = json["exclude"]; + } + else { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array")); + } + } + else if (ts.hasProperty(json, "excludes")) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); } - return fileNames; + else { + // By default, exclude common package folders + excludeSpecs = ["node_modules", "bower_components", "jspm_packages"]; + } + // Always exclude the output directory unless explicitly included + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + excludeSpecs.push(outDir); + } + if (fileNames === undefined && includeSpecs === undefined) { + includeSpecs = ["**/*"]; + } + return matchFileNames(fileNames, includeSpecs, excludeSpecs, basePath, options, host, errors); } } ts.parseJsonConfigFileContent = parseJsonConfigFileContent; @@ -44752,6 +45778,290 @@ var ts; function trimString(s) { return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, ""); } + /** + * Tests for a path that ends in a recursive directory wildcard. + * Matches **, \**, **\, and \**\, but not a**b. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * (^|\/) # matches either the beginning of the string or a directory separator. + * \*\* # matches the recursive directory wildcard "**". + * \/?$ # matches an optional trailing directory separator at the end of the string. + */ + var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; + /** + * Tests for a path with multiple recursive directory wildcards. + * Matches **\** and **\a\**, but not **\a**b. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * (^|\/) # matches either the beginning of the string or a directory separator. + * \*\*\/ # matches a recursive directory wildcard "**" followed by a directory separator. + * (.*\/)? # optionally matches any number of characters followed by a directory separator. + * \*\* # matches a recursive directory wildcard "**" + * ($|\/) # matches either the end of the string or a directory separator. + */ + var invalidMultipleRecursionPatterns = /(^|\/)\*\*\/(.*\/)?\*\*($|\/)/; + /** + * Tests for a path where .. appears after a recursive directory wildcard. + * Matches **\..\*, **\a\..\*, and **\.., but not ..\**\* + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * (^|\/) # matches either the beginning of the string or a directory separator. + * \*\*\/ # matches a recursive directory wildcard "**" followed by a directory separator. + * (.*\/)? # optionally matches any number of characters followed by a directory separator. + * \.\. # matches a parent directory path component ".." + * ($|\/) # matches either the end of the string or a directory separator. + */ + var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/; + /** + * Tests for a path containing a wildcard character in a directory component of the path. + * Matches \*\, \?\, and \a*b\, but not \a\ or \a\*. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * \/ # matches a directory separator. + * [^/]*? # matches any number of characters excluding directory separators (non-greedy). + * [*?] # matches either a wildcard character (* or ?) + * [^/]* # matches any number of characters excluding directory separators (greedy). + * \/ # matches a directory separator. + */ + var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//; + /** + * Matches the portion of a wildcard path that does not contain wildcards. + * Matches \a of \a\*, or \a\b\c of \a\b\c\?\d. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * ^ # matches the beginning of the string + * [^*?]* # matches any number of non-wildcard characters + * (?=\/[^/]*[*?]) # lookahead that matches a directory separator followed by + * # a path component that contains at least one wildcard character (* or ?). + */ + var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; + /** + * Expands an array of file specifications. + * + * @param fileNames The literal file names to include. + * @param include The wildcard file specifications to include. + * @param exclude The wildcard file specifications to exclude. + * @param basePath The base path for any relative file specifications. + * @param options Compiler options. + * @param host The host used to resolve files and directories. + * @param errors An array for diagnostic reporting. + */ + function matchFileNames(fileNames, include, exclude, basePath, options, host, errors) { + basePath = ts.normalizePath(basePath); + // The exclude spec list is converted into a regular expression, which allows us to quickly + // test whether a file or directory should be excluded before recursively traversing the + // file system. + var keyMapper = host.useCaseSensitiveFileNames ? caseSensitiveKeyMapper : caseInsensitiveKeyMapper; + // Literal file names (provided via the "files" array in tsconfig.json) are stored in a + // file map with a possibly case insensitive key. We use this map later when when including + // wildcard paths. + var literalFileMap = {}; + // Wildcard paths (provided via the "includes" array in tsconfig.json) are stored in a + // file map with a possibly case insensitive key. We use this map to store paths matched + // via wildcard, and to handle extension priority. + var wildcardFileMap = {}; + if (include) { + include = validateSpecs(include, errors, /*allowTrailingRecursion*/ false); + } + if (exclude) { + exclude = validateSpecs(exclude, errors, /*allowTrailingRecursion*/ true); + } + // Wildcard directories (provided as part of a wildcard path) are stored in a + // file map that marks whether it was a regular wildcard match (with a `*` or `?` token), + // or a recursive directory. This information is used by filesystem watchers to monitor for + // new entries in these paths. + var wildcardDirectories = getWildcardDirectories(include, exclude, basePath, host.useCaseSensitiveFileNames); + // Rather than requery this for each file and filespec, we query the supported extensions + // once and store it on the expansion context. + var supportedExtensions = ts.getSupportedExtensions(options); + // Literal files are always included verbatim. An "include" or "exclude" specification cannot + // remove a literal file. + if (fileNames) { + for (var _i = 0, fileNames_1 = fileNames; _i < fileNames_1.length; _i++) { + var fileName = fileNames_1[_i]; + var file = ts.combinePaths(basePath, fileName); + literalFileMap[keyMapper(file)] = file; + } + } + if (include && include.length > 0) { + for (var _a = 0, _b = host.readDirectory(basePath, supportedExtensions, exclude, include); _a < _b.length; _a++) { + var file = _b[_a]; + // If we have already included a literal or wildcard path with a + // higher priority extension, we should skip this file. + // + // This handles cases where we may encounter both .ts and + // .d.ts (or .js if "allowJs" is enabled) in the same + // directory when they are compilation outputs. + if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) { + continue; + } + if (ignoreFileNamePattern.test(file)) { + continue; + } + // We may have included a wildcard path with a lower priority + // extension due to the user-defined order of entries in the + // "include" array. If there is a lower priority extension in the + // same directory, we should remove it. + removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper); + var key = keyMapper(file); + if (!ts.hasProperty(literalFileMap, key) && !ts.hasProperty(wildcardFileMap, key)) { + wildcardFileMap[key] = file; + } + } + } + var literalFiles = ts.reduceProperties(literalFileMap, addFileToOutput, []); + var wildcardFiles = ts.reduceProperties(wildcardFileMap, addFileToOutput, []); + wildcardFiles.sort(host.useCaseSensitiveFileNames ? ts.compareStrings : ts.compareStringsCaseInsensitive); + return { + fileNames: literalFiles.concat(wildcardFiles), + wildcardDirectories: wildcardDirectories + }; + } + function validateSpecs(specs, errors, allowTrailingRecursion) { + var validSpecs = []; + for (var _i = 0, specs_2 = specs; _i < specs_2.length; _i++) { + var spec = specs_2[_i]; + if (!allowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidMultipleRecursionPatterns.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else { + validSpecs.push(spec); + } + } + return validSpecs; + } + /** + * Gets directories in a set of include patterns that should be watched for changes. + */ + function getWildcardDirectories(include, exclude, path, useCaseSensitiveFileNames) { + // We watch a directory recursively if it contains a wildcard anywhere in a directory segment + // of the pattern: + // + // /a/b/**/d - Watch /a/b recursively to catch changes to any d in any subfolder recursively + // /a/b/*/d - Watch /a/b recursively to catch any d in any immediate subfolder, even if a new subfolder is added + // + // We watch a directory without recursion if it contains a wildcard in the file segment of + // the pattern: + // + // /a/b/* - Watch /a/b directly to catch any new file + // /a/b/a?z - Watch /a/b directly to catch any new file matching a?z + var rawExcludeRegex = ts.getRegularExpressionForWildcard(exclude, path, "exclude"); + var excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames ? "" : "i"); + var wildcardDirectories = {}; + if (include !== undefined) { + var recursiveKeys = []; + for (var _i = 0, include_1 = include; _i < include_1.length; _i++) { + var file = include_1[_i]; + var name_35 = ts.normalizePath(ts.combinePaths(path, file)); + if (excludeRegex && excludeRegex.test(name_35)) { + continue; + } + var match = wildcardDirectoryPattern.exec(name_35); + if (match) { + var key = useCaseSensitiveFileNames ? match[0] : match[0].toLowerCase(); + var flags = watchRecursivePattern.test(name_35) ? 1 /* Recursive */ : 0 /* None */; + var existingFlags = ts.getProperty(wildcardDirectories, key); + if (existingFlags === undefined || existingFlags < flags) { + wildcardDirectories[key] = flags; + if (flags === 1 /* Recursive */) { + recursiveKeys.push(key); + } + } + } + } + // Remove any subpaths under an existing recursively watched directory. + for (var key in wildcardDirectories) { + if (ts.hasProperty(wildcardDirectories, key)) { + for (var _a = 0, recursiveKeys_1 = recursiveKeys; _a < recursiveKeys_1.length; _a++) { + var recursiveKey = recursiveKeys_1[_a]; + if (key !== recursiveKey && ts.containsPath(recursiveKey, key, path, !useCaseSensitiveFileNames)) { + delete wildcardDirectories[key]; + } + } + } + } + } + return wildcardDirectories; + } + /** + * Determines whether a literal or wildcard file has already been included that has a higher + * extension priority. + * + * @param file The path to the file. + * @param extensionPriority The priority of the extension. + * @param context The expansion context. + */ + function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var adjustedExtensionPriority = ts.adjustExtensionPriority(extensionPriority); + for (var i = 0 /* Highest */; i < adjustedExtensionPriority; i++) { + var higherPriorityExtension = extensions[i]; + var higherPriorityPath = keyMapper(ts.changeExtension(file, higherPriorityExtension)); + if (ts.hasProperty(literalFiles, higherPriorityPath) || ts.hasProperty(wildcardFiles, higherPriorityPath)) { + return true; + } + } + return false; + } + /** + * Removes files included via wildcard expansion with a lower extension priority that have + * already been included. + * + * @param file The path to the file. + * @param extensionPriority The priority of the extension. + * @param context The expansion context. + */ + function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var nextExtensionPriority = ts.getNextLowestExtensionPriority(extensionPriority); + for (var i = nextExtensionPriority; i < extensions.length; i++) { + var lowerPriorityExtension = extensions[i]; + var lowerPriorityPath = keyMapper(ts.changeExtension(file, lowerPriorityExtension)); + delete wildcardFiles[lowerPriorityPath]; + } + } + /** + * Adds a file to an array of files. + * + * @param output The output array. + * @param file The file path. + */ + function addFileToOutput(output, file) { + output.push(file); + return output; + } + /** + * Gets a case sensitive key. + * + * @param key The original key. + */ + function caseSensitiveKeyMapper(key) { + return key; + } + /** + * Gets a case insensitive key. + * + * @param key The original key. + */ + function caseInsensitiveKeyMapper(key) { + return key.toLowerCase(); + } })(ts || (ts = {})); /* @internal */ var ts; @@ -44839,28 +46149,28 @@ var ts; switch (n.kind) { case 199 /* Block */: if (!ts.isFunctionBlock(n)) { - var parent_14 = n.parent; + var parent_15 = 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_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)); + if (parent_15.kind === 204 /* DoStatement */ || + parent_15.kind === 207 /* ForInStatement */ || + parent_15.kind === 208 /* ForOfStatement */ || + parent_15.kind === 206 /* ForStatement */ || + parent_15.kind === 203 /* IfStatement */ || + parent_15.kind === 205 /* WhileStatement */ || + parent_15.kind === 212 /* WithStatement */ || + parent_15.kind === 252 /* CatchClause */) { + addOutliningSpan(parent_15, openBrace, closeBrace, autoCollapse(n)); break; } - if (parent_14.kind === 216 /* TryStatement */) { + if (parent_15.kind === 216 /* TryStatement */) { // Could be the try-block, or the finally-block. - var tryStatement = parent_14; + var tryStatement = parent_15; if (tryStatement.tryBlock === n) { - addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); + addOutliningSpan(parent_15, openBrace, closeBrace, autoCollapse(n)); break; } else if (tryStatement.finallyBlock === n) { @@ -44929,12 +46239,12 @@ var ts; ts.forEach(program.getSourceFiles(), function (sourceFile) { cancellationToken.throwIfCancellationRequested(); var nameToDeclarations = sourceFile.getNamedDeclarations(); - for (var name_35 in nameToDeclarations) { - var declarations = ts.getProperty(nameToDeclarations, name_35); + for (var name_36 in nameToDeclarations) { + var declarations = ts.getProperty(nameToDeclarations, name_36); if (declarations) { // First do a quick check to see if the name of the declaration matches the // last portion of the (possibly) dotted name they're searching for. - var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_35); + var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_36); if (!matches) { continue; } @@ -44947,14 +46257,14 @@ var ts; if (!containers) { return undefined; } - matches = patternMatcher.getMatches(containers, name_35); + matches = patternMatcher.getMatches(containers, name_36); if (!matches) { continue; } } var fileName = sourceFile.fileName; var matchKind = bestMatchKind(matches); - rawItems.push({ name: name_35, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration }); + rawItems.push({ name: name_36, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration }); } } } @@ -45100,689 +46410,585 @@ var ts; (function (ts) { var NavigationBar; (function (NavigationBar) { - function getNavigationBarItems(sourceFile, compilerOptions) { - // TODO: Handle JS files differently in 'navbar' calls for now, but ideally we should unify - // the 'navbar' and 'navto' logic for TypeScript and JavaScript. - if (ts.isSourceFileJavaScript(sourceFile)) { - return getJsNavigationBarItems(sourceFile, compilerOptions); + function getNavigationBarItems(sourceFile) { + curSourceFile = sourceFile; + var result = ts.map(topLevelItems(rootNavigationBarNode(sourceFile)), convertToTopLevelItem); + curSourceFile = undefined; + return result; + } + NavigationBar.getNavigationBarItems = getNavigationBarItems; + // Keep sourceFile handy so we don't have to search for it every time we need to call `getText`. + var curSourceFile; + function nodeText(node) { + return node.getText(curSourceFile); + } + function navigationBarNodeKind(n) { + return n.node.kind; + } + function pushChild(parent, child) { + if (parent.children) { + parent.children.push(child); } - return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); - function getIndent(node) { - var indent = 1; // Global node is the only one with indent 0. - var current = node.parent; - while (current) { - switch (current.kind) { - 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 === 225 /* ModuleDeclaration */); - // fall through - case 221 /* ClassDeclaration */: - case 224 /* EnumDeclaration */: - case 222 /* InterfaceDeclaration */: - case 220 /* FunctionDeclaration */: - indent++; + else { + parent.children = [child]; + } + } + /* + For performance, we keep navigation bar parents on a stack rather than passing them through each recursion. + `parent` is the current parent and is *not* stored in parentsStack. + `startNode` sets a new parent and `endNode` returns to the previous parent. + */ + var parentsStack = []; + var parent; + function rootNavigationBarNode(sourceFile) { + ts.Debug.assert(!parentsStack.length); + var root = { node: sourceFile, additionalNodes: undefined, parent: undefined, children: undefined, indent: 0 }; + parent = root; + for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + addChildrenRecursively(statement); + } + endNode(); + ts.Debug.assert(!parent && !parentsStack.length); + return root; + } + function addLeafNode(node) { + pushChild(parent, emptyNavigationBarNode(node)); + } + function emptyNavigationBarNode(node) { + return { + node: node, + additionalNodes: undefined, + parent: parent, + children: undefined, + indent: parent.indent + 1 + }; + } + /** + * Add a new level of NavigationBarNodes. + * This pushes to the stack, so you must call `endNode` when you are done adding to this node. + */ + function startNode(node) { + var navNode = emptyNavigationBarNode(node); + pushChild(parent, navNode); + // Save the old parent + parentsStack.push(parent); + parent = navNode; + } + /** Call after calling `startNode` and adding children to it. */ + function endNode() { + if (parent.children) { + mergeChildren(parent.children); + sortChildren(parent.children); + } + parent = parentsStack.pop(); + } + function addNodeWithRecursiveChild(node, child) { + startNode(node); + addChildrenRecursively(child); + endNode(); + } + /** Look for navigation bar items in node's subtree, adding them to the current `parent`. */ + function addChildrenRecursively(node) { + if (!node || ts.isToken(node)) { + return; + } + switch (node.kind) { + case 148 /* Constructor */: + // Get parameter properties, and treat them as being on the *same* level as the constructor, not under it. + var ctr = node; + addNodeWithRecursiveChild(ctr, ctr.body); + // Parameter properties are children of the class, not the constructor. + for (var _i = 0, _a = ctr.parameters; _i < _a.length; _i++) { + var param = _a[_i]; + if (ts.isParameterPropertyDeclaration(param)) { + addLeafNode(param); + } } - current = current.parent; - } - return indent; - } - function getChildNodes(nodes) { - var childNodes = []; - function visit(node) { - switch (node.kind) { - case 200 /* VariableStatement */: - ts.forEach(node.declarationList.declarations, visit); - break; - case 167 /* ObjectBindingPattern */: - case 168 /* ArrayBindingPattern */: - ts.forEach(node.elements, visit); - break; - 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 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 146 /* MethodSignature */: + if (!ts.hasDynamicName(node)) { + addNodeWithRecursiveChild(node, node.body); + } + break; + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + if (!ts.hasDynamicName(node)) { + addLeafNode(node); + } + break; + case 231 /* ImportClause */: + var importClause = node; + // Handle default import case e.g.: + // import d from "mod"; + if (importClause.name) { + addLeafNode(importClause); + } + // Handle named bindings in imports e.g.: + // import * as NS from "mod"; + // import {a, b as B} from "mod"; + var namedBindings = importClause.namedBindings; + if (namedBindings) { + if (namedBindings.kind === 232 /* NamespaceImport */) { + addLeafNode(namedBindings); + } + else { + for (var _b = 0, _c = namedBindings.elements; _b < _c.length; _b++) { + var element = _c[_b]; + addLeafNode(element); } - break; - case 230 /* ImportDeclaration */: - var importClause = node.importClause; - if (importClause) { - // Handle default import case e.g.: - // import d from "mod"; - if (importClause.name) { - childNodes.push(importClause); - } - // Handle named bindings in imports e.g.: - // import * as NS from "mod"; - // import {a, b as B} from "mod"; - if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 232 /* NamespaceImport */) { - childNodes.push(importClause.namedBindings); - } - else { - ts.forEach(importClause.namedBindings.elements, visit); - } - } - } - break; - case 169 /* BindingElement */: - case 218 /* VariableDeclaration */: - if (ts.isBindingPattern(node.name)) { - visit(node.name); - break; - } - // Fall through - case 221 /* ClassDeclaration */: - case 224 /* EnumDeclaration */: - case 222 /* InterfaceDeclaration */: - case 225 /* ModuleDeclaration */: - case 220 /* FunctionDeclaration */: - case 229 /* ImportEqualsDeclaration */: - case 234 /* ImportSpecifier */: - case 238 /* ExportSpecifier */: - case 223 /* TypeAliasDeclaration */: - childNodes.push(node); - break; + } } - } - // for (let i = 0, n = nodes.length; i < n; i++) { - // let node = nodes[i]; - // if (node.kind === SyntaxKind.ClassDeclaration || - // node.kind === SyntaxKind.EnumDeclaration || - // node.kind === SyntaxKind.InterfaceDeclaration || - // node.kind === SyntaxKind.ModuleDeclaration || - // node.kind === SyntaxKind.FunctionDeclaration) { - // childNodes.push(node); - // } - // else if (node.kind === SyntaxKind.VariableStatement) { - // childNodes.push.apply(childNodes, (node).declarations); - // } - // } - 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 localeCompareFix(ts.getPropertyNameForPropertyNameNode(n1.name), ts.getPropertyNameForPropertyNameNode(n2.name)); + break; + case 169 /* BindingElement */: + case 218 /* VariableDeclaration */: + var decl = node; + var name_37 = decl.name; + if (ts.isBindingPattern(name_37)) { + addChildrenRecursively(name_37); } - else if (n1.name) { - return 1; - } - else if (n2.name) { - return -1; + else if (decl.initializer && isFunctionOrClassExpression(decl.initializer)) { + // For `const x = function() {}`, just use the function node, not the const. + addChildrenRecursively(decl.initializer); } else { - return n1.kind - n2.kind; + addNodeWithRecursiveChild(decl, decl.initializer); } - }); - // node 0.10 treats "a" as greater than "B". - // For consistency, sort alphabetically, falling back to which is lower-case. - function localeCompareFix(a, b) { - var cmp = a.toLowerCase().localeCompare(b.toLowerCase()); - if (cmp !== 0) - return cmp; - // Return the *opposite* of the `<` operator, which works the same in node 0.10 and 6.0. - return a < b ? 1 : a > b ? -1 : 0; - } - } - 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 /* ClassDeclaration */: - topLevelNodes.push(node); - for (var _a = 0, _b = node.members; _a < _b.length; _a++) { - var member = _b[_a]; - 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)) { - topLevelNodes.push(member); - } - addTopLevelNodes(member.body.statements, topLevelNodes); - } + break; + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + addNodeWithRecursiveChild(node, node.body); + break; + case 224 /* EnumDeclaration */: + startNode(node); + for (var _d = 0, _e = node.members; _d < _e.length; _d++) { + var member = _e[_d]; + if (!isComputedProperty(member)) { + addLeafNode(member); + } + } + endNode(); + break; + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + startNode(node); + for (var _f = 0, _g = node.members; _f < _g.length; _f++) { + var member = _g[_f]; + addChildrenRecursively(member); + } + endNode(); + break; + case 225 /* ModuleDeclaration */: + addNodeWithRecursiveChild(node, getInteriorModule(node).body); + break; + case 238 /* ExportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 153 /* IndexSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 223 /* TypeAliasDeclaration */: + addLeafNode(node); + break; + default: + if (node.jsDocComments) { + for (var _h = 0, _j = node.jsDocComments; _h < _j.length; _h++) { + var jsDocComment = _j[_h]; + for (var _k = 0, _l = jsDocComment.tags; _k < _l.length; _k++) { + var tag = _l[_k]; + if (tag.kind === 279 /* JSDocTypedefTag */) { + addLeafNode(tag); } } - break; - case 224 /* EnumDeclaration */: - case 222 /* InterfaceDeclaration */: - case 223 /* TypeAliasDeclaration */: - topLevelNodes.push(node); - break; - case 225 /* ModuleDeclaration */: - var moduleDeclaration = node; - topLevelNodes.push(node); - addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes); - break; - case 220 /* FunctionDeclaration */: - var functionDeclaration = node; - if (isTopLevelFunctionDeclaration(functionDeclaration)) { - topLevelNodes.push(node); - addTopLevelNodes(functionDeclaration.body.statements, topLevelNodes); - } - break; + } } - } + ts.forEachChild(node, addChildrenRecursively); } - function hasNamedFunctionDeclarations(nodes) { - for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) { - var s = nodes_5[_i]; - if (s.kind === 220 /* FunctionDeclaration */ && !isEmpty(s.name.text)) { + } + /** Merge declarations of the same kind. */ + function mergeChildren(children) { + var nameToItems = {}; + ts.filterMutate(children, function (child) { + var decl = child.node; + var name = decl.name && nodeText(decl.name); + if (!name) { + // Anonymous items are never merged. + return true; + } + var itemsWithSameName = ts.getProperty(nameToItems, name); + if (!itemsWithSameName) { + nameToItems[name] = child; + return true; + } + if (itemsWithSameName instanceof Array) { + for (var _i = 0, itemsWithSameName_1 = itemsWithSameName; _i < itemsWithSameName_1.length; _i++) { + var itemWithSameName = itemsWithSameName_1[_i]; + if (tryMerge(itemWithSameName, child)) { + return false; + } + } + itemsWithSameName.push(child); + return true; + } + else { + var itemWithSameName = itemsWithSameName; + if (tryMerge(itemWithSameName, child)) { + return false; + } + nameToItems[name] = [itemWithSameName, child]; + return true; + } + function tryMerge(a, b) { + if (shouldReallyMerge(a.node, b.node)) { + merge(a, b); return true; } + return false; } - return false; - } - function isTopLevelFunctionDeclaration(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 === 199 /* Block */) { - // Proper function declarations can only have identifier names - if (hasNamedFunctionDeclarations(functionDeclaration.body.statements)) { - return true; - } - // Or if it is not parented by another function. I.e all functions at module scope are 'top level'. - if (!ts.isFunctionBlock(functionDeclaration.parent)) { - return true; - } - else { - // We have made sure that a grand parent node exists with 'isFunctionBlock()' above. - var grandParentKind = functionDeclaration.parent.parent.kind; - if (grandParentKind === 147 /* MethodDeclaration */ || - grandParentKind === 148 /* Constructor */) { - return true; - } - } + }); + /** a and b have the same name, but they may not be mergeable. */ + function shouldReallyMerge(a, b) { + return a.kind === b.kind && (a.kind !== 225 /* ModuleDeclaration */ || areSameModule(a, b)); + // We use 1 NavNode to represent 'A.B.C', but there are multiple source nodes. + // Only merge module nodes that have the same chain. Don't merge 'A.B.C' with 'A'! + function areSameModule(a, b) { + if (a.body.kind !== b.body.kind) { + return false; } - } - 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) { - // We had an item with the same name. Merge these items together. - merge(itemWithSameName, item); - } - else { - keyToItem[key] = item; - items.push(item); - } - } + if (a.body.kind !== 225 /* ModuleDeclaration */) { + return true; } + return areSameModule(a.body, b.body); } - return items; } + /** Merge source into target. Source should be thrown away after this is called. */ function merge(target, source) { - // First, add any spans in the source to the target. - ts.addRange(target.spans, source.spans); - if (source.childItems) { - if (!target.childItems) { - target.childItems = []; - } - // Next, recursively merge or add any children in the source as appropriate. - 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) { - // Found a match. merge them. - merge(targetChild, sourceChild); - continue outer; - } - } - // Didn't find a match, just add this child to the list. - target.childItems.push(sourceChild); - } + target.additionalNodes = target.additionalNodes || []; + target.additionalNodes.push(source.node); + if (source.additionalNodes) { + (_a = target.additionalNodes).push.apply(_a, source.additionalNodes); + } + target.children = ts.concatenate(target.children, source.children); + if (target.children) { + mergeChildren(target.children); + sortChildren(target.children); + } + var _a; + } + } + /** Recursively ensure that each NavNode's children are in sorted order. */ + function sortChildren(children) { + children.sort(compareChildren); + } + function compareChildren(child1, child2) { + var name1 = tryGetName(child1.node), name2 = tryGetName(child2.node); + if (name1 && name2) { + var cmp = localeCompareFix(name1, name2); + return cmp !== 0 ? cmp : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + else { + return name1 ? 1 : name2 ? -1 : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + } + // More efficient to create a collator once and use its `compare` than to call `a.localeCompare(b)` many times. + var collator = typeof Intl === "undefined" ? undefined : new Intl.Collator(); + // Intl is missing in Safari, and node 0.10 treats "a" as greater than "B". + var localeCompareIsCorrect = collator && collator.compare("a", "B") < 0; + var localeCompareFix = localeCompareIsCorrect ? collator.compare : function (a, b) { + // This isn't perfect, but it passes all of our tests. + for (var i = 0; i < Math.min(a.length, b.length); i++) { + var chA = a.charAt(i), chB = b.charAt(i); + if (chA === "\"" && chB === "'") { + return 1; + } + if (chA === "'" && chB === "\"") { + return -1; + } + var cmp = chA.toLocaleLowerCase().localeCompare(chB.toLocaleLowerCase()); + if (cmp !== 0) { + return cmp; } } - function createChildItem(node) { - switch (node.kind) { - case 142 /* Parameter */: - if (ts.isBindingPattern(node.name)) { - break; - } - if ((node.flags & 1023 /* Modifier */) === 0) { - return undefined; - } - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 147 /* MethodDeclaration */: - case 146 /* MethodSignature */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement); - case 149 /* GetAccessor */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement); - case 150 /* SetAccessor */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement); - case 153 /* IndexSignature */: - return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); - case 224 /* EnumDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.enumElement); - case 255 /* EnumMember */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 225 /* ModuleDeclaration */: - return createItem(node, getModuleName(node), ts.ScriptElementKind.moduleElement); - case 222 /* InterfaceDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.interfaceElement); - case 223 /* TypeAliasDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.typeElement); - case 151 /* CallSignature */: - return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); - case 152 /* ConstructSignature */: - return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); - case 145 /* PropertyDeclaration */: - case 144 /* PropertySignature */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 221 /* ClassDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.classElement); - case 220 /* FunctionDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); - case 218 /* VariableDeclaration */: - case 169 /* BindingElement */: - var variableDeclarationNode = void 0; - var name_36; - if (node.kind === 169 /* BindingElement */) { - name_36 = node.name; - variableDeclarationNode = node; - // binding elements are added only for variable declarations - // bubble up to the containing variable declaration - while (variableDeclarationNode && variableDeclarationNode.kind !== 218 /* VariableDeclaration */) { - variableDeclarationNode = variableDeclarationNode.parent; - } - ts.Debug.assert(variableDeclarationNode !== undefined); - } - else { - ts.Debug.assert(!ts.isBindingPattern(node.name)); - variableDeclarationNode = node; - name_36 = node.name; - } - if (ts.isConst(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.constElement); - } - else if (ts.isLet(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.letElement); - } - else { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.variableElement); - } - case 148 /* Constructor */: - return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); - 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; - function createItem(node, name, scriptElementKind) { - return getNavigationBarItem(name, scriptElementKind, ts.getNodeModifiers(node), [getNodeSpan(node)]); - } + return a.length - b.length; + }; + /** + * This differs from getItemName because this is just used for sorting. + * We only sort nodes by name that have a more-or-less "direct" name, as opposed to `new()` and the like. + * So `new()` can still come before an `aardvark` method. + */ + function tryGetName(node) { + if (node.kind === 225 /* ModuleDeclaration */) { + return getModuleName(node); } - function isEmpty(text) { - return !text || text.trim() === ""; + var decl = node; + if (decl.name) { + return ts.getPropertyNameForPropertyNameNode(decl.name); } - function getNavigationBarItem(text, kind, kindModifiers, spans, childItems, indent) { - if (childItems === void 0) { childItems = []; } - if (indent === void 0) { indent = 0; } - if (isEmpty(text)) { + switch (node.kind) { + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 192 /* ClassExpression */: + return getFunctionOrClassName(node); + case 279 /* JSDocTypedefTag */: + return getJSDocTypedefTagName(node); + default: return undefined; + } + } + function getItemName(node) { + if (node.kind === 225 /* ModuleDeclaration */) { + return getModuleName(node); + } + var name = node.name; + if (name) { + var text = nodeText(name); + if (text.length > 0) { + return text; } + } + switch (node.kind) { + case 256 /* SourceFile */: + var sourceFile = node; + return ts.isExternalModule(sourceFile) + ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\"" + : ""; + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + if (node.flags & 512 /* Default */) { + return "default"; + } + return getFunctionOrClassName(node); + case 148 /* Constructor */: + return "constructor"; + case 152 /* ConstructSignature */: + return "new()"; + case 151 /* CallSignature */: + return "()"; + case 153 /* IndexSignature */: + return "[]"; + case 279 /* JSDocTypedefTag */: + return getJSDocTypedefTagName(node); + default: + return ""; + } + } + function getJSDocTypedefTagName(node) { + if (node.name) { + return node.name.text; + } + else { + var parentNode = node.parent && node.parent.parent; + if (parentNode && parentNode.kind === 200 /* VariableStatement */) { + if (parentNode.declarationList.declarations.length > 0) { + var nameIdentifier = parentNode.declarationList.declarations[0].name; + if (nameIdentifier.kind === 69 /* Identifier */) { + return nameIdentifier.text; + } + } + } + return ""; + } + } + /** Flattens the NavNode tree to a list, keeping only the top-level items. */ + function topLevelItems(root) { + var topLevel = []; + function recur(item) { + if (isTopLevel(item)) { + topLevel.push(item); + if (item.children) { + for (var _i = 0, _a = item.children; _i < _a.length; _i++) { + var child = _a[_i]; + recur(child); + } + } + } + } + recur(root); + return topLevel; + function isTopLevel(item) { + switch (navigationBarNodeKind(item)) { + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 256 /* SourceFile */: + case 223 /* TypeAliasDeclaration */: + case 279 /* JSDocTypedefTag */: + return true; + case 148 /* Constructor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + return hasSomeImportantChild(item); + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + return isTopLevelFunctionDeclaration(item); + default: + return false; + } + function isTopLevelFunctionDeclaration(item) { + if (!item.node.body) { + return false; + } + switch (navigationBarNodeKind(item.parent)) { + case 226 /* ModuleBlock */: + case 256 /* SourceFile */: + case 147 /* MethodDeclaration */: + case 148 /* Constructor */: + return true; + default: + return hasSomeImportantChild(item); + } + } + function hasSomeImportantChild(item) { + return ts.forEach(item.children, function (child) { + var childKind = navigationBarNodeKind(child); + return childKind !== 218 /* VariableDeclaration */ && childKind !== 169 /* BindingElement */; + }); + } + } + } + // NavigationBarItem requires an array, but will not mutate it, so just give it this for performance. + var emptyChildItemArray = []; + function convertToTopLevelItem(n) { + return { + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: ts.getNodeModifiers(n.node), + spans: getSpans(n), + childItems: ts.map(n.children, convertToChildItem) || emptyChildItemArray, + indent: n.indent, + bolded: false, + grayed: false + }; + function convertToChildItem(n) { return { - text: text, - kind: kind, - kindModifiers: kindModifiers, - spans: spans, - childItems: childItems, - indent: indent, + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: ts.getNodeModifiers(n.node), + spans: getSpans(n), + childItems: emptyChildItemArray, + indent: 0, bolded: false, grayed: false }; } - function createTopLevelItem(node) { - switch (node.kind) { - case 256 /* SourceFile */: - return createSourceFileItem(node); - case 221 /* ClassDeclaration */: - return createClassItem(node); - case 147 /* MethodDeclaration */: - case 148 /* Constructor */: - return createMemberFunctionLikeItem(node); - case 224 /* EnumDeclaration */: - return createEnumItem(node); - case 222 /* InterfaceDeclaration */: - return createInterfaceItem(node); - case 225 /* ModuleDeclaration */: - return createModuleItem(node); - case 220 /* FunctionDeclaration */: - return createFunctionItem(node); - case 223 /* TypeAliasDeclaration */: - return createTypeAliasItem(node); - } - return undefined; - 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 /* 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)); + function getSpans(n) { + var spans = [getNodeSpan(n.node)]; + if (n.additionalNodes) { + for (var _i = 0, _a = n.additionalNodes; _i < _a.length; _i++) { + var node = _a[_i]; + spans.push(getNodeSpan(node)); } - return 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 /* Block */) { - var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); - var scriptElementKind = void 0; - var memberFunctionName = void 0; - if (node.kind === 147 /* MethodDeclaration */) { - 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); - 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 /* 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. - 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 getModuleName(moduleDeclaration) { - // We want to maintain quotation marks. - if (ts.isAmbientModule(moduleDeclaration)) { - return getTextOfNode(moduleDeclaration.name); - } - // 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 === 225 /* ModuleDeclaration */) { - moduleDeclaration = moduleDeclaration.body; - result.push(moduleDeclaration.name.text); - } - return result.join("."); - } - function removeComputedProperties(node) { - 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 - */ - function removeDynamicallyNamedProperties(node) { - return ts.filter(node.members, function (member) { return !ts.hasDynamicName(member); }); - } - function getInnermostModule(node) { - while (node.body.kind === 225 /* ModuleDeclaration */) { - node = node.body; - } - return node; - } - function getNodeSpan(node) { - return node.kind === 256 /* SourceFile */ - ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) - : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); - } - function getTextOfNode(node) { - return ts.getTextOfNodeFromSourceText(sourceFile.text, node); + return spans; } } - 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; - // Walk the whole file, because we want to also find function expressions - which may be in variable initializer, - // call arguments, expressions, etc... - ts.forEachChild(sourceFile, visitNode); - function visitNode(node) { - var newItem = createNavBarItem(node); - if (newItem) { - topItem.childItems.push(newItem); - } - if (node.jsDocComments && node.jsDocComments.length > 0) { - for (var _i = 0, _a = node.jsDocComments; _i < _a.length; _i++) { - var jsDocComment = _a[_i]; - visitNode(jsDocComment); - } - } - // Add a level if traversing into a container - if (newItem && (ts.isFunctionLike(node) || ts.isClassLike(node))) { - var lastTop = topItem; - indent++; - topItem = newItem; - ts.forEachChild(node, visitNode); - topItem = lastTop; - indent--; - // If the last item added was an anonymous function expression, and it had no children, discard it. - 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 /* 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 !== 256 /* SourceFile */) { - return undefined; + // TODO: GH#9145: We should just use getNodeKind. No reason why navigationBar and navigateTo should have different behaviors. + function nodeKind(node) { + switch (node.kind) { + case 256 /* SourceFile */: + return ts.ScriptElementKind.moduleElement; + case 255 /* EnumMember */: + return ts.ScriptElementKind.memberVariableElement; + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: + var variableDeclarationNode = void 0; + var name_38; + if (node.kind === 169 /* BindingElement */) { + name_38 = node.name; + variableDeclarationNode = node; + // binding elements are added only for variable declarations + // bubble up to the containing variable declaration + while (variableDeclarationNode && variableDeclarationNode.kind !== 218 /* VariableDeclaration */) { + variableDeclarationNode = variableDeclarationNode.parent; } - // 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 === 179 /* FunctionExpression */ || - varDecl.initializer.kind === 180 /* ArrowFunction */ || - varDecl.initializer.kind === 192 /* ClassExpression */)) { - return undefined; - } - // Fall through - 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_37 = node.flags && (node.flags & 512 /* Default */) && !node.name ? "default" : - node.kind === 148 /* Constructor */ ? "constructor" : - ts.declarationNameToString(node.name); - return getNavBarItem(name_37, getScriptKindForElementKind(node.kind), [getNodeSpan(node)]); - case 179 /* FunctionExpression */: - case 180 /* ArrowFunction */: - case 192 /* ClassExpression */: - return getDefineModuleItem(node) || getFunctionOrClassExpressionItem(node); - case 147 /* MethodDeclaration */: - var methodDecl = node; - return getNavBarItem(ts.declarationNameToString(methodDecl.name), ts.ScriptElementKind.memberFunctionElement, [getNodeSpan(node)]); - case 235 /* ExportAssignment */: - // e.g. "export default " - return getNavBarItem("default", ts.ScriptElementKind.variableElement, [getNodeSpan(node)]); - 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 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 === 238 /* ExportSpecifier */) { - 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)]); - case 279 /* JSDocTypedefTag */: - if (node.name) { - return getNavBarItem(node.name.text, ts.ScriptElementKind.typeElement, [getNodeSpan(node)]); - } - else { - var parentNode = node.parent && node.parent.parent; - if (parentNode && parentNode.kind === 200 /* VariableStatement */) { - if (parentNode.declarationList.declarations.length > 0) { - var nameIdentifier = parentNode.declarationList.declarations[0].name; - if (nameIdentifier.kind === 69 /* Identifier */) { - return getNavBarItem(nameIdentifier.text, ts.ScriptElementKind.typeElement, [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 /* 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 !== 174 /* CallExpression */) { - return undefined; - } - var callExpr = node.parent; - 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 - var defaultName = node.getSourceFile().fileName; - if (callExpr.arguments[0].kind === 9 /* StringLiteral */) { - defaultName = (callExpr.arguments[0]).text; - } - return getNavBarItem(defaultName, ts.ScriptElementKind.moduleElement, [getNodeSpan(node.parent)]); - } - function getFunctionOrClassExpressionItem(node) { - if (node.kind !== 179 /* FunctionExpression */ && - node.kind !== 180 /* ArrowFunction */ && - node.kind !== 192 /* ClassExpression */) { - return undefined; - } - var fnExpr = node; - var fnName; - if (fnExpr.name && ts.getFullWidth(fnExpr.name) > 0) { - // The expression has an identifier, so use that as the name - fnName = ts.declarationNameToString(fnExpr.name); - } - else { - // See if it is a var initializer. If so, use the var name. - if (fnExpr.parent.kind === 218 /* VariableDeclaration */) { - fnName = ts.declarationNameToString(fnExpr.parent.name); - } - else if (fnExpr.parent.kind === 187 /* BinaryExpression */ && - fnExpr.parent.operatorToken.kind === 56 /* EqualsToken */) { - fnName = fnExpr.parent.left.getText(); - } - else if (fnExpr.parent.kind === 253 /* PropertyAssignment */ && - fnExpr.parent.name) { - fnName = fnExpr.parent.name.getText(); + ts.Debug.assert(!!variableDeclarationNode); } else { - fnName = node.kind === 192 /* ClassExpression */ ? anonClassText : anonFnText; + ts.Debug.assert(!ts.isBindingPattern(node.name)); + variableDeclarationNode = node; + name_38 = node.name; } - } - var scriptKind = node.kind === 192 /* ClassExpression */ ? ts.ScriptElementKind.classElement : ts.ScriptElementKind.functionElement; - return getNavBarItem(fnName, scriptKind, [getNodeSpan(node)]); - } - function getNodeSpan(node) { - return node.kind === 256 /* SourceFile */ - ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) - : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); - } - function getScriptKindForElementKind(kind) { - switch (kind) { - case 218 /* VariableDeclaration */: + if (ts.isConst(variableDeclarationNode)) { + return ts.ScriptElementKind.constElement; + } + else if (ts.isLet(variableDeclarationNode)) { + return ts.ScriptElementKind.letElement; + } + else { return ts.ScriptElementKind.variableElement; - case 220 /* FunctionDeclaration */: - return ts.ScriptElementKind.functionElement; - case 221 /* ClassDeclaration */: - return ts.ScriptElementKind.classElement; - case 148 /* Constructor */: - return ts.ScriptElementKind.constructorImplementationElement; - case 149 /* GetAccessor */: - return ts.ScriptElementKind.memberGetAccessorElement; - case 150 /* SetAccessor */: - return ts.ScriptElementKind.memberSetAccessorElement; - default: - return "unknown"; - } + } + case 180 /* ArrowFunction */: + return ts.ScriptElementKind.functionElement; + case 279 /* JSDocTypedefTag */: + return ts.ScriptElementKind.typeElement; + default: + return ts.getNodeKind(node); } - return sourceFileItem.childItems; } - NavigationBar.getJsNavigationBarItems = getJsNavigationBarItems; + function getModuleName(moduleDeclaration) { + // We want to maintain quotation marks. + if (ts.isAmbientModule(moduleDeclaration)) { + return ts.getTextOfNode(moduleDeclaration.name); + } + // 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 === 225 /* ModuleDeclaration */) { + moduleDeclaration = moduleDeclaration.body; + result.push(moduleDeclaration.name.text); + } + return result.join("."); + } + /** + * For 'module A.B.C', we want to get the node for 'C'. + * We store 'A' as associated with a NavNode, and use getModuleName to traverse down again. + */ + function getInteriorModule(decl) { + return decl.body.kind === 225 /* ModuleDeclaration */ ? getInteriorModule(decl.body) : decl; + } + function isComputedProperty(member) { + return !member.name || member.name.kind === 140 /* ComputedPropertyName */; + } + function getNodeSpan(node) { + return node.kind === 256 /* SourceFile */ + ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) + : ts.createTextSpanFromBounds(node.getStart(curSourceFile), node.getEnd()); + } + function getFunctionOrClassName(node) { + if (node.name && ts.getFullWidth(node.name) > 0) { + return ts.declarationNameToString(node.name); + } + else if (node.parent.kind === 218 /* VariableDeclaration */) { + return ts.declarationNameToString(node.parent.name); + } + else if (node.parent.kind === 187 /* BinaryExpression */ && + node.parent.operatorToken.kind === 56 /* EqualsToken */) { + return nodeText(node.parent.left); + } + else if (node.parent.kind === 253 /* PropertyAssignment */ && node.parent.name) { + return nodeText(node.parent.name); + } + else if (node.flags & 512 /* Default */) { + return "default"; + } + else { + return ts.isClassLike(node) ? "" : ""; + } + } + function isFunctionOrClassExpression(node) { + return node.kind === 179 /* FunctionExpression */ || node.kind === 180 /* ArrowFunction */ || node.kind === 192 /* ClassExpression */; + } })(NavigationBar = ts.NavigationBar || (ts.NavigationBar = {})); })(ts || (ts = {})); /* @internal */ @@ -46652,8 +47858,8 @@ var ts; return undefined; } function getArgumentIndex(argumentsList, node) { - // The list we got back can include commas. In the presence of errors it may - // also just have nodes without commas. For example "Foo(a b c)" will have 3 + // The list we got back can include commas. In the presence of errors it may + // also just have nodes without commas. For example "Foo(a b c)" will have 3 // args without commas. We want to find what index we're at. So we count // forward until we hit ourselves, only incrementing the index if it isn't a // comma. @@ -46684,8 +47890,8 @@ var ts; // 'a' ''. So, in the case where the last child is a comma, we increase the // arg count by one to compensate. // - // Note: this subtlety only applies to the last comma. If you had "Foo(a,," then - // we'll have: 'a' '' '' + // Note: this subtlety only applies to the last comma. If you had "Foo(a,," then + // we'll have: 'a' '' '' // That will give us 2 non-commas. We then add one for the last comma, givin us an // arg count of 3. var listChildren = argumentsList.getChildren(); @@ -46833,7 +48039,7 @@ var ts; signatureHelpParameters = typeParameters && typeParameters.length > 0 ? ts.map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray; suffixDisplayParts.push(ts.punctuationPart(27 /* GreaterThanToken */)); var parameterParts = ts.mapToDisplayParts(function (writer) { - return typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisType, candidateSignature.parameters, writer, invocation); + return typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisParameter, candidateSignature.parameters, writer, invocation); }); ts.addRange(suffixDisplayParts, parameterParts); } @@ -46950,6 +48156,8 @@ var ts; case 199 /* Block */: case 226 /* ModuleBlock */: case 227 /* CaseBlock */: + case 233 /* NamedImports */: + case 237 /* NamedExports */: return nodeEndsWith(n, 16 /* CloseBraceToken */, sourceFile); case 252 /* CatchClause */: return isCompletedNode(n.block, sourceFile); @@ -47037,6 +48245,9 @@ var ts; return isCompletedNode(lastSpan, sourceFile); case 197 /* TemplateSpan */: return ts.nodeIsPresent(n.literal); + case 236 /* ExportDeclaration */: + case 230 /* ImportDeclaration */: + return ts.nodeIsPresent(n.moduleSpecifier); case 185 /* PrefixUnaryExpression */: return isCompletedNode(n.operand, sourceFile); case 187 /* BinaryExpression */: @@ -47848,9 +49059,9 @@ var ts; } getTypingNamesFromSourceFileNames(fileNames); // Add the cached typing locations for inferred typings that are already installed - for (var name_38 in packageNameToTypingLocation) { - if (ts.hasProperty(inferredTypings, name_38) && !inferredTypings[name_38]) { - inferredTypings[name_38] = packageNameToTypingLocation[name_38]; + for (var name_39 in packageNameToTypingLocation) { + if (ts.hasProperty(inferredTypings, name_39) && !inferredTypings[name_39]) { + inferredTypings[name_39] = packageNameToTypingLocation[name_39]; } } // Remove typings that the user has added to the exclude list @@ -47936,9 +49147,9 @@ var ts; return; } var typingNames = []; - var fileNames = host.readDirectory(nodeModulesPath, "*.json", /*exclude*/ undefined, /*depth*/ 2); - for (var _i = 0, fileNames_1 = fileNames; _i < fileNames_1.length; _i++) { - var fileName = fileNames_1[_i]; + var fileNames = host.readDirectory(nodeModulesPath, ["*.json"], /*excludes*/ undefined, /*includes*/ undefined, /*depth*/ 2); + for (var _i = 0, fileNames_2 = fileNames; _i < fileNames_2.length; _i++) { + var fileName = fileNames_2[_i]; var normalizedFileName = ts.normalizePath(fileName); if (ts.getBaseFileName(normalizedFileName) !== "package.json") { continue; @@ -48012,6 +49223,7 @@ var ts; isOnToken: isOnToken, getCurrentLeadingTrivia: function () { return leadingTrivia; }, lastTrailingTriviaWasNewLine: function () { return wasNewLine; }, + skipToEndOf: skipToEndOf, close: function () { ts.Debug.assert(scanner !== undefined); lastTokenInfo = undefined; @@ -48204,6 +49416,15 @@ var ts; } return tokenInfo; } + function skipToEndOf(node) { + scanner.setTextPos(node.end); + savedPos = scanner.getStartPos(); + lastScanAction = undefined; + lastTokenInfo = undefined; + wasNewLine = false; + leadingTrivia = undefined; + trailingTrivia = undefined; + } } formatting.getFormattingScanner = getFormattingScanner; })(formatting = ts.formatting || (ts.formatting = {})); @@ -48487,7 +49708,7 @@ var ts; this.FunctionOpenBraceLeftTokenRange = formatting.Shared.TokenRange.AnyIncludingMultilineComments; this.SpaceBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 15 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2 /* Space */), 1 /* CanDeleteNewLines */); // Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc) - this.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([69 /* Identifier */, 3 /* MultiLineCommentTrivia */, 73 /* ClassKeyword */]); + this.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([69 /* Identifier */, 3 /* MultiLineCommentTrivia */, 73 /* ClassKeyword */, 82 /* ExportKeyword */, 89 /* ImportKeyword */]); this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 15 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2 /* Space */), 1 /* CanDeleteNewLines */); // Place a space before open brace in a control flow construct this.ControlOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([18 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 79 /* DoKeyword */, 100 /* TryKeyword */, 85 /* FinallyKeyword */, 80 /* ElseKeyword */]); @@ -48529,7 +49750,7 @@ var ts; this.NoSpaceBetweenReturnAndSemicolon = new formatting.Rule(formatting.RuleDescriptor.create1(94 /* ReturnKeyword */, 23 /* SemicolonToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); // Add a space between statements. All keywords except (do,else,case) has open/close parens after them. // So, we have a rule to add a space for [),Any], [do,Any], [else,Any], and [case,Any] - this.SpaceBetweenStatements = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([18 /* CloseParenToken */, 79 /* DoKeyword */, 80 /* ElseKeyword */, 71 /* CaseKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotForContext), 2 /* Space */)); + this.SpaceBetweenStatements = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([18 /* CloseParenToken */, 79 /* DoKeyword */, 80 /* ElseKeyword */, 71 /* CaseKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext, Rules.IsNotForContext), 2 /* Space */)); // This low-pri rule takes care of "try {" and "finally {" in case the rule SpaceBeforeOpenBraceInControl didn't execute on FormatOnEnter. 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() {} @@ -48544,8 +49765,8 @@ var ts; // 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 */, 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 */, 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 */)); + 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 */, 136 /* FromKeyword */]), 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 */, 136 /* FromKeyword */])), 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 */)); // Lambda expressions @@ -48636,8 +49857,8 @@ var ts; /// Rules controlled by user options /// // Insert space after comma delimiter - this.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNextTokenNotCloseBracket), 2 /* Space */)); - this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); + this.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext, Rules.IsNextTokenNotCloseBracket), 2 /* Space */)); + this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext), 8 /* Delete */)); // Insert space before and after binary operators 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 /* Space */)); 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 /* Space */)); @@ -48673,15 +49894,20 @@ var ts; this.SpaceAfterTemplateHeadAndMiddle = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([12 /* TemplateHead */, 13 /* TemplateMiddle */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); this.NoSpaceBeforeTemplateMiddleAndTail = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([13 /* TemplateMiddle */, 14 /* TemplateTail */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); this.SpaceBeforeTemplateMiddleAndTail = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([13 /* TemplateMiddle */, 14 /* TemplateTail */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); + // No space after { and before } in JSX expression + this.NoSpaceAfterOpenBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create3(15 /* OpenBraceToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 8 /* Delete */)); + this.SpaceAfterOpenBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create3(15 /* OpenBraceToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 2 /* Space */)); + this.NoSpaceBeforeCloseBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16 /* CloseBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 8 /* Delete */)); + this.SpaceBeforeCloseBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16 /* CloseBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 2 /* Space */)); // Insert space after function keyword for anonymous functions this.SpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(87 /* FunctionKeyword */, 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2 /* Space */)); this.NoSpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(87 /* FunctionKeyword */, 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 8 /* Delete */)); } Rules.prototype.getRuleName = function (rule) { var o = this; - for (var name_39 in o) { - if (o[name_39] === rule) { - return name_39; + for (var name_40 in o) { + if (o[name_40] === rule) { + return name_40; } } throw new Error("Unknown rule"); @@ -48700,6 +49926,8 @@ var ts; case 187 /* BinaryExpression */: case 188 /* ConditionalExpression */: case 195 /* AsExpression */: + case 238 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: case 154 /* TypePredicate */: case 162 /* UnionType */: case 163 /* IntersectionType */: @@ -48818,6 +50046,10 @@ var ts; case 224 /* EnumDeclaration */: case 159 /* TypeLiteral */: case 225 /* ModuleDeclaration */: + case 236 /* ExportDeclaration */: + case 237 /* NamedExports */: + case 230 /* ImportDeclaration */: + case 233 /* NamedImports */: return true; } return false; @@ -48878,6 +50110,12 @@ var ts; Rules.IsNonJsxSameLineTokenContext = function (context) { return context.TokensAreOnSameLine() && context.contextNode.kind !== 244 /* JsxText */; }; + Rules.isNonJsxElementContext = function (context) { + return context.contextNode.kind !== 241 /* JsxElement */; + }; + Rules.isJsxExpressionContext = function (context) { + return context.contextNode.kind === 248 /* JsxExpression */; + }; Rules.IsNotBeforeBlockInFunctionDeclarationContext = function (context) { return !Rules.IsFunctionDeclContext(context) && !Rules.IsBeforeBlockContext(context); }; @@ -49308,6 +50546,14 @@ var ts; rules.push(this.globalRules.NoSpaceAfterTemplateHeadAndMiddle); rules.push(this.globalRules.NoSpaceBeforeTemplateMiddleAndTail); } + if (options.InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces) { + rules.push(this.globalRules.SpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.SpaceBeforeCloseBraceInJsxExpression); + } + else { + rules.push(this.globalRules.NoSpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.NoSpaceBeforeCloseBraceInJsxExpression); + } if (options.InsertSpaceAfterSemicolonInForStatements) { rules.push(this.globalRules.SpaceAfterSemicolonInFor); } @@ -49361,7 +50607,7 @@ var ts; // 1. the end of the previous line // 2. the last non-whitespace character in the current line var endOfFormatSpan = ts.getEndLinePosition(line, sourceFile); - while (ts.isWhiteSpace(sourceFile.text.charCodeAt(endOfFormatSpan)) && !ts.isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { + while (ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(endOfFormatSpan))) { endOfFormatSpan--; } // if the character at the end of the span is a line break, we shouldn't include it, because it indicates we don't want to @@ -49625,7 +50871,10 @@ var ts; var startLinePosition = ts.getLineStartPositionForPosition(startPos, sourceFile); var column = formatting.SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options); if (startLine !== parentStartLine || startPos === column) { - return column; + // Use the base indent size if it is greater than + // the indentation of the inherited predecessor. + var baseIndentSize = formatting.SmartIndenter.getBaseIndentation(options); + return baseIndentSize > column ? baseIndentSize : column; } } return -1 /* Unknown */; @@ -49788,6 +51037,9 @@ var ts; } // child node is outside the target range - do not dive inside if (!ts.rangeOverlapsWithStartEnd(originalRange, child.pos, child.end)) { + if (child.end < originalRange.pos) { + formattingScanner.skipToEndOf(child); + } return inheritedIndentation; } if (child.getFullWidth() === 0) { @@ -50081,7 +51333,7 @@ var ts; } var whitespaceStart = getTrailingWhitespaceStartPosition(lineStartPosition, lineEndPosition); if (whitespaceStart !== -1) { - ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpace(sourceFile.text.charCodeAt(whitespaceStart - 1))); + ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(whitespaceStart - 1))); recordDelete(whitespaceStart, lineEndPosition + 1 - whitespaceStart); } } @@ -50092,7 +51344,7 @@ var ts; */ function getTrailingWhitespaceStartPosition(start, end) { var pos = end; - while (pos >= start && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos >= start && ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos--; } if (pos !== end) { @@ -50265,7 +51517,7 @@ var ts; })(Value || (Value = {})); function getIndentation(position, sourceFile, options) { if (position > sourceFile.text.length) { - return 0; // past EOF + return getBaseIndentation(options); // past EOF } // no indentation when the indent style is set to none, // so we can return fast @@ -50274,7 +51526,7 @@ var ts; } var precedingToken = ts.findPrecedingToken(position, sourceFile); if (!precedingToken) { - return 0; + return getBaseIndentation(options); } // no indentation in string \regex\template literals var precedingTokenIsLiteral = ts.isStringOrRegularExpressionOrTemplateLiteral(precedingToken.kind); @@ -50291,7 +51543,7 @@ var ts; var current_1 = position; while (current_1 > 0) { var char = sourceFile.text.charCodeAt(current_1); - if (!ts.isWhiteSpace(char) && !ts.isLineBreak(char)) { + if (!ts.isWhiteSpace(char)) { break; } current_1--; @@ -50336,12 +51588,16 @@ var ts; current = current.parent; } if (!current) { - // no parent was found - return 0 to be indented on the level of SourceFile - return 0; + // no parent was found - return the base indentation of the SourceFile + return getBaseIndentation(options); } return getIndentationForNodeWorker(current, currentStart, /*ignoreActualIndentationRange*/ undefined, indentationDelta, sourceFile, options); } SmartIndenter.getIndentation = getIndentation; + function getBaseIndentation(options) { + return options.BaseIndentSize || 0; + } + SmartIndenter.getBaseIndentation = getBaseIndentation; function getIndentationForNode(n, ignoreActualIndentationRange, sourceFile, options) { var start = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); return getIndentationForNodeWorker(n, start, ignoreActualIndentationRange, /*indentationDelta*/ 0, sourceFile, options); @@ -50387,7 +51643,7 @@ var ts; currentStart = parentStart; parent = current.parent; } - return indentationDelta; + return indentationDelta + getBaseIndentation(options); } function getParentStart(parent, child, sourceFile) { var containingList = getContainingList(child, sourceFile); @@ -50587,7 +51843,7 @@ var ts; var column = 0; for (var pos = startPos; pos < endPos; pos++) { var ch = sourceFile.text.charCodeAt(pos); - if (!ts.isWhiteSpace(ch)) { + if (!ts.isWhiteSpaceSingleLine(ch)) { break; } if (ch === 9 /* tab */) { @@ -50645,7 +51901,10 @@ var ts; case 164 /* ParenthesizedType */: case 176 /* TaggedTemplateExpression */: case 184 /* AwaitExpression */: + case 237 /* NamedExports */: case 233 /* NamedImports */: + case 238 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: return true; } return false; @@ -50668,6 +51927,11 @@ var ts; case 149 /* GetAccessor */: case 150 /* SetAccessor */: return childKind !== 199 /* Block */; + case 236 /* ExportDeclaration */: + return childKind !== 237 /* NamedExports */; + case 230 /* ImportDeclaration */: + return childKind !== 231 /* ImportClause */ || + (child.namedBindings && child.namedBindings.kind !== 233 /* NamedImports */); case 241 /* JsxElement */: return childKind !== 245 /* JsxClosingElement */; } @@ -50686,6 +51950,7 @@ var ts; })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); /// +/// /// /// /// @@ -50825,8 +52090,8 @@ var ts; var list = createNode(282 /* SyntaxList */, 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]; + for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) { + var node = nodes_4[_i]; if (pos < node.pos) { pos = this.addSyntheticNodes(list._children, pos, node.pos); } @@ -50961,7 +52226,7 @@ var ts; addCommentParts(declaration.parent, sourceFileOfDeclaration, getCleanedParamJsDocComment); } // If this is left side of dotted module declaration, there is no doc comments associated with this node - if (declaration.kind === 225 /* ModuleDeclaration */ && declaration.body.kind === 225 /* ModuleDeclaration */) { + if (declaration.kind === 225 /* ModuleDeclaration */ && declaration.body && declaration.body.kind === 225 /* ModuleDeclaration */) { return; } if ((declaration.kind === 179 /* FunctionExpression */ || declaration.kind === 180 /* ArrowFunction */) && @@ -51007,8 +52272,7 @@ var ts; } for (; pos < end; pos++) { var ch = sourceFile.text.charCodeAt(pos); - if (!ts.isWhiteSpace(ch) || ts.isLineBreak(ch)) { - // Either found lineBreak or non whiteSpace + if (!ts.isWhiteSpaceSingleLine(ch)) { return pos; } } @@ -51023,8 +52287,7 @@ var ts; 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))); + ts.isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)); } function isParamTag(pos, end, sourceFile) { // If it is @param tag @@ -51189,7 +52452,7 @@ var ts; } return paramDocComments; function consumeWhiteSpaces(pos) { - while (pos < end && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos < end && ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos++; } return pos; @@ -51672,9 +52935,9 @@ var ts; return false; } // If the parent is not sourceFile or module block it is local variable - for (var parent_15 = declaration.parent; !ts.isFunctionBlock(parent_15); parent_15 = parent_15.parent) { + for (var parent_16 = declaration.parent; !ts.isFunctionBlock(parent_16); parent_16 = parent_16.parent) { // Reached source file or module block - if (parent_15.kind === 256 /* SourceFile */ || parent_15.kind === 226 /* ModuleBlock */) { + if (parent_16.kind === 256 /* SourceFile */ || parent_16.kind === 226 /* ModuleBlock */) { return false; } } @@ -51797,15 +53060,15 @@ var ts; sourceFile.version = version; sourceFile.scriptSnapshot = scriptSnapshot; } - var commandLineOptions_stringToEnum; + var commandLineOptionsStringToEnum; /** JS users may pass in string values for enum compiler options (such as ModuleKind), so convert. */ function fixupCompilerOptions(options, diagnostics) { // Lazily create this value to fix module loading errors. - commandLineOptions_stringToEnum = commandLineOptions_stringToEnum || ts.filter(ts.optionDeclarations, function (o) { + commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || ts.filter(ts.optionDeclarations, function (o) { return typeof o.type === "object" && !ts.forEachValue(o.type, function (v) { return typeof v !== "number"; }); }); options = ts.clone(options); - var _loop_2 = function(opt) { + var _loop_3 = function(opt) { if (!ts.hasProperty(options, opt.name)) { return "continue"; } @@ -51822,9 +53085,9 @@ var ts; } } }; - for (var _i = 0, commandLineOptions_stringToEnum_1 = commandLineOptions_stringToEnum; _i < commandLineOptions_stringToEnum_1.length; _i++) { - var opt = commandLineOptions_stringToEnum_1[_i]; - _loop_2(opt); + for (var _i = 0, commandLineOptionsStringToEnum_1 = commandLineOptionsStringToEnum; _i < commandLineOptionsStringToEnum_1.length; _i++) { + var opt = commandLineOptionsStringToEnum_1[_i]; + _loop_3(opt); } return options; } @@ -51848,6 +53111,17 @@ var ts; // We are not returning a sourceFile for lib file when asked by the program, // so pass --noLib to avoid reporting a file not found error. options.noLib = true; + // Clear out other settings that would not be used in transpiling this module + options.lib = undefined; + options.types = undefined; + options.noEmit = undefined; + options.noEmitOnError = undefined; + options.paths = undefined; + options.rootDirs = undefined; + options.declaration = undefined; + options.declarationDir = undefined; + options.out = undefined; + options.outFile = undefined; // We are not doing a full typecheck, we are not resolving the whole context, // so pass --noResolve to avoid reporting missing file errors. options.noResolve = true; @@ -51882,7 +53156,8 @@ var ts; getNewLine: function () { return newLine; }, fileExists: function (fileName) { return fileName === inputFileName; }, readFile: function (fileName) { return ""; }, - directoryExists: function (directoryExists) { return true; } + directoryExists: function (directoryExists) { return true; }, + getDirectories: function (path) { return []; } }; var program = ts.createProgram([inputFileName], options, compilerHost); if (transpileOptions.reportDiagnostics) { @@ -51970,7 +53245,7 @@ var ts; 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)); + return ("_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + "|" + settings.allowJs + "|" + settings.baseUrl + "|" + JSON.stringify(settings.typeRoots) + "|" + JSON.stringify(settings.rootDirs) + "|" + JSON.stringify(settings.paths)); } function getBucketForCompilationSettings(key, createIfMissing) { var bucket = ts.lookUp(buckets, key); @@ -52716,7 +53991,8 @@ var ts; oldSettings.moduleResolution !== newSettings.moduleResolution || oldSettings.noResolve !== newSettings.noResolve || oldSettings.jsx !== newSettings.jsx || - oldSettings.allowJs !== newSettings.allowJs); + oldSettings.allowJs !== newSettings.allowJs || + oldSettings.disableSizeLimit !== oldSettings.disableSizeLimit); // Now create a new compiler var compilerHost = { getSourceFile: getOrCreateSourceFile, @@ -52739,8 +54015,10 @@ var ts; return entry && entry.scriptSnapshot.getText(0, entry.scriptSnapshot.getLength()); }, directoryExists: function (directoryName) { - ts.Debug.assert(!host.resolveModuleNames || !host.resolveTypeReferenceDirectives); return ts.directoryProbablyExists(directoryName, host); + }, + getDirectories: function (path) { + return host.getDirectories ? host.getDirectories(path) : []; } }; if (host.trace) { @@ -53010,13 +54288,13 @@ var ts; log("Returning an empty list because completion was requested in an invalid position."); return undefined; } - var parent_16 = contextToken.parent, kind = contextToken.kind; + var parent_17 = contextToken.parent, kind = contextToken.kind; if (kind === 21 /* DotToken */) { - if (parent_16.kind === 172 /* PropertyAccessExpression */) { + if (parent_17.kind === 172 /* PropertyAccessExpression */) { node = contextToken.parent.expression; isRightOfDot = true; } - else if (parent_16.kind === 139 /* QualifiedName */) { + else if (parent_17.kind === 139 /* QualifiedName */) { node = contextToken.parent.left; isRightOfDot = true; } @@ -53392,9 +54670,9 @@ var ts; switch (contextToken.kind) { case 15 /* OpenBraceToken */: // const x = { | case 24 /* CommaToken */: - var parent_17 = contextToken.parent; - if (parent_17 && (parent_17.kind === 171 /* ObjectLiteralExpression */ || parent_17.kind === 167 /* ObjectBindingPattern */)) { - return parent_17; + var parent_18 = contextToken.parent; + if (parent_18 && (parent_18.kind === 171 /* ObjectLiteralExpression */ || parent_18.kind === 167 /* ObjectBindingPattern */)) { + return parent_18; } break; } @@ -53421,37 +54699,37 @@ var ts; } function tryGetContainingJsxElement(contextToken) { if (contextToken) { - var parent_18 = contextToken.parent; + var parent_19 = contextToken.parent; switch (contextToken.kind) { case 26 /* LessThanSlashToken */: case 39 /* SlashToken */: case 69 /* Identifier */: case 246 /* JsxAttribute */: case 247 /* JsxSpreadAttribute */: - if (parent_18 && (parent_18.kind === 242 /* JsxSelfClosingElement */ || parent_18.kind === 243 /* JsxOpeningElement */)) { - return parent_18; + if (parent_19 && (parent_19.kind === 242 /* JsxSelfClosingElement */ || parent_19.kind === 243 /* JsxOpeningElement */)) { + return parent_19; } - else if (parent_18.kind === 246 /* JsxAttribute */) { - return parent_18.parent; + else if (parent_19.kind === 246 /* JsxAttribute */) { + return parent_19.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_18 && ((parent_18.kind === 246 /* JsxAttribute */) || (parent_18.kind === 247 /* JsxSpreadAttribute */))) { - return parent_18.parent; + if (parent_19 && ((parent_19.kind === 246 /* JsxAttribute */) || (parent_19.kind === 247 /* JsxSpreadAttribute */))) { + return parent_19.parent; } break; case 16 /* CloseBraceToken */: - if (parent_18 && - parent_18.kind === 248 /* JsxExpression */ && - parent_18.parent && - (parent_18.parent.kind === 246 /* JsxAttribute */)) { - return parent_18.parent.parent; + if (parent_19 && + parent_19.kind === 248 /* JsxExpression */ && + parent_19.parent && + (parent_19.parent.kind === 246 /* JsxAttribute */)) { + return parent_19.parent.parent; } - if (parent_18 && parent_18.kind === 247 /* JsxSpreadAttribute */) { - return parent_18.parent; + if (parent_19 && parent_19.kind === 247 /* JsxSpreadAttribute */) { + return parent_19.parent; } break; } @@ -53588,8 +54866,8 @@ var ts; if (element.getStart() <= position && position <= element.getEnd()) { continue; } - var name_40 = element.propertyName || element.name; - existingImportsOrExports[name_40.text] = true; + var name_41 = element.propertyName || element.name; + existingImportsOrExports[name_41.text] = true; } if (ts.isEmpty(existingImportsOrExports)) { return ts.filter(exportsOfModule, function (e) { return e.name !== "default"; }); @@ -53709,14 +54987,14 @@ var ts; var entries = []; var target = program.getCompilerOptions().target; var nameTable = getNameTable(sourceFile); - for (var name_41 in nameTable) { + for (var name_42 in nameTable) { // Skip identifiers produced only from the current location - if (nameTable[name_41] === position) { + if (nameTable[name_42] === position) { continue; } - if (!uniqueNames[name_41]) { - uniqueNames[name_41] = name_41; - var displayName = getCompletionEntryDisplayName(name_41, target, /*performCharacterChecks*/ true); + if (!uniqueNames[name_42]) { + uniqueNames[name_42] = name_42; + var displayName = getCompletionEntryDisplayName(ts.unescapeIdentifier(name_42), target, /*performCharacterChecks*/ true); if (displayName) { var entry = { name: displayName, @@ -53833,10 +55111,10 @@ var ts; var typeChecker = program.getTypeChecker(); var type = typeChecker.getContextualType(node); if (type) { - var entries_1 = []; - addStringLiteralCompletionsFromType(type, entries_1); - if (entries_1.length) { - return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries_1 }; + var entries_2 = []; + addStringLiteralCompletionsFromType(type, entries_2); + if (entries_2.length) { + return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries_2 }; } } return undefined; @@ -54783,19 +56061,19 @@ var ts; function getThrowStatementOwner(throwStatement) { var child = throwStatement; while (child.parent) { - var parent_19 = child.parent; - if (ts.isFunctionBlock(parent_19) || parent_19.kind === 256 /* SourceFile */) { - return parent_19; + var parent_20 = child.parent; + if (ts.isFunctionBlock(parent_20) || parent_20.kind === 256 /* SourceFile */) { + return parent_20; } // 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_19.kind === 216 /* TryStatement */) { - var tryStatement = parent_19; + if (parent_20.kind === 216 /* TryStatement */) { + var tryStatement = parent_20; if (tryStatement.tryBlock === child && tryStatement.catchClause) { return child; } } - child = parent_19; + child = parent_20; } return undefined; } @@ -55098,7 +56376,7 @@ var ts; var shouldCombindElseAndIf = true; // Avoid recalculating getStart() by iterating backwards. for (var j = ifKeyword.getStart() - 1; j >= elseKeyword.end; j--) { - if (!ts.isWhiteSpace(sourceFile.text.charCodeAt(j))) { + if (!ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(j))) { shouldCombindElseAndIf = false; break; } @@ -55136,7 +56414,8 @@ var ts; result.push({ fileName: entry.fileName, textSpan: highlightSpan.textSpan, - isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference + isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference, + isDefinition: false }); } } @@ -55174,16 +56453,31 @@ var ts; 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 && - node.kind !== 9 /* StringLiteral */ && - !isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { - return undefined; + switch (node.kind) { + case 8 /* NumericLiteral */: + if (!isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + break; + } + // Fallthrough + case 69 /* Identifier */: + case 97 /* ThisKeyword */: + // case SyntaxKind.SuperKeyword: TODO:GH#9268 + case 9 /* StringLiteral */: + return getReferencedSymbolsForNode(node, program.getSourceFiles(), findInStrings, findInComments); + } + return undefined; + } + function isThis(node) { + switch (node.kind) { + case 97 /* ThisKeyword */: + // case SyntaxKind.ThisType: TODO: GH#9267 + return true; + case 69 /* Identifier */: + // 'this' as a parameter + return node.originalKeywordKind === 97 /* ThisKeyword */ && node.parent.kind === 142 /* Parameter */; + default: + return false; } - ts.Debug.assert(node.kind === 69 /* Identifier */ || node.kind === 8 /* NumericLiteral */ || node.kind === 9 /* StringLiteral */); - return getReferencedSymbolsForNode(node, program.getSourceFiles(), findInStrings, findInComments); } function getReferencedSymbolsForNode(node, sourceFiles, findInStrings, findInComments) { var typeChecker = program.getTypeChecker(); @@ -55200,7 +56494,7 @@ var ts; return getLabelReferencesInNode(node.parent, node); } } - if (node.kind === 97 /* ThisKeyword */ || node.kind === 165 /* ThisType */) { + if (isThis(node)) { return getReferencesForThisKeyword(node, sourceFiles); } if (node.kind === 95 /* SuperKeyword */) { @@ -55486,7 +56780,8 @@ var ts; references: [{ fileName: sourceFile.fileName, textSpan: ts.createTextSpan(position, searchText.length), - isWriteAccess: false + isWriteAccess: false, + isDefinition: false }] }); } @@ -55634,7 +56929,7 @@ var ts; ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); var node = ts.getTouchingWord(sourceFile, position); - if (!node || (node.kind !== 97 /* ThisKeyword */ && node.kind !== 165 /* ThisType */)) { + if (!node || !isThis(node)) { return; } var container = ts.getThisContainer(node, /* includeArrowFunctions */ false); @@ -55964,7 +57259,8 @@ var ts; return { fileName: node.getSourceFile().fileName, textSpan: ts.createTextSpanFromBounds(start, end), - isWriteAccess: isWriteAccess(node) + isWriteAccess: isWriteAccess(node), + isDefinition: ts.isDeclarationName(node) || ts.isLiteralComputedPropertyDeclarationName(node) }; } /** A node is considered a writeAccess iff it is a name of a declaration or a target of an assignment */ @@ -56206,7 +57502,7 @@ var ts; } function getNavigationBarItems(fileName) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); - return ts.NavigationBar.getNavigationBarItems(sourceFile, host.getCompilationSettings()); + return ts.NavigationBar.getNavigationBarItems(sourceFile); } function getSemanticClassifications(fileName, span) { return convertClassifications(getEncodedSemanticClassifications(fileName, span)); @@ -56639,7 +57935,8 @@ var ts; return; case 142 /* Parameter */: if (token.parent.name === token) { - return 17 /* parameterName */; + var isThis_1 = token.kind === 69 /* Identifier */ && token.originalKeywordKind === 97 /* ThisKeyword */; + return isThis_1 ? 3 /* keyword */ : 17 /* parameterName */; } return; } @@ -56830,7 +58127,7 @@ var ts; (tokenStart === position ? newLine + indentationStr : ""); return { newText: result, caretOffset: preamble.length }; } - function isValidBraceCompletionAtPostion(fileName, position, openingBrace) { + function isValidBraceCompletionAtPosition(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: @@ -57032,11 +58329,11 @@ var ts; var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); var canonicalDefaultLibName = getCanonicalFileName(ts.normalizePath(defaultLibFileName)); var node = ts.getTouchingWord(sourceFile, position, /*includeJsDocComment*/ true); - // Can only rename an identifier. if (node) { if (node.kind === 69 /* Identifier */ || node.kind === 9 /* StringLiteral */ || - isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || + isThis(node)) { var symbol = typeChecker.getSymbolAtLocation(node); // Only allow a symbol to be renamed if it actually has at least one declaration. if (symbol) { @@ -57150,7 +58447,7 @@ var ts; getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition, - isValidBraceCompletionAtPostion: isValidBraceCompletionAtPostion, + isValidBraceCompletionAtPosition: isValidBraceCompletionAtPosition, getEmitOutput: getEmitOutput, getNonBoundSourceFile: getNonBoundSourceFile, getProgram: getProgram @@ -58437,6 +59734,7 @@ var ts; function CoreServicesShimHostAdapter(shimHost) { var _this = this; this.shimHost = shimHost; + this.useCaseSensitiveFileNames = this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; if ("directoryExists" in this.shimHost) { this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; } @@ -58444,17 +59742,26 @@ var ts; this.realpath = function (path) { return _this.shimHost.realpath(path); }; } } - CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extension, exclude, depth) { + CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extensions, exclude, include, depth) { // Wrap the API changes for 2.0 release. This try/catch // should be removed once TypeScript 2.0 has shipped. - var encoded; try { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude), depth); + var pattern = ts.getFileMatcherPatterns(rootDir, extensions, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); + return JSON.parse(this.shimHost.readDirectory(rootDir, JSON.stringify(extensions), JSON.stringify(pattern.basePaths), pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern, depth)); } catch (e) { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude)); + var results = []; + for (var _i = 0, extensions_2 = extensions; _i < extensions_2.length; _i++) { + var extension = extensions_2[_i]; + for (var _a = 0, _b = this.readDirectoryFallback(rootDir, extension, exclude); _a < _b.length; _a++) { + var file = _b[_a]; + if (!ts.contains(results, file)) { + results.push(file); + } + } + } + return results; } - return JSON.parse(encoded); }; CoreServicesShimHostAdapter.prototype.fileExists = function (fileName) { return this.shimHost.fileExists(fileName); @@ -58462,6 +59769,9 @@ var ts; CoreServicesShimHostAdapter.prototype.readFile = function (fileName) { return this.shimHost.readFile(fileName); }; + CoreServicesShimHostAdapter.prototype.readDirectoryFallback = function (rootDir, extension, exclude) { + return JSON.parse(this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude))); + }; return CoreServicesShimHostAdapter; }()); ts.CoreServicesShimHostAdapter = CoreServicesShimHostAdapter; @@ -58486,9 +59796,12 @@ var ts; return result; } function forwardJSONCall(logger, actionDescription, action, logPerformance) { + return forwardCall(logger, actionDescription, /*returnJson*/ true, action, logPerformance); + } + function forwardCall(logger, actionDescription, returnJson, action, logPerformance) { try { var result = simpleForwardCall(logger, actionDescription, action, logPerformance); - return JSON.stringify({ result: result }); + return returnJson ? JSON.stringify({ result: result }) : result; } catch (err) { if (err instanceof ts.OperationCanceledException) { @@ -58675,9 +59988,9 @@ 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) { + LanguageServiceShimObject.prototype.isValidBraceCompletionAtPosition = function (fileName, position, openingBrace) { var _this = this; - return this.forwardJSONCall("isValidBraceCompletionAtPostion('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPostion(fileName, position, openingBrace); }); + return this.forwardJSONCall("isValidBraceCompletionAtPosition('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPosition(fileName, position, openingBrace); }); }; /// GET SMART INDENT LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options /*Services.EditorOptions*/) { @@ -58772,6 +60085,11 @@ var ts; var _this = this; return this.forwardJSONCall("getEmitOutput('" + fileName + "')", function () { return _this.languageService.getEmitOutput(fileName); }); }; + LanguageServiceShimObject.prototype.getEmitOutputObject = function (fileName) { + var _this = this; + return forwardCall(this.logger, "getEmitOutput('" + fileName + "')", + /*returnJson*/ false, function () { return _this.languageService.getEmitOutput(fileName); }, this.logPerformance); + }; return LanguageServiceShimObject; }(ShimBase)); function convertClassifications(classifications) { @@ -58987,4 +60305,4 @@ var TypeScript; // TODO: it should be moved into a namespace though. /* @internal */ var toolsVersion = "1.9"; -/* tslint:enable:no-unused-variable */ +/* tslint:enable:no-unused-variable */ diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts index a9930066fc1..4ffdd868f16 100644 --- a/lib/typescriptServices.d.ts +++ b/lib/typescriptServices.d.ts @@ -407,7 +407,7 @@ declare namespace ts { hasTrailingComma?: boolean; } interface ModifiersArray extends NodeArray { - flags: number; + flags: NodeFlags; } interface Modifier extends Node { } @@ -713,7 +713,6 @@ declare namespace ts { } interface PropertyAccessExpression extends MemberExpression, Declaration { expression: LeftHandSideExpression; - dotToken: Node; name: Identifier; } type IdentifierOrPropertyAccess = Identifier | PropertyAccessExpression; @@ -754,9 +753,10 @@ declare namespace ts { children: NodeArray; closingElement: JsxClosingElement; } + type JsxTagNameExpression = PrimaryExpression | PropertyAccessExpression; interface JsxOpeningElement extends Expression { _openingElementBrand?: any; - tagName: EntityName; + tagName: JsxTagNameExpression; attributes: NodeArray; } interface JsxSelfClosingElement extends PrimaryExpression, JsxOpeningElement { @@ -771,7 +771,7 @@ declare namespace ts { expression: Expression; } interface JsxClosingElement extends Node { - tagName: EntityName; + tagName: JsxTagNameExpression; } interface JsxExpression extends Expression { expression?: Expression; @@ -844,6 +844,7 @@ declare namespace ts { interface SwitchStatement extends Statement { expression: Expression; caseBlock: CaseBlock; + possiblyExhaustive?: boolean; } interface CaseBlock extends Node { clauses: NodeArray; @@ -919,7 +920,7 @@ declare namespace ts { type ModuleBody = ModuleBlock | ModuleDeclaration; interface ModuleDeclaration extends DeclarationStatement { name: Identifier | LiteralExpression; - body: ModuleBlock | ModuleDeclaration; + body?: ModuleBlock | ModuleDeclaration; } interface ModuleBlock extends Node, Statement { statements: NodeArray; @@ -1075,8 +1076,9 @@ declare namespace ts { Assignment = 16, TrueCondition = 32, FalseCondition = 64, - Referenced = 128, - Shared = 256, + SwitchClause = 128, + Referenced = 256, + Shared = 512, Label = 12, Condition = 96, } @@ -1098,6 +1100,12 @@ declare namespace ts { expression: Expression; antecedent: FlowNode; } + interface FlowSwitchClause extends FlowNode { + switchStatement: SwitchStatement; + clauseStart: number; + clauseEnd: number; + antecedent: FlowNode; + } interface AmdDependency { path: string; name: string; @@ -1132,7 +1140,13 @@ declare namespace ts { getCurrentDirectory(): string; } interface ParseConfigHost { - readDirectory(rootDir: string, extension: string, exclude: string[]): string[]; + useCaseSensitiveFileNames: boolean; + readDirectory(rootDir: string, extensions: string[], excludes: string[], includes: string[]): string[]; + /** + * Gets a value indicating whether the specified path exists and is a file. + * @param path The path to test. + */ + fileExists(path: string): boolean; } interface WriteFileCallback { (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void, sourceFiles?: SourceFile[]): void; @@ -1258,7 +1272,7 @@ declare namespace ts { 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; + buildDisplayForParametersAndDelimiters(thisParameter: Symbol, 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; } @@ -1375,6 +1389,7 @@ declare namespace ts { BlockScoped = 418, PropertyOrAccessor = 98308, Export = 7340032, + ClassMember = 106500, } interface Symbol { flags: SymbolFlags; @@ -1412,7 +1427,6 @@ declare namespace ts { ThisType = 33554432, ObjectLiteralPatternWithComputedProperties = 67108864, Never = 134217728, - Falsy = 126, StringLike = 258, NumberLike = 132, ObjectType = 80896, @@ -1471,7 +1485,6 @@ declare namespace ts { declaration: SignatureDeclaration; typeParameters: TypeParameter[]; parameters: Symbol[]; - thisType?: Type; } enum IndexKind { String = 0, @@ -1530,6 +1543,7 @@ declare namespace ts { charset?: string; declaration?: boolean; declarationDir?: string; + disableSizeLimit?: boolean; emitBOM?: boolean; emitDecoratorMetadata?: boolean; experimentalDecorators?: boolean; @@ -1541,6 +1555,7 @@ declare namespace ts { lib?: string[]; locale?: string; mapRoot?: string; + maxNodeModuleJsDepth?: number; module?: ModuleKind; moduleResolution?: ModuleResolutionKind; newLine?: NewLineKind; @@ -1552,6 +1567,8 @@ declare namespace ts { noImplicitAny?: boolean; noImplicitReturns?: boolean; noImplicitThis?: boolean; + noUnusedLocals?: boolean; + noUnusedParameters?: boolean; noImplicitUseStrict?: boolean; noLib?: boolean; noResolve?: boolean; @@ -1575,7 +1592,8 @@ declare namespace ts { target?: ScriptTarget; traceResolution?: boolean; types?: string[]; - typesSearchPaths?: string[]; + /** Paths used to used to compute primary types search locations */ + typeRoots?: string[]; [option: string]: CompilerOptionsValue | undefined; } interface TypingOptions { @@ -1638,6 +1656,15 @@ declare namespace ts { fileNames: string[]; raw?: any; errors: Diagnostic[]; + wildcardDirectories?: Map; + } + enum WatchDirectoryFlags { + None = 0, + Recursive = 1, + } + interface ExpandResult { + fileNames: string[]; + wildcardDirectories: Map; } interface ModuleResolutionHost { fileExists(fileName: string): boolean; @@ -1672,6 +1699,7 @@ declare namespace ts { getDefaultTypeDirectiveNames?(rootPath: string): string[]; writeFile: WriteFileCallback; getCurrentDirectory(): string; + getDirectories(path: string): string[]; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; getNewLine(): string; @@ -1707,6 +1735,7 @@ declare namespace ts { useCaseSensitiveFileNames: boolean; write(s: string): void; readFile(path: string, encoding?: string): string; + getFileSize?(path: string): number; writeFile(path: string, data: string, writeByteOrderMark?: boolean): void; watchFile?(path: string, callback: FileWatcherCallback): FileWatcher; watchDirectory?(path: string, callback: DirectoryWatcherCallback, recursive?: boolean): FileWatcher; @@ -1717,7 +1746,7 @@ declare namespace ts { getExecutingFilePath(): string; getCurrentDirectory(): string; getDirectories(path: string): string[]; - readDirectory(path: string, extension?: string, exclude?: string[]): string[]; + readDirectory(path: string, extensions?: string[], exclude?: string[], include?: string[]): string[]; getModifiedTime?(path: string): Date; createHash?(data: string): string; getMemoryUsage?(): number; @@ -1757,6 +1786,7 @@ declare namespace ts { scanJsxToken(): SyntaxKind; scanJSDocToken(): SyntaxKind; scan(): SyntaxKind; + getText(): string; setText(text: string, start?: number, length?: number): void; setOnError(onError: ErrorCallback): void; setScriptTarget(scriptTarget: ScriptTarget): void; @@ -1770,6 +1800,8 @@ declare namespace ts { function getPositionOfLineAndCharacter(sourceFile: SourceFile, line: number, character: number): number; function getLineAndCharacterOfPosition(sourceFile: SourceFile, position: number): LineAndCharacter; function isWhiteSpace(ch: number): boolean; + /** Does not include line breaks. For that, see isWhiteSpaceLike. */ + function isWhiteSpaceSingleLine(ch: number): boolean; function isLineBreak(ch: number): boolean; function couldStartTrivia(text: string, pos: number): boolean; function getLeadingCommentRanges(text: string, pos: number): CommentRange[]; @@ -1821,6 +1853,7 @@ declare namespace ts { function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean): SourceFile; } declare namespace ts { + /** The version of the TypeScript compiler release */ const version: string; function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean): string; function resolveTripleslashReference(moduleName: string, containingFile: string): string; @@ -1836,7 +1869,15 @@ declare namespace ts { 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 getDefaultTypeDirectiveNames(options: CompilerOptions, rootFiles: string[], host: CompilerHost): string[]; + /** + * Given a set of options and a set of root files, returns the set of type directive names + * that should be included for this program automatically. + * This list could either come from the config file, + * or from enumerating the types root + initial secondary types lookup location. + * More type directives might appear in the program later as a result of loading actual source files; + * this list is only the set of defaults that are implicitly included. + */ + function getAutomaticTypeDirectiveNames(options: CompilerOptions, rootFiles: string[], host: CompilerHost): string[]; function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost, oldProgram?: Program): Program; } declare namespace ts { @@ -1978,6 +2019,7 @@ declare namespace ts { resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[]; resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[]; directoryExists?(directoryName: string): boolean; + getDirectories?(directoryName: string): string[]; } interface LanguageService { cleanupSemanticCache(): void; @@ -2019,7 +2061,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; + isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean; getEmitOutput(fileName: string): EmitOutput; getProgram(): Program; dispose(): void; @@ -2068,6 +2110,7 @@ declare namespace ts { textSpan: TextSpan; fileName: string; isWriteAccess: boolean; + isDefinition: boolean; } interface DocumentHighlights { fileName: string; @@ -2096,6 +2139,7 @@ declare namespace ts { containerKind: string; } interface EditorOptions { + BaseIndentSize?: number; IndentSize: number; TabSize: number; NewLineCharacter: string; @@ -2116,9 +2160,10 @@ declare namespace ts { InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean; InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: boolean; InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean; + InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean; PlaceOpenBraceOnNewLineForFunctions: boolean; PlaceOpenBraceOnNewLineForControlBlocks: boolean; - [s: string]: boolean | number | string; + [s: string]: boolean | number | string | undefined; } interface DefinitionInfo { fileName: string; diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js index 9e41f640305..22cbe79129c 100644 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -439,8 +439,9 @@ var ts; 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["SwitchClause"] = 128] = "SwitchClause"; + FlowFlags[FlowFlags["Referenced"] = 256] = "Referenced"; + FlowFlags[FlowFlags["Shared"] = 512] = "Shared"; FlowFlags[FlowFlags["Label"] = 12] = "Label"; FlowFlags[FlowFlags["Condition"] = 96] = "Condition"; })(ts.FlowFlags || (ts.FlowFlags = {})); @@ -591,6 +592,7 @@ var ts; SymbolFlags[SymbolFlags["BlockScoped"] = 418] = "BlockScoped"; SymbolFlags[SymbolFlags["PropertyOrAccessor"] = 98308] = "PropertyOrAccessor"; SymbolFlags[SymbolFlags["Export"] = 7340032] = "Export"; + SymbolFlags[SymbolFlags["ClassMember"] = 106500] = "ClassMember"; /* @internal */ // The set of things we consider semantically classifiable. Used to speed up the LS during // classification. @@ -654,7 +656,8 @@ var ts; TypeFlags[TypeFlags["Never"] = 134217728] = "Never"; /* @internal */ TypeFlags[TypeFlags["Nullable"] = 96] = "Nullable"; - TypeFlags[TypeFlags["Falsy"] = 126] = "Falsy"; + /* @internal */ + TypeFlags[TypeFlags["Falsy"] = 112] = "Falsy"; /* @internal */ TypeFlags[TypeFlags["Intrinsic"] = 150995071] = "Intrinsic"; /* @internal */ @@ -755,6 +758,11 @@ var ts; DiagnosticStyle[DiagnosticStyle["Pretty"] = 1] = "Pretty"; })(ts.DiagnosticStyle || (ts.DiagnosticStyle = {})); var DiagnosticStyle = ts.DiagnosticStyle; + (function (WatchDirectoryFlags) { + WatchDirectoryFlags[WatchDirectoryFlags["None"] = 0] = "None"; + WatchDirectoryFlags[WatchDirectoryFlags["Recursive"] = 1] = "Recursive"; + })(ts.WatchDirectoryFlags || (ts.WatchDirectoryFlags = {})); + var WatchDirectoryFlags = ts.WatchDirectoryFlags; /* @internal */ (function (CharacterCodes) { CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; @@ -994,6 +1002,15 @@ var ts; return -1; } ts.indexOf = indexOf; + function indexOfAnyCharCode(text, charCodes, start) { + for (var i = start || 0, len = text.length; i < len; i++) { + if (contains(charCodes, text.charCodeAt(i))) { + return i; + } + } + return -1; + } + ts.indexOfAnyCharCode = indexOfAnyCharCode; function countWhere(array, predicate) { var count = 0; if (array) { @@ -1021,12 +1038,24 @@ var ts; return result; } ts.filter = filter; + function filterMutate(array, f) { + var outIndex = 0; + for (var _i = 0, array_4 = array; _i < array_4.length; _i++) { + var item = array_4[_i]; + if (f(item)) { + array[outIndex] = item; + outIndex++; + } + } + array.length = outIndex; + } + ts.filterMutate = filterMutate; 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]; + for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { + var v = array_5[_i]; result.push(f(v)); } } @@ -1045,8 +1074,8 @@ var ts; var result; if (array) { result = []; - for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { - var item = array_5[_i]; + for (var _i = 0, array_6 = array; _i < array_6.length; _i++) { + var item = array_6[_i]; if (!contains(result, item, areEqual)) { result.push(item); } @@ -1057,8 +1086,8 @@ var ts; 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]; + for (var _i = 0, array_7 = array; _i < array_7.length; _i++) { + var v = array_7[_i]; result += v[prop]; } return result; @@ -1383,6 +1412,30 @@ var ts; return a < b ? -1 /* LessThan */ : 1 /* GreaterThan */; } ts.compareValues = compareValues; + function compareStrings(a, b, ignoreCase) { + if (a === b) + return 0 /* EqualTo */; + if (a === undefined) + return -1 /* LessThan */; + if (b === undefined) + return 1 /* GreaterThan */; + if (ignoreCase) { + if (String.prototype.localeCompare) { + var result = a.localeCompare(b, /*locales*/ undefined, { usage: "sort", sensitivity: "accent" }); + return result < 0 ? -1 /* LessThan */ : result > 0 ? 1 /* GreaterThan */ : 0 /* EqualTo */; + } + a = a.toUpperCase(); + b = b.toUpperCase(); + if (a === b) + return 0 /* EqualTo */; + } + return a < b ? -1 /* LessThan */ : 1 /* GreaterThan */; + } + ts.compareStrings = compareStrings; + function compareStringsCaseInsensitive(a, b) { + return compareStrings(a, b, /*ignoreCase*/ true); + } + ts.compareStringsCaseInsensitive = compareStringsCaseInsensitive; function getDiagnosticFileName(diagnostic) { return diagnostic.file ? diagnostic.file.fileName : undefined; } @@ -1637,12 +1690,243 @@ var ts; return path1 + ts.directorySeparator + path2; } ts.combinePaths = combinePaths; + /** + * Removes a trailing directory separator from a path. + * @param path The path. + */ + function removeTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) === ts.directorySeparator) { + return path.substr(0, path.length - 1); + } + return path; + } + ts.removeTrailingDirectorySeparator = removeTrailingDirectorySeparator; + /** + * Adds a trailing directory separator to a path, if it does not already have one. + * @param path The path. + */ + function ensureTrailingDirectorySeparator(path) { + if (path.charAt(path.length - 1) !== ts.directorySeparator) { + return path + ts.directorySeparator; + } + return path; + } + ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator; + function comparePaths(a, b, currentDirectory, ignoreCase) { + if (a === b) + return 0 /* EqualTo */; + if (a === undefined) + return -1 /* LessThan */; + if (b === undefined) + return 1 /* GreaterThan */; + a = removeTrailingDirectorySeparator(a); + b = removeTrailingDirectorySeparator(b); + var aComponents = getNormalizedPathComponents(a, currentDirectory); + var bComponents = getNormalizedPathComponents(b, currentDirectory); + var sharedLength = Math.min(aComponents.length, bComponents.length); + for (var i = 0; i < sharedLength; i++) { + var result = compareStrings(aComponents[i], bComponents[i], ignoreCase); + if (result !== 0 /* EqualTo */) { + return result; + } + } + return compareValues(aComponents.length, bComponents.length); + } + ts.comparePaths = comparePaths; + function containsPath(parent, child, currentDirectory, ignoreCase) { + if (parent === undefined || child === undefined) + return false; + if (parent === child) + return true; + parent = removeTrailingDirectorySeparator(parent); + child = removeTrailingDirectorySeparator(child); + if (parent === child) + return true; + var parentComponents = getNormalizedPathComponents(parent, currentDirectory); + var childComponents = getNormalizedPathComponents(child, currentDirectory); + if (childComponents.length < parentComponents.length) { + return false; + } + for (var i = 0; i < parentComponents.length; i++) { + var result = compareStrings(parentComponents[i], childComponents[i], ignoreCase); + if (result !== 0 /* EqualTo */) { + return false; + } + } + return true; + } + ts.containsPath = containsPath; 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 fileExtensionIsAny(path, extensions) { + for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) { + var extension = extensions_1[_i]; + if (fileExtensionIs(path, extension)) { + return true; + } + } + return false; + } + ts.fileExtensionIsAny = fileExtensionIsAny; + // Reserved characters, forces escaping of any non-word (or digit), non-whitespace character. + // It may be inefficient (we could just match (/[-[\]{}()*+?.,\\^$|#\s]/g), but this is future + // proof. + var reservedCharacterPattern = /[^\w\s\/]/g; + var wildcardCharCodes = [42 /* asterisk */, 63 /* question */]; + function getRegularExpressionForWildcard(specs, basePath, usage) { + if (specs === undefined || specs.length === 0) { + return undefined; + } + var pattern = ""; + var hasWrittenSubpattern = false; + spec: for (var _i = 0, specs_1 = specs; _i < specs_1.length; _i++) { + var spec = specs_1[_i]; + if (!spec) { + continue; + } + var subpattern = ""; + var hasRecursiveDirectoryWildcard = false; + var hasWrittenComponent = false; + var components = getNormalizedPathComponents(spec, basePath); + if (usage !== "exclude" && components[components.length - 1] === "**") { + continue spec; + } + // getNormalizedPathComponents includes the separator for the root component. + // We need to remove to create our regex correctly. + components[0] = removeTrailingDirectorySeparator(components[0]); + var optionalCount = 0; + for (var _a = 0, components_1 = components; _a < components_1.length; _a++) { + var component = components_1[_a]; + if (component === "**") { + if (hasRecursiveDirectoryWildcard) { + continue spec; + } + subpattern += "(/.+?)?"; + hasRecursiveDirectoryWildcard = true; + hasWrittenComponent = true; + } + else { + if (usage === "directories") { + subpattern += "("; + optionalCount++; + } + if (hasWrittenComponent) { + subpattern += ts.directorySeparator; + } + subpattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter); + hasWrittenComponent = true; + } + } + while (optionalCount > 0) { + subpattern += ")?"; + optionalCount--; + } + if (hasWrittenSubpattern) { + pattern += "|"; + } + pattern += "(" + subpattern + ")"; + hasWrittenSubpattern = true; + } + if (!pattern) { + return undefined; + } + return "^(" + pattern + (usage === "exclude" ? ")($|/)" : ")$"); + } + ts.getRegularExpressionForWildcard = getRegularExpressionForWildcard; + function replaceWildcardCharacter(match) { + return match === "*" ? "[^/]*" : match === "?" ? "[^/]" : "\\" + match; + } + function getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var absolutePath = combinePaths(currentDirectory, path); + return { + includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"), + includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"), + excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"), + basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames) + }; + } + ts.getFileMatcherPatterns = getFileMatcherPatterns; + function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, getFileSystemEntries) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + var patterns = getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory); + var regexFlag = useCaseSensitiveFileNames ? "" : "i"; + var includeFileRegex = patterns.includeFilePattern && new RegExp(patterns.includeFilePattern, regexFlag); + var includeDirectoryRegex = patterns.includeDirectoryPattern && new RegExp(patterns.includeDirectoryPattern, regexFlag); + var excludeRegex = patterns.excludePattern && new RegExp(patterns.excludePattern, regexFlag); + var result = []; + for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) { + var basePath = _a[_i]; + visitDirectory(basePath, combinePaths(currentDirectory, basePath)); + } + return result; + function visitDirectory(path, absolutePath) { + var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories; + for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { + var current = files_1[_i]; + var name_1 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!extensions || fileExtensionIsAny(name_1, extensions)) && + (!includeFileRegex || includeFileRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + result.push(name_1); + } + } + for (var _b = 0, directories_1 = directories; _b < directories_1.length; _b++) { + var current = directories_1[_b]; + var name_2 = combinePaths(path, current); + var absoluteName = combinePaths(absolutePath, current); + if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + visitDirectory(name_2, absoluteName); + } + } + } + } + ts.matchFiles = matchFiles; + /** + * Computes the unique non-wildcard base paths amongst the provided include patterns. + */ + function getBasePaths(path, includes, useCaseSensitiveFileNames) { + // Storage for our results in the form of literal paths (e.g. the paths as written by the user). + var basePaths = [path]; + if (includes) { + // Storage for literal base paths amongst the include patterns. + var includeBasePaths = []; + for (var _i = 0, includes_1 = includes; _i < includes_1.length; _i++) { + var include = includes_1[_i]; + // We also need to check the relative paths by converting them to absolute and normalizing + // in case they escape the base path (e.g "..\somedirectory") + var absolute = isRootedDiskPath(include) ? include : normalizePath(combinePaths(path, include)); + var wildcardOffset = indexOfAnyCharCode(absolute, wildcardCharCodes); + var includeBasePath = wildcardOffset < 0 + ? removeTrailingDirectorySeparator(getDirectoryPath(absolute)) + : absolute.substring(0, absolute.lastIndexOf(ts.directorySeparator, wildcardOffset)); + // Append the literal and canonical candidate base paths. + includeBasePaths.push(includeBasePath); + } + // Sort the offsets array using either the literal or canonical path representations. + includeBasePaths.sort(useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive); + // Iterate over each include base path and include unique base paths that are not a + // subpath of an existing base path + include: for (var i = 0; i < includeBasePaths.length; i++) { + var includeBasePath = includeBasePaths[i]; + for (var j = 0; j < basePaths.length; j++) { + if (containsPath(basePaths[j], includeBasePath, path, !useCaseSensitiveFileNames)) { + continue include; + } + } + basePaths.push(includeBasePath); + } + } + return basePaths; + } function ensureScriptKind(fileName, scriptKind) { // Using scriptKind as a condition handles both: // - 'scriptKind' is unspecified and thus it is `undefined` @@ -1692,6 +1976,57 @@ var ts; return false; } ts.isSupportedSourceFileName = isSupportedSourceFileName; + /** + * Extension boundaries by priority. Lower numbers indicate higher priorities, and are + * aligned to the offset of the highest priority extension in the + * allSupportedExtensions array. + */ + (function (ExtensionPriority) { + ExtensionPriority[ExtensionPriority["TypeScriptFiles"] = 0] = "TypeScriptFiles"; + ExtensionPriority[ExtensionPriority["DeclarationAndJavaScriptFiles"] = 2] = "DeclarationAndJavaScriptFiles"; + ExtensionPriority[ExtensionPriority["Limit"] = 5] = "Limit"; + ExtensionPriority[ExtensionPriority["Highest"] = 0] = "Highest"; + ExtensionPriority[ExtensionPriority["Lowest"] = 2] = "Lowest"; + })(ts.ExtensionPriority || (ts.ExtensionPriority = {})); + var ExtensionPriority = ts.ExtensionPriority; + function getExtensionPriority(path, supportedExtensions) { + for (var i = supportedExtensions.length - 1; i >= 0; i--) { + if (fileExtensionIs(path, supportedExtensions[i])) { + return adjustExtensionPriority(i); + } + } + // If its not in the list of supported extensions, this is likely a + // TypeScript file with a non-ts extension + return 0 /* Highest */; + } + ts.getExtensionPriority = getExtensionPriority; + /** + * Adjusts an extension priority to be the highest priority within the same range. + */ + function adjustExtensionPriority(extensionPriority) { + if (extensionPriority < 2 /* DeclarationAndJavaScriptFiles */) { + return 0 /* TypeScriptFiles */; + } + else if (extensionPriority < 5 /* Limit */) { + return 2 /* DeclarationAndJavaScriptFiles */; + } + else { + return 5 /* Limit */; + } + } + ts.adjustExtensionPriority = adjustExtensionPriority; + /** + * Gets the next lowest extension priority for a given priority. + */ + function getNextLowestExtensionPriority(extensionPriority) { + if (extensionPriority < 2 /* DeclarationAndJavaScriptFiles */) { + return 2 /* DeclarationAndJavaScriptFiles */; + } + else { + return 5 /* Limit */; + } + } + ts.getNextLowestExtensionPriority = getNextLowestExtensionPriority; var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"]; function removeFileExtension(path) { for (var _i = 0, extensionsToRemove_1 = extensionsToRemove; _i < extensionsToRemove_1.length; _i++) { @@ -1712,6 +2047,10 @@ var ts; return ext === ".jsx" || ext === ".tsx"; } ts.isJsxOrTsxExtension = isJsxOrTsxExtension; + function changeExtension(path, newExtension) { + return (removeFileExtension(path) + newExtension); + } + ts.changeExtension = changeExtension; function Symbol(flags, name) { this.flags = flags; this.name = name; @@ -1790,6 +2129,7 @@ var ts; ts.sys = (function () { function getWScriptSystem() { var fso = new ActiveXObject("Scripting.FileSystemObject"); + var shell = new ActiveXObject("WScript.Shell"); var fileStream = new ActiveXObject("ADODB.Stream"); fileStream.Type = 2 /*text*/; var binaryStream = new ActiveXObject("ADODB.Stream"); @@ -1851,9 +2191,6 @@ var ts; fileStream.Close(); } } - function getCanonicalPath(path) { - return path.toLowerCase(); - } function getNames(collection) { var result = []; for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) { @@ -1865,30 +2202,19 @@ var ts; var folder = fso.GetFolder(path); return getNames(folder.subfolders); } - 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) { + function getAccessibleFileSystemEntries(path) { + try { 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); - } - } + var directories = getNames(folder.subfolders); + return { files: files, directories: directories }; } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, /*useCaseSensitiveFileNames*/ false, shell.CurrentDirectory, getAccessibleFileSystemEntries); } return { args: args, @@ -1917,7 +2243,7 @@ var ts; return WScript.ScriptFullName; }, getCurrentDirectory: function () { - return new ActiveXObject("WScript.Shell").CurrentDirectory; + return shell.CurrentDirectory; }, getDirectories: getDirectories, readDirectory: readDirectory, @@ -2056,8 +2382,41 @@ var ts; } } } - function getCanonicalPath(path) { - return useCaseSensitiveFileNames ? path : path.toLowerCase(); + function getAccessibleFileSystemEntries(path) { + try { + var entries = _fs.readdirSync(path || ".").sort(); + var files = []; + var directories = []; + for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) { + var entry = entries_1[_i]; + // This is necessary because on some file system node fails to exclude + // "." and "..". See https://github.com/nodejs/node/issues/4002 + if (entry === "." || entry === "..") { + continue; + } + var name_3 = ts.combinePaths(path, entry); + var stat = void 0; + try { + stat = _fs.statSync(name_3); + } + catch (e) { + continue; + } + if (stat.isFile()) { + files.push(entry); + } + else if (stat.isDirectory()) { + directories.push(entry); + } + } + return { files: files, directories: directories }; + } + catch (e) { + return { files: [], directories: [] }; + } + } + function readDirectory(path, extensions, excludes, includes) { + return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), getAccessibleFileSystemEntries); } var FileSystemEntryKind; (function (FileSystemEntryKind) { @@ -2085,40 +2444,6 @@ var ts; function getDirectories(path) { return ts.filter(_fs.readdirSync(path), function (p) { return fileSystemEntryExists(ts.combinePaths(path, p), 1 /* Directory */); }); } - 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]; - // 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; - } - 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, @@ -2206,6 +2531,16 @@ var ts; } return process.memoryUsage().heapUsed; }, + getFileSize: function (path) { + try { + var stat = _fs.statSync(path); + if (stat.isFile()) { + return stat.size; + } + } + catch (e) { } + return 0; + }, exit: function (exitCode) { process.exit(exitCode); }, @@ -2239,7 +2574,10 @@ var ts; getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, getDirectories: ChakraHost.getDirectories, - readDirectory: ChakraHost.readDirectory, + readDirectory: function (path, extensions, excludes, includes) { + var pattern = ts.getFileMatcherPatterns(path, extensions, excludes, includes, !!ChakraHost.useCaseSensitiveFileNames, ChakraHost.currentDirectory); + return ChakraHost.readDirectory(path, extensions, pattern.basePaths, pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern); + }, exit: ChakraHost.quit, realpath: realpath }; @@ -2409,7 +2747,7 @@ var ts; 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." }, + A_parameter_property_may_not_be_declared_using_a_binding_pattern: { code: 1187, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187", message: "A parameter property may not be declared using 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." }, @@ -2425,7 +2763,6 @@ var ts; 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_2015_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_2015_modules_Consider_using_import_Asteri_1202", message: "Import assignment cannot be used when targeting ECMAScript 2015 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_2015_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_2015_modules_Consider_using_export_defaul_1203", message: "Export assignment cannot be used when targeting ECMAScript 2015 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." }, @@ -2480,6 +2817,7 @@ var ts; 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." }, + A_parameter_property_cannot_be_declared_using_a_rest_parameter: { code: 1317, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317", message: "A parameter property cannot be declared using a rest parameter." }, 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." }, @@ -2750,6 +3088,8 @@ var ts; 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." }, Identifier_0_must_be_imported_from_a_module: { code: 2686, category: ts.DiagnosticCategory.Error, key: "Identifier_0_must_be_imported_from_a_module_2686", message: "Identifier '{0}' must be imported from a module" }, All_declarations_of_0_must_have_identical_modifiers: { code: 2687, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_0_must_have_identical_modifiers_2687", message: "All declarations of '{0}' must have identical modifiers." }, + Cannot_find_type_definition_file_for_0: { code: 2688, category: ts.DiagnosticCategory.Error, key: "Cannot_find_type_definition_file_for_0_2688", message: "Cannot find type definition file for '{0}'." }, + Cannot_extend_an_interface_0_Did_you_mean_implements: { code: 2689, category: ts.DiagnosticCategory.Error, key: "Cannot_extend_an_interface_0_Did_you_mean_implements_2689", message: "Cannot extend an interface '{0}'. Did you mean 'implements'?" }, 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}'." }, @@ -2823,6 +3163,8 @@ var ts; 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." }, + File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5010, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", message: "File specification cannot end in a recursive directory wildcard ('**'): '{0}'." }, + File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0: { code: 5011, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0_5011", message: "File specification cannot contain multiple recursive directory wildcards ('**'): '{0}'." }, 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}." }, @@ -2845,6 +3187,7 @@ var ts; 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" }, Substitutions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substitutions_for_pattern_0_should_be_an_array_5063", message: "Substitutions 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}'." }, + File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: { code: 5065, category: ts.DiagnosticCategory.Error, key: "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065", message: "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'." }, 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." }, @@ -2960,6 +3303,11 @@ var ts; 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}'" }, Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system: { code: 6131, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131", message: "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'." }, File_name_0_has_a_1_extension_stripping_it: { code: 6132, category: ts.DiagnosticCategory.Message, key: "File_name_0_has_a_1_extension_stripping_it_6132", message: "File name '{0}' has a '{1}' extension - stripping it" }, + _0_is_declared_but_never_used: { code: 6133, category: ts.DiagnosticCategory.Error, key: "_0_is_declared_but_never_used_6133", message: "'{0}' is declared but never used." }, + Report_Errors_on_Unused_Locals: { code: 6134, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Locals_6134", message: "Report Errors on Unused Locals." }, + Report_Errors_on_Unused_Parameters: { code: 6135, category: ts.DiagnosticCategory.Message, key: "Report_Errors_on_Unused_Parameters_6135", message: "Report Errors on Unused Parameters." }, + The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files: { code: 6136, category: ts.DiagnosticCategory.Message, key: "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136", message: "The maximum dependency depth to search under node_modules and load JavaScript files" }, + No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0: { code: 6137, category: ts.DiagnosticCategory.Message, key: "No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0_6137", message: "No types specified in 'package.json' but 'allowJs' is set, so returning 'main' value of '{0}'" }, 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." }, @@ -2996,7 +3344,6 @@ var ts; 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." }, @@ -3322,6 +3669,11 @@ var ts; ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; var hasOwnProperty = Object.prototype.hasOwnProperty; function isWhiteSpace(ch) { + return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); + } + ts.isWhiteSpace = isWhiteSpace; + /** Does not include line breaks. For that, see isWhiteSpaceLike. */ + function isWhiteSpaceSingleLine(ch) { // Note: nextLine is in the Zs space, and should be considered to be a whitespace. // It is explicitly not a line-break as it isn't in the exact set specified by EcmaScript. return ch === 32 /* space */ || @@ -3337,7 +3689,7 @@ var ts; ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; } - ts.isWhiteSpace = isWhiteSpace; + ts.isWhiteSpaceSingleLine = isWhiteSpaceSingleLine; function isLineBreak(ch) { // ES5 7.3: // The ECMAScript line terminator characters are listed in Table 3. @@ -3457,7 +3809,7 @@ var ts; } break; default: - if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch))) { pos++; continue; } @@ -3595,7 +3947,7 @@ var ts; } break; default: - if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch))) { if (result && result.length && isLineBreak(ch)) { ts.lastOrUndefined(result).hasTrailingNewLine = true; } @@ -3685,6 +4037,7 @@ var ts; scanJsxToken: scanJsxToken, scanJSDocToken: scanJSDocToken, scan: scan, + getText: getText, setText: setText, setScriptTarget: setScriptTarget, setLanguageVariant: setLanguageVariant, @@ -4085,7 +4438,7 @@ var ts; continue; } else { - while (pos < end && isWhiteSpace(text.charCodeAt(pos))) { + while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } return token = 5 /* WhitespaceTrivia */; @@ -4390,7 +4743,7 @@ var ts; } return token = getIdentifierToken(); } - else if (isWhiteSpace(ch)) { + else if (isWhiteSpaceSingleLine(ch)) { pos++; continue; } @@ -4543,7 +4896,7 @@ var ts; var ch = text.charCodeAt(pos); while (pos < end) { ch = text.charCodeAt(pos); - if (isWhiteSpace(ch)) { + if (isWhiteSpaceSingleLine(ch)) { pos++; } else { @@ -4632,6 +4985,9 @@ var ts; function tryScan(callback) { return speculationHelper(callback, /*isLookahead*/ false); } + function getText() { + return text; + } function setText(newText, start, length) { text = newText || ""; end = length === undefined ? text.length : start + length; @@ -4985,6 +5341,11 @@ var ts; (node.name.kind === 9 /* StringLiteral */ || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; + function isShorthandAmbientModule(node) { + // The only kind of module that can be missing a body is a shorthand ambient module. + return node.kind === 225 /* ModuleDeclaration */ && (!node.body); + } + ts.isShorthandAmbientModule = isShorthandAmbientModule; function isBlockScopedContainerTopLevel(node) { return node.kind === 256 /* SourceFile */ || node.kind === 225 /* ModuleDeclaration */ || @@ -5417,6 +5778,7 @@ var ts; case 157 /* ConstructorType */: return true; } + return false; } ts.isFunctionLikeKind = isFunctionLikeKind; function introducesArgumentsExoticObject(node) { @@ -5839,6 +6201,18 @@ var ts; return charCode === 39 /* singleQuote */ || charCode === 34 /* doubleQuote */; } ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; + /** + * Returns true if the node is a variable declaration whose initializer is a function expression. + * This function does not test if the node is in a JavaScript file or not. + */ + function isDeclarationOfFunctionExpression(s) { + if (s.valueDeclaration && s.valueDeclaration.kind === 218 /* VariableDeclaration */) { + var declaration = s.valueDeclaration; + return declaration.initializer && declaration.initializer.kind === 179 /* FunctionExpression */; + } + return false; + } + ts.isDeclarationOfFunctionExpression = isDeclarationOfFunctionExpression; /// Given a BinaryExpression, returns SpecialPropertyAssignmentKind for the various kinds of property /// assignments we treat as special in the binder function getSpecialPropertyAssignmentKind(expression) { @@ -6763,7 +7137,8 @@ var ts; 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)) { + // Don't emit if source file is a declaration file, or was located under node_modules + if (!isDeclarationFile(sourceFile) && !host.isSourceFileFromExternalLibrary(sourceFile)) { onSingleFileEmit(host, sourceFile); } } @@ -6793,11 +7168,12 @@ var ts; action(emitFileNames, [sourceFile], /*isBundledEmit*/ false); } function onBundledEmit(host) { - // Can emit only sources that are not declaration file and are either non module code or module with --module or --target es6 specified - var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { - return !isDeclarationFile(sourceFile) // Not a declaration file - && (!ts.isExternalModule(sourceFile) || !!getEmitModuleKind(options)); - }); // and not a module, unless module emit enabled + // Can emit only sources that are not declaration file and are either non module code or module with + // --module or --target es6 specified. Files included by searching under node_modules are also not emitted. + var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { return !isDeclarationFile(sourceFile) && + !host.isSourceFileFromExternalLibrary(sourceFile) && + (!ts.isExternalModule(sourceFile) || + !!getEmitModuleKind(options)); }); if (bundledSources.length) { var jsFilePath = options.outFile || options.out; var emitFileNames = { @@ -6815,7 +7191,9 @@ var ts; ts.forEachExpectedEmitFile = forEachExpectedEmitFile; function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); - sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); + var commonSourceDirectory = host.getCommonSourceDirectory(); + var isSourceFileInCommonSourceDirectory = host.getCanonicalFileName(sourceFilePath).indexOf(host.getCanonicalFileName(commonSourceDirectory)) === 0; + sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath; return ts.combinePaths(newDirPath, sourceFilePath); } ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir; @@ -7062,7 +7440,7 @@ var ts; } function calculateIndent(text, pos, end) { var currentLineIndent = 0; - for (; pos < end && ts.isWhiteSpace(text.charCodeAt(pos)); pos++) { + for (; pos < end && ts.isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) { if (text.charCodeAt(pos) === 9 /* tab */) { // Tabs = TabSize = indent size and go to next tabStop currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); @@ -7175,6 +7553,10 @@ var ts; return ts.forEach(ts.supportedJavascriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); } ts.hasJavaScriptFileExtension = hasJavaScriptFileExtension; + function hasTypeScriptFileExtension(fileName) { + return ts.forEach(ts.supportedTypeScriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); + } + ts.hasTypeScriptFileExtension = hasTypeScriptFileExtension; /** * Replace each instance of non-ascii characters by one, two, three, or four escape sequences * representing the UTF-8 encoding of the character, and return the expanded char code list. @@ -7679,7 +8061,6 @@ var ts; return visitNodes(cbNodes, node.properties); case 172 /* PropertyAccessExpression */: return visitNode(cbNode, node.expression) || - visitNode(cbNode, node.dotToken) || visitNode(cbNode, node.name); case 173 /* ElementAccessExpression */: return visitNode(cbNode, node.expression) || @@ -8582,12 +8963,12 @@ var ts; if (token === 82 /* ExportKeyword */) { nextToken(); if (token === 77 /* DefaultKeyword */) { - return lookAhead(nextTokenIsClassOrFunction); + return lookAhead(nextTokenIsClassOrFunctionOrAsync); } return token !== 37 /* AsteriskToken */ && token !== 116 /* AsKeyword */ && token !== 15 /* OpenBraceToken */ && canFollowModifier(); } if (token === 77 /* DefaultKeyword */) { - return nextTokenIsClassOrFunction(); + return nextTokenIsClassOrFunctionOrAsync(); } if (token === 113 /* StaticKeyword */) { nextToken(); @@ -8602,11 +8983,13 @@ var ts; return token === 19 /* OpenBracketToken */ || token === 15 /* OpenBraceToken */ || token === 37 /* AsteriskToken */ + || token === 22 /* DotDotDotToken */ || isLiteralPropertyName(); } - function nextTokenIsClassOrFunction() { + function nextTokenIsClassOrFunctionOrAsync() { nextToken(); - return token === 73 /* ClassKeyword */ || token === 87 /* FunctionKeyword */; + return token === 73 /* ClassKeyword */ || token === 87 /* FunctionKeyword */ || + (token === 118 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine)); } // True if positioned at the start of a list element function isListElement(parsingContext, inErrorRecovery) { @@ -10703,7 +11086,7 @@ var ts; // If it wasn't then just try to parse out a '.' and report an error. 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); + parseExpectedToken(21 /* DotToken */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); return finishNode(node); } @@ -10714,8 +11097,14 @@ var ts; if (lhs.kind === 69 /* Identifier */) { return lhs.text === rhs.text; } - return lhs.right.text === rhs.right.text && - tagNamesAreEquivalent(lhs.left, rhs.left); + if (lhs.kind === 97 /* ThisKeyword */) { + return true; + } + // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only + // take forms of JsxTagNameExpression which includes an identifier, "this" expression, or another propertyAccessExpression + // it is safe to case the expression property as such. See parseJsxElementName for how we parse tag name in Jsx element + return lhs.name.text === rhs.name.text && + tagNamesAreEquivalent(lhs.expression, rhs.expression); } function parseJsxElementOrSelfClosingElement(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); @@ -10826,15 +11215,20 @@ var ts; } function parseJsxElementName() { scanJsxIdentifier(); - var elementName = parseIdentifierName(); + // JsxElement can have name in the form of + // propertyAccessExpression + // primaryExpression in the form of an identifier and "this" keyword + // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword + // We only want to consider "this" as a primaryExpression + var expression = token === 97 /* ThisKeyword */ ? + parseTokenNode() : parseIdentifierName(); while (parseOptional(21 /* DotToken */)) { - scanJsxIdentifier(); - var node = createNode(139 /* QualifiedName */, elementName.pos); // !!! - node.left = elementName; - node.right = parseIdentifierName(); - elementName = finishNode(node); + var propertyAccess = createNode(172 /* PropertyAccessExpression */, expression.pos); + propertyAccess.expression = expression; + propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); + expression = finishNode(propertyAccess); } - return elementName; + return expression; } function parseJsxExpression(inExpressionContext) { var node = createNode(248 /* JsxExpression */); @@ -10905,7 +11299,6 @@ var ts; if (dotToken) { var propertyAccess = createNode(172 /* PropertyAccessExpression */, expression.pos); propertyAccess.expression = expression; - propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); expression = finishNode(propertyAccess); continue; @@ -11696,7 +12089,7 @@ var ts; case 56 /* EqualsToken */: return parseExportAssignment(fullStart, decorators, modifiers); case 116 /* AsKeyword */: - return parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers); + return parseNamespaceExportDeclaration(fullStart, decorators, modifiers); default: return parseExportDeclaration(fullStart, decorators, modifiers); } @@ -12250,7 +12643,12 @@ var ts; else { node.name = parseLiteralNode(/*internName*/ true); } - node.body = parseModuleBlock(); + if (token === 15 /* OpenBraceToken */) { + node.body = parseModuleBlock(); + } + else { + parseSemicolon(); + } return finishNode(node); } function parseModuleDeclaration(fullStart, decorators, modifiers) { @@ -12280,7 +12678,7 @@ var ts; function nextTokenIsSlash() { return nextToken() === 39 /* SlashToken */; } - function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { + function parseNamespaceExportDeclaration(fullStart, decorators, modifiers) { var exportDeclaration = createNode(228 /* NamespaceExportDeclaration */, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; @@ -13341,8 +13739,8 @@ var ts; 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]; + for (var _i = 0, array_8 = array; _i < array_8.length; _i++) { + var node = array_8[_i]; visitNode(node); } } @@ -13479,8 +13877,8 @@ var ts; array._children = undefined; // Adjust the pos or end (or both) of the intersecting array accordingly. adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); - for (var _i = 0, array_8 = array; _i < array_8.length; _i++) { - var node = array_8[_i]; + for (var _i = 0, array_9 = array; _i < array_9.length; _i++) { + var node = array_9[_i]; visitNode(node); } return; @@ -13752,7 +14150,8 @@ var ts; return state_1; } else if (node.kind === 225 /* ModuleDeclaration */) { - return getModuleInstanceState(node.body); + var body = node.body; + return body ? getModuleInstanceState(body) : 1 /* Instantiated */; } else { return 1 /* Instantiated */; @@ -14206,6 +14605,9 @@ var ts; case 227 /* CaseBlock */: bindCaseBlock(node); break; + case 249 /* CaseClause */: + bindCaseClause(node); + break; case 214 /* LabeledStatement */: bindLabeledStatement(node); break; @@ -14232,11 +14634,6 @@ var ts; break; } } - function isNarrowableReference(expr) { - return expr.kind === 69 /* Identifier */ || - expr.kind === 97 /* ThisKeyword */ || - expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); - } function isNarrowingExpression(expr) { switch (expr.kind) { case 69 /* Identifier */: @@ -14244,7 +14641,7 @@ var ts; case 172 /* PropertyAccessExpression */: return isNarrowableReference(expr); case 174 /* CallExpression */: - return true; + return hasNarrowableArgument(expr); case 178 /* ParenthesizedExpression */: return isNarrowingExpression(expr.expression); case 187 /* BinaryExpression */: @@ -14254,6 +14651,35 @@ var ts; } return false; } + function isNarrowableReference(expr) { + return expr.kind === 69 /* Identifier */ || + expr.kind === 97 /* ThisKeyword */ || + expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); + } + function hasNarrowableArgument(expr) { + if (expr.arguments) { + for (var _i = 0, _a = expr.arguments; _i < _a.length; _i++) { + var argument = _a[_i]; + if (isNarrowableReference(argument)) { + return true; + } + } + } + if (expr.expression.kind === 172 /* PropertyAccessExpression */ && + isNarrowableReference(expr.expression.expression)) { + return true; + } + return false; + } + function isNarrowingNullCheckOperands(expr1, expr2) { + return (expr1.kind === 93 /* NullKeyword */ || expr1.kind === 69 /* Identifier */ && expr1.text === "undefined") && isNarrowableOperand(expr2); + } + function isNarrowingTypeofOperands(expr1, expr2) { + return expr1.kind === 182 /* TypeOfExpression */ && isNarrowableOperand(expr1.expression) && expr2.kind === 9 /* StringLiteral */; + } + function isNarrowingDiscriminant(expr) { + return expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); + } function isNarrowingBinaryExpression(expr) { switch (expr.operatorToken.kind) { case 56 /* EqualsToken */: @@ -14262,20 +14688,34 @@ var ts; 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; + return isNarrowingNullCheckOperands(expr.right, expr.left) || isNarrowingNullCheckOperands(expr.left, expr.right) || + isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right) || + isNarrowingDiscriminant(expr.left) || isNarrowingDiscriminant(expr.right); case 91 /* InstanceOfKeyword */: - return isNarrowingExpression(expr.left); + return isNarrowableOperand(expr.left); case 24 /* CommaToken */: return isNarrowingExpression(expr.right); } return false; } + function isNarrowableOperand(expr) { + switch (expr.kind) { + case 178 /* ParenthesizedExpression */: + return isNarrowableOperand(expr.expression); + case 187 /* BinaryExpression */: + switch (expr.operatorToken.kind) { + case 56 /* EqualsToken */: + return isNarrowableOperand(expr.left); + case 24 /* CommaToken */: + return isNarrowableOperand(expr.right); + } + } + return isNarrowableReference(expr); + } + function isNarrowingSwitchStatement(switchStatement) { + var expr = switchStatement.expression; + return expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); + } function createBranchLabel() { return { flags: 4 /* BranchLabel */, @@ -14290,7 +14730,7 @@ var ts; } 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 */; + flow.flags |= flow.flags & 256 /* Referenced */ ? 512 /* Shared */ : 256 /* Referenced */; } function addAntecedent(label, antecedent) { if (!(antecedent.flags & 1 /* Unreachable */) && !ts.contains(label.antecedents, antecedent)) { @@ -14315,8 +14755,21 @@ var ts; setFlowNodeReferenced(antecedent); return { flags: flags, - antecedent: antecedent, - expression: expression + expression: expression, + antecedent: antecedent + }; + } + function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) { + if (!isNarrowingSwitchStatement(switchStatement)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: 128 /* SwitchClause */, + switchStatement: switchStatement, + clauseStart: clauseStart, + clauseEnd: clauseEnd, + antecedent: antecedent }; } function createFlowAssignment(antecedent, node) { @@ -14527,9 +14980,12 @@ var ts; preSwitchCaseFlow = currentFlow; bind(node.caseBlock); addAntecedent(postSwitchLabel, currentFlow); - var hasNonEmptyDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250 /* DefaultClause */ && c.statements.length; }); - if (!hasNonEmptyDefault) { - addAntecedent(postSwitchLabel, preSwitchCaseFlow); + var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 250 /* DefaultClause */; }); + // We mark a switch statement as possibly exhaustive if it has no default clause and if all + // case clauses have unreachable end points (e.g. they all return). + node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents; + if (!hasDefault) { + addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0)); } currentBreakTarget = saveBreakTarget; preSwitchCaseFlow = savePreSwitchCaseFlow; @@ -14537,28 +14993,32 @@ var ts; } function bindCaseBlock(node) { var clauses = node.clauses; + var fallthroughFlow = unreachableFlow; 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); - } + var clauseStart = i; + while (!clauses[i].statements.length && i + 1 < clauses.length) { + bind(clauses[i]); + i++; } - else { - bind(clause); + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1)); + addAntecedent(preCaseLabel, fallthroughFlow); + currentFlow = finishFlowLabel(preCaseLabel); + var clause = clauses[i]; + bind(clause); + fallthroughFlow = currentFlow; + if (!(currentFlow.flags & 1 /* Unreachable */) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); } } } + function bindCaseClause(node) { + var saveCurrentFlow = currentFlow; + currentFlow = preSwitchCaseFlow; + bind(node.expression); + currentFlow = saveCurrentFlow; + ts.forEach(node.statements, bind); + } function pushActiveLabel(name, breakTarget, continueTarget) { var activeLabel = { name: name, @@ -14855,7 +15315,7 @@ var ts; } function hasExportDeclarations(node) { var body = node.kind === 256 /* SourceFile */ ? node : node.body; - if (body.kind === 256 /* SourceFile */ || body.kind === 226 /* ModuleBlock */) { + if (body && (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 === 236 /* ExportDeclaration */ || stat.kind === 235 /* ExportAssignment */) { @@ -15471,7 +15931,7 @@ var ts; constructorFunction.parent = classPrototype; classPrototype.parent = leftSideOfAssignment; var funcSymbol = container.locals[constructorFunction.text]; - if (!funcSymbol || !(funcSymbol.flags & 16 /* Function */)) { + if (!funcSymbol || !(funcSymbol.flags & 16 /* Function */ || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return; } // Set up the members collection if it doesn't exist already @@ -15716,6 +16176,7 @@ var ts; var compilerOptions = host.getCompilerOptions(); var languageVersion = compilerOptions.target || 0 /* ES3 */; var modulekind = ts.getEmitModuleKind(compilerOptions); + var noUnusedIdentifiers = !!compilerOptions.noUnusedLocals || !!compilerOptions.noUnusedParameters; var allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === ts.ModuleKind.System; var strictNullChecks = compilerOptions.strictNullChecks; var emitResolver = createResolver(); @@ -15832,6 +16293,7 @@ var ts; var getGlobalThenableType; var jsxElementClassType; var deferredNodes; + var deferredUnusedIdentifierNodes; var flowLoopStart = 0; var flowLoopCount = 0; var visitedFlowCount = 0; @@ -16193,7 +16655,8 @@ var ts; var declarationFile = ts.getSourceFileOfNode(declaration); var useFile = ts.getSourceFileOfNode(usage); if (declarationFile !== useFile) { - if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) { + if ((modulekind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) || + (!compilerOptions.outFile && !compilerOptions.out)) { // nodes are in different files and order cannot be determines return true; } @@ -16453,12 +16916,16 @@ var ts; lastLocation = location; location = location.parent; } + if (result && nameNotFoundMessage && noUnusedIdentifiers) { + result.isReferenced = true; + } if (!result) { result = getSymbol(globals, name, meaning); } if (!result) { if (nameNotFoundMessage) { - if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg)) { + if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && + !checkAndReportErrorForExtendingInterface(errorLocation)) { error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); } } @@ -16532,6 +16999,29 @@ var ts; } return false; } + function checkAndReportErrorForExtendingInterface(errorLocation) { + var parentClassExpression = errorLocation; + while (parentClassExpression) { + var kind = parentClassExpression.kind; + if (kind === 69 /* Identifier */ || kind === 172 /* PropertyAccessExpression */) { + parentClassExpression = parentClassExpression.parent; + continue; + } + if (kind === 194 /* ExpressionWithTypeArguments */) { + break; + } + return false; + } + if (!parentClassExpression) { + return false; + } + var expression = parentClassExpression.expression; + if (resolveEntityName(expression, 64 /* Interface */, /*ignoreErrors*/ true)) { + error(errorLocation, ts.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, ts.getTextOfNode(expression)); + return true; + } + return false; + } function checkResolvedBlockScopedVariable(result, errorLocation) { ts.Debug.assert((result.flags & 2 /* BlockScopedVariable */) !== 0); // Block-scoped variables cannot be used before their definition @@ -16579,9 +17069,11 @@ var ts; 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"]); + var exportDefaultSymbol = ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration) ? + moduleSymbol : + 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)); } @@ -16650,6 +17142,9 @@ var ts; if (targetSymbol) { var name_10 = specifier.propertyName || specifier.name; if (name_10.text) { + if (ts.isShorthandAmbientModule(moduleSymbol.valueDeclaration)) { + return moduleSymbol; + } var symbolFromVariable = void 0; // First check if module was specified with "export=". If so, get the member from the resolved type if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports["export="]) { @@ -16674,7 +17169,7 @@ var ts; function getTargetOfImportSpecifier(node) { return getExternalModuleMember(node.parent.parent.parent, node); } - function getTargetOfGlobalModuleExportDeclaration(node) { + function getTargetOfNamespaceExportDeclaration(node) { return resolveExternalModuleSymbol(node.parent.symbol); } function getTargetOfExportSpecifier(node) { @@ -16700,7 +17195,7 @@ var ts; case 235 /* ExportAssignment */: return getTargetOfExportAssignment(node); case 228 /* NamespaceExportDeclaration */: - return getTargetOfGlobalModuleExportDeclaration(node); + return getTargetOfNamespaceExportDeclaration(node); } } function resolveSymbol(symbol) { @@ -16800,9 +17295,12 @@ var ts; 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)) { + if (!namespace || ts.nodeIsMissing(right)) { return undefined; } + else if (namespace === unknownSymbol) { + return namespace; + } symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning); if (!symbol) { if (!ignoreErrors) { @@ -17883,16 +18381,13 @@ var ts; writePunctuation(writer, 27 /* GreaterThanToken */); } } - function buildDisplayForParametersAndDelimiters(thisType, parameters, writer, enclosingDeclaration, flags, symbolStack) { + function buildDisplayForParametersAndDelimiters(thisParameter, parameters, writer, enclosingDeclaration, flags, symbolStack) { writePunctuation(writer, 17 /* OpenParenToken */); - if (thisType) { - writeKeyword(writer, 97 /* ThisKeyword */); - writePunctuation(writer, 54 /* ColonToken */); - writeSpace(writer); - buildTypeDisplay(thisType, writer, enclosingDeclaration, flags, symbolStack); + if (thisParameter) { + buildParameterDisplay(thisParameter, writer, enclosingDeclaration, flags, symbolStack); } for (var i = 0; i < parameters.length; i++) { - if (i > 0 || thisType) { + if (i > 0 || thisParameter) { writePunctuation(writer, 24 /* CommaToken */); writeSpace(writer); } @@ -17942,7 +18437,7 @@ var ts; else { buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack); } - buildDisplayForParametersAndDelimiters(signature.thisType, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); + buildDisplayForParametersAndDelimiters(signature.thisParameter, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack); } return _displayBuilder || (_displayBuilder = { @@ -18171,6 +18666,9 @@ var ts; function isTypeAny(type) { return type && (type.flags & 1 /* Any */) !== 0; } + function isTypeNever(type) { + return type && (type.flags & 134217728 /* Never */) !== 0; + } // Return the type of a binding element parent. We check SymbolLinks first to see if a type has been // assigned by contextual typing. function getTypeForBindingElementParent(node) { @@ -18335,12 +18833,14 @@ var ts; if (func.kind === 150 /* SetAccessor */ && !ts.hasDynamicName(func)) { var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149 /* GetAccessor */); if (getter) { - var signature = getSignatureFromDeclaration(getter); + var getterSignature = getSignatureFromDeclaration(getter); var thisParameter = getAccessorThisParameter(func); if (thisParameter && declaration === thisParameter) { - return signature.thisType; + // Use the type from the *getter* + ts.Debug.assert(!thisParameter.type); + return getTypeOfSymbol(getterSignature.thisParameter); } - return getReturnTypeOfSignature(signature); + return getReturnTypeOfSignature(getterSignature); } } // Use contextual parameter type if one is available @@ -18491,23 +18991,26 @@ var ts; if (declaration.kind === 235 /* ExportAssignment */) { return links.type = checkExpression(declaration.expression); } - // Handle module.exports = expr - if (declaration.kind === 187 /* BinaryExpression */) { - return links.type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); - } - if (declaration.kind === 172 /* PropertyAccessExpression */) { - // Declarations only exist for property access expressions for certain - // special assignment kinds - 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); - } - } // Handle variable, parameter or property if (!pushTypeResolution(symbol, 0 /* Type */)) { return unknownType; } - var type = getWidenedTypeForVariableLikeDeclaration(declaration, /*reportErrors*/ true); + var type = undefined; + // Handle module.exports = expr or this.p = expr + if (declaration.kind === 187 /* BinaryExpression */) { + type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); + } + else if (declaration.kind === 172 /* PropertyAccessExpression */) { + // Declarations only exist for property access expressions for certain + // special assignment kinds + if (declaration.parent.kind === 187 /* BinaryExpression */) { + // Handle exports.p = expr or className.prototype.method = expr + type = checkExpressionCached(declaration.parent.right); + } + } + if (type === undefined) { + type = getWidenedTypeForVariableLikeDeclaration(declaration, /*reportErrors*/ true); + } if (!popTypeResolution()) { if (symbol.valueDeclaration.type) { // Variable has type annotation that circularly references the variable itself @@ -18538,14 +19041,12 @@ 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 getAnnotatedAccessorThisParameter(accessor) { + var parameter = getAccessorThisParameter(accessor); + return parameter && parameter.symbol; + } + function getThisTypeOfDeclaration(declaration) { + return getThisTypeOfSignature(getSignatureFromDeclaration(declaration)); } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); @@ -18600,9 +19101,14 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var type = createObjectType(65536 /* Anonymous */, symbol); - links.type = strictNullChecks && symbol.flags & 536870912 /* Optional */ ? - addTypeKind(type, 32 /* Undefined */) : type; + if (symbol.valueDeclaration.kind === 225 /* ModuleDeclaration */ && ts.isShorthandAmbientModule(symbol.valueDeclaration)) { + links.type = anyType; + } + else { + var type = createObjectType(65536 /* Anonymous */, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 /* Optional */ ? + addTypeKind(type, 32 /* Undefined */) : type; + } } return links.type; } @@ -19181,12 +19687,12 @@ var ts; type.typeArguments : ts.concatenate(type.typeArguments, [type]); resolveObjectTypeMembers(type, source, typeParameters, typeArguments); } - function createSignature(declaration, typeParameters, thisType, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { + function createSignature(declaration, typeParameters, thisParameter, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { var sig = new Signature(checker); sig.declaration = declaration; sig.typeParameters = typeParameters; sig.parameters = parameters; - sig.thisType = thisType; + sig.thisParameter = thisParameter; sig.resolvedReturnType = resolvedReturnType; sig.typePredicate = typePredicate; sig.minArgumentCount = minArgumentCount; @@ -19195,7 +19701,7 @@ var ts; 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); + return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); } function getDefaultConstructSignatures(classType) { var baseConstructorType = getBaseConstructorTypeOfClass(classType); @@ -19289,8 +19795,9 @@ var ts; // Union the result types when more than one signature matches 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; })); + if (ts.forEach(unionSignatures, function (sig) { return sig.thisParameter; })) { + var thisType = getUnionType(ts.map(unionSignatures, function (sig) { return getTypeOfSymbol(sig.thisParameter) || anyType; })); + s.thisParameter = createTransientSymbol(signature.thisParameter, thisType); } // Clear resolved return type we possibly got from cloneSignature s.resolvedReturnType = undefined; @@ -19500,6 +20007,7 @@ var ts; var props; // Flags we want to propagate to the result if they exist in all source symbols var commonFlags = (containingType.flags & 32768 /* Intersection */) ? 536870912 /* Optional */ : 0 /* None */; + var isReadonly = false; for (var _i = 0, types_2 = types; _i < types_2.length; _i++) { var current = types_2[_i]; var type = getApparentType(current); @@ -19513,6 +20021,9 @@ var ts; else if (!ts.contains(props, prop)) { props.push(prop); } + if (isReadonlySymbol(prop)) { + isReadonly = true; + } } else if (containingType.flags & 16384 /* Union */) { // A union type requires the property to be present in all constituent types @@ -19541,6 +20052,7 @@ var ts; commonFlags, name); result.containingType = containingType; result.declarations = declarations; + result.isReadonly = isReadonly; result.type = containingType.flags & 16384 /* Union */ ? getUnionType(propTypes) : getIntersectionType(propTypes); return result; } @@ -19660,7 +20172,7 @@ var ts; } return result; } - function isOptionalParameter(node) { + function isJSDocOptionalParameter(node) { if (node.flags & 134217728 /* JavaScriptFile */) { if (node.type && node.type.kind === 268 /* JSDocOptionalType */) { return true; @@ -19675,7 +20187,9 @@ var ts; } } } - if (ts.hasQuestionToken(node)) { + } + function isOptionalParameter(node) { + if (ts.hasQuestionToken(node) || isJSDocOptionalParameter(node)) { return true; } if (node.initializer) { @@ -19710,7 +20224,7 @@ var ts; var parameters = []; var hasStringLiterals = false; var minArgumentCount = -1; - var thisType = undefined; + var thisParameter = undefined; var hasThisParameter = void 0; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); // If this is a JSDoc construct signature, then skip the first parameter in the @@ -19726,7 +20240,7 @@ var ts; } if (i === 0 && paramSymbol.name === "this") { hasThisParameter = true; - thisType = param.type ? getTypeFromTypeNode(param.type) : unknownType; + thisParameter = param.symbol; } else { parameters.push(paramSymbol); @@ -19734,7 +20248,7 @@ var ts; if (param.type && param.type.kind === 166 /* StringLiteralType */) { hasStringLiterals = true; } - if (param.initializer || param.questionToken || param.dotDotDotToken) { + if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) { if (minArgumentCount < 0) { minArgumentCount = i - (hasThisParameter ? 1 : 0); } @@ -19747,10 +20261,12 @@ var ts; // 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)) { + (!hasThisParameter || !thisParameter)) { var otherKind = declaration.kind === 149 /* GetAccessor */ ? 150 /* SetAccessor */ : 149 /* GetAccessor */; - var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); - thisType = getAnnotatedAccessorThisType(setter); + var other = ts.getDeclarationOfKind(declaration.symbol, otherKind); + if (other) { + thisParameter = getAnnotatedAccessorThisParameter(other); + } } if (minArgumentCount < 0) { minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); @@ -19768,7 +20284,7 @@ var ts; 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); + links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } @@ -19843,6 +20359,11 @@ var ts; } return anyType; } + function getThisTypeOfSignature(signature) { + if (signature.thisParameter) { + return getTypeOfSymbol(signature.thisParameter); + } + } function getReturnTypeOfSignature(signature) { if (!signature.resolvedReturnType) { if (!pushTypeResolution(signature, 3 /* ResolvedReturnType */)) { @@ -20618,7 +21139,7 @@ var ts; 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); + var result = createSignature(signature.declaration, freshTypeParameters, signature.thisParameter && instantiateSymbol(signature.thisParameter, 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; @@ -20818,6 +21339,9 @@ var ts; function isTypeComparableTo(source, target) { return checkTypeComparableTo(source, target, /*errorNode*/ undefined); } + function areTypesComparable(type1, type2) { + return isTypeComparableTo(type1, type2) || isTypeComparableTo(type2, type1); + } function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) { return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain); } @@ -20850,17 +21374,21 @@ var ts; source = getErasedSignature(source); target = getErasedSignature(target); var result = -1 /* True */; - if (source.thisType && target.thisType && source.thisType !== voidType) { - // void sources are assignable to anything. - var related = compareTypes(source.thisType, target.thisType, /*reportErrors*/ false) - || compareTypes(target.thisType, source.thisType, reportErrors); - if (!related) { - if (reportErrors) { - errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType && sourceThisType !== voidType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + // void sources are assignable to anything. + var related = compareTypes(sourceThisType, targetThisType, /*reportErrors*/ false) + || compareTypes(targetThisType, sourceThisType, reportErrors); + if (!related) { + if (reportErrors) { + errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); + } + return 0 /* False */; } - return 0 /* False */; + result &= related; } - result &= related; } var sourceMax = getNumNonRestParameters(source); var targetMax = getNumNonRestParameters(target); @@ -21800,12 +22328,18 @@ var ts; source = getErasedSignature(source); target = getErasedSignature(target); var result = -1 /* True */; - if (!ignoreThisTypes && source.thisType && target.thisType) { - var related = compareTypes(source.thisType, target.thisType); - if (!related) { - return 0 /* False */; + if (!ignoreThisTypes) { + var sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType) { + var targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + var related = compareTypes(sourceThisType, targetThisType); + if (!related) { + return 0 /* False */; + } + result &= related; + } } - result &= related; } var targetLen = target.parameters.length; for (var i = 0; i < targetLen; i++) { @@ -21897,8 +22431,10 @@ var ts; function isTupleLikeType(type) { return !!getPropertyOfType(type, "0"); } - function isStringLiteralType(type) { - return type.flags & 256 /* StringLiteral */; + function isStringLiteralUnionType(type) { + return type.flags & 256 /* StringLiteral */ ? true : + type.flags & 16384 /* Union */ ? ts.forEach(type.types, isStringLiteralUnionType) : + false; } /** * Check if a Type was written as a tuple type literal. @@ -22709,6 +23245,31 @@ var ts; } return node; } + function getTypeOfSwitchClause(clause) { + if (clause.kind === 249 /* CaseClause */) { + var expr = clause.expression; + return expr.kind === 9 /* StringLiteral */ ? getStringLiteralTypeForText(expr.text) : checkExpression(expr); + } + return undefined; + } + function getSwitchClauseTypes(switchStatement) { + var links = getNodeLinks(switchStatement); + if (!links.switchTypes) { + // If all case clauses specify expressions that have unit types, we return an array + // of those unit types. Otherwise we return an empty array. + var types = ts.map(switchStatement.caseBlock.clauses, getTypeOfSwitchClause); + links.switchTypes = ts.forEach(types, function (t) { return !t || t.flags & 256 /* StringLiteral */; }) ? types : emptyArray; + } + return links.switchTypes; + } + function eachTypeContainedIn(source, types) { + return source.flags & 16384 /* Union */ ? !ts.forEach(source.types, function (t) { return !ts.contains(types, t); }) : ts.contains(types, source); + } + function filterType(type, f) { + return type.flags & 16384 /* Union */ ? + getUnionType(ts.filter(type.types, f)) : + f(type) ? type : neverType; + } function getFlowTypeOfReference(reference, declaredType, assumeInitialized, includeOuterFunctions) { var key; if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 16908175 /* Narrowable */)) { @@ -22724,7 +23285,7 @@ var ts; return result; function getTypeAtFlowNode(flow) { while (true) { - if (flow.flags & 256 /* Shared */) { + if (flow.flags & 512 /* 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. @@ -22745,6 +23306,9 @@ var ts; else if (flow.flags & 96 /* Condition */) { type = getTypeAtFlowCondition(flow); } + else if (flow.flags & 128 /* SwitchClause */) { + type = getTypeAtSwitchClause(flow); + } else if (flow.flags & 12 /* Label */) { if (flow.antecedents.length === 1) { flow = flow.antecedents[0]; @@ -22769,7 +23333,7 @@ var ts; // simply return the declared type to reduce follow-on errors. type = declaredType; } - if (flow.flags & 256 /* Shared */) { + if (flow.flags & 512 /* Shared */) { // Record visited node and the associated type in the cache. visitedFlowNodes[visitedFlowCount] = flow; visitedFlowTypes[visitedFlowCount] = type; @@ -22825,6 +23389,10 @@ var ts; } return type; } + function getTypeAtSwitchClause(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + return narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd); + } function getTypeAtFlowBranchLabel(flow) { var antecedentTypes = []; for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { @@ -22903,11 +23471,26 @@ var ts; case 31 /* ExclamationEqualsToken */: case 32 /* EqualsEqualsEqualsToken */: case 33 /* ExclamationEqualsEqualsToken */: - if (isNullOrUndefinedLiteral(expr.right)) { - return narrowTypeByNullCheck(type, expr, assumeTrue); + var left = expr.left; + var operator = expr.operatorToken.kind; + var right = expr.right; + if (isNullOrUndefinedLiteral(right)) { + return narrowTypeByNullCheck(type, left, operator, right, assumeTrue); } - if (expr.left.kind === 182 /* TypeOfExpression */ && expr.right.kind === 9 /* StringLiteral */) { - return narrowTypeByTypeof(type, expr, assumeTrue); + if (isNullOrUndefinedLiteral(left)) { + return narrowTypeByNullCheck(type, right, operator, left, assumeTrue); + } + if (left.kind === 182 /* TypeOfExpression */ && right.kind === 9 /* StringLiteral */) { + return narrowTypeByTypeof(type, left, operator, right, assumeTrue); + } + if (right.kind === 182 /* TypeOfExpression */ && left.kind === 9 /* StringLiteral */) { + return narrowTypeByTypeof(type, right, operator, left, assumeTrue); + } + if (left.kind === 172 /* PropertyAccessExpression */) { + return narrowTypeByDiscriminant(type, left, operator, right, assumeTrue); + } + if (right.kind === 172 /* PropertyAccessExpression */) { + return narrowTypeByDiscriminant(type, right, operator, left, assumeTrue); } break; case 91 /* InstanceOfKeyword */: @@ -22917,54 +23500,100 @@ var ts; } return type; } - function narrowTypeByNullCheck(type, expr, assumeTrue) { - // We have '==', '!=', '===', or '!==' operator with 'null' or 'undefined' on the right - var operator = expr.operatorToken.kind; + function narrowTypeByNullCheck(type, target, operator, literal, assumeTrue) { + // We have '==', '!=', '===', or '!==' operator with 'null' or 'undefined' as value if (operator === 31 /* ExclamationEqualsToken */ || operator === 33 /* ExclamationEqualsEqualsToken */) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(expr.left))) { + if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(target))) { return type; } var doubleEquals = operator === 30 /* EqualsEqualsToken */ || operator === 31 /* ExclamationEqualsToken */; var facts = doubleEquals ? assumeTrue ? 65536 /* EQUndefinedOrNull */ : 524288 /* NEUndefinedOrNull */ : - expr.right.kind === 93 /* NullKeyword */ ? + literal.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 = getReferenceFromExpression(expr.left.expression); - var right = expr.right; - if (!isMatchingReference(reference, left)) { + function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) { + // We have '==', '!=', '====', or !==' operator with 'typeof xxx' and string literal operands + var target = getReferenceFromExpression(typeOfExpr.expression); + if (!isMatchingReference(reference, target)) { // 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)) { + if (containsMatchingReference(reference, target)) { return declaredType; } return type; } - if (expr.operatorToken.kind === 31 /* ExclamationEqualsToken */ || - expr.operatorToken.kind === 33 /* ExclamationEqualsEqualsToken */) { + if (operator === 31 /* ExclamationEqualsToken */ || operator === 33 /* ExclamationEqualsEqualsToken */) { assumeTrue = !assumeTrue; } 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); + var targetType = ts.getProperty(typeofTypesByName, literal.text); if (targetType && isTypeSubtypeOf(targetType, type)) { return targetType; } } var facts = assumeTrue ? - ts.getProperty(typeofEQFacts, right.text) || 64 /* TypeofEQHostObject */ : - ts.getProperty(typeofNEFacts, right.text) || 8192 /* TypeofNEHostObject */; + ts.getProperty(typeofEQFacts, literal.text) || 64 /* TypeofEQHostObject */ : + ts.getProperty(typeofNEFacts, literal.text) || 8192 /* TypeofNEHostObject */; return getTypeWithFacts(type, facts); } + function narrowTypeByDiscriminant(type, propAccess, operator, value, assumeTrue) { + // We have '==', '!=', '===', or '!==' operator with property access as target + if (!isMatchingReference(reference, propAccess.expression)) { + return type; + } + var propName = propAccess.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var discriminantType = value.kind === 9 /* StringLiteral */ ? getStringLiteralTypeForText(value.text) : checkExpression(value); + if (!isStringLiteralUnionType(discriminantType)) { + return type; + } + if (operator === 31 /* ExclamationEqualsToken */ || operator === 33 /* ExclamationEqualsEqualsToken */) { + assumeTrue = !assumeTrue; + } + if (assumeTrue) { + return filterType(type, function (t) { return areTypesComparable(getTypeOfPropertyOfType(t, propName), discriminantType); }); + } + if (discriminantType.flags & 256 /* StringLiteral */) { + return filterType(type, function (t) { return getTypeOfPropertyOfType(t, propName) !== discriminantType; }); + } + return type; + } + function narrowTypeBySwitchOnDiscriminant(type, switchStatement, clauseStart, clauseEnd) { + // We have switch statement with property access expression + if (!isMatchingReference(reference, switchStatement.expression.expression)) { + return type; + } + var propName = switchStatement.expression.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + var switchTypes = getSwitchClauseTypes(switchStatement); + if (!switchTypes.length) { + return type; + } + var clauseTypes = switchTypes.slice(clauseStart, clauseEnd); + var hasDefaultClause = clauseStart === clauseEnd || ts.contains(clauseTypes, undefined); + var caseTypes = hasDefaultClause ? ts.filter(clauseTypes, function (t) { return !!t; }) : clauseTypes; + var discriminantType = caseTypes.length ? getUnionType(caseTypes) : undefined; + var caseType = discriminantType && filterType(type, function (t) { return isTypeComparableTo(discriminantType, getTypeOfPropertyOfType(t, propName)); }); + if (!hasDefaultClause) { + return caseType; + } + var defaultType = filterType(type, function (t) { return !eachTypeContainedIn(getTypeOfPropertyOfType(t, propName), switchTypes); }); + return caseType ? getUnionType([caseType, defaultType]) : defaultType; + } function narrowTypeByInstanceof(type, expr, assumeTrue) { var left = getReferenceFromExpression(expr.left); if (!isMatchingReference(reference, left)) { @@ -23403,9 +24032,9 @@ var ts; if (type) { return type; } - var signature = getSignatureFromDeclaration(container); - if (signature.thisType) { - return signature.thisType; + var thisType = getThisTypeOfDeclaration(container); + if (thisType) { + return thisType; } } if (ts.isClassLike(container.parent)) { @@ -23624,7 +24253,7 @@ var ts; if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180 /* ArrowFunction */) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { - return contextualSignature.thisType; + return getThisTypeOfSignature(contextualSignature); } } return undefined; @@ -23836,9 +24465,6 @@ var ts; function getIndexTypeOfContextualType(type, kind) { return applyToContextualType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }); } - function contextualTypeIsStringLiteralType(type) { - return !!(type.flags & 16384 /* Union */ ? ts.forEach(type.types, isStringLiteralType) : isStringLiteralType(type)); - } // Return true if the given contextual type is a tuple-like type function contextualTypeIsTupleLikeType(type) { return !!(type.flags & 16384 /* Union */ ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type)); @@ -24360,7 +24986,8 @@ 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 === 139 /* QualifiedName */) { + // TODO (yuisu): comment + if (tagName.kind === 172 /* PropertyAccessExpression */ || tagName.kind === 97 /* ThisKeyword */) { return false; } else { @@ -24536,6 +25163,28 @@ var ts; return getResolvedJsxType(node, type, elemClassType); })); } + // If the elemType is a string type, we have to return anyType to prevent an error downstream as we will try to find construct or call signature of the type + if (elemType.flags & 2 /* String */) { + return anyType; + } + else if (elemType.flags & 256 /* StringLiteral */) { + // If the elemType is a stringLiteral type, we can then provide a check to make sure that the string literal type is one of the Jsx intrinsic element type + var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements); + if (intrinsicElementsType !== unknownType) { + var stringLiteralTypeName = elemType.text; + var intrinsicProp = getPropertyOfType(intrinsicElementsType, stringLiteralTypeName); + if (intrinsicProp) { + return getTypeOfSymbol(intrinsicProp); + } + var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */); + if (indexSignatureType) { + return indexSignatureType; + } + error(node, ts.Diagnostics.Property_0_does_not_exist_on_type_1, stringLiteralTypeName, "JSX." + JsxNames.IntrinsicElements); + } + // If we need to report an error, we already done so here. So just return any to prevent any more error downstream + return anyType; + } // Get the element instance type (the result of newing or invoking this tag) var elemInstanceType = getJsxElementInstanceType(node, elemType); if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { @@ -24839,11 +25488,21 @@ var ts; } var prop = getPropertyOfType(apparentType, right.text); if (!prop) { - if (right.text) { + if (right.text && !checkAndReportErrorForExtendingInterface(node)) { error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(right), typeToString(type.flags & 33554432 /* ThisType */ ? apparentType : type)); } return unknownType; } + if (noUnusedIdentifiers && + (prop.flags & 106500 /* ClassMember */) && + prop.valueDeclaration && (prop.valueDeclaration.flags & 8 /* Private */)) { + if (prop.flags & 16777216 /* Instantiated */) { + getSymbolLinks(prop).target.isReferenced = true; + } + else { + prop.isReferenced = true; + } + } getNodeLinks(node).resolvedSymbol = prop; if (prop.parent && prop.parent.flags & 32 /* Class */) { checkClassPropertyAccess(node, left, apparentType, prop); @@ -25249,10 +25908,11 @@ var ts; if (context.failedTypeParameterIndex !== undefined && !context.inferences[context.failedTypeParameterIndex].isFixed) { context.failedTypeParameterIndex = undefined; } - if (signature.thisType) { + var thisType = getThisTypeOfSignature(signature); + if (thisType) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; - inferTypes(context, thisArgumentType, signature.thisType); + inferTypes(context, thisArgumentType, thisType); } // We perform two passes over the arguments. In the first pass we infer from all arguments, but use // wildcards for all context sensitive function expressions. @@ -25316,7 +25976,8 @@ var ts; return typeArgumentsAreAssignable; } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { - if (signature.thisType && signature.thisType !== voidType && node.kind !== 175 /* NewExpression */) { + var thisType = getThisTypeOfSignature(signature); + if (thisType && 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. @@ -25324,7 +25985,7 @@ var ts; 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)) { + if (!checkTypeRelatedTo(thisArgumentType, getThisTypeOfSignature(signature), relation, errorNode, headMessage_1)) { return false; } } @@ -25969,7 +26630,7 @@ var ts; if (getReturnTypeOfSignature(signature) !== voidType) { error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); } - if (signature.thisType === voidType) { + if (getThisTypeOfSignature(signature) === voidType) { error(node, ts.Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void); } return signature; @@ -26126,8 +26787,12 @@ var ts; // 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 // in a JS file - var funcSymbol = checkExpression(node.expression).symbol; - if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16 /* Function */)) { + // Note:JS inferred classes might come from a variable declaration instead of a function declaration. + // In this case, using getResolvedSymbol directly is required to avoid losing the members from the declaration. + var funcSymbol = node.expression.kind === 69 /* Identifier */ ? + getResolvedSymbol(node.expression) : + checkExpression(node.expression).symbol; + if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16 /* Function */ || ts.isDeclarationOfFunctionExpression(funcSymbol))) { return getInferredClassType(funcSymbol); } else if (compilerOptions.noImplicitAny) { @@ -26147,6 +26812,7 @@ var ts; } function checkAssertion(node) { var exprType = getRegularTypeOfObjectLiteral(checkExpression(node.expression)); + checkSourceElement(node.type); var targetType = getTypeFromTypeNode(node.type); if (produceDiagnostics && targetType !== unknownType) { var widenedType = getWidenedType(exprType); @@ -26264,6 +26930,14 @@ var ts; } return emptyObjectType; } + function createPromiseReturnType(func, promisedType) { + var promiseType = createPromiseType(promisedType); + if (promiseType === emptyObjectType) { + error(func, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + return unknownType; + } + return promiseType; + } function getReturnTypeFromBody(func, contextualMapper) { var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); if (!func.body) { @@ -26297,19 +26971,12 @@ var ts; else { types = checkAndAggregateReturnExpressionTypes(func, contextualMapper); if (!types) { - return neverType; + // For an async function, the return type will not be never, but rather a Promise for never. + return isAsync ? createPromiseReturnType(func, neverType) : neverType; } if (types.length === 0) { - if (isAsync) { - // For an async function, the return type will not be void, but rather a Promise for void. - 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; + // For an async function, the return type will not be void, but rather a Promise for void. + return isAsync ? createPromiseReturnType(func, voidType) : voidType; } } // When yield/return statements are contextually typed we allow the return type to be a union type. @@ -26323,7 +26990,7 @@ var ts; else { error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); // Defer to unioning the return types so we get a) downstream errors earlier and b) better Salsa experience - return getUnionType(types); + return isAsync ? createPromiseReturnType(func, getUnionType(types)) : getUnionType(types); } } if (funcIsGenerator) { @@ -26334,20 +27001,10 @@ var ts; reportErrorsFromWidening(func, type); } var widenedType = getWidenedType(type); - if (isAsync) { - // From within an async function you can return either a non-promise value or a promise. Any - // Promise/A+ compatible implementation will always assimilate any foreign promise, so the - // return type of the body is awaited type of the body, wrapped in a native Promise type. - 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; - } + // From within an async function you can return either a non-promise value or a promise. Any + // Promise/A+ compatible implementation will always assimilate any foreign promise, so the + // return type of the body is awaited type of the body, wrapped in a native Promise type. + return isAsync ? createPromiseReturnType(func, widenedType) : widenedType; } function checkAndAggregateYieldOperandTypes(func, contextualMapper) { var aggregatedTypes = []; @@ -26366,10 +27023,40 @@ var ts; }); return aggregatedTypes; } + function isExhaustiveSwitchStatement(node) { + var expr = node.expression; + if (!node.possiblyExhaustive || expr.kind !== 172 /* PropertyAccessExpression */) { + return false; + } + var type = checkExpression(expr.expression); + if (!(type.flags & 16384 /* Union */)) { + return false; + } + var propName = expr.name.text; + var propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return false; + } + var switchTypes = getSwitchClauseTypes(node); + if (!switchTypes.length) { + return false; + } + return eachTypeContainedIn(propType, switchTypes); + } + function functionHasImplicitReturn(func) { + if (!(func.flags & 32768 /* HasImplicitReturn */)) { + return false; + } + var lastStatement = ts.lastOrUndefined(func.body.statements); + if (lastStatement && lastStatement.kind === 213 /* SwitchStatement */ && isExhaustiveSwitchStatement(lastStatement)) { + return false; + } + return true; + } function checkAndAggregateReturnExpressionTypes(func, contextualMapper) { var isAsync = ts.isAsyncFunctionLike(func); var aggregatedTypes = []; - var hasReturnWithNoExpression = !!(func.flags & 32768 /* HasImplicitReturn */); + var hasReturnWithNoExpression = functionHasImplicitReturn(func); var hasReturnOfTypeNever = false; ts.forEachReturnStatement(func.body, function (returnStatement) { var expr = returnStatement.expression; @@ -26423,7 +27110,7 @@ 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 !== 199 /* Block */ || !(func.flags & 32768 /* HasImplicitReturn */)) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 /* Block */ || !functionHasImplicitReturn(func)) { return; } var hasExplicitReturn = func.flags & 65536 /* HasExplicitReturn */; @@ -26543,6 +27230,7 @@ var ts; } } } + registerForUnusedIdentifiersCheck(node); } } function checkArithmeticOperandType(operand, type, diagnostic) { @@ -26558,7 +27246,9 @@ var ts; // Variables declared with 'const' // Get accessors without matching set accessors // Enum members - return symbol.flags & 4 /* Property */ && (getDeclarationFlagsFromSymbol(symbol) & 64 /* Readonly */) !== 0 || + // Unions and intersections of the above (unions and intersections eagerly set isReadonly on creation) + return symbol.isReadonly || + symbol.flags & 4 /* Property */ && (getDeclarationFlagsFromSymbol(symbol) & 64 /* Readonly */) !== 0 || symbol.flags & 3 /* Variable */ && (getDeclarationFlagsFromSymbol(symbol) & 2048 /* Const */) !== 0 || symbol.flags & 98304 /* Accessor */ && !(symbol.flags & 65536 /* SetAccessor */) || (symbol.flags & 8 /* EnumMember */) !== 0; @@ -26861,6 +27551,12 @@ var ts; if (exprOrAssignment.kind === 254 /* ShorthandPropertyAssignment */) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { + // In strict null checking mode, if a default value of a non-undefined type is specified, remove + // undefined from the final type. + if (strictNullChecks && + !(getCombinedTypeFlags(checkExpression(prop.objectAssignmentInitializer)) & 32 /* Undefined */)) { + sourceType = getTypeWithFacts(sourceType, 131072 /* NEUndefined */); + } checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); } target = exprOrAssignment.name; @@ -27016,7 +27712,7 @@ var ts; case 90 /* InKeyword */: return checkInExpression(left, right, leftType, rightType); case 51 /* AmpersandAmpersandToken */: - return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 126 /* Falsy */) : rightType; + return strictNullChecks ? addTypeKind(rightType, getCombinedTypeFlags(leftType) & 112 /* Falsy */) : rightType; case 52 /* BarBarToken */: return getUnionType([getNonNullableType(leftType), rightType]); case 56 /* EqualsToken */: @@ -27132,7 +27828,7 @@ var ts; } function checkStringLiteralExpression(node) { var contextualType = getContextualType(node); - if (contextualType && contextualTypeIsStringLiteralType(contextualType)) { + if (contextualType && isStringLiteralUnionType(contextualType)) { return getStringLiteralTypeForText(node.text); } return stringType; @@ -27506,6 +28202,9 @@ var ts; checkAsyncFunctionReturnType(node); } } + if (!node.body) { + checkUnusedTypeParameters(node); + } } } function checkClassForDuplicateDeclarations(node) { @@ -27523,8 +28222,8 @@ var ts; } } else { - var static = ts.forEach(member.modifiers, function (m) { return m.kind === 113 /* StaticKeyword */; }); - var names = static ? staticNames : instanceNames; + var isStatic = ts.forEach(member.modifiers, function (m) { return m.kind === 113 /* StaticKeyword */; }); + var names = isStatic ? staticNames : instanceNames; var memberName = member.name && ts.getPropertyNameForPropertyNameNode(member.name); if (memberName) { switch (member.kind) { @@ -27645,6 +28344,7 @@ var ts; // Grammar check for checking only related to constructorDeclaration checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node); checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); var symbol = getSymbolOfNode(node); var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind); // Only type check the symbol once @@ -27768,13 +28468,14 @@ var ts; // TypeScript 1.0 spec (April 2014): 4.5 // If both accessors include type annotations, the specified types must be identical. 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); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getThisTypeOfDeclaration, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } if (node.parent.kind !== 171 /* ObjectLiteralExpression */) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } else { checkNodeDeferred(node); @@ -27789,6 +28490,7 @@ var ts; } function checkAccessorDeferred(node) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } function checkMissingDeclaration(node) { checkDecorators(node); @@ -27813,13 +28515,15 @@ var ts; function checkTypeReferenceNode(node) { checkGrammarTypeArguments(node, node.typeArguments); var type = getTypeFromTypeReference(node); - if (type !== unknownType && node.typeArguments) { - // Do type argument local checks only if referenced type is successfully resolved - ts.forEach(node.typeArguments, checkSourceElement); - if (produceDiagnostics) { - var symbol = getNodeLinks(node).resolvedSymbol; - var typeParameters = symbol.flags & 524288 /* TypeAlias */ ? getSymbolLinks(symbol).typeParameters : type.target.localTypeParameters; - checkTypeArgumentConstraints(typeParameters, node.typeArguments); + if (type !== unknownType) { + if (node.typeArguments) { + // Do type argument local checks only if referenced type is successfully resolved + ts.forEach(node.typeArguments, checkSourceElement); + if (produceDiagnostics) { + var symbol = getNodeLinks(node).resolvedSymbol; + var typeParameters = symbol.flags & 524288 /* TypeAlias */ ? getSymbolLinks(symbol).typeParameters : type.target.localTypeParameters; + checkTypeArgumentConstraints(typeParameters, node.typeArguments); + } } } } @@ -27979,9 +28683,6 @@ var ts; } } } - // when checking exported function declarations across modules check only duplicate implementations - // names and consistency of modifiers are verified when we check local symbol - var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & 1536 /* Module */; var duplicateFunctionDeclaration = false; var multipleConstructorImplementation = false; for (var _i = 0, declarations_4 = declarations; _i < declarations_4.length; _i++) { @@ -28013,7 +28714,7 @@ var ts; duplicateFunctionDeclaration = true; } } - else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { + else if (previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { reportImplementationExpectedError(previousDeclaration); } if (ts.nodeIsPresent(node.body)) { @@ -28041,7 +28742,7 @@ var ts; }); } // Abstract methods can't have an implementation -- in particular, they don't need one. - if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && + if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && !(lastSeenNonAmbientDeclaration.flags & 128 /* Abstract */) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } @@ -28142,7 +28843,7 @@ var ts; } function checkNonThenableType(type, location, message) { type = getWidenedType(type); - if (!isTypeAny(type) && isTypeAssignableTo(type, getGlobalThenableType())) { + if (!isTypeAny(type) && !isTypeNever(type) && isTypeAssignableTo(type, getGlobalThenableType())) { if (location) { if (!message) { message = ts.Diagnostics.Operand_for_await_does_not_have_a_valid_callable_then_member; @@ -28168,37 +28869,39 @@ var ts; // ): any; // } // - if (promise.flags & 1 /* Any */) { + if (isTypeAny(promise)) { return undefined; } - if ((promise.flags & 4096 /* Reference */) && promise.target === tryGetGlobalPromiseType()) { - return promise.typeArguments[0]; + if (promise.flags & 4096 /* Reference */) { + if (promise.target === tryGetGlobalPromiseType() + || promise.target === getGlobalPromiseLikeType()) { + 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 /* Any */)) { + if (!thenFunction || isTypeAny(thenFunction)) { return undefined; } - var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0 /* Call */) : emptyArray; + var thenSignatures = getSignaturesOfType(thenFunction, 0 /* Call */); if (thenSignatures.length === 0) { return undefined; } var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072 /* NEUndefined */); - if (onfulfilledParameterType.flags & 1 /* Any */) { + if (isTypeAny(onfulfilledParameterType)) { return undefined; } var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0 /* Call */); if (onfulfilledParameterSignatures.length === 0) { return undefined; } - var valueParameterType = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); - return valueParameterType; + return getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); } function getTypeOfFirstParameterOfSignature(signature) { - return getTypeAtPosition(signature, 0); + return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : neverType; } /** * Gets the "awaited type" of a type. @@ -28572,6 +29275,140 @@ var ts; getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } } + registerForUnusedIdentifiersCheck(node); + } + function registerForUnusedIdentifiersCheck(node) { + if (deferredUnusedIdentifierNodes) { + deferredUnusedIdentifierNodes.push(node); + } + } + function checkUnusedIdentifiers() { + if (deferredUnusedIdentifierNodes) { + for (var _i = 0, deferredUnusedIdentifierNodes_1 = deferredUnusedIdentifierNodes; _i < deferredUnusedIdentifierNodes_1.length; _i++) { + var node = deferredUnusedIdentifierNodes_1[_i]; + switch (node.kind) { + case 256 /* SourceFile */: + case 225 /* ModuleDeclaration */: + checkUnusedModuleMembers(node); + break; + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + checkUnusedClassMembers(node); + checkUnusedTypeParameters(node); + break; + case 222 /* InterfaceDeclaration */: + checkUnusedTypeParameters(node); + break; + case 199 /* Block */: + case 227 /* CaseBlock */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + checkUnusedLocalsAndParameters(node); + break; + case 148 /* Constructor */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + if (node.body) { + checkUnusedLocalsAndParameters(node); + } + checkUnusedTypeParameters(node); + break; + case 146 /* MethodSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + checkUnusedTypeParameters(node); + break; + } + ; + } + } + } + function checkUnusedLocalsAndParameters(node) { + if (node.parent.kind !== 222 /* InterfaceDeclaration */ && noUnusedIdentifiers && !ts.isInAmbientContext(node)) { + var _loop_1 = function(key) { + if (ts.hasProperty(node.locals, key)) { + var local_1 = node.locals[key]; + if (!local_1.isReferenced) { + if (local_1.valueDeclaration && local_1.valueDeclaration.kind === 142 /* Parameter */) { + var parameter = local_1.valueDeclaration; + if (compilerOptions.noUnusedParameters && + !ts.isParameterPropertyDeclaration(parameter) && + !parameterNameStartsWithUnderscore(parameter)) { + error(local_1.valueDeclaration.name, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); + } + } + else if (compilerOptions.noUnusedLocals) { + ts.forEach(local_1.declarations, function (d) { return error(d.name || d, ts.Diagnostics._0_is_declared_but_never_used, local_1.name); }); + } + } + } + }; + for (var key in node.locals) { + _loop_1(key); + } + } + } + function parameterNameStartsWithUnderscore(parameter) { + return parameter.name && parameter.name.kind === 69 /* Identifier */ && parameter.name.text.charCodeAt(0) === 95 /* _ */; + } + function checkUnusedClassMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.members) { + for (var _i = 0, _a = node.members; _i < _a.length; _i++) { + var member = _a[_i]; + if (member.kind === 147 /* MethodDeclaration */ || member.kind === 145 /* PropertyDeclaration */) { + if (!member.symbol.isReferenced && member.flags & 8 /* Private */) { + error(member.name, ts.Diagnostics._0_is_declared_but_never_used, member.symbol.name); + } + } + else if (member.kind === 148 /* Constructor */) { + for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) { + var parameter = _c[_b]; + if (!parameter.symbol.isReferenced && parameter.flags & 8 /* Private */) { + error(parameter.name, ts.Diagnostics._0_is_declared_but_never_used, parameter.symbol.name); + } + } + } + } + } + } + } + function checkUnusedTypeParameters(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + if (node.typeParameters) { + for (var _i = 0, _a = node.typeParameters; _i < _a.length; _i++) { + var typeParameter = _a[_i]; + if (!typeParameter.symbol.isReferenced) { + error(typeParameter.name, ts.Diagnostics._0_is_declared_but_never_used, typeParameter.symbol.name); + } + } + } + } + } + function checkUnusedModuleMembers(node) { + if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) { + for (var key in node.locals) { + if (ts.hasProperty(node.locals, key)) { + var local = node.locals[key]; + if (!local.isReferenced && !local.exportSymbol) { + for (var _i = 0, _a = local.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + if (!ts.isAmbientModule(declaration)) { + error(declaration.name, ts.Diagnostics._0_is_declared_but_never_used, local.name); + } + } + } + } + } + } } function checkBlock(node) { // Grammar checking for SyntaxKind.Block @@ -28579,6 +29416,9 @@ var ts; checkGrammarStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkCollisionWithArgumentsInGeneratedCode(node) { // no rest parameters \ declaration context \ overload - no codegen impact @@ -28985,6 +29825,9 @@ var ts; if (node.incrementor) checkExpression(node.incrementor); checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForOfStatement(node) { checkGrammarForInOrForOfStatement(node); @@ -29020,6 +29863,9 @@ var ts; } } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInStatement(node) { // Grammar checking @@ -29061,6 +29907,9 @@ var ts; error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter); } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInOrForOfVariableDeclaration(iterationStatement) { var variableDeclarationList = iterationStatement.initializer; @@ -29294,7 +30143,7 @@ var ts; } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; - return maybeTypeOfKind(unwrappedReturnType, 16 /* Void */ | 1 /* Any */); + return unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 16 /* Void */ | 1 /* Any */); } function checkReturnStatement(node) { // Grammar checking @@ -29392,6 +30241,9 @@ var ts; } ts.forEach(clause.statements, checkSourceElement); }); + if (node.caseBlock.locals) { + registerForUnusedIdentifiersCheck(node.caseBlock); + } } function checkLabeledStatement(node) { // Grammar checking @@ -29581,6 +30433,7 @@ var ts; } function checkClassExpressionDeferred(node) { ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassDeclaration(node) { if (!node.name && !(node.flags & 512 /* Default */)) { @@ -29588,6 +30441,7 @@ var ts; } checkClassLikeDeclaration(node); ts.forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassLikeDeclaration(node) { checkGrammarClassDeclarationHeritageClauses(node); @@ -29865,6 +30719,7 @@ var ts; ts.forEach(node.members, checkSourceElement); if (produceDiagnostics) { checkTypeForDuplicateIndexSignatures(node); + checkUnusedTypeParameters(node); } } function checkTypeAliasDeclaration(node) { @@ -30189,7 +31044,7 @@ var ts; // - augmentation for a global scope is always applied // - augmentation for some external module is applied if symbol for augmentation is merged (it was combined with target module). var checkBody = isGlobalAugmentation || (getSymbolOfNode(node).flags & 33554432 /* Merged */); - if (checkBody) { + if (checkBody && node.body) { // body of ambient external module is always a module block for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) { var statement = _a[_i]; @@ -30217,7 +31072,16 @@ var ts; } } } - checkSourceElement(node.body); + if (compilerOptions.noImplicitAny && !node.body) { + // Ambient shorthand module is an implicit any + reportImplicitAnyError(node, anyType); + } + if (node.body) { + checkSourceElement(node.body); + if (!ts.isGlobalScopeAugmentation(node)) { + registerForUnusedIdentifiersCheck(node); + } + } } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { @@ -30708,9 +31572,17 @@ var ts; checkGrammarSourceFile(node); potentialThisCollisions.length = 0; deferredNodes = []; + deferredUnusedIdentifierNodes = produceDiagnostics && noUnusedIdentifiers ? [] : undefined; ts.forEach(node.statements, checkSourceElement); checkDeferredNodes(); + if (ts.isExternalModule(node)) { + registerForUnusedIdentifiersCheck(node); + } + if (!node.isDeclarationFile) { + checkUnusedIdentifiers(); + } deferredNodes = undefined; + deferredUnusedIdentifierNodes = undefined; if (ts.isExternalOrCommonJsModule(node)) { checkExternalModuleExports(node); } @@ -31027,6 +31899,14 @@ var ts; case 139 /* QualifiedName */: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 97 /* ThisKeyword */: + var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false); + if (ts.isFunctionLike(container)) { + var sig = getSignatureFromDeclaration(container); + if (sig.thisParameter) { + return sig.thisParameter; + } + } + // fallthrough case 95 /* SuperKeyword */: var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; @@ -31267,7 +32147,10 @@ var ts; var parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { if (parentSymbol.flags & 512 /* ValueModule */ && parentSymbol.valueDeclaration.kind === 256 /* SourceFile */) { - return parentSymbol.valueDeclaration; + // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined. + if (parentSymbol.valueDeclaration === ts.getSourceFileOfNode(node)) { + return parentSymbol.valueDeclaration; + } } for (var n = node.parent; n; n = n.parent) { if ((n.kind === 225 /* ModuleDeclaration */ || n.kind === 224 /* EnumDeclaration */) && getSymbolOfNode(n) === parentSymbol) { @@ -31982,7 +32865,10 @@ var ts; return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); } 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); + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern); + } + else if (node.kind === 142 /* Parameter */ && (flags & 92 /* ParameterPropertyModifier */) && node.dotDotDotToken) { + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter); } if (flags & 256 /* Async */) { return checkGrammarAsyncModifier(node, lastAsync); @@ -32230,7 +33116,7 @@ var ts; var GetAccessor = 2; var SetAccessor = 4; var GetOrSetAccessor = GetAccessor | SetAccessor; - var _loop_1 = function(prop) { + var _loop_2 = function(prop) { var name_21 = prop.name; if (prop.kind === 193 /* OmittedExpression */ || name_21.kind === 140 /* ComputedPropertyName */) { @@ -32304,8 +33190,8 @@ var ts; }; 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; + var state_3 = _loop_2(prop); + if (typeof state_3 === "object") return state_3.value; } } function checkGrammarJsxElement(node) { @@ -33812,21 +34698,26 @@ var ts; writeTextOfNode(currentText, node.name); } } - while (node.body.kind !== 226 /* ModuleBlock */) { + while (node.body && node.body.kind !== 226 /* ModuleBlock */) { 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; + if (node.body) { + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + else { + write(";"); + } } function writeTypeAliasDeclaration(node) { var prevEnclosingDeclaration = enclosingDeclaration; @@ -35218,6 +36109,8 @@ var ts; return generateNameForExportDefault(); case 192 /* ClassExpression */: return generateNameForClassExpression(); + default: + ts.Debug.fail(); } } function getGeneratedNameForNode(node) { @@ -36033,6 +36926,20 @@ var ts; } return false; } + function getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node) { + if (languageVersion >= 2 /* ES6 */) { + var parent_14 = node.parent; + if (parent_14.kind === 172 /* PropertyAccessExpression */ && parent_14.expression === node) { + parent_14 = parent_14.parent; + while (parent_14 && parent_14.kind !== 145 /* PropertyDeclaration */) { + parent_14 = parent_14.parent; + } + return parent_14 && parent_14.kind === 145 /* PropertyDeclaration */ && (parent_14.flags & 32 /* Static */) !== 0 && + parent_14.parent.kind === 192 /* ClassExpression */ ? parent_14.parent : undefined; + } + } + return undefined; + } function emitIdentifier(node) { if (convertedLoopState) { if (node.text == "arguments" && resolver.isArgumentsLocalBinding(node)) { @@ -36046,6 +36953,14 @@ var ts; write(node.text); } else if (isExpressionIdentifier(node)) { + var classExpression = getClassExpressionInPropertyAccessInStaticPropertyDeclaration(node); + if (classExpression) { + var declaration = resolver.getReferencedValueDeclaration(node); + if (declaration === classExpression) { + write(getGeneratedNameForNode(declaration.name)); + return; + } + } emitExpressionIdentifier(node); } else if (isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node)) { @@ -36393,7 +37308,6 @@ var ts; function createPropertyAccessExpression(expression, name) { var result = ts.createSynthesizedNode(172 /* PropertyAccessExpression */); result.expression = parenthesizeForAccess(expression); - result.dotToken = ts.createSynthesizedNode(21 /* DotToken */); result.name = name; return result; } @@ -36457,9 +37371,9 @@ var ts; emit(node.initializer); } // Return true if identifier resolves to an exported member of a namespace - function isNamespaceExportReference(node) { + function isExportReference(node) { var container = resolver.getReferencedExportContainer(node); - return container && container.kind !== 256 /* SourceFile */; + return !!container; } // Return true if identifier resolves to an imported identifier function isImportedReference(node) { @@ -36490,10 +37404,10 @@ var ts; // const foo_1 = require('./foo'); // exports.baz = { foo: foo_1.foo }; // - if (languageVersion < 2 /* ES6 */ || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isNamespaceExportReference(node.name)) { + if (languageVersion < 2 /* ES6 */ || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isExportReference(node.name)) { // Emit identifier as an identifier write(": "); - emit(node.name); + emitExpressionIdentifier(node.name); } if (languageVersion >= 2 /* ES6 */ && node.objectAssignmentInitializer) { write(" = "); @@ -36552,7 +37466,10 @@ var ts; return; } emit(node.expression); - var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, node.dotToken); + var dotRangeStart = ts.nodeIsSynthesized(node.expression) ? -1 : node.expression.end; + var dotRangeEnd = ts.nodeIsSynthesized(node.expression) ? -1 : ts.skipTrivia(currentText, node.expression.end) + 1; + var dotToken = { pos: dotRangeStart, end: dotRangeEnd }; + var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, dotToken); // 1 .toString is a valid property access, emit a space after the literal // Also emit a space if expression is a integer const enum value - it will appear in generated code as numeric literal var shouldEmitSpace = false; @@ -36575,7 +37492,7 @@ var ts; else { write("."); } - var indentedAfterDot = indentIfOnDifferentLines(node, node.dotToken, node.name); + var indentedAfterDot = indentIfOnDifferentLines(node, dotToken, node.name); emit(node.name); decreaseIndentIf(indentedBeforeDot, indentedAfterDot); } @@ -37014,7 +37931,6 @@ var ts; synthesizedLHS = ts.createSynthesizedNode(172 /* PropertyAccessExpression */, /*startsOnNewLine*/ false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, /*canDefineTempVariablesInPlace*/ false, /*shouldEmitCommaBeforeAssignment*/ false); synthesizedLHS.expression = identifier; - synthesizedLHS.dotToken = leftHandSideExpression.dotToken; synthesizedLHS.name = leftHandSideExpression.name; write(", "); } @@ -38561,8 +39477,10 @@ var ts; emit(initializer); } write(";"); - tempIndex_1++; } + // Regardless of whether we will emit a var declaration for the binding pattern, we generate the temporary + // variable for the parameter (see: emitParameter) + tempIndex_1++; } else if (initializer) { writeLine(); @@ -39069,7 +39987,7 @@ var ts; emitStart(property); emitStart(property.name); if (receiver) { - emit(receiver); + write(receiver); } else { if (property.flags & 32 /* Static */) { @@ -39460,12 +40378,15 @@ var ts; // of it have been initialized by the time it is used. var staticProperties = getInitializedProperties(node, /*isStatic*/ true); var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192 /* ClassExpression */; - var tempVariable; + var generatedName; if (isClassExpressionWithStaticProperties) { - tempVariable = createAndRecordTempVariable(0 /* Auto */); + generatedName = getGeneratedNameForNode(node.name); + var synthesizedNode = ts.createSynthesizedNode(69 /* Identifier */); + synthesizedNode.text = generatedName; + recordTempDeclaration(synthesizedNode); write("("); increaseIndent(); - emit(tempVariable); + emit(synthesizedNode); write(" = "); } write("class"); @@ -39513,11 +40434,11 @@ var ts; var property = staticProperties_1[_a]; write(","); writeLine(); - emitPropertyDeclaration(node, property, /*receiver*/ tempVariable, /*isExpression*/ true); + emitPropertyDeclaration(node, property, /*receiver*/ generatedName, /*isExpression*/ true); } write(","); writeLine(); - emit(tempVariable); + write(generatedName); decreaseIndent(); write(")"); } @@ -39556,7 +40477,11 @@ var ts; } } function emitClassLikeDeclarationBelowES6(node) { + var isES6ExportedClass = isES6ExportedDeclaration(node); if (node.kind === 221 /* ClassDeclaration */) { + if (isES6ExportedClass && !(node.flags & 512 /* Default */)) { + write("export "); + } // source file level classes in system modules are hoisted so 'var's for them are already defined if (!shouldHoistDeclarationInSystemJsModule(node)) { write("var "); @@ -39621,9 +40546,15 @@ var ts; write(";"); } emitEnd(node); - if (node.kind === 221 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */ && !isES6ExportedClass) { emitExportMemberAssignment(node); } + else if (isES6ExportedClass && (node.flags & 512 /* Default */)) { + writeLine(); + write("export default "); + emitDeclarationName(node); + write(";"); + } } function emitClassMemberPrefix(node, member) { emitDeclarationName(node); @@ -40000,10 +40931,10 @@ var ts; } if (parameters[i].dotDotDotToken) { var parameterType = parameters[i].type; - if (parameterType.kind === 160 /* ArrayType */) { + if (parameterType && parameterType.kind === 160 /* ArrayType */) { parameterType = parameterType.elementType; } - else if (parameterType.kind === 155 /* TypeReference */ && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + else if (parameterType && parameterType.kind === 155 /* TypeReference */ && parameterType.typeArguments && parameterType.typeArguments.length === 1) { parameterType = parameterType.typeArguments[0]; } else { @@ -40021,9 +40952,15 @@ var ts; } /** Serializes the return type of function. Used by the __metadata decorator for a method. */ function emitSerializedReturnTypeOfNode(node) { - if (node && ts.isFunctionLike(node) && node.type) { - emitSerializedTypeNode(node.type); - return; + if (node && ts.isFunctionLike(node)) { + if (node.type) { + emitSerializedTypeNode(node.type); + return; + } + else if (ts.isAsyncFunctionLike(node)) { + write("Promise"); + return; + } } write("void 0"); } @@ -40162,7 +41099,7 @@ var ts; } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 225 /* ModuleDeclaration */) { + if (moduleDeclaration.body && moduleDeclaration.body.kind === 225 /* ModuleDeclaration */) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -40204,6 +41141,7 @@ var ts; write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); + ts.Debug.assert(node.body !== undefined); // node.body must exist, as this is a non-ambient module if (node.body.kind === 226 /* ModuleBlock */) { var saveConvertedLoopState = convertedLoopState; var saveTempFlags = tempFlags; @@ -41366,7 +42304,7 @@ var ts; } firstNonWhitespace = -1; } - else if (!ts.isWhiteSpace(c)) { + else if (!ts.isWhiteSpaceSingleLine(c)) { lastNonWhitespace = i; if (firstNonWhitespace === -1) { firstNonWhitespace = i; @@ -41998,13 +42936,9 @@ var ts; /* @internal */ ts.ioReadTime = 0; /* @internal */ ts.ioWriteTime = 0; /** The version of the TypeScript compiler release */ + ts.version = "2.0.0"; var emptyArray = []; - var defaultLibrarySearchPaths = [ - "types/", - "node_modules/", - "node_modules/@types/", - ]; - ts.version = "1.9.0"; + var defaultTypeRoots = ["node_modules/@types"]; function findConfigFile(searchPath, fileExists) { while (true) { var fileName = ts.combinePaths(searchPath, "tsconfig.json"); @@ -42141,9 +43075,33 @@ var ts; } return typesFilePath; } + // Use the main module for inferring types if no types package specified and the allowJs is set + if (state.compilerOptions.allowJs && jsonContent.main && typeof jsonContent.main === "string") { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0, jsonContent.main); + } + var mainFilePath = ts.normalizePath(ts.combinePaths(baseDirectory, jsonContent.main)); + return mainFilePath; + } return undefined; } var typeReferenceExtensions = [".d.ts"]; + function getEffectiveTypeRoots(options, host) { + if (options.typeRoots) { + return options.typeRoots; + } + var currentDirectory; + if (options.configFilePath) { + currentDirectory = ts.getDirectoryPath(options.configFilePath); + } + else if (host.getCurrentDirectory) { + currentDirectory = host.getCurrentDirectory(); + } + if (!currentDirectory) { + return undefined; + } + return ts.map(defaultTypeRoots, function (d) { return ts.combinePaths(currentDirectory, d); }); + } /** * @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown. * This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups @@ -42157,37 +43115,35 @@ var ts; skipTsx: true, traceEnabled: traceEnabled }; - // use typesRoot and fallback to directory that contains tsconfig or current directory if typesRoot is not set - var rootDir = options.typesRoot || (options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : (host.getCurrentDirectory && host.getCurrentDirectory())); + var typeRoots = getEffectiveTypeRoots(options, host); if (traceEnabled) { if (containingFile === undefined) { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set, typeReferenceDirectiveName); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, typeRoots); } } else { - if (rootDir === undefined) { + if (typeRoots === undefined) { trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set, typeReferenceDirectiveName, containingFile); } else { - trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, rootDir); + trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, typeRoots); } } } var failedLookupLocations = []; // Check primary library paths - 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); + if (typeRoots && typeRoots.length) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", ")); + } + var primarySearchPaths = typeRoots; + for (var _i = 0, primarySearchPaths_1 = primarySearchPaths; _i < primarySearchPaths_1.length; _i++) { + var typeRoot = primarySearchPaths_1[_i]; + var candidate = ts.combinePaths(typeRoot, typeReferenceDirectiveName); var candidateDirectory = ts.getDirectoryPath(candidate); var resolvedFile_1 = loadNodeModuleFromDirectory(typeReferenceExtensions, candidate, failedLookupLocations, !directoryProbablyExists(candidateDirectory, host), moduleResolutionState); if (resolvedFile_1) { @@ -42211,9 +43167,6 @@ var ts; if (containingFile) { initialLocationForSecondaryLookup = ts.getDirectoryPath(containingFile); } - else { - initialLocationForSecondaryLookup = rootDir; - } if (initialLocationForSecondaryLookup !== undefined) { // check secondary locations if (traceEnabled) { @@ -42650,12 +43603,12 @@ var ts; var nodeModulesFolder = ts.combinePaths(directory, "node_modules"); var nodeModulesFolderExists = directoryProbablyExists(nodeModulesFolder, state.host); var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName)); - // Load only typescript files irrespective of allowJs option if loading from node modules - var result = loadModuleFromFile(candidate, ts.supportedTypeScriptExtensions, failedLookupLocations, !nodeModulesFolderExists, state); + var supportedExtensions = ts.getSupportedExtensions(state.compilerOptions); + var result = loadModuleFromFile(candidate, supportedExtensions, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } - result = loadNodeModuleFromDirectory(ts.supportedTypeScriptExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); + result = loadNodeModuleFromDirectory(supportedExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } @@ -42665,13 +43618,18 @@ var ts; while (true) { var baseName = ts.getBaseFileName(directory); if (baseName !== "node_modules") { - var result = - // first: try to load module as-is - loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state) || - // second: try to load module from the scope '@types' - loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state); - if (result) { - return result; + // Try to load source from the package + var packageResult = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state); + if (packageResult && ts.hasTypeScriptFileExtension(packageResult)) { + // Always prefer a TypeScript (.ts, .tsx, .d.ts) file shipped with the package + return packageResult; + } + else { + // Else prefer a types package over non-TypeScript results (e.g. JavaScript files) + var typesResult = loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state); + if (typesResult || packageResult) { + return typesResult || packageResult; + } } } var parentPath = ts.getDirectoryPath(directory); @@ -42808,25 +43766,12 @@ var ts; } } } - function getDefaultTypeDirectiveNames(rootPath) { - var localTypes = ts.combinePaths(rootPath, "types"); - var npmTypes = ts.combinePaths(rootPath, "node_modules/@types"); - var result = []; - if (ts.sys.directoryExists(localTypes)) { - result = result.concat(ts.sys.getDirectories(localTypes)); - } - if (ts.sys.directoryExists(npmTypes)) { - result = result.concat(ts.sys.getDirectories(npmTypes)); - } - return result; - } 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 { - getDefaultTypeDirectiveNames: getDefaultTypeDirectiveNames, getSourceFile: getSourceFile, getDefaultLibLocation: getDefaultLibLocation, getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); }, @@ -42839,6 +43784,7 @@ var ts; 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); }, + getDirectories: function (path) { return ts.sys.getDirectories(path); }, realpath: realpath }; } @@ -42894,21 +43840,38 @@ var ts; } return resolutions; } - function getDefaultTypeDirectiveNames(options, rootFiles, host) { + function getInferredTypesRoot(options, rootFiles, host) { + return computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); + } + /** + * Given a set of options and a set of root files, returns the set of type directive names + * that should be included for this program automatically. + * This list could either come from the config file, + * or from enumerating the types root + initial secondary types lookup location. + * More type directives might appear in the program later as a result of loading actual source files; + * this list is only the set of defaults that are implicitly included. + */ + function getAutomaticTypeDirectiveNames(options, rootFiles, host) { // Use explicit type list from tsconfig.json if (options.types) { return options.types; } - // or load all types from the automatic type import fields - if (host && host.getDefaultTypeDirectiveNames) { - var commonRoot = computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), function (f) { return host.getCanonicalFileName(f); }); - if (commonRoot) { - return host.getDefaultTypeDirectiveNames(commonRoot); + // Walk the primary type lookup locations + var result = []; + if (host.directoryExists && host.getDirectories) { + var typeRoots = getEffectiveTypeRoots(options, host); + if (typeRoots) { + for (var _i = 0, typeRoots_1 = typeRoots; _i < typeRoots_1.length; _i++) { + var root = typeRoots_1[_i]; + if (host.directoryExists(root)) { + result = result.concat(host.getDirectories(root)); + } + } } } - return undefined; + return result; } - ts.getDefaultTypeDirectiveNames = getDefaultTypeDirectiveNames; + ts.getAutomaticTypeDirectiveNames = getAutomaticTypeDirectiveNames; function createProgram(rootNames, options, host, oldProgram) { var program; var files = []; @@ -42918,6 +43881,20 @@ var ts; var classifiableNames; var resolvedTypeReferenceDirectives = {}; var fileProcessingDiagnostics = ts.createDiagnosticCollection(); + // The below settings are to track if a .js file should be add to the program if loaded via searching under node_modules. + // This works as imported modules are discovered recursively in a depth first manner, specifically: + // - For each root file, findSourceFile is called. + // - This calls processImportedModules for each module imported in the source file. + // - This calls resolveModuleNames, and then calls findSourceFile for each resolved module. + // As all these operations happen - and are nested - within the createProgram call, they close over the below variables. + // The current resolution depth is tracked by incrementing/decrementing as the depth first search progresses. + var maxNodeModulesJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 2; + var currentNodeModulesJsDepth = 0; + // If a module has some of its imports skipped due to being at the depth limit under node_modules, then track + // this, as it may be imported at a shallower depth later, and then it will need its skipped imports processed. + var modulesWithElidedImports = {}; + // Track source files that are JavaScript files found by searching under node_modules, as these shouldn't be compiled. + var sourceFilesFoundSearchingNodeModules = {}; var start = new Date().getTime(); host = host || createCompilerHost(options); var skipDefaultLib = options.noLib; @@ -42948,10 +43925,12 @@ var ts; var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? ts.createFileMap(function (fileName) { return fileName.toLowerCase(); }) : undefined; if (!tryReuseStructureFromOldProgram()) { ts.forEach(rootNames, function (name) { return processRootFile(name, /*isDefaultLib*/ false); }); - // load type declarations specified via 'types' argument - var typeReferences = getDefaultTypeDirectiveNames(options, rootNames, host); + // load type declarations specified via 'types' argument or implicitly from types/ and node_modules/@types folders + var typeReferences = getAutomaticTypeDirectiveNames(options, rootNames, host); if (typeReferences) { - var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, /*containingFile*/ undefined); + var inferredRoot = getInferredTypesRoot(options, rootNames, host); + var containingFilename = ts.combinePaths(inferredRoot, "__inferred type names__.ts"); + var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename); for (var i = 0; i < typeReferences.length; i++) { processTypeReferenceDirective(typeReferences[i], resolutions[i]); } @@ -43026,8 +44005,8 @@ var ts; // Initialize a checker so that all our files are bound. getTypeChecker(); classifiableNames = {}; - for (var _i = 0, files_3 = files; _i < files_3.length; _i++) { - var sourceFile = files_3[_i]; + for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { + var sourceFile = files_2[_i]; ts.copyMap(sourceFile.classifiableNames, classifiableNames); } } @@ -43048,10 +44027,10 @@ var ts; (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) || + (oldOptions.maxNodeModuleJsDepth !== options.maxNodeModuleJsDepth) || + !ts.arrayIsEqualTo(oldOptions.typeRoots, oldOptions.typeRoots) || !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { return false; @@ -43159,6 +44138,7 @@ var ts; getSourceFile: program.getSourceFile, getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, + isSourceFileFromExternalLibrary: function (file) { return !!ts.lookUp(sourceFilesFoundSearchingNodeModules, file.path); }, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked }; @@ -43383,8 +44363,20 @@ var ts; } break; case 145 /* PropertyDeclaration */: - diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); - return true; + var propertyDeclaration = node; + if (propertyDeclaration.modifiers) { + for (var _i = 0, _a = propertyDeclaration.modifiers; _i < _a.length; _i++) { + var modifier = _a[_i]; + if (modifier.kind !== 113 /* StaticKeyword */) { + diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); + return true; + } + } + } + if (checkTypeAnnotation(node.type)) { + return true; + } + break; case 224 /* EnumDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; @@ -43530,10 +44522,13 @@ var ts; // This type of declaration is permitted only in the global module. // The StringLiteral must specify a top - level external module name. // Relative external module names are not permitted - // NOTE: body of ambient module is always a module block - for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) { - var statement = _a[_i]; - collectModuleReferences(statement, /*inAmbientModule*/ true); + // NOTE: body of ambient module is always a module block, if it exists + var body = node.body; + if (body) { + for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + collectModuleReferences(statement, /*inAmbientModule*/ true); + } } } } @@ -43608,6 +44603,13 @@ var ts; if (file_1 && options.forceConsistentCasingInFileNames && ts.getNormalizedAbsolutePath(file_1.fileName, currentDirectory) !== ts.getNormalizedAbsolutePath(fileName, currentDirectory)) { reportFileNamesDifferOnlyInCasingError(fileName, file_1.fileName, refFile, refPos, refEnd); } + // See if we need to reprocess the imports due to prior skipped imports + if (file_1 && ts.lookUp(modulesWithElidedImports, file_1.path)) { + if (currentNodeModulesJsDepth < maxNodeModulesJsDepth) { + modulesWithElidedImports[file_1.path] = false; + processImportedModules(file_1, ts.getDirectoryPath(fileName)); + } + } return file_1; } // We haven't looked for this file, do so now and cache result @@ -43696,7 +44698,7 @@ var ts; } } else { - fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_name_0, typeReferenceDirective)); + fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_type_definition_file_for_0, typeReferenceDirective)); } if (saveResolution) { resolvedTypeReferenceDirectives[typeReferenceDirective] = resolvedTypeReferenceDirective; @@ -43726,15 +44728,31 @@ var ts; for (var i = 0; i < moduleNames.length; i++) { var resolution = resolutions[i]; ts.setResolvedModule(file, moduleNames[i], resolution); + var resolvedPath = resolution ? ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName) : undefined; // add file to program only if: // - resolution was successful // - noResolve is falsy // - module name comes from the list of imports - var shouldAddFile = resolution && - !options.noResolve && - i < file.imports.length; - if (shouldAddFile) { - findSourceFile(resolution.resolvedFileName, ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName), /*isDefaultLib*/ false, /*isReference*/ false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + // - it's not a top level JavaScript module that exceeded the search max + var isFromNodeModulesSearch = resolution && resolution.isExternalLibraryImport; + var isJsFileFromNodeModules = isFromNodeModulesSearch && ts.hasJavaScriptFileExtension(resolution.resolvedFileName); + if (isFromNodeModulesSearch) { + sourceFilesFoundSearchingNodeModules[resolvedPath] = true; + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth++; + } + var elideImport = isJsFileFromNodeModules && currentNodeModulesJsDepth > maxNodeModulesJsDepth; + var shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport; + if (elideImport) { + modulesWithElidedImports[file.path] = true; + } + else if (shouldAddFile) { + findSourceFile(resolution.resolvedFileName, resolvedPath, + /*isDefaultLib*/ false, /*isReference*/ false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + } + if (isJsFileFromNodeModules) { + currentNodeModulesJsDepth--; } } } @@ -43868,10 +44886,6 @@ var ts; var span = ts.getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator); programDiagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); } - // Cannot specify module gen target of es6 when below es6 - if (options.module === ts.ModuleKind.ES6 && languageVersion < 2 /* ES6 */) { - programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_compile_modules_into_es2015_when_targeting_ES5_or_lower)); - } // Cannot specify module gen that isn't amd or system with --out if (outFile) { if (options.module && !(options.module === ts.ModuleKind.AMD || options.module === ts.ModuleKind.System)) { @@ -44073,6 +45087,16 @@ var ts; type: "boolean", description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type }, + { + name: "noUnusedLocals", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Locals + }, + { + name: "noUnusedParameters", + type: "boolean", + description: ts.Diagnostics.Report_Errors_on_Unused_Parameters + }, { name: "noLib", type: "boolean" @@ -44268,19 +45292,14 @@ var ts; } }, { - name: "typesSearchPaths", + name: "typeRoots", type: "list", - isTSConfigOnly: true, element: { - name: "typesSearchPaths", + name: "typeRoots", type: "string", isFilePath: true } }, - { - name: "typesRoot", - type: "string" - }, { name: "types", type: "list", @@ -44310,6 +45329,11 @@ var ts; type: "boolean", description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output }, + { + name: "maxNodeModuleJsDepth", + type: "number", + description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files + }, { name: "listEmittedFiles", type: "boolean" @@ -44348,6 +45372,10 @@ var ts; }, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon }, + { + name: "disableSizeLimit", + type: "boolean" + }, { name: "strictNullChecks", type: "boolean", @@ -44418,7 +45446,15 @@ var ts; ts.parseCustomTypeOption = parseCustomTypeOption; /* @internal */ function parseListTypeOption(opt, value, errors) { - var values = trimString((value || "")).split(","); + if (value === void 0) { value = ""; } + value = trimString(value); + if (ts.startsWith(value, "-")) { + return undefined; + } + if (value === "") { + return []; + } + var values = value.split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); @@ -44478,8 +45514,11 @@ var ts; i++; break; case "list": - options[opt.name] = parseListTypeOption(opt, args[i], errors); - i++; + var result = parseListTypeOption(opt, args[i], errors); + options[opt.name] = result || []; + if (result) { + i++; + } break; // If not a primitive, the possible types are specified in what is effectively a map of options. default: @@ -44590,7 +45629,7 @@ var ts; } // Skip over any minified JavaScript files (ending in ".min.js") // Skip over dotted files and folders as well - var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; + var ignoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; /** * Parse the contents of a config file (tsconfig.json). * @param json The contents of the config file to parse @@ -44605,72 +45644,59 @@ var ts; var options = ts.extend(existingOptions, compilerOptions); var typingOptions = convertTypingOptionsFromJsonWorker(json["typingOptions"], basePath, errors, configFileName); options.configFilePath = configFileName; - var fileNames = getFileNames(errors); + var _a = getFileNames(errors), fileNames = _a.fileNames, wildcardDirectories = _a.wildcardDirectories; return { options: options, fileNames: fileNames, typingOptions: typingOptions, raw: json, - errors: errors + errors: errors, + wildcardDirectories: wildcardDirectories }; function getFileNames(errors) { - var fileNames = []; + var fileNames; if (ts.hasProperty(json, "files")) { if (ts.isArray(json["files"])) { - fileNames = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); }); + fileNames = json["files"]; } 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"]; + var includeSpecs; + if (ts.hasProperty(json, "include")) { + if (ts.isArray(json["include"])) { + includeSpecs = json["include"]; } else { - // by default exclude node_modules, and any specificied output directory - exclude = ["node_modules", "bower_components", "jspm_packages"]; - } - var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } - exclude = ts.map(exclude, function (e) { return ts.getNormalizedAbsolutePath(e, basePath); }); - var supportedExtensions = ts.getSupportedExtensions(options); - ts.Debug.assert(ts.indexOf(supportedExtensions, ".ts") < ts.indexOf(supportedExtensions, ".d.ts"), "Changed priority of extensions to pick"); - // Get files of supported extensions in their order of resolution - 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]; - // .ts extension would read the .d.ts extension files too but since .d.ts is lower priority extension, - // lets pick them when its turn comes up - if (extension === ".ts" && ts.fileExtensionIs(fileName, ".d.ts")) { - continue; - } - 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) - // do not include this file if we included .ts or .tsx file with same base name as it could be output of the earlier compilation - 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); - } + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array")); } } - if (ts.hasProperty(json, "excludes") && !ts.hasProperty(json, "exclude")) { + var excludeSpecs; + if (ts.hasProperty(json, "exclude")) { + if (ts.isArray(json["exclude"])) { + excludeSpecs = json["exclude"]; + } + else { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array")); + } + } + else if (ts.hasProperty(json, "excludes")) { errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); } - return fileNames; + else { + // By default, exclude common package folders + excludeSpecs = ["node_modules", "bower_components", "jspm_packages"]; + } + // Always exclude the output directory unless explicitly included + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + excludeSpecs.push(outDir); + } + if (fileNames === undefined && includeSpecs === undefined) { + includeSpecs = ["**/*"]; + } + return matchFileNames(fileNames, includeSpecs, excludeSpecs, basePath, options, host, errors); } } ts.parseJsonConfigFileContent = parseJsonConfigFileContent; @@ -44752,6 +45778,290 @@ var ts; function trimString(s) { return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, ""); } + /** + * Tests for a path that ends in a recursive directory wildcard. + * Matches **, \**, **\, and \**\, but not a**b. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * (^|\/) # matches either the beginning of the string or a directory separator. + * \*\* # matches the recursive directory wildcard "**". + * \/?$ # matches an optional trailing directory separator at the end of the string. + */ + var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; + /** + * Tests for a path with multiple recursive directory wildcards. + * Matches **\** and **\a\**, but not **\a**b. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * (^|\/) # matches either the beginning of the string or a directory separator. + * \*\*\/ # matches a recursive directory wildcard "**" followed by a directory separator. + * (.*\/)? # optionally matches any number of characters followed by a directory separator. + * \*\* # matches a recursive directory wildcard "**" + * ($|\/) # matches either the end of the string or a directory separator. + */ + var invalidMultipleRecursionPatterns = /(^|\/)\*\*\/(.*\/)?\*\*($|\/)/; + /** + * Tests for a path where .. appears after a recursive directory wildcard. + * Matches **\..\*, **\a\..\*, and **\.., but not ..\**\* + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * (^|\/) # matches either the beginning of the string or a directory separator. + * \*\*\/ # matches a recursive directory wildcard "**" followed by a directory separator. + * (.*\/)? # optionally matches any number of characters followed by a directory separator. + * \.\. # matches a parent directory path component ".." + * ($|\/) # matches either the end of the string or a directory separator. + */ + var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/; + /** + * Tests for a path containing a wildcard character in a directory component of the path. + * Matches \*\, \?\, and \a*b\, but not \a\ or \a\*. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * \/ # matches a directory separator. + * [^/]*? # matches any number of characters excluding directory separators (non-greedy). + * [*?] # matches either a wildcard character (* or ?) + * [^/]* # matches any number of characters excluding directory separators (greedy). + * \/ # matches a directory separator. + */ + var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//; + /** + * Matches the portion of a wildcard path that does not contain wildcards. + * Matches \a of \a\*, or \a\b\c of \a\b\c\?\d. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * ^ # matches the beginning of the string + * [^*?]* # matches any number of non-wildcard characters + * (?=\/[^/]*[*?]) # lookahead that matches a directory separator followed by + * # a path component that contains at least one wildcard character (* or ?). + */ + var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; + /** + * Expands an array of file specifications. + * + * @param fileNames The literal file names to include. + * @param include The wildcard file specifications to include. + * @param exclude The wildcard file specifications to exclude. + * @param basePath The base path for any relative file specifications. + * @param options Compiler options. + * @param host The host used to resolve files and directories. + * @param errors An array for diagnostic reporting. + */ + function matchFileNames(fileNames, include, exclude, basePath, options, host, errors) { + basePath = ts.normalizePath(basePath); + // The exclude spec list is converted into a regular expression, which allows us to quickly + // test whether a file or directory should be excluded before recursively traversing the + // file system. + var keyMapper = host.useCaseSensitiveFileNames ? caseSensitiveKeyMapper : caseInsensitiveKeyMapper; + // Literal file names (provided via the "files" array in tsconfig.json) are stored in a + // file map with a possibly case insensitive key. We use this map later when when including + // wildcard paths. + var literalFileMap = {}; + // Wildcard paths (provided via the "includes" array in tsconfig.json) are stored in a + // file map with a possibly case insensitive key. We use this map to store paths matched + // via wildcard, and to handle extension priority. + var wildcardFileMap = {}; + if (include) { + include = validateSpecs(include, errors, /*allowTrailingRecursion*/ false); + } + if (exclude) { + exclude = validateSpecs(exclude, errors, /*allowTrailingRecursion*/ true); + } + // Wildcard directories (provided as part of a wildcard path) are stored in a + // file map that marks whether it was a regular wildcard match (with a `*` or `?` token), + // or a recursive directory. This information is used by filesystem watchers to monitor for + // new entries in these paths. + var wildcardDirectories = getWildcardDirectories(include, exclude, basePath, host.useCaseSensitiveFileNames); + // Rather than requery this for each file and filespec, we query the supported extensions + // once and store it on the expansion context. + var supportedExtensions = ts.getSupportedExtensions(options); + // Literal files are always included verbatim. An "include" or "exclude" specification cannot + // remove a literal file. + if (fileNames) { + for (var _i = 0, fileNames_1 = fileNames; _i < fileNames_1.length; _i++) { + var fileName = fileNames_1[_i]; + var file = ts.combinePaths(basePath, fileName); + literalFileMap[keyMapper(file)] = file; + } + } + if (include && include.length > 0) { + for (var _a = 0, _b = host.readDirectory(basePath, supportedExtensions, exclude, include); _a < _b.length; _a++) { + var file = _b[_a]; + // If we have already included a literal or wildcard path with a + // higher priority extension, we should skip this file. + // + // This handles cases where we may encounter both .ts and + // .d.ts (or .js if "allowJs" is enabled) in the same + // directory when they are compilation outputs. + if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) { + continue; + } + if (ignoreFileNamePattern.test(file)) { + continue; + } + // We may have included a wildcard path with a lower priority + // extension due to the user-defined order of entries in the + // "include" array. If there is a lower priority extension in the + // same directory, we should remove it. + removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper); + var key = keyMapper(file); + if (!ts.hasProperty(literalFileMap, key) && !ts.hasProperty(wildcardFileMap, key)) { + wildcardFileMap[key] = file; + } + } + } + var literalFiles = ts.reduceProperties(literalFileMap, addFileToOutput, []); + var wildcardFiles = ts.reduceProperties(wildcardFileMap, addFileToOutput, []); + wildcardFiles.sort(host.useCaseSensitiveFileNames ? ts.compareStrings : ts.compareStringsCaseInsensitive); + return { + fileNames: literalFiles.concat(wildcardFiles), + wildcardDirectories: wildcardDirectories + }; + } + function validateSpecs(specs, errors, allowTrailingRecursion) { + var validSpecs = []; + for (var _i = 0, specs_2 = specs; _i < specs_2.length; _i++) { + var spec = specs_2[_i]; + if (!allowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidMultipleRecursionPatterns.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else { + validSpecs.push(spec); + } + } + return validSpecs; + } + /** + * Gets directories in a set of include patterns that should be watched for changes. + */ + function getWildcardDirectories(include, exclude, path, useCaseSensitiveFileNames) { + // We watch a directory recursively if it contains a wildcard anywhere in a directory segment + // of the pattern: + // + // /a/b/**/d - Watch /a/b recursively to catch changes to any d in any subfolder recursively + // /a/b/*/d - Watch /a/b recursively to catch any d in any immediate subfolder, even if a new subfolder is added + // + // We watch a directory without recursion if it contains a wildcard in the file segment of + // the pattern: + // + // /a/b/* - Watch /a/b directly to catch any new file + // /a/b/a?z - Watch /a/b directly to catch any new file matching a?z + var rawExcludeRegex = ts.getRegularExpressionForWildcard(exclude, path, "exclude"); + var excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames ? "" : "i"); + var wildcardDirectories = {}; + if (include !== undefined) { + var recursiveKeys = []; + for (var _i = 0, include_1 = include; _i < include_1.length; _i++) { + var file = include_1[_i]; + var name_35 = ts.normalizePath(ts.combinePaths(path, file)); + if (excludeRegex && excludeRegex.test(name_35)) { + continue; + } + var match = wildcardDirectoryPattern.exec(name_35); + if (match) { + var key = useCaseSensitiveFileNames ? match[0] : match[0].toLowerCase(); + var flags = watchRecursivePattern.test(name_35) ? 1 /* Recursive */ : 0 /* None */; + var existingFlags = ts.getProperty(wildcardDirectories, key); + if (existingFlags === undefined || existingFlags < flags) { + wildcardDirectories[key] = flags; + if (flags === 1 /* Recursive */) { + recursiveKeys.push(key); + } + } + } + } + // Remove any subpaths under an existing recursively watched directory. + for (var key in wildcardDirectories) { + if (ts.hasProperty(wildcardDirectories, key)) { + for (var _a = 0, recursiveKeys_1 = recursiveKeys; _a < recursiveKeys_1.length; _a++) { + var recursiveKey = recursiveKeys_1[_a]; + if (key !== recursiveKey && ts.containsPath(recursiveKey, key, path, !useCaseSensitiveFileNames)) { + delete wildcardDirectories[key]; + } + } + } + } + } + return wildcardDirectories; + } + /** + * Determines whether a literal or wildcard file has already been included that has a higher + * extension priority. + * + * @param file The path to the file. + * @param extensionPriority The priority of the extension. + * @param context The expansion context. + */ + function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var adjustedExtensionPriority = ts.adjustExtensionPriority(extensionPriority); + for (var i = 0 /* Highest */; i < adjustedExtensionPriority; i++) { + var higherPriorityExtension = extensions[i]; + var higherPriorityPath = keyMapper(ts.changeExtension(file, higherPriorityExtension)); + if (ts.hasProperty(literalFiles, higherPriorityPath) || ts.hasProperty(wildcardFiles, higherPriorityPath)) { + return true; + } + } + return false; + } + /** + * Removes files included via wildcard expansion with a lower extension priority that have + * already been included. + * + * @param file The path to the file. + * @param extensionPriority The priority of the extension. + * @param context The expansion context. + */ + function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) { + var extensionPriority = ts.getExtensionPriority(file, extensions); + var nextExtensionPriority = ts.getNextLowestExtensionPriority(extensionPriority); + for (var i = nextExtensionPriority; i < extensions.length; i++) { + var lowerPriorityExtension = extensions[i]; + var lowerPriorityPath = keyMapper(ts.changeExtension(file, lowerPriorityExtension)); + delete wildcardFiles[lowerPriorityPath]; + } + } + /** + * Adds a file to an array of files. + * + * @param output The output array. + * @param file The file path. + */ + function addFileToOutput(output, file) { + output.push(file); + return output; + } + /** + * Gets a case sensitive key. + * + * @param key The original key. + */ + function caseSensitiveKeyMapper(key) { + return key; + } + /** + * Gets a case insensitive key. + * + * @param key The original key. + */ + function caseInsensitiveKeyMapper(key) { + return key.toLowerCase(); + } })(ts || (ts = {})); /* @internal */ var ts; @@ -44839,28 +46149,28 @@ var ts; switch (n.kind) { case 199 /* Block */: if (!ts.isFunctionBlock(n)) { - var parent_14 = n.parent; + var parent_15 = 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_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)); + if (parent_15.kind === 204 /* DoStatement */ || + parent_15.kind === 207 /* ForInStatement */ || + parent_15.kind === 208 /* ForOfStatement */ || + parent_15.kind === 206 /* ForStatement */ || + parent_15.kind === 203 /* IfStatement */ || + parent_15.kind === 205 /* WhileStatement */ || + parent_15.kind === 212 /* WithStatement */ || + parent_15.kind === 252 /* CatchClause */) { + addOutliningSpan(parent_15, openBrace, closeBrace, autoCollapse(n)); break; } - if (parent_14.kind === 216 /* TryStatement */) { + if (parent_15.kind === 216 /* TryStatement */) { // Could be the try-block, or the finally-block. - var tryStatement = parent_14; + var tryStatement = parent_15; if (tryStatement.tryBlock === n) { - addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); + addOutliningSpan(parent_15, openBrace, closeBrace, autoCollapse(n)); break; } else if (tryStatement.finallyBlock === n) { @@ -44929,12 +46239,12 @@ var ts; ts.forEach(program.getSourceFiles(), function (sourceFile) { cancellationToken.throwIfCancellationRequested(); var nameToDeclarations = sourceFile.getNamedDeclarations(); - for (var name_35 in nameToDeclarations) { - var declarations = ts.getProperty(nameToDeclarations, name_35); + for (var name_36 in nameToDeclarations) { + var declarations = ts.getProperty(nameToDeclarations, name_36); if (declarations) { // First do a quick check to see if the name of the declaration matches the // last portion of the (possibly) dotted name they're searching for. - var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_35); + var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_36); if (!matches) { continue; } @@ -44947,14 +46257,14 @@ var ts; if (!containers) { return undefined; } - matches = patternMatcher.getMatches(containers, name_35); + matches = patternMatcher.getMatches(containers, name_36); if (!matches) { continue; } } var fileName = sourceFile.fileName; var matchKind = bestMatchKind(matches); - rawItems.push({ name: name_35, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration }); + rawItems.push({ name: name_36, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration }); } } } @@ -45100,689 +46410,585 @@ var ts; (function (ts) { var NavigationBar; (function (NavigationBar) { - function getNavigationBarItems(sourceFile, compilerOptions) { - // TODO: Handle JS files differently in 'navbar' calls for now, but ideally we should unify - // the 'navbar' and 'navto' logic for TypeScript and JavaScript. - if (ts.isSourceFileJavaScript(sourceFile)) { - return getJsNavigationBarItems(sourceFile, compilerOptions); + function getNavigationBarItems(sourceFile) { + curSourceFile = sourceFile; + var result = ts.map(topLevelItems(rootNavigationBarNode(sourceFile)), convertToTopLevelItem); + curSourceFile = undefined; + return result; + } + NavigationBar.getNavigationBarItems = getNavigationBarItems; + // Keep sourceFile handy so we don't have to search for it every time we need to call `getText`. + var curSourceFile; + function nodeText(node) { + return node.getText(curSourceFile); + } + function navigationBarNodeKind(n) { + return n.node.kind; + } + function pushChild(parent, child) { + if (parent.children) { + parent.children.push(child); } - return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); - function getIndent(node) { - var indent = 1; // Global node is the only one with indent 0. - var current = node.parent; - while (current) { - switch (current.kind) { - 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 === 225 /* ModuleDeclaration */); - // fall through - case 221 /* ClassDeclaration */: - case 224 /* EnumDeclaration */: - case 222 /* InterfaceDeclaration */: - case 220 /* FunctionDeclaration */: - indent++; + else { + parent.children = [child]; + } + } + /* + For performance, we keep navigation bar parents on a stack rather than passing them through each recursion. + `parent` is the current parent and is *not* stored in parentsStack. + `startNode` sets a new parent and `endNode` returns to the previous parent. + */ + var parentsStack = []; + var parent; + function rootNavigationBarNode(sourceFile) { + ts.Debug.assert(!parentsStack.length); + var root = { node: sourceFile, additionalNodes: undefined, parent: undefined, children: undefined, indent: 0 }; + parent = root; + for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + addChildrenRecursively(statement); + } + endNode(); + ts.Debug.assert(!parent && !parentsStack.length); + return root; + } + function addLeafNode(node) { + pushChild(parent, emptyNavigationBarNode(node)); + } + function emptyNavigationBarNode(node) { + return { + node: node, + additionalNodes: undefined, + parent: parent, + children: undefined, + indent: parent.indent + 1 + }; + } + /** + * Add a new level of NavigationBarNodes. + * This pushes to the stack, so you must call `endNode` when you are done adding to this node. + */ + function startNode(node) { + var navNode = emptyNavigationBarNode(node); + pushChild(parent, navNode); + // Save the old parent + parentsStack.push(parent); + parent = navNode; + } + /** Call after calling `startNode` and adding children to it. */ + function endNode() { + if (parent.children) { + mergeChildren(parent.children); + sortChildren(parent.children); + } + parent = parentsStack.pop(); + } + function addNodeWithRecursiveChild(node, child) { + startNode(node); + addChildrenRecursively(child); + endNode(); + } + /** Look for navigation bar items in node's subtree, adding them to the current `parent`. */ + function addChildrenRecursively(node) { + if (!node || ts.isToken(node)) { + return; + } + switch (node.kind) { + case 148 /* Constructor */: + // Get parameter properties, and treat them as being on the *same* level as the constructor, not under it. + var ctr = node; + addNodeWithRecursiveChild(ctr, ctr.body); + // Parameter properties are children of the class, not the constructor. + for (var _i = 0, _a = ctr.parameters; _i < _a.length; _i++) { + var param = _a[_i]; + if (ts.isParameterPropertyDeclaration(param)) { + addLeafNode(param); + } } - current = current.parent; - } - return indent; - } - function getChildNodes(nodes) { - var childNodes = []; - function visit(node) { - switch (node.kind) { - case 200 /* VariableStatement */: - ts.forEach(node.declarationList.declarations, visit); - break; - case 167 /* ObjectBindingPattern */: - case 168 /* ArrayBindingPattern */: - ts.forEach(node.elements, visit); - break; - 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 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 146 /* MethodSignature */: + if (!ts.hasDynamicName(node)) { + addNodeWithRecursiveChild(node, node.body); + } + break; + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + if (!ts.hasDynamicName(node)) { + addLeafNode(node); + } + break; + case 231 /* ImportClause */: + var importClause = node; + // Handle default import case e.g.: + // import d from "mod"; + if (importClause.name) { + addLeafNode(importClause); + } + // Handle named bindings in imports e.g.: + // import * as NS from "mod"; + // import {a, b as B} from "mod"; + var namedBindings = importClause.namedBindings; + if (namedBindings) { + if (namedBindings.kind === 232 /* NamespaceImport */) { + addLeafNode(namedBindings); + } + else { + for (var _b = 0, _c = namedBindings.elements; _b < _c.length; _b++) { + var element = _c[_b]; + addLeafNode(element); } - break; - case 230 /* ImportDeclaration */: - var importClause = node.importClause; - if (importClause) { - // Handle default import case e.g.: - // import d from "mod"; - if (importClause.name) { - childNodes.push(importClause); - } - // Handle named bindings in imports e.g.: - // import * as NS from "mod"; - // import {a, b as B} from "mod"; - if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 232 /* NamespaceImport */) { - childNodes.push(importClause.namedBindings); - } - else { - ts.forEach(importClause.namedBindings.elements, visit); - } - } - } - break; - case 169 /* BindingElement */: - case 218 /* VariableDeclaration */: - if (ts.isBindingPattern(node.name)) { - visit(node.name); - break; - } - // Fall through - case 221 /* ClassDeclaration */: - case 224 /* EnumDeclaration */: - case 222 /* InterfaceDeclaration */: - case 225 /* ModuleDeclaration */: - case 220 /* FunctionDeclaration */: - case 229 /* ImportEqualsDeclaration */: - case 234 /* ImportSpecifier */: - case 238 /* ExportSpecifier */: - case 223 /* TypeAliasDeclaration */: - childNodes.push(node); - break; + } } - } - // for (let i = 0, n = nodes.length; i < n; i++) { - // let node = nodes[i]; - // if (node.kind === SyntaxKind.ClassDeclaration || - // node.kind === SyntaxKind.EnumDeclaration || - // node.kind === SyntaxKind.InterfaceDeclaration || - // node.kind === SyntaxKind.ModuleDeclaration || - // node.kind === SyntaxKind.FunctionDeclaration) { - // childNodes.push(node); - // } - // else if (node.kind === SyntaxKind.VariableStatement) { - // childNodes.push.apply(childNodes, (node).declarations); - // } - // } - 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 localeCompareFix(ts.getPropertyNameForPropertyNameNode(n1.name), ts.getPropertyNameForPropertyNameNode(n2.name)); + break; + case 169 /* BindingElement */: + case 218 /* VariableDeclaration */: + var decl = node; + var name_37 = decl.name; + if (ts.isBindingPattern(name_37)) { + addChildrenRecursively(name_37); } - else if (n1.name) { - return 1; - } - else if (n2.name) { - return -1; + else if (decl.initializer && isFunctionOrClassExpression(decl.initializer)) { + // For `const x = function() {}`, just use the function node, not the const. + addChildrenRecursively(decl.initializer); } else { - return n1.kind - n2.kind; + addNodeWithRecursiveChild(decl, decl.initializer); } - }); - // node 0.10 treats "a" as greater than "B". - // For consistency, sort alphabetically, falling back to which is lower-case. - function localeCompareFix(a, b) { - var cmp = a.toLowerCase().localeCompare(b.toLowerCase()); - if (cmp !== 0) - return cmp; - // Return the *opposite* of the `<` operator, which works the same in node 0.10 and 6.0. - return a < b ? 1 : a > b ? -1 : 0; - } - } - 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 /* ClassDeclaration */: - topLevelNodes.push(node); - for (var _a = 0, _b = node.members; _a < _b.length; _a++) { - var member = _b[_a]; - 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)) { - topLevelNodes.push(member); - } - addTopLevelNodes(member.body.statements, topLevelNodes); - } + break; + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + addNodeWithRecursiveChild(node, node.body); + break; + case 224 /* EnumDeclaration */: + startNode(node); + for (var _d = 0, _e = node.members; _d < _e.length; _d++) { + var member = _e[_d]; + if (!isComputedProperty(member)) { + addLeafNode(member); + } + } + endNode(); + break; + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + startNode(node); + for (var _f = 0, _g = node.members; _f < _g.length; _f++) { + var member = _g[_f]; + addChildrenRecursively(member); + } + endNode(); + break; + case 225 /* ModuleDeclaration */: + addNodeWithRecursiveChild(node, getInteriorModule(node).body); + break; + case 238 /* ExportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 153 /* IndexSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 223 /* TypeAliasDeclaration */: + addLeafNode(node); + break; + default: + if (node.jsDocComments) { + for (var _h = 0, _j = node.jsDocComments; _h < _j.length; _h++) { + var jsDocComment = _j[_h]; + for (var _k = 0, _l = jsDocComment.tags; _k < _l.length; _k++) { + var tag = _l[_k]; + if (tag.kind === 279 /* JSDocTypedefTag */) { + addLeafNode(tag); } } - break; - case 224 /* EnumDeclaration */: - case 222 /* InterfaceDeclaration */: - case 223 /* TypeAliasDeclaration */: - topLevelNodes.push(node); - break; - case 225 /* ModuleDeclaration */: - var moduleDeclaration = node; - topLevelNodes.push(node); - addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes); - break; - case 220 /* FunctionDeclaration */: - var functionDeclaration = node; - if (isTopLevelFunctionDeclaration(functionDeclaration)) { - topLevelNodes.push(node); - addTopLevelNodes(functionDeclaration.body.statements, topLevelNodes); - } - break; + } } - } + ts.forEachChild(node, addChildrenRecursively); } - function hasNamedFunctionDeclarations(nodes) { - for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) { - var s = nodes_5[_i]; - if (s.kind === 220 /* FunctionDeclaration */ && !isEmpty(s.name.text)) { + } + /** Merge declarations of the same kind. */ + function mergeChildren(children) { + var nameToItems = {}; + ts.filterMutate(children, function (child) { + var decl = child.node; + var name = decl.name && nodeText(decl.name); + if (!name) { + // Anonymous items are never merged. + return true; + } + var itemsWithSameName = ts.getProperty(nameToItems, name); + if (!itemsWithSameName) { + nameToItems[name] = child; + return true; + } + if (itemsWithSameName instanceof Array) { + for (var _i = 0, itemsWithSameName_1 = itemsWithSameName; _i < itemsWithSameName_1.length; _i++) { + var itemWithSameName = itemsWithSameName_1[_i]; + if (tryMerge(itemWithSameName, child)) { + return false; + } + } + itemsWithSameName.push(child); + return true; + } + else { + var itemWithSameName = itemsWithSameName; + if (tryMerge(itemWithSameName, child)) { + return false; + } + nameToItems[name] = [itemWithSameName, child]; + return true; + } + function tryMerge(a, b) { + if (shouldReallyMerge(a.node, b.node)) { + merge(a, b); return true; } + return false; } - return false; - } - function isTopLevelFunctionDeclaration(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 === 199 /* Block */) { - // Proper function declarations can only have identifier names - if (hasNamedFunctionDeclarations(functionDeclaration.body.statements)) { - return true; - } - // Or if it is not parented by another function. I.e all functions at module scope are 'top level'. - if (!ts.isFunctionBlock(functionDeclaration.parent)) { - return true; - } - else { - // We have made sure that a grand parent node exists with 'isFunctionBlock()' above. - var grandParentKind = functionDeclaration.parent.parent.kind; - if (grandParentKind === 147 /* MethodDeclaration */ || - grandParentKind === 148 /* Constructor */) { - return true; - } - } + }); + /** a and b have the same name, but they may not be mergeable. */ + function shouldReallyMerge(a, b) { + return a.kind === b.kind && (a.kind !== 225 /* ModuleDeclaration */ || areSameModule(a, b)); + // We use 1 NavNode to represent 'A.B.C', but there are multiple source nodes. + // Only merge module nodes that have the same chain. Don't merge 'A.B.C' with 'A'! + function areSameModule(a, b) { + if (a.body.kind !== b.body.kind) { + return false; } - } - 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) { - // We had an item with the same name. Merge these items together. - merge(itemWithSameName, item); - } - else { - keyToItem[key] = item; - items.push(item); - } - } + if (a.body.kind !== 225 /* ModuleDeclaration */) { + return true; } + return areSameModule(a.body, b.body); } - return items; } + /** Merge source into target. Source should be thrown away after this is called. */ function merge(target, source) { - // First, add any spans in the source to the target. - ts.addRange(target.spans, source.spans); - if (source.childItems) { - if (!target.childItems) { - target.childItems = []; - } - // Next, recursively merge or add any children in the source as appropriate. - 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) { - // Found a match. merge them. - merge(targetChild, sourceChild); - continue outer; - } - } - // Didn't find a match, just add this child to the list. - target.childItems.push(sourceChild); - } + target.additionalNodes = target.additionalNodes || []; + target.additionalNodes.push(source.node); + if (source.additionalNodes) { + (_a = target.additionalNodes).push.apply(_a, source.additionalNodes); + } + target.children = ts.concatenate(target.children, source.children); + if (target.children) { + mergeChildren(target.children); + sortChildren(target.children); + } + var _a; + } + } + /** Recursively ensure that each NavNode's children are in sorted order. */ + function sortChildren(children) { + children.sort(compareChildren); + } + function compareChildren(child1, child2) { + var name1 = tryGetName(child1.node), name2 = tryGetName(child2.node); + if (name1 && name2) { + var cmp = localeCompareFix(name1, name2); + return cmp !== 0 ? cmp : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + else { + return name1 ? 1 : name2 ? -1 : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + } + // More efficient to create a collator once and use its `compare` than to call `a.localeCompare(b)` many times. + var collator = typeof Intl === "undefined" ? undefined : new Intl.Collator(); + // Intl is missing in Safari, and node 0.10 treats "a" as greater than "B". + var localeCompareIsCorrect = collator && collator.compare("a", "B") < 0; + var localeCompareFix = localeCompareIsCorrect ? collator.compare : function (a, b) { + // This isn't perfect, but it passes all of our tests. + for (var i = 0; i < Math.min(a.length, b.length); i++) { + var chA = a.charAt(i), chB = b.charAt(i); + if (chA === "\"" && chB === "'") { + return 1; + } + if (chA === "'" && chB === "\"") { + return -1; + } + var cmp = chA.toLocaleLowerCase().localeCompare(chB.toLocaleLowerCase()); + if (cmp !== 0) { + return cmp; } } - function createChildItem(node) { - switch (node.kind) { - case 142 /* Parameter */: - if (ts.isBindingPattern(node.name)) { - break; - } - if ((node.flags & 1023 /* Modifier */) === 0) { - return undefined; - } - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 147 /* MethodDeclaration */: - case 146 /* MethodSignature */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement); - case 149 /* GetAccessor */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement); - case 150 /* SetAccessor */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement); - case 153 /* IndexSignature */: - return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); - case 224 /* EnumDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.enumElement); - case 255 /* EnumMember */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 225 /* ModuleDeclaration */: - return createItem(node, getModuleName(node), ts.ScriptElementKind.moduleElement); - case 222 /* InterfaceDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.interfaceElement); - case 223 /* TypeAliasDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.typeElement); - case 151 /* CallSignature */: - return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); - case 152 /* ConstructSignature */: - return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); - case 145 /* PropertyDeclaration */: - case 144 /* PropertySignature */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 221 /* ClassDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.classElement); - case 220 /* FunctionDeclaration */: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); - case 218 /* VariableDeclaration */: - case 169 /* BindingElement */: - var variableDeclarationNode = void 0; - var name_36; - if (node.kind === 169 /* BindingElement */) { - name_36 = node.name; - variableDeclarationNode = node; - // binding elements are added only for variable declarations - // bubble up to the containing variable declaration - while (variableDeclarationNode && variableDeclarationNode.kind !== 218 /* VariableDeclaration */) { - variableDeclarationNode = variableDeclarationNode.parent; - } - ts.Debug.assert(variableDeclarationNode !== undefined); - } - else { - ts.Debug.assert(!ts.isBindingPattern(node.name)); - variableDeclarationNode = node; - name_36 = node.name; - } - if (ts.isConst(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.constElement); - } - else if (ts.isLet(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.letElement); - } - else { - return createItem(node, getTextOfNode(name_36), ts.ScriptElementKind.variableElement); - } - case 148 /* Constructor */: - return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); - 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; - function createItem(node, name, scriptElementKind) { - return getNavigationBarItem(name, scriptElementKind, ts.getNodeModifiers(node), [getNodeSpan(node)]); - } + return a.length - b.length; + }; + /** + * This differs from getItemName because this is just used for sorting. + * We only sort nodes by name that have a more-or-less "direct" name, as opposed to `new()` and the like. + * So `new()` can still come before an `aardvark` method. + */ + function tryGetName(node) { + if (node.kind === 225 /* ModuleDeclaration */) { + return getModuleName(node); } - function isEmpty(text) { - return !text || text.trim() === ""; + var decl = node; + if (decl.name) { + return ts.getPropertyNameForPropertyNameNode(decl.name); } - function getNavigationBarItem(text, kind, kindModifiers, spans, childItems, indent) { - if (childItems === void 0) { childItems = []; } - if (indent === void 0) { indent = 0; } - if (isEmpty(text)) { + switch (node.kind) { + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 192 /* ClassExpression */: + return getFunctionOrClassName(node); + case 279 /* JSDocTypedefTag */: + return getJSDocTypedefTagName(node); + default: return undefined; + } + } + function getItemName(node) { + if (node.kind === 225 /* ModuleDeclaration */) { + return getModuleName(node); + } + var name = node.name; + if (name) { + var text = nodeText(name); + if (text.length > 0) { + return text; } + } + switch (node.kind) { + case 256 /* SourceFile */: + var sourceFile = node; + return ts.isExternalModule(sourceFile) + ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\"" + : ""; + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + if (node.flags & 512 /* Default */) { + return "default"; + } + return getFunctionOrClassName(node); + case 148 /* Constructor */: + return "constructor"; + case 152 /* ConstructSignature */: + return "new()"; + case 151 /* CallSignature */: + return "()"; + case 153 /* IndexSignature */: + return "[]"; + case 279 /* JSDocTypedefTag */: + return getJSDocTypedefTagName(node); + default: + return ""; + } + } + function getJSDocTypedefTagName(node) { + if (node.name) { + return node.name.text; + } + else { + var parentNode = node.parent && node.parent.parent; + if (parentNode && parentNode.kind === 200 /* VariableStatement */) { + if (parentNode.declarationList.declarations.length > 0) { + var nameIdentifier = parentNode.declarationList.declarations[0].name; + if (nameIdentifier.kind === 69 /* Identifier */) { + return nameIdentifier.text; + } + } + } + return ""; + } + } + /** Flattens the NavNode tree to a list, keeping only the top-level items. */ + function topLevelItems(root) { + var topLevel = []; + function recur(item) { + if (isTopLevel(item)) { + topLevel.push(item); + if (item.children) { + for (var _i = 0, _a = item.children; _i < _a.length; _i++) { + var child = _a[_i]; + recur(child); + } + } + } + } + recur(root); + return topLevel; + function isTopLevel(item) { + switch (navigationBarNodeKind(item)) { + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 256 /* SourceFile */: + case 223 /* TypeAliasDeclaration */: + case 279 /* JSDocTypedefTag */: + return true; + case 148 /* Constructor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + return hasSomeImportantChild(item); + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + return isTopLevelFunctionDeclaration(item); + default: + return false; + } + function isTopLevelFunctionDeclaration(item) { + if (!item.node.body) { + return false; + } + switch (navigationBarNodeKind(item.parent)) { + case 226 /* ModuleBlock */: + case 256 /* SourceFile */: + case 147 /* MethodDeclaration */: + case 148 /* Constructor */: + return true; + default: + return hasSomeImportantChild(item); + } + } + function hasSomeImportantChild(item) { + return ts.forEach(item.children, function (child) { + var childKind = navigationBarNodeKind(child); + return childKind !== 218 /* VariableDeclaration */ && childKind !== 169 /* BindingElement */; + }); + } + } + } + // NavigationBarItem requires an array, but will not mutate it, so just give it this for performance. + var emptyChildItemArray = []; + function convertToTopLevelItem(n) { + return { + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: ts.getNodeModifiers(n.node), + spans: getSpans(n), + childItems: ts.map(n.children, convertToChildItem) || emptyChildItemArray, + indent: n.indent, + bolded: false, + grayed: false + }; + function convertToChildItem(n) { return { - text: text, - kind: kind, - kindModifiers: kindModifiers, - spans: spans, - childItems: childItems, - indent: indent, + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: ts.getNodeModifiers(n.node), + spans: getSpans(n), + childItems: emptyChildItemArray, + indent: 0, bolded: false, grayed: false }; } - function createTopLevelItem(node) { - switch (node.kind) { - case 256 /* SourceFile */: - return createSourceFileItem(node); - case 221 /* ClassDeclaration */: - return createClassItem(node); - case 147 /* MethodDeclaration */: - case 148 /* Constructor */: - return createMemberFunctionLikeItem(node); - case 224 /* EnumDeclaration */: - return createEnumItem(node); - case 222 /* InterfaceDeclaration */: - return createInterfaceItem(node); - case 225 /* ModuleDeclaration */: - return createModuleItem(node); - case 220 /* FunctionDeclaration */: - return createFunctionItem(node); - case 223 /* TypeAliasDeclaration */: - return createTypeAliasItem(node); - } - return undefined; - 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 /* 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)); + function getSpans(n) { + var spans = [getNodeSpan(n.node)]; + if (n.additionalNodes) { + for (var _i = 0, _a = n.additionalNodes; _i < _a.length; _i++) { + var node = _a[_i]; + spans.push(getNodeSpan(node)); } - return 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 /* Block */) { - var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); - var scriptElementKind = void 0; - var memberFunctionName = void 0; - if (node.kind === 147 /* MethodDeclaration */) { - 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); - 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 /* 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. - 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 getModuleName(moduleDeclaration) { - // We want to maintain quotation marks. - if (ts.isAmbientModule(moduleDeclaration)) { - return getTextOfNode(moduleDeclaration.name); - } - // 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 === 225 /* ModuleDeclaration */) { - moduleDeclaration = moduleDeclaration.body; - result.push(moduleDeclaration.name.text); - } - return result.join("."); - } - function removeComputedProperties(node) { - 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 - */ - function removeDynamicallyNamedProperties(node) { - return ts.filter(node.members, function (member) { return !ts.hasDynamicName(member); }); - } - function getInnermostModule(node) { - while (node.body.kind === 225 /* ModuleDeclaration */) { - node = node.body; - } - return node; - } - function getNodeSpan(node) { - return node.kind === 256 /* SourceFile */ - ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) - : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); - } - function getTextOfNode(node) { - return ts.getTextOfNodeFromSourceText(sourceFile.text, node); + return spans; } } - 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; - // Walk the whole file, because we want to also find function expressions - which may be in variable initializer, - // call arguments, expressions, etc... - ts.forEachChild(sourceFile, visitNode); - function visitNode(node) { - var newItem = createNavBarItem(node); - if (newItem) { - topItem.childItems.push(newItem); - } - if (node.jsDocComments && node.jsDocComments.length > 0) { - for (var _i = 0, _a = node.jsDocComments; _i < _a.length; _i++) { - var jsDocComment = _a[_i]; - visitNode(jsDocComment); - } - } - // Add a level if traversing into a container - if (newItem && (ts.isFunctionLike(node) || ts.isClassLike(node))) { - var lastTop = topItem; - indent++; - topItem = newItem; - ts.forEachChild(node, visitNode); - topItem = lastTop; - indent--; - // If the last item added was an anonymous function expression, and it had no children, discard it. - 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 /* 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 !== 256 /* SourceFile */) { - return undefined; + // TODO: GH#9145: We should just use getNodeKind. No reason why navigationBar and navigateTo should have different behaviors. + function nodeKind(node) { + switch (node.kind) { + case 256 /* SourceFile */: + return ts.ScriptElementKind.moduleElement; + case 255 /* EnumMember */: + return ts.ScriptElementKind.memberVariableElement; + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: + var variableDeclarationNode = void 0; + var name_38; + if (node.kind === 169 /* BindingElement */) { + name_38 = node.name; + variableDeclarationNode = node; + // binding elements are added only for variable declarations + // bubble up to the containing variable declaration + while (variableDeclarationNode && variableDeclarationNode.kind !== 218 /* VariableDeclaration */) { + variableDeclarationNode = variableDeclarationNode.parent; } - // 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 === 179 /* FunctionExpression */ || - varDecl.initializer.kind === 180 /* ArrowFunction */ || - varDecl.initializer.kind === 192 /* ClassExpression */)) { - return undefined; - } - // Fall through - 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_37 = node.flags && (node.flags & 512 /* Default */) && !node.name ? "default" : - node.kind === 148 /* Constructor */ ? "constructor" : - ts.declarationNameToString(node.name); - return getNavBarItem(name_37, getScriptKindForElementKind(node.kind), [getNodeSpan(node)]); - case 179 /* FunctionExpression */: - case 180 /* ArrowFunction */: - case 192 /* ClassExpression */: - return getDefineModuleItem(node) || getFunctionOrClassExpressionItem(node); - case 147 /* MethodDeclaration */: - var methodDecl = node; - return getNavBarItem(ts.declarationNameToString(methodDecl.name), ts.ScriptElementKind.memberFunctionElement, [getNodeSpan(node)]); - case 235 /* ExportAssignment */: - // e.g. "export default " - return getNavBarItem("default", ts.ScriptElementKind.variableElement, [getNodeSpan(node)]); - 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 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 === 238 /* ExportSpecifier */) { - 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)]); - case 279 /* JSDocTypedefTag */: - if (node.name) { - return getNavBarItem(node.name.text, ts.ScriptElementKind.typeElement, [getNodeSpan(node)]); - } - else { - var parentNode = node.parent && node.parent.parent; - if (parentNode && parentNode.kind === 200 /* VariableStatement */) { - if (parentNode.declarationList.declarations.length > 0) { - var nameIdentifier = parentNode.declarationList.declarations[0].name; - if (nameIdentifier.kind === 69 /* Identifier */) { - return getNavBarItem(nameIdentifier.text, ts.ScriptElementKind.typeElement, [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 /* 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 !== 174 /* CallExpression */) { - return undefined; - } - var callExpr = node.parent; - 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 - var defaultName = node.getSourceFile().fileName; - if (callExpr.arguments[0].kind === 9 /* StringLiteral */) { - defaultName = (callExpr.arguments[0]).text; - } - return getNavBarItem(defaultName, ts.ScriptElementKind.moduleElement, [getNodeSpan(node.parent)]); - } - function getFunctionOrClassExpressionItem(node) { - if (node.kind !== 179 /* FunctionExpression */ && - node.kind !== 180 /* ArrowFunction */ && - node.kind !== 192 /* ClassExpression */) { - return undefined; - } - var fnExpr = node; - var fnName; - if (fnExpr.name && ts.getFullWidth(fnExpr.name) > 0) { - // The expression has an identifier, so use that as the name - fnName = ts.declarationNameToString(fnExpr.name); - } - else { - // See if it is a var initializer. If so, use the var name. - if (fnExpr.parent.kind === 218 /* VariableDeclaration */) { - fnName = ts.declarationNameToString(fnExpr.parent.name); - } - else if (fnExpr.parent.kind === 187 /* BinaryExpression */ && - fnExpr.parent.operatorToken.kind === 56 /* EqualsToken */) { - fnName = fnExpr.parent.left.getText(); - } - else if (fnExpr.parent.kind === 253 /* PropertyAssignment */ && - fnExpr.parent.name) { - fnName = fnExpr.parent.name.getText(); + ts.Debug.assert(!!variableDeclarationNode); } else { - fnName = node.kind === 192 /* ClassExpression */ ? anonClassText : anonFnText; + ts.Debug.assert(!ts.isBindingPattern(node.name)); + variableDeclarationNode = node; + name_38 = node.name; } - } - var scriptKind = node.kind === 192 /* ClassExpression */ ? ts.ScriptElementKind.classElement : ts.ScriptElementKind.functionElement; - return getNavBarItem(fnName, scriptKind, [getNodeSpan(node)]); - } - function getNodeSpan(node) { - return node.kind === 256 /* SourceFile */ - ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) - : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); - } - function getScriptKindForElementKind(kind) { - switch (kind) { - case 218 /* VariableDeclaration */: + if (ts.isConst(variableDeclarationNode)) { + return ts.ScriptElementKind.constElement; + } + else if (ts.isLet(variableDeclarationNode)) { + return ts.ScriptElementKind.letElement; + } + else { return ts.ScriptElementKind.variableElement; - case 220 /* FunctionDeclaration */: - return ts.ScriptElementKind.functionElement; - case 221 /* ClassDeclaration */: - return ts.ScriptElementKind.classElement; - case 148 /* Constructor */: - return ts.ScriptElementKind.constructorImplementationElement; - case 149 /* GetAccessor */: - return ts.ScriptElementKind.memberGetAccessorElement; - case 150 /* SetAccessor */: - return ts.ScriptElementKind.memberSetAccessorElement; - default: - return "unknown"; - } + } + case 180 /* ArrowFunction */: + return ts.ScriptElementKind.functionElement; + case 279 /* JSDocTypedefTag */: + return ts.ScriptElementKind.typeElement; + default: + return ts.getNodeKind(node); } - return sourceFileItem.childItems; } - NavigationBar.getJsNavigationBarItems = getJsNavigationBarItems; + function getModuleName(moduleDeclaration) { + // We want to maintain quotation marks. + if (ts.isAmbientModule(moduleDeclaration)) { + return ts.getTextOfNode(moduleDeclaration.name); + } + // 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 === 225 /* ModuleDeclaration */) { + moduleDeclaration = moduleDeclaration.body; + result.push(moduleDeclaration.name.text); + } + return result.join("."); + } + /** + * For 'module A.B.C', we want to get the node for 'C'. + * We store 'A' as associated with a NavNode, and use getModuleName to traverse down again. + */ + function getInteriorModule(decl) { + return decl.body.kind === 225 /* ModuleDeclaration */ ? getInteriorModule(decl.body) : decl; + } + function isComputedProperty(member) { + return !member.name || member.name.kind === 140 /* ComputedPropertyName */; + } + function getNodeSpan(node) { + return node.kind === 256 /* SourceFile */ + ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) + : ts.createTextSpanFromBounds(node.getStart(curSourceFile), node.getEnd()); + } + function getFunctionOrClassName(node) { + if (node.name && ts.getFullWidth(node.name) > 0) { + return ts.declarationNameToString(node.name); + } + else if (node.parent.kind === 218 /* VariableDeclaration */) { + return ts.declarationNameToString(node.parent.name); + } + else if (node.parent.kind === 187 /* BinaryExpression */ && + node.parent.operatorToken.kind === 56 /* EqualsToken */) { + return nodeText(node.parent.left); + } + else if (node.parent.kind === 253 /* PropertyAssignment */ && node.parent.name) { + return nodeText(node.parent.name); + } + else if (node.flags & 512 /* Default */) { + return "default"; + } + else { + return ts.isClassLike(node) ? "" : ""; + } + } + function isFunctionOrClassExpression(node) { + return node.kind === 179 /* FunctionExpression */ || node.kind === 180 /* ArrowFunction */ || node.kind === 192 /* ClassExpression */; + } })(NavigationBar = ts.NavigationBar || (ts.NavigationBar = {})); })(ts || (ts = {})); /* @internal */ @@ -46652,8 +47858,8 @@ var ts; return undefined; } function getArgumentIndex(argumentsList, node) { - // The list we got back can include commas. In the presence of errors it may - // also just have nodes without commas. For example "Foo(a b c)" will have 3 + // The list we got back can include commas. In the presence of errors it may + // also just have nodes without commas. For example "Foo(a b c)" will have 3 // args without commas. We want to find what index we're at. So we count // forward until we hit ourselves, only incrementing the index if it isn't a // comma. @@ -46684,8 +47890,8 @@ var ts; // 'a' ''. So, in the case where the last child is a comma, we increase the // arg count by one to compensate. // - // Note: this subtlety only applies to the last comma. If you had "Foo(a,," then - // we'll have: 'a' '' '' + // Note: this subtlety only applies to the last comma. If you had "Foo(a,," then + // we'll have: 'a' '' '' // That will give us 2 non-commas. We then add one for the last comma, givin us an // arg count of 3. var listChildren = argumentsList.getChildren(); @@ -46833,7 +48039,7 @@ var ts; signatureHelpParameters = typeParameters && typeParameters.length > 0 ? ts.map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray; suffixDisplayParts.push(ts.punctuationPart(27 /* GreaterThanToken */)); var parameterParts = ts.mapToDisplayParts(function (writer) { - return typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisType, candidateSignature.parameters, writer, invocation); + return typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisParameter, candidateSignature.parameters, writer, invocation); }); ts.addRange(suffixDisplayParts, parameterParts); } @@ -46950,6 +48156,8 @@ var ts; case 199 /* Block */: case 226 /* ModuleBlock */: case 227 /* CaseBlock */: + case 233 /* NamedImports */: + case 237 /* NamedExports */: return nodeEndsWith(n, 16 /* CloseBraceToken */, sourceFile); case 252 /* CatchClause */: return isCompletedNode(n.block, sourceFile); @@ -47037,6 +48245,9 @@ var ts; return isCompletedNode(lastSpan, sourceFile); case 197 /* TemplateSpan */: return ts.nodeIsPresent(n.literal); + case 236 /* ExportDeclaration */: + case 230 /* ImportDeclaration */: + return ts.nodeIsPresent(n.moduleSpecifier); case 185 /* PrefixUnaryExpression */: return isCompletedNode(n.operand, sourceFile); case 187 /* BinaryExpression */: @@ -47848,9 +49059,9 @@ var ts; } getTypingNamesFromSourceFileNames(fileNames); // Add the cached typing locations for inferred typings that are already installed - for (var name_38 in packageNameToTypingLocation) { - if (ts.hasProperty(inferredTypings, name_38) && !inferredTypings[name_38]) { - inferredTypings[name_38] = packageNameToTypingLocation[name_38]; + for (var name_39 in packageNameToTypingLocation) { + if (ts.hasProperty(inferredTypings, name_39) && !inferredTypings[name_39]) { + inferredTypings[name_39] = packageNameToTypingLocation[name_39]; } } // Remove typings that the user has added to the exclude list @@ -47936,9 +49147,9 @@ var ts; return; } var typingNames = []; - var fileNames = host.readDirectory(nodeModulesPath, "*.json", /*exclude*/ undefined, /*depth*/ 2); - for (var _i = 0, fileNames_1 = fileNames; _i < fileNames_1.length; _i++) { - var fileName = fileNames_1[_i]; + var fileNames = host.readDirectory(nodeModulesPath, ["*.json"], /*excludes*/ undefined, /*includes*/ undefined, /*depth*/ 2); + for (var _i = 0, fileNames_2 = fileNames; _i < fileNames_2.length; _i++) { + var fileName = fileNames_2[_i]; var normalizedFileName = ts.normalizePath(fileName); if (ts.getBaseFileName(normalizedFileName) !== "package.json") { continue; @@ -48012,6 +49223,7 @@ var ts; isOnToken: isOnToken, getCurrentLeadingTrivia: function () { return leadingTrivia; }, lastTrailingTriviaWasNewLine: function () { return wasNewLine; }, + skipToEndOf: skipToEndOf, close: function () { ts.Debug.assert(scanner !== undefined); lastTokenInfo = undefined; @@ -48204,6 +49416,15 @@ var ts; } return tokenInfo; } + function skipToEndOf(node) { + scanner.setTextPos(node.end); + savedPos = scanner.getStartPos(); + lastScanAction = undefined; + lastTokenInfo = undefined; + wasNewLine = false; + leadingTrivia = undefined; + trailingTrivia = undefined; + } } formatting.getFormattingScanner = getFormattingScanner; })(formatting = ts.formatting || (ts.formatting = {})); @@ -48487,7 +49708,7 @@ var ts; this.FunctionOpenBraceLeftTokenRange = formatting.Shared.TokenRange.AnyIncludingMultilineComments; this.SpaceBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 15 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2 /* Space */), 1 /* CanDeleteNewLines */); // Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc) - this.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([69 /* Identifier */, 3 /* MultiLineCommentTrivia */, 73 /* ClassKeyword */]); + this.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([69 /* Identifier */, 3 /* MultiLineCommentTrivia */, 73 /* ClassKeyword */, 82 /* ExportKeyword */, 89 /* ImportKeyword */]); this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 15 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2 /* Space */), 1 /* CanDeleteNewLines */); // Place a space before open brace in a control flow construct this.ControlOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([18 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 79 /* DoKeyword */, 100 /* TryKeyword */, 85 /* FinallyKeyword */, 80 /* ElseKeyword */]); @@ -48529,7 +49750,7 @@ var ts; this.NoSpaceBetweenReturnAndSemicolon = new formatting.Rule(formatting.RuleDescriptor.create1(94 /* ReturnKeyword */, 23 /* SemicolonToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); // Add a space between statements. All keywords except (do,else,case) has open/close parens after them. // So, we have a rule to add a space for [),Any], [do,Any], [else,Any], and [case,Any] - this.SpaceBetweenStatements = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([18 /* CloseParenToken */, 79 /* DoKeyword */, 80 /* ElseKeyword */, 71 /* CaseKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotForContext), 2 /* Space */)); + this.SpaceBetweenStatements = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([18 /* CloseParenToken */, 79 /* DoKeyword */, 80 /* ElseKeyword */, 71 /* CaseKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext, Rules.IsNotForContext), 2 /* Space */)); // This low-pri rule takes care of "try {" and "finally {" in case the rule SpaceBeforeOpenBraceInControl didn't execute on FormatOnEnter. 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() {} @@ -48544,8 +49765,8 @@ var ts; // 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 */, 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 */, 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 */)); + 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 */, 136 /* FromKeyword */]), 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 */, 136 /* FromKeyword */])), 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 */)); // Lambda expressions @@ -48636,8 +49857,8 @@ var ts; /// Rules controlled by user options /// // Insert space after comma delimiter - this.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNextTokenNotCloseBracket), 2 /* Space */)); - this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); + this.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext, Rules.IsNextTokenNotCloseBracket), 2 /* Space */)); + this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24 /* CommaToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext), 8 /* Delete */)); // Insert space before and after binary operators 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 /* Space */)); 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 /* Space */)); @@ -48673,15 +49894,20 @@ var ts; this.SpaceAfterTemplateHeadAndMiddle = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([12 /* TemplateHead */, 13 /* TemplateMiddle */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); this.NoSpaceBeforeTemplateMiddleAndTail = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([13 /* TemplateMiddle */, 14 /* TemplateTail */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); this.SpaceBeforeTemplateMiddleAndTail = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([13 /* TemplateMiddle */, 14 /* TemplateTail */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); + // No space after { and before } in JSX expression + this.NoSpaceAfterOpenBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create3(15 /* OpenBraceToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 8 /* Delete */)); + this.SpaceAfterOpenBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create3(15 /* OpenBraceToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 2 /* Space */)); + this.NoSpaceBeforeCloseBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16 /* CloseBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 8 /* Delete */)); + this.SpaceBeforeCloseBraceInJsxExpression = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16 /* CloseBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), 2 /* Space */)); // Insert space after function keyword for anonymous functions this.SpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(87 /* FunctionKeyword */, 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2 /* Space */)); this.NoSpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(87 /* FunctionKeyword */, 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 8 /* Delete */)); } Rules.prototype.getRuleName = function (rule) { var o = this; - for (var name_39 in o) { - if (o[name_39] === rule) { - return name_39; + for (var name_40 in o) { + if (o[name_40] === rule) { + return name_40; } } throw new Error("Unknown rule"); @@ -48700,6 +49926,8 @@ var ts; case 187 /* BinaryExpression */: case 188 /* ConditionalExpression */: case 195 /* AsExpression */: + case 238 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: case 154 /* TypePredicate */: case 162 /* UnionType */: case 163 /* IntersectionType */: @@ -48818,6 +50046,10 @@ var ts; case 224 /* EnumDeclaration */: case 159 /* TypeLiteral */: case 225 /* ModuleDeclaration */: + case 236 /* ExportDeclaration */: + case 237 /* NamedExports */: + case 230 /* ImportDeclaration */: + case 233 /* NamedImports */: return true; } return false; @@ -48878,6 +50110,12 @@ var ts; Rules.IsNonJsxSameLineTokenContext = function (context) { return context.TokensAreOnSameLine() && context.contextNode.kind !== 244 /* JsxText */; }; + Rules.isNonJsxElementContext = function (context) { + return context.contextNode.kind !== 241 /* JsxElement */; + }; + Rules.isJsxExpressionContext = function (context) { + return context.contextNode.kind === 248 /* JsxExpression */; + }; Rules.IsNotBeforeBlockInFunctionDeclarationContext = function (context) { return !Rules.IsFunctionDeclContext(context) && !Rules.IsBeforeBlockContext(context); }; @@ -49308,6 +50546,14 @@ var ts; rules.push(this.globalRules.NoSpaceAfterTemplateHeadAndMiddle); rules.push(this.globalRules.NoSpaceBeforeTemplateMiddleAndTail); } + if (options.InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces) { + rules.push(this.globalRules.SpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.SpaceBeforeCloseBraceInJsxExpression); + } + else { + rules.push(this.globalRules.NoSpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.NoSpaceBeforeCloseBraceInJsxExpression); + } if (options.InsertSpaceAfterSemicolonInForStatements) { rules.push(this.globalRules.SpaceAfterSemicolonInFor); } @@ -49361,7 +50607,7 @@ var ts; // 1. the end of the previous line // 2. the last non-whitespace character in the current line var endOfFormatSpan = ts.getEndLinePosition(line, sourceFile); - while (ts.isWhiteSpace(sourceFile.text.charCodeAt(endOfFormatSpan)) && !ts.isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { + while (ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(endOfFormatSpan))) { endOfFormatSpan--; } // if the character at the end of the span is a line break, we shouldn't include it, because it indicates we don't want to @@ -49625,7 +50871,10 @@ var ts; var startLinePosition = ts.getLineStartPositionForPosition(startPos, sourceFile); var column = formatting.SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options); if (startLine !== parentStartLine || startPos === column) { - return column; + // Use the base indent size if it is greater than + // the indentation of the inherited predecessor. + var baseIndentSize = formatting.SmartIndenter.getBaseIndentation(options); + return baseIndentSize > column ? baseIndentSize : column; } } return -1 /* Unknown */; @@ -49788,6 +51037,9 @@ var ts; } // child node is outside the target range - do not dive inside if (!ts.rangeOverlapsWithStartEnd(originalRange, child.pos, child.end)) { + if (child.end < originalRange.pos) { + formattingScanner.skipToEndOf(child); + } return inheritedIndentation; } if (child.getFullWidth() === 0) { @@ -50081,7 +51333,7 @@ var ts; } var whitespaceStart = getTrailingWhitespaceStartPosition(lineStartPosition, lineEndPosition); if (whitespaceStart !== -1) { - ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpace(sourceFile.text.charCodeAt(whitespaceStart - 1))); + ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(whitespaceStart - 1))); recordDelete(whitespaceStart, lineEndPosition + 1 - whitespaceStart); } } @@ -50092,7 +51344,7 @@ var ts; */ function getTrailingWhitespaceStartPosition(start, end) { var pos = end; - while (pos >= start && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos >= start && ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos--; } if (pos !== end) { @@ -50265,7 +51517,7 @@ var ts; })(Value || (Value = {})); function getIndentation(position, sourceFile, options) { if (position > sourceFile.text.length) { - return 0; // past EOF + return getBaseIndentation(options); // past EOF } // no indentation when the indent style is set to none, // so we can return fast @@ -50274,7 +51526,7 @@ var ts; } var precedingToken = ts.findPrecedingToken(position, sourceFile); if (!precedingToken) { - return 0; + return getBaseIndentation(options); } // no indentation in string \regex\template literals var precedingTokenIsLiteral = ts.isStringOrRegularExpressionOrTemplateLiteral(precedingToken.kind); @@ -50291,7 +51543,7 @@ var ts; var current_1 = position; while (current_1 > 0) { var char = sourceFile.text.charCodeAt(current_1); - if (!ts.isWhiteSpace(char) && !ts.isLineBreak(char)) { + if (!ts.isWhiteSpace(char)) { break; } current_1--; @@ -50336,12 +51588,16 @@ var ts; current = current.parent; } if (!current) { - // no parent was found - return 0 to be indented on the level of SourceFile - return 0; + // no parent was found - return the base indentation of the SourceFile + return getBaseIndentation(options); } return getIndentationForNodeWorker(current, currentStart, /*ignoreActualIndentationRange*/ undefined, indentationDelta, sourceFile, options); } SmartIndenter.getIndentation = getIndentation; + function getBaseIndentation(options) { + return options.BaseIndentSize || 0; + } + SmartIndenter.getBaseIndentation = getBaseIndentation; function getIndentationForNode(n, ignoreActualIndentationRange, sourceFile, options) { var start = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); return getIndentationForNodeWorker(n, start, ignoreActualIndentationRange, /*indentationDelta*/ 0, sourceFile, options); @@ -50387,7 +51643,7 @@ var ts; currentStart = parentStart; parent = current.parent; } - return indentationDelta; + return indentationDelta + getBaseIndentation(options); } function getParentStart(parent, child, sourceFile) { var containingList = getContainingList(child, sourceFile); @@ -50587,7 +51843,7 @@ var ts; var column = 0; for (var pos = startPos; pos < endPos; pos++) { var ch = sourceFile.text.charCodeAt(pos); - if (!ts.isWhiteSpace(ch)) { + if (!ts.isWhiteSpaceSingleLine(ch)) { break; } if (ch === 9 /* tab */) { @@ -50645,7 +51901,10 @@ var ts; case 164 /* ParenthesizedType */: case 176 /* TaggedTemplateExpression */: case 184 /* AwaitExpression */: + case 237 /* NamedExports */: case 233 /* NamedImports */: + case 238 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: return true; } return false; @@ -50668,6 +51927,11 @@ var ts; case 149 /* GetAccessor */: case 150 /* SetAccessor */: return childKind !== 199 /* Block */; + case 236 /* ExportDeclaration */: + return childKind !== 237 /* NamedExports */; + case 230 /* ImportDeclaration */: + return childKind !== 231 /* ImportClause */ || + (child.namedBindings && child.namedBindings.kind !== 233 /* NamedImports */); case 241 /* JsxElement */: return childKind !== 245 /* JsxClosingElement */; } @@ -50686,6 +51950,7 @@ var ts; })(formatting = ts.formatting || (ts.formatting = {})); })(ts || (ts = {})); /// +/// /// /// /// @@ -50825,8 +52090,8 @@ var ts; var list = createNode(282 /* SyntaxList */, 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]; + for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) { + var node = nodes_4[_i]; if (pos < node.pos) { pos = this.addSyntheticNodes(list._children, pos, node.pos); } @@ -50961,7 +52226,7 @@ var ts; addCommentParts(declaration.parent, sourceFileOfDeclaration, getCleanedParamJsDocComment); } // If this is left side of dotted module declaration, there is no doc comments associated with this node - if (declaration.kind === 225 /* ModuleDeclaration */ && declaration.body.kind === 225 /* ModuleDeclaration */) { + if (declaration.kind === 225 /* ModuleDeclaration */ && declaration.body && declaration.body.kind === 225 /* ModuleDeclaration */) { return; } if ((declaration.kind === 179 /* FunctionExpression */ || declaration.kind === 180 /* ArrowFunction */) && @@ -51007,8 +52272,7 @@ var ts; } for (; pos < end; pos++) { var ch = sourceFile.text.charCodeAt(pos); - if (!ts.isWhiteSpace(ch) || ts.isLineBreak(ch)) { - // Either found lineBreak or non whiteSpace + if (!ts.isWhiteSpaceSingleLine(ch)) { return pos; } } @@ -51023,8 +52287,7 @@ var ts; 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))); + ts.isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)); } function isParamTag(pos, end, sourceFile) { // If it is @param tag @@ -51189,7 +52452,7 @@ var ts; } return paramDocComments; function consumeWhiteSpaces(pos) { - while (pos < end && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos < end && ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos++; } return pos; @@ -51672,9 +52935,9 @@ var ts; return false; } // If the parent is not sourceFile or module block it is local variable - for (var parent_15 = declaration.parent; !ts.isFunctionBlock(parent_15); parent_15 = parent_15.parent) { + for (var parent_16 = declaration.parent; !ts.isFunctionBlock(parent_16); parent_16 = parent_16.parent) { // Reached source file or module block - if (parent_15.kind === 256 /* SourceFile */ || parent_15.kind === 226 /* ModuleBlock */) { + if (parent_16.kind === 256 /* SourceFile */ || parent_16.kind === 226 /* ModuleBlock */) { return false; } } @@ -51797,15 +53060,15 @@ var ts; sourceFile.version = version; sourceFile.scriptSnapshot = scriptSnapshot; } - var commandLineOptions_stringToEnum; + var commandLineOptionsStringToEnum; /** JS users may pass in string values for enum compiler options (such as ModuleKind), so convert. */ function fixupCompilerOptions(options, diagnostics) { // Lazily create this value to fix module loading errors. - commandLineOptions_stringToEnum = commandLineOptions_stringToEnum || ts.filter(ts.optionDeclarations, function (o) { + commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || ts.filter(ts.optionDeclarations, function (o) { return typeof o.type === "object" && !ts.forEachValue(o.type, function (v) { return typeof v !== "number"; }); }); options = ts.clone(options); - var _loop_2 = function(opt) { + var _loop_3 = function(opt) { if (!ts.hasProperty(options, opt.name)) { return "continue"; } @@ -51822,9 +53085,9 @@ var ts; } } }; - for (var _i = 0, commandLineOptions_stringToEnum_1 = commandLineOptions_stringToEnum; _i < commandLineOptions_stringToEnum_1.length; _i++) { - var opt = commandLineOptions_stringToEnum_1[_i]; - _loop_2(opt); + for (var _i = 0, commandLineOptionsStringToEnum_1 = commandLineOptionsStringToEnum; _i < commandLineOptionsStringToEnum_1.length; _i++) { + var opt = commandLineOptionsStringToEnum_1[_i]; + _loop_3(opt); } return options; } @@ -51848,6 +53111,17 @@ var ts; // We are not returning a sourceFile for lib file when asked by the program, // so pass --noLib to avoid reporting a file not found error. options.noLib = true; + // Clear out other settings that would not be used in transpiling this module + options.lib = undefined; + options.types = undefined; + options.noEmit = undefined; + options.noEmitOnError = undefined; + options.paths = undefined; + options.rootDirs = undefined; + options.declaration = undefined; + options.declarationDir = undefined; + options.out = undefined; + options.outFile = undefined; // We are not doing a full typecheck, we are not resolving the whole context, // so pass --noResolve to avoid reporting missing file errors. options.noResolve = true; @@ -51882,7 +53156,8 @@ var ts; getNewLine: function () { return newLine; }, fileExists: function (fileName) { return fileName === inputFileName; }, readFile: function (fileName) { return ""; }, - directoryExists: function (directoryExists) { return true; } + directoryExists: function (directoryExists) { return true; }, + getDirectories: function (path) { return []; } }; var program = ts.createProgram([inputFileName], options, compilerHost); if (transpileOptions.reportDiagnostics) { @@ -51970,7 +53245,7 @@ var ts; 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)); + return ("_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + "|" + settings.allowJs + "|" + settings.baseUrl + "|" + JSON.stringify(settings.typeRoots) + "|" + JSON.stringify(settings.rootDirs) + "|" + JSON.stringify(settings.paths)); } function getBucketForCompilationSettings(key, createIfMissing) { var bucket = ts.lookUp(buckets, key); @@ -52716,7 +53991,8 @@ var ts; oldSettings.moduleResolution !== newSettings.moduleResolution || oldSettings.noResolve !== newSettings.noResolve || oldSettings.jsx !== newSettings.jsx || - oldSettings.allowJs !== newSettings.allowJs); + oldSettings.allowJs !== newSettings.allowJs || + oldSettings.disableSizeLimit !== oldSettings.disableSizeLimit); // Now create a new compiler var compilerHost = { getSourceFile: getOrCreateSourceFile, @@ -52739,8 +54015,10 @@ var ts; return entry && entry.scriptSnapshot.getText(0, entry.scriptSnapshot.getLength()); }, directoryExists: function (directoryName) { - ts.Debug.assert(!host.resolveModuleNames || !host.resolveTypeReferenceDirectives); return ts.directoryProbablyExists(directoryName, host); + }, + getDirectories: function (path) { + return host.getDirectories ? host.getDirectories(path) : []; } }; if (host.trace) { @@ -53010,13 +54288,13 @@ var ts; log("Returning an empty list because completion was requested in an invalid position."); return undefined; } - var parent_16 = contextToken.parent, kind = contextToken.kind; + var parent_17 = contextToken.parent, kind = contextToken.kind; if (kind === 21 /* DotToken */) { - if (parent_16.kind === 172 /* PropertyAccessExpression */) { + if (parent_17.kind === 172 /* PropertyAccessExpression */) { node = contextToken.parent.expression; isRightOfDot = true; } - else if (parent_16.kind === 139 /* QualifiedName */) { + else if (parent_17.kind === 139 /* QualifiedName */) { node = contextToken.parent.left; isRightOfDot = true; } @@ -53392,9 +54670,9 @@ var ts; switch (contextToken.kind) { case 15 /* OpenBraceToken */: // const x = { | case 24 /* CommaToken */: - var parent_17 = contextToken.parent; - if (parent_17 && (parent_17.kind === 171 /* ObjectLiteralExpression */ || parent_17.kind === 167 /* ObjectBindingPattern */)) { - return parent_17; + var parent_18 = contextToken.parent; + if (parent_18 && (parent_18.kind === 171 /* ObjectLiteralExpression */ || parent_18.kind === 167 /* ObjectBindingPattern */)) { + return parent_18; } break; } @@ -53421,37 +54699,37 @@ var ts; } function tryGetContainingJsxElement(contextToken) { if (contextToken) { - var parent_18 = contextToken.parent; + var parent_19 = contextToken.parent; switch (contextToken.kind) { case 26 /* LessThanSlashToken */: case 39 /* SlashToken */: case 69 /* Identifier */: case 246 /* JsxAttribute */: case 247 /* JsxSpreadAttribute */: - if (parent_18 && (parent_18.kind === 242 /* JsxSelfClosingElement */ || parent_18.kind === 243 /* JsxOpeningElement */)) { - return parent_18; + if (parent_19 && (parent_19.kind === 242 /* JsxSelfClosingElement */ || parent_19.kind === 243 /* JsxOpeningElement */)) { + return parent_19; } - else if (parent_18.kind === 246 /* JsxAttribute */) { - return parent_18.parent; + else if (parent_19.kind === 246 /* JsxAttribute */) { + return parent_19.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_18 && ((parent_18.kind === 246 /* JsxAttribute */) || (parent_18.kind === 247 /* JsxSpreadAttribute */))) { - return parent_18.parent; + if (parent_19 && ((parent_19.kind === 246 /* JsxAttribute */) || (parent_19.kind === 247 /* JsxSpreadAttribute */))) { + return parent_19.parent; } break; case 16 /* CloseBraceToken */: - if (parent_18 && - parent_18.kind === 248 /* JsxExpression */ && - parent_18.parent && - (parent_18.parent.kind === 246 /* JsxAttribute */)) { - return parent_18.parent.parent; + if (parent_19 && + parent_19.kind === 248 /* JsxExpression */ && + parent_19.parent && + (parent_19.parent.kind === 246 /* JsxAttribute */)) { + return parent_19.parent.parent; } - if (parent_18 && parent_18.kind === 247 /* JsxSpreadAttribute */) { - return parent_18.parent; + if (parent_19 && parent_19.kind === 247 /* JsxSpreadAttribute */) { + return parent_19.parent; } break; } @@ -53588,8 +54866,8 @@ var ts; if (element.getStart() <= position && position <= element.getEnd()) { continue; } - var name_40 = element.propertyName || element.name; - existingImportsOrExports[name_40.text] = true; + var name_41 = element.propertyName || element.name; + existingImportsOrExports[name_41.text] = true; } if (ts.isEmpty(existingImportsOrExports)) { return ts.filter(exportsOfModule, function (e) { return e.name !== "default"; }); @@ -53709,14 +54987,14 @@ var ts; var entries = []; var target = program.getCompilerOptions().target; var nameTable = getNameTable(sourceFile); - for (var name_41 in nameTable) { + for (var name_42 in nameTable) { // Skip identifiers produced only from the current location - if (nameTable[name_41] === position) { + if (nameTable[name_42] === position) { continue; } - if (!uniqueNames[name_41]) { - uniqueNames[name_41] = name_41; - var displayName = getCompletionEntryDisplayName(name_41, target, /*performCharacterChecks*/ true); + if (!uniqueNames[name_42]) { + uniqueNames[name_42] = name_42; + var displayName = getCompletionEntryDisplayName(ts.unescapeIdentifier(name_42), target, /*performCharacterChecks*/ true); if (displayName) { var entry = { name: displayName, @@ -53833,10 +55111,10 @@ var ts; var typeChecker = program.getTypeChecker(); var type = typeChecker.getContextualType(node); if (type) { - var entries_1 = []; - addStringLiteralCompletionsFromType(type, entries_1); - if (entries_1.length) { - return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries_1 }; + var entries_2 = []; + addStringLiteralCompletionsFromType(type, entries_2); + if (entries_2.length) { + return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries_2 }; } } return undefined; @@ -54783,19 +56061,19 @@ var ts; function getThrowStatementOwner(throwStatement) { var child = throwStatement; while (child.parent) { - var parent_19 = child.parent; - if (ts.isFunctionBlock(parent_19) || parent_19.kind === 256 /* SourceFile */) { - return parent_19; + var parent_20 = child.parent; + if (ts.isFunctionBlock(parent_20) || parent_20.kind === 256 /* SourceFile */) { + return parent_20; } // 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_19.kind === 216 /* TryStatement */) { - var tryStatement = parent_19; + if (parent_20.kind === 216 /* TryStatement */) { + var tryStatement = parent_20; if (tryStatement.tryBlock === child && tryStatement.catchClause) { return child; } } - child = parent_19; + child = parent_20; } return undefined; } @@ -55098,7 +56376,7 @@ var ts; var shouldCombindElseAndIf = true; // Avoid recalculating getStart() by iterating backwards. for (var j = ifKeyword.getStart() - 1; j >= elseKeyword.end; j--) { - if (!ts.isWhiteSpace(sourceFile.text.charCodeAt(j))) { + if (!ts.isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(j))) { shouldCombindElseAndIf = false; break; } @@ -55136,7 +56414,8 @@ var ts; result.push({ fileName: entry.fileName, textSpan: highlightSpan.textSpan, - isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference + isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference, + isDefinition: false }); } } @@ -55174,16 +56453,31 @@ var ts; 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 && - node.kind !== 9 /* StringLiteral */ && - !isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { - return undefined; + switch (node.kind) { + case 8 /* NumericLiteral */: + if (!isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + break; + } + // Fallthrough + case 69 /* Identifier */: + case 97 /* ThisKeyword */: + // case SyntaxKind.SuperKeyword: TODO:GH#9268 + case 9 /* StringLiteral */: + return getReferencedSymbolsForNode(node, program.getSourceFiles(), findInStrings, findInComments); + } + return undefined; + } + function isThis(node) { + switch (node.kind) { + case 97 /* ThisKeyword */: + // case SyntaxKind.ThisType: TODO: GH#9267 + return true; + case 69 /* Identifier */: + // 'this' as a parameter + return node.originalKeywordKind === 97 /* ThisKeyword */ && node.parent.kind === 142 /* Parameter */; + default: + return false; } - ts.Debug.assert(node.kind === 69 /* Identifier */ || node.kind === 8 /* NumericLiteral */ || node.kind === 9 /* StringLiteral */); - return getReferencedSymbolsForNode(node, program.getSourceFiles(), findInStrings, findInComments); } function getReferencedSymbolsForNode(node, sourceFiles, findInStrings, findInComments) { var typeChecker = program.getTypeChecker(); @@ -55200,7 +56494,7 @@ var ts; return getLabelReferencesInNode(node.parent, node); } } - if (node.kind === 97 /* ThisKeyword */ || node.kind === 165 /* ThisType */) { + if (isThis(node)) { return getReferencesForThisKeyword(node, sourceFiles); } if (node.kind === 95 /* SuperKeyword */) { @@ -55486,7 +56780,8 @@ var ts; references: [{ fileName: sourceFile.fileName, textSpan: ts.createTextSpan(position, searchText.length), - isWriteAccess: false + isWriteAccess: false, + isDefinition: false }] }); } @@ -55634,7 +56929,7 @@ var ts; ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); var node = ts.getTouchingWord(sourceFile, position); - if (!node || (node.kind !== 97 /* ThisKeyword */ && node.kind !== 165 /* ThisType */)) { + if (!node || !isThis(node)) { return; } var container = ts.getThisContainer(node, /* includeArrowFunctions */ false); @@ -55964,7 +57259,8 @@ var ts; return { fileName: node.getSourceFile().fileName, textSpan: ts.createTextSpanFromBounds(start, end), - isWriteAccess: isWriteAccess(node) + isWriteAccess: isWriteAccess(node), + isDefinition: ts.isDeclarationName(node) || ts.isLiteralComputedPropertyDeclarationName(node) }; } /** A node is considered a writeAccess iff it is a name of a declaration or a target of an assignment */ @@ -56206,7 +57502,7 @@ var ts; } function getNavigationBarItems(fileName) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); - return ts.NavigationBar.getNavigationBarItems(sourceFile, host.getCompilationSettings()); + return ts.NavigationBar.getNavigationBarItems(sourceFile); } function getSemanticClassifications(fileName, span) { return convertClassifications(getEncodedSemanticClassifications(fileName, span)); @@ -56639,7 +57935,8 @@ var ts; return; case 142 /* Parameter */: if (token.parent.name === token) { - return 17 /* parameterName */; + var isThis_1 = token.kind === 69 /* Identifier */ && token.originalKeywordKind === 97 /* ThisKeyword */; + return isThis_1 ? 3 /* keyword */ : 17 /* parameterName */; } return; } @@ -56830,7 +58127,7 @@ var ts; (tokenStart === position ? newLine + indentationStr : ""); return { newText: result, caretOffset: preamble.length }; } - function isValidBraceCompletionAtPostion(fileName, position, openingBrace) { + function isValidBraceCompletionAtPosition(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: @@ -57032,11 +58329,11 @@ var ts; var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); var canonicalDefaultLibName = getCanonicalFileName(ts.normalizePath(defaultLibFileName)); var node = ts.getTouchingWord(sourceFile, position, /*includeJsDocComment*/ true); - // Can only rename an identifier. if (node) { if (node.kind === 69 /* Identifier */ || node.kind === 9 /* StringLiteral */ || - isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || + isThis(node)) { var symbol = typeChecker.getSymbolAtLocation(node); // Only allow a symbol to be renamed if it actually has at least one declaration. if (symbol) { @@ -57150,7 +58447,7 @@ var ts; getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition, - isValidBraceCompletionAtPostion: isValidBraceCompletionAtPostion, + isValidBraceCompletionAtPosition: isValidBraceCompletionAtPosition, getEmitOutput: getEmitOutput, getNonBoundSourceFile: getNonBoundSourceFile, getProgram: getProgram @@ -58437,6 +59734,7 @@ var ts; function CoreServicesShimHostAdapter(shimHost) { var _this = this; this.shimHost = shimHost; + this.useCaseSensitiveFileNames = this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; if ("directoryExists" in this.shimHost) { this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; } @@ -58444,17 +59742,26 @@ var ts; this.realpath = function (path) { return _this.shimHost.realpath(path); }; } } - CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extension, exclude, depth) { + CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extensions, exclude, include, depth) { // Wrap the API changes for 2.0 release. This try/catch // should be removed once TypeScript 2.0 has shipped. - var encoded; try { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude), depth); + var pattern = ts.getFileMatcherPatterns(rootDir, extensions, exclude, include, this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); + return JSON.parse(this.shimHost.readDirectory(rootDir, JSON.stringify(extensions), JSON.stringify(pattern.basePaths), pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern, depth)); } catch (e) { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude)); + var results = []; + for (var _i = 0, extensions_2 = extensions; _i < extensions_2.length; _i++) { + var extension = extensions_2[_i]; + for (var _a = 0, _b = this.readDirectoryFallback(rootDir, extension, exclude); _a < _b.length; _a++) { + var file = _b[_a]; + if (!ts.contains(results, file)) { + results.push(file); + } + } + } + return results; } - return JSON.parse(encoded); }; CoreServicesShimHostAdapter.prototype.fileExists = function (fileName) { return this.shimHost.fileExists(fileName); @@ -58462,6 +59769,9 @@ var ts; CoreServicesShimHostAdapter.prototype.readFile = function (fileName) { return this.shimHost.readFile(fileName); }; + CoreServicesShimHostAdapter.prototype.readDirectoryFallback = function (rootDir, extension, exclude) { + return JSON.parse(this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude))); + }; return CoreServicesShimHostAdapter; }()); ts.CoreServicesShimHostAdapter = CoreServicesShimHostAdapter; @@ -58486,9 +59796,12 @@ var ts; return result; } function forwardJSONCall(logger, actionDescription, action, logPerformance) { + return forwardCall(logger, actionDescription, /*returnJson*/ true, action, logPerformance); + } + function forwardCall(logger, actionDescription, returnJson, action, logPerformance) { try { var result = simpleForwardCall(logger, actionDescription, action, logPerformance); - return JSON.stringify({ result: result }); + return returnJson ? JSON.stringify({ result: result }) : result; } catch (err) { if (err instanceof ts.OperationCanceledException) { @@ -58675,9 +59988,9 @@ 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) { + LanguageServiceShimObject.prototype.isValidBraceCompletionAtPosition = function (fileName, position, openingBrace) { var _this = this; - return this.forwardJSONCall("isValidBraceCompletionAtPostion('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPostion(fileName, position, openingBrace); }); + return this.forwardJSONCall("isValidBraceCompletionAtPosition('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPosition(fileName, position, openingBrace); }); }; /// GET SMART INDENT LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options /*Services.EditorOptions*/) { @@ -58772,6 +60085,11 @@ var ts; var _this = this; return this.forwardJSONCall("getEmitOutput('" + fileName + "')", function () { return _this.languageService.getEmitOutput(fileName); }); }; + LanguageServiceShimObject.prototype.getEmitOutputObject = function (fileName) { + var _this = this; + return forwardCall(this.logger, "getEmitOutput('" + fileName + "')", + /*returnJson*/ false, function () { return _this.languageService.getEmitOutput(fileName); }, this.logPerformance); + }; return LanguageServiceShimObject; }(ShimBase)); function convertClassifications(classifications) { @@ -58987,4 +60305,4 @@ var TypeScript; // TODO: it should be moved into a namespace though. /* @internal */ var toolsVersion = "1.9"; -/* tslint:enable:no-unused-variable */ +/* tslint:enable:no-unused-variable */ diff --git a/package.json b/package.json index bb476070286..29871e77f70 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "typescript", "author": "Microsoft Corp.", "homepage": "http://typescriptlang.org/", - "version": "1.9.0", + "version": "2.0.0", "license": "Apache-2.0", "description": "TypeScript is a language for application scale JavaScript development", "keywords": [ @@ -29,15 +29,48 @@ "node": ">=0.8.0" }, "devDependencies": { - "jake": "latest", - "mocha": "latest", - "chai": "latest", + "@types/browserify": "latest", + "@types/del": "latest", + "@types/glob": "latest", + "@types/gulp": "latest", + "@types/gulp-concat": "latest", + "@types/gulp-help": "latest", + "@types/gulp-newer": "latest", + "@types/gulp-sourcemaps": "latest", + "@types/gulp-typescript": "latest", + "@types/merge2": "latest", + "@types/minimatch": "latest", + "@types/minimist": "latest", + "@types/mkdirp": "latest", + "@types/node": "latest", + "@types/q": "latest", + "@types/run-sequence": "latest", + "@types/through2": "latest", "browserify": "latest", + "chai": "latest", + "del": "latest", + "gulp": "latest", + "gulp-clone": "latest", + "gulp-concat": "latest", + "gulp-help": "latest", + "gulp-insert": "latest", + "gulp-newer": "latest", + "gulp-sourcemaps": "latest", + "gulp-typescript": "latest", + "into-stream": "latest", "istanbul": "latest", + "jake": "latest", + "merge2": "latest", + "minimist": "latest", + "mkdirp": "latest", + "mocha": "latest", "mocha-fivemat-progress-reporter": "latest", + "run-sequence": "latest", + "through2": "latest", + "ts-node": "latest", + "tsd": "latest", "tslint": "next", - "typescript": "next", - "tsd": "latest" + "typescript": "next" }, "scripts": { "pretest": "jake tests", @@ -47,6 +80,7 @@ "build:tests": "jake tests", "start": "node lib/tsc", "clean": "jake clean", + "gulp": "gulp", "jake": "jake", "lint": "jake lint", "setup-hooks": "node scripts/link-hooks.js" diff --git a/scripts/authors.ts b/scripts/authors.ts new file mode 100644 index 00000000000..fd9d27acd00 --- /dev/null +++ b/scripts/authors.ts @@ -0,0 +1,182 @@ +import fs = require('fs'); +import path = require('path'); +import child_process = require("child_process"); + +type Author = { + displayNames: string[]; + preferedName?: string; + emails: string[]; +}; + +type AuthorMap = { [s: string]: Author }; + +type Command = { + (...arg: string[]): void; + description?: string; +}; + +const mailMapPath = path.resolve("../.mailmap"); +const authorsPath = path.resolve("../AUTHORS.md"); + +function getKnownAuthors(): Author[] { + const segmentRegExp = /\s?([^<]+)\s+<([^>]+)>/g; + const preferedNameRegeExp = /\s?#\s?([^#]+)$/; + const knownAuthors: Author[] = []; + + if (!fs.existsSync(mailMapPath)) { + throw new Error(`Could not load known users form .mailmap file at: ${mailMapPath}`); + } + + const mailMap = fs.readFileSync(mailMapPath).toString(); + + for (const line of mailMap.split("\r\n")) { + const author: Author = { displayNames: [], emails: [] }; + let match: RegExpMatchArray | null; + + while (match = segmentRegExp.exec(line)) { + author.displayNames.push(match[1]); + author.emails.push(match[2]); + } + if (match = preferedNameRegeExp.exec(line)) { + author.preferedName = match[1]; + } + if (!author.emails) continue; + knownAuthors.push(author); + if (line.indexOf("#") > 0 && !author.preferedName) { + throw new Error("Could not match prefered name for: " + line); + } + // console.log("===> line: " + line); + // console.log(JSON.stringify(author, undefined, 2)); + } + return knownAuthors; +} + +function getAuthorName(author: Author) { + return author.preferedName || author.displayNames[0]; +} + +function getKnownAuthorMaps() { + const knownAuthors = getKnownAuthors(); + const authorsByName: AuthorMap = {}; + const authorsByEmail: AuthorMap = {}; + knownAuthors.forEach(author => { + author.displayNames.forEach(n => authorsByName[n] = author); + author.emails.forEach(e => authorsByEmail[e.toLocaleLowerCase()] = author); + }); + return { + knownAuthors, + authorsByName, + authorsByEmail + }; +} + +function deduplicate(array: T[]): T[] { + let result: T[] = [] + if (array) { + for (const item of array) { + if (result.indexOf(item) < 0) { + result.push(item); + } + } + } + return result; +} + +function log(s: string) { + console.log(` ${s}`); +} + +function sortAuthors(a: string, b: string) { + if (a.charAt(0) === "@") a = a.substr(1); + if (b.charAt(0) === "@") b = b.substr(1); + if (a.toLocaleLowerCase() < b.toLocaleLowerCase()) { + return -1; + } + else { + return 1; + } +} + +namespace Commands { + export const writeAuthors: Command = function () { + const output = deduplicate(getKnownAuthors().map(getAuthorName).filter(a => !!a)).sort(sortAuthors).join("\r\n* "); + fs.writeFileSync(authorsPath, "TypeScript is authored by:\r\n* " + output); + }; + writeAuthors.description = "Write known authors to AUTHORS.md file."; + + export const listKnownAuthors: Command = function () { + deduplicate(getKnownAuthors().map(getAuthorName)).filter(a => !!a).sort(sortAuthors).forEach(log); + }; + listKnownAuthors.description = "List known authors as listed in .mailmap file."; + + export const listAuthors: Command = function (...specs:string[]) { + const cmd = "git shortlog -se " + specs.join(" "); + console.log(cmd); + const outputRegExp = /\d+\s+([^<]+)<([^>]+)>/; + const tty = process.platform === 'win32' ? 'CON' : '/dev/tty'; + const authors: { name: string, email: string, knownAuthor?: Author }[] = []; + child_process.exec(`${cmd} < ${tty}`, { cwd: path.resolve("../") }, function (error, stdout, stderr) { + if (error) { + console.log(stderr.toString()); + } + else { + const output = stdout.toString(); + const lines = output.split("\n"); + lines.forEach(line => { + if (line) { + let match: RegExpExecArray | null; + if (match = outputRegExp.exec(line)) { + authors.push({ name: match[1], email: match[2] }); + } + else { + throw new Error("Could not parse output: " + line); + } + } + }); + + const maps = getKnownAuthorMaps(); + + const lookupAuthor = function ({name, email}: { name: string, email: string }) { + return maps.authorsByEmail[email.toLocaleLowerCase()] || maps.authorsByName[name]; + }; + + const knownAuthors = authors + .map(lookupAuthor) + .filter(a => !!a) + .map(getAuthorName); + const unknownAuthors = authors + .filter(a => !lookupAuthor(a)) + .map(a => `${a.name} <${a.email}>`); + + if (knownAuthors.length) { + console.log("\r\n"); + console.log("Found known authors: "); + console.log("====================="); + deduplicate(knownAuthors).sort(sortAuthors).forEach(log); + } + + if (unknownAuthors.length) { + console.log("\r\n"); + console.log("Found unknown authors: "); + console.log("====================="); + deduplicate(unknownAuthors).sort(sortAuthors).forEach(log); + } + } + }); + }; + listAuthors.description = "List known and unknown authors for a given spec"; +} + +var args = process.argv.slice(2); +if (args.length < 1) { + console.log('Usage: node authors.js [command]'); + console.log('List of commands: '); + Object.keys(Commands).forEach(k => console.log(` ${k}: ${(Commands as any)[k]['description']}`)); +} else { + var cmd: Function = (Commands as any)[args[0]]; + if (cmd === undefined) { + console.log('Unknown command ' + args[1]); + } else { + cmd.apply(undefined, args.slice(1)); + } +} diff --git a/scripts/configureNightly.ts b/scripts/configureNightly.ts index 8553c15ebd0..640f330b376 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}-1.0`; + return `${versionString}-dev.${timeStr}`; } main(); \ No newline at end of file diff --git a/scripts/mocha-parallel.js b/scripts/mocha-parallel.js index bf33f68f204..ce40c832b21 100644 --- a/scripts/mocha-parallel.js +++ b/scripts/mocha-parallel.js @@ -245,6 +245,13 @@ function runTests(taskConfigsFolder, run, options, cb) { } } +var nodeModulesPathPrefix = path.resolve("./node_modules/.bin/") + path.delimiter; +if (process.env.path !== undefined) { + process.env.path = nodeModulesPathPrefix + process.env.path; +} else if (process.env.PATH !== undefined) { + process.env.PATH = nodeModulesPathPrefix + process.env.PATH; +} + function spawnProcess(cmd, options) { var shell = process.platform === "win32" ? "cmd" : "/bin/sh"; var prefix = process.platform === "win32" ? "/c" : "-c"; diff --git a/scripts/tslint/objectLiteralSurroundingSpaceRule.ts b/scripts/tslint/objectLiteralSurroundingSpaceRule.ts new file mode 100644 index 00000000000..b527746bf51 --- /dev/null +++ b/scripts/tslint/objectLiteralSurroundingSpaceRule.ts @@ -0,0 +1,42 @@ +import * as Lint from "tslint/lib/lint"; +import * as ts from "typescript"; + + +export class Rule extends Lint.Rules.AbstractRule { + public static LEADING_FAILURE_STRING = "No leading whitespace found on single-line object literal."; + public static TRAILING_FAILURE_STRING = "No trailing whitespace found on single-line object literal."; + public static LEADING_EXCESS_FAILURE_STRING = "Excess leading whitespace found on single-line object literal."; + public static TRAILING_EXCESS_FAILURE_STRING = "Excess trailing whitespace found on single-line object literal."; + + public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { + return this.applyWithWalker(new ObjectLiteralSpaceWalker(sourceFile, this.getOptions())); + } +} + +class ObjectLiteralSpaceWalker extends Lint.RuleWalker { + public visitNode(node: ts.Node) { + if (node.kind === ts.SyntaxKind.ObjectLiteralExpression) { + const literal = node as ts.ObjectLiteralExpression; + const text = literal.getText(); + if (text.match(/^{[^\n]+}$/g)) { + if (text.charAt(1) !== " ") { + const failure = this.createFailure(node.pos, node.getWidth(), Rule.LEADING_FAILURE_STRING); + this.addFailure(failure); + } + if (text.charAt(2) === " ") { + const failure = this.createFailure(node.pos + 2, 1, Rule.LEADING_EXCESS_FAILURE_STRING); + this.addFailure(failure); + } + if (text.charAt(text.length - 2) !== " ") { + const failure = this.createFailure(node.pos, node.getWidth(), Rule.TRAILING_FAILURE_STRING); + this.addFailure(failure); + } + if (text.charAt(text.length - 3) === " ") { + const failure = this.createFailure(node.pos + node.getWidth() - 3, 1, Rule.TRAILING_EXCESS_FAILURE_STRING); + this.addFailure(failure); + } + } + } + super.visitNode(node); + } +} diff --git a/scripts/types/ambient.d.ts b/scripts/types/ambient.d.ts new file mode 100644 index 00000000000..8a86a290bee --- /dev/null +++ b/scripts/types/ambient.d.ts @@ -0,0 +1,22 @@ +declare module "gulp-clone" { + function Clone(): NodeJS.ReadWriteStream; + namespace Clone { + export function sink() : NodeJS.ReadWriteStream & {tap: () => NodeJS.ReadWriteStream}; + } + export = Clone; +} + +declare module "gulp-insert" { + export function append(text: string | Buffer): NodeJS.ReadWriteStream; + export function prepend(text: string | Buffer): NodeJS.ReadWriteStream; + export function wrap(text: string | Buffer, tail: string | Buffer): NodeJS.ReadWriteStream; + export function transform(cb: (contents: string, file: {path: string}) => string): NodeJS.ReadWriteStream; // file is a vinyl file +} + +declare module "into-stream" { + function IntoStream(content: string | Buffer | (string | Buffer)[]): NodeJS.ReadableStream; + namespace IntoStream { + export function obj(content: any): NodeJS.ReadableStream + } + export = IntoStream; +} \ No newline at end of file diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index aa06d7ac45d..782ed87c818 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -572,6 +572,9 @@ namespace ts { case SyntaxKind.CaseBlock: bindCaseBlock(node); break; + case SyntaxKind.CaseClause: + bindCaseClause(node); + break; case SyntaxKind.LabeledStatement: bindLabeledStatement(node); break; @@ -599,12 +602,6 @@ namespace ts { } } - function isNarrowableReference(expr: Expression): boolean { - return expr.kind === SyntaxKind.Identifier || - expr.kind === SyntaxKind.ThisKeyword || - expr.kind === SyntaxKind.PropertyAccessExpression && isNarrowableReference((expr).expression); - } - function isNarrowingExpression(expr: Expression): boolean { switch (expr.kind) { case SyntaxKind.Identifier: @@ -612,7 +609,7 @@ namespace ts { case SyntaxKind.PropertyAccessExpression: return isNarrowableReference(expr); case SyntaxKind.CallExpression: - return true; + return hasNarrowableArgument(expr); case SyntaxKind.ParenthesizedExpression: return isNarrowingExpression((expr).expression); case SyntaxKind.BinaryExpression: @@ -623,6 +620,39 @@ namespace ts { return false; } + function isNarrowableReference(expr: Expression): boolean { + return expr.kind === SyntaxKind.Identifier || + expr.kind === SyntaxKind.ThisKeyword || + expr.kind === SyntaxKind.PropertyAccessExpression && isNarrowableReference((expr).expression); + } + + function hasNarrowableArgument(expr: CallExpression) { + if (expr.arguments) { + for (const argument of expr.arguments) { + if (isNarrowableReference(argument)) { + return true; + } + } + } + if (expr.expression.kind === SyntaxKind.PropertyAccessExpression && + isNarrowableReference((expr.expression).expression)) { + return true; + } + return false; + } + + function isNarrowingNullCheckOperands(expr1: Expression, expr2: Expression) { + return (expr1.kind === SyntaxKind.NullKeyword || expr1.kind === SyntaxKind.Identifier && (expr1).text === "undefined") && isNarrowableOperand(expr2); + } + + function isNarrowingTypeofOperands(expr1: Expression, expr2: Expression) { + return expr1.kind === SyntaxKind.TypeOfExpression && isNarrowableOperand((expr1).expression) && expr2.kind === SyntaxKind.StringLiteral; + } + + function isNarrowingDiscriminant(expr: Expression) { + return expr.kind === SyntaxKind.PropertyAccessExpression && isNarrowableReference((expr).expression); + } + function isNarrowingBinaryExpression(expr: BinaryExpression) { switch (expr.operatorToken.kind) { case SyntaxKind.EqualsToken: @@ -631,34 +661,35 @@ namespace ts { case SyntaxKind.ExclamationEqualsToken: case SyntaxKind.EqualsEqualsEqualsToken: case SyntaxKind.ExclamationEqualsEqualsToken: - if ((isNarrowingExpression(expr.left) && (expr.right.kind === SyntaxKind.NullKeyword || expr.right.kind === SyntaxKind.Identifier)) || - (isNarrowingExpression(expr.right) && (expr.left.kind === SyntaxKind.NullKeyword || expr.left.kind === SyntaxKind.Identifier))) { - return true; - } - if (isTypeOfNarrowingBinaryExpression(expr)) { - return true; - } - return false; + return isNarrowingNullCheckOperands(expr.right, expr.left) || isNarrowingNullCheckOperands(expr.left, expr.right) || + isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right) || + isNarrowingDiscriminant(expr.left) || isNarrowingDiscriminant(expr.right); case SyntaxKind.InstanceOfKeyword: - return isNarrowingExpression(expr.left); + return isNarrowableOperand(expr.left); case SyntaxKind.CommaToken: return isNarrowingExpression(expr.right); } return false; } - function isTypeOfNarrowingBinaryExpression(expr: BinaryExpression) { - let typeOf: Expression; - if (expr.left.kind === SyntaxKind.StringLiteral) { - typeOf = expr.right; + function isNarrowableOperand(expr: Expression): boolean { + switch (expr.kind) { + case SyntaxKind.ParenthesizedExpression: + return isNarrowableOperand((expr).expression); + case SyntaxKind.BinaryExpression: + switch ((expr).operatorToken.kind) { + case SyntaxKind.EqualsToken: + return isNarrowableOperand((expr).left); + case SyntaxKind.CommaToken: + return isNarrowableOperand((expr).right); + } } - else if (expr.right.kind === SyntaxKind.StringLiteral) { - typeOf = expr.left; - } - else { - typeOf = undefined; - } - return typeOf && typeOf.kind === SyntaxKind.TypeOfExpression && isNarrowingExpression((typeOf).expression); + return isNarrowableReference(expr); + } + + function isNarrowingSwitchStatement(switchStatement: SwitchStatement) { + const expr = switchStatement.expression; + return expr.kind === SyntaxKind.PropertyAccessExpression && isNarrowableReference((expr).expression); } function createBranchLabel(): FlowLabel { @@ -704,8 +735,22 @@ namespace ts { setFlowNodeReferenced(antecedent); return { flags, - antecedent, expression, + antecedent + }; + } + + function createFlowSwitchClause(antecedent: FlowNode, switchStatement: SwitchStatement, clauseStart: number, clauseEnd: number): FlowNode { + if (!isNarrowingSwitchStatement(switchStatement)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: FlowFlags.SwitchClause, + switchStatement, + clauseStart, + clauseEnd, + antecedent }; } @@ -934,9 +979,12 @@ namespace ts { preSwitchCaseFlow = currentFlow; bind(node.caseBlock); addAntecedent(postSwitchLabel, currentFlow); - const hasNonEmptyDefault = forEach(node.caseBlock.clauses, c => c.kind === SyntaxKind.DefaultClause && c.statements.length); - if (!hasNonEmptyDefault) { - addAntecedent(postSwitchLabel, preSwitchCaseFlow); + const hasDefault = forEach(node.caseBlock.clauses, c => c.kind === SyntaxKind.DefaultClause); + // We mark a switch statement as possibly exhaustive if it has no default clause and if all + // case clauses have unreachable end points (e.g. they all return). + node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents; + if (!hasDefault) { + addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0)); } currentBreakTarget = saveBreakTarget; preSwitchCaseFlow = savePreSwitchCaseFlow; @@ -945,29 +993,34 @@ namespace ts { function bindCaseBlock(node: CaseBlock): void { const clauses = node.clauses; + let fallthroughFlow = unreachableFlow; for (let i = 0; i < clauses.length; i++) { - const clause = clauses[i]; - if (clause.statements.length) { - if (currentFlow.flags & FlowFlags.Unreachable) { - currentFlow = preSwitchCaseFlow; - } - else { - const preCaseLabel = createBranchLabel(); - addAntecedent(preCaseLabel, preSwitchCaseFlow); - addAntecedent(preCaseLabel, currentFlow); - currentFlow = finishFlowLabel(preCaseLabel); - } - bind(clause); - if (!(currentFlow.flags & FlowFlags.Unreachable) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { - errorOnFirstToken(clause, Diagnostics.Fallthrough_case_in_switch); - } + const clauseStart = i; + while (!clauses[i].statements.length && i + 1 < clauses.length) { + bind(clauses[i]); + i++; } - else { - bind(clause); + const preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1)); + addAntecedent(preCaseLabel, fallthroughFlow); + currentFlow = finishFlowLabel(preCaseLabel); + const clause = clauses[i]; + bind(clause); + fallthroughFlow = currentFlow; + if (!(currentFlow.flags & FlowFlags.Unreachable) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, Diagnostics.Fallthrough_case_in_switch); } } } + function bindCaseClause(node: CaseClause): void { + const saveCurrentFlow = currentFlow; + currentFlow = preSwitchCaseFlow; + bind(node.expression); + currentFlow = saveCurrentFlow; + forEach(node.statements, bind); + } + function pushActiveLabel(name: string, breakTarget: FlowLabel, continueTarget: FlowLabel): ActiveLabel { const activeLabel = { name, diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b839d862430..b4aecd2d1e6 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -49,6 +49,7 @@ namespace ts { const compilerOptions = host.getCompilerOptions(); const languageVersion = compilerOptions.target || ScriptTarget.ES3; const modulekind = getEmitModuleKind(compilerOptions); + const noUnusedIdentifiers = !!compilerOptions.noUnusedLocals || !!compilerOptions.noUnusedParameters; const allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === ModuleKind.System; const strictNullChecks = compilerOptions.strictNullChecks; @@ -186,6 +187,7 @@ namespace ts { let jsxElementClassType: Type; let deferredNodes: Node[]; + let deferredUnusedIdentifierNodes: Node[]; let flowLoopStart = 0; let flowLoopCount = 0; @@ -393,7 +395,7 @@ namespace ts { target.flags |= source.flags; if (source.valueDeclaration && (!target.valueDeclaration || - (target.valueDeclaration.kind === SyntaxKind.ModuleDeclaration && source.valueDeclaration.kind !== SyntaxKind.ModuleDeclaration))) { + (target.valueDeclaration.kind === SyntaxKind.ModuleDeclaration && source.valueDeclaration.kind !== SyntaxKind.ModuleDeclaration))) { // other kinds of value declarations take precedence over modules target.valueDeclaration = source.valueDeclaration; } @@ -561,7 +563,8 @@ namespace ts { const declarationFile = getSourceFileOfNode(declaration); const useFile = getSourceFileOfNode(usage); if (declarationFile !== useFile) { - if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) { + if ((modulekind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) || + (!compilerOptions.outFile && !compilerOptions.out)) { // nodes are in different files and order cannot be determines return true; } @@ -662,8 +665,8 @@ namespace ts { useResult = result.flags & SymbolFlags.TypeParameter // type parameters are visible in parameter list, return type and type parameter list ? lastLocation === (location).type || - lastLocation.kind === SyntaxKind.Parameter || - lastLocation.kind === SyntaxKind.TypeParameter + lastLocation.kind === SyntaxKind.Parameter || + lastLocation.kind === SyntaxKind.TypeParameter // local types not visible outside the function body : false; } @@ -845,13 +848,18 @@ namespace ts { location = location.parent; } + if (result && nameNotFoundMessage && noUnusedIdentifiers) { + result.isReferenced = true; + } + if (!result) { result = getSymbol(globals, name, meaning); } if (!result) { if (nameNotFoundMessage) { - if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg)) { + if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && + !checkAndReportErrorForExtendingInterface(errorLocation)) { error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : declarationNameToString(nameArg)); } } @@ -935,6 +943,31 @@ namespace ts { return false; } + + function checkAndReportErrorForExtendingInterface(errorLocation: Node): boolean { + let parentClassExpression = errorLocation; + while (parentClassExpression) { + const kind = parentClassExpression.kind; + if (kind === SyntaxKind.Identifier || kind === SyntaxKind.PropertyAccessExpression) { + parentClassExpression = parentClassExpression.parent; + continue; + } + if (kind === SyntaxKind.ExpressionWithTypeArguments) { + break; + } + return false; + } + if (!parentClassExpression) { + return false; + } + const expression = (parentClassExpression).expression; + if (resolveEntityName(expression, SymbolFlags.Interface, /*ignoreErrors*/ true)) { + error(errorLocation, Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, getTextOfNode(expression)); + return true; + } + return false; + } + function checkResolvedBlockScopedVariable(result: Symbol, errorLocation: Node): void { Debug.assert((result.flags & SymbolFlags.BlockScopedVariable) !== 0); // Block-scoped variables cannot be used before their definition @@ -994,8 +1027,8 @@ namespace ts { const exportDefaultSymbol = isShorthandAmbientModule(moduleSymbol.valueDeclaration) ? moduleSymbol : moduleSymbol.exports["export="] ? - getPropertyOfType(getTypeOfSymbol(moduleSymbol.exports["export="]), "default") : - resolveSymbol(moduleSymbol.exports["default"]); + getPropertyOfType(getTypeOfSymbol(moduleSymbol.exports["export="]), "default") : + resolveSymbol(moduleSymbol.exports["default"]); if (!exportDefaultSymbol && !allowSyntheticDefaultImports) { error(node.name, Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol)); @@ -1097,7 +1130,7 @@ namespace ts { return getExternalModuleMember(node.parent.parent.parent, node); } - function getTargetOfGlobalModuleExportDeclaration(node: NamespaceExportDeclaration): Symbol { + function getTargetOfNamespaceExportDeclaration(node: NamespaceExportDeclaration): Symbol { return resolveExternalModuleSymbol(node.parent.symbol); } @@ -1126,7 +1159,7 @@ namespace ts { case SyntaxKind.ExportAssignment: return getTargetOfExportAssignment(node); case SyntaxKind.NamespaceExportDeclaration: - return getTargetOfGlobalModuleExportDeclaration(node); + return getTargetOfNamespaceExportDeclaration(node); } } @@ -1237,9 +1270,13 @@ namespace ts { const right = name.kind === SyntaxKind.QualifiedName ? (name).right : (name).name; const namespace = resolveEntityName(left, SymbolFlags.Namespace, ignoreErrors, /*dontResolveAlias*/ false, location); - if (!namespace || namespace === unknownSymbol || nodeIsMissing(right)) { + if (!namespace || nodeIsMissing(right)) { return undefined; } + else if (namespace === unknownSymbol) { + return namespace; + } + symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning); if (!symbol) { if (!ignoreErrors) { @@ -2448,16 +2485,13 @@ namespace ts { } } - function buildDisplayForParametersAndDelimiters(thisType: Type, parameters: Symbol[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, symbolStack?: Symbol[]) { + function buildDisplayForParametersAndDelimiters(thisParameter: Symbol | undefined, parameters: Symbol[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, symbolStack?: Symbol[]) { writePunctuation(writer, SyntaxKind.OpenParenToken); - if (thisType) { - writeKeyword(writer, SyntaxKind.ThisKeyword); - writePunctuation(writer, SyntaxKind.ColonToken); - writeSpace(writer); - buildTypeDisplay(thisType, writer, enclosingDeclaration, flags, symbolStack); + if (thisParameter) { + buildParameterDisplay(thisParameter, writer, enclosingDeclaration, flags, symbolStack); } for (let i = 0; i < parameters.length; i++) { - if (i > 0 || thisType) { + if (i > 0 || thisParameter) { writePunctuation(writer, SyntaxKind.CommaToken); writeSpace(writer); } @@ -2513,7 +2547,7 @@ namespace ts { buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack); } - buildDisplayForParametersAndDelimiters(signature.thisType, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); + buildDisplayForParametersAndDelimiters(signature.thisParameter, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack); } @@ -2769,6 +2803,10 @@ namespace ts { return type && (type.flags & TypeFlags.Any) !== 0; } + function isTypeNever(type: Type) { + return type && (type.flags & TypeFlags.Never) !== 0; + } + // Return the type of a binding element parent. We check SymbolLinks first to see if a type has been // assigned by contextual typing. function getTypeForBindingElementParent(node: VariableLikeDeclaration) { @@ -2952,12 +2990,14 @@ namespace ts { if (func.kind === SyntaxKind.SetAccessor && !hasDynamicName(func)) { const getter = getDeclarationOfKind(declaration.parent.symbol, SyntaxKind.GetAccessor); if (getter) { - const signature = getSignatureFromDeclaration(getter); + const getterSignature = getSignatureFromDeclaration(getter); const thisParameter = getAccessorThisParameter(func as AccessorDeclaration); if (thisParameter && declaration === thisParameter) { - return signature.thisType; + // Use the type from the *getter* + Debug.assert(!thisParameter.type); + return getTypeOfSymbol(getterSignature.thisParameter); } - return getReturnTypeOfSignature(signature); + return getReturnTypeOfSignature(getterSignature); } } // Use contextual parameter type if one is available @@ -3122,23 +3162,29 @@ namespace ts { if (declaration.kind === SyntaxKind.ExportAssignment) { return links.type = checkExpression((declaration).expression); } - // Handle module.exports = expr - if (declaration.kind === SyntaxKind.BinaryExpression) { - return links.type = getUnionType(map(symbol.declarations, (decl: BinaryExpression) => checkExpressionCached(decl.right))); - } - if (declaration.kind === SyntaxKind.PropertyAccessExpression) { - // Declarations only exist for property access expressions for certain - // special assignment kinds - if (declaration.parent.kind === SyntaxKind.BinaryExpression) { - // Handle exports.p = expr or this.p = expr or className.prototype.method = expr - return links.type = checkExpressionCached((declaration.parent).right); - } - } // Handle variable, parameter or property if (!pushTypeResolution(symbol, TypeSystemPropertyName.Type)) { return unknownType; } - let type = getWidenedTypeForVariableLikeDeclaration(declaration, /*reportErrors*/ true); + + let type: Type = undefined; + // Handle certain special assignment kinds, which happen to union across multiple declarations: + // * module.exports = expr + // * exports.p = expr + // * this.p = expr + // * className.prototype.method = expr + if (declaration.kind === SyntaxKind.BinaryExpression || + declaration.kind === SyntaxKind.PropertyAccessExpression && declaration.parent.kind === SyntaxKind.BinaryExpression) { + type = getUnionType(map(symbol.declarations, + decl => decl.kind === SyntaxKind.BinaryExpression ? + checkExpressionCached((decl).right) : + checkExpressionCached((decl.parent).right))); + } + + if (type === undefined) { + type = getWidenedTypeForVariableLikeDeclaration(declaration, /*reportErrors*/ true); + } + if (!popTypeResolution()) { if ((symbol.valueDeclaration).type) { // Variable has type annotation that circularly references the variable itself @@ -3173,14 +3219,13 @@ namespace ts { return undefined; } - function getAnnotatedAccessorThisType(accessor: AccessorDeclaration): Type { - if (accessor) { - const parameter = getAccessorThisParameter(accessor); - if (parameter && parameter.type) { - return getTypeFromTypeNode(accessor.parameters[0].type); - } - } - return undefined; + function getAnnotatedAccessorThisParameter(accessor: AccessorDeclaration): Symbol | undefined { + const parameter = getAccessorThisParameter(accessor); + return parameter && parameter.symbol; + } + + function getThisTypeOfDeclaration(declaration: SignatureDeclaration): Type | undefined { + return getThisTypeOfSignature(getSignatureFromDeclaration(declaration)); } function getTypeOfAccessors(symbol: Symbol): Type { @@ -3863,13 +3908,13 @@ namespace ts { resolveObjectTypeMembers(type, source, typeParameters, typeArguments); } - function createSignature(declaration: SignatureDeclaration, typeParameters: TypeParameter[], thisType: Type, parameters: Symbol[], + function createSignature(declaration: SignatureDeclaration, typeParameters: TypeParameter[], thisParameter: Symbol | undefined, parameters: Symbol[], resolvedReturnType: Type, typePredicate: TypePredicate, minArgumentCount: number, hasRestParameter: boolean, hasStringLiterals: boolean): Signature { const sig = new Signature(checker); sig.declaration = declaration; sig.typeParameters = typeParameters; sig.parameters = parameters; - sig.thisType = thisType; + sig.thisParameter = thisParameter; sig.resolvedReturnType = resolvedReturnType; sig.typePredicate = typePredicate; sig.minArgumentCount = minArgumentCount; @@ -3879,7 +3924,7 @@ namespace ts { } function cloneSignature(sig: Signature): Signature { - return createSignature(sig.declaration, sig.typeParameters, sig.thisType, sig.parameters, sig.resolvedReturnType, + return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); } @@ -3977,8 +4022,9 @@ namespace ts { // Union the result types when more than one signature matches if (unionSignatures.length > 1) { s = cloneSignature(signature); - if (forEach(unionSignatures, sig => sig.thisType)) { - s.thisType = getUnionType(map(unionSignatures, sig => sig.thisType || anyType)); + if (forEach(unionSignatures, sig => sig.thisParameter)) { + const thisType = getUnionType(map(unionSignatures, sig => getTypeOfSymbol(sig.thisParameter) || anyType)); + s.thisParameter = createTransientSymbol(signature.thisParameter, thisType); } // Clear resolved return type we possibly got from cloneSignature s.resolvedReturnType = undefined; @@ -4199,6 +4245,7 @@ namespace ts { let props: Symbol[]; // Flags we want to propagate to the result if they exist in all source symbols let commonFlags = (containingType.flags & TypeFlags.Intersection) ? SymbolFlags.Optional : SymbolFlags.None; + let isReadonly = false; for (const current of types) { const type = getApparentType(current); if (type !== unknownType) { @@ -4211,6 +4258,9 @@ namespace ts { else if (!contains(props, prop)) { props.push(prop); } + if (isReadonlySymbol(prop)) { + isReadonly = true; + } } else if (containingType.flags & TypeFlags.Union) { // A union type requires the property to be present in all constituent types @@ -4240,6 +4290,7 @@ namespace ts { name); result.containingType = containingType; result.declarations = declarations; + result.isReadonly = isReadonly; result.type = containingType.flags & TypeFlags.Union ? getUnionType(propTypes) : getIntersectionType(propTypes); return result; } @@ -4372,7 +4423,7 @@ namespace ts { return result; } - function isOptionalParameter(node: ParameterDeclaration) { + function isJSDocOptionalParameter(node: ParameterDeclaration) { if (node.flags & NodeFlags.JavaScriptFile) { if (node.type && node.type.kind === SyntaxKind.JSDocOptionalType) { return true; @@ -4389,8 +4440,10 @@ namespace ts { } } } + } - if (hasQuestionToken(node)) { + function isOptionalParameter(node: ParameterDeclaration) { + if (hasQuestionToken(node) || isJSDocOptionalParameter(node)) { return true; } @@ -4429,7 +4482,7 @@ namespace ts { const parameters: Symbol[] = []; let hasStringLiterals = false; let minArgumentCount = -1; - let thisType: Type = undefined; + let thisParameter: Symbol = undefined; let hasThisParameter: boolean; const isJSConstructSignature = isJSDocConstructSignature(declaration); @@ -4447,7 +4500,7 @@ namespace ts { } if (i === 0 && paramSymbol.name === "this") { hasThisParameter = true; - thisType = param.type ? getTypeFromTypeNode(param.type) : unknownType; + thisParameter = param.symbol; } else { parameters.push(paramSymbol); @@ -4457,7 +4510,7 @@ namespace ts { hasStringLiterals = true; } - if (param.initializer || param.questionToken || param.dotDotDotToken) { + if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) { if (minArgumentCount < 0) { minArgumentCount = i - (hasThisParameter ? 1 : 0); } @@ -4471,10 +4524,12 @@ namespace ts { // If only one accessor includes a this-type annotation, the other behaves as if it had the same type annotation if ((declaration.kind === SyntaxKind.GetAccessor || declaration.kind === SyntaxKind.SetAccessor) && !hasDynamicName(declaration) && - (!hasThisParameter || thisType === unknownType)) { + (!hasThisParameter || !thisParameter)) { const otherKind = declaration.kind === SyntaxKind.GetAccessor ? SyntaxKind.SetAccessor : SyntaxKind.GetAccessor; - const setter = getDeclarationOfKind(declaration.symbol, otherKind); - thisType = getAnnotatedAccessorThisType(setter); + const other = getDeclarationOfKind(declaration.symbol, otherKind); + if (other) { + thisParameter = getAnnotatedAccessorThisParameter(other); + } } if (minArgumentCount < 0) { @@ -4489,13 +4544,13 @@ namespace ts { : undefined; const typeParameters = classType ? classType.localTypeParameters : declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : - getTypeParametersFromJSDocTemplate(declaration); + getTypeParametersFromJSDocTemplate(declaration); const returnType = getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType); const typePredicate = declaration.type && declaration.type.kind === SyntaxKind.TypePredicate ? createTypePredicateFromTypePredicateNode(declaration.type as TypePredicateNode) : undefined; - links.resolvedSignature = createSignature(declaration, typeParameters, thisType, parameters, returnType, typePredicate, minArgumentCount, hasRestParameter(declaration), hasStringLiterals); + links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } @@ -4577,6 +4632,12 @@ namespace ts { return anyType; } + function getThisTypeOfSignature(signature: Signature): Type | undefined { + if (signature.thisParameter) { + return getTypeOfSymbol(signature.thisParameter); + } + } + function getReturnTypeOfSignature(signature: Signature): Type { if (!signature.resolvedReturnType) { if (!pushTypeResolution(signature, TypeSystemPropertyName.ResolvedReturnType)) { @@ -5112,7 +5173,7 @@ namespace ts { if (typeSet.length === 0) { return typeSet.containsNull ? typeSet.containsNonWideningType ? nullType : nullWideningType : typeSet.containsUndefined ? typeSet.containsNonWideningType ? undefinedType : undefinedWideningType : - neverType; + neverType; } else if (typeSet.length === 1) { return typeSet[0]; @@ -5187,7 +5248,6 @@ namespace ts { if (hasProperty(stringLiteralTypes, text)) { return stringLiteralTypes[text]; } - const type = stringLiteralTypes[text] = createType(TypeFlags.StringLiteral); type.text = text; return type; @@ -5349,8 +5409,8 @@ namespace ts { const count = sources.length; const mapper: TypeMapper = 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); + count == 2 ? createBinaryTypeMapper(sources[0], targets ? targets[0] : anyType, sources[1], targets ? targets[1] : anyType) : + createArrayTypeMapper(sources, targets); mapper.mappedTypes = sources; return mapper; } @@ -5429,7 +5489,7 @@ namespace ts { freshTypePredicate = cloneTypePredicate(signature.typePredicate, mapper); } const result = createSignature(signature.declaration, freshTypeParameters, - signature.thisType && instantiateType(signature.thisType, mapper), + signature.thisParameter && instantiateSymbol(signature.thisParameter, mapper), instantiateList(signature.parameters, mapper, instantiateSymbol), instantiateType(signature.resolvedReturnType, mapper), freshTypePredicate, @@ -5652,6 +5712,10 @@ namespace ts { return checkTypeComparableTo(source, target, /*errorNode*/ undefined); } + function areTypesComparable(type1: Type, type2: Type): boolean { + return isTypeComparableTo(type1, type2) || isTypeComparableTo(type2, type1); + } + function checkTypeSubtypeOf(source: Type, target: Type, errorNode: Node, headMessage?: DiagnosticMessage, containingMessageChain?: DiagnosticMessageChain): boolean { return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain); } @@ -5669,8 +5733,8 @@ namespace ts { } function isSignatureAssignableTo(source: Signature, - target: Signature, - ignoreReturnTypes: boolean): boolean { + target: Signature, + ignoreReturnTypes: boolean): boolean { return compareSignaturesRelated(source, target, ignoreReturnTypes, /*reportErrors*/ false, /*errorReporter*/ undefined, compareTypesAssignable) !== Ternary.False; } @@ -5678,11 +5742,11 @@ namespace ts { * See signatureRelatedTo, compareSignaturesIdentical */ function compareSignaturesRelated(source: Signature, - target: Signature, - ignoreReturnTypes: boolean, - reportErrors: boolean, - errorReporter: (d: DiagnosticMessage, arg0?: string, arg1?: string) => void, - compareTypes: (s: Type, t: Type, reportErrors?: boolean) => Ternary): Ternary { + target: Signature, + ignoreReturnTypes: boolean, + reportErrors: boolean, + errorReporter: (d: DiagnosticMessage, arg0?: string, arg1?: string) => void, + compareTypes: (s: Type, t: Type, reportErrors?: boolean) => Ternary): Ternary { // TODO (drosen): De-duplicate code between related functions. if (source === target) { return Ternary.True; @@ -5697,17 +5761,22 @@ namespace ts { target = getErasedSignature(target); let result = Ternary.True; - if (source.thisType && target.thisType && source.thisType !== voidType) { - // void sources are assignable to anything. - const related = compareTypes(source.thisType, target.thisType, /*reportErrors*/ false) - || compareTypes(target.thisType, source.thisType, reportErrors); - if (!related) { - if (reportErrors) { - errorReporter(Diagnostics.The_this_types_of_each_signature_are_incompatible); + + const sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType && sourceThisType !== voidType) { + const targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + // void sources are assignable to anything. + const related = compareTypes(sourceThisType, targetThisType, /*reportErrors*/ false) + || compareTypes(targetThisType, sourceThisType, reportErrors); + if (!related) { + if (reportErrors) { + errorReporter(Diagnostics.The_this_types_of_each_signature_are_incompatible); + } + return Ternary.False; } - return Ternary.False; + result &= related; } - result &= related; } const sourceMax = getNumNonRestParameters(source); @@ -5759,10 +5828,10 @@ namespace ts { } function compareTypePredicateRelatedTo(source: TypePredicate, - target: TypePredicate, - reportErrors: boolean, - errorReporter: (d: DiagnosticMessage, arg0?: string, arg1?: string) => void, - compareTypes: (s: Type, t: Type, reportErrors?: boolean) => Ternary): Ternary { + target: TypePredicate, + reportErrors: boolean, + errorReporter: (d: DiagnosticMessage, arg0?: string, arg1?: string) => void, + compareTypes: (s: Type, t: Type, reportErrors?: boolean) => Ternary): Ternary { if (source.kind !== target.kind) { if (reportErrors) { errorReporter(Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard); @@ -6722,13 +6791,21 @@ namespace ts { source = getErasedSignature(source); target = getErasedSignature(target); let result = Ternary.True; - if (!ignoreThisTypes && source.thisType && target.thisType) { - const related = compareTypes(source.thisType, target.thisType); - if (!related) { - return Ternary.False; + + if (!ignoreThisTypes) { + const sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType) { + const targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + const related = compareTypes(sourceThisType, targetThisType); + if (!related) { + return Ternary.False; + } + result &= related; + } } - result &= related; } + const targetLen = target.parameters.length; for (let i = 0; i < targetLen; i++) { const s = isRestParameterIndex(source, i) ? getRestTypeOfSignature(source) : getTypeOfParameter(source.parameters[i]); @@ -6832,8 +6909,10 @@ namespace ts { return !!getPropertyOfType(type, "0"); } - function isStringLiteralType(type: Type) { - return type.flags & TypeFlags.StringLiteral; + function isStringLiteralUnionType(type: Type): boolean { + return type.flags & TypeFlags.StringLiteral ? true : + type.flags & TypeFlags.Union ? forEach((type).types, isStringLiteralUnionType) : + false; } /** @@ -6915,11 +6994,11 @@ namespace ts { const resolved = type; const members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral); const regularNew = createAnonymousType(resolved.symbol, - members, - resolved.callSignatures, - resolved.constructSignatures, - resolved.stringIndexInfo, - resolved.numberIndexInfo); + members, + resolved.callSignatures, + resolved.constructSignatures, + resolved.stringIndexInfo, + resolved.numberIndexInfo); regularNew.flags = resolved.flags & ~TypeFlags.FreshObjectLiteral; (type).regularType = regularNew; return regularNew; @@ -7698,6 +7777,35 @@ namespace ts { return node; } + function getTypeOfSwitchClause(clause: CaseClause | DefaultClause) { + if (clause.kind === SyntaxKind.CaseClause) { + const expr = (clause).expression; + return expr.kind === SyntaxKind.StringLiteral ? getStringLiteralTypeForText((expr).text) : checkExpression(expr); + } + return undefined; + } + + function getSwitchClauseTypes(switchStatement: SwitchStatement): Type[] { + const links = getNodeLinks(switchStatement); + if (!links.switchTypes) { + // If all case clauses specify expressions that have unit types, we return an array + // of those unit types. Otherwise we return an empty array. + const types = map(switchStatement.caseBlock.clauses, getTypeOfSwitchClause); + links.switchTypes = forEach(types, t => !t || t.flags & TypeFlags.StringLiteral) ? types : emptyArray; + } + return links.switchTypes; + } + + function eachTypeContainedIn(source: Type, types: Type[]) { + return source.flags & TypeFlags.Union ? !forEach((source).types, t => !contains(types, t)) : contains(types, source); + } + + function filterType(type: Type, f: (t: Type) => boolean): Type { + return type.flags & TypeFlags.Union ? + getUnionType(filter((type).types, f)) : + f(type) ? type : neverType; + } + function getFlowTypeOfReference(reference: Node, declaredType: Type, assumeInitialized: boolean, includeOuterFunctions: boolean) { let key: string; if (!reference.flowNode || assumeInitialized && !(declaredType.flags & TypeFlags.Narrowable)) { @@ -7718,7 +7826,7 @@ namespace ts { // 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 (let i = visitedFlowStart; i < visitedFlowCount; i++) { + for (let i = visitedFlowStart; i < visitedFlowCount; i++) { if (visitedFlowNodes[i] === flow) { return visitedFlowTypes[i]; } @@ -7735,6 +7843,9 @@ namespace ts { else if (flow.flags & FlowFlags.Condition) { type = getTypeAtFlowCondition(flow); } + else if (flow.flags & FlowFlags.SwitchClause) { + type = getTypeAtSwitchClause(flow); + } else if (flow.flags & FlowFlags.Label) { if ((flow).antecedents.length === 1) { flow = (flow).antecedents[0]; @@ -7818,6 +7929,11 @@ namespace ts { return type; } + function getTypeAtSwitchClause(flow: FlowSwitchClause) { + const type = getTypeAtFlowNode(flow.antecedent); + return narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd); + } + function getTypeAtFlowBranchLabel(flow: FlowLabel) { const antecedentTypes: Type[] = []; for (const antecedent of flow.antecedents) { @@ -7897,12 +8013,26 @@ namespace ts { case SyntaxKind.ExclamationEqualsToken: case SyntaxKind.EqualsEqualsEqualsToken: case SyntaxKind.ExclamationEqualsEqualsToken: - if (isNullOrUndefinedLiteral(expr.left) || isNullOrUndefinedLiteral(expr.right)) { - return narrowTypeByNullCheck(type, expr, assumeTrue); + const left = expr.left; + const operator = expr.operatorToken.kind; + const right = expr.right; + if (isNullOrUndefinedLiteral(right)) { + return narrowTypeByNullCheck(type, left, operator, right, assumeTrue); } - if (expr.left.kind === SyntaxKind.TypeOfExpression && expr.right.kind === SyntaxKind.StringLiteral || - expr.left.kind === SyntaxKind.StringLiteral && expr.right.kind === SyntaxKind.TypeOfExpression) { - return narrowTypeByTypeof(type, expr, assumeTrue); + if (isNullOrUndefinedLiteral(left)) { + return narrowTypeByNullCheck(type, right, operator, left, assumeTrue); + } + if (left.kind === SyntaxKind.TypeOfExpression && right.kind === SyntaxKind.StringLiteral) { + return narrowTypeByTypeof(type, left, operator, right, assumeTrue); + } + if (right.kind === SyntaxKind.TypeOfExpression && left.kind === SyntaxKind.StringLiteral) { + return narrowTypeByTypeof(type, right, operator, left, assumeTrue); + } + if (left.kind === SyntaxKind.PropertyAccessExpression) { + return narrowTypeByDiscriminant(type, left, operator, right, assumeTrue); + } + if (right.kind === SyntaxKind.PropertyAccessExpression) { + return narrowTypeByDiscriminant(type, right, operator, left, assumeTrue); } break; case SyntaxKind.InstanceOfKeyword: @@ -7913,41 +8043,35 @@ namespace ts { return type; } - function narrowTypeByNullCheck(type: Type, expr: BinaryExpression, assumeTrue: boolean): Type { - // We have '==', '!=', '===', or '!==' operator with 'null' or 'undefined' on one side - const operator = expr.operatorToken.kind; - const nullLike = isNullOrUndefinedLiteral(expr.left) ? expr.left : expr.right; - const narrowed = isNullOrUndefinedLiteral(expr.left) ? expr.right : expr.left; + function narrowTypeByNullCheck(type: Type, target: Expression, operator: SyntaxKind, literal: Expression, assumeTrue: boolean): Type { + // We have '==', '!=', '===', or '!==' operator with 'null' or 'undefined' as value if (operator === SyntaxKind.ExclamationEqualsToken || operator === SyntaxKind.ExclamationEqualsEqualsToken) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(narrowed))) { + if (!strictNullChecks || !isMatchingReference(reference, getReferenceFromExpression(target))) { return type; } const doubleEquals = operator === SyntaxKind.EqualsEqualsToken || operator === SyntaxKind.ExclamationEqualsToken; const facts = doubleEquals ? assumeTrue ? TypeFacts.EQUndefinedOrNull : TypeFacts.NEUndefinedOrNull : - nullLike.kind === SyntaxKind.NullKeyword ? + literal.kind === SyntaxKind.NullKeyword ? assumeTrue ? TypeFacts.EQNull : TypeFacts.NENull : assumeTrue ? TypeFacts.EQUndefined : TypeFacts.NEUndefined; return getTypeWithFacts(type, facts); } - function narrowTypeByTypeof(type: Type, expr: BinaryExpression, assumeTrue: boolean): Type { - // We have '==', '!=', '====', or !==' operator with 'typeof xxx' on the left - // and string literal on the right - const narrowed = getReferenceFromExpression(((expr.left.kind === SyntaxKind.TypeOfExpression ? expr.left : expr.right)).expression); - const literal = (expr.right.kind === SyntaxKind.StringLiteral ? expr.right : expr.left); - if (!isMatchingReference(reference, narrowed)) { + function narrowTypeByTypeof(type: Type, typeOfExpr: TypeOfExpression, operator: SyntaxKind, literal: LiteralExpression, assumeTrue: boolean): Type { + // We have '==', '!=', '====', or !==' operator with 'typeof xxx' and string literal operands + const target = getReferenceFromExpression(typeOfExpr.expression); + if (!isMatchingReference(reference, target)) { // 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, narrowed)) { + if (containsMatchingReference(reference, target)) { return declaredType; } return type; } - if (expr.operatorToken.kind === SyntaxKind.ExclamationEqualsToken || - expr.operatorToken.kind === SyntaxKind.ExclamationEqualsEqualsToken) { + if (operator === SyntaxKind.ExclamationEqualsToken || operator === SyntaxKind.ExclamationEqualsEqualsToken) { assumeTrue = !assumeTrue; } if (assumeTrue && !(type.flags & TypeFlags.Union)) { @@ -7965,6 +8089,58 @@ namespace ts { return getTypeWithFacts(type, facts); } + function narrowTypeByDiscriminant(type: Type, propAccess: PropertyAccessExpression, operator: SyntaxKind, value: Expression, assumeTrue: boolean): Type { + // We have '==', '!=', '===', or '!==' operator with property access as target + if (!isMatchingReference(reference, propAccess.expression)) { + return type; + } + const propName = propAccess.name.text; + const propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + const discriminantType = value.kind === SyntaxKind.StringLiteral ? getStringLiteralTypeForText((value).text) : checkExpression(value); + if (!isStringLiteralUnionType(discriminantType)) { + return type; + } + if (operator === SyntaxKind.ExclamationEqualsToken || operator === SyntaxKind.ExclamationEqualsEqualsToken) { + assumeTrue = !assumeTrue; + } + if (assumeTrue) { + return filterType(type, t => areTypesComparable(getTypeOfPropertyOfType(t, propName), discriminantType)); + } + if (discriminantType.flags & TypeFlags.StringLiteral) { + return filterType(type, t => getTypeOfPropertyOfType(t, propName) !== discriminantType); + } + return type; + } + + function narrowTypeBySwitchOnDiscriminant(type: Type, switchStatement: SwitchStatement, clauseStart: number, clauseEnd: number) { + // We have switch statement with property access expression + if (!isMatchingReference(reference, (switchStatement.expression).expression)) { + return type; + } + const propName = (switchStatement.expression).name.text; + const propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return type; + } + const switchTypes = getSwitchClauseTypes(switchStatement); + if (!switchTypes.length) { + return type; + } + const clauseTypes = switchTypes.slice(clauseStart, clauseEnd); + const hasDefaultClause = clauseStart === clauseEnd || contains(clauseTypes, undefined); + const caseTypes = hasDefaultClause ? filter(clauseTypes, t => !!t) : clauseTypes; + const discriminantType = caseTypes.length ? getUnionType(caseTypes) : undefined; + const caseType = discriminantType && filterType(type, t => isTypeComparableTo(discriminantType, getTypeOfPropertyOfType(t, propName))); + if (!hasDefaultClause) { + return caseType; + } + const defaultType = filterType(type, t => !eachTypeContainedIn(getTypeOfPropertyOfType(t, propName), switchTypes)); + return caseType ? getUnionType([caseType, defaultType]) : defaultType; + } + function narrowTypeByInstanceof(type: Type, expr: BinaryExpression, assumeTrue: boolean): Type { const left = getReferenceFromExpression(expr.left); if (!isMatchingReference(reference, left)) { @@ -8037,7 +8213,7 @@ namespace ts { const targetType = type.flags & TypeFlags.TypeParameter ? getApparentType(type) : type; return isTypeAssignableTo(candidate, targetType) ? candidate : isTypeAssignableTo(type, candidate) ? type : - getIntersectionType([type, candidate]); + getIntersectionType([type, candidate]); } function narrowTypeByTypePredicate(type: Type, callExpression: CallExpression, assumeTrue: boolean): Type { @@ -8182,22 +8358,41 @@ namespace ts { const localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); - // Due to the emit for class decorators, any reference to the class from inside of the class body - // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind - // behavior of class names in ES6. - if (languageVersion === ScriptTarget.ES6 - && localOrExportSymbol.flags & SymbolFlags.Class - && localOrExportSymbol.valueDeclaration.kind === SyntaxKind.ClassDeclaration - && nodeIsDecorated(localOrExportSymbol.valueDeclaration)) { - let container = getContainingClass(node); - while (container !== undefined) { - if (container === localOrExportSymbol.valueDeclaration && container.name !== node) { - getNodeLinks(container).flags |= NodeCheckFlags.DecoratedClassWithSelfReference; - getNodeLinks(node).flags |= NodeCheckFlags.SelfReferenceInDecoratedClass; - break; - } + if (localOrExportSymbol.flags & SymbolFlags.Class) { + const declaration = localOrExportSymbol.valueDeclaration; + // Due to the emit for class decorators, any reference to the class from inside of the class body + // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind + // behavior of class names in ES6. + if (languageVersion === ScriptTarget.ES6 + && declaration.kind === SyntaxKind.ClassDeclaration + && nodeIsDecorated(declaration)) { + let container = getContainingClass(node); + while (container !== undefined) { + if (container === declaration && container.name !== node) { + getNodeLinks(declaration).flags |= NodeCheckFlags.ClassWithConstructorReference; + getNodeLinks(node).flags |= NodeCheckFlags.ConstructorReferenceInClass; + break; + } - container = getContainingClass(container); + container = getContainingClass(container); + } + } + else if (declaration.kind === SyntaxKind.ClassExpression) { + // When we emit a class expression with static members that contain a reference + // to the constructor in the initializer, we will need to substitute that + // binding with an alias as the class name is not in scope. + let container = getThisContainer(node, /*includeArrowFunctions*/ false); + while (container !== undefined) { + if (container.parent === declaration) { + if (container.kind === SyntaxKind.PropertyDeclaration && hasModifier(container, ModifierFlags.Static)) { + getNodeLinks(declaration).flags |= NodeCheckFlags.ClassWithConstructorReference; + getNodeLinks(node).flags |= NodeCheckFlags.ConstructorReferenceInClass; + } + break; + } + + container = getThisContainer(container, /*includeArrowFunctions*/ false); + } } } @@ -8446,9 +8641,9 @@ namespace ts { getSpecialPropertyAssignmentKind(container.parent) === SpecialPropertyAssignmentKind.PrototypeProperty) { // Get the 'x' of 'x.prototype.y = f' (here, 'f' is 'container') const className = (((container.parent as BinaryExpression) // x.prototype.y = f - .left as PropertyAccessExpression) // x.prototype.y - .expression as PropertyAccessExpression) // x.prototype - .expression; // x + .left as PropertyAccessExpression) // x.prototype.y + .expression as PropertyAccessExpression) // x.prototype + .expression; // x const classSymbol = checkExpression(className).symbol; if (classSymbol && classSymbol.members && (classSymbol.flags & SymbolFlags.Function)) { return getInferredClassType(classSymbol); @@ -8458,9 +8653,10 @@ namespace ts { if (type) { return type; } - const signature = getSignatureFromDeclaration(container); - if (signature.thisType) { - return signature.thisType; + + const thisType = getThisTypeOfDeclaration(container); + if (thisType) { + return thisType; } } if (isClassLike(container.parent)) { @@ -8701,7 +8897,7 @@ namespace ts { if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== SyntaxKind.ArrowFunction) { const contextualSignature = getContextualSignature(func); if (contextualSignature) { - return contextualSignature.thisType; + return getThisTypeOfSignature(contextualSignature); } } @@ -8938,10 +9134,6 @@ namespace ts { return applyToContextualType(type, t => getIndexTypeOfStructuredType(t, kind)); } - function contextualTypeIsStringLiteralType(type: Type): boolean { - return !!(type.flags & TypeFlags.Union ? forEach((type).types, isStringLiteralType) : isStringLiteralType(type)); - } - // Return true if the given contextual type is a tuple-like type function contextualTypeIsTupleLikeType(type: Type): boolean { return !!(type.flags & TypeFlags.Union ? forEach((type).types, isTupleLikeType) : isTupleLikeType(type)); @@ -9504,8 +9696,9 @@ namespace ts { /** * Returns true iff React would emit this tag name as a string rather than an identifier or qualified name */ - function isJsxIntrinsicIdentifier(tagName: Identifier | QualifiedName) { - if (tagName.kind === SyntaxKind.QualifiedName) { + function isJsxIntrinsicIdentifier(tagName: JsxTagNameExpression) { + // TODO (yuisu): comment + if (tagName.kind === SyntaxKind.PropertyAccessExpression || tagName.kind === SyntaxKind.ThisKeyword) { return false; } else { @@ -9695,12 +9888,35 @@ namespace ts { elemType = checkExpression(node.tagName); } if (elemType.flags & TypeFlags.Union) { - const types = ( elemType).types; + const types = (elemType).types; return getUnionType(types.map(type => { return getResolvedJsxType(node, type, elemClassType); })); } + // If the elemType is a string type, we have to return anyType to prevent an error downstream as we will try to find construct or call signature of the type + if (elemType.flags & TypeFlags.String) { + return anyType; + } + else if (elemType.flags & TypeFlags.StringLiteral) { + // If the elemType is a stringLiteral type, we can then provide a check to make sure that the string literal type is one of the Jsx intrinsic element type + const intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements); + if (intrinsicElementsType !== unknownType) { + const stringLiteralTypeName = (elemType).text; + const intrinsicProp = getPropertyOfType(intrinsicElementsType, stringLiteralTypeName); + if (intrinsicProp) { + return getTypeOfSymbol(intrinsicProp); + } + const indexSignatureType = getIndexTypeOfType(intrinsicElementsType, IndexKind.String); + if (indexSignatureType) { + return indexSignatureType; + } + error(node, Diagnostics.Property_0_does_not_exist_on_type_1, stringLiteralTypeName, "JSX." + JsxNames.IntrinsicElements); + } + // If we need to report an error, we already done so here. So just return any to prevent any more error downstream + return anyType; + } + // Get the element instance type (the result of newing or invoking this tag) const elemInstanceType = getJsxElementInstanceType(node, elemType); @@ -10047,12 +10263,24 @@ namespace ts { } const prop = getPropertyOfType(apparentType, right.text); if (!prop) { - if (right.text) { + if (right.text && !checkAndReportErrorForExtendingInterface(node)) { error(right, Diagnostics.Property_0_does_not_exist_on_type_1, declarationNameToString(right), typeToString(type.flags & TypeFlags.ThisType ? apparentType : type)); } return unknownType; } + if (noUnusedIdentifiers && + (prop.flags & SymbolFlags.ClassMember) && + prop.valueDeclaration && (getModifierFlags(prop.valueDeclaration) & ModifierFlags.Private)) { + if (prop.flags & SymbolFlags.Instantiated) { + getSymbolLinks(prop).target.isReferenced = true; + + } + else { + prop.isReferenced = true; + } + } + getNodeLinks(node).resolvedSymbol = prop; if (prop.parent && prop.parent.flags & SymbolFlags.Class) { @@ -10509,10 +10737,11 @@ namespace ts { context.failedTypeParameterIndex = undefined; } - if (signature.thisType) { + const thisType = getThisTypeOfSignature(signature); + if (thisType) { const thisArgumentNode = getThisArgumentOfCall(node); const thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; - inferTypes(context, thisArgumentType, signature.thisType); + inferTypes(context, thisArgumentType, thisType); } // We perform two passes over the arguments. In the first pass we infer from all arguments, but use @@ -10588,8 +10817,8 @@ namespace ts { } function checkApplicableSignature(node: CallLikeExpression, args: Expression[], signature: Signature, relation: Map, excludeArgument: boolean[], reportErrors: boolean) { - - if (signature.thisType && signature.thisType !== voidType && node.kind !== SyntaxKind.NewExpression) { + const thisType = getThisTypeOfSignature(signature); + if (thisType && thisType !== voidType && node.kind !== SyntaxKind.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. @@ -10597,7 +10826,7 @@ namespace ts { const thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; const errorNode = reportErrors ? (thisArgumentNode || node) : undefined; const headMessage = 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)) { + if (!checkTypeRelatedTo(thisArgumentType, getThisTypeOfSignature(signature), relation, errorNode, headMessage)) { return false; } } @@ -11316,7 +11545,7 @@ namespace ts { if (getReturnTypeOfSignature(signature) !== voidType) { error(node, Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); } - if (signature.thisType === voidType) { + if (getThisTypeOfSignature(signature) === voidType) { error(node, Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void); } return signature; @@ -11472,7 +11701,7 @@ namespace ts { function getInferredClassType(symbol: Symbol) { const links = getSymbolLinks(symbol); if (!links.inferredClassType) { - links.inferredClassType = createAnonymousType(undefined, symbol.members, emptyArray, emptyArray, /*stringIndexType*/ undefined, /*numberIndexType*/ undefined); + links.inferredClassType = createAnonymousType(symbol, symbol.members, emptyArray, emptyArray, /*stringIndexType*/ undefined, /*numberIndexType*/ undefined); } return links.inferredClassType; } @@ -11533,7 +11762,10 @@ namespace ts { function checkAssertion(node: AssertionExpression) { const exprType = getRegularTypeOfObjectLiteral(checkExpression(node.expression)); + + checkSourceElement(node.type); const targetType = getTypeFromTypeNode(node.type); + if (produceDiagnostics && targetType !== unknownType) { const widenedType = getWidenedType(exprType); if (!isTypeComparableTo(targetType, widenedType)) { @@ -11600,7 +11832,7 @@ namespace ts { // 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)) { + parameter.valueDeclaration.name.kind === SyntaxKind.ArrayBindingPattern)) { links.type = getTypeFromBindingPattern(parameter.valueDeclaration.name); } assignBindingElementTypes(parameter.valueDeclaration); @@ -11660,6 +11892,16 @@ namespace ts { return emptyObjectType; } + function createPromiseReturnType(func: FunctionLikeDeclaration, promisedType: Type) { + const promiseType = createPromiseType(promisedType); + if (promiseType === emptyObjectType) { + error(func, Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + return unknownType; + } + + return promiseType; + } + function getReturnTypeFromBody(func: FunctionLikeDeclaration, contextualMapper?: TypeMapper): Type { const contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); if (!func.body) { @@ -11695,19 +11937,12 @@ namespace ts { else { types = checkAndAggregateReturnExpressionTypes(func, contextualMapper); if (!types) { - return neverType; + // For an async function, the return type will not be never, but rather a Promise for never. + return isAsync ? createPromiseReturnType(func, neverType) : neverType; } if (types.length === 0) { - if (isAsync) { - // For an async function, the return type will not be void, but rather a Promise for void. - const promiseType = createPromiseType(voidType); - if (promiseType === emptyObjectType) { - error(func, Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); - return unknownType; - } - return promiseType; - } - return voidType; + // For an async function, the return type will not be void, but rather a Promise for void. + return isAsync ? createPromiseReturnType(func, voidType) : voidType; } } // When yield/return statements are contextually typed we allow the return type to be a union type. @@ -11721,7 +11956,7 @@ namespace ts { else { error(func, Diagnostics.No_best_common_type_exists_among_return_expressions); // Defer to unioning the return types so we get a) downstream errors earlier and b) better Salsa experience - return getUnionType(types); + return isAsync ? createPromiseReturnType(func, getUnionType(types)) : getUnionType(types); } } @@ -11734,21 +11969,10 @@ namespace ts { } const widenedType = getWidenedType(type); - if (isAsync) { - // From within an async function you can return either a non-promise value or a promise. Any - // Promise/A+ compatible implementation will always assimilate any foreign promise, so the - // return type of the body is awaited type of the body, wrapped in a native Promise type. - const promiseType = createPromiseType(widenedType); - if (promiseType === emptyObjectType) { - error(func, Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); - return unknownType; - } - - return promiseType; - } - else { - return widenedType; - } + // From within an async function you can return either a non-promise value or a promise. Any + // Promise/A+ compatible implementation will always assimilate any foreign promise, so the + // return type of the body is awaited type of the body, wrapped in a native Promise type. + return isAsync ? createPromiseReturnType(func, widenedType) : widenedType; } function checkAndAggregateYieldOperandTypes(func: FunctionLikeDeclaration, contextualMapper: TypeMapper): Type[] { @@ -11773,10 +11997,42 @@ namespace ts { return aggregatedTypes; } + function isExhaustiveSwitchStatement(node: SwitchStatement): boolean { + const expr = node.expression; + if (!node.possiblyExhaustive || expr.kind !== SyntaxKind.PropertyAccessExpression) { + return false; + } + const type = checkExpression((expr).expression); + if (!(type.flags & TypeFlags.Union)) { + return false; + } + const propName = (expr).name.text; + const propType = getTypeOfPropertyOfType(type, propName); + if (!propType || !isStringLiteralUnionType(propType)) { + return false; + } + const switchTypes = getSwitchClauseTypes(node); + if (!switchTypes.length) { + return false; + } + return eachTypeContainedIn(propType, switchTypes); + } + + function functionHasImplicitReturn(func: FunctionLikeDeclaration) { + if (!(func.flags & NodeFlags.HasImplicitReturn)) { + return false; + } + const lastStatement = lastOrUndefined((func.body).statements); + if (lastStatement && lastStatement.kind === SyntaxKind.SwitchStatement && isExhaustiveSwitchStatement(lastStatement)) { + return false; + } + return true; + } + function checkAndAggregateReturnExpressionTypes(func: FunctionLikeDeclaration, contextualMapper: TypeMapper): Type[] { const isAsync = isAsyncFunctionLike(func); const aggregatedTypes: Type[] = []; - let hasReturnWithNoExpression = !!(func.flags & NodeFlags.HasImplicitReturn); + let hasReturnWithNoExpression = functionHasImplicitReturn(func); let hasReturnOfTypeNever = false; forEachReturnStatement(func.body, returnStatement => { const expr = returnStatement.expression; @@ -11833,7 +12089,7 @@ namespace 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 (nodeIsMissing(func.body) || func.body.kind !== SyntaxKind.Block || !(func.flags & NodeFlags.HasImplicitReturn)) { + if (nodeIsMissing(func.body) || func.body.kind !== SyntaxKind.Block || !functionHasImplicitReturn(func)) { return; } @@ -11967,6 +12223,7 @@ namespace ts { } } } + registerForUnusedIdentifiersCheck(node); } } @@ -11984,7 +12241,9 @@ namespace ts { // Variables declared with 'const' // Get accessors without matching set accessors // Enum members - return symbol.flags & SymbolFlags.Property && (getDeclarationModifierFlagsFromSymbol(symbol) & ModifierFlags.Readonly) !== 0 || + // Unions and intersections of the above (unions and intersections eagerly set isReadonly on creation) + return symbol.isReadonly || + symbol.flags & SymbolFlags.Property && (getDeclarationModifierFlagsFromSymbol(symbol) & ModifierFlags.Readonly) !== 0 || symbol.flags & SymbolFlags.Variable && (getDeclarationNodeFlagsFromSymbol(symbol) & NodeFlags.Const) !== 0 || symbol.flags & SymbolFlags.Accessor && !(symbol.flags & SymbolFlags.SetAccessor) || (symbol.flags & SymbolFlags.EnumMember) !== 0; @@ -12313,6 +12572,12 @@ namespace ts { if (exprOrAssignment.kind === SyntaxKind.ShorthandPropertyAssignment) { const prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { + // In strict null checking mode, if a default value of a non-undefined type is specified, remove + // undefined from the final type. + if (strictNullChecks && + !(getCombinedTypeFlags(checkExpression(prop.objectAssignmentInitializer)) & TypeFlags.Undefined)) { + sourceType = getTypeWithFacts(sourceType, TypeFacts.NEUndefined); + } checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); } target = (exprOrAssignment).name; @@ -12611,7 +12876,7 @@ namespace ts { function checkStringLiteralExpression(node: StringLiteral): Type { const contextualType = getContextualType(node); - if (contextualType && contextualTypeIsStringLiteralType(contextualType)) { + if (contextualType && isStringLiteralUnionType(contextualType)) { return getStringLiteralTypeForText(node.text); } @@ -13037,6 +13302,9 @@ namespace ts { checkAsyncFunctionReturnType(node); } } + if (!(node).body) { + checkUnusedTypeParameters(node); + } } } @@ -13054,8 +13322,8 @@ namespace ts { } } else { - const static = forEach(member.modifiers, m => m.kind === SyntaxKind.StaticKeyword); - const names = static ? staticNames : instanceNames; + const isStatic = forEach(member.modifiers, m => m.kind === SyntaxKind.StaticKeyword); + const names = isStatic ? staticNames : instanceNames; const memberName = member.name && getPropertyNameForPropertyNameNode(member.name); if (memberName) { @@ -13189,6 +13457,7 @@ namespace ts { checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node); checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); const symbol = getSymbolOfNode(node); const firstDeclaration = getDeclarationOfKind(symbol, node.kind); @@ -13327,13 +13596,14 @@ namespace ts { // TypeScript 1.0 spec (April 2014): 4.5 // If both accessors include type annotations, the specified types must be identical. checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorType, Diagnostics.get_and_set_accessor_must_have_the_same_type); - checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorThisType, Diagnostics.get_and_set_accessor_must_have_the_same_this_type); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getThisTypeOfDeclaration, Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } if (node.parent.kind !== SyntaxKind.ObjectLiteralExpression) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } else { checkNodeDeferred(node); @@ -13350,6 +13620,7 @@ namespace ts { function checkAccessorDeferred(node: AccessorDeclaration) { checkSourceElement(node.body); + registerForUnusedIdentifiersCheck(node); } function checkMissingDeclaration(node: Node) { @@ -13381,13 +13652,15 @@ namespace ts { function checkTypeReferenceNode(node: TypeReferenceNode | ExpressionWithTypeArguments) { checkGrammarTypeArguments(node, node.typeArguments); const type = getTypeFromTypeReference(node); - if (type !== unknownType && node.typeArguments) { - // Do type argument local checks only if referenced type is successfully resolved - forEach(node.typeArguments, checkSourceElement); - if (produceDiagnostics) { - const symbol = getNodeLinks(node).resolvedSymbol; - const typeParameters = symbol.flags & SymbolFlags.TypeAlias ? getSymbolLinks(symbol).typeParameters : (type).target.localTypeParameters; - checkTypeArgumentConstraints(typeParameters, node.typeArguments); + if (type !== unknownType) { + if (node.typeArguments) { + // Do type argument local checks only if referenced type is successfully resolved + forEach(node.typeArguments, checkSourceElement); + if (produceDiagnostics) { + const symbol = getNodeLinks(node).resolvedSymbol; + const typeParameters = symbol.flags & SymbolFlags.TypeAlias ? getSymbolLinks(symbol).typeParameters : (type).target.localTypeParameters; + checkTypeArgumentConstraints(typeParameters, node.typeArguments); + } } } } @@ -13568,9 +13841,6 @@ namespace ts { } } - // when checking exported function declarations across modules check only duplicate implementations - // names and consistency of modifiers are verified when we check local symbol - const isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & SymbolFlags.Module; let duplicateFunctionDeclaration = false; let multipleConstructorImplementation = false; for (const current of declarations) { @@ -13603,7 +13873,7 @@ namespace ts { duplicateFunctionDeclaration = true; } } - else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { + else if (previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { reportImplementationExpectedError(previousDeclaration); } @@ -13637,8 +13907,8 @@ namespace ts { } // Abstract methods can't have an implementation -- in particular, they don't need one. - if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && - !hasModifier(lastSeenNonAmbientDeclaration, ModifierFlags.Abstract) && !lastSeenNonAmbientDeclaration.questionToken) { + if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && + !(getModifierFlags(lastSeenNonAmbientDeclaration) & ModifierFlags.Abstract) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } @@ -13748,7 +14018,7 @@ namespace ts { function checkNonThenableType(type: Type, location?: Node, message?: DiagnosticMessage) { type = getWidenedType(type); - if (!isTypeAny(type) && isTypeAssignableTo(type, getGlobalThenableType())) { + if (!isTypeAny(type) && !isTypeNever(type) && isTypeAssignableTo(type, getGlobalThenableType())) { if (location) { if (!message) { message = Diagnostics.Operand_for_await_does_not_have_a_valid_callable_then_member; @@ -13779,12 +14049,15 @@ namespace ts { // } // - if (promise.flags & TypeFlags.Any) { + if (isTypeAny(promise)) { return undefined; } - if ((promise.flags & TypeFlags.Reference) && (promise).target === tryGetGlobalPromiseType()) { - return (promise).typeArguments[0]; + if (promise.flags & TypeFlags.Reference) { + if ((promise).target === tryGetGlobalPromiseType() + || (promise).target === getGlobalPromiseLikeType()) { + return (promise).typeArguments[0]; + } } const globalPromiseLikeType = getInstantiatedGlobalPromiseLikeType(); @@ -13793,17 +14066,17 @@ namespace ts { } const thenFunction = getTypeOfPropertyOfType(promise, "then"); - if (thenFunction && (thenFunction.flags & TypeFlags.Any)) { + if (!thenFunction || isTypeAny(thenFunction)) { return undefined; } - const thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, SignatureKind.Call) : emptyArray; + const thenSignatures = getSignaturesOfType(thenFunction, SignatureKind.Call); if (thenSignatures.length === 0) { return undefined; } const onfulfilledParameterType = getTypeWithFacts(getUnionType(map(thenSignatures, getTypeOfFirstParameterOfSignature)), TypeFacts.NEUndefined); - if (onfulfilledParameterType.flags & TypeFlags.Any) { + if (isTypeAny(onfulfilledParameterType)) { return undefined; } @@ -13812,12 +14085,11 @@ namespace ts { return undefined; } - const valueParameterType = getUnionType(map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); - return valueParameterType; + return getUnionType(map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); } function getTypeOfFirstParameterOfSignature(signature: Signature) { - return getTypeAtPosition(signature, 0); + return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : neverType; } /** @@ -14231,6 +14503,7 @@ namespace ts { } checkSourceElement(node.body); + if (!node.asteriskToken) { const returnOrPromisedType = node.type && (isAsync ? checkAsyncFunctionReturnType(node) : getTypeFromTypeNode(node.type)); checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType); @@ -14250,6 +14523,144 @@ namespace ts { getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } } + + registerForUnusedIdentifiersCheck(node); + } + + function registerForUnusedIdentifiersCheck(node: Node) { + if (deferredUnusedIdentifierNodes) { + deferredUnusedIdentifierNodes.push(node); + } + } + + function checkUnusedIdentifiers() { + if (deferredUnusedIdentifierNodes) { + for (const node of deferredUnusedIdentifierNodes) { + switch (node.kind) { + case SyntaxKind.SourceFile: + case SyntaxKind.ModuleDeclaration: + checkUnusedModuleMembers(node); + break; + case SyntaxKind.ClassDeclaration: + case SyntaxKind.ClassExpression: + checkUnusedClassMembers(node); + checkUnusedTypeParameters(node); + break; + case SyntaxKind.InterfaceDeclaration: + checkUnusedTypeParameters(node); + break; + case SyntaxKind.Block: + case SyntaxKind.CaseBlock: + case SyntaxKind.ForStatement: + case SyntaxKind.ForInStatement: + case SyntaxKind.ForOfStatement: + checkUnusedLocalsAndParameters(node); + break; + case SyntaxKind.Constructor: + case SyntaxKind.FunctionExpression: + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.ArrowFunction: + case SyntaxKind.MethodDeclaration: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + if ((node).body) { + checkUnusedLocalsAndParameters(node); + } + checkUnusedTypeParameters(node); + break; + case SyntaxKind.MethodSignature: + case SyntaxKind.CallSignature: + case SyntaxKind.ConstructSignature: + case SyntaxKind.IndexSignature: + case SyntaxKind.FunctionType: + case SyntaxKind.ConstructorType: + checkUnusedTypeParameters(node); + break; + }; + } + } + } + + function checkUnusedLocalsAndParameters(node: Node): void { + if (node.parent.kind !== SyntaxKind.InterfaceDeclaration && noUnusedIdentifiers && !isInAmbientContext(node)) { + for (const key in node.locals) { + if (hasProperty(node.locals, key)) { + const local = node.locals[key]; + if (!local.isReferenced) { + if (local.valueDeclaration && local.valueDeclaration.kind === SyntaxKind.Parameter) { + const parameter = local.valueDeclaration; + if (compilerOptions.noUnusedParameters && + !isParameterPropertyDeclaration(parameter) && + !parameterIsThisKeyword(parameter) && + !parameterNameStartsWithUnderscore(parameter)) { + error(local.valueDeclaration.name, Diagnostics._0_is_declared_but_never_used, local.name); + } + } + else if (compilerOptions.noUnusedLocals) { + forEach(local.declarations, d => error(d.name || d, Diagnostics._0_is_declared_but_never_used, local.name)); + } + } + } + } + } + } + + function parameterIsThisKeyword(parameter: ParameterDeclaration) { + return parameter.name && (parameter.name).originalKeywordKind === SyntaxKind.ThisKeyword; + } + + function parameterNameStartsWithUnderscore(parameter: ParameterDeclaration) { + return parameter.name && parameter.name.kind === SyntaxKind.Identifier && (parameter.name).text.charCodeAt(0) === CharacterCodes._; + } + + function checkUnusedClassMembers(node: ClassDeclaration | ClassExpression): void { + if (compilerOptions.noUnusedLocals && !isInAmbientContext(node)) { + if (node.members) { + for (const member of node.members) { + if (member.kind === SyntaxKind.MethodDeclaration || member.kind === SyntaxKind.PropertyDeclaration) { + if (!member.symbol.isReferenced && getModifierFlags(member) & ModifierFlags.Private) { + error(member.name, Diagnostics._0_is_declared_but_never_used, member.symbol.name); + } + } + else if (member.kind === SyntaxKind.Constructor) { + for (const parameter of (member).parameters) { + if (!parameter.symbol.isReferenced && getModifierFlags(parameter) & ModifierFlags.Private) { + error(parameter.name, Diagnostics._0_is_declared_but_never_used, parameter.symbol.name); + } + } + } + } + } + } + } + + function checkUnusedTypeParameters(node: ClassDeclaration | ClassExpression | FunctionDeclaration | MethodDeclaration | FunctionExpression | ArrowFunction | ConstructorDeclaration | SignatureDeclaration | InterfaceDeclaration) { + if (compilerOptions.noUnusedLocals && !isInAmbientContext(node)) { + if (node.typeParameters) { + for (const typeParameter of node.typeParameters) { + if (!typeParameter.symbol.isReferenced) { + error(typeParameter.name, Diagnostics._0_is_declared_but_never_used, typeParameter.symbol.name); + } + } + } + } + } + + function checkUnusedModuleMembers(node: ModuleDeclaration | SourceFile): void { + if (compilerOptions.noUnusedLocals && !isInAmbientContext(node)) { + for (const key in node.locals) { + if (hasProperty(node.locals, key)) { + const local = node.locals[key]; + if (!local.isReferenced && !local.exportSymbol) { + for (const declaration of local.declarations) { + if (!isAmbientModule(declaration)) { + error(declaration.name, Diagnostics._0_is_declared_but_never_used, local.name); + } + } + } + } + } + } } function checkBlock(node: Block) { @@ -14258,6 +14669,9 @@ namespace ts { checkGrammarStatementInAmbientContext(node); } forEach(node.statements, checkSourceElement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkCollisionWithArgumentsInGeneratedCode(node: SignatureDeclaration) { @@ -14722,6 +15136,9 @@ namespace ts { if (node.condition) checkExpression(node.condition); if (node.incrementor) checkExpression(node.incrementor); checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForOfStatement(node: ForOfStatement): void { @@ -14762,6 +15179,9 @@ namespace ts { } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInStatement(node: ForInStatement) { @@ -14809,6 +15229,9 @@ namespace ts { } checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } } function checkForInOrForOfVariableDeclaration(iterationStatement: ForInStatement | ForOfStatement): void { @@ -15073,7 +15496,7 @@ namespace ts { function isUnwrappedReturnTypeVoidOrAny(func: FunctionLikeDeclaration, returnType: Type): boolean { const unwrappedReturnType = isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; - return maybeTypeOfKind(unwrappedReturnType, TypeFlags.Void | TypeFlags.Any); + return unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, TypeFlags.Void | TypeFlags.Any); } function checkReturnStatement(node: ReturnStatement) { @@ -15181,6 +15604,9 @@ namespace ts { } forEach(clause.statements, checkSourceElement); }); + if (node.caseBlock.locals) { + registerForUnusedIdentifiersCheck(node.caseBlock); + } } function checkLabeledStatement(node: LabeledStatement) { @@ -15401,6 +15827,7 @@ namespace ts { function checkClassExpressionDeferred(node: ClassExpression) { forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); } function checkClassDeclaration(node: ClassDeclaration) { @@ -15409,6 +15836,8 @@ namespace ts { } checkClassLikeDeclaration(node); forEach(node.members, checkSourceElement); + + registerForUnusedIdentifiersCheck(node); } function checkClassLikeDeclaration(node: ClassLikeDeclaration) { @@ -15718,6 +16147,7 @@ namespace ts { if (produceDiagnostics) { checkTypeForDuplicateIndexSignatures(node); + checkUnusedTypeParameters(node); } } @@ -16114,6 +16544,9 @@ namespace ts { if (node.body) { checkSourceElement(node.body); + if (!isGlobalScopeAugmentation(node)) { + registerForUnusedIdentifiersCheck(node); + } } } @@ -16635,9 +17068,22 @@ namespace ts { potentialThisCollisions.length = 0; deferredNodes = []; + deferredUnusedIdentifierNodes = produceDiagnostics && noUnusedIdentifiers ? [] : undefined; + forEach(node.statements, checkSourceElement); + checkDeferredNodes(); + + if (isExternalModule(node)) { + registerForUnusedIdentifiersCheck(node); + } + + if (!node.isDeclarationFile) { + checkUnusedIdentifiers(); + } + deferredNodes = undefined; + deferredUnusedIdentifierNodes = undefined; if (isExternalOrCommonJsModule(node)) { checkExternalModuleExports(node); @@ -17008,6 +17454,15 @@ namespace ts { return getSymbolOfEntityNameOrPropertyAccessExpression(node); case SyntaxKind.ThisKeyword: + const container = getThisContainer(node, /*includeArrowFunctions*/ false); + if (isFunctionLike(container)) { + const sig = getSignatureFromDeclaration(container); + if (sig.thisParameter) { + return sig.thisParameter; + } + } + // fallthrough + case SyntaxKind.SuperKeyword: const type = isPartOfExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; @@ -17296,7 +17751,8 @@ namespace ts { const parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { if (parentSymbol.flags & SymbolFlags.ValueModule && parentSymbol.valueDeclaration.kind === SyntaxKind.SourceFile) { - return parentSymbol.valueDeclaration; + // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined. + return parentSymbol.valueDeclaration === getSourceFileOfNode(node) ? parentSymbol.valueDeclaration : undefined; } for (let n = node.parent; n; n = n.parent) { if (isModuleOrEnumDeclaration(n) && getSymbolOfNode(n) === parentSymbol) { @@ -18200,7 +18656,10 @@ namespace ts { return grammarErrorOnNode(lastDeclare, Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); } else if (node.kind === SyntaxKind.Parameter && (flags & ModifierFlags.ParameterPropertyModifier) && isBindingPattern((node).name)) { - return grammarErrorOnNode(node, Diagnostics.A_parameter_property_may_not_be_a_binding_pattern); + return grammarErrorOnNode(node, Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern); + } + else if (node.kind === SyntaxKind.Parameter && (flags & ModifierFlags.ParameterPropertyModifier) && (node).dotDotDotToken) { + return grammarErrorOnNode(node, Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter); } if (flags & ModifierFlags.Async) { return checkGrammarAsyncModifier(node, lastAsync); @@ -18679,7 +19138,7 @@ namespace ts { return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === SyntaxKind.GetAccessor ? 0 : 1); } - function getAccessorThisParameter(accessor: AccessorDeclaration) { + function getAccessorThisParameter(accessor: AccessorDeclaration): ParameterDeclaration { if (accessor.parameters.length === (accessor.kind === SyntaxKind.GetAccessor ? 1 : 2) && accessor.parameters[0].name.kind === SyntaxKind.Identifier && (accessor.parameters[0].name).originalKeywordKind === SyntaxKind.ThisKeyword) { diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index ec1c89f3270..1c46b6afb05 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -137,6 +137,16 @@ namespace ts { type: "boolean", description: Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type, }, + { + name: "noUnusedLocals", + type: "boolean", + description: Diagnostics.Report_Errors_on_Unused_Locals, + }, + { + name: "noUnusedParameters", + type: "boolean", + description: Diagnostics.Report_Errors_on_Unused_Parameters + }, { name: "noLib", type: "boolean", @@ -331,16 +341,6 @@ namespace ts { isFilePath: true } }, - { - name: "typesSearchPaths", - type: "list", - isTSConfigOnly: true, - element: { - name: "typesSearchPaths", - type: "string", - isFilePath: true - } - }, { name: "typeRoots", type: "list", @@ -379,6 +379,11 @@ namespace ts { type: "boolean", description: Diagnostics.Do_not_emit_use_strict_directives_in_module_output }, + { + name: "maxNodeModuleJsDepth", + type: "number", + description: Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files + }, { name: "listEmittedFiles", type: "boolean" @@ -417,6 +422,10 @@ namespace ts { }, description: Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon }, + { + name: "disableSizeLimit", + type: "boolean" + }, { name: "strictNullChecks", type: "boolean", @@ -692,7 +701,7 @@ namespace ts { // Skip over any minified JavaScript files (ending in ".min.js") // Skip over dotted files and folders as well - const IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; + const ignoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; /** * Parse the contents of a config file (tsconfig.json). * @param json The contents of the config file to parse @@ -708,78 +717,66 @@ namespace ts { options.configFilePath = configFileName; - const fileNames = getFileNames(errors); + const { fileNames, wildcardDirectories } = getFileNames(errors); return { options, fileNames, typingOptions, raw: json, - errors + errors, + wildcardDirectories }; - function getFileNames(errors: Diagnostic[]): string[] { - let fileNames: string[] = []; + function getFileNames(errors: Diagnostic[]): ExpandResult { + let fileNames: string[]; if (hasProperty(json, "files")) { if (isArray(json["files"])) { - fileNames = map(json["files"], s => combinePaths(basePath, s)); + fileNames = json["files"]; } else { errors.push(createCompilerDiagnostic(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array")); } } - else { - const filesSeen: Map = {}; - let exclude: string[] = []; - if (isArray(json["exclude"])) { - exclude = json["exclude"]; + let includeSpecs: string[]; + if (hasProperty(json, "include")) { + if (isArray(json["include"])) { + includeSpecs = json["include"]; } else { - // by default exclude node_modules, and any specificied output directory - exclude = ["node_modules", "bower_components", "jspm_packages"]; - } - const outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } - exclude = map(exclude, e => getNormalizedAbsolutePath(e, basePath)); - - const supportedExtensions = getSupportedExtensions(options); - Debug.assert(indexOf(supportedExtensions, ".ts") < indexOf(supportedExtensions, ".d.ts"), "Changed priority of extensions to pick"); - - // Get files of supported extensions in their order of resolution - for (const extension of supportedExtensions) { - const filesInDirWithExtension = host.readDirectory(basePath, extension, exclude); - for (const fileName of filesInDirWithExtension) { - // .ts extension would read the .d.ts extension files too but since .d.ts is lower priority extension, - // lets pick them when its turn comes up - if (extension === ".ts" && fileExtensionIs(fileName, ".d.ts")) { - continue; - } - - 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) - // do not include this file if we included .ts or .tsx file with same base name as it could be output of the earlier compilation - if (extension === ".d.ts" || (options.allowJs && contains(supportedJavascriptExtensions, extension))) { - const baseName = fileName.substr(0, fileName.length - extension.length); - if (hasProperty(filesSeen, baseName + ".ts") || hasProperty(filesSeen, baseName + ".tsx")) { - continue; - } - } - - filesSeen[fileName] = true; - fileNames.push(fileName); - } + errors.push(createCompilerDiagnostic(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array")); } } - if (hasProperty(json, "excludes") && !hasProperty(json, "exclude")) { + + let excludeSpecs: string[]; + if (hasProperty(json, "exclude")) { + if (isArray(json["exclude"])) { + excludeSpecs = json["exclude"]; + } + else { + errors.push(createCompilerDiagnostic(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array")); + } + } + else if (hasProperty(json, "excludes")) { errors.push(createCompilerDiagnostic(Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); } - return fileNames; + else { + // By default, exclude common package folders + excludeSpecs = ["node_modules", "bower_components", "jspm_packages"]; + } + + // Always exclude the output directory unless explicitly included + const outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + excludeSpecs.push(outDir); + } + + if (fileNames === undefined && includeSpecs === undefined) { + includeSpecs = ["**/*"]; + } + + return matchFileNames(fileNames, includeSpecs, excludeSpecs, basePath, options, host, errors); } } @@ -875,4 +872,314 @@ namespace ts { function trimString(s: string) { return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, ""); } + + /** + * Tests for a path that ends in a recursive directory wildcard. + * Matches **, \**, **\, and \**\, but not a**b. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * (^|\/) # matches either the beginning of the string or a directory separator. + * \*\* # matches the recursive directory wildcard "**". + * \/?$ # matches an optional trailing directory separator at the end of the string. + */ + const invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/; + + /** + * Tests for a path with multiple recursive directory wildcards. + * Matches **\** and **\a\**, but not **\a**b. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * (^|\/) # matches either the beginning of the string or a directory separator. + * \*\*\/ # matches a recursive directory wildcard "**" followed by a directory separator. + * (.*\/)? # optionally matches any number of characters followed by a directory separator. + * \*\* # matches a recursive directory wildcard "**" + * ($|\/) # matches either the end of the string or a directory separator. + */ + const invalidMultipleRecursionPatterns = /(^|\/)\*\*\/(.*\/)?\*\*($|\/)/; + + /** + * Tests for a path where .. appears after a recursive directory wildcard. + * Matches **\..\*, **\a\..\*, and **\.., but not ..\**\* + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * (^|\/) # matches either the beginning of the string or a directory separator. + * \*\*\/ # matches a recursive directory wildcard "**" followed by a directory separator. + * (.*\/)? # optionally matches any number of characters followed by a directory separator. + * \.\. # matches a parent directory path component ".." + * ($|\/) # matches either the end of the string or a directory separator. + */ + const invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/; + + /** + * Tests for a path containing a wildcard character in a directory component of the path. + * Matches \*\, \?\, and \a*b\, but not \a\ or \a\*. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * \/ # matches a directory separator. + * [^/]*? # matches any number of characters excluding directory separators (non-greedy). + * [*?] # matches either a wildcard character (* or ?) + * [^/]* # matches any number of characters excluding directory separators (greedy). + * \/ # matches a directory separator. + */ + const watchRecursivePattern = /\/[^/]*?[*?][^/]*\//; + + /** + * Matches the portion of a wildcard path that does not contain wildcards. + * Matches \a of \a\*, or \a\b\c of \a\b\c\?\d. + * + * NOTE: used \ in place of / above to avoid issues with multiline comments. + * + * Breakdown: + * ^ # matches the beginning of the string + * [^*?]* # matches any number of non-wildcard characters + * (?=\/[^/]*[*?]) # lookahead that matches a directory separator followed by + * # a path component that contains at least one wildcard character (* or ?). + */ + const wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; + + /** + * Expands an array of file specifications. + * + * @param fileNames The literal file names to include. + * @param include The wildcard file specifications to include. + * @param exclude The wildcard file specifications to exclude. + * @param basePath The base path for any relative file specifications. + * @param options Compiler options. + * @param host The host used to resolve files and directories. + * @param errors An array for diagnostic reporting. + */ + function matchFileNames(fileNames: string[], include: string[], exclude: string[], basePath: string, options: CompilerOptions, host: ParseConfigHost, errors: Diagnostic[]): ExpandResult { + basePath = normalizePath(basePath); + + // The exclude spec list is converted into a regular expression, which allows us to quickly + // test whether a file or directory should be excluded before recursively traversing the + // file system. + const keyMapper = host.useCaseSensitiveFileNames ? caseSensitiveKeyMapper : caseInsensitiveKeyMapper; + + // Literal file names (provided via the "files" array in tsconfig.json) are stored in a + // file map with a possibly case insensitive key. We use this map later when when including + // wildcard paths. + const literalFileMap: Map = {}; + + // Wildcard paths (provided via the "includes" array in tsconfig.json) are stored in a + // file map with a possibly case insensitive key. We use this map to store paths matched + // via wildcard, and to handle extension priority. + const wildcardFileMap: Map = {}; + + if (include) { + include = validateSpecs(include, errors, /*allowTrailingRecursion*/ false); + } + + if (exclude) { + exclude = validateSpecs(exclude, errors, /*allowTrailingRecursion*/ true); + } + + // Wildcard directories (provided as part of a wildcard path) are stored in a + // file map that marks whether it was a regular wildcard match (with a `*` or `?` token), + // or a recursive directory. This information is used by filesystem watchers to monitor for + // new entries in these paths. + const wildcardDirectories: Map = getWildcardDirectories(include, exclude, basePath, host.useCaseSensitiveFileNames); + + // Rather than requery this for each file and filespec, we query the supported extensions + // once and store it on the expansion context. + const supportedExtensions = getSupportedExtensions(options); + + // Literal files are always included verbatim. An "include" or "exclude" specification cannot + // remove a literal file. + if (fileNames) { + for (const fileName of fileNames) { + const file = combinePaths(basePath, fileName); + literalFileMap[keyMapper(file)] = file; + } + } + + if (include && include.length > 0) { + for (const file of host.readDirectory(basePath, supportedExtensions, exclude, include)) { + // If we have already included a literal or wildcard path with a + // higher priority extension, we should skip this file. + // + // This handles cases where we may encounter both .ts and + // .d.ts (or .js if "allowJs" is enabled) in the same + // directory when they are compilation outputs. + if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) { + continue; + } + + if (ignoreFileNamePattern.test(file)) { + continue; + } + + // We may have included a wildcard path with a lower priority + // extension due to the user-defined order of entries in the + // "include" array. If there is a lower priority extension in the + // same directory, we should remove it. + removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper); + + const key = keyMapper(file); + if (!hasProperty(literalFileMap, key) && !hasProperty(wildcardFileMap, key)) { + wildcardFileMap[key] = file; + } + } + } + + const literalFiles = reduceProperties(literalFileMap, addFileToOutput, []); + const wildcardFiles = reduceProperties(wildcardFileMap, addFileToOutput, []); + wildcardFiles.sort(host.useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive); + return { + fileNames: literalFiles.concat(wildcardFiles), + wildcardDirectories + }; + } + + function validateSpecs(specs: string[], errors: Diagnostic[], allowTrailingRecursion: boolean) { + const validSpecs: string[] = []; + for (const spec of specs) { + if (!allowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) { + errors.push(createCompilerDiagnostic(Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidMultipleRecursionPatterns.test(spec)) { + errors.push(createCompilerDiagnostic(Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0, spec)); + } + else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) { + errors.push(createCompilerDiagnostic(Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec)); + } + else { + validSpecs.push(spec); + } + } + + return validSpecs; + } + + /** + * Gets directories in a set of include patterns that should be watched for changes. + */ + function getWildcardDirectories(include: string[], exclude: string[], path: string, useCaseSensitiveFileNames: boolean) { + // We watch a directory recursively if it contains a wildcard anywhere in a directory segment + // of the pattern: + // + // /a/b/**/d - Watch /a/b recursively to catch changes to any d in any subfolder recursively + // /a/b/*/d - Watch /a/b recursively to catch any d in any immediate subfolder, even if a new subfolder is added + // + // We watch a directory without recursion if it contains a wildcard in the file segment of + // the pattern: + // + // /a/b/* - Watch /a/b directly to catch any new file + // /a/b/a?z - Watch /a/b directly to catch any new file matching a?z + const rawExcludeRegex = getRegularExpressionForWildcard(exclude, path, "exclude"); + const excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames ? "" : "i"); + const wildcardDirectories: Map = {}; + if (include !== undefined) { + const recursiveKeys: string[] = []; + for (const file of include) { + const name = normalizePath(combinePaths(path, file)); + if (excludeRegex && excludeRegex.test(name)) { + continue; + } + + const match = wildcardDirectoryPattern.exec(name); + if (match) { + const key = useCaseSensitiveFileNames ? match[0] : match[0].toLowerCase(); + const flags = watchRecursivePattern.test(name) ? WatchDirectoryFlags.Recursive : WatchDirectoryFlags.None; + const existingFlags = getProperty(wildcardDirectories, key); + if (existingFlags === undefined || existingFlags < flags) { + wildcardDirectories[key] = flags; + if (flags === WatchDirectoryFlags.Recursive) { + recursiveKeys.push(key); + } + } + } + } + + // Remove any subpaths under an existing recursively watched directory. + for (const key in wildcardDirectories) { + if (hasProperty(wildcardDirectories, key)) { + for (const recursiveKey of recursiveKeys) { + if (key !== recursiveKey && containsPath(recursiveKey, key, path, !useCaseSensitiveFileNames)) { + delete wildcardDirectories[key]; + } + } + } + } + } + + return wildcardDirectories; + } + + /** + * Determines whether a literal or wildcard file has already been included that has a higher + * extension priority. + * + * @param file The path to the file. + * @param extensionPriority The priority of the extension. + * @param context The expansion context. + */ + function hasFileWithHigherPriorityExtension(file: string, literalFiles: Map, wildcardFiles: Map, extensions: string[], keyMapper: (value: string) => string) { + const extensionPriority = getExtensionPriority(file, extensions); + const adjustedExtensionPriority = adjustExtensionPriority(extensionPriority); + for (let i = ExtensionPriority.Highest; i < adjustedExtensionPriority; i++) { + const higherPriorityExtension = extensions[i]; + const higherPriorityPath = keyMapper(changeExtension(file, higherPriorityExtension)); + if (hasProperty(literalFiles, higherPriorityPath) || hasProperty(wildcardFiles, higherPriorityPath)) { + return true; + } + } + + return false; + } + + /** + * Removes files included via wildcard expansion with a lower extension priority that have + * already been included. + * + * @param file The path to the file. + * @param extensionPriority The priority of the extension. + * @param context The expansion context. + */ + function removeWildcardFilesWithLowerPriorityExtension(file: string, wildcardFiles: Map, extensions: string[], keyMapper: (value: string) => string) { + const extensionPriority = getExtensionPriority(file, extensions); + const nextExtensionPriority = getNextLowestExtensionPriority(extensionPriority); + for (let i = nextExtensionPriority; i < extensions.length; i++) { + const lowerPriorityExtension = extensions[i]; + const lowerPriorityPath = keyMapper(changeExtension(file, lowerPriorityExtension)); + delete wildcardFiles[lowerPriorityPath]; + } + } + + /** + * Adds a file to an array of files. + * + * @param output The output array. + * @param file The file path. + */ + function addFileToOutput(output: string[], file: string) { + output.push(file); + return output; + } + + /** + * Gets a case sensitive key. + * + * @param key The original key. + */ + function caseSensitiveKeyMapper(key: string) { + return key; + } + + /** + * Gets a case insensitive key. + * + * @param key The original key. + */ + function caseInsensitiveKeyMapper(key: string) { + return key.toLowerCase(); + } } diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 2d5d81653ed..cf2d85c018f 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -25,7 +25,7 @@ namespace ts { contains, remove, forEachValue: forEachValueInMap, - clear + clear, }; function forEachValueInMap(f: (key: Path, value: T) => void) { @@ -130,6 +130,15 @@ namespace ts { return -1; } + export function indexOfAnyCharCode(text: string, charCodes: number[], start?: number): number { + for (let i = start || 0, len = text.length; i < len; i++) { + if (contains(charCodes, text.charCodeAt(i))) { + return i; + } + } + return -1; + } + export function countWhere(array: T[], predicate: (x: T, i: number) => boolean): number { let count = 0; if (array) { @@ -159,6 +168,17 @@ namespace ts { return result; } + export function filterMutate(array: T[], f: (x: T) => boolean): void { + let outIndex = 0; + for (const item of array) { + if (f(item)) { + array[outIndex] = item; + outIndex++; + } + } + array.length = outIndex; + } + export function map(array: T[], f: (x: T, i: number) => U): U[] { let result: U[]; if (array) { @@ -697,6 +717,28 @@ namespace ts { return a < b ? Comparison.LessThan : Comparison.GreaterThan; } + export function compareStrings(a: string, b: string, ignoreCase?: boolean): Comparison { + if (a === b) return Comparison.EqualTo; + if (a === undefined) return Comparison.LessThan; + if (b === undefined) return Comparison.GreaterThan; + if (ignoreCase) { + if (String.prototype.localeCompare) { + const result = a.localeCompare(b, /*locales*/ undefined, { usage: "sort", sensitivity: "accent" }); + return result < 0 ? Comparison.LessThan : result > 0 ? Comparison.GreaterThan : Comparison.EqualTo; + } + + a = a.toUpperCase(); + b = b.toUpperCase(); + if (a === b) return Comparison.EqualTo; + } + + return a < b ? Comparison.LessThan : Comparison.GreaterThan; + } + + export function compareStringsCaseInsensitive(a: string, b: string) { + return compareStrings(a, b, /*ignoreCase*/ true); + } + function getDiagnosticFileName(diagnostic: Diagnostic): string { return diagnostic.file ? diagnostic.file.fileName : undefined; } @@ -966,12 +1008,277 @@ namespace ts { return path1 + directorySeparator + path2; } + /** + * Removes a trailing directory separator from a path. + * @param path The path. + */ + export function removeTrailingDirectorySeparator(path: string) { + if (path.charAt(path.length - 1) === directorySeparator) { + return path.substr(0, path.length - 1); + } + + return path; + } + + /** + * Adds a trailing directory separator to a path, if it does not already have one. + * @param path The path. + */ + export function ensureTrailingDirectorySeparator(path: string) { + if (path.charAt(path.length - 1) !== directorySeparator) { + return path + directorySeparator; + } + + return path; + } + + export function comparePaths(a: string, b: string, currentDirectory: string, ignoreCase?: boolean) { + if (a === b) return Comparison.EqualTo; + if (a === undefined) return Comparison.LessThan; + if (b === undefined) return Comparison.GreaterThan; + a = removeTrailingDirectorySeparator(a); + b = removeTrailingDirectorySeparator(b); + const aComponents = getNormalizedPathComponents(a, currentDirectory); + const bComponents = getNormalizedPathComponents(b, currentDirectory); + const sharedLength = Math.min(aComponents.length, bComponents.length); + for (let i = 0; i < sharedLength; i++) { + const result = compareStrings(aComponents[i], bComponents[i], ignoreCase); + if (result !== Comparison.EqualTo) { + return result; + } + } + + return compareValues(aComponents.length, bComponents.length); + } + + export function containsPath(parent: string, child: string, currentDirectory: string, ignoreCase?: boolean) { + if (parent === undefined || child === undefined) return false; + if (parent === child) return true; + parent = removeTrailingDirectorySeparator(parent); + child = removeTrailingDirectorySeparator(child); + if (parent === child) return true; + const parentComponents = getNormalizedPathComponents(parent, currentDirectory); + const childComponents = getNormalizedPathComponents(child, currentDirectory); + if (childComponents.length < parentComponents.length) { + return false; + } + + for (let i = 0; i < parentComponents.length; i++) { + const result = compareStrings(parentComponents[i], childComponents[i], ignoreCase); + if (result !== Comparison.EqualTo) { + return false; + } + } + + return true; + } + export function fileExtensionIs(path: string, extension: string): boolean { const pathLen = path.length; const extLen = extension.length; return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } + export function fileExtensionIsAny(path: string, extensions: string[]): boolean { + for (const extension of extensions) { + if (fileExtensionIs(path, extension)) { + return true; + } + } + + return false; + } + + + // Reserved characters, forces escaping of any non-word (or digit), non-whitespace character. + // It may be inefficient (we could just match (/[-[\]{}()*+?.,\\^$|#\s]/g), but this is future + // proof. + const reservedCharacterPattern = /[^\w\s\/]/g; + const wildcardCharCodes = [CharacterCodes.asterisk, CharacterCodes.question]; + + export function getRegularExpressionForWildcard(specs: string[], basePath: string, usage: "files" | "directories" | "exclude") { + if (specs === undefined || specs.length === 0) { + return undefined; + } + + let pattern = ""; + let hasWrittenSubpattern = false; + spec: for (const spec of specs) { + if (!spec) { + continue; + } + + let subpattern = ""; + let hasRecursiveDirectoryWildcard = false; + let hasWrittenComponent = false; + const components = getNormalizedPathComponents(spec, basePath); + if (usage !== "exclude" && components[components.length - 1] === "**") { + continue spec; + } + + // getNormalizedPathComponents includes the separator for the root component. + // We need to remove to create our regex correctly. + components[0] = removeTrailingDirectorySeparator(components[0]); + + let optionalCount = 0; + for (const component of components) { + if (component === "**") { + if (hasRecursiveDirectoryWildcard) { + continue spec; + } + + subpattern += "(/.+?)?"; + hasRecursiveDirectoryWildcard = true; + hasWrittenComponent = true; + } + else { + if (usage === "directories") { + subpattern += "("; + optionalCount++; + } + + if (hasWrittenComponent) { + subpattern += directorySeparator; + } + + subpattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter); + hasWrittenComponent = true; + } + } + + while (optionalCount > 0) { + subpattern += ")?"; + optionalCount--; + } + + if (hasWrittenSubpattern) { + pattern += "|"; + } + + pattern += "(" + subpattern + ")"; + hasWrittenSubpattern = true; + } + + if (!pattern) { + return undefined; + } + + return "^(" + pattern + (usage === "exclude" ? ")($|/)" : ")$"); + } + + function replaceWildcardCharacter(match: string) { + return match === "*" ? "[^/]*" : match === "?" ? "[^/]" : "\\" + match; + } + + export interface FileSystemEntries { + files: string[]; + directories: string[]; + } + + export interface FileMatcherPatterns { + includeFilePattern: string; + includeDirectoryPattern: string; + excludePattern: string; + basePaths: string[]; + } + + export function getFileMatcherPatterns(path: string, extensions: string[], excludes: string[], includes: string[], useCaseSensitiveFileNames: boolean, currentDirectory: string): FileMatcherPatterns { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + const absolutePath = combinePaths(currentDirectory, path); + + return { + includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"), + includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"), + excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"), + basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames) + }; + } + + export function matchFiles(path: string, extensions: string[], excludes: string[], includes: string[], useCaseSensitiveFileNames: boolean, currentDirectory: string, getFileSystemEntries: (path: string) => FileSystemEntries): string[] { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + + const patterns = getFileMatcherPatterns(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory); + + const regexFlag = useCaseSensitiveFileNames ? "" : "i"; + const includeFileRegex = patterns.includeFilePattern && new RegExp(patterns.includeFilePattern, regexFlag); + const includeDirectoryRegex = patterns.includeDirectoryPattern && new RegExp(patterns.includeDirectoryPattern, regexFlag); + const excludeRegex = patterns.excludePattern && new RegExp(patterns.excludePattern, regexFlag); + + const result: string[] = []; + for (const basePath of patterns.basePaths) { + visitDirectory(basePath, combinePaths(currentDirectory, basePath)); + } + return result; + + function visitDirectory(path: string, absolutePath: string) { + const { files, directories } = getFileSystemEntries(path); + + for (const current of files) { + const name = combinePaths(path, current); + const absoluteName = combinePaths(absolutePath, current); + if ((!extensions || fileExtensionIsAny(name, extensions)) && + (!includeFileRegex || includeFileRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + result.push(name); + } + } + + for (const current of directories) { + const name = combinePaths(path, current); + const absoluteName = combinePaths(absolutePath, current); + if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && + (!excludeRegex || !excludeRegex.test(absoluteName))) { + visitDirectory(name, absoluteName); + } + } + } + } + + /** + * Computes the unique non-wildcard base paths amongst the provided include patterns. + */ + function getBasePaths(path: string, includes: string[], useCaseSensitiveFileNames: boolean) { + // Storage for our results in the form of literal paths (e.g. the paths as written by the user). + const basePaths: string[] = [path]; + if (includes) { + // Storage for literal base paths amongst the include patterns. + const includeBasePaths: string[] = []; + for (const include of includes) { + // We also need to check the relative paths by converting them to absolute and normalizing + // in case they escape the base path (e.g "..\somedirectory") + const absolute: string = isRootedDiskPath(include) ? include : normalizePath(combinePaths(path, include)); + + const wildcardOffset = indexOfAnyCharCode(absolute, wildcardCharCodes); + const includeBasePath = wildcardOffset < 0 + ? removeTrailingDirectorySeparator(getDirectoryPath(absolute)) + : absolute.substring(0, absolute.lastIndexOf(directorySeparator, wildcardOffset)); + + // Append the literal and canonical candidate base paths. + includeBasePaths.push(includeBasePath); + } + + // Sort the offsets array using either the literal or canonical path representations. + includeBasePaths.sort(useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive); + + // Iterate over each include base path and include unique base paths that are not a + // subpath of an existing base path + include: for (let i = 0; i < includeBasePaths.length; i++) { + const includeBasePath = includeBasePaths[i]; + for (let j = 0; j < basePaths.length; j++) { + if (containsPath(basePaths[j], includeBasePath, path, !useCaseSensitiveFileNames)) { + continue include; + } + } + + basePaths.push(includeBasePath); + } + } + + return basePaths; + } + export function ensureScriptKind(fileName: string, scriptKind?: ScriptKind): ScriptKind { // Using scriptKind as a condition handles both: // - 'scriptKind' is unspecified and thus it is `undefined` @@ -1020,6 +1327,59 @@ namespace ts { return false; } + /** + * Extension boundaries by priority. Lower numbers indicate higher priorities, and are + * aligned to the offset of the highest priority extension in the + * allSupportedExtensions array. + */ + export const enum ExtensionPriority { + TypeScriptFiles = 0, + DeclarationAndJavaScriptFiles = 2, + Limit = 5, + + Highest = TypeScriptFiles, + Lowest = DeclarationAndJavaScriptFiles, + } + + export function getExtensionPriority(path: string, supportedExtensions: string[]): ExtensionPriority { + for (let i = supportedExtensions.length - 1; i >= 0; i--) { + if (fileExtensionIs(path, supportedExtensions[i])) { + return adjustExtensionPriority(i); + } + } + + // If its not in the list of supported extensions, this is likely a + // TypeScript file with a non-ts extension + return ExtensionPriority.Highest; + } + + /** + * Adjusts an extension priority to be the highest priority within the same range. + */ + export function adjustExtensionPriority(extensionPriority: ExtensionPriority): ExtensionPriority { + if (extensionPriority < ExtensionPriority.DeclarationAndJavaScriptFiles) { + return ExtensionPriority.TypeScriptFiles; + } + else if (extensionPriority < ExtensionPriority.Limit) { + return ExtensionPriority.DeclarationAndJavaScriptFiles; + } + else { + return ExtensionPriority.Limit; + } + } + + /** + * Gets the next lowest extension priority for a given priority. + */ + export function getNextLowestExtensionPriority(extensionPriority: ExtensionPriority): ExtensionPriority { + if (extensionPriority < ExtensionPriority.DeclarationAndJavaScriptFiles) { + return ExtensionPriority.DeclarationAndJavaScriptFiles; + } + else { + return ExtensionPriority.Limit; + } + } + const extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"]; export function removeFileExtension(path: string): string { for (const ext of extensionsToRemove) { @@ -1039,6 +1399,10 @@ namespace ts { return ext === ".jsx" || ext === ".tsx"; } + export function changeExtension(path: T, newExtension: string): T { + return (removeFileExtension(path) + newExtension); + } + export interface ObjectAllocator { getNodeConstructor(): new (kind: SyntaxKind, pos?: number, end?: number) => Node; getSourceFileConstructor(): new (kind: SyntaxKind, pos?: number, end?: number) => SourceFile; diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index b2c67271001..8886a83f9a5 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -571,7 +571,7 @@ "category": "Error", "code": 1186 }, - "A parameter property may not be a binding pattern.": { + "A parameter property may not be declared using a binding pattern.": { "category": "Error", "code": 1187 }, @@ -847,6 +847,10 @@ "category": "Error", "code": 1316 }, + "A parameter property cannot be declared using a rest parameter.": { + "category": "Error", + "code": 1317 + }, "Duplicate identifier '{0}'.": { "category": "Error", "code": 2300 @@ -1931,6 +1935,10 @@ "category": "Error", "code": 2688 }, + "Cannot extend an interface '{0}'. Did you mean 'implements'?": { + "category": "Error", + "code": 2689 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", "code": 4000 @@ -2224,6 +2232,14 @@ "category": "Error", "code": 5009 }, + "File specification cannot end in a recursive directory wildcard ('**'): '{0}'.": { + "category": "Error", + "code": 5010 + }, + "File specification cannot contain multiple recursive directory wildcards ('**'): '{0}'.": { + "category": "Error", + "code": 5011 + }, "Cannot read file '{0}': {1}": { "category": "Error", "code": 5012 @@ -2312,6 +2328,10 @@ "category": "Error", "code": 5064 }, + "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'.": { + "category": "Error", + "code": 5065 + }, "Concatenate and emit output to single file.": { "category": "Message", "code": 6001 @@ -2772,11 +2792,30 @@ "category": "Message", "code": 6132 }, - "Import emit helpers from 'tslib'.": { - "category": "Message", + "'{0}' is declared but never used.": { + "category": "Error", "code": 6133 }, - + "Report Errors on Unused Locals.": { + "category": "Message", + "code": 6134 + }, + "Report Errors on Unused Parameters.": { + "category": "Message", + "code": 6135 + }, + "The maximum dependency depth to search under node_modules and load JavaScript files": { + "category": "Message", + "code": 6136 + }, + "No types specified in 'package.json' but 'allowJs' is set, so returning 'main' value of '{0}'": { + "category": "Message", + "code": 6137 + }, + "Import emit helpers from 'tslib'.": { + "category": "Message", + "code": 6138 + }, "Variable '{0}' implicitly has an '{1}' type.": { "category": "Error", "code": 7005 @@ -2921,10 +2960,6 @@ "category": "Error", "code": 8012 }, - "'property declarations' can only be used in a .ts file.": { - "category": "Error", - "code": 8014 - }, "'enum declarations' can only be used in a .ts file.": { "category": "Error", "code": 8015 diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index ab01fd3dbfc..a21902d2c59 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1132,8 +1132,15 @@ const _super = (function (geti, seti) { return; } - const indentBeforeDot = needsIndentation(node, node.expression, node.dotToken); - const indentAfterDot = needsIndentation(node, node.dotToken, node.name); + let indentBeforeDot = false; + let indentAfterDot = false; + if (!(node.emitFlags & NodeEmitFlags.NoIndentation)) { + const dotRangeStart = node.expression.end; + const dotRangeEnd = skipTrivia(currentText, node.expression.end) + 1; + const dotToken = { kind: SyntaxKind.DotToken, pos: dotRangeStart, end: dotRangeEnd }; + indentBeforeDot = needsIndentation(node, node.expression, dotToken); + indentAfterDot = needsIndentation(node, dotToken, node.name); + } const shouldEmitDotDot = !indentBeforeDot && needsDotDotForPropertyAccess(node.expression); emitExpression(node.expression); @@ -1984,7 +1991,7 @@ const _super = (function (geti, seti) { } } - function emitJsxTagName(node: EntityName) { + function emitJsxTagName(node: JsxTagNameExpression) { if (node.kind === SyntaxKind.Identifier) { emitExpression(node); } diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index d6571dfdb75..57ddd67b0a3 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -340,21 +340,20 @@ namespace ts { return node; } - export function createPropertyAccess(expression: Expression, name: string | Identifier, location?: TextRange) { - return createPropertyAccessWithDotToken(expression, createSynthesizedNode(SyntaxKind.DotToken), name, location, /*flags*/ undefined); - } - - export function createPropertyAccessWithDotToken(expression: Expression, dotToken: Node, name: string | Identifier, location?: TextRange, flags?: NodeFlags) { + export function createPropertyAccess(expression: Expression, name: string | Identifier, location?: TextRange, flags?: NodeFlags) { const node = createNode(SyntaxKind.PropertyAccessExpression, location, flags); node.expression = parenthesizeForAccess(expression); - node.dotToken = dotToken; + node.emitFlags = NodeEmitFlags.NoIndentation; node.name = typeof name === "string" ? createIdentifier(name) : name; return node; } export function updatePropertyAccess(node: PropertyAccessExpression, expression: Expression, name: Identifier) { if (node.expression !== expression || node.name !== name) { - return updateNode(createPropertyAccessWithDotToken(expression, node.dotToken, name, /*location*/ node, node.flags), node); + const propertyAccess = createPropertyAccess(expression, name, /*location*/ node, node.flags); + // Because we are updating existed propertyAccess we want to inherit its emitFlags instead of using default from createPropertyAccess + propertyAccess.emitFlags = node.emitFlags; + return updateNode(propertyAccess, node); } return node; } @@ -990,16 +989,13 @@ namespace ts { } export function createMemberAccessForPropertyName(target: Expression, memberName: PropertyName, location?: TextRange): MemberExpression { - if (isIdentifier(memberName)) { - const expression = createPropertyAccess(target, memberName, location); - expression.emitFlags |= NodeEmitFlags.NoNestedSourceMaps; - return expression; - } - else if (isComputedPropertyName(memberName)) { - return createElementAccess(target, memberName.expression, location); + if (isComputedPropertyName(memberName)) { + return createElementAccess(target, memberName.expression, location); } else { - return createElementAccess(target, memberName, location); + const expression = isIdentifier(memberName) ? createPropertyAccess(target, memberName, location) : createElementAccess(target, memberName, location); + expression.emitFlags |= NodeEmitFlags.NoNestedSourceMaps; + return expression; } } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 4b973d3a89e..9f861de9b92 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -138,7 +138,6 @@ namespace ts { return visitNodes(cbNodes, (node).properties); case SyntaxKind.PropertyAccessExpression: return visitNode(cbNode, (node).expression) || - visitNode(cbNode, (node).dotToken) || visitNode(cbNode, (node).name); case SyntaxKind.ElementAccessExpression: return visitNode(cbNode, (node).expression) || @@ -1169,12 +1168,12 @@ namespace ts { if (token === SyntaxKind.ExportKeyword) { nextToken(); if (token === SyntaxKind.DefaultKeyword) { - return lookAhead(nextTokenIsClassOrFunction); + return lookAhead(nextTokenIsClassOrFunctionOrAsync); } return token !== SyntaxKind.AsteriskToken && token !== SyntaxKind.AsKeyword && token !== SyntaxKind.OpenBraceToken && canFollowModifier(); } if (token === SyntaxKind.DefaultKeyword) { - return nextTokenIsClassOrFunction(); + return nextTokenIsClassOrFunctionOrAsync(); } if (token === SyntaxKind.StaticKeyword) { nextToken(); @@ -1192,12 +1191,14 @@ namespace ts { return token === SyntaxKind.OpenBracketToken || token === SyntaxKind.OpenBraceToken || token === SyntaxKind.AsteriskToken + || token === SyntaxKind.DotDotDotToken || isLiteralPropertyName(); } - function nextTokenIsClassOrFunction(): boolean { + function nextTokenIsClassOrFunctionOrAsync(): boolean { nextToken(); - return token === SyntaxKind.ClassKeyword || token === SyntaxKind.FunctionKeyword; + return token === SyntaxKind.ClassKeyword || token === SyntaxKind.FunctionKeyword || + (token === SyntaxKind.AsyncKeyword && lookAhead(nextTokenIsFunctionKeywordOnSameLine)); } // True if positioned at the start of a list element @@ -3568,12 +3569,12 @@ namespace ts { // If it wasn't then just try to parse out a '.' and report an error. const node = createNode(SyntaxKind.PropertyAccessExpression, expression.pos); node.expression = expression; - node.dotToken = parseExpectedToken(SyntaxKind.DotToken, /*reportAtCurrentPosition*/ false, Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); + parseExpectedToken(SyntaxKind.DotToken, /*reportAtCurrentPosition*/ false, Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); return finishNode(node); } - function tagNamesAreEquivalent(lhs: EntityName, rhs: EntityName): boolean { + function tagNamesAreEquivalent(lhs: JsxTagNameExpression, rhs: JsxTagNameExpression): boolean { if (lhs.kind !== rhs.kind) { return false; } @@ -3582,8 +3583,15 @@ namespace ts { return (lhs).text === (rhs).text; } - return (lhs).right.text === (rhs).right.text && - tagNamesAreEquivalent((lhs).left, (rhs).left); + if (lhs.kind === SyntaxKind.ThisKeyword) { + return true; + } + + // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only + // take forms of JsxTagNameExpression which includes an identifier, "this" expression, or another propertyAccessExpression + // it is safe to case the expression property as such. See parseJsxElementName for how we parse tag name in Jsx element + return (lhs).name.text === (rhs).name.text && + tagNamesAreEquivalent((lhs).expression as JsxTagNameExpression, (rhs).expression as JsxTagNameExpression); } @@ -3651,7 +3659,7 @@ namespace ts { Debug.fail("Unknown JSX child kind " + token); } - function parseJsxChildren(openingTagName: EntityName): NodeArray { + function parseJsxChildren(openingTagName: LeftHandSideExpression): NodeArray { const result = createNodeArray(); const saveParsingContext = parsingContext; parsingContext |= 1 << ParsingContext.JsxChildren; @@ -3713,17 +3721,22 @@ namespace ts { return finishNode(node); } - function parseJsxElementName(): EntityName { + function parseJsxElementName(): JsxTagNameExpression { scanJsxIdentifier(); - let elementName: EntityName = parseIdentifierName(); + // JsxElement can have name in the form of + // propertyAccessExpression + // primaryExpression in the form of an identifier and "this" keyword + // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword + // We only want to consider "this" as a primaryExpression + let expression: JsxTagNameExpression = token === SyntaxKind.ThisKeyword ? + parseTokenNode() : parseIdentifierName(); while (parseOptional(SyntaxKind.DotToken)) { - scanJsxIdentifier(); - const node: QualifiedName = createNode(SyntaxKind.QualifiedName, elementName.pos); // !!! - node.left = elementName; - node.right = parseIdentifierName(); - elementName = finishNode(node); + const propertyAccess: PropertyAccessExpression = createNode(SyntaxKind.PropertyAccessExpression, expression.pos); + propertyAccess.expression = expression; + propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); + expression = finishNode(propertyAccess); } - return elementName; + return expression; } function parseJsxExpression(inExpressionContext: boolean): JsxExpression { @@ -3803,7 +3816,6 @@ namespace ts { if (dotToken) { const propertyAccess = createNode(SyntaxKind.PropertyAccessExpression, expression.pos); propertyAccess.expression = expression; - propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); expression = finishNode(propertyAccess); continue; @@ -6355,6 +6367,9 @@ namespace ts { case SyntaxKind.AtToken: if (canParseTag) { parentTagTerminated = !tryParseChildTag(jsDocTypeLiteral); + if (!parentTagTerminated) { + resumePos = scanner.getStartPos(); + } } seenAsterisk = false; break; diff --git a/src/compiler/program.ts b/src/compiler/program.ts index e7470d54a16..1e25bd8cf0e 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -4,7 +4,7 @@ namespace ts { /** The version of the TypeScript compiler release */ - export const version = "1.9.0"; + export const version = "2.0.0"; const emptyArray: any[] = []; @@ -125,10 +125,10 @@ namespace ts { } function tryReadTypesSection(packageJsonPath: string, baseDirectory: string, state: ModuleResolutionState): string { - let jsonContent: { typings?: string, types?: string }; + let jsonContent: { typings?: string, types?: string, main?: string }; try { const jsonText = state.host.readFile(packageJsonPath); - jsonContent = jsonText ? <{ typings?: string, types?: string }>JSON.parse(jsonText) : {}; + jsonContent = jsonText ? <{ typings?: string, types?: string, main?: string }>JSON.parse(jsonText) : {}; } catch (e) { // gracefully handle if readFile fails or returns not JSON @@ -168,14 +168,36 @@ namespace ts { } return typesFilePath; } + // Use the main module for inferring types if no types package specified and the allowJs is set + if (state.compilerOptions.allowJs && jsonContent.main && typeof jsonContent.main === "string") { + if (state.traceEnabled) { + trace(state.host, Diagnostics.No_types_specified_in_package_json_but_allowJs_is_set_so_returning_main_value_of_0, jsonContent.main); + } + const mainFilePath = normalizePath(combinePaths(baseDirectory, jsonContent.main)); + return mainFilePath; + } return undefined; } const typeReferenceExtensions = [".d.ts"]; function getEffectiveTypeRoots(options: CompilerOptions, host: ModuleResolutionHost) { - return options.typeRoots || - defaultTypeRoots.map(d => combinePaths(options.configFilePath ? getDirectoryPath(options.configFilePath) : host.getCurrentDirectory(), d)); + if (options.typeRoots) { + return options.typeRoots; + } + + let currentDirectory: string; + if (options.configFilePath) { + currentDirectory = getDirectoryPath(options.configFilePath); + } + else if (host.getCurrentDirectory) { + currentDirectory = host.getCurrentDirectory(); + } + + if (!currentDirectory) { + return undefined; + } + return map(defaultTypeRoots, d => combinePaths(currentDirectory, d)); } /** @@ -215,7 +237,7 @@ namespace ts { const failedLookupLocations: string[] = []; // Check primary library paths - if (typeRoots.length) { + if (typeRoots && typeRoots.length) { if (traceEnabled) { trace(host, Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", ")); } @@ -605,7 +627,7 @@ namespace ts { failedLookupLocations, supportedExtensions, state); let isExternalLibraryImport = false; - if (!resolvedFileName) { + if (!resolvedFileName) { if (moduleHasNonRelativeName(moduleName)) { if (traceEnabled) { trace(host, Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); @@ -735,12 +757,13 @@ namespace ts { const nodeModulesFolder = combinePaths(directory, "node_modules"); const nodeModulesFolderExists = directoryProbablyExists(nodeModulesFolder, state.host); const candidate = normalizePath(combinePaths(nodeModulesFolder, moduleName)); - // Load only typescript files irrespective of allowJs option if loading from node modules - let result = loadModuleFromFile(candidate, supportedTypeScriptExtensions, failedLookupLocations, !nodeModulesFolderExists, state); + const supportedExtensions = getSupportedExtensions(state.compilerOptions); + + let result = loadModuleFromFile(candidate, supportedExtensions, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } - result = loadNodeModuleFromDirectory(supportedTypeScriptExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); + result = loadNodeModuleFromDirectory(supportedExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); if (result) { return result; } @@ -751,13 +774,18 @@ namespace ts { while (true) { const baseName = getBaseFileName(directory); if (baseName !== "node_modules") { - const result = - // first: try to load module as-is - loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state) || - // second: try to load module from the scope '@types' - loadModuleFromNodeModulesFolder(combinePaths("@types", moduleName), directory, failedLookupLocations, state); - if (result) { - return result; + // Try to load source from the package + const packageResult = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state); + if (packageResult && hasTypeScriptFileExtension(packageResult)) { + // Always prefer a TypeScript (.ts, .tsx, .d.ts) file shipped with the package + return packageResult; + } + else { + // Else prefer a types package over non-TypeScript results (e.g. JavaScript files) + const typesResult = loadModuleFromNodeModulesFolder(combinePaths("@types", moduleName), directory, failedLookupLocations, state); + if (typesResult || packageResult) { + return typesResult || packageResult; + } } } @@ -1033,9 +1061,11 @@ namespace ts { let result: string[] = []; if (host.directoryExists && host.getDirectories) { const typeRoots = getEffectiveTypeRoots(options, host); - for (const root of typeRoots) { - if (host.directoryExists(root)) { - result = result.concat(host.getDirectories(root)); + if (typeRoots) { + for (const root of typeRoots) { + if (host.directoryExists(root)) { + result = result.concat(host.getDirectories(root)); + } } } } @@ -1054,6 +1084,22 @@ namespace ts { let fileProcessingDiagnostics = createDiagnosticCollection(); const programStart = performance.mark(); + // The below settings are to track if a .js file should be add to the program if loaded via searching under node_modules. + // This works as imported modules are discovered recursively in a depth first manner, specifically: + // - For each root file, findSourceFile is called. + // - This calls processImportedModules for each module imported in the source file. + // - This calls resolveModuleNames, and then calls findSourceFile for each resolved module. + // As all these operations happen - and are nested - within the createProgram call, they close over the below variables. + // The current resolution depth is tracked by incrementing/decrementing as the depth first search progresses. + const maxNodeModulesJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 2; + let currentNodeModulesDepth = 0; + + // If a module has some of its imports skipped due to being at the depth limit under node_modules, then track + // this, as it may be imported at a shallower depth later, and then it will need its skipped imports processed. + const modulesWithElidedImports: Map = {}; + + // Track source files that are source files found by searching under node_modules, as these shouldn't be compiled. + const sourceFilesFoundSearchingNodeModules: Map = {}; host = host || createCompilerHost(options); @@ -1207,6 +1253,7 @@ namespace ts { (oldOptions.rootDir !== options.rootDir) || (oldOptions.configFilePath !== options.configFilePath) || (oldOptions.baseUrl !== options.baseUrl) || + (oldOptions.maxNodeModuleJsDepth !== options.maxNodeModuleJsDepth) || !arrayIsEqualTo(oldOptions.typeRoots, oldOptions.typeRoots) || !arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || !mapIsEqualTo(oldOptions.paths, options.paths)) { @@ -1331,6 +1378,7 @@ namespace ts { getSourceFile: program.getSourceFile, getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, + isSourceFileFromExternalLibrary: (file: SourceFile) => !!lookUp(sourceFilesFoundSearchingNodeModules, file.path), writeFile: writeFileCallback || ( (fileName, data, writeByteOrderMark, onError, sourceFiles) => host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles)), isEmitBlocked, @@ -1346,7 +1394,7 @@ namespace ts { } function emit(sourceFile?: SourceFile, writeFileCallback?: WriteFileCallback, cancellationToken?: CancellationToken): EmitResult { - return runWithCancellationToken(() => emitWorker(this, sourceFile, writeFileCallback, cancellationToken)); + return runWithCancellationToken(() => emitWorker(program, sourceFile, writeFileCallback, cancellationToken)); } function isEmitBlocked(emitFileName: string): boolean { @@ -1598,8 +1646,19 @@ namespace ts { } break; case SyntaxKind.PropertyDeclaration: - diagnostics.push(createDiagnosticForNode(node, Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); - return true; + const propertyDeclaration = node; + if (propertyDeclaration.modifiers) { + for (const modifier of propertyDeclaration.modifiers) { + if (modifier.kind !== SyntaxKind.StaticKeyword) { + diagnostics.push(createDiagnosticForNode(modifier, Diagnostics._0_can_only_be_used_in_a_ts_file, tokenToString(modifier.kind))); + return true; + } + } + } + if (checkTypeAnnotation((node).type)) { + return true; + } + break; case SyntaxKind.EnumDeclaration: diagnostics.push(createDiagnosticForNode(node, Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; @@ -1866,6 +1925,26 @@ namespace ts { reportFileNamesDifferOnlyInCasingError(fileName, file.fileName, refFile, refPos, refEnd); } + // If the file was previously found via a node_modules search, but is now being processed as a root file, + // then everything it sucks in may also be marked incorrectly, and needs to be checked again. + if (file && lookUp(sourceFilesFoundSearchingNodeModules, file.path) && currentNodeModulesDepth == 0) { + sourceFilesFoundSearchingNodeModules[file.path] = false; + if (!options.noResolve) { + processReferencedFiles(file, getDirectoryPath(fileName), isDefaultLib); + processTypeReferenceDirectives(file); + } + + modulesWithElidedImports[file.path] = false; + processImportedModules(file, getDirectoryPath(fileName)); + } + // See if we need to reprocess the imports due to prior skipped imports + else if (file && lookUp(modulesWithElidedImports, file.path)) { + if (currentNodeModulesDepth < maxNodeModulesJsDepth) { + modulesWithElidedImports[file.path] = false; + processImportedModules(file, getDirectoryPath(fileName)); + } + } + return file; } @@ -1882,6 +1961,7 @@ namespace ts { filesByName.set(path, file); if (file) { + sourceFilesFoundSearchingNodeModules[path] = (currentNodeModulesDepth > 0); file.path = path; if (host.useCaseSensitiveFileNames()) { @@ -2004,16 +2084,37 @@ namespace ts { for (let i = 0; i < moduleNames.length; i++) { const resolution = resolutions[i]; setResolvedModule(file, moduleNames[i], resolution); + const resolvedPath = resolution ? toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName) : undefined; + // add file to program only if: // - resolution was successful // - noResolve is falsy // - module name comes from the list of imports - const shouldAddFile = resolution && - !options.noResolve && - i < file.imports.length; + // - it's not a top level JavaScript module that exceeded the search max + const isFromNodeModulesSearch = resolution && resolution.isExternalLibraryImport; + const isJsFileFromNodeModules = isFromNodeModulesSearch && hasJavaScriptFileExtension(resolution.resolvedFileName); - if (shouldAddFile) { - findSourceFile(resolution.resolvedFileName, toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName), /*isDefaultLib*/ false, /*isReference*/ false, file, skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + if (isFromNodeModulesSearch) { + currentNodeModulesDepth++; + } + + const elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModulesJsDepth; + const shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport; + + if (elideImport) { + modulesWithElidedImports[file.path] = true; + } + else if (shouldAddFile) { + findSourceFile(resolution.resolvedFileName, + resolvedPath, + /*isDefaultLib*/ false, /*isReference*/ false, + file, + skipTrivia(file.text, file.imports[i].pos), + file.imports[i].end); + } + + if (isFromNodeModulesSearch) { + currentNodeModulesDepth--; } } } diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index b39131b770e..bbd3531476f 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -31,6 +31,7 @@ namespace ts { scanJsxToken(): SyntaxKind; scanJSDocToken(): SyntaxKind; scan(): SyntaxKind; + getText(): string; // Sets the text for the scanner to scan. An optional subrange starting point and length // can be provided to have the scanner only scan a portion of the text. setText(text: string, start?: number, length?: number): void; @@ -365,6 +366,11 @@ namespace ts { const hasOwnProperty = Object.prototype.hasOwnProperty; export function isWhiteSpace(ch: number): boolean { + return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); + } + + /** Does not include line breaks. For that, see isWhiteSpaceLike. */ + export function isWhiteSpaceSingleLine(ch: number): boolean { // Note: nextLine is in the Zs space, and should be considered to be a whitespace. // It is explicitly not a line-break as it isn't in the exact set specified by EcmaScript. return ch === CharacterCodes.space || @@ -503,7 +509,7 @@ namespace ts { break; default: - if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpace(ch))) { pos++; continue; } @@ -817,6 +823,7 @@ namespace ts { scanJsxToken, scanJSDocToken, scan, + getText, setText, setScriptTarget, setLanguageVariant, @@ -1256,7 +1263,7 @@ namespace ts { continue; } else { - while (pos < end && isWhiteSpace(text.charCodeAt(pos))) { + while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) { pos++; } return token = SyntaxKind.WhitespaceTrivia; @@ -1574,7 +1581,7 @@ namespace ts { } return token = getIdentifierToken(); } - else if (isWhiteSpace(ch)) { + else if (isWhiteSpaceSingleLine(ch)) { pos++; continue; } @@ -1743,7 +1750,7 @@ namespace ts { let ch = text.charCodeAt(pos); while (pos < end) { ch = text.charCodeAt(pos); - if (isWhiteSpace(ch)) { + if (isWhiteSpaceSingleLine(ch)) { pos++; } else { @@ -1843,6 +1850,10 @@ namespace ts { return speculationHelper(callback, /*isLookahead*/ false); } + function getText(): string { + return text; + } + function setText(newText: string, start: number, length: number) { text = newText || ""; end = length === undefined ? text.length : start + length; diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index b27958e711a..3d3c2ba273b 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -15,6 +15,7 @@ namespace ts { useCaseSensitiveFileNames: boolean; write(s: string): void; readFile(path: string, encoding?: string): string; + getFileSize?(path: string): number; writeFile(path: string, data: string, writeByteOrderMark?: boolean): void; watchFile?(path: string, callback: FileWatcherCallback): FileWatcher; watchDirectory?(path: string, callback: DirectoryWatcherCallback, recursive?: boolean): FileWatcher; @@ -25,7 +26,7 @@ namespace ts { getExecutingFilePath(): string; getCurrentDirectory(): string; getDirectories(path: string): string[]; - readDirectory(path: string, extension?: string, exclude?: string[]): string[]; + readDirectory(path: string, extensions?: string[], exclude?: string[], include?: string[]): string[]; getModifiedTime?(path: string): Date; createHash?(data: string): string; getMemoryUsage?(): number; @@ -75,18 +76,19 @@ namespace ts { readFile(path: string): string; writeFile(path: string, contents: string): void; getDirectories(path: string): string[]; - readDirectory(path: string, extension?: string, exclude?: string[]): string[]; + readDirectory(path: string, extensions?: string[], basePaths?: string[], excludeEx?: string, includeFileEx?: string, includeDirEx?: string): string[]; watchFile?(path: string, callback: FileWatcherCallback): FileWatcher; watchDirectory?(path: string, callback: DirectoryWatcherCallback, recursive?: boolean): FileWatcher; realpath(path: string): string; getEnvironmentVariable?(name: string): string; }; - export var sys: System = (function () { + export var sys: System = (function() { function getWScriptSystem(): System { const fso = new ActiveXObject("Scripting.FileSystemObject"); + const shell = new ActiveXObject("WScript.Shell"); const fileStream = new ActiveXObject("ADODB.Stream"); fileStream.Type = 2 /*text*/; @@ -154,10 +156,6 @@ namespace ts { } } - function getCanonicalPath(path: string): string { - return path.toLowerCase(); - } - function getNames(collection: any): string[] { const result: string[] = []; for (let e = new Enumerator(collection); !e.atEnd(); e.moveNext()) { @@ -171,28 +169,20 @@ namespace ts { return getNames(folder.subfolders); } - function readDirectory(path: string, extension?: string, exclude?: string[]): string[] { - const result: string[] = []; - exclude = map(exclude, s => getCanonicalPath(combinePaths(path, s))); - visitDirectory(path); - return result; - function visitDirectory(path: string) { + function getAccessibleFileSystemEntries(path: string): FileSystemEntries { + try { const folder = fso.GetFolder(path || "."); const files = getNames(folder.files); - for (const current of files) { - const name = combinePaths(path, current); - if ((!extension || fileExtensionIs(name, extension)) && !contains(exclude, getCanonicalPath(name))) { - result.push(name); - } - } - const subfolders = getNames(folder.subfolders); - for (const current of subfolders) { - const name = combinePaths(path, current); - if (!contains(exclude, getCanonicalPath(name))) { - visitDirectory(name); - } - } + const directories = getNames(folder.subfolders); + return { files, directories }; } + catch (e) { + return { files: [], directories: [] }; + } + } + + function readDirectory(path: string, extensions?: string[], excludes?: string[], includes?: string[]): string[] { + return matchFiles(path, extensions, excludes, includes, /*useCaseSensitiveFileNames*/ false, shell.CurrentDirectory, getAccessibleFileSystemEntries); } return { @@ -222,7 +212,7 @@ namespace ts { return WScript.ScriptFullName; }, getCurrentDirectory() { - return new ActiveXObject("WScript.Shell").CurrentDirectory; + return shell.CurrentDirectory; }, getDirectories, getEnvironmentVariable(name: string) { @@ -386,8 +376,43 @@ namespace ts { } } - function getCanonicalPath(path: string): string { - return useCaseSensitiveFileNames ? path : path.toLowerCase(); + function getAccessibleFileSystemEntries(path: string): FileSystemEntries { + try { + const entries = _fs.readdirSync(path || ".").sort(); + const files: string[] = []; + const directories: string[] = []; + for (const entry of entries) { + // This is necessary because on some file system node fails to exclude + // "." and "..". See https://github.com/nodejs/node/issues/4002 + if (entry === "." || entry === "..") { + continue; + } + const name = combinePaths(path, entry); + + let stat: any; + try { + stat = _fs.statSync(name); + } + catch (e) { + continue; + } + + if (stat.isFile()) { + files.push(entry); + } + else if (stat.isDirectory()) { + directories.push(entry); + } + } + return { files, directories }; + } + catch (e) { + return { files: [], directories: [] }; + } + } + + function readDirectory(path: string, extensions?: string[], excludes?: string[], includes?: string[]): string[] { + return matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), getAccessibleFileSystemEntries); } const enum FileSystemEntryKind { @@ -420,39 +445,6 @@ namespace ts { return filter(_fs.readdirSync(path), p => fileSystemEntryExists(combinePaths(path, p), FileSystemEntryKind.Directory)); } - function readDirectory(path: string, extension?: string, exclude?: string[]): string[] { - const result: string[] = []; - exclude = map(exclude, s => getCanonicalPath(combinePaths(path, s))); - visitDirectory(path); - return result; - function visitDirectory(path: string) { - const files = _fs.readdirSync(path || ".").sort(); - const directories: string[] = []; - for (const current of files) { - // 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; - } - const name = combinePaths(path, current); - if (!contains(exclude, getCanonicalPath(name))) { - const stat = _fs.statSync(name); - if (stat.isFile()) { - if (!extension || fileExtensionIs(name, extension)) { - result.push(name); - } - } - else if (stat.isDirectory()) { - directories.push(name); - } - } - } - for (const current of directories) { - visitDirectory(current); - } - } - } - return { args: process.argv.slice(2), newLine: _os.EOL, @@ -509,7 +501,7 @@ namespace ts { } ); }, - resolvePath: function (path: string): string { + resolvePath: function(path: string): string { return _path.resolve(path); }, fileExists, @@ -549,6 +541,16 @@ namespace ts { } return process.memoryUsage().heapUsed; }, + getFileSize(path) { + try { + const stat = _fs.statSync(path); + if (stat.isFile()) { + return stat.size; + } + } + catch (e) { } + return 0; + }, exit(exitCode?: number): void { process.exit(exitCode); }, @@ -593,7 +595,10 @@ namespace ts { getCurrentDirectory: () => ChakraHost.currentDirectory, getDirectories: ChakraHost.getDirectories, getEnvironmentVariable: ChakraHost.getEnvironmentVariable || ((name: string) => ""), - readDirectory: ChakraHost.readDirectory, + readDirectory: (path: string, extensions?: string[], excludes?: string[], includes?: string[]) => { + const pattern = getFileMatcherPatterns(path, extensions, excludes, includes, !!ChakraHost.useCaseSensitiveFileNames, ChakraHost.currentDirectory); + return ChakraHost.readDirectory(path, extensions, pattern.basePaths, pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern); + }, exit: ChakraHost.quit, realpath }; diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index 2e2ed1be4b9..d4bf1250731 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -13,7 +13,7 @@ namespace ts { const enum TypeScriptSubstitutionFlags { /** Enables substitutions for decorated classes. */ - DecoratedClasses = 1 << 0, + ClassAliases = 1 << 0, /** Enables substitutions for namespace exports. */ NamespaceExports = 1 << 1, /** Enables substitutions for async methods with `super` calls. */ @@ -63,13 +63,7 @@ namespace ts { * A map that keeps track of aliases created for classes with decorators to avoid issues * with the double-binding behavior of classes. */ - let decoratedClassAliases: Map; - - /** - * A map that keeps track of currently active aliases defined in `decoratedClassAliases` - * when just-in-time substitution occurs while printing an expression identifier. - */ - let currentDecoratedClassAliases: Map; + let classAliases: Map; /** * Keeps track of whether we are within any containing namespaces when performing @@ -495,7 +489,7 @@ namespace ts { const staticProperties = getInitializedProperties(node, /*isStatic*/ true); const hasExtendsClause = getClassExtendsHeritageClauseElement(node) !== undefined; const isDecoratedClass = shouldEmitDecorateCallForClass(node); - let decoratedClassAlias: Identifier; + let classAlias: Identifier; // emit name if // - node has a name @@ -529,7 +523,7 @@ namespace ts { statements.push(classDeclaration); } else { - decoratedClassAlias = addClassDeclarationHeadWithDecorators(statements, node, name, hasExtendsClause); + classAlias = addClassDeclarationHeadWithDecorators(statements, node, name, hasExtendsClause); } // Emit static property assignment. Because classDeclaration is lexically evaluated, @@ -544,7 +538,7 @@ namespace ts { // Write any decorators of the node. addClassElementDecorationStatements(statements, node, /*isStatic*/ false); addClassElementDecorationStatements(statements, node, /*isStatic*/ true); - addConstructorDecorationStatement(statements, node, decoratedClassAlias); + addConstructorDecorationStatement(statements, node, classAlias); // If the class is exported as part of a TypeScript namespace, emit the namespace export. // Otherwise, if the class was exported at the top level and was decorated, emit an export @@ -679,11 +673,11 @@ namespace ts { } // Record an alias to avoid class double-binding. - let decoratedClassAlias: Identifier; - if (resolver.getNodeCheckFlags(node) & NodeCheckFlags.DecoratedClassWithSelfReference) { - enableSubstitutionForDecoratedClasses(); - decoratedClassAlias = createUniqueName(node.name && !isGeneratedIdentifier(node.name) ? node.name.text : "default"); - decoratedClassAliases[getOriginalNodeId(node)] = decoratedClassAlias; + let classAlias: Identifier; + if (resolver.getNodeCheckFlags(node) & NodeCheckFlags.ClassWithConstructorReference) { + enableSubstitutionForClassAliases(); + classAlias = createUniqueName(node.name && !isGeneratedIdentifier(node.name) ? node.name.text : "default"); + classAliases[getOriginalNodeId(node)] = classAlias; } const declaredName = getDeclarationName(node, /*allowComments*/ true); @@ -696,7 +690,7 @@ namespace ts { /*modifiers*/ undefined, createLetDeclarationList([ createVariableDeclaration( - decoratedClassAlias || declaredName, + classAlias || declaredName, /*type*/ undefined, classExpression ) @@ -707,7 +701,7 @@ namespace ts { ) ); - if (decoratedClassAlias) { + if (classAlias) { // We emit the class alias as a `let` declaration here so that it has the same // TDZ as the class. @@ -720,7 +714,7 @@ namespace ts { createVariableDeclaration( declaredName, /*type*/ undefined, - decoratedClassAlias + classAlias ) ]), /*location*/ location @@ -730,7 +724,7 @@ namespace ts { ); } - return decoratedClassAlias; + return classAlias; } /** @@ -760,6 +754,11 @@ namespace ts { if (staticProperties.length > 0) { const expressions: Expression[] = []; const temp = createTempVariable(hoistVariableDeclaration); + if (resolver.getNodeCheckFlags(node) & NodeCheckFlags.ClassWithConstructorReference) { + // record an alias as the class name is not in scope for statics. + enableSubstitutionForClassAliases(); + classAliases[getOriginalNodeId(node)] = temp; + } // To preserve the behavior of the old emitter, we explicitly indent // the body of a class with static initializers. @@ -1085,9 +1084,6 @@ namespace ts { const propertyName = visitPropertyNameOfClassElement(property); const initializer = visitNode(property.initializer, visitor, isExpression); const memberAccess = createMemberAccessForPropertyName(receiver, propertyName, /*location*/ propertyName); - if (!isComputedPropertyName(propertyName)) { - setNodeEmitFlags(memberAccess, NodeEmitFlags.NoNestedSourceMaps); - } return createAssignment(memberAccess, initializer); } @@ -3100,18 +3096,16 @@ namespace ts { } } - function enableSubstitutionForDecoratedClasses() { - if ((enabledSubstitutions & TypeScriptSubstitutionFlags.DecoratedClasses) === 0) { - enabledSubstitutions |= TypeScriptSubstitutionFlags.DecoratedClasses; + function enableSubstitutionForClassAliases() { + if ((enabledSubstitutions & TypeScriptSubstitutionFlags.ClassAliases) === 0) { + enabledSubstitutions |= TypeScriptSubstitutionFlags.ClassAliases; // We need to enable substitutions for identifiers. This allows us to // substitute class names inside of a class declaration. context.enableSubstitution(SyntaxKind.Identifier); - context.enableEmitNotification(SyntaxKind.Identifier); // Keep track of class aliases. - decoratedClassAliases = {}; - currentDecoratedClassAliases = {}; + classAliases = {}; } } @@ -3129,10 +3123,6 @@ namespace ts { } } - function isClassWithDecorators(node: Node): node is ClassDeclaration { - return node.kind === SyntaxKind.ClassDeclaration && node.decorators !== undefined; - } - function isSuperContainer(node: Node): node is SuperContainer { const kind = node.kind; return kind === SyntaxKind.ClassDeclaration @@ -3159,21 +3149,6 @@ namespace ts { function onEmitNode(node: Node, emit: (node: Node) => void): void { const savedApplicableSubstitutions = applicableSubstitutions; const savedCurrentSuperContainer = currentSuperContainer; - - // If we need support substitutions for aliases for decorated classes, - // we should enable it here. - if (enabledSubstitutions & TypeScriptSubstitutionFlags.DecoratedClasses) { - if (isClassWithDecorators(node)) { - currentDecoratedClassAliases[getOriginalNodeId(node)] = decoratedClassAliases[getOriginalNodeId(node)]; - } - else if (node.kind === SyntaxKind.Identifier) { - const declaration = resolver.getReferencedValueDeclaration(node); - if (declaration && isClassWithDecorators(declaration)) { - currentDecoratedClassAliases[getOriginalNodeId(declaration)] = decoratedClassAliases[getOriginalNodeId(declaration)]; - } - } - } - // If we need to support substitutions for `super` in an async method, // we should track it here. if (enabledSubstitutions & TypeScriptSubstitutionFlags.AsyncMethodsWithSuper && isSuperContainer(node)) { @@ -3183,16 +3158,13 @@ namespace ts { if (enabledSubstitutions & TypeScriptSubstitutionFlags.NamespaceExports && isTransformedModuleDeclaration(node)) { applicableSubstitutions |= TypeScriptSubstitutionFlags.NamespaceExports; } + if (enabledSubstitutions & TypeScriptSubstitutionFlags.NonQualifiedEnumMembers && isTransformedEnumDeclaration(node)) { applicableSubstitutions |= TypeScriptSubstitutionFlags.NonQualifiedEnumMembers; } previousOnEmitNode(node, emit); - if (enabledSubstitutions & TypeScriptSubstitutionFlags.DecoratedClasses && isClassWithDecorators(node)) { - currentDecoratedClassAliases[getOriginalNodeId(node)] = undefined; - } - applicableSubstitutions = savedApplicableSubstitutions; currentSuperContainer = savedCurrentSuperContainer; } @@ -3254,20 +3226,22 @@ namespace ts { } function substituteExpressionIdentifier(node: Identifier): Expression { - return trySubstituteDecoratedClassName(node) + return trySubstituteClassAlias(node) || trySubstituteNamespaceExportedName(node) || node; } - function trySubstituteDecoratedClassName(node: Identifier): Expression { - if (enabledSubstitutions & TypeScriptSubstitutionFlags.DecoratedClasses) { - if (resolver.getNodeCheckFlags(node) & NodeCheckFlags.SelfReferenceInDecoratedClass) { + function trySubstituteClassAlias(node: Identifier): Expression { + if (enabledSubstitutions & TypeScriptSubstitutionFlags.ClassAliases) { + if (resolver.getNodeCheckFlags(node) & NodeCheckFlags.ConstructorReferenceInClass) { // Due to the emit for class decorators, any reference to the class from inside of the class body // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind // behavior of class names in ES6. + // Also, when emitting statics for class expressions, we must substitute a class alias for + // constructor references in static property initializers. const declaration = resolver.getReferencedValueDeclaration(node); if (declaration) { - const classAlias = currentDecoratedClassAliases[getOriginalNodeId(declaration)]; + const classAlias = classAliases[declaration.id]; if (classAlias) { const clone = getSynthesizedClone(classAlias); setSourceMapRange(clone, node); diff --git a/src/compiler/tsconfig.json b/src/compiler/tsconfig.json index 734fafefd44..2d690841c3c 100644 --- a/src/compiler/tsconfig.json +++ b/src/compiler/tsconfig.json @@ -3,14 +3,15 @@ "noImplicitAny": true, "removeComments": true, "preserveConstEnums": true, - "out": "../../built/local/tsc.js", - "sourceMap": true + "outFile": "../../built/local/tsc.js", + "sourceMap": true, + "declaration": true, + "stripInternal": true }, "files": [ - "types.ts", "core.ts", "sys.ts", - "diagnosticInformationMap.generated.ts", + "types.ts", "scanner.ts", "parser.ts", "utilities.ts", @@ -34,6 +35,7 @@ "emitter.ts", "program.ts", "commandLineParser.ts", - "tsc.ts" + "tsc.ts", + "diagnosticInformationMap.generated.ts" ] } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index a8be1a52634..0ebc1c78e0d 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -493,6 +493,10 @@ namespace ts { hasTrailingComma?: boolean; } + export interface ModifiersArray extends NodeArray { + flags: NodeFlags; + } + // @kind(SyntaxKind.AbstractKeyword) // @kind(SyntaxKind.AsyncKeyword) // @kind(SyntaxKind.ConstKeyword) @@ -1036,7 +1040,6 @@ namespace ts { // @kind(SyntaxKind.PropertyAccessExpression) export interface PropertyAccessExpression extends MemberExpression, Declaration { expression: LeftHandSideExpression; - dotToken: Node; name: Identifier; } @@ -1099,12 +1102,14 @@ namespace ts { closingElement: JsxClosingElement; } + export type JsxTagNameExpression = PrimaryExpression | PropertyAccessExpression; + /// The opening element of a ... JsxElement // @kind(SyntaxKind.JsxOpeningElement) export interface JsxOpeningElement extends Expression { _openingElementBrand?: any; - tagName: EntityName; - attributes: NodeArray; + tagName: JsxTagNameExpression; + attributes: NodeArray; } /// A JSX expression of the form @@ -1132,7 +1137,7 @@ namespace ts { // @kind(SyntaxKind.JsxClosingElement) export interface JsxClosingElement extends Node { - tagName: EntityName; + tagName: JsxTagNameExpression; } // @kind(SyntaxKind.JsxExpression) @@ -1256,6 +1261,7 @@ namespace ts { export interface SwitchStatement extends Statement { expression: Expression; caseBlock: CaseBlock; + possiblyExhaustive?: boolean; } // @kind(SyntaxKind.CaseBlock) @@ -1628,8 +1634,9 @@ namespace ts { Assignment = 1 << 4, // Assignment TrueCondition = 1 << 5, // Condition known to be true FalseCondition = 1 << 6, // Condition known to be false - Referenced = 1 << 7, // Referenced as antecedent once - Shared = 1 << 8, // Referenced as antecedent more than once + SwitchClause = 1 << 7, // Switch statement clause + Referenced = 1 << 8, // Referenced as antecedent once + Shared = 1 << 9, // Referenced as antecedent more than once Label = BranchLabel | LoopLabel, Condition = TrueCondition | FalseCondition } @@ -1665,6 +1672,13 @@ namespace ts { antecedent: FlowNode; } + export interface FlowSwitchClause extends FlowNode { + switchStatement: SwitchStatement; + clauseStart: number; // Start index of case/default clause range + clauseEnd: number; // End index of case/default clause range + antecedent: FlowNode; + } + export interface AmdDependency { path: string; name: string; @@ -1745,7 +1759,15 @@ namespace ts { } export interface ParseConfigHost { - readDirectory(rootDir: string, extension: string, exclude: string[]): string[]; + useCaseSensitiveFileNames: boolean; + + readDirectory(rootDir: string, extensions: string[], excludes: string[], includes: string[]): string[]; + + /** + * Gets a value indicating whether the specified path exists and is a file. + * @param path The path to test. + */ + fileExists(path: string): boolean; } export interface WriteFileCallback { @@ -1934,7 +1956,7 @@ namespace ts { 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; + buildDisplayForParametersAndDelimiters(thisParameter: Symbol, 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; } @@ -2166,6 +2188,8 @@ namespace ts { PropertyOrAccessor = Property | Accessor, Export = ExportNamespace | ExportType | ExportValue, + ClassMember = Method | Accessor | Property, + /* @internal */ // The set of things we consider semantically classifiable. Used to speed up the LS during // classification. @@ -2181,11 +2205,13 @@ namespace ts { members?: SymbolTable; // Class, interface or literal instance members exports?: SymbolTable; // Module exports globalExports?: SymbolTable; // Conditional global UMD exports + /* @internal */ isReadonly?: boolean; // readonly? (set only for intersections and unions) /* @internal */ id?: number; // Unique id (used to look up SymbolLinks) /* @internal */ mergeId?: number; // Merge id (used to look up merged symbol) /* @internal */ parent?: Symbol; // Parent symbol /* @internal */ exportSymbol?: Symbol; // Exported symbol associated with this symbol /* @internal */ constEnumOnlyModule?: boolean; // True if module contains only const enums or other modules with only const enums + /* @internal */ isReferenced?: boolean; // True if the symbol is referenced elsewhere } /* @internal */ @@ -2243,8 +2269,8 @@ namespace ts { LoopWithCapturedBlockScopedBinding = 0x00010000, // Loop that contains block scoped variable captured in closure CapturedBlockScopedBinding = 0x00020000, // Block-scoped binding that is captured in some function BlockScopedBindingInLoop = 0x00040000, // Block-scoped binding with declaration nested inside iteration statement - DecoratedClassWithSelfReference = 0x00080000, // Decorated class that contains a binding to itself inside of the class body. - SelfReferenceInDecoratedClass = 0x00100000, // Binding to a decorated class inside of the class's body. + ClassWithConstructorReference = 0x00080000, // Class that contains a binding to its constructor inside of the class body. + ConstructorReferenceInClass = 0x00100000, // Binding to a class constructor inside of the class's body. NeedsLoopOutParameter = 0x00200000, // Block scoped binding whose value should be explicitly copied outside of the converted loop } @@ -2262,6 +2288,7 @@ namespace ts { resolvedJsxType?: Type; // resolved element attributes type of a JSX openinglike element hasSuperCall?: boolean; // recorded result when we try to find super-call. We only try to find one if this flag is undefined, indicating that we haven't made an attempt. superCall?: ExpressionStatement; // Cached first super-call found in the constructor. Used in checking whether super is called before this-accessing + switchTypes?: Type[]; // Cached array of switch case expression types } export const enum TypeFlags { @@ -2301,7 +2328,8 @@ namespace ts { /* @internal */ Nullable = Undefined | Null, - Falsy = String | Number | Boolean | Void | Undefined | Null, + /* @internal */ + Falsy = Void | Undefined | Null, // TODO: Add false, 0, and "" /* @internal */ Intrinsic = Any | String | Number | Boolean | ESSymbol | Void | Undefined | Null | Never, /* @internal */ @@ -2453,7 +2481,8 @@ namespace ts { declaration: SignatureDeclaration; // Originating declaration typeParameters: TypeParameter[]; // Type parameters (undefined if non-generic) parameters: Symbol[]; // Parameters - thisType?: Type; // type of this-type + /* @internal */ + thisParameter?: Symbol; // symbol of this-type parameter /* @internal */ resolvedReturnType: Type; // Resolved return type /* @internal */ @@ -2588,6 +2617,7 @@ namespace ts { declarationDir?: string; /* @internal */ diagnostics?: boolean; /*@internal*/ extendedDiagnostics?: boolean; + disableSizeLimit?: boolean; emitBOM?: boolean; emitDecoratorMetadata?: boolean; experimentalDecorators?: boolean; @@ -2604,6 +2634,7 @@ namespace ts { /*@internal*/listFiles?: boolean; locale?: string; mapRoot?: string; + maxNodeModuleJsDepth?: number; module?: ModuleKind; moduleResolution?: ModuleResolutionKind; newLine?: NewLineKind; @@ -2615,6 +2646,8 @@ namespace ts { noImplicitAny?: boolean; noImplicitReturns?: boolean; noImplicitThis?: boolean; + noUnusedLocals?: boolean; + noUnusedParameters?: boolean; noImplicitUseStrict?: boolean; noLib?: boolean; noResolve?: boolean; @@ -2643,7 +2676,6 @@ namespace ts { types?: string[]; /** Paths used to used to compute primary types search locations */ typeRoots?: string[]; - typesSearchPaths?: string[]; /*@internal*/ version?: boolean; /*@internal*/ watch?: boolean; @@ -2728,6 +2760,17 @@ namespace ts { fileNames: string[]; raw?: any; errors: Diagnostic[]; + wildcardDirectories?: Map; + } + + export const enum WatchDirectoryFlags { + None = 0, + Recursive = 1 << 0, + } + + export interface ExpandResult { + fileNames: string[]; + wildcardDirectories: Map; } /* @internal */ @@ -3063,16 +3106,17 @@ namespace ts { ExportName = 1 << 17, // Ensure an export prefix is added for an identifier that points to an exported declaration with a local name (see SymbolFlags.ExportHasLocal). LocalName = 1 << 18, // Ensure an export prefix is not added for an identifier that points to an exported declaration. Indented = 1 << 19, // Adds an explicit extra indentation level for class and function bodies when printing (used to match old emitter). - AsyncFunctionBody = 1 << 20, - ReuseTempVariableScope = 1 << 21, // Reuse the existing temp variable scope during emit. - CustomPrologue = 1 << 22, // Treat the statement as if it were a prologue directive (NOTE: Prologue directives are *not* transformed). + NoIndentation = 1 << 20, // Do not indent the node. + AsyncFunctionBody = 1 << 21, + ReuseTempVariableScope = 1 << 22, // Reuse the existing temp variable scope during emit. + CustomPrologue = 1 << 23, // Treat the statement as if it were a prologue directive (NOTE: Prologue directives are *not* transformed). // SourceMap Specialization. // TODO(rbuckton): These should be removed once source maps are aligned with the old // emitter and new baselines are taken. This exists solely to // align with the old emitter. - SourceMapEmitOpenBraceAsToken = 1 << 22, // Emits the open brace of a block function body as a source mapped token. - SourceMapAdjustRestParameterLoop = 1 << 23, // Emits adjusted source map positions for a ForStatement generated when transforming a rest parameter for ES5/3. + SourceMapEmitOpenBraceAsToken = 1 << 24, // Emits the open brace of a block function body as a source mapped token. + SourceMapAdjustRestParameterLoop = 1 << 25, // Emits adjusted source map positions for a ForStatement generated when transforming a rest parameter for ES5/3. } /** Additional context provided to `visitEachChild` */ diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 9c080d6f0af..a8222d0ebc5 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -31,6 +31,9 @@ namespace ts { export interface EmitHost extends ScriptReferenceHost { getSourceFiles(): SourceFile[]; + /* @internal */ + isSourceFileFromExternalLibrary(file: SourceFile): boolean; + getCommonSourceDirectory(): string; getCanonicalFileName(fileName: string): string; getNewLine(): string; @@ -1725,7 +1728,7 @@ namespace ts { node.kind === SyntaxKind.ExportAssignment && (node).expression.kind === SyntaxKind.Identifier; } - export function getClassExtendsHeritageClauseElement(node: ClassLikeDeclaration) { + export function getClassExtendsHeritageClauseElement(node: ClassLikeDeclaration | InterfaceDeclaration) { const heritageClause = getHeritageClause(node.heritageClauses, SyntaxKind.ExtendsKeyword); return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined; } @@ -2563,7 +2566,8 @@ namespace ts { } else { for (const sourceFile of sourceFiles) { - if (!isDeclarationFile(sourceFile)) { + // Don't emit if source file is a declaration file, or was located under node_modules + if (!isDeclarationFile(sourceFile) && !host.isSourceFileFromExternalLibrary(sourceFile)) { onSingleFileEmit(host, sourceFile); } } @@ -2625,7 +2629,8 @@ namespace ts { else { const sourceFiles = targetSourceFile === undefined ? host.getSourceFiles() : [targetSourceFile]; for (const sourceFile of sourceFiles) { - if (!isDeclarationFile(sourceFile)) { + // Don't emit if source file is a declaration file, or was located under node_modules + if (!isDeclarationFile(sourceFile) && !host.isSourceFileFromExternalLibrary(sourceFile)) { onSingleFileEmit(host, sourceFile); } } @@ -2657,12 +2662,13 @@ namespace ts { } function onBundledEmit(host: EmitHost) { - const moduleKind = getEmitModuleKind(options); - const moduleEmitEnabled = moduleKind === ModuleKind.AMD || moduleKind === ModuleKind.System; - // Can emit only sources that are not declaration file and are either non module code or module with --module or --target es6 specified - const bundledSources = filter(host.getSourceFiles(), sourceFile => - !isDeclarationFile(sourceFile) // Not a declaration file - && (!isExternalModule(sourceFile) || moduleEmitEnabled)); // and not a module, unless module emit enabled + // Can emit only sources that are not declaration file and are either non module code or module with + // --module or --target es6 specified. Files included by searching under node_modules are also not emitted. + const bundledSources = filter(host.getSourceFiles(), + sourceFile => !isDeclarationFile(sourceFile) && + !host.isSourceFileFromExternalLibrary(sourceFile) && + (!isExternalModule(sourceFile) || + !!getEmitModuleKind(options))); if (bundledSources.length) { const jsFilePath = options.outFile || options.out; @@ -2678,7 +2684,9 @@ namespace ts { export function getSourceFilePathInNewDir(sourceFile: SourceFile, host: EmitHost, newDirPath: string) { let sourceFilePath = getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); - sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); + const commonSourceDirectory = host.getCommonSourceDirectory(); + const isSourceFileInCommonSourceDirectory = host.getCanonicalFileName(sourceFilePath).indexOf(host.getCanonicalFileName(commonSourceDirectory)) === 0; + sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath; return combinePaths(newDirPath, sourceFilePath); } @@ -2971,7 +2979,7 @@ namespace ts { function calculateIndent(text: string, pos: number, end: number) { let currentLineIndent = 0; - for (; pos < end && isWhiteSpace(text.charCodeAt(pos)); pos++) { + for (; pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) { if (text.charCodeAt(pos) === CharacterCodes.tab) { // Tabs = TabSize = indent size and go to next tabStop currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); @@ -3100,6 +3108,10 @@ namespace ts { return forEach(supportedJavascriptExtensions, extension => fileExtensionIs(fileName, extension)); } + export function hasTypeScriptFileExtension(fileName: string) { + return forEach(supportedTypeScriptExtensions, extension => fileExtensionIs(fileName, extension)); + } + /** * Replace each instance of non-ascii characters by one, two, three, or four escape sequences * representing the UTF-8 encoding of the character, and return the expanded char code list. diff --git a/src/harness/external/chai.d.ts b/src/harness/external/chai.d.ts index 59cf2834b27..5e4e6e7d000 100644 --- a/src/harness/external/chai.d.ts +++ b/src/harness/external/chai.d.ts @@ -167,8 +167,13 @@ declare module chai { module assert { function equal(actual: any, expected: any, message?: string): void; function notEqual(actual: any, expected: any, message?: string): void; + function deepEqual(actual: T, expected: T, message?: string): void; + function notDeepEqual(actual: T, expected: T, message?: string): void; + function lengthOf(object: any[], length: number, message?: string): void; function isTrue(value: any, message?: string): void; function isFalse(value: any, message?: string): void; function isOk(actual: any, message?: string): void; + function isUndefined(value: any, message?: string): void; + function isDefined(value: any, message?: string): void; } } \ No newline at end of file diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 854afb12665..c5c582ba016 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -310,6 +310,7 @@ namespace FourSlash { } this.formatCodeOptions = { + BaseIndentSize: 0, IndentSize: 4, TabSize: 4, NewLineCharacter: Harness.IO.newLine(), @@ -323,6 +324,7 @@ namespace FourSlash { InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, + InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false, PlaceOpenBraceOnNewLineForFunctions: false, PlaceOpenBraceOnNewLineForControlBlocks: false, }; @@ -730,30 +732,6 @@ namespace FourSlash { } } - public verifyReferencesAtPositionListContains(fileName: string, start: number, end: number, isWriteAccess?: boolean, isDefinition?: boolean) { - const references = this.getReferencesAtCaret(); - - if (!references || references.length === 0) { - this.raiseError("verifyReferencesAtPositionListContains failed - found 0 references, expected at least one."); - } - - for (let i = 0; i < references.length; i++) { - const reference = references[i]; - if (reference && reference.fileName === fileName && reference.textSpan.start === start && ts.textSpanEnd(reference.textSpan) === end) { - if (typeof isWriteAccess !== "undefined" && reference.isWriteAccess !== isWriteAccess) { - this.raiseError(`verifyReferencesAtPositionListContains failed - item isWriteAccess value does not match, actual: ${reference.isWriteAccess}, expected: ${isWriteAccess}.`); - } - if (typeof isDefinition !== "undefined" && reference.isDefinition !== isDefinition) { - this.raiseError(`verifyReferencesAtPositionListContains failed - item isDefinition value does not match, actual: ${reference.isDefinition}, expected: ${isDefinition}.`); - } - return; - } - } - - const missingItem = { fileName, start, end, isWriteAccess, isDefinition }; - this.raiseError(`verifyReferencesAtPositionListContains failed - could not find the item: ${stringify(missingItem)} in the returned list: (${stringify(references)})`); - } - public verifyReferencesCountIs(count: number, localFilesOnly = true) { const references = this.getReferencesAtCaret(); let referencesCount = 0; @@ -777,6 +755,68 @@ namespace FourSlash { } } + public verifyReferencesAre(expectedReferences: Range[]) { + const actualReferences = this.getReferencesAtCaret() || []; + + if (actualReferences.length > expectedReferences.length) { + // Find the unaccounted-for reference. + for (const actual of actualReferences) { + if (!ts.forEach(expectedReferences, r => r.start === actual.textSpan.start)) { + this.raiseError(`A reference ${stringify(actual)} is unaccounted for.`); + } + } + // Probably will never reach here. + this.raiseError(`There are ${actualReferences.length} references but only ${expectedReferences.length} were expected.`); + } + + for (const reference of expectedReferences) { + const {fileName, start, end} = reference; + if (reference.marker && reference.marker.data) { + const {isWriteAccess, isDefinition} = reference.marker.data; + this.verifyReferencesWorker(actualReferences, fileName, start, end, isWriteAccess, isDefinition); + } + else { + this.verifyReferencesWorker(actualReferences, fileName, start, end); + } + } + } + + public verifyReferencesOf({fileName, start}: Range, references: Range[]) { + this.openFile(fileName); + this.goToPosition(start); + this.verifyReferencesAre(references); + } + + public verifyRangesReferenceEachOther(ranges?: Range[]) { + ranges = ranges || this.getRanges(); + assert(ranges.length); + for (const range of ranges) { + this.verifyReferencesOf(range, ranges); + } + } + + public verifyRangesWithSameTextReferenceEachOther() { + ts.forEachValue(this.rangesByText(), ranges => this.verifyRangesReferenceEachOther(ranges)); + } + + private verifyReferencesWorker(references: ts.ReferenceEntry[], fileName: string, start: number, end: number, isWriteAccess?: boolean, isDefinition?: boolean) { + for (let i = 0; i < references.length; i++) { + const reference = references[i]; + if (reference && reference.fileName === fileName && reference.textSpan.start === start && ts.textSpanEnd(reference.textSpan) === end) { + if (typeof isWriteAccess !== "undefined" && reference.isWriteAccess !== isWriteAccess) { + this.raiseError(`verifyReferencesAtPositionListContains failed - item isWriteAccess value does not match, actual: ${reference.isWriteAccess}, expected: ${isWriteAccess}.`); + } + if (typeof isDefinition !== "undefined" && reference.isDefinition !== isDefinition) { + this.raiseError(`verifyReferencesAtPositionListContains failed - item isDefinition value does not match, actual: ${reference.isDefinition}, expected: ${isDefinition}.`); + } + return; + } + } + + const missingItem = { fileName, start, end, isWriteAccess, isDefinition }; + this.raiseError(`verifyReferencesAtPositionListContains failed - could not find the item: ${stringify(missingItem)} in the returned list: (${stringify(references)})`); + } + private getMemberListAtCaret() { return this.languageService.getCompletionsAtPosition(this.activeFile.fileName, this.currentCaretPosition); } @@ -864,13 +904,13 @@ namespace FourSlash { assert.equal(getDisplayPartsJson(actualQuickInfo.documentation), getDisplayPartsJson(documentation), this.messageAtLastKnownMarker("QuickInfo documentation")); } - public verifyRenameLocations(findInStrings: boolean, findInComments: boolean) { + public verifyRenameLocations(findInStrings: boolean, findInComments: boolean, ranges?: Range[]) { const renameInfo = this.languageService.getRenameInfo(this.activeFile.fileName, this.currentCaretPosition); if (renameInfo.canRename) { let references = this.languageService.findRenameLocations( this.activeFile.fileName, this.currentCaretPosition, findInStrings, findInComments); - let ranges = this.getRanges(); + ranges = ranges || this.getRanges(); if (!references) { if (ranges.length !== 0) { @@ -1498,19 +1538,32 @@ namespace FourSlash { } private updateMarkersForEdit(fileName: string, minChar: number, limChar: number, text: string) { - for (let i = 0; i < this.testData.markers.length; i++) { - const marker = this.testData.markers[i]; + for (const marker of this.testData.markers) { if (marker.fileName === fileName) { - if (marker.position > minChar) { - if (marker.position < limChar) { - // Marker is inside the edit - mark it as invalidated (?) - marker.position = -1; - } - else { - // Move marker back/forward by the appropriate amount - marker.position += (minChar - limChar) + text.length; - } + marker.position = updatePosition(marker.position); + } + } + + for (const range of this.testData.ranges) { + if (range.fileName === fileName) { + range.start = updatePosition(range.start); + range.end = updatePosition(range.end); + } + } + + function updatePosition(position: number) { + if (position > minChar) { + if (position < limChar) { + // Inside the edit - mark it as invalidated (?) + return -1; } + else { + // Move marker back/forward by the appropriate amount + return position + (minChar - limChar) + text.length; + } + } + else { + return position; } } } @@ -1605,8 +1658,20 @@ namespace FourSlash { } public getRanges(): Range[] { - // Return a copy of the list - return this.testData.ranges.slice(0); + return this.testData.ranges; + } + + public rangesByText(): ts.Map { + const result: ts.Map = {}; + for (const range of this.getRanges()) { + const text = this.rangeText(range); + (ts.getProperty(result, text) || (result[text] = [])).push(range); + } + return result; + } + + private rangeText({fileName, start, end}: Range, more = false): string { + return this.getFileContent(fileName).slice(start, end); } public verifyCaretAtMarker(markerName = "") { @@ -1619,24 +1684,25 @@ namespace FourSlash { } } - private getIndentation(fileName: string, position: number, indentStyle: ts.IndentStyle): number { + private getIndentation(fileName: string, position: number, indentStyle: ts.IndentStyle, baseIndentSize: number): number { const formatOptions = ts.clone(this.formatCodeOptions); formatOptions.IndentStyle = indentStyle; + formatOptions.BaseIndentSize = baseIndentSize; return this.languageService.getIndentationAtPosition(fileName, position, formatOptions); } - public verifyIndentationAtCurrentPosition(numberOfSpaces: number, indentStyle: ts.IndentStyle = ts.IndentStyle.Smart) { - const actual = this.getIndentation(this.activeFile.fileName, this.currentCaretPosition, indentStyle); + public verifyIndentationAtCurrentPosition(numberOfSpaces: number, indentStyle: ts.IndentStyle = ts.IndentStyle.Smart, baseIndentSize = 0) { + const actual = this.getIndentation(this.activeFile.fileName, this.currentCaretPosition, indentStyle, baseIndentSize); const lineCol = this.getLineColStringAtPosition(this.currentCaretPosition); if (actual !== numberOfSpaces) { this.raiseError(`verifyIndentationAtCurrentPosition failed at ${lineCol} - expected: ${numberOfSpaces}, actual: ${actual}`); } } - public verifyIndentationAtPosition(fileName: string, position: number, numberOfSpaces: number, indentStyle: ts.IndentStyle = ts.IndentStyle.Smart) { - const actual = this.getIndentation(fileName, position, indentStyle); + public verifyIndentationAtPosition(fileName: string, position: number, numberOfSpaces: number, indentStyle: ts.IndentStyle = ts.IndentStyle.Smart, baseIndentSize = 0) { + const actual = this.getIndentation(fileName, position, indentStyle, baseIndentSize); const lineCol = this.getLineColStringAtPosition(position); if (actual !== numberOfSpaces) { this.raiseError(`verifyIndentationAtPosition failed at ${lineCol} - expected: ${numberOfSpaces}, actual: ${actual}`); @@ -1852,7 +1918,7 @@ namespace FourSlash { }); } - public verifyBraceCompletionAtPostion(negative: boolean, openingBrace: string) { + public verifyBraceCompletionAtPosition(negative: boolean, openingBrace: string) { const openBraceMap: ts.Map = { "(": ts.CharacterCodes.openParen, @@ -1872,7 +1938,7 @@ namespace FourSlash { const position = this.currentCaretPosition; - const validBraceCompletion = this.languageService.isValidBraceCompletionAtPostion(this.activeFile.fileName, position, charCode); + const validBraceCompletion = this.languageService.isValidBraceCompletionAtPosition(this.activeFile.fileName, position, charCode); if (!negative && !validBraceCompletion) { this.raiseError(`${position} is not a valid brace completion position for ${openingBrace}`); @@ -2729,6 +2795,10 @@ namespace FourSlashInterface { return this.state.getRanges(); } + public rangesByText(): ts.Map { + return this.state.rangesByText(); + } + public markerByName(s: string): FourSlash.Marker { return this.state.getMarkerByName(s); } @@ -2836,14 +2906,6 @@ namespace FourSlashInterface { this.state.verifyMemberListIsEmpty(this.negative); } - public referencesCountIs(count: number) { - this.state.verifyReferencesCountIs(count, /*localFilesOnly*/ false); - } - - public referencesAtPositionContains(range: FourSlash.Range, isWriteAccess?: boolean, isDefinition?: boolean) { - this.state.verifyReferencesAtPositionListContains(range.fileName, range.start, range.end, isWriteAccess, isDefinition); - } - public signatureHelpPresent() { this.state.verifySignatureHelpPresent(!this.negative); } @@ -2884,8 +2946,8 @@ namespace FourSlashInterface { this.state.verifyDefinitionsName(this.negative, name, containerName); } - public isValidBraceCompletionAtPostion(openingBrace: string) { - this.state.verifyBraceCompletionAtPostion(this.negative, openingBrace); + public isValidBraceCompletionAtPosition(openingBrace: string) { + this.state.verifyBraceCompletionAtPosition(this.negative, openingBrace); } } @@ -2902,8 +2964,8 @@ namespace FourSlashInterface { this.state.verifyIndentationAtCurrentPosition(numberOfSpaces); } - public indentationAtPositionIs(fileName: string, position: number, numberOfSpaces: number, indentStyle = ts.IndentStyle.Smart) { - this.state.verifyIndentationAtPosition(fileName, position, numberOfSpaces, indentStyle); + public indentationAtPositionIs(fileName: string, position: number, numberOfSpaces: number, indentStyle = ts.IndentStyle.Smart, baseIndentSize = 0) { + this.state.verifyIndentationAtPosition(fileName, position, numberOfSpaces, indentStyle, baseIndentSize); } public textAtCaretIs(text: string) { @@ -2935,6 +2997,26 @@ namespace FourSlashInterface { this.state.verifyGetEmitOutputContentsForCurrentFile(expected); } + public referencesCountIs(count: number) { + this.state.verifyReferencesCountIs(count, /*localFilesOnly*/ false); + } + + public referencesAre(ranges: FourSlash.Range[]) { + this.state.verifyReferencesAre(ranges); + } + + public referencesOf(start: FourSlash.Range, references: FourSlash.Range[]) { + this.state.verifyReferencesOf(start, references); + } + + public rangesReferenceEachOther(ranges?: FourSlash.Range[]) { + this.state.verifyRangesReferenceEachOther(ranges); + } + + public rangesWithSameTextReferenceEachOther() { + this.state.verifyRangesWithSameTextReferenceEachOther(); + } + public currentParameterHelpArgumentNameIs(name: string) { this.state.verifyCurrentParameterHelpName(name); } @@ -3077,8 +3159,8 @@ namespace FourSlashInterface { this.state.verifyRenameInfoFailed(message); } - public renameLocations(findInStrings: boolean, findInComments: boolean) { - this.state.verifyRenameLocations(findInStrings, findInComments); + public renameLocations(findInStrings: boolean, findInComments: boolean, ranges?: FourSlash.Range[]) { + this.state.verifyRenameLocations(findInStrings, findInComments, ranges); } public verifyQuickInfoDisplayParts(kind: string, kindModifiers: string, textSpan: { start: number; length: number; }, diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 55258162d23..a185c406462 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -23,6 +23,7 @@ /// /// /// +/// // Block scoped definitions work poorly for global variables, temporarily enable var /* tslint:disable:no-var-keyword */ @@ -497,7 +498,7 @@ namespace Harness { args(): string[]; getExecutingFilePath(): string; exit(exitCode?: number): void; - readDirectory(path: string, extension?: string, exclude?: string[]): string[]; + readDirectory(path: string, extension?: string[], exclude?: string[], include?: string[]): string[]; tryEnableSourceMapsForHost?(): void; getEnvironmentVariable?(name: string): string; } @@ -538,8 +539,8 @@ namespace Harness { export const directoryExists: typeof IO.directoryExists = fso.FolderExists; export const fileExists: typeof IO.fileExists = fso.FileExists; export const log: typeof IO.log = global.WScript && global.WScript.StdOut.WriteLine; - export const readDirectory: typeof IO.readDirectory = (path, extension, exclude) => ts.sys.readDirectory(path, extension, exclude); export const getEnvironmentVariable: typeof IO.getEnvironmentVariable = name => ts.sys.getEnvironmentVariable(name); + export const readDirectory: typeof IO.readDirectory = (path, extension, exclude, include) => ts.sys.readDirectory(path, extension, exclude, include); export function createDirectory(path: string) { if (directoryExists(path)) { @@ -608,8 +609,6 @@ namespace Harness { export const writeFile: typeof IO.writeFile = (path, content) => ts.sys.writeFile(path, content); export const fileExists: typeof IO.fileExists = fs.existsSync; export const log: typeof IO.log = s => console.log(s); - - export const readDirectory: typeof IO.readDirectory = (path, extension, exclude) => ts.sys.readDirectory(path, extension, exclude); export const getEnvironmentVariable: typeof IO.getEnvironmentVariable = name => ts.sys.getEnvironmentVariable(name); export function tryEnableSourceMapsForHost() { @@ -617,6 +616,7 @@ namespace Harness { ts.sys.tryEnableSourceMapsForHost(); } } + export const readDirectory: typeof IO.readDirectory = (path, extension, exclude, include) => ts.sys.readDirectory(path, extension, exclude, include); export function createDirectory(path: string) { if (!directoryExists(path)) { @@ -813,8 +813,22 @@ namespace Harness { Http.writeToServerSync(serverRoot + path, "WRITE", contents); } - export function readDirectory(path: string, extension?: string, exclude?: string[]) { - return listFiles(path).filter(f => !extension || ts.fileExtensionIs(f, extension)); + export function readDirectory(path: string, extension?: string[], exclude?: string[], include?: string[]) { + const fs = new Utils.VirtualFileSystem(path, useCaseSensitiveFileNames()); + for (const file in listFiles(path)) { + fs.addFile(file); + } + return ts.matchFiles(path, extension, exclude, include, useCaseSensitiveFileNames(), getCurrentDirectory(), path => { + const entry = fs.traversePath(path); + if (entry && entry.isDirectory()) { + const directory = entry; + return { + files: ts.map(directory.getFiles(), f => f.name), + directories: ts.map(directory.getDirectories(), d => d.name) + }; + } + return { files: [], directories: [] }; + }); } } } @@ -1126,7 +1140,7 @@ namespace Harness { options.target = options.target || ts.ScriptTarget.ES3; options.newLine = options.newLine || ts.NewLineKind.CarriageReturnLineFeed; options.noErrorTruncation = true; - options.skipDefaultLibCheck = true; + options.skipDefaultLibCheck = typeof options.skipDefaultLibCheck === "undefined" ? true : options.skipDefaultLibCheck; if (typeof currentDirectory === "undefined") { currentDirectory = Harness.IO.getCurrentDirectory(); @@ -1606,7 +1620,9 @@ namespace Harness { // unit tests always list files explicitly const parseConfigHost: ts.ParseConfigHost = { - readDirectory: (name) => [] + useCaseSensitiveFileNames: false, + readDirectory: (name) => [], + fileExists: (name) => true }; // check if project has tsconfig.json in the list of files diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index bc0ed0b57c7..e17230aacf2 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -274,7 +274,7 @@ namespace Harness.LanguageService { getCompilationSettings(): string { return JSON.stringify(this.nativeHost.getCompilationSettings()); } getCancellationToken(): ts.HostCancellationToken { return this.nativeHost.getCancellationToken(); } getCurrentDirectory(): string { return this.nativeHost.getCurrentDirectory(); } - getDirectories(path: string) { return this.nativeHost.getDirectories(path); } + getDirectories(path: string): string { return JSON.stringify(this.nativeHost.getDirectories(path)); } getDefaultLibFileName(): string { return this.nativeHost.getDefaultLibFileName(); } getScriptFileNames(): string { return JSON.stringify(this.nativeHost.getScriptFileNames()); } getScriptSnapshot(fileName: string): ts.ScriptSnapshotShim { @@ -288,6 +288,12 @@ namespace Harness.LanguageService { readDirectory(rootDir: string, extension: string): string { throw new Error("NYI"); } + readDirectoryNames(path: string): string { + throw new Error("Not implemented."); + } + readFileNames(path: string): string { + throw new Error("Not implemented."); + } fileExists(fileName: string) { return this.getScriptInfo(fileName) !== undefined; } readFile(fileName: string) { const snapshot = this.nativeHost.getScriptSnapshot(fileName); @@ -444,8 +450,8 @@ namespace Harness.LanguageService { getDocCommentTemplateAtPosition(fileName: string, position: number): ts.TextInsertion { return unwrapJSONCallResult(this.shim.getDocCommentTemplateAtPosition(fileName, position)); } - isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): boolean { - return unwrapJSONCallResult(this.shim.isValidBraceCompletionAtPostion(fileName, position, openingBrace)); + isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean { + return unwrapJSONCallResult(this.shim.isValidBraceCompletionAtPosition(fileName, position, openingBrace)); } getEmitOutput(fileName: string): ts.EmitOutput { return unwrapJSONCallResult(this.shim.getEmitOutput(fileName)); @@ -615,7 +621,7 @@ namespace Harness.LanguageService { return ts.sys.getEnvironmentVariable(name); } - readDirectory(path: string, extension?: string): string[] { + readDirectory(path: string, extension?: string[], exclude?: string[], include?: string[]): string[] { throw new Error("Not implemented Yet."); } diff --git a/src/harness/loggedIO.ts b/src/harness/loggedIO.ts index 3535decf121..25e982cf680 100644 --- a/src/harness/loggedIO.ts +++ b/src/harness/loggedIO.ts @@ -8,7 +8,12 @@ interface FileInformation { } interface FindFileResult { +} +interface IOLogFile { + path: string; + codepage: number; + result?: FileInformation; } interface IOLog { @@ -17,11 +22,7 @@ interface IOLog { executingPath: string; currentDirectory: string; useCustomLibraryFile?: boolean; - filesRead: { - path: string; - codepage: number; - result?: FileInformation; - }[]; + filesRead: IOLogFile[]; filesWritten: { path: string; contents: string; @@ -61,8 +62,9 @@ interface IOLog { }[]; directoriesRead: { path: string, - extension: string, + extensions: string[], exclude: string[], + include: string[], result: string[] }[]; } @@ -169,8 +171,7 @@ namespace Playback { path => callAndRecord(underlying.fileExists(path), recordLog.fileExists, { path }), memoize(path => { // If we read from the file, it must exist - const noResult = {}; - if (findResultByPath(wrapper, replayLog.filesRead, path, noResult) !== noResult) { + if (findFileByPath(wrapper, replayLog.filesRead, path, /*throwFileNotFoundError*/ false)) { return true; } else { @@ -214,21 +215,30 @@ namespace Playback { recordLog.filesRead.push(logEntry); return result; }, - memoize(path => findResultByPath(wrapper, replayLog.filesRead, path).contents)); + memoize(path => findFileByPath(wrapper, replayLog.filesRead, path, /*throwFileNotFoundError*/ true).contents)); wrapper.readDirectory = recordReplay(wrapper.readDirectory, underlying)( - (path, extension, exclude) => { - const result = (underlying).readDirectory(path, extension, exclude); - const logEntry = { path, extension, exclude, result }; + (path, extensions, exclude, include) => { + const result = (underlying).readDirectory(path, extensions, exclude, include); + const logEntry = { path, extensions, exclude, include, result }; recordLog.directoriesRead.push(logEntry); return result; }, - (path, extension, exclude) => findResultByPath(wrapper, - replayLog.directoriesRead.filter( - d => { - return d.extension === extension; - } - ), path)); + (path, extensions, exclude) => { + // Because extensions is an array of all allowed extension, we will want to merge each of the replayLog.directoriesRead into one + // if each of the directoriesRead has matched path with the given path (directory with same path but different extension will considered + // different entry). + // TODO (yuisu): We can certainly remove these once we recapture the RWC using new API + const normalizedPath = ts.normalizePath(path).toLowerCase(); + const result: string[] = []; + for (const directory of replayLog.directoriesRead) { + if (ts.normalizeSlashes(directory.path).toLowerCase() === normalizedPath) { + result.push(...directory.result); + } + } + + return result; + }); wrapper.writeFile = recordReplay(wrapper.writeFile, underlying)( (path: string, contents: string) => callAndRecord(underlying.writeFile(path, contents), recordLog.filesWritten, { path, contents, bom: false }), @@ -283,30 +293,22 @@ namespace Playback { return results[0].result; } - function findResultByPath(wrapper: { resolvePath(s: string): string }, logArray: { path: string; result?: T }[], expectedPath: string, defaultValue?: T): T { + function findFileByPath(wrapper: { resolvePath(s: string): string }, logArray: IOLogFile[], + expectedPath: string, throwFileNotFoundError: boolean): FileInformation { const normalizedName = ts.normalizePath(expectedPath).toLowerCase(); // Try to find the result through normal fileName - for (let i = 0; i < logArray.length; i++) { - if (ts.normalizeSlashes(logArray[i].path).toLowerCase() === normalizedName) { - return logArray[i].result; - } - } - // Fallback, try to resolve the target paths as well - if (replayLog.pathsResolved.length > 0) { - const normalizedResolvedName = wrapper.resolvePath(expectedPath).toLowerCase(); - for (let i = 0; i < logArray.length; i++) { - if (wrapper.resolvePath(logArray[i].path).toLowerCase() === normalizedResolvedName) { - return logArray[i].result; - } + for (const log of logArray) { + if (ts.normalizeSlashes(log.path).toLowerCase() === normalizedName) { + return log.result; } } // If we got here, we didn't find a match - if (defaultValue === undefined) { + if (throwFileNotFoundError) { throw new Error("No matching result in log array for path: " + expectedPath); } else { - return defaultValue; + return undefined; } } diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 5cabbed1ec1..523fc3a7074 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -218,7 +218,12 @@ class ProjectRunner extends RunnerBase { } const configObject = result.config; - const configParseResult = ts.parseJsonConfigFileContent(configObject, { readDirectory }, ts.getDirectoryPath(configFileName), compilerOptions); + const configParseHost: ts.ParseConfigHost = { + useCaseSensitiveFileNames: Harness.IO.useCaseSensitiveFileNames(), + fileExists, + readDirectory, + }; + const configParseResult = ts.parseJsonConfigFileContent(configObject, configParseHost, ts.getDirectoryPath(configFileName), compilerOptions); if (configParseResult.errors.length > 0) { return { moduleKind, @@ -276,8 +281,8 @@ class ProjectRunner extends RunnerBase { : ts.normalizeSlashes(testCase.projectRoot) + "/" + ts.normalizeSlashes(fileName); } - function readDirectory(rootDir: string, extension: string, exclude: string[]): string[] { - const harnessReadDirectoryResult = Harness.IO.readDirectory(getFileNameInTheProjectTest(rootDir), extension, exclude); + function readDirectory(rootDir: string, extension: string[], exclude: string[], include: string[]): string[] { + const harnessReadDirectoryResult = Harness.IO.readDirectory(getFileNameInTheProjectTest(rootDir), extension, exclude, include); const result: string[] = []; for (let i = 0; i < harnessReadDirectoryResult.length; i++) { result[i] = ts.getRelativePathToDirectoryOrUrl(testCase.projectRoot, harnessReadDirectoryResult[i], @@ -473,8 +478,10 @@ class ProjectRunner extends RunnerBase { it("Baseline of emitted result (" + moduleNameToString(moduleKind) + "): " + testCaseFileName, () => { if (testCase.baselineCheck) { - let lastError: any = undefined; + const errs: Error[] = []; ts.forEach(compilerResult.outputFiles, outputFile => { + // There may be multiple files with different baselines. Run all and report at the end, else + // it stops copying the remaining emitted files from 'local/projectOutput' to 'local/project'. try { Harness.Baseline.runBaseline("Baseline of emitted result (" + moduleNameToString(compilerResult.moduleKind) + "): " + testCaseFileName, getBaselineFolder(compilerResult.moduleKind) + outputFile.fileName, () => { try { @@ -486,16 +493,16 @@ class ProjectRunner extends RunnerBase { }); } catch (e) { - lastError = e; + errs.push(e); } }); - - if (lastError) { - throw lastError; + if (errs.length) { + throw Error(errs.join("\n ")); } } }); + // it("SourceMapRecord for (" + moduleNameToString(moduleKind) + "): " + testCaseFileName, () => { // if (compilerResult.sourceMapData) { // Harness.Baseline.runBaseline("SourceMapRecord for (" + moduleNameToString(compilerResult.moduleKind) + "): " + testCaseFileName, getBaselineFolder(compilerResult.moduleKind) + testCaseJustName + ".sourcemap.txt", () => { diff --git a/src/harness/runner.ts b/src/harness/runner.ts index c3bd015910c..f8df1c51683 100644 --- a/src/harness/runner.ts +++ b/src/harness/runner.ts @@ -201,7 +201,7 @@ if (taskConfigsFolder) { for (let i = 0; i < workerCount; i++) { const startPos = i * chunkSize; const len = Math.min(chunkSize, files.length - startPos); - if (len !== 0) { + if (len > 0) { workerConfigs[i].tasks.push({ runner: runner.kind(), files: files.slice(startPos, startPos + len) @@ -222,5 +222,5 @@ else { } if (!runUnitTests) { // patch `describe` to skip unit tests - describe = describe.skip; -} \ No newline at end of file + describe = (function () { }); +} diff --git a/src/harness/runnerbase.ts b/src/harness/runnerbase.ts index a16eddcbeec..346382b7a57 100644 --- a/src/harness/runnerbase.ts +++ b/src/harness/runnerbase.ts @@ -31,18 +31,12 @@ abstract class RunnerBase { /** Replaces instances of full paths with fileNames only */ static removeFullPaths(path: string) { - let fixedPath = path; - - // full paths either start with a drive letter or / for *nix, shouldn't have \ in the path at this point - const fullPath = /(\w+:|\/)?([\w+\-\.]|\/)*\.tsx?/g; - const fullPathList = fixedPath.match(fullPath); - if (fullPathList) { - fullPathList.forEach((match: string) => fixedPath = fixedPath.replace(match, Harness.Path.getFileName(match))); - } + // If its a full path (starts with "C:" or "/") replace with just the filename + let fixedPath = /^(\w:|\/)/.test(path) ? Harness.Path.getFileName(path) : path; // when running in the browser the 'full path' is the host name, shows up in error baselines const localHost = /http:\/localhost:\d+/g; fixedPath = fixedPath.replace(localHost, ""); return fixedPath; } -} \ No newline at end of file +} diff --git a/src/harness/rwcRunner.ts b/src/harness/rwcRunner.ts index 2ca69b09126..1266ffa5d37 100644 --- a/src/harness/rwcRunner.ts +++ b/src/harness/rwcRunner.ts @@ -75,7 +75,12 @@ namespace RWC { if (tsconfigFile) { const tsconfigFileContents = getHarnessCompilerInputUnit(tsconfigFile.path); const parsedTsconfigFileContents = ts.parseConfigFileTextToJson(tsconfigFile.path, tsconfigFileContents.content); - const configParseResult = ts.parseJsonConfigFileContent(parsedTsconfigFileContents.config, Harness.IO, ts.getDirectoryPath(tsconfigFile.path)); + const configParseHost: ts.ParseConfigHost = { + useCaseSensitiveFileNames: Harness.IO.useCaseSensitiveFileNames(), + fileExists: Harness.IO.fileExists, + readDirectory: Harness.IO.readDirectory, + }; + const configParseResult = ts.parseJsonConfigFileContent(parsedTsconfigFileContents.config, configParseHost, ts.getDirectoryPath(tsconfigFile.path)); fileNames = configParseResult.fileNames; opts.options = ts.extend(opts.options, configParseResult.options); } diff --git a/src/harness/virtualFileSystem.ts b/src/harness/virtualFileSystem.ts new file mode 100644 index 00000000000..30192b8b8ec --- /dev/null +++ b/src/harness/virtualFileSystem.ts @@ -0,0 +1,186 @@ +/// +/// +namespace Utils { + export class VirtualFileSystemEntry { + fileSystem: VirtualFileSystem; + name: string; + + constructor(fileSystem: VirtualFileSystem, name: string) { + this.fileSystem = fileSystem; + this.name = name; + } + + isDirectory() { return false; } + isFile() { return false; } + isFileSystem() { return false; } + } + + export class VirtualFile extends VirtualFileSystemEntry { + content: string; + isFile() { return true; } + } + + export abstract class VirtualFileSystemContainer extends VirtualFileSystemEntry { + abstract getFileSystemEntries(): VirtualFileSystemEntry[]; + + getFileSystemEntry(name: string): VirtualFileSystemEntry { + for (const entry of this.getFileSystemEntries()) { + if (this.fileSystem.sameName(entry.name, name)) { + return entry; + } + } + return undefined; + } + + getDirectories(): VirtualDirectory[] { + return ts.filter(this.getFileSystemEntries(), entry => entry.isDirectory()); + } + + getFiles(): VirtualFile[] { + return ts.filter(this.getFileSystemEntries(), entry => entry.isFile()); + } + + getDirectory(name: string): VirtualDirectory { + const entry = this.getFileSystemEntry(name); + return entry.isDirectory() ? entry : undefined; + } + + getFile(name: string): VirtualFile { + const entry = this.getFileSystemEntry(name); + return entry.isFile() ? entry : undefined; + } + } + + export class VirtualDirectory extends VirtualFileSystemContainer { + private entries: VirtualFileSystemEntry[] = []; + + isDirectory() { return true; } + + getFileSystemEntries() { return this.entries.slice(); } + + addDirectory(name: string): VirtualDirectory { + const entry = this.getFileSystemEntry(name); + if (entry === undefined) { + const directory = new VirtualDirectory(this.fileSystem, name); + this.entries.push(directory); + return directory; + } + else if (entry.isDirectory()) { + return entry; + } + else { + return undefined; + } + } + + addFile(name: string, content?: string): VirtualFile { + const entry = this.getFileSystemEntry(name); + if (entry === undefined) { + const file = new VirtualFile(this.fileSystem, name); + file.content = content; + this.entries.push(file); + return file; + } + else if (entry.isFile()) { + const file = entry; + file.content = content; + return file; + } + else { + return undefined; + } + } + } + + export class VirtualFileSystem extends VirtualFileSystemContainer { + private root: VirtualDirectory; + + currentDirectory: string; + useCaseSensitiveFileNames: boolean; + + constructor(currentDirectory: string, useCaseSensitiveFileNames: boolean) { + super(undefined, ""); + this.fileSystem = this; + this.root = new VirtualDirectory(this, ""); + this.currentDirectory = currentDirectory; + this.useCaseSensitiveFileNames = useCaseSensitiveFileNames; + } + + isFileSystem() { return true; } + + getFileSystemEntries() { return this.root.getFileSystemEntries(); } + + addDirectory(path: string) { + const components = ts.getNormalizedPathComponents(path, this.currentDirectory); + let directory: VirtualDirectory = this.root; + for (const component of components) { + directory = directory.addDirectory(component); + if (directory === undefined) { + break; + } + } + + return directory; + } + + addFile(path: string, content?: string) { + const absolutePath = ts.getNormalizedAbsolutePath(path, this.currentDirectory); + const fileName = ts.getBaseFileName(path); + const directoryPath = ts.getDirectoryPath(absolutePath); + const directory = this.addDirectory(directoryPath); + return directory ? directory.addFile(fileName, content) : undefined; + } + + fileExists(path: string) { + const entry = this.traversePath(path); + return entry !== undefined && entry.isFile(); + } + + sameName(a: string, b: string) { + return this.useCaseSensitiveFileNames ? a === b : a.toLowerCase() === b.toLowerCase(); + } + + traversePath(path: string) { + let directory: VirtualDirectory = this.root; + for (const component of ts.getNormalizedPathComponents(path, this.currentDirectory)) { + const entry = directory.getFileSystemEntry(component); + if (entry === undefined) { + return undefined; + } + else if (entry.isDirectory()) { + directory = entry; + } + else { + return entry; + } + } + + return directory; + } + } + + export class MockParseConfigHost extends VirtualFileSystem implements ts.ParseConfigHost { + constructor(currentDirectory: string, ignoreCase: boolean, files: string[]) { + super(currentDirectory, ignoreCase); + for (const file of files) { + this.addFile(file); + } + } + + readDirectory(path: string, extensions: string[], excludes: string[], includes: string[]) { + return ts.matchFiles(path, extensions, excludes, includes, this.useCaseSensitiveFileNames, this.currentDirectory, (path: string) => this.getAccessibleFileSystemEntries(path)); + } + + getAccessibleFileSystemEntries(path: string) { + const entry = this.traversePath(path); + if (entry && entry.isDirectory()) { + const directory = entry; + return { + files: ts.map(directory.getFiles(), f => f.name), + directories: ts.map(directory.getDirectories(), d => d.name) + }; + } + return { files: [], directories: [] }; + } + } +} \ No newline at end of file diff --git a/src/lib/dom.generated.d.ts b/src/lib/dom.generated.d.ts index 5865e485754..d2938f6e983 100644 --- a/src/lib/dom.generated.d.ts +++ b/src/lib/dom.generated.d.ts @@ -4,7 +4,7 @@ ///////////////////////////// interface Algorithm { - name?: string; + name: string; } interface AriaRequestEventInit extends EventInit { @@ -851,6 +851,7 @@ interface UIEventInit extends EventInit { } interface WebGLContextAttributes { + failIfMajorPerformanceCaveat?: boolean; alpha?: boolean; depth?: boolean; stencil?: boolean; @@ -916,14 +917,14 @@ declare var AnimationEvent: { } interface ApplicationCache extends EventTarget { - oncached: (ev: Event) => any; - onchecking: (ev: Event) => any; - ondownloading: (ev: Event) => any; - onerror: (ev: Event) => any; - onnoupdate: (ev: Event) => any; - onobsolete: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - onupdateready: (ev: Event) => any; + oncached: (this: this, ev: Event) => any; + onchecking: (this: this, ev: Event) => any; + ondownloading: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onnoupdate: (this: this, ev: Event) => any; + onobsolete: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onupdateready: (this: this, ev: Event) => any; readonly status: number; abort(): void; swapCache(): void; @@ -934,14 +935,14 @@ interface ApplicationCache extends EventTarget { readonly OBSOLETE: number; readonly UNCACHED: number; readonly UPDATEREADY: number; - addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cached", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "checking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "downloading", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "noupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "obsolete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "updateready", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -1000,11 +1001,11 @@ interface AudioBufferSourceNode extends AudioNode { loop: boolean; loopEnd: number; loopStart: number; - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; readonly playbackRate: AudioParam; start(when?: number, offset?: number, duration?: number): void; stop(when?: number): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -1128,14 +1129,14 @@ declare var AudioTrack: { interface AudioTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; - onchange: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + onchange: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; 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; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: AudioTrack; } @@ -2410,294 +2411,294 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Fires when the user aborts the download. * @param ev The event. */ - onabort: (ev: Event) => any; + onabort: (this: this, ev: UIEvent) => any; /** * Fires when the object is set as the active element. * @param ev The event. */ - onactivate: (ev: UIEvent) => any; + onactivate: (this: this, ev: UIEvent) => any; /** * Fires immediately before the object is set as the active element. * @param ev The event. */ - onbeforeactivate: (ev: UIEvent) => any; + onbeforeactivate: (this: this, ev: UIEvent) => any; /** * Fires immediately before the activeElement is changed from the current object to another object in the parent document. * @param ev The event. */ - onbeforedeactivate: (ev: UIEvent) => any; + onbeforedeactivate: (this: this, ev: UIEvent) => any; /** * Fires when the object loses the input focus. * @param ev The focus event. */ - onblur: (ev: FocusEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; /** * Occurs when playback is possible, but would require further buffering. * @param ev The event. */ - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; /** * Fires when the contents of the object or selection have changed. * @param ev The event. */ - onchange: (ev: Event) => any; + onchange: (this: this, ev: Event) => any; /** * Fires when the user clicks the left mouse button on the object * @param ev The mouse event. */ - onclick: (ev: MouseEvent) => any; + onclick: (this: this, ev: MouseEvent) => any; /** * Fires when the user clicks the right mouse button in the client area, opening the context menu. * @param ev The mouse event. */ - oncontextmenu: (ev: PointerEvent) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; /** * Fires when the user double-clicks the object. * @param ev The mouse event. */ - ondblclick: (ev: MouseEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; /** * Fires when the activeElement is changed from the current object to another object in the parent document. * @param ev The UI Event */ - ondeactivate: (ev: UIEvent) => any; + ondeactivate: (this: this, ev: UIEvent) => any; /** * Fires on the source object continuously during a drag operation. * @param ev The event. */ - ondrag: (ev: DragEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; /** * Fires on the source object when the user releases the mouse at the close of a drag operation. * @param ev The event. */ - ondragend: (ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; /** * Fires on the target element when the user drags the object to a valid drop target. * @param ev The drag event. */ - ondragenter: (ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; /** * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation. * @param ev The drag event. */ - ondragleave: (ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; /** * Fires on the target element continuously while the user drags the object over a valid drop target. * @param ev The event. */ - ondragover: (ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; /** * Fires on the source object when the user starts to drag a text selection or selected object. * @param ev The event. */ - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; /** * Occurs when the duration attribute is updated. * @param ev The event. */ - ondurationchange: (ev: Event) => any; + ondurationchange: (this: this, ev: Event) => any; /** * Occurs when the media element is reset to its initial state. * @param ev The event. */ - onemptied: (ev: Event) => any; + onemptied: (this: this, ev: Event) => any; /** * Occurs when the end of playback is reached. * @param ev The event */ - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; /** * Fires when an error occurs during object loading. * @param ev The event. */ - onerror: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; /** * Fires when the object receives focus. * @param ev The event. */ - onfocus: (ev: FocusEvent) => any; - onfullscreenchange: (ev: Event) => any; - onfullscreenerror: (ev: Event) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onfullscreenchange: (this: this, ev: Event) => any; + onfullscreenerror: (this: this, ev: Event) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; /** * Fires when the user presses a key. * @param ev The keyboard event */ - onkeydown: (ev: KeyboardEvent) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; /** * Fires when the user presses an alphanumeric key. * @param ev The event. */ - onkeypress: (ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; /** * Fires when the user releases a key. * @param ev The keyboard event */ - onkeyup: (ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; /** * Fires immediately after the browser loads the object. * @param ev The event. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; /** * Occurs when media data is loaded at the current playback position. * @param ev The event. */ - onloadeddata: (ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; /** * Occurs when the duration and dimensions of the media have been determined. * @param ev The event. */ - onloadedmetadata: (ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; /** * Occurs when Internet Explorer begins looking for media data. * @param ev The event. */ - onloadstart: (ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; /** * Fires when the user clicks the object with either mouse button. * @param ev The mouse event. */ - onmousedown: (ev: MouseEvent) => any; + onmousedown: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse over the object. * @param ev The mouse event. */ - onmousemove: (ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse pointer outside the boundaries of the object. * @param ev The mouse event. */ - onmouseout: (ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; /** * Fires when the user moves the mouse pointer into the object. * @param ev The mouse event. */ - onmouseover: (ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; /** * Fires when the user releases a mouse button while the mouse is over the object. * @param ev The mouse event. */ - onmouseup: (ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; /** * Fires when the wheel button is rotated. * @param ev The mouse event */ - onmousewheel: (ev: WheelEvent) => any; - onmscontentzoom: (ev: UIEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmscontentzoom: (this: this, ev: UIEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmsmanipulationstatechanged: (this: this, ev: MSManipulationEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; /** * Occurs when an item is removed from a Jump List of a webpage running in Site Mode. * @param ev The event. */ - onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any; + onmssitemodejumplistitemremoved: (this: this, ev: MSSiteModeEvent) => any; /** * Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode. * @param ev The event. */ - onmsthumbnailclick: (ev: MSSiteModeEvent) => any; + onmsthumbnailclick: (this: this, ev: MSSiteModeEvent) => any; /** * Occurs when playback is paused. * @param ev The event. */ - onpause: (ev: Event) => any; + onpause: (this: this, ev: Event) => any; /** * Occurs when the play method is requested. * @param ev The event. */ - onplay: (ev: Event) => any; + onplay: (this: this, ev: Event) => any; /** * Occurs when the audio or video has started playing. * @param ev The event. */ - onplaying: (ev: Event) => any; - onpointerlockchange: (ev: Event) => any; - onpointerlockerror: (ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onpointerlockchange: (this: this, ev: Event) => any; + onpointerlockerror: (this: this, ev: Event) => any; /** * Occurs to indicate progress while downloading media data. * @param ev The event. */ - onprogress: (ev: ProgressEvent) => any; + onprogress: (this: this, ev: ProgressEvent) => any; /** * Occurs when the playback rate is increased or decreased. * @param ev The event. */ - onratechange: (ev: Event) => any; + onratechange: (this: this, ev: Event) => any; /** * Fires when the state of the object has changed. * @param ev The event */ - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; /** * Fires when the user resets a form. * @param ev The event. */ - onreset: (ev: Event) => any; + onreset: (this: this, ev: Event) => any; /** * Fires when the user repositions the scroll box in the scroll bar on the object. * @param ev The event. */ - onscroll: (ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; /** * Occurs when the seek operation ends. * @param ev The event. */ - onseeked: (ev: Event) => any; + onseeked: (this: this, ev: Event) => any; /** * Occurs when the current playback position is moved. * @param ev The event. */ - onseeking: (ev: Event) => any; + onseeking: (this: this, ev: Event) => any; /** * Fires when the current selection changes. * @param ev The event. */ - onselect: (ev: UIEvent) => any; + onselect: (this: this, ev: UIEvent) => any; /** * Fires when the selection state of a document changes. * @param ev The event. */ - onselectionchange: (ev: Event) => any; - onselectstart: (ev: Event) => any; + onselectionchange: (this: this, ev: Event) => any; + onselectstart: (this: this, ev: Event) => any; /** * Occurs when the download has stopped. * @param ev The event. */ - onstalled: (ev: Event) => any; + onstalled: (this: this, ev: Event) => any; /** * Fires when the user clicks the Stop button or leaves the Web page. * @param ev The event. */ - onstop: (ev: Event) => any; - onsubmit: (ev: Event) => any; + onstop: (this: this, ev: Event) => any; + onsubmit: (this: this, ev: Event) => any; /** * Occurs if the load operation has been intentionally halted. * @param ev The event. */ - onsuspend: (ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; /** * Occurs to indicate the current playback position. * @param ev The event. */ - ontimeupdate: (ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; @@ -2706,14 +2707,14 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Occurs when the volume is changed, or playback is muted or unmuted. * @param ev The event. */ - onvolumechange: (ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; /** * Occurs when playback stops because the next frame of a video resource is not available. * @param ev The event. */ - onwaiting: (ev: Event) => any; - onwebkitfullscreenchange: (ev: Event) => any; - onwebkitfullscreenerror: (ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; + onwebkitfullscreenchange: (this: this, ev: Event) => any; + onwebkitfullscreenerror: (this: this, ev: Event) => any; plugins: HTMLCollectionOf; readonly pointerLockElement: Element; /** @@ -2988,7 +2989,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Returns a reference to the first object with the specified value of the ID or NAME attribute. * @param elementId String that specifies the ID value. Case-insensitive. */ - getElementById(elementId: string): HTMLElement; + getElementById(elementId: string): HTMLElement | null; getElementsByClassName(classNames: string): HTMLCollectionOf; /** * Gets a collection of objects based on the value of the NAME or ID attribute. @@ -3245,103 +3246,103 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param content The text and HTML tags to write. */ writeln(...content: string[]): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "fullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "fullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerlockchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointerlockerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectionchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "fullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "fullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mssitemodejumplistitemremoved", listener: (this: this, ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msthumbnailclick", listener: (this: this, ev: MSSiteModeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerlockchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointerlockerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectionchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stop", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -3429,33 +3430,33 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec id: string; msContentZoomFactor: number; readonly msRegionOverflow: string; - onariarequest: (ev: AriaRequestEvent) => any; - oncommand: (ev: CommandEvent) => any; - ongotpointercapture: (ev: PointerEvent) => any; - onlostpointercapture: (ev: PointerEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsgotpointercapture: (ev: MSPointerEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmslostpointercapture: (ev: MSPointerEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; + onariarequest: (this: this, ev: AriaRequestEvent) => any; + oncommand: (this: this, ev: CommandEvent) => any; + ongotpointercapture: (this: this, ev: PointerEvent) => any; + onlostpointercapture: (this: this, ev: PointerEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsgotpointercapture: (this: this, ev: MSPointerEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmslostpointercapture: (this: this, ev: MSPointerEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; ontouchstart: (ev: TouchEvent) => any; - onwebkitfullscreenchange: (ev: Event) => any; - onwebkitfullscreenerror: (ev: Event) => any; + onwebkitfullscreenchange: (this: this, ev: Event) => any; + onwebkitfullscreenerror: (this: this, ev: Event) => any; readonly prefix: string | null; readonly scrollHeight: number; scrollLeft: number; @@ -3463,7 +3464,7 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec readonly scrollWidth: number; readonly tagName: string; innerHTML: string; - getAttribute(name?: string): string | null; + getAttribute(name: string): string | null; getAttributeNS(namespaceURI: string, localName: string): string; getAttributeNode(name: string): Attr; getAttributeNodeNS(namespaceURI: string, localName: string): Attr; @@ -3673,42 +3674,43 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec webkitRequestFullscreen(): void; getElementsByClassName(classNames: string): NodeListOf; matches(selector: string): boolean; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + closest(selector: string): Element | null; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -4199,147 +4201,147 @@ interface HTMLBodyElement extends HTMLElement { bgProperties: string; link: any; noWrap: boolean; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onblur: (ev: FocusEvent) => any; - onerror: (ev: Event) => any; - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - onload: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onpopstate: (ev: PopStateEvent) => any; - onresize: (ev: UIEvent) => any; - onstorage: (ev: StorageEvent) => any; - onunload: (ev: Event) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + onload: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onpopstate: (this: this, ev: PopStateEvent) => any; + onresize: (this: this, ev: UIEvent) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onunload: (this: this, ev: Event) => any; text: any; vLink: any; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (this: this, ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -4432,9 +4434,9 @@ interface HTMLCanvasElement extends HTMLElement { * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas. * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl"); */ - getContext(contextId: "2d"): CanvasRenderingContext2D; - getContext(contextId: "experimental-webgl"): WebGLRenderingContext; - getContext(contextId: string, ...args: any[]): CanvasRenderingContext2D | WebGLRenderingContext; + getContext(contextId: "2d", contextAttributes?: Canvas2DContextAttributes): CanvasRenderingContext2D | null; + getContext(contextId: "webgl" | "experimental-webgl", contextAttributes?: WebGLContextAttributes): WebGLRenderingContext | null; + getContext(contextId: string, contextAttributes?: {}): CanvasRenderingContext2D | WebGLRenderingContext | null; /** * Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing. */ @@ -4444,7 +4446,7 @@ interface HTMLCanvasElement extends HTMLElement { * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image. */ toDataURL(type?: string, ...args: any[]): string; - toBlob(): Blob; + toBlob(callback: (result: Blob | null) => void, ... arguments: any[]): void; } declare var HTMLCanvasElement: { @@ -4542,73 +4544,73 @@ interface HTMLElement extends Element { readonly offsetParent: Element; readonly offsetTop: number; readonly offsetWidth: number; - onabort: (ev: Event) => any; - onactivate: (ev: UIEvent) => any; - onbeforeactivate: (ev: UIEvent) => any; - onbeforecopy: (ev: ClipboardEvent) => any; - onbeforecut: (ev: ClipboardEvent) => any; - onbeforedeactivate: (ev: UIEvent) => any; - onbeforepaste: (ev: ClipboardEvent) => any; - onblur: (ev: FocusEvent) => any; - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; - onchange: (ev: Event) => any; - onclick: (ev: MouseEvent) => any; - oncontextmenu: (ev: PointerEvent) => any; - oncopy: (ev: ClipboardEvent) => any; - oncuechange: (ev: Event) => any; - oncut: (ev: ClipboardEvent) => any; - ondblclick: (ev: MouseEvent) => any; - ondeactivate: (ev: UIEvent) => any; - ondrag: (ev: DragEvent) => any; - ondragend: (ev: DragEvent) => any; - ondragenter: (ev: DragEvent) => any; - ondragleave: (ev: DragEvent) => any; - ondragover: (ev: DragEvent) => any; - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; - ondurationchange: (ev: Event) => any; - onemptied: (ev: Event) => any; - onended: (ev: MediaStreamErrorEvent) => any; - onerror: (ev: Event) => any; - onfocus: (ev: FocusEvent) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; - onkeydown: (ev: KeyboardEvent) => any; - onkeypress: (ev: KeyboardEvent) => any; - onkeyup: (ev: KeyboardEvent) => any; - onload: (ev: Event) => any; - onloadeddata: (ev: Event) => any; - onloadedmetadata: (ev: Event) => any; - onloadstart: (ev: Event) => any; - onmousedown: (ev: MouseEvent) => any; - onmouseenter: (ev: MouseEvent) => any; - onmouseleave: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; - onmousewheel: (ev: WheelEvent) => any; - onmscontentzoom: (ev: UIEvent) => any; - onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any; - onpaste: (ev: ClipboardEvent) => any; - onpause: (ev: Event) => any; - onplay: (ev: Event) => any; - onplaying: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - onratechange: (ev: Event) => any; - onreset: (ev: Event) => any; - onscroll: (ev: UIEvent) => any; - onseeked: (ev: Event) => any; - onseeking: (ev: Event) => any; - onselect: (ev: UIEvent) => any; - onselectstart: (ev: Event) => any; - onstalled: (ev: Event) => any; - onsubmit: (ev: Event) => any; - onsuspend: (ev: Event) => any; - ontimeupdate: (ev: Event) => any; - onvolumechange: (ev: Event) => any; - onwaiting: (ev: Event) => any; + onabort: (this: this, ev: UIEvent) => any; + onactivate: (this: this, ev: UIEvent) => any; + onbeforeactivate: (this: this, ev: UIEvent) => any; + onbeforecopy: (this: this, ev: ClipboardEvent) => any; + onbeforecut: (this: this, ev: ClipboardEvent) => any; + onbeforedeactivate: (this: this, ev: UIEvent) => any; + onbeforepaste: (this: this, ev: ClipboardEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; + onchange: (this: this, ev: Event) => any; + onclick: (this: this, ev: MouseEvent) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; + oncopy: (this: this, ev: ClipboardEvent) => any; + oncuechange: (this: this, ev: Event) => any; + oncut: (this: this, ev: ClipboardEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + ondeactivate: (this: this, ev: UIEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; + ondurationchange: (this: this, ev: Event) => any; + onemptied: (this: this, ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onfocus: (this: this, ev: FocusEvent) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; + onload: (this: this, ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmouseenter: (this: this, ev: MouseEvent) => any; + onmouseleave: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmscontentzoom: (this: this, ev: UIEvent) => any; + onmsmanipulationstatechanged: (this: this, ev: MSManipulationEvent) => any; + onpaste: (this: this, ev: ClipboardEvent) => any; + onpause: (this: this, ev: Event) => any; + onplay: (this: this, ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onratechange: (this: this, ev: Event) => any; + onreset: (this: this, ev: Event) => any; + onscroll: (this: this, ev: UIEvent) => any; + onseeked: (this: this, ev: Event) => any; + onseeking: (this: this, ev: Event) => any; + onselect: (this: this, ev: UIEvent) => any; + onselectstart: (this: this, ev: Event) => any; + onstalled: (this: this, ev: Event) => any; + onsubmit: (this: this, ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; outerHTML: string; outerText: string; spellcheck: boolean; @@ -4625,109 +4627,109 @@ interface HTMLElement extends Element { msGetInputContext(): MSInputMethodContext; scrollIntoView(top?: boolean): void; setActive(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -4969,7 +4971,7 @@ interface HTMLFrameElement extends HTMLElement, GetSVGDocument { /** * Raised when the object has been completely received from the server. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; /** * Sets or retrieves whether the frame can be scrolled. */ @@ -4982,110 +4984,110 @@ interface HTMLFrameElement extends HTMLElement, GetSVGDocument { * Sets or retrieves the width of the object. */ width: string | number; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -5113,152 +5115,152 @@ interface HTMLFrameSetElement extends HTMLElement { */ frameSpacing: any; name: string; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; /** * Fires when the object loses the input focus. */ - onblur: (ev: FocusEvent) => any; - onerror: (ev: Event) => any; + onblur: (this: this, ev: FocusEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; /** * Fires when the object receives focus. */ - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - onload: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onresize: (ev: UIEvent) => any; - onstorage: (ev: StorageEvent) => any; - onunload: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + onload: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onresize: (this: this, ev: UIEvent) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onunload: (this: this, ev: Event) => any; /** * Sets or retrieves the frame heights of the object. */ rows: string; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -5378,7 +5380,7 @@ interface HTMLIFrameElement extends HTMLElement, GetSVGDocument { /** * Raised when the object has been completely received from the server. */ - onload: (ev: Event) => any; + onload: (this: this, ev: Event) => any; readonly sandbox: DOMSettableTokenList; /** * Sets or retrieves whether the frame can be scrolled. @@ -5396,110 +5398,110 @@ interface HTMLIFrameElement extends HTMLElement, GetSVGDocument { * Sets or retrieves the width of the object. */ width: string; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -5643,7 +5645,7 @@ interface HTMLInputElement extends HTMLElement { /** * Returns a FileList object on a file type input object. */ - readonly files: FileList; + readonly files: FileList | null; /** * Retrieves a reference to the form that the object is embedded in. */ @@ -5919,9 +5921,9 @@ interface HTMLMarqueeElement extends HTMLElement { height: string; hspace: number; loop: number; - onbounce: (ev: Event) => any; - onfinish: (ev: Event) => any; - onstart: (ev: Event) => any; + onbounce: (this: this, ev: Event) => any; + onfinish: (this: this, ev: Event) => any; + onstart: (this: this, ev: Event) => any; scrollAmount: number; scrollDelay: number; trueSpeed: boolean; @@ -5929,112 +5931,112 @@ interface HTMLMarqueeElement extends HTMLElement { width: string; start(): void; stop(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "bounce", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "finish", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "start", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -6132,8 +6134,8 @@ interface HTMLMediaElement extends HTMLElement { * Gets the current network activity for the element. */ readonly networkState: number; - onencrypted: (ev: MediaEncryptedEvent) => any; - onmsneedkey: (ev: MSMediaKeyNeededEvent) => any; + onencrypted: (this: this, ev: MediaEncryptedEvent) => any; + onmsneedkey: (this: this, ev: MSMediaKeyNeededEvent) => any; /** * Gets a flag that specifies whether playback is paused. */ @@ -6211,111 +6213,111 @@ interface HTMLMediaElement extends HTMLElement { readonly NETWORK_IDLE: number; readonly NETWORK_LOADING: number; readonly NETWORK_NO_SOURCE: number; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "encrypted", listener: (ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "encrypted", listener: (this: this, ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (this: this, ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -6614,7 +6616,7 @@ declare var HTMLOptionElement: { create(): HTMLOptionElement; } -interface HTMLOptionsCollection extends HTMLCollection { +interface HTMLOptionsCollection extends HTMLCollectionOf { length: number; selectedIndex: number; add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number): void; @@ -6778,7 +6780,7 @@ interface HTMLSelectElement extends HTMLElement { * Sets or retrieves the name of the object. */ name: string; - options: HTMLCollectionOf; + readonly options: HTMLOptionsCollection; /** * When present, marks an element that can't be submitted without a value. */ @@ -7367,9 +7369,9 @@ interface HTMLVideoElement extends HTMLMediaElement { msStereo3DPackingMode: string; msStereo3DRenderMode: string; msZoom: boolean; - onMSVideoFormatChanged: (ev: Event) => any; - onMSVideoFrameStepCompleted: (ev: Event) => any; - onMSVideoOptimalLayoutChanged: (ev: Event) => any; + onMSVideoFormatChanged: (this: this, ev: Event) => any; + onMSVideoFrameStepCompleted: (this: this, ev: Event) => any; + onMSVideoOptimalLayoutChanged: (this: this, ev: Event) => any; /** * Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available. */ @@ -7396,114 +7398,114 @@ interface HTMLVideoElement extends HTMLMediaElement { webkitEnterFullscreen(): void; webkitExitFullScreen(): void; webkitExitFullscreen(): void; - 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; - addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFormatChanged", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecopy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforecut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "beforepaste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "copy", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "cut", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "encrypted", listener: (ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; - addEventListener(type: "paste", listener: (ev: ClipboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSContentZoom", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSManipulationStateChanged", listener: (this: this, ev: MSManipulationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFormatChanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoFrameStepCompleted", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "activate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecopy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforecut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforedeactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "beforepaste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "copy", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cut", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deactivate", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "encrypted", listener: (this: this, ev: MediaEncryptedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "msneedkey", listener: (this: this, ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void; + addEventListener(type: "paste", listener: (this: this, ev: ClipboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "selectstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7573,8 +7575,8 @@ declare var IDBCursorWithValue: { interface IDBDatabase extends EventTarget { readonly name: string; readonly objectStoreNames: DOMStringList; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; version: number; onversionchange: (ev: IDBVersionChangeEvent) => any; close(): void; @@ -7582,8 +7584,8 @@ interface IDBDatabase extends EventTarget { deleteObjectStore(name: string): void; transaction(storeNames: string | string[], mode?: string): IDBTransaction; addEventListener(type: "versionchange", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7661,12 +7663,12 @@ declare var IDBObjectStore: { } interface IDBOpenDBRequest extends IDBRequest { - onblocked: (ev: Event) => any; - onupgradeneeded: (ev: IDBVersionChangeEvent) => any; - addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; + onblocked: (this: this, ev: Event) => any; + onupgradeneeded: (this: this, ev: IDBVersionChangeEvent) => any; + addEventListener(type: "blocked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "upgradeneeded", listener: (this: this, ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7677,14 +7679,14 @@ declare var IDBOpenDBRequest: { interface IDBRequest extends EventTarget { readonly error: DOMError; - onerror: (ev: Event) => any; - onsuccess: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onsuccess: (this: this, ev: Event) => any; readonly readyState: string; readonly result: any; source: IDBObjectStore | IDBIndex | IDBCursor; readonly transaction: IDBTransaction; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7697,17 +7699,17 @@ interface IDBTransaction extends EventTarget { readonly db: IDBDatabase; readonly error: DOMError; readonly mode: string; - onabort: (ev: Event) => any; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; abort(): void; objectStore(name: string): IDBObjectStore; readonly READ_ONLY: string; readonly READ_WRITE: string; readonly VERSION_CHANGE: string; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7841,16 +7843,16 @@ declare var MSApp: MSApp; interface MSAppAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; start(): void; readonly COMPLETED: number; readonly ERROR: number; readonly STARTED: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8015,17 +8017,17 @@ declare var MSHTMLWebViewElement: { interface MSInputMethodContext extends EventTarget { readonly compositionEndOffset: number; readonly compositionStartOffset: number; - oncandidatewindowhide: (ev: Event) => any; - oncandidatewindowshow: (ev: Event) => any; - oncandidatewindowupdate: (ev: Event) => any; + oncandidatewindowhide: (this: this, ev: Event) => any; + oncandidatewindowshow: (this: this, ev: Event) => any; + oncandidatewindowupdate: (this: this, ev: Event) => any; readonly target: HTMLElement; getCandidateWindowClientRect(): ClientRect; getCompositionAlternatives(): string[]; hasComposition(): boolean; isCandidateWindowVisible(): boolean; - addEventListener(type: "MSCandidateWindowHide", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSCandidateWindowShow", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "MSCandidateWindowUpdate", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowHide", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowShow", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSCandidateWindowUpdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8201,8 +8203,8 @@ declare var MSStreamReader: { interface MSWebViewAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; readonly target: MSHTMLWebViewElement; @@ -8214,8 +8216,8 @@ interface MSWebViewAsyncOperation extends EventTarget { readonly TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number; readonly TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number; readonly TYPE_INVOKE_SCRIPT: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8253,11 +8255,11 @@ declare var MediaDeviceInfo: { } interface MediaDevices extends EventTarget { - ondevicechange: (ev: Event) => any; + ondevicechange: (this: this, ev: Event) => any; enumerateDevices(): any; getSupportedConstraints(): MediaTrackSupportedConstraints; getUserMedia(constraints: MediaStreamConstraints): PromiseLike; - addEventListener(type: "devicechange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "devicechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8410,10 +8412,10 @@ declare var MediaSource: { interface MediaStream extends EventTarget { readonly active: boolean; readonly id: string; - onactive: (ev: Event) => any; - onaddtrack: (ev: TrackEvent) => any; - oninactive: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onactive: (this: this, ev: Event) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + oninactive: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; addTrack(track: MediaStreamTrack): void; clone(): MediaStream; getAudioTracks(): MediaStreamTrack[]; @@ -8422,10 +8424,10 @@ interface MediaStream extends EventTarget { getVideoTracks(): MediaStreamTrack[]; removeTrack(track: MediaStreamTrack): void; stop(): void; - addEventListener(type: "active", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; - addEventListener(type: "inactive", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "active", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "inactive", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8468,10 +8470,10 @@ interface MediaStreamTrack extends EventTarget { readonly kind: string; readonly label: string; readonly muted: boolean; - onended: (ev: MediaStreamErrorEvent) => any; - onmute: (ev: Event) => any; - onoverconstrained: (ev: MediaStreamErrorEvent) => any; - onunmute: (ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; + onmute: (this: this, ev: Event) => any; + onoverconstrained: (this: this, ev: MediaStreamErrorEvent) => any; + onunmute: (this: this, ev: Event) => any; readonly readonly: boolean; readonly readyState: string; readonly remote: boolean; @@ -8481,10 +8483,10 @@ interface MediaStreamTrack extends EventTarget { getConstraints(): MediaTrackConstraints; getSettings(): MediaTrackSettings; stop(): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mute", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "overconstrained", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "unmute", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mute", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "overconstrained", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "unmute", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8526,11 +8528,11 @@ declare var MessageEvent: { } interface MessagePort extends EventTarget { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; close(): void; postMessage(message?: any, ports?: any): void; start(): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8738,7 +8740,7 @@ interface Node extends EventTarget { contains(child: Node): boolean; hasAttributes(): boolean; hasChildNodes(): boolean; - insertBefore(newChild: Node, refChild: Node): Node; + insertBefore(newChild: Node, refChild: Node | null): Node; isDefaultNamespace(namespaceURI: string | null): boolean; isEqualNode(arg: Node): boolean; isSameNode(other: Node): boolean; @@ -8747,7 +8749,6 @@ interface Node extends EventTarget { normalize(): void; removeChild(oldChild: Node): Node; replaceChild(newChild: Node, oldChild: Node): Node; - contains(node: Node): boolean; readonly ATTRIBUTE_NODE: number; readonly CDATA_SECTION_NODE: number; readonly COMMENT_NODE: number; @@ -8884,9 +8885,9 @@ declare var OfflineAudioCompletionEvent: { } interface OfflineAudioContext extends AudioContext { - oncomplete: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; startRendering(): PromiseLike; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -8898,12 +8899,12 @@ declare var OfflineAudioContext: { interface OscillatorNode extends AudioNode { readonly detune: AudioParam; readonly frequency: AudioParam; - onended: (ev: MediaStreamErrorEvent) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; type: string; setPeriodicWave(periodicWave: PeriodicWave): void; start(when?: number): void; stop(when?: number): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9282,8 +9283,8 @@ declare var RTCDTMFToneChangeEvent: { } interface RTCDtlsTransport extends RTCStatsProvider { - ondtlsstatechange: ((ev: RTCDtlsTransportStateChangedEvent) => any) | null; - onerror: ((ev: Event) => any) | null; + ondtlsstatechange: ((this: this, ev: RTCDtlsTransportStateChangedEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly state: string; readonly transport: RTCIceTransport; getLocalParameters(): RTCDtlsParameters; @@ -9291,8 +9292,8 @@ interface RTCDtlsTransport extends RTCStatsProvider { getRemoteParameters(): RTCDtlsParameters | null; start(remoteParameters: RTCDtlsParameters): void; stop(): void; - addEventListener(type: "dtlsstatechange", listener: (ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dtlsstatechange", listener: (this: this, ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9314,11 +9315,11 @@ interface RTCDtmfSender extends EventTarget { readonly canInsertDTMF: boolean; readonly duration: number; readonly interToneGap: number; - ontonechange: (ev: RTCDTMFToneChangeEvent) => any; + ontonechange: (this: this, ev: RTCDTMFToneChangeEvent) => any; readonly sender: RTCRtpSender; readonly toneBuffer: string; insertDTMF(tones: string, duration?: number, interToneGap?: number): void; - addEventListener(type: "tonechange", listener: (ev: RTCDTMFToneChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "tonechange", listener: (this: this, ev: RTCDTMFToneChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9338,13 +9339,13 @@ declare var RTCIceCandidatePairChangedEvent: { interface RTCIceGatherer extends RTCStatsProvider { readonly component: string; - onerror: ((ev: Event) => any) | null; - onlocalcandidate: ((ev: RTCIceGathererEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; + onlocalcandidate: ((this: this, ev: RTCIceGathererEvent) => any) | null; createAssociatedGatherer(): RTCIceGatherer; getLocalCandidates(): RTCIceCandidate[]; getLocalParameters(): RTCIceParameters; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "localcandidate", listener: (ev: RTCIceGathererEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "localcandidate", listener: (this: this, ev: RTCIceGathererEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9365,8 +9366,8 @@ declare var RTCIceGathererEvent: { interface RTCIceTransport extends RTCStatsProvider { readonly component: string; readonly iceGatherer: RTCIceGatherer | null; - oncandidatepairchange: ((ev: RTCIceCandidatePairChangedEvent) => any) | null; - onicestatechange: ((ev: RTCIceTransportStateChangedEvent) => any) | null; + oncandidatepairchange: ((this: this, ev: RTCIceCandidatePairChangedEvent) => any) | null; + onicestatechange: ((this: this, ev: RTCIceTransportStateChangedEvent) => any) | null; readonly role: string; readonly state: string; addRemoteCandidate(remoteCandidate: RTCIceCandidate | RTCIceCandidateComplete): void; @@ -9377,8 +9378,8 @@ interface RTCIceTransport extends RTCStatsProvider { setRemoteCandidates(remoteCandidates: RTCIceCandidate[]): void; start(gatherer: RTCIceGatherer, remoteParameters: RTCIceParameters, role?: string): void; stop(): void; - addEventListener(type: "candidatepairchange", listener: (ev: RTCIceCandidatePairChangedEvent) => any, useCapture?: boolean): void; - addEventListener(type: "icestatechange", listener: (ev: RTCIceTransportStateChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "candidatepairchange", listener: (this: this, ev: RTCIceCandidatePairChangedEvent) => any, useCapture?: boolean): void; + addEventListener(type: "icestatechange", listener: (this: this, ev: RTCIceTransportStateChangedEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9397,7 +9398,7 @@ declare var RTCIceTransportStateChangedEvent: { } interface RTCRtpReceiver extends RTCStatsProvider { - onerror: ((ev: Event) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack | null; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -9406,7 +9407,7 @@ interface RTCRtpReceiver extends RTCStatsProvider { requestSendCSRC(csrc: number): void; setTransport(transport: RTCDtlsTransport | RTCSrtpSdesTransport, rtcpTransport?: RTCDtlsTransport): void; stop(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9417,8 +9418,8 @@ declare var RTCRtpReceiver: { } interface RTCRtpSender extends RTCStatsProvider { - onerror: ((ev: Event) => any) | null; - onssrcconflict: ((ev: RTCSsrcConflictEvent) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; + onssrcconflict: ((this: this, ev: RTCSsrcConflictEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -9426,8 +9427,8 @@ interface RTCRtpSender extends RTCStatsProvider { setTrack(track: MediaStreamTrack): void; setTransport(transport: RTCDtlsTransport | RTCSrtpSdesTransport, rtcpTransport?: RTCDtlsTransport): void; stop(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ssrcconflict", listener: (ev: RTCSsrcConflictEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ssrcconflict", listener: (this: this, ev: RTCSsrcConflictEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9438,9 +9439,9 @@ declare var RTCRtpSender: { } interface RTCSrtpSdesTransport extends EventTarget { - onerror: ((ev: Event) => any) | null; + onerror: ((this: this, ev: ErrorEvent) => any) | null; readonly transport: RTCIceTransport; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9735,66 +9736,66 @@ declare var SVGDescElement: { } interface SVGElement extends Element { - onclick: (ev: MouseEvent) => any; - ondblclick: (ev: MouseEvent) => any; - onfocusin: (ev: FocusEvent) => any; - onfocusout: (ev: FocusEvent) => any; - onload: (ev: Event) => any; - onmousedown: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; + onclick: (this: this, ev: MouseEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + onfocusin: (this: this, ev: FocusEvent) => any; + onfocusout: (this: this, ev: FocusEvent) => any; + onload: (this: this, ev: Event) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; readonly ownerSVGElement: SVGSVGElement; readonly viewportElement: SVGElement; xmlbase: string; className: any; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -10925,12 +10926,12 @@ interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTest currentScale: number; readonly currentTranslate: SVGPoint; readonly height: SVGAnimatedLength; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - onscroll: (ev: UIEvent) => any; - onunload: (ev: Event) => any; - onzoom: (ev: SVGZoomEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: Event) => any; + onresize: (this: this, ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; + onunload: (this: this, ev: Event) => any; + onzoom: (this: this, ev: SVGZoomEvent) => any; readonly pixelUnitToMillimeterX: number; readonly pixelUnitToMillimeterY: number; readonly screenPixelToMillimeterX: number; @@ -10962,58 +10963,58 @@ interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTest unpauseAnimations(): void; unsuspendRedraw(suspendHandleID: number): void; unsuspendRedrawAll(): void; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "SVGAbort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGError", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGUnload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "SVGZoom", listener: (ev: SVGZoomEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGotPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSLostPointerCapture", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "SVGAbort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGError", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGUnload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "SVGZoom", listener: (this: this, ev: SVGZoomEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ariarequest", listener: (this: this, ev: AriaRequestEvent) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "command", listener: (this: this, ev: CommandEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusin", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focusout", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "gotpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "lostpointercapture", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchcancel", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchend", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchmove", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "touchstart", listener: (this: this, ev: TouchEvent) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "webkitfullscreenerror", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11294,14 +11295,14 @@ interface Screen extends EventTarget { readonly logicalXDPI: number; readonly logicalYDPI: number; readonly msOrientation: string; - onmsorientationchange: (ev: Event) => any; + onmsorientationchange: (this: this, ev: Event) => any; readonly pixelDepth: number; readonly systemXDPI: number; readonly systemYDPI: number; readonly width: number; msLockOrientation(orientations: string | string[]): boolean; msUnlockOrientation(): void; - addEventListener(type: "MSOrientationChange", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "MSOrientationChange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11322,8 +11323,8 @@ declare var ScriptNotifyEvent: { interface ScriptProcessorNode extends AudioNode { readonly bufferSize: number; - onaudioprocess: (ev: AudioProcessingEvent) => any; - addEventListener(type: "audioprocess", listener: (ev: AudioProcessingEvent) => any, useCapture?: boolean): void; + onaudioprocess: (this: this, ev: AudioProcessingEvent) => any; + addEventListener(type: "audioprocess", listener: (this: this, ev: AudioProcessingEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11478,18 +11479,24 @@ declare var StyleSheetPageList: { } interface SubtleCrypto { - decrypt(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; - deriveBits(algorithm: string | Algorithm, baseKey: CryptoKey, length: number): PromiseLike; - deriveKey(algorithm: string | Algorithm, baseKey: CryptoKey, derivedKeyType: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; - digest(algorithm: string | Algorithm, data: ArrayBufferView): PromiseLike; - 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 | 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 | 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; + decrypt(algorithm: string | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: BufferSource): PromiseLike; + deriveBits(algorithm: string | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, baseKey: CryptoKey, length: number): PromiseLike; + deriveKey(algorithm: string | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | ConcatParams | HkdfCtrParams | Pbkdf2Params, extractable: boolean, keyUsages: string[]): PromiseLike; + digest(algorithm: AlgorithmIdentifier, data: BufferSource): PromiseLike; + encrypt(algorithm: string | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: BufferSource): PromiseLike; + exportKey(format: "jwk", key: CryptoKey): PromiseLike; + exportKey(format: "raw" | "pkcs8" | "spki", key: CryptoKey): PromiseLike; + exportKey(format: string, key: CryptoKey): PromiseLike; + generateKey(algorithm: string, extractable: boolean, keyUsages: string[]): PromiseLike; + generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams | DhKeyGenParams, extractable: boolean, keyUsages: string[]): PromiseLike; + generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: string[]): PromiseLike; + importKey(format: "jwk", keyData: JsonWebKey, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + importKey(format: "raw" | "pkcs8" | "spki", keyData: BufferSource, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + importKey(format: string, keyData: JsonWebKey | BufferSource, algorithm: string | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams, extractable:boolean, keyUsages: string[]): PromiseLike; + sign(algorithm: string | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, data: BufferSource): PromiseLike; + unwrapKey(format: string, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier, unwrappedKeyAlgorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: string[]): PromiseLike; + verify(algorithm: string | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, signature: BufferSource, data: BufferSource): PromiseLike; + wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier): PromiseLike; } declare var SubtleCrypto: { @@ -11556,9 +11563,9 @@ interface TextTrack extends EventTarget { readonly label: string; readonly language: string; mode: any; - oncuechange: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; + oncuechange: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; readonly readyState: number; addCue(cue: TextTrackCue): void; removeCue(cue: TextTrackCue): void; @@ -11569,9 +11576,9 @@ interface TextTrack extends EventTarget { readonly LOADING: number; readonly NONE: number; readonly SHOWING: number; - addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "cuechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11590,15 +11597,15 @@ declare var TextTrack: { interface TextTrackCue extends EventTarget { endTime: number; id: string; - onenter: (ev: Event) => any; - onexit: (ev: Event) => any; + onenter: (this: this, ev: Event) => any; + onexit: (this: this, ev: Event) => any; pauseOnExit: boolean; startTime: number; text: string; readonly track: TextTrack; getCueAsHTML(): DocumentFragment; - addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "enter", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "exit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -11621,9 +11628,9 @@ declare var TextTrackCueList: { interface TextTrackList extends EventTarget { readonly length: number; - onaddtrack: ((ev: TrackEvent) => any) | null; + onaddtrack: ((this: this, ev: TrackEvent) => any) | null; item(index: number): TextTrack; - addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: TextTrack; } @@ -11815,15 +11822,15 @@ declare var VideoTrack: { interface VideoTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; - onchange: (ev: Event) => any; - onremovetrack: (ev: TrackEvent) => any; + onaddtrack: (this: this, ev: TrackEvent) => any; + onchange: (this: this, ev: Event) => any; + onremovetrack: (this: this, ev: TrackEvent) => any; readonly selectedIndex: number; 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; - addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "addtrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "removetrack", listener: (this: this, ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: VideoTrack; } @@ -12046,18 +12053,12 @@ interface WebGLRenderingContext { stencilMaskSeparate(face: number, mask: number): void; stencilOp(fail: number, zfail: number, zpass: number): void; stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void; - texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, image: HTMLImageElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, canvas: HTMLCanvasElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, video: HTMLVideoElement): void; - texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void; + texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels?: ArrayBufferView): void; + texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void; texParameterf(target: number, pname: number, param: number): void; texParameteri(target: number, pname: number, param: number): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; - texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, image: HTMLImageElement): void; - 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; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels?: ArrayBufferView): void; + texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void; uniform1f(location: WebGLUniformLocation | null, x: number): void; uniform1fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; uniform1i(location: WebGLUniformLocation | null, x: number): void; @@ -12779,10 +12780,10 @@ interface WebSocket extends EventTarget { binaryType: string; readonly bufferedAmount: number; readonly extensions: string; - onclose: (ev: CloseEvent) => any; - onerror: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onopen: (ev: Event) => any; + onclose: (this: this, ev: CloseEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onopen: (this: this, ev: Event) => any; readonly protocol: string; readonly readyState: number; readonly url: string; @@ -12792,10 +12793,10 @@ interface WebSocket extends EventTarget { readonly CLOSING: number; readonly CONNECTING: number; readonly OPEN: number; - addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "close", listener: (this: this, ev: CloseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "open", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -12855,97 +12856,97 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window name: string; readonly navigator: Navigator; offscreenBuffering: string | boolean; - onabort: (ev: Event) => any; - onafterprint: (ev: Event) => any; - onbeforeprint: (ev: Event) => any; - onbeforeunload: (ev: BeforeUnloadEvent) => any; - onblur: (ev: FocusEvent) => any; - oncanplay: (ev: Event) => any; - oncanplaythrough: (ev: Event) => any; - onchange: (ev: Event) => any; - onclick: (ev: MouseEvent) => any; - oncompassneedscalibration: (ev: Event) => any; - oncontextmenu: (ev: PointerEvent) => any; - ondblclick: (ev: MouseEvent) => any; - ondevicelight: (ev: DeviceLightEvent) => any; - ondevicemotion: (ev: DeviceMotionEvent) => any; - ondeviceorientation: (ev: DeviceOrientationEvent) => any; - ondrag: (ev: DragEvent) => any; - ondragend: (ev: DragEvent) => any; - ondragenter: (ev: DragEvent) => any; - ondragleave: (ev: DragEvent) => any; - ondragover: (ev: DragEvent) => any; - ondragstart: (ev: DragEvent) => any; - ondrop: (ev: DragEvent) => any; - ondurationchange: (ev: Event) => any; - onemptied: (ev: Event) => any; - onended: (ev: MediaStreamErrorEvent) => any; + onabort: (this: this, ev: UIEvent) => any; + onafterprint: (this: this, ev: Event) => any; + onbeforeprint: (this: this, ev: Event) => any; + onbeforeunload: (this: this, ev: BeforeUnloadEvent) => any; + onblur: (this: this, ev: FocusEvent) => any; + oncanplay: (this: this, ev: Event) => any; + oncanplaythrough: (this: this, ev: Event) => any; + onchange: (this: this, ev: Event) => any; + onclick: (this: this, ev: MouseEvent) => any; + oncompassneedscalibration: (this: this, ev: Event) => any; + oncontextmenu: (this: this, ev: PointerEvent) => any; + ondblclick: (this: this, ev: MouseEvent) => any; + ondevicelight: (this: this, ev: DeviceLightEvent) => any; + ondevicemotion: (this: this, ev: DeviceMotionEvent) => any; + ondeviceorientation: (this: this, ev: DeviceOrientationEvent) => any; + ondrag: (this: this, ev: DragEvent) => any; + ondragend: (this: this, ev: DragEvent) => any; + ondragenter: (this: this, ev: DragEvent) => any; + ondragleave: (this: this, ev: DragEvent) => any; + ondragover: (this: this, ev: DragEvent) => any; + ondragstart: (this: this, ev: DragEvent) => any; + ondrop: (this: this, ev: DragEvent) => any; + ondurationchange: (this: this, ev: Event) => any; + onemptied: (this: this, ev: Event) => any; + onended: (this: this, ev: MediaStreamErrorEvent) => any; onerror: ErrorEventHandler; - onfocus: (ev: FocusEvent) => any; - onhashchange: (ev: HashChangeEvent) => any; - oninput: (ev: Event) => any; - oninvalid: (ev: Event) => any; - onkeydown: (ev: KeyboardEvent) => any; - onkeypress: (ev: KeyboardEvent) => any; - onkeyup: (ev: KeyboardEvent) => any; - onload: (ev: Event) => any; - onloadeddata: (ev: Event) => any; - onloadedmetadata: (ev: Event) => any; - onloadstart: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onmousedown: (ev: MouseEvent) => any; - onmouseenter: (ev: MouseEvent) => any; - onmouseleave: (ev: MouseEvent) => any; - onmousemove: (ev: MouseEvent) => any; - onmouseout: (ev: MouseEvent) => any; - onmouseover: (ev: MouseEvent) => any; - onmouseup: (ev: MouseEvent) => any; - onmousewheel: (ev: WheelEvent) => any; - onmsgesturechange: (ev: MSGestureEvent) => any; - onmsgesturedoubletap: (ev: MSGestureEvent) => any; - onmsgestureend: (ev: MSGestureEvent) => any; - onmsgesturehold: (ev: MSGestureEvent) => any; - onmsgesturestart: (ev: MSGestureEvent) => any; - onmsgesturetap: (ev: MSGestureEvent) => any; - onmsinertiastart: (ev: MSGestureEvent) => any; - onmspointercancel: (ev: MSPointerEvent) => any; - onmspointerdown: (ev: MSPointerEvent) => any; - onmspointerenter: (ev: MSPointerEvent) => any; - onmspointerleave: (ev: MSPointerEvent) => any; - onmspointermove: (ev: MSPointerEvent) => any; - onmspointerout: (ev: MSPointerEvent) => any; - onmspointerover: (ev: MSPointerEvent) => any; - onmspointerup: (ev: MSPointerEvent) => any; - onoffline: (ev: Event) => any; - ononline: (ev: Event) => any; - onorientationchange: (ev: Event) => any; - onpagehide: (ev: PageTransitionEvent) => any; - onpageshow: (ev: PageTransitionEvent) => any; - onpause: (ev: Event) => any; - onplay: (ev: Event) => any; - onplaying: (ev: Event) => any; - onpopstate: (ev: PopStateEvent) => any; - onprogress: (ev: ProgressEvent) => any; - onratechange: (ev: Event) => any; - onreadystatechange: (ev: ProgressEvent) => any; - onreset: (ev: Event) => any; - onresize: (ev: UIEvent) => any; - onscroll: (ev: UIEvent) => any; - onseeked: (ev: Event) => any; - onseeking: (ev: Event) => any; - onselect: (ev: UIEvent) => any; - onstalled: (ev: Event) => any; - onstorage: (ev: StorageEvent) => any; - onsubmit: (ev: Event) => any; - onsuspend: (ev: Event) => any; - ontimeupdate: (ev: Event) => any; + onfocus: (this: this, ev: FocusEvent) => any; + onhashchange: (this: this, ev: HashChangeEvent) => any; + oninput: (this: this, ev: Event) => any; + oninvalid: (this: this, ev: Event) => any; + onkeydown: (this: this, ev: KeyboardEvent) => any; + onkeypress: (this: this, ev: KeyboardEvent) => any; + onkeyup: (this: this, ev: KeyboardEvent) => any; + onload: (this: this, ev: Event) => any; + onloadeddata: (this: this, ev: Event) => any; + onloadedmetadata: (this: this, ev: Event) => any; + onloadstart: (this: this, ev: Event) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onmousedown: (this: this, ev: MouseEvent) => any; + onmouseenter: (this: this, ev: MouseEvent) => any; + onmouseleave: (this: this, ev: MouseEvent) => any; + onmousemove: (this: this, ev: MouseEvent) => any; + onmouseout: (this: this, ev: MouseEvent) => any; + onmouseover: (this: this, ev: MouseEvent) => any; + onmouseup: (this: this, ev: MouseEvent) => any; + onmousewheel: (this: this, ev: WheelEvent) => any; + onmsgesturechange: (this: this, ev: MSGestureEvent) => any; + onmsgesturedoubletap: (this: this, ev: MSGestureEvent) => any; + onmsgestureend: (this: this, ev: MSGestureEvent) => any; + onmsgesturehold: (this: this, ev: MSGestureEvent) => any; + onmsgesturestart: (this: this, ev: MSGestureEvent) => any; + onmsgesturetap: (this: this, ev: MSGestureEvent) => any; + onmsinertiastart: (this: this, ev: MSGestureEvent) => any; + onmspointercancel: (this: this, ev: MSPointerEvent) => any; + onmspointerdown: (this: this, ev: MSPointerEvent) => any; + onmspointerenter: (this: this, ev: MSPointerEvent) => any; + onmspointerleave: (this: this, ev: MSPointerEvent) => any; + onmspointermove: (this: this, ev: MSPointerEvent) => any; + onmspointerout: (this: this, ev: MSPointerEvent) => any; + onmspointerover: (this: this, ev: MSPointerEvent) => any; + onmspointerup: (this: this, ev: MSPointerEvent) => any; + onoffline: (this: this, ev: Event) => any; + ononline: (this: this, ev: Event) => any; + onorientationchange: (this: this, ev: Event) => any; + onpagehide: (this: this, ev: PageTransitionEvent) => any; + onpageshow: (this: this, ev: PageTransitionEvent) => any; + onpause: (this: this, ev: Event) => any; + onplay: (this: this, ev: Event) => any; + onplaying: (this: this, ev: Event) => any; + onpopstate: (this: this, ev: PopStateEvent) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + onratechange: (this: this, ev: Event) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; + onreset: (this: this, ev: Event) => any; + onresize: (this: this, ev: UIEvent) => any; + onscroll: (this: this, ev: UIEvent) => any; + onseeked: (this: this, ev: Event) => any; + onseeking: (this: this, ev: Event) => any; + onselect: (this: this, ev: UIEvent) => any; + onstalled: (this: this, ev: Event) => any; + onstorage: (this: this, ev: StorageEvent) => any; + onsubmit: (this: this, ev: Event) => any; + onsuspend: (this: this, ev: Event) => any; + ontimeupdate: (this: this, ev: Event) => any; ontouchcancel: (ev: TouchEvent) => any; ontouchend: (ev: TouchEvent) => any; ontouchmove: (ev: TouchEvent) => any; ontouchstart: (ev: TouchEvent) => any; - onunload: (ev: Event) => any; - onvolumechange: (ev: Event) => any; - onwaiting: (ev: Event) => any; + onunload: (this: this, ev: Event) => any; + onvolumechange: (this: this, ev: Event) => any; + onwaiting: (this: this, ev: Event) => any; readonly opener: Window; orientation: string | number; readonly outerHeight: number; @@ -12971,6 +12972,7 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window readonly top: Window; readonly window: Window; URL: typeof URL; + Blob: typeof Blob; alert(message?: any): void; blur(): void; cancelAnimationFrame(handle: number): void; @@ -13000,101 +13002,101 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint; webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint; webkitRequestAnimationFrame(callback: FrameRequestCallback): number; - 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; - addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; - addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "devicelight", listener: (ev: DeviceLightEvent) => any, useCapture?: boolean): void; - addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; - addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; - addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; - addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; - addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureChange", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureDoubleTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureEnd", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureHold", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSGestureTap", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSInertiaStart", listener: (this: this, ev: MSGestureEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerCancel", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerDown", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerEnter", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerLeave", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerMove", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOut", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerOver", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "MSPointerUp", listener: (this: this, ev: MSPointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "afterprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeprint", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "beforeunload", listener: (this: this, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; + addEventListener(type: "blur", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "canplay", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "canplaythrough", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "change", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "click", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "compassneedscalibration", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "contextmenu", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dblclick", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "devicelight", listener: (this: this, ev: DeviceLightEvent) => any, useCapture?: boolean): void; + addEventListener(type: "devicemotion", listener: (this: this, ev: DeviceMotionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "deviceorientation", listener: (this: this, ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drag", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragend", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragenter", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragleave", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragover", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "dragstart", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "drop", listener: (this: this, ev: DragEvent) => any, useCapture?: boolean): void; + addEventListener(type: "durationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "emptied", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "ended", listener: (this: this, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "focus", listener: (this: this, ev: FocusEvent) => any, useCapture?: boolean): void; + addEventListener(type: "hashchange", listener: (this: this, ev: HashChangeEvent) => any, useCapture?: boolean): void; + addEventListener(type: "input", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "invalid", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "keydown", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keypress", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "keyup", listener: (this: this, ev: KeyboardEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadeddata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadedmetadata", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousedown", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseenter", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseleave", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousemove", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseout", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseover", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mouseup", listener: (this: this, ev: MouseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "mousewheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; + addEventListener(type: "offline", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "online", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "orientationchange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pagehide", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pageshow", listener: (this: this, ev: PageTransitionEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pause", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "play", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "playing", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "popstate", listener: (this: this, ev: PopStateEvent) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "ratechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "reset", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "resize", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "scroll", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "seeked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "seeking", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "select", listener: (this: this, ev: UIEvent) => any, useCapture?: boolean): void; + addEventListener(type: "stalled", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "storage", listener: (this: this, ev: StorageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "submit", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "suspend", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "timeupdate", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "unload", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "volumechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; [index: number]: Window; } @@ -13105,11 +13107,11 @@ declare var Window: { } interface Worker extends EventTarget, AbstractWorker { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; postMessage(message: any, ports?: any): void; terminate(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13127,8 +13129,7 @@ declare var XMLDocument: { } interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { - msCaching: string; - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly response: any; readonly responseText: string; @@ -13139,6 +13140,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { timeout: number; readonly upload: XMLHttpRequestUpload; withCredentials: boolean; + msCaching?: string; abort(): void; getAllResponseHeaders(): string; getResponseHeader(header: string): string | null; @@ -13154,14 +13156,14 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { readonly LOADING: number; readonly OPENED: number; readonly UNSENT: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13277,8 +13279,8 @@ declare var XSLTProcessor: { } interface AbstractWorker { - onerror: (ev: Event) => any; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + onerror: (this: this, ev: ErrorEvent) => any; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13390,24 +13392,24 @@ interface GetSVGDocument { } interface GlobalEventHandlers { - onpointercancel: (ev: PointerEvent) => any; - onpointerdown: (ev: PointerEvent) => any; - onpointerenter: (ev: PointerEvent) => any; - onpointerleave: (ev: PointerEvent) => any; - onpointermove: (ev: PointerEvent) => any; - onpointerout: (ev: PointerEvent) => any; - onpointerover: (ev: PointerEvent) => any; - onpointerup: (ev: PointerEvent) => any; - onwheel: (ev: WheelEvent) => any; - addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; - addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; + onpointercancel: (this: this, ev: PointerEvent) => any; + onpointerdown: (this: this, ev: PointerEvent) => any; + onpointerenter: (this: this, ev: PointerEvent) => any; + onpointerleave: (this: this, ev: PointerEvent) => any; + onpointermove: (this: this, ev: PointerEvent) => any; + onpointerout: (this: this, ev: PointerEvent) => any; + onpointerover: (this: this, ev: PointerEvent) => any; + onpointerup: (this: this, ev: PointerEvent) => any; + onwheel: (this: this, ev: WheelEvent) => any; + addEventListener(type: "pointercancel", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerdown", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerenter", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerleave", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointermove", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerout", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerover", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "pointerup", listener: (this: this, ev: PointerEvent) => any, useCapture?: boolean): void; + addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13435,24 +13437,24 @@ interface LinkStyle { } interface MSBaseReader { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly result: any; abort(): void; readonly DONE: number; readonly EMPTY: number; readonly LOADING: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13501,7 +13503,359 @@ interface NavigatorUserMedia { } interface NodeSelector { + querySelector(selectors: "a"): HTMLAnchorElement; + querySelector(selectors: "abbr"): HTMLElement; + querySelector(selectors: "acronym"): HTMLElement; + querySelector(selectors: "address"): HTMLElement; + querySelector(selectors: "applet"): HTMLAppletElement; + querySelector(selectors: "area"): HTMLAreaElement; + querySelector(selectors: "article"): HTMLElement; + querySelector(selectors: "aside"): HTMLElement; + querySelector(selectors: "audio"): HTMLAudioElement; + querySelector(selectors: "b"): HTMLElement; + querySelector(selectors: "base"): HTMLBaseElement; + querySelector(selectors: "basefont"): HTMLBaseFontElement; + querySelector(selectors: "bdo"): HTMLElement; + querySelector(selectors: "big"): HTMLElement; + querySelector(selectors: "blockquote"): HTMLQuoteElement; + querySelector(selectors: "body"): HTMLBodyElement; + querySelector(selectors: "br"): HTMLBRElement; + querySelector(selectors: "button"): HTMLButtonElement; + querySelector(selectors: "canvas"): HTMLCanvasElement; + querySelector(selectors: "caption"): HTMLTableCaptionElement; + querySelector(selectors: "center"): HTMLElement; + querySelector(selectors: "circle"): SVGCircleElement; + querySelector(selectors: "cite"): HTMLElement; + querySelector(selectors: "clippath"): SVGClipPathElement; + querySelector(selectors: "code"): HTMLElement; + querySelector(selectors: "col"): HTMLTableColElement; + querySelector(selectors: "colgroup"): HTMLTableColElement; + querySelector(selectors: "datalist"): HTMLDataListElement; + querySelector(selectors: "dd"): HTMLElement; + querySelector(selectors: "defs"): SVGDefsElement; + querySelector(selectors: "del"): HTMLModElement; + querySelector(selectors: "desc"): SVGDescElement; + querySelector(selectors: "dfn"): HTMLElement; + querySelector(selectors: "dir"): HTMLDirectoryElement; + querySelector(selectors: "div"): HTMLDivElement; + querySelector(selectors: "dl"): HTMLDListElement; + querySelector(selectors: "dt"): HTMLElement; + querySelector(selectors: "ellipse"): SVGEllipseElement; + querySelector(selectors: "em"): HTMLElement; + querySelector(selectors: "embed"): HTMLEmbedElement; + querySelector(selectors: "feblend"): SVGFEBlendElement; + querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement; + querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement; + querySelector(selectors: "fecomposite"): SVGFECompositeElement; + querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement; + querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement; + querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement; + querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement; + querySelector(selectors: "feflood"): SVGFEFloodElement; + querySelector(selectors: "fefunca"): SVGFEFuncAElement; + querySelector(selectors: "fefuncb"): SVGFEFuncBElement; + querySelector(selectors: "fefuncg"): SVGFEFuncGElement; + querySelector(selectors: "fefuncr"): SVGFEFuncRElement; + querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement; + querySelector(selectors: "feimage"): SVGFEImageElement; + querySelector(selectors: "femerge"): SVGFEMergeElement; + querySelector(selectors: "femergenode"): SVGFEMergeNodeElement; + querySelector(selectors: "femorphology"): SVGFEMorphologyElement; + querySelector(selectors: "feoffset"): SVGFEOffsetElement; + querySelector(selectors: "fepointlight"): SVGFEPointLightElement; + querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement; + querySelector(selectors: "fespotlight"): SVGFESpotLightElement; + querySelector(selectors: "fetile"): SVGFETileElement; + querySelector(selectors: "feturbulence"): SVGFETurbulenceElement; + querySelector(selectors: "fieldset"): HTMLFieldSetElement; + querySelector(selectors: "figcaption"): HTMLElement; + querySelector(selectors: "figure"): HTMLElement; + querySelector(selectors: "filter"): SVGFilterElement; + querySelector(selectors: "font"): HTMLFontElement; + querySelector(selectors: "footer"): HTMLElement; + querySelector(selectors: "foreignobject"): SVGForeignObjectElement; + querySelector(selectors: "form"): HTMLFormElement; + querySelector(selectors: "frame"): HTMLFrameElement; + querySelector(selectors: "frameset"): HTMLFrameSetElement; + querySelector(selectors: "g"): SVGGElement; + querySelector(selectors: "h1"): HTMLHeadingElement; + querySelector(selectors: "h2"): HTMLHeadingElement; + querySelector(selectors: "h3"): HTMLHeadingElement; + querySelector(selectors: "h4"): HTMLHeadingElement; + querySelector(selectors: "h5"): HTMLHeadingElement; + querySelector(selectors: "h6"): HTMLHeadingElement; + querySelector(selectors: "head"): HTMLHeadElement; + querySelector(selectors: "header"): HTMLElement; + querySelector(selectors: "hgroup"): HTMLElement; + querySelector(selectors: "hr"): HTMLHRElement; + querySelector(selectors: "html"): HTMLHtmlElement; + querySelector(selectors: "i"): HTMLElement; + querySelector(selectors: "iframe"): HTMLIFrameElement; + querySelector(selectors: "image"): SVGImageElement; + querySelector(selectors: "img"): HTMLImageElement; + querySelector(selectors: "input"): HTMLInputElement; + querySelector(selectors: "ins"): HTMLModElement; + querySelector(selectors: "isindex"): HTMLUnknownElement; + querySelector(selectors: "kbd"): HTMLElement; + querySelector(selectors: "keygen"): HTMLElement; + querySelector(selectors: "label"): HTMLLabelElement; + querySelector(selectors: "legend"): HTMLLegendElement; + querySelector(selectors: "li"): HTMLLIElement; + querySelector(selectors: "line"): SVGLineElement; + querySelector(selectors: "lineargradient"): SVGLinearGradientElement; + querySelector(selectors: "link"): HTMLLinkElement; + querySelector(selectors: "listing"): HTMLPreElement; + querySelector(selectors: "map"): HTMLMapElement; + querySelector(selectors: "mark"): HTMLElement; + querySelector(selectors: "marker"): SVGMarkerElement; + querySelector(selectors: "marquee"): HTMLMarqueeElement; + querySelector(selectors: "mask"): SVGMaskElement; + querySelector(selectors: "menu"): HTMLMenuElement; + querySelector(selectors: "meta"): HTMLMetaElement; + querySelector(selectors: "metadata"): SVGMetadataElement; + querySelector(selectors: "meter"): HTMLMeterElement; + querySelector(selectors: "nav"): HTMLElement; + querySelector(selectors: "nextid"): HTMLUnknownElement; + querySelector(selectors: "nobr"): HTMLElement; + querySelector(selectors: "noframes"): HTMLElement; + querySelector(selectors: "noscript"): HTMLElement; + querySelector(selectors: "object"): HTMLObjectElement; + querySelector(selectors: "ol"): HTMLOListElement; + querySelector(selectors: "optgroup"): HTMLOptGroupElement; + querySelector(selectors: "option"): HTMLOptionElement; + querySelector(selectors: "p"): HTMLParagraphElement; + querySelector(selectors: "param"): HTMLParamElement; + querySelector(selectors: "path"): SVGPathElement; + querySelector(selectors: "pattern"): SVGPatternElement; + querySelector(selectors: "picture"): HTMLPictureElement; + querySelector(selectors: "plaintext"): HTMLElement; + querySelector(selectors: "polygon"): SVGPolygonElement; + querySelector(selectors: "polyline"): SVGPolylineElement; + querySelector(selectors: "pre"): HTMLPreElement; + querySelector(selectors: "progress"): HTMLProgressElement; + querySelector(selectors: "q"): HTMLQuoteElement; + querySelector(selectors: "radialgradient"): SVGRadialGradientElement; + querySelector(selectors: "rect"): SVGRectElement; + querySelector(selectors: "rt"): HTMLElement; + querySelector(selectors: "ruby"): HTMLElement; + querySelector(selectors: "s"): HTMLElement; + querySelector(selectors: "samp"): HTMLElement; + querySelector(selectors: "script"): HTMLScriptElement; + querySelector(selectors: "section"): HTMLElement; + querySelector(selectors: "select"): HTMLSelectElement; + querySelector(selectors: "small"): HTMLElement; + querySelector(selectors: "source"): HTMLSourceElement; + querySelector(selectors: "span"): HTMLSpanElement; + querySelector(selectors: "stop"): SVGStopElement; + querySelector(selectors: "strike"): HTMLElement; + querySelector(selectors: "strong"): HTMLElement; + querySelector(selectors: "style"): HTMLStyleElement; + querySelector(selectors: "sub"): HTMLElement; + querySelector(selectors: "sup"): HTMLElement; + querySelector(selectors: "svg"): SVGSVGElement; + querySelector(selectors: "switch"): SVGSwitchElement; + querySelector(selectors: "symbol"): SVGSymbolElement; + querySelector(selectors: "table"): HTMLTableElement; + querySelector(selectors: "tbody"): HTMLTableSectionElement; + querySelector(selectors: "td"): HTMLTableDataCellElement; + querySelector(selectors: "template"): HTMLTemplateElement; + querySelector(selectors: "text"): SVGTextElement; + querySelector(selectors: "textpath"): SVGTextPathElement; + querySelector(selectors: "textarea"): HTMLTextAreaElement; + querySelector(selectors: "tfoot"): HTMLTableSectionElement; + querySelector(selectors: "th"): HTMLTableHeaderCellElement; + querySelector(selectors: "thead"): HTMLTableSectionElement; + querySelector(selectors: "title"): HTMLTitleElement; + querySelector(selectors: "tr"): HTMLTableRowElement; + querySelector(selectors: "track"): HTMLTrackElement; + querySelector(selectors: "tspan"): SVGTSpanElement; + querySelector(selectors: "tt"): HTMLElement; + querySelector(selectors: "u"): HTMLElement; + querySelector(selectors: "ul"): HTMLUListElement; + querySelector(selectors: "use"): SVGUseElement; + querySelector(selectors: "var"): HTMLElement; + querySelector(selectors: "video"): HTMLVideoElement; + querySelector(selectors: "view"): SVGViewElement; + querySelector(selectors: "wbr"): HTMLElement; + querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement; + querySelector(selectors: "xmp"): HTMLPreElement; querySelector(selectors: string): Element; + querySelectorAll(selectors: "a"): NodeListOf; + querySelectorAll(selectors: "abbr"): NodeListOf; + querySelectorAll(selectors: "acronym"): NodeListOf; + querySelectorAll(selectors: "address"): NodeListOf; + querySelectorAll(selectors: "applet"): NodeListOf; + querySelectorAll(selectors: "area"): NodeListOf; + querySelectorAll(selectors: "article"): NodeListOf; + querySelectorAll(selectors: "aside"): NodeListOf; + querySelectorAll(selectors: "audio"): NodeListOf; + querySelectorAll(selectors: "b"): NodeListOf; + querySelectorAll(selectors: "base"): NodeListOf; + querySelectorAll(selectors: "basefont"): NodeListOf; + querySelectorAll(selectors: "bdo"): NodeListOf; + querySelectorAll(selectors: "big"): NodeListOf; + querySelectorAll(selectors: "blockquote"): NodeListOf; + querySelectorAll(selectors: "body"): NodeListOf; + querySelectorAll(selectors: "br"): NodeListOf; + querySelectorAll(selectors: "button"): NodeListOf; + querySelectorAll(selectors: "canvas"): NodeListOf; + querySelectorAll(selectors: "caption"): NodeListOf; + querySelectorAll(selectors: "center"): NodeListOf; + querySelectorAll(selectors: "circle"): NodeListOf; + querySelectorAll(selectors: "cite"): NodeListOf; + querySelectorAll(selectors: "clippath"): NodeListOf; + querySelectorAll(selectors: "code"): NodeListOf; + querySelectorAll(selectors: "col"): NodeListOf; + querySelectorAll(selectors: "colgroup"): NodeListOf; + querySelectorAll(selectors: "datalist"): NodeListOf; + querySelectorAll(selectors: "dd"): NodeListOf; + querySelectorAll(selectors: "defs"): NodeListOf; + querySelectorAll(selectors: "del"): NodeListOf; + querySelectorAll(selectors: "desc"): NodeListOf; + querySelectorAll(selectors: "dfn"): NodeListOf; + querySelectorAll(selectors: "dir"): NodeListOf; + querySelectorAll(selectors: "div"): NodeListOf; + querySelectorAll(selectors: "dl"): NodeListOf; + querySelectorAll(selectors: "dt"): NodeListOf; + querySelectorAll(selectors: "ellipse"): NodeListOf; + querySelectorAll(selectors: "em"): NodeListOf; + querySelectorAll(selectors: "embed"): NodeListOf; + querySelectorAll(selectors: "feblend"): NodeListOf; + querySelectorAll(selectors: "fecolormatrix"): NodeListOf; + querySelectorAll(selectors: "fecomponenttransfer"): NodeListOf; + querySelectorAll(selectors: "fecomposite"): NodeListOf; + querySelectorAll(selectors: "feconvolvematrix"): NodeListOf; + querySelectorAll(selectors: "fediffuselighting"): NodeListOf; + querySelectorAll(selectors: "fedisplacementmap"): NodeListOf; + querySelectorAll(selectors: "fedistantlight"): NodeListOf; + querySelectorAll(selectors: "feflood"): NodeListOf; + querySelectorAll(selectors: "fefunca"): NodeListOf; + querySelectorAll(selectors: "fefuncb"): NodeListOf; + querySelectorAll(selectors: "fefuncg"): NodeListOf; + querySelectorAll(selectors: "fefuncr"): NodeListOf; + querySelectorAll(selectors: "fegaussianblur"): NodeListOf; + querySelectorAll(selectors: "feimage"): NodeListOf; + querySelectorAll(selectors: "femerge"): NodeListOf; + querySelectorAll(selectors: "femergenode"): NodeListOf; + querySelectorAll(selectors: "femorphology"): NodeListOf; + querySelectorAll(selectors: "feoffset"): NodeListOf; + querySelectorAll(selectors: "fepointlight"): NodeListOf; + querySelectorAll(selectors: "fespecularlighting"): NodeListOf; + querySelectorAll(selectors: "fespotlight"): NodeListOf; + querySelectorAll(selectors: "fetile"): NodeListOf; + querySelectorAll(selectors: "feturbulence"): NodeListOf; + querySelectorAll(selectors: "fieldset"): NodeListOf; + querySelectorAll(selectors: "figcaption"): NodeListOf; + querySelectorAll(selectors: "figure"): NodeListOf; + querySelectorAll(selectors: "filter"): NodeListOf; + querySelectorAll(selectors: "font"): NodeListOf; + querySelectorAll(selectors: "footer"): NodeListOf; + querySelectorAll(selectors: "foreignobject"): NodeListOf; + querySelectorAll(selectors: "form"): NodeListOf; + querySelectorAll(selectors: "frame"): NodeListOf; + querySelectorAll(selectors: "frameset"): NodeListOf; + querySelectorAll(selectors: "g"): NodeListOf; + querySelectorAll(selectors: "h1"): NodeListOf; + querySelectorAll(selectors: "h2"): NodeListOf; + querySelectorAll(selectors: "h3"): NodeListOf; + querySelectorAll(selectors: "h4"): NodeListOf; + querySelectorAll(selectors: "h5"): NodeListOf; + querySelectorAll(selectors: "h6"): NodeListOf; + querySelectorAll(selectors: "head"): NodeListOf; + querySelectorAll(selectors: "header"): NodeListOf; + querySelectorAll(selectors: "hgroup"): NodeListOf; + querySelectorAll(selectors: "hr"): NodeListOf; + querySelectorAll(selectors: "html"): NodeListOf; + querySelectorAll(selectors: "i"): NodeListOf; + querySelectorAll(selectors: "iframe"): NodeListOf; + querySelectorAll(selectors: "image"): NodeListOf; + querySelectorAll(selectors: "img"): NodeListOf; + querySelectorAll(selectors: "input"): NodeListOf; + querySelectorAll(selectors: "ins"): NodeListOf; + querySelectorAll(selectors: "isindex"): NodeListOf; + querySelectorAll(selectors: "kbd"): NodeListOf; + querySelectorAll(selectors: "keygen"): NodeListOf; + querySelectorAll(selectors: "label"): NodeListOf; + querySelectorAll(selectors: "legend"): NodeListOf; + querySelectorAll(selectors: "li"): NodeListOf; + querySelectorAll(selectors: "line"): NodeListOf; + querySelectorAll(selectors: "lineargradient"): NodeListOf; + querySelectorAll(selectors: "link"): NodeListOf; + querySelectorAll(selectors: "listing"): NodeListOf; + querySelectorAll(selectors: "map"): NodeListOf; + querySelectorAll(selectors: "mark"): NodeListOf; + querySelectorAll(selectors: "marker"): NodeListOf; + querySelectorAll(selectors: "marquee"): NodeListOf; + querySelectorAll(selectors: "mask"): NodeListOf; + querySelectorAll(selectors: "menu"): NodeListOf; + querySelectorAll(selectors: "meta"): NodeListOf; + querySelectorAll(selectors: "metadata"): NodeListOf; + querySelectorAll(selectors: "meter"): NodeListOf; + querySelectorAll(selectors: "nav"): NodeListOf; + querySelectorAll(selectors: "nextid"): NodeListOf; + querySelectorAll(selectors: "nobr"): NodeListOf; + querySelectorAll(selectors: "noframes"): NodeListOf; + querySelectorAll(selectors: "noscript"): NodeListOf; + querySelectorAll(selectors: "object"): NodeListOf; + querySelectorAll(selectors: "ol"): NodeListOf; + querySelectorAll(selectors: "optgroup"): NodeListOf; + querySelectorAll(selectors: "option"): NodeListOf; + querySelectorAll(selectors: "p"): NodeListOf; + querySelectorAll(selectors: "param"): NodeListOf; + querySelectorAll(selectors: "path"): NodeListOf; + querySelectorAll(selectors: "pattern"): NodeListOf; + querySelectorAll(selectors: "picture"): NodeListOf; + querySelectorAll(selectors: "plaintext"): NodeListOf; + querySelectorAll(selectors: "polygon"): NodeListOf; + querySelectorAll(selectors: "polyline"): NodeListOf; + querySelectorAll(selectors: "pre"): NodeListOf; + querySelectorAll(selectors: "progress"): NodeListOf; + querySelectorAll(selectors: "q"): NodeListOf; + querySelectorAll(selectors: "radialgradient"): NodeListOf; + querySelectorAll(selectors: "rect"): NodeListOf; + querySelectorAll(selectors: "rt"): NodeListOf; + querySelectorAll(selectors: "ruby"): NodeListOf; + querySelectorAll(selectors: "s"): NodeListOf; + querySelectorAll(selectors: "samp"): NodeListOf; + querySelectorAll(selectors: "script"): NodeListOf; + querySelectorAll(selectors: "section"): NodeListOf; + querySelectorAll(selectors: "select"): NodeListOf; + querySelectorAll(selectors: "small"): NodeListOf; + querySelectorAll(selectors: "source"): NodeListOf; + querySelectorAll(selectors: "span"): NodeListOf; + querySelectorAll(selectors: "stop"): NodeListOf; + querySelectorAll(selectors: "strike"): NodeListOf; + querySelectorAll(selectors: "strong"): NodeListOf; + querySelectorAll(selectors: "style"): NodeListOf; + querySelectorAll(selectors: "sub"): NodeListOf; + querySelectorAll(selectors: "sup"): NodeListOf; + querySelectorAll(selectors: "svg"): NodeListOf; + querySelectorAll(selectors: "switch"): NodeListOf; + querySelectorAll(selectors: "symbol"): NodeListOf; + querySelectorAll(selectors: "table"): NodeListOf; + querySelectorAll(selectors: "tbody"): NodeListOf; + querySelectorAll(selectors: "td"): NodeListOf; + querySelectorAll(selectors: "template"): NodeListOf; + querySelectorAll(selectors: "text"): NodeListOf; + querySelectorAll(selectors: "textpath"): NodeListOf; + querySelectorAll(selectors: "textarea"): NodeListOf; + querySelectorAll(selectors: "tfoot"): NodeListOf; + querySelectorAll(selectors: "th"): NodeListOf; + querySelectorAll(selectors: "thead"): NodeListOf; + querySelectorAll(selectors: "title"): NodeListOf; + querySelectorAll(selectors: "tr"): NodeListOf; + querySelectorAll(selectors: "track"): NodeListOf; + querySelectorAll(selectors: "tspan"): NodeListOf; + querySelectorAll(selectors: "tt"): NodeListOf; + querySelectorAll(selectors: "u"): NodeListOf; + querySelectorAll(selectors: "ul"): NodeListOf; + querySelectorAll(selectors: "use"): NodeListOf; + querySelectorAll(selectors: "var"): NodeListOf; + querySelectorAll(selectors: "video"): NodeListOf; + querySelectorAll(selectors: "view"): NodeListOf; + querySelectorAll(selectors: "wbr"): NodeListOf; + querySelectorAll(selectors: "x-ms-webview"): NodeListOf; + querySelectorAll(selectors: "xmp"): NodeListOf; querySelectorAll(selectors: string): NodeListOf; } @@ -13589,30 +13943,33 @@ interface WindowSessionStorage { interface WindowTimers extends Object, WindowTimersExtension { clearInterval(handle: number): void; clearTimeout(handle: number): void; + setInterval(handler: (...args: any[]) => void, timeout: number): number; setInterval(handler: any, timeout?: any, ...args: any[]): number; + setTimeout(handler: (...args: any[]) => void, timeout: number): number; setTimeout(handler: any, timeout?: any, ...args: any[]): number; } interface WindowTimersExtension { clearImmediate(handle: number): void; - setImmediate(expression: any, ...args: any[]): number; + setImmediate(handler: (...args: any[]) => void): number; + setImmediate(handler: any, ...args: any[]): number; } interface XMLHttpRequestEventTarget { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - ontimeout: (ev: ProgressEvent) => any; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + ontimeout: (this: this, ev: ProgressEvent) => any; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -13624,6 +13981,13 @@ interface StorageEventInit extends EventInit { storageArea?: Storage; } +interface Canvas2DContextAttributes { + alpha?: boolean; + willReadFrequently?: boolean; + storage?: boolean; + [attribute: string]: boolean | string | undefined; +} + interface NodeListOf extends NodeList { length: number; item(index: number): TNode; @@ -13673,6 +14037,177 @@ interface ClipboardEventInit extends EventInit { interface IDBArrayKey extends Array { } +interface RsaKeyGenParams extends Algorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyGenParams extends RsaKeyGenParams { + hash: AlgorithmIdentifier; +} + +interface RsaKeyAlgorithm extends KeyAlgorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { + hash: AlgorithmIdentifier; +} + +interface RsaHashedImportParams { + hash: AlgorithmIdentifier; +} + +interface RsaPssParams { + saltLength: number; +} + +interface RsaOaepParams extends Algorithm { + label?: BufferSource; +} + +interface EcdsaParams extends Algorithm { + hash: AlgorithmIdentifier; +} + +interface EcKeyGenParams extends Algorithm { + typedCurve: string; +} + +interface EcKeyAlgorithm extends KeyAlgorithm { + typedCurve: string; +} + +interface EcKeyImportParams { + namedCurve: string; +} + +interface EcdhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface AesCtrParams extends Algorithm { + counter: BufferSource; + length: number; +} + +interface AesKeyAlgorithm extends KeyAlgorithm { + length: number; +} + +interface AesKeyGenParams extends Algorithm { + length: number; +} + +interface AesDerivedKeyParams extends Algorithm { + length: number; +} + +interface AesCbcParams extends Algorithm { + iv: BufferSource; +} + +interface AesCmacParams extends Algorithm { + length: number; +} + +interface AesGcmParams extends Algorithm { + iv: BufferSource; + additionalData?: BufferSource; + tagLength?: number; +} + +interface AesCfbParams extends Algorithm { + iv: BufferSource; +} + +interface HmacImportParams extends Algorithm { + hash?: AlgorithmIdentifier; + length?: number; +} + +interface HmacKeyAlgorithm extends KeyAlgorithm { + hash: AlgorithmIdentifier; + length: number; +} + +interface HmacKeyGenParams extends Algorithm { + hash: AlgorithmIdentifier; + length?: number; +} + +interface DhKeyGenParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyAlgorithm extends KeyAlgorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface DhImportKeyParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface ConcatParams extends Algorithm { + hash?: AlgorithmIdentifier; + algorithmId: Uint8Array; + partyUInfo: Uint8Array; + partyVInfo: Uint8Array; + publicInfo?: Uint8Array; + privateInfo?: Uint8Array; +} + +interface HkdfCtrParams extends Algorithm { + hash: AlgorithmIdentifier; + label: BufferSource; + context: BufferSource; +} + +interface Pbkdf2Params extends Algorithm { + salt: BufferSource; + iterations: number; + hash: AlgorithmIdentifier; +} + +interface RsaOtherPrimesInfo { + r: string; + d: string; + t: string; +} + +interface JsonWebKey { + kty: string; + use?: string; + key_ops?: string[]; + alg?: string; + kid?: string; + x5u?: string; + x5c?: string; + x5t?: string; + ext?: boolean; + crv?: string; + x?: string; + y?: string; + d?: string; + n?: string; + e?: string; + p?: string; + q?: string; + dp?: string; + dq?: string; + qi?: string; + oth?: RsaOtherPrimesInfo[]; + k?: string; +} + declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject; interface ErrorEventHandler { @@ -13746,97 +14281,97 @@ declare var msCredentials: MSCredentials; declare var name: string; declare var navigator: Navigator; declare var offscreenBuffering: string | boolean; -declare var onabort: (ev: Event) => any; -declare var onafterprint: (ev: Event) => any; -declare var onbeforeprint: (ev: Event) => any; -declare var onbeforeunload: (ev: BeforeUnloadEvent) => any; -declare var onblur: (ev: FocusEvent) => any; -declare var oncanplay: (ev: Event) => any; -declare var oncanplaythrough: (ev: Event) => any; -declare var onchange: (ev: Event) => any; -declare var onclick: (ev: MouseEvent) => any; -declare var oncompassneedscalibration: (ev: Event) => any; -declare var oncontextmenu: (ev: PointerEvent) => any; -declare var ondblclick: (ev: MouseEvent) => any; -declare var ondevicelight: (ev: DeviceLightEvent) => any; -declare var ondevicemotion: (ev: DeviceMotionEvent) => any; -declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any; -declare var ondrag: (ev: DragEvent) => any; -declare var ondragend: (ev: DragEvent) => any; -declare var ondragenter: (ev: DragEvent) => any; -declare var ondragleave: (ev: DragEvent) => any; -declare var ondragover: (ev: DragEvent) => any; -declare var ondragstart: (ev: DragEvent) => any; -declare var ondrop: (ev: DragEvent) => any; -declare var ondurationchange: (ev: Event) => any; -declare var onemptied: (ev: Event) => any; -declare var onended: (ev: MediaStreamErrorEvent) => any; +declare var onabort: (this: Window, ev: UIEvent) => any; +declare var onafterprint: (this: Window, ev: Event) => any; +declare var onbeforeprint: (this: Window, ev: Event) => any; +declare var onbeforeunload: (this: Window, ev: BeforeUnloadEvent) => any; +declare var onblur: (this: Window, ev: FocusEvent) => any; +declare var oncanplay: (this: Window, ev: Event) => any; +declare var oncanplaythrough: (this: Window, ev: Event) => any; +declare var onchange: (this: Window, ev: Event) => any; +declare var onclick: (this: Window, ev: MouseEvent) => any; +declare var oncompassneedscalibration: (this: Window, ev: Event) => any; +declare var oncontextmenu: (this: Window, ev: PointerEvent) => any; +declare var ondblclick: (this: Window, ev: MouseEvent) => any; +declare var ondevicelight: (this: Window, ev: DeviceLightEvent) => any; +declare var ondevicemotion: (this: Window, ev: DeviceMotionEvent) => any; +declare var ondeviceorientation: (this: Window, ev: DeviceOrientationEvent) => any; +declare var ondrag: (this: Window, ev: DragEvent) => any; +declare var ondragend: (this: Window, ev: DragEvent) => any; +declare var ondragenter: (this: Window, ev: DragEvent) => any; +declare var ondragleave: (this: Window, ev: DragEvent) => any; +declare var ondragover: (this: Window, ev: DragEvent) => any; +declare var ondragstart: (this: Window, ev: DragEvent) => any; +declare var ondrop: (this: Window, ev: DragEvent) => any; +declare var ondurationchange: (this: Window, ev: Event) => any; +declare var onemptied: (this: Window, ev: Event) => any; +declare var onended: (this: Window, ev: MediaStreamErrorEvent) => any; declare var onerror: ErrorEventHandler; -declare var onfocus: (ev: FocusEvent) => any; -declare var onhashchange: (ev: HashChangeEvent) => any; -declare var oninput: (ev: Event) => any; -declare var oninvalid: (ev: Event) => any; -declare var onkeydown: (ev: KeyboardEvent) => any; -declare var onkeypress: (ev: KeyboardEvent) => any; -declare var onkeyup: (ev: KeyboardEvent) => any; -declare var onload: (ev: Event) => any; -declare var onloadeddata: (ev: Event) => any; -declare var onloadedmetadata: (ev: Event) => any; -declare var onloadstart: (ev: Event) => any; -declare var onmessage: (ev: MessageEvent) => any; -declare var onmousedown: (ev: MouseEvent) => any; -declare var onmouseenter: (ev: MouseEvent) => any; -declare var onmouseleave: (ev: MouseEvent) => any; -declare var onmousemove: (ev: MouseEvent) => any; -declare var onmouseout: (ev: MouseEvent) => any; -declare var onmouseover: (ev: MouseEvent) => any; -declare var onmouseup: (ev: MouseEvent) => any; -declare var onmousewheel: (ev: WheelEvent) => any; -declare var onmsgesturechange: (ev: MSGestureEvent) => any; -declare var onmsgesturedoubletap: (ev: MSGestureEvent) => any; -declare var onmsgestureend: (ev: MSGestureEvent) => any; -declare var onmsgesturehold: (ev: MSGestureEvent) => any; -declare var onmsgesturestart: (ev: MSGestureEvent) => any; -declare var onmsgesturetap: (ev: MSGestureEvent) => any; -declare var onmsinertiastart: (ev: MSGestureEvent) => any; -declare var onmspointercancel: (ev: MSPointerEvent) => any; -declare var onmspointerdown: (ev: MSPointerEvent) => any; -declare var onmspointerenter: (ev: MSPointerEvent) => any; -declare var onmspointerleave: (ev: MSPointerEvent) => any; -declare var onmspointermove: (ev: MSPointerEvent) => any; -declare var onmspointerout: (ev: MSPointerEvent) => any; -declare var onmspointerover: (ev: MSPointerEvent) => any; -declare var onmspointerup: (ev: MSPointerEvent) => any; -declare var onoffline: (ev: Event) => any; -declare var ononline: (ev: Event) => any; -declare var onorientationchange: (ev: Event) => any; -declare var onpagehide: (ev: PageTransitionEvent) => any; -declare var onpageshow: (ev: PageTransitionEvent) => any; -declare var onpause: (ev: Event) => any; -declare var onplay: (ev: Event) => any; -declare var onplaying: (ev: Event) => any; -declare var onpopstate: (ev: PopStateEvent) => any; -declare var onprogress: (ev: ProgressEvent) => any; -declare var onratechange: (ev: Event) => any; -declare var onreadystatechange: (ev: ProgressEvent) => any; -declare var onreset: (ev: Event) => any; -declare var onresize: (ev: UIEvent) => any; -declare var onscroll: (ev: UIEvent) => any; -declare var onseeked: (ev: Event) => any; -declare var onseeking: (ev: Event) => any; -declare var onselect: (ev: UIEvent) => any; -declare var onstalled: (ev: Event) => any; -declare var onstorage: (ev: StorageEvent) => any; -declare var onsubmit: (ev: Event) => any; -declare var onsuspend: (ev: Event) => any; -declare var ontimeupdate: (ev: Event) => any; +declare var onfocus: (this: Window, ev: FocusEvent) => any; +declare var onhashchange: (this: Window, ev: HashChangeEvent) => any; +declare var oninput: (this: Window, ev: Event) => any; +declare var oninvalid: (this: Window, ev: Event) => any; +declare var onkeydown: (this: Window, ev: KeyboardEvent) => any; +declare var onkeypress: (this: Window, ev: KeyboardEvent) => any; +declare var onkeyup: (this: Window, ev: KeyboardEvent) => any; +declare var onload: (this: Window, ev: Event) => any; +declare var onloadeddata: (this: Window, ev: Event) => any; +declare var onloadedmetadata: (this: Window, ev: Event) => any; +declare var onloadstart: (this: Window, ev: Event) => any; +declare var onmessage: (this: Window, ev: MessageEvent) => any; +declare var onmousedown: (this: Window, ev: MouseEvent) => any; +declare var onmouseenter: (this: Window, ev: MouseEvent) => any; +declare var onmouseleave: (this: Window, ev: MouseEvent) => any; +declare var onmousemove: (this: Window, ev: MouseEvent) => any; +declare var onmouseout: (this: Window, ev: MouseEvent) => any; +declare var onmouseover: (this: Window, ev: MouseEvent) => any; +declare var onmouseup: (this: Window, ev: MouseEvent) => any; +declare var onmousewheel: (this: Window, ev: WheelEvent) => any; +declare var onmsgesturechange: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturedoubletap: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgestureend: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturehold: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturestart: (this: Window, ev: MSGestureEvent) => any; +declare var onmsgesturetap: (this: Window, ev: MSGestureEvent) => any; +declare var onmsinertiastart: (this: Window, ev: MSGestureEvent) => any; +declare var onmspointercancel: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerdown: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerenter: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerleave: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointermove: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerout: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerover: (this: Window, ev: MSPointerEvent) => any; +declare var onmspointerup: (this: Window, ev: MSPointerEvent) => any; +declare var onoffline: (this: Window, ev: Event) => any; +declare var ononline: (this: Window, ev: Event) => any; +declare var onorientationchange: (this: Window, ev: Event) => any; +declare var onpagehide: (this: Window, ev: PageTransitionEvent) => any; +declare var onpageshow: (this: Window, ev: PageTransitionEvent) => any; +declare var onpause: (this: Window, ev: Event) => any; +declare var onplay: (this: Window, ev: Event) => any; +declare var onplaying: (this: Window, ev: Event) => any; +declare var onpopstate: (this: Window, ev: PopStateEvent) => any; +declare var onprogress: (this: Window, ev: ProgressEvent) => any; +declare var onratechange: (this: Window, ev: Event) => any; +declare var onreadystatechange: (this: Window, ev: ProgressEvent) => any; +declare var onreset: (this: Window, ev: Event) => any; +declare var onresize: (this: Window, ev: UIEvent) => any; +declare var onscroll: (this: Window, ev: UIEvent) => any; +declare var onseeked: (this: Window, ev: Event) => any; +declare var onseeking: (this: Window, ev: Event) => any; +declare var onselect: (this: Window, ev: UIEvent) => any; +declare var onstalled: (this: Window, ev: Event) => any; +declare var onstorage: (this: Window, ev: StorageEvent) => any; +declare var onsubmit: (this: Window, ev: Event) => any; +declare var onsuspend: (this: Window, ev: Event) => any; +declare var ontimeupdate: (this: Window, ev: Event) => any; declare var ontouchcancel: (ev: TouchEvent) => any; declare var ontouchend: (ev: TouchEvent) => any; declare var ontouchmove: (ev: TouchEvent) => any; declare var ontouchstart: (ev: TouchEvent) => any; -declare var onunload: (ev: Event) => any; -declare var onvolumechange: (ev: Event) => any; -declare var onwaiting: (ev: Event) => any; +declare var onunload: (this: Window, ev: Event) => any; +declare var onvolumechange: (this: Window, ev: Event) => any; +declare var onwaiting: (this: Window, ev: Event) => any; declare var opener: Window; declare var orientation: string | number; declare var outerHeight: number; @@ -13896,120 +14431,123 @@ declare function dispatchEvent(evt: Event): boolean; declare function removeEventListener(type: string, listener?: EventListenerOrEventListenerObject, useCapture?: boolean): void; declare function clearInterval(handle: number): void; declare function clearTimeout(handle: number): void; +declare function setInterval(handler: (...args: any[]) => void, timeout: number): number; declare function setInterval(handler: any, timeout?: any, ...args: any[]): number; +declare function setTimeout(handler: (...args: any[]) => void, timeout: number): number; declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number; declare function clearImmediate(handle: number): void; -declare function setImmediate(expression: any, ...args: any[]): number; +declare function setImmediate(handler: (...args: any[]) => void): number; +declare function setImmediate(handler: any, ...args: any[]): number; declare var sessionStorage: Storage; declare var localStorage: Storage; declare var console: Console; -declare var onpointercancel: (ev: PointerEvent) => any; -declare var onpointerdown: (ev: PointerEvent) => any; -declare var onpointerenter: (ev: PointerEvent) => any; -declare var onpointerleave: (ev: PointerEvent) => any; -declare var onpointermove: (ev: PointerEvent) => any; -declare var onpointerout: (ev: PointerEvent) => any; -declare var onpointerover: (ev: PointerEvent) => any; -declare var onpointerup: (ev: PointerEvent) => any; -declare var onwheel: (ev: WheelEvent) => any; +declare var onpointercancel: (this: Window, ev: PointerEvent) => any; +declare var onpointerdown: (this: Window, ev: PointerEvent) => any; +declare var onpointerenter: (this: Window, ev: PointerEvent) => any; +declare var onpointerleave: (this: Window, ev: PointerEvent) => any; +declare var onpointermove: (this: Window, ev: PointerEvent) => any; +declare var onpointerout: (this: Window, ev: PointerEvent) => any; +declare var onpointerover: (this: Window, ev: PointerEvent) => any; +declare var onpointerup: (this: Window, ev: PointerEvent) => any; +declare var onwheel: (this: Window, ev: WheelEvent) => any; declare var indexedDB: IDBFactory; declare function atob(encodedString: string): string; declare function btoa(rawString: string): string; -declare function addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "devicelight", listener: (ev: DeviceLightEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "ended", listener: (ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "invalid", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "mousewheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void; -declare function addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void; -declare function addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureChange", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureDoubleTap", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureEnd", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureHold", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureStart", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSGestureTap", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSInertiaStart", listener: (this: Window, ev: MSGestureEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerCancel", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerDown", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerEnter", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerLeave", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerMove", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerOut", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerOver", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "MSPointerUp", listener: (this: Window, ev: MSPointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "abort", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "afterprint", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "beforeprint", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "beforeunload", listener: (this: Window, ev: BeforeUnloadEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "blur", listener: (this: Window, ev: FocusEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "canplay", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "canplaythrough", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "change", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "click", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "compassneedscalibration", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "contextmenu", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dblclick", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "devicelight", listener: (this: Window, ev: DeviceLightEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "devicemotion", listener: (this: Window, ev: DeviceMotionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "deviceorientation", listener: (this: Window, ev: DeviceOrientationEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "drag", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragend", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragenter", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragleave", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragover", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "dragstart", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "drop", listener: (this: Window, ev: DragEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "durationchange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "emptied", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "ended", listener: (this: Window, ev: MediaStreamErrorEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "focus", listener: (this: Window, ev: FocusEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "hashchange", listener: (this: Window, ev: HashChangeEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "input", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "invalid", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keydown", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keypress", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "keyup", listener: (this: Window, ev: KeyboardEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "load", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadeddata", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadedmetadata", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "loadstart", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "message", listener: (this: Window, ev: MessageEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousedown", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseenter", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseleave", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousemove", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseout", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseover", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mouseup", listener: (this: Window, ev: MouseEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "mousewheel", listener: (this: Window, ev: WheelEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "offline", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "online", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "orientationchange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pagehide", listener: (this: Window, ev: PageTransitionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pageshow", listener: (this: Window, ev: PageTransitionEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pause", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "play", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "playing", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointercancel", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerdown", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerenter", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerleave", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointermove", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerout", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerover", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "pointerup", listener: (this: Window, ev: PointerEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "popstate", listener: (this: Window, ev: PopStateEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "progress", listener: (this: Window, ev: ProgressEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "ratechange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "readystatechange", listener: (this: Window, ev: ProgressEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "reset", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "resize", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "scroll", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "seeked", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "seeking", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "select", listener: (this: Window, ev: UIEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "stalled", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "storage", listener: (this: Window, ev: StorageEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "submit", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "suspend", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "timeupdate", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "unload", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "volumechange", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "waiting", listener: (this: Window, ev: Event) => any, useCapture?: boolean): void; +declare function addEventListener(type: "wheel", listener: (this: Window, ev: WheelEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; type AAGUID = string; type AlgorithmIdentifier = string | Algorithm; @@ -14042,4 +14580,6 @@ type MSOutboundPayload = MSVideoSendPayload | MSAudioSendPayload; type RTCIceGatherCandidate = RTCIceCandidate | RTCIceCandidateComplete; type RTCTransport = RTCDtlsTransport | RTCSrtpSdesTransport; type payloadtype = number; -type IDBValidKey = number | string | Date | IDBArrayKey; \ No newline at end of file +type IDBValidKey = number | string | Date | IDBArrayKey; +type BufferSource = ArrayBuffer | ArrayBufferView; +type MouseWheelEvent = WheelEvent; \ No newline at end of file diff --git a/src/lib/es2015.promise.d.ts b/src/lib/es2015.promise.d.ts index 6ade205dc42..c5af984f7e0 100644 --- a/src/lib/es2015.promise.d.ts +++ b/src/lib/es2015.promise.d.ts @@ -3,59 +3,149 @@ */ interface Promise { /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; - then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled: (value: T) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; + + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled: (value: T) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; + + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled: (value: T) => TResult | PromiseLike): Promise; + + /** + * Creates a new Promise with the same internal state of this Promise. + * @returns A Promise. + */ + then(): Promise; /** * Attaches a callback for only the rejection of the Promise. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of the callback. */ - catch(onrejected?: (reason: any) => T | PromiseLike): Promise; - catch(onrejected?: (reason: any) => void): Promise; + catch(onrejected: (reason: any) => TResult | PromiseLike): Promise; + + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected: (reason: any) => T | PromiseLike): Promise; } interface PromiseConstructor { - /** - * A reference to the prototype. + /** + * A reference to the prototype. */ readonly prototype: Promise; /** * Creates a new Promise. - * @param executor A callback used to initialize the promise. This callback is passed two arguments: - * a resolve callback used resolve the promise with a value or the result of another promise, + * @param executor A callback used to initialize the promise. This callback is passed two arguments: + * a resolve callback used resolve the promise with a value or the result of another promise, * and a reject callback used to reject the promise with a provided reason or error. */ new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; /** - * Creates a Promise that is resolved with an array of results when all of the provided Promises + * Creates a Promise that is resolved with an array of results when all of the provided Promises * resolve, or rejected when any Promise is rejected. * @param values An array of Promises. * @returns A new Promise. */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike , T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike ]): Promise<[T1, T2, T3, T4]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; + + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ all(values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; + /** + * Creates a Promise that is resolved with an array of results when all of the provided Promises + * resolve, or rejected when any Promise is rejected. + * @param values An array of Promises. + * @returns A new Promise. + */ + all(values: (T | PromiseLike)[]): Promise; + /** * Creates a new rejected promise for the provided reason. * @param reason The reason the promise was rejected. * @returns A new rejected Promise. */ - reject(reason: any): Promise; + reject(reason: any): Promise; /** * Creates a new rejected promise for the provided reason. diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 8447b31fc89..77b960409c2 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -971,7 +971,7 @@ interface JSON { /** * 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 An array of strings and numbers that acts as a white list for selecting the object properties that will be stringified. + * @param replacer An array of strings and numbers that acts as a approved 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?: (number | string)[] | null, space?: string | number): string; @@ -1524,7 +1524,7 @@ 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, + * 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. @@ -1797,7 +1797,7 @@ 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, + * 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. @@ -2071,7 +2071,7 @@ 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, + * 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. @@ -2344,7 +2344,7 @@ 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, + * 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. @@ -2618,7 +2618,7 @@ 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, + * 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. @@ -2891,7 +2891,7 @@ 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, + * 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. @@ -3164,7 +3164,7 @@ 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, + * 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. @@ -3437,7 +3437,7 @@ 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, + * 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. @@ -3711,7 +3711,7 @@ 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, + * 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. diff --git a/src/lib/scripthost.d.ts b/src/lib/scripthost.d.ts index 7faae06714c..b163a7e5154 100644 --- a/src/lib/scripthost.d.ts +++ b/src/lib/scripthost.d.ts @@ -276,3 +276,16 @@ interface VBArrayConstructor { } declare var VBArray: VBArrayConstructor; + +/** + * Automation date (VT_DATE) + */ +interface VarDate { } + +interface DateConstructor { + new (vd: VarDate): Date; +} + +interface Date { + getVarDate: () => VarDate; +} diff --git a/src/lib/webworker.generated.d.ts b/src/lib/webworker.generated.d.ts index f5c77b8594d..c61a1a8b8a6 100644 --- a/src/lib/webworker.generated.d.ts +++ b/src/lib/webworker.generated.d.ts @@ -3,6 +3,10 @@ /// IE Worker APIs ///////////////////////////// +interface Algorithm { + name: string; +} + interface EventInit { bubbles?: boolean; cancelable?: boolean; @@ -18,6 +22,10 @@ interface IDBObjectStoreParameters { keyPath?: IDBKeyPath; } +interface KeyAlgorithm { + name?: string; +} + interface EventListener { (evt: Event): void; } @@ -107,6 +115,18 @@ declare var Coordinates: { new(): Coordinates; } +interface CryptoKey { + readonly algorithm: KeyAlgorithm; + readonly extractable: boolean; + readonly type: string; + readonly usages: string[]; +} + +declare var CryptoKey: { + prototype: CryptoKey; + new(): CryptoKey; +} + interface DOMError { readonly name: string; toString(): string; @@ -322,8 +342,8 @@ declare var IDBCursorWithValue: { interface IDBDatabase extends EventTarget { readonly name: string; readonly objectStoreNames: DOMStringList; - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; version: number; onversionchange: (ev: IDBVersionChangeEvent) => any; close(): void; @@ -331,8 +351,8 @@ interface IDBDatabase extends EventTarget { deleteObjectStore(name: string): void; transaction(storeNames: string | string[], mode?: string): IDBTransaction; addEventListener(type: "versionchange", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -410,12 +430,12 @@ declare var IDBObjectStore: { } interface IDBOpenDBRequest extends IDBRequest { - onblocked: (ev: Event) => any; - onupgradeneeded: (ev: IDBVersionChangeEvent) => any; - addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; + onblocked: (this: this, ev: Event) => any; + onupgradeneeded: (this: this, ev: IDBVersionChangeEvent) => any; + addEventListener(type: "blocked", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "upgradeneeded", listener: (this: this, ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -426,14 +446,14 @@ declare var IDBOpenDBRequest: { interface IDBRequest extends EventTarget { readonly error: DOMError; - onerror: (ev: Event) => any; - onsuccess: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onsuccess: (this: this, ev: Event) => any; readonly readyState: string; readonly result: any; source: IDBObjectStore | IDBIndex | IDBCursor; readonly transaction: IDBTransaction; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "success", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -446,17 +466,17 @@ interface IDBTransaction extends EventTarget { readonly db: IDBDatabase; readonly error: DOMError; readonly mode: string; - onabort: (ev: Event) => any; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + onabort: (this: this, ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; abort(): void; objectStore(name: string): IDBObjectStore; readonly READ_ONLY: string; readonly READ_WRITE: string; readonly VERSION_CHANGE: string; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -515,16 +535,16 @@ declare var MSApp: MSApp; interface MSAppAsyncOperation extends EventTarget { readonly error: DOMError; - oncomplete: (ev: Event) => any; - onerror: (ev: Event) => any; + oncomplete: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly readyState: number; readonly result: any; start(): void; readonly COMPLETED: number; readonly ERROR: number; readonly STARTED: number; - addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "complete", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -608,11 +628,11 @@ declare var MessageEvent: { } interface MessagePort extends EventTarget { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; close(): void; postMessage(message?: any, ports?: any): void; start(): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -664,10 +684,10 @@ interface WebSocket extends EventTarget { binaryType: string; readonly bufferedAmount: number; readonly extensions: string; - onclose: (ev: CloseEvent) => any; - onerror: (ev: Event) => any; - onmessage: (ev: MessageEvent) => any; - onopen: (ev: Event) => any; + onclose: (this: this, ev: CloseEvent) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; + onopen: (this: this, ev: Event) => any; readonly protocol: string; readonly readyState: number; readonly url: string; @@ -677,10 +697,10 @@ interface WebSocket extends EventTarget { readonly CLOSING: number; readonly CONNECTING: number; readonly OPEN: number; - addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; - addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "close", listener: (this: this, ev: CloseEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "open", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -694,11 +714,11 @@ declare var WebSocket: { } interface Worker extends EventTarget, AbstractWorker { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; postMessage(message: any, ports?: any): void; terminate(): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -708,8 +728,7 @@ declare var Worker: { } interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { - msCaching: string; - onreadystatechange: (ev: ProgressEvent) => any; + onreadystatechange: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly response: any; readonly responseText: string; @@ -720,6 +739,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { timeout: number; readonly upload: XMLHttpRequestUpload; withCredentials: boolean; + msCaching?: string; abort(): void; getAllResponseHeaders(): string; getResponseHeader(header: string): string | null; @@ -734,14 +754,14 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { readonly LOADING: number; readonly OPENED: number; readonly UNSENT: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -766,30 +786,30 @@ declare var XMLHttpRequestUpload: { } interface AbstractWorker { - onerror: (ev: Event) => any; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; + onerror: (this: this, ev: ErrorEvent) => any; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } interface MSBaseReader { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; readonly readyState: number; readonly result: any; abort(): void; readonly DONE: number; readonly EMPTY: number; readonly LOADING: number; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -818,20 +838,20 @@ interface WindowConsole { } interface XMLHttpRequestEventTarget { - onabort: (ev: Event) => any; - onerror: (ev: Event) => any; - onload: (ev: Event) => any; - onloadend: (ev: ProgressEvent) => any; - onloadstart: (ev: Event) => any; - onprogress: (ev: ProgressEvent) => any; - ontimeout: (ev: ProgressEvent) => any; - addEventListener(type: "abort", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void; - addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; - addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void; + onabort: (this: this, ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; + onload: (this: this, ev: Event) => any; + onloadend: (this: this, ev: ProgressEvent) => any; + onloadstart: (this: this, ev: Event) => any; + onprogress: (this: this, ev: ProgressEvent) => any; + ontimeout: (this: this, ev: ProgressEvent) => any; + addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void; + addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; + addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -849,13 +869,13 @@ declare var FileReaderSync: { interface WorkerGlobalScope extends EventTarget, WorkerUtils, DedicatedWorkerGlobalScope, WindowConsole { readonly location: WorkerLocation; - onerror: (ev: Event) => any; + onerror: (this: this, ev: ErrorEvent) => any; readonly self: WorkerGlobalScope; close(): void; msWriteProfilerMark(profilerMarkName: string): void; toString(): string; - addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -891,9 +911,9 @@ declare var WorkerNavigator: { } interface DedicatedWorkerGlobalScope { - onmessage: (ev: MessageEvent) => any; + onmessage: (this: this, ev: MessageEvent) => any; postMessage(data: any): void; - addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; + addEventListener(type: "message", listener: (this: this, ev: MessageEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -905,8 +925,11 @@ interface WorkerUtils extends Object, WindowBase64 { clearInterval(handle: number): void; clearTimeout(handle: number): void; importScripts(...urls: string[]): void; + setImmediate(handler: (...args: any[]) => void): number; setImmediate(handler: any, ...args: any[]): number; + setInterval(handler: (...args: any[]) => void, timeout: number): number; setInterval(handler: any, timeout?: any, ...args: any[]): number; + setTimeout(handler: (...args: any[]) => void, timeout: number): number; setTimeout(handler: any, timeout?: any, ...args: any[]): number; } @@ -942,6 +965,177 @@ interface ProgressEventInit extends EventInit { interface IDBArrayKey extends Array { } +interface RsaKeyGenParams extends Algorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyGenParams extends RsaKeyGenParams { + hash: AlgorithmIdentifier; +} + +interface RsaKeyAlgorithm extends KeyAlgorithm { + modulusLength: number; + publicExponent: Uint8Array; +} + +interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { + hash: AlgorithmIdentifier; +} + +interface RsaHashedImportParams { + hash: AlgorithmIdentifier; +} + +interface RsaPssParams { + saltLength: number; +} + +interface RsaOaepParams extends Algorithm { + label?: BufferSource; +} + +interface EcdsaParams extends Algorithm { + hash: AlgorithmIdentifier; +} + +interface EcKeyGenParams extends Algorithm { + typedCurve: string; +} + +interface EcKeyAlgorithm extends KeyAlgorithm { + typedCurve: string; +} + +interface EcKeyImportParams { + namedCurve: string; +} + +interface EcdhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface AesCtrParams extends Algorithm { + counter: BufferSource; + length: number; +} + +interface AesKeyAlgorithm extends KeyAlgorithm { + length: number; +} + +interface AesKeyGenParams extends Algorithm { + length: number; +} + +interface AesDerivedKeyParams extends Algorithm { + length: number; +} + +interface AesCbcParams extends Algorithm { + iv: BufferSource; +} + +interface AesCmacParams extends Algorithm { + length: number; +} + +interface AesGcmParams extends Algorithm { + iv: BufferSource; + additionalData?: BufferSource; + tagLength?: number; +} + +interface AesCfbParams extends Algorithm { + iv: BufferSource; +} + +interface HmacImportParams extends Algorithm { + hash?: AlgorithmIdentifier; + length?: number; +} + +interface HmacKeyAlgorithm extends KeyAlgorithm { + hash: AlgorithmIdentifier; + length: number; +} + +interface HmacKeyGenParams extends Algorithm { + hash: AlgorithmIdentifier; + length?: number; +} + +interface DhKeyGenParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyAlgorithm extends KeyAlgorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface DhKeyDeriveParams extends Algorithm { + public: CryptoKey; +} + +interface DhImportKeyParams extends Algorithm { + prime: Uint8Array; + generator: Uint8Array; +} + +interface ConcatParams extends Algorithm { + hash?: AlgorithmIdentifier; + algorithmId: Uint8Array; + partyUInfo: Uint8Array; + partyVInfo: Uint8Array; + publicInfo?: Uint8Array; + privateInfo?: Uint8Array; +} + +interface HkdfCtrParams extends Algorithm { + hash: AlgorithmIdentifier; + label: BufferSource; + context: BufferSource; +} + +interface Pbkdf2Params extends Algorithm { + salt: BufferSource; + iterations: number; + hash: AlgorithmIdentifier; +} + +interface RsaOtherPrimesInfo { + r: string; + d: string; + t: string; +} + +interface JsonWebKey { + kty: string; + use?: string; + key_ops?: string[]; + alg?: string; + kid?: string; + x5u?: string; + x5c?: string; + x5t?: string; + ext?: boolean; + crv?: string; + x?: string; + y?: string; + d?: string; + n?: string; + e?: string; + p?: string; + q?: string; + dp?: string; + dq?: string; + qi?: string; + oth?: RsaOtherPrimesInfo[]; + k?: string; +} + declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject; interface ErrorEventHandler { @@ -975,7 +1169,7 @@ interface FunctionStringCallback { (data: string): void; } declare var location: WorkerLocation; -declare var onerror: (ev: Event) => any; +declare var onerror: (this: WorkerGlobalScope, ev: ErrorEvent) => any; declare var self: WorkerGlobalScope; declare function close(): void; declare function msWriteProfilerMark(profilerMarkName: string): void; @@ -990,16 +1184,21 @@ declare function clearImmediate(handle: number): void; declare function clearInterval(handle: number): void; declare function clearTimeout(handle: number): void; declare function importScripts(...urls: string[]): void; +declare function setImmediate(handler: (...args: any[]) => void): number; declare function setImmediate(handler: any, ...args: any[]): number; +declare function setInterval(handler: (...args: any[]) => void, timeout: number): number; declare function setInterval(handler: any, timeout?: any, ...args: any[]): number; +declare function setTimeout(handler: (...args: any[]) => void, timeout: number): number; declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number; declare function atob(encodedString: string): string; declare function btoa(rawString: string): string; -declare var onmessage: (ev: MessageEvent) => any; +declare var onmessage: (this: WorkerGlobalScope, ev: MessageEvent) => any; declare function postMessage(data: any): void; 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: "error", listener: (this: WorkerGlobalScope, ev: ErrorEvent) => any, useCapture?: boolean): void; +declare function addEventListener(type: "message", listener: (this: WorkerGlobalScope, ev: MessageEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; +type AlgorithmIdentifier = string | Algorithm; type IDBKeyPath = string; -type IDBValidKey = number | string | Date | IDBArrayKey; \ No newline at end of file +type IDBValidKey = number | string | Date | IDBArrayKey; +type BufferSource = ArrayBuffer | ArrayBufferView; \ No newline at end of file diff --git a/src/server/client.ts b/src/server/client.ts index 864dac9fdaa..f04dbd8dc02 100644 --- a/src/server/client.ts +++ b/src/server/client.ts @@ -45,8 +45,9 @@ namespace ts.server { return lineMap; } - private lineOffsetToPosition(fileName: string, lineOffset: protocol.Location): number { - return ts.computePositionOfLineAndCharacter(this.getLineMap(fileName), lineOffset.line - 1, lineOffset.offset - 1); + private lineOffsetToPosition(fileName: string, lineOffset: protocol.Location, lineMap?: number[]): number { + lineMap = lineMap || this.getLineMap(fileName); + return ts.computePositionOfLineAndCharacter(lineMap, lineOffset.line - 1, lineOffset.offset - 1); } private positionToOneBasedLineOffset(fileName: string, position: number): protocol.Location { @@ -449,7 +450,7 @@ namespace ts.server { return this.lastRenameEntry.locations; } - decodeNavigationBarItems(items: protocol.NavigationBarItem[], fileName: string): NavigationBarItem[] { + decodeNavigationBarItems(items: protocol.NavigationBarItem[], fileName: string, lineMap: number[]): NavigationBarItem[] { if (!items) { return []; } @@ -458,8 +459,11 @@ 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))), - childItems: this.decodeNavigationBarItems(item.childItems, fileName), + spans: item.spans.map(span => + createTextSpanFromBounds( + this.lineOffsetToPosition(fileName, span.start, lineMap), + this.lineOffsetToPosition(fileName, span.end, lineMap))), + childItems: this.decodeNavigationBarItems(item.childItems, fileName, lineMap), indent: item.indent, bolded: false, grayed: false @@ -474,7 +478,8 @@ namespace ts.server { const request = this.processRequest(CommandNames.NavBar, args); const response = this.processResponse(request); - return this.decodeNavigationBarItems(response.body, fileName); + const lineMap = this.getLineMap(fileName); + return this.decodeNavigationBarItems(response.body, fileName, lineMap); } getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): TextSpan { @@ -583,7 +588,7 @@ namespace ts.server { throw new Error("Not Implemented Yet."); } - isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): boolean { + isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean { throw new Error("Not Implemented Yet."); } diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index b887b5c7256..6a2beccc243 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -27,6 +27,8 @@ namespace ts.server { }); } + export const maxProgramSizeForNonTsFiles = 20 * 1024 * 1024; + export class ScriptInfo { svc: ScriptVersionCache; children: ScriptInfo[] = []; // files referenced by this file @@ -36,7 +38,7 @@ namespace ts.server { path: Path; scriptKind: ScriptKind; - constructor(private host: ServerHost, public fileName: string, public content: string, public isOpen = false) { + constructor(private host: ServerHost, public fileName: string, content: string, public isOpen = false) { this.path = toPath(fileName, host.getCurrentDirectory(), createGetCanonicalFileName(host.useCaseSensitiveFileNames)); this.svc = ScriptVersionCache.fromString(host, content); } @@ -357,18 +359,23 @@ namespace ts.server { * @param line 1-based index * @param offset 1-based index */ - positionToLineOffset(filename: string, position: number): ILineInfo { + positionToLineOffset(filename: string, position: number, lineIndex?: LineIndex): ILineInfo { + lineIndex = lineIndex || this.getLineIndex(filename); + const lineOffset = lineIndex.charOffsetToLineNumberAndPos(position); + return { line: lineOffset.line, offset: lineOffset.offset + 1 }; + } + + getLineIndex(filename: string): LineIndex { const path = toPath(filename, this.host.getCurrentDirectory(), this.getCanonicalFileName); const script: ScriptInfo = this.filenameToScript.get(path); - const index = script.snap().index; - const lineOffset = index.charOffsetToLineNumberAndPos(position); - return { line: lineOffset.line, offset: lineOffset.offset + 1 }; + return script.snap().index; } } export interface ProjectOptions { // these fields can be present in the project file files?: string[]; + wildcardDirectories?: ts.Map; compilerOptions?: ts.CompilerOptions; } @@ -377,6 +384,7 @@ namespace ts.server { projectFilename: string; projectFileWatcher: FileWatcher; directoryWatcher: FileWatcher; + directoriesWatchedForWildcards: Map; // Used to keep track of what directories are watched for this project directoriesWatchedForTsconfig: string[] = []; program: ts.Program; @@ -385,12 +393,29 @@ namespace ts.server { /** Used for configured projects which may have multiple open roots */ openRefCount = 0; - constructor(public projectService: ProjectService, public projectOptions?: ProjectOptions) { + constructor( + public projectService: ProjectService, + public projectOptions?: ProjectOptions, + public languageServiceDiabled = false) { if (projectOptions && projectOptions.files) { // If files are listed explicitly, allow all extensions projectOptions.compilerOptions.allowNonTsExtensions = true; } - this.compilerService = new CompilerService(this, projectOptions && projectOptions.compilerOptions); + if (!languageServiceDiabled) { + this.compilerService = new CompilerService(this, projectOptions && projectOptions.compilerOptions); + } + } + + enableLanguageService() { + // if the language service was disabled, we should re-initiate the compiler service + if (this.languageServiceDiabled) { + this.compilerService = new CompilerService(this, this.projectOptions && this.projectOptions.compilerOptions); + } + this.languageServiceDiabled = false; + } + + disableLanguageService() { + this.languageServiceDiabled = true; } addOpenRef() { @@ -407,19 +432,45 @@ namespace ts.server { } getRootFiles() { + if (this.languageServiceDiabled) { + // When the languageService was disabled, only return file list if it is a configured project + return this.projectOptions ? this.projectOptions.files : undefined; + } + return this.compilerService.host.roots.map(info => info.fileName); } getFileNames() { + if (this.languageServiceDiabled) { + if (!this.projectOptions) { + return undefined; + } + + const fileNames: string[] = []; + if (this.projectOptions && this.projectOptions.compilerOptions) { + fileNames.push(getDefaultLibFilePath(this.projectOptions.compilerOptions)); + } + ts.addRange(fileNames, this.projectOptions.files); + return fileNames; + } + const sourceFiles = this.program.getSourceFiles(); return sourceFiles.map(sourceFile => sourceFile.fileName); } getSourceFile(info: ScriptInfo) { + if (this.languageServiceDiabled) { + return undefined; + } + return this.filenameToSourceFile[info.fileName]; } getSourceFileFromName(filename: string, requireOpen?: boolean) { + if (this.languageServiceDiabled) { + return undefined; + } + const info = this.projectService.getScriptInfo(filename); if (info) { if ((!requireOpen) || info.isOpen) { @@ -429,15 +480,27 @@ namespace ts.server { } isRoot(info: ScriptInfo) { + if (this.languageServiceDiabled) { + return undefined; + } + return this.compilerService.host.roots.some(root => root === info); } removeReferencedFile(info: ScriptInfo) { + if (this.languageServiceDiabled) { + return; + } + this.compilerService.host.removeReferencedFile(info); this.updateGraph(); } updateFileMap() { + if (this.languageServiceDiabled) { + return; + } + this.filenameToSourceFile = {}; const sourceFiles = this.program.getSourceFiles(); for (let i = 0, len = sourceFiles.length; i < len; i++) { @@ -447,11 +510,19 @@ namespace ts.server { } finishGraph() { + if (this.languageServiceDiabled) { + return; + } + this.updateGraph(); this.compilerService.languageService.getNavigateToItems(".*"); } updateGraph() { + if (this.languageServiceDiabled) { + return; + } + this.program = this.compilerService.languageService.getProgram(); this.updateFileMap(); } @@ -462,15 +533,32 @@ namespace ts.server { // add a root file to project addRoot(info: ScriptInfo) { + if (this.languageServiceDiabled) { + return; + } + this.compilerService.host.addRoot(info); } // remove a root file from project removeRoot(info: ScriptInfo) { + if (this.languageServiceDiabled) { + return; + } + this.compilerService.host.removeRoot(info); } filesToString() { + if (this.languageServiceDiabled) { + if (this.projectOptions) { + let strBuilder = ""; + ts.forEach(this.projectOptions.files, + file => { strBuilder += file + "\n"; }); + return strBuilder; + } + } + let strBuilder = ""; ts.forEachValue(this.filenameToSourceFile, sourceFile => { strBuilder += sourceFile.fileName + "\n"; }); @@ -481,7 +569,9 @@ namespace ts.server { this.projectOptions = projectOptions; if (projectOptions.compilerOptions) { projectOptions.compilerOptions.allowNonTsExtensions = true; - this.compilerService.setCompilerOptions(projectOptions.compilerOptions); + if (!this.languageServiceDiabled) { + this.compilerService.setCompilerOptions(projectOptions.compilerOptions); + } } } } @@ -764,6 +854,8 @@ namespace ts.server { if (project.isConfiguredProject()) { project.projectFileWatcher.close(); project.directoryWatcher.close(); + forEachValue(project.directoriesWatchedForWildcards, watcher => { watcher.close(); }); + delete project.directoriesWatchedForWildcards; this.configuredProjects = copyListRemovingItem(project, this.configuredProjects); } else { @@ -807,6 +899,7 @@ namespace ts.server { else { this.findReferencingProjects(info); if (info.defaultProject) { + info.defaultProject.addOpenRef(); this.openFilesReferenced.push(info); } else { @@ -1255,12 +1348,30 @@ namespace ts.server { else { const projectOptions: ProjectOptions = { files: parsedCommandLine.fileNames, - compilerOptions: parsedCommandLine.options + wildcardDirectories: parsedCommandLine.wildcardDirectories, + compilerOptions: parsedCommandLine.options, }; return { succeeded: true, projectOptions }; } } + } + private exceedTotalNonTsFileSizeLimit(fileNames: string[]) { + let totalNonTsFileSize = 0; + if (!this.host.getFileSize) { + return false; + } + + for (const fileName of fileNames) { + if (hasTypeScriptFileExtension(fileName)) { + continue; + } + totalNonTsFileSize += this.host.getFileSize(fileName); + if (totalNonTsFileSize > maxProgramSizeForNonTsFiles) { + return true; + } + } + return false; } openConfigFile(configFilename: string, clientFileName?: string): { success: boolean, project?: Project, errors?: Diagnostic[] } { @@ -1269,6 +1380,19 @@ namespace ts.server { return { success: false, errors }; } else { + if (!projectOptions.compilerOptions.disableSizeLimit && projectOptions.compilerOptions.allowJs) { + if (this.exceedTotalNonTsFileSizeLimit(projectOptions.files)) { + const project = this.createProject(configFilename, projectOptions, /*languageServiceDisabled*/ true); + + // for configured projects with languageService disabled, we only watch its config file, + // do not care about the directory changes in the folder. + project.projectFileWatcher = this.host.watchFile( + toPath(configFilename, configFilename, createGetCanonicalFileName(sys.useCaseSensitiveFileNames)), + _ => this.watchedProjectConfigFileChanged(project)); + return { success: true, project }; + } + } + const project = this.createProject(configFilename, projectOptions); let errors: Diagnostic[]; for (const rootFilename of projectOptions.files) { @@ -1282,17 +1406,35 @@ namespace ts.server { } project.finishGraph(); project.projectFileWatcher = this.host.watchFile(configFilename, _ => this.watchedProjectConfigFileChanged(project)); - this.log("Add recursive watcher for: " + ts.getDirectoryPath(configFilename)); + + const configDirectoryPath = ts.getDirectoryPath(configFilename); + + this.log("Add recursive watcher for: " + configDirectoryPath); project.directoryWatcher = this.host.watchDirectory( - ts.getDirectoryPath(configFilename), + configDirectoryPath, path => this.directoryWatchedForSourceFilesChanged(project, path), /*recursive*/ true ); + + project.directoriesWatchedForWildcards = reduceProperties(projectOptions.wildcardDirectories, (watchers, flag, directory) => { + if (comparePaths(configDirectoryPath, directory, ".", !this.host.useCaseSensitiveFileNames) !== Comparison.EqualTo) { + const recursive = (flag & WatchDirectoryFlags.Recursive) !== 0; + this.log(`Add ${ recursive ? "recursive " : ""}watcher for: ${directory}`); + watchers[directory] = this.host.watchDirectory( + directory, + path => this.directoryWatchedForSourceFilesChanged(project, path), + recursive + ); + } + + return watchers; + }, >{}); + return { success: true, project: project, errors }; } } - updateConfiguredProject(project: Project) { + updateConfiguredProject(project: Project): Diagnostic[] { if (!this.host.fileExists(project.projectFilename)) { this.log("Config file deleted"); this.removeProject(project); @@ -1303,7 +1445,43 @@ namespace ts.server { return errors; } else { - const oldFileNames = project.compilerService.host.roots.map(info => info.fileName); + if (projectOptions.compilerOptions && !projectOptions.compilerOptions.disableSizeLimit && this.exceedTotalNonTsFileSizeLimit(projectOptions.files)) { + project.setProjectOptions(projectOptions); + if (project.languageServiceDiabled) { + return; + } + + project.disableLanguageService(); + if (project.directoryWatcher) { + project.directoryWatcher.close(); + project.directoryWatcher = undefined; + } + return; + } + + if (project.languageServiceDiabled) { + project.setProjectOptions(projectOptions); + project.enableLanguageService(); + project.directoryWatcher = this.host.watchDirectory( + ts.getDirectoryPath(project.projectFilename), + path => this.directoryWatchedForSourceFilesChanged(project, path), + /*recursive*/ true + ); + + for (const rootFilename of projectOptions.files) { + if (this.host.fileExists(rootFilename)) { + const info = this.openFile(rootFilename, /*openedByClient*/ false); + project.addRoot(info); + } + } + project.finishGraph(); + return; + } + + // if the project is too large, the root files might not have been all loaded if the total + // program size reached the upper limit. In that case project.projectOptions.files should + // be more precise. However this would only happen for configured project. + const oldFileNames = project.projectOptions ? project.projectOptions.files : project.compilerService.host.roots.map(info => info.fileName); 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); @@ -1346,8 +1524,8 @@ namespace ts.server { } } - createProject(projectFilename: string, projectOptions?: ProjectOptions) { - const project = new Project(this, projectOptions); + createProject(projectFilename: string, projectOptions?: ProjectOptions, languageServiceDisabled?: boolean) { + const project = new Project(this, projectOptions, languageServiceDisabled); project.projectFilename = projectFilename; return project; } @@ -1388,6 +1566,7 @@ namespace ts.server { static getDefaultFormatCodeOptions(host: ServerHost): ts.FormatCodeOptions { return ts.clone({ + BaseIndentSize: 0, IndentSize: 4, TabSize: 4, NewLineCharacter: host.newLine || "\n", @@ -1401,6 +1580,7 @@ namespace ts.server { InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, + InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false, PlaceOpenBraceOnNewLineForFunctions: false, PlaceOpenBraceOnNewLineForControlBlocks: false, }); diff --git a/src/server/protocol.d.ts b/src/server/protocol.d.ts index b62d89ae520..6442848abbe 100644 --- a/src/server/protocol.d.ts +++ b/src/server/protocol.d.ts @@ -123,6 +123,10 @@ declare namespace ts.server.protocol { * The list of normalized file name in the project, including 'lib.d.ts' */ fileNames?: string[]; + /** + * Indicates if the project has a active language service instance + */ + languageServiceDisabled?: boolean; } /** @@ -434,6 +438,9 @@ declare namespace ts.server.protocol { /** Number of spaces to indent during formatting. Default value is 4. */ indentSize?: number; + /** Number of additional spaces to indent during formatting to preserve base indentation (ex. script block indentation). Default value is 0. */ + baseIndentSize?: number; + /** The new line character to be used. Default value is the OS line delimiter. */ newLineCharacter?: string; @@ -474,7 +481,7 @@ declare namespace ts.server.protocol { placeOpenBraceOnNewLineForControlBlocks?: boolean; /** Index operator */ - [key: string]: string | number | boolean; + [key: string]: string | number | boolean | undefined; } /** @@ -900,7 +907,6 @@ declare namespace ts.server.protocol { * Arguments of a signature help request. */ export interface SignatureHelpRequestArgs extends FileLocationRequestArgs { - } /** @@ -919,6 +925,32 @@ declare namespace ts.server.protocol { body?: SignatureHelpItems; } + /** + * Synchronous request for semantic diagnostics of one file. + */ + export interface SemanticDiagnosticsSyncRequest extends FileRequest { + } + + /** + * Response object for synchronous sematic diagnostics request. + */ + export interface SemanticDiagnosticsSyncResponse extends Response { + body?: Diagnostic[]; + } + + /** + * Synchronous request for syntactic diagnostics of one file. + */ + export interface SyntacticDiagnosticsSyncRequest extends FileRequest { + } + + /** + * Response object for synchronous syntactic diagnostics request. + */ + export interface SyntacticDiagnosticsSyncResponse extends Response { + body?: Diagnostic[]; + } + /** * Arguments for GeterrForProject request. */ diff --git a/src/server/session.ts b/src/server/session.ts index 2964dc66505..7e1ca81e2af 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -111,6 +111,8 @@ namespace ts.server { export const Formatonkey = "formatonkey"; export const Geterr = "geterr"; export const GeterrForProject = "geterrForProject"; + export const SemanticDiagnosticsSync = "semanticDiagnosticsSync"; + export const SyntacticDiagnosticsSync = "syntacticDiagnosticsSync"; export const NavBar = "navbar"; export const Navto = "navto"; export const Occurrences = "occurrences"; @@ -130,6 +132,7 @@ namespace ts.server { namespace Errors { export const NoProject = new Error("No Project."); + export const ProjectLanguageServiceDisabled = new Error("The project's language service is disabled."); } export interface ServerHost extends ts.System { @@ -313,7 +316,7 @@ namespace ts.server { private getDefinition(line: number, offset: number, fileName: string): protocol.FileSpan[] { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -335,7 +338,7 @@ namespace ts.server { private getTypeDefinition(line: number, offset: number, fileName: string): protocol.FileSpan[] { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -358,7 +361,7 @@ namespace ts.server { fileName = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(fileName); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -384,11 +387,32 @@ namespace ts.server { }); } + private getDiagnosticsWorker(args: protocol.FileRequestArgs, selector: (project: Project, file: string) => Diagnostic[]) { + const file = normalizePath(args.file); + const project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + if (project.languageServiceDiabled) { + throw Errors.ProjectLanguageServiceDisabled; + } + const diagnostics = selector(project, file); + return ts.map(diagnostics, originalDiagnostic => formatDiag(file, project, originalDiagnostic)); + } + + private getSyntacticDiagnosticsSync(args: protocol.FileRequestArgs): protocol.Diagnostic[] { + return this.getDiagnosticsWorker(args, (project, file) => project.compilerService.languageService.getSyntacticDiagnostics(file)); + } + + private getSemanticDiagnosticsSync(args: protocol.FileRequestArgs): protocol.Diagnostic[] { + return this.getDiagnosticsWorker(args, (project, file) => project.compilerService.languageService.getSemanticDiagnostics(file)); + } + private getDocumentHighlights(line: number, offset: number, fileName: string, filesToSearch: string[]): protocol.DocumentHighlightsItem[] { fileName = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(fileName); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -423,15 +447,18 @@ namespace ts.server { private getProjectInfo(fileName: string, needFileNameList: boolean): protocol.ProjectInfo { fileName = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(fileName); + if (!project) { + throw Errors.NoProject; + } const projectInfo: protocol.ProjectInfo = { - configFileName: project.projectFilename + configFileName: project.projectFilename, + languageServiceDisabled: project.languageServiceDiabled }; if (needFileNameList) { projectInfo.fileNames = project.getFileNames(); } - return projectInfo; } @@ -439,11 +466,12 @@ namespace ts.server { const file = ts.normalizePath(fileName); const info = this.projectService.getScriptInfo(file); const projects = this.projectService.findReferencingProjects(info); - if (!projects.length) { + const projectsWithLanguageServiceEnabeld = ts.filter(projects, p => !p.languageServiceDiabled); + if (projectsWithLanguageServiceEnabeld.length === 0) { throw Errors.NoProject; } - const defaultProject = projects[0]; + const defaultProject = projectsWithLanguageServiceEnabeld[0]; // The rename info should be the same for every project const defaultProjectCompilerService = defaultProject.compilerService; const position = defaultProjectCompilerService.host.lineOffsetToPosition(file, line, offset); @@ -460,7 +488,7 @@ namespace ts.server { } const fileSpans = combineProjectOutput( - projects, + projectsWithLanguageServiceEnabeld, (project: Project) => { const compilerService = project.compilerService; const renameLocations = compilerService.languageService.findRenameLocations(file, position, findInStrings, findInComments); @@ -521,11 +549,12 @@ namespace ts.server { const file = ts.normalizePath(fileName); const info = this.projectService.getScriptInfo(file); const projects = this.projectService.findReferencingProjects(info); - if (!projects.length) { + const projectsWithLanguageServiceEnabeld = ts.filter(projects, p => !p.languageServiceDiabled); + if (projectsWithLanguageServiceEnabeld.length === 0) { throw Errors.NoProject; } - const defaultProject = projects[0]; + const defaultProject = projectsWithLanguageServiceEnabeld[0]; const position = defaultProject.compilerService.host.lineOffsetToPosition(file, line, offset); const nameInfo = defaultProject.compilerService.languageService.getQuickInfoAtPosition(file, position); if (!nameInfo) { @@ -537,7 +566,7 @@ namespace ts.server { const nameColStart = defaultProject.compilerService.host.positionToLineOffset(file, nameSpan.start).offset; const nameText = defaultProject.compilerService.host.getScriptSnapshot(file).getText(nameSpan.start, ts.textSpanEnd(nameSpan)); const refs = combineProjectOutput( - projects, + projectsWithLanguageServiceEnabeld, (project: Project) => { const compilerService = project.compilerService; const references = compilerService.languageService.getReferencesAtPosition(file, position); @@ -596,7 +625,7 @@ namespace ts.server { private getQuickInfo(line: number, offset: number, fileName: string): protocol.QuickInfoResponseBody { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -622,7 +651,7 @@ namespace ts.server { private getFormattingEditsForRange(line: number, offset: number, endLine: number, endOffset: number, fileName: string): protocol.CodeEdit[] { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -650,7 +679,7 @@ namespace ts.server { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -674,6 +703,7 @@ namespace ts.server { if (lineText.search("\\S") < 0) { // TODO: get these options from host const editorOptions: ts.EditorOptions = { + BaseIndentSize: formatOptions.BaseIndentSize, IndentSize: formatOptions.IndentSize, TabSize: formatOptions.TabSize, NewLineCharacter: formatOptions.NewLineCharacter, @@ -728,7 +758,7 @@ namespace ts.server { } const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -752,7 +782,7 @@ namespace ts.server { entryNames: string[], fileName: string): protocol.CompletionEntryDetails[] { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -771,7 +801,7 @@ namespace ts.server { private getSignatureHelpItems(line: number, offset: number, fileName: string): protocol.SignatureHelpItems { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -801,7 +831,7 @@ namespace ts.server { const checkList = fileNames.reduce((accum: PendingErrorCheck[], fileName: string) => { fileName = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(fileName); - if (project) { + if (project && !project.languageServiceDiabled) { accum.push({ fileName, project }); } return accum; @@ -815,7 +845,7 @@ namespace ts.server { private change(line: number, offset: number, endLine: number, endOffset: number, insertString: string, fileName: string) { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (project) { + if (project && !project.languageServiceDiabled) { const compilerService = project.compilerService; const start = compilerService.host.lineOffsetToPosition(file, line, offset); const end = compilerService.host.lineOffsetToPosition(file, endLine, endOffset); @@ -831,7 +861,7 @@ namespace ts.server { const file = ts.normalizePath(fileName); const tmpfile = ts.normalizePath(tempFileName); const project = this.projectService.getProjectForFile(file); - if (project) { + if (project && !project.languageServiceDiabled) { this.changeSeq++; // make sure no changes happen before this one is finished project.compilerService.host.reloadScript(file, tmpfile, () => { @@ -845,7 +875,7 @@ namespace ts.server { const tmpfile = ts.normalizePath(tempFileName); const project = this.projectService.getProjectForFile(file); - if (project) { + if (project && !project.languageServiceDiabled) { project.compilerService.host.saveTo(file, tmpfile); } } @@ -858,7 +888,7 @@ namespace ts.server { this.projectService.closeClientFile(file); } - private decorateNavigationBarItem(project: Project, fileName: string, items: ts.NavigationBarItem[]): protocol.NavigationBarItem[] { + private decorateNavigationBarItem(project: Project, fileName: string, items: ts.NavigationBarItem[], lineIndex: LineIndex): protocol.NavigationBarItem[] { if (!items) { return undefined; } @@ -870,10 +900,10 @@ namespace ts.server { kind: item.kind, kindModifiers: item.kindModifiers, spans: item.spans.map(span => ({ - start: compilerService.host.positionToLineOffset(fileName, span.start), - end: compilerService.host.positionToLineOffset(fileName, ts.textSpanEnd(span)) + start: compilerService.host.positionToLineOffset(fileName, span.start, lineIndex), + end: compilerService.host.positionToLineOffset(fileName, ts.textSpanEnd(span), lineIndex) })), - childItems: this.decorateNavigationBarItem(project, fileName, item.childItems), + childItems: this.decorateNavigationBarItem(project, fileName, item.childItems, lineIndex), indent: item.indent })); } @@ -881,7 +911,7 @@ namespace ts.server { private getNavigationBarItems(fileName: string): protocol.NavigationBarItem[] { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -891,20 +921,20 @@ namespace ts.server { return undefined; } - return this.decorateNavigationBarItem(project, fileName, items); + return this.decorateNavigationBarItem(project, fileName, items, compilerService.host.getLineIndex(fileName)); } private getNavigateToItems(searchValue: string, fileName: string, maxResultCount?: number): protocol.NavtoItem[] { const file = ts.normalizePath(fileName); const info = this.projectService.getScriptInfo(file); const projects = this.projectService.findReferencingProjects(info); - const defaultProject = projects[0]; - if (!defaultProject) { + const projectsWithLanguageServiceEnabeld = ts.filter(projects, p => !p.languageServiceDiabled); + if (projectsWithLanguageServiceEnabeld.length === 0) { throw Errors.NoProject; } const allNavToItems = combineProjectOutput( - projects, + projectsWithLanguageServiceEnabeld, (project: Project) => { const compilerService = project.compilerService; const navItems = compilerService.languageService.getNavigateToItems(searchValue, maxResultCount); @@ -956,7 +986,7 @@ namespace ts.server { const file = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(file); - if (!project) { + if (!project || project.languageServiceDiabled) { throw Errors.NoProject; } @@ -975,7 +1005,11 @@ namespace ts.server { } getDiagnosticsForProject(delay: number, fileName: string) { - const { fileNames } = this.getProjectInfo(fileName, /*needFileNameList*/ true); + const { fileNames, languageServiceDisabled } = this.getProjectInfo(fileName, /*needFileNameList*/ true); + if (languageServiceDisabled) { + return; + } + // No need to analyze lib.d.ts let fileNamesInProject = fileNames.filter((value, index, array) => value.indexOf("lib.d.ts") < 0); @@ -1023,6 +1057,10 @@ namespace ts.server { exit() { } + private requiredResponse(response: any) { + return { response, responseRequired: true }; + } + private handlers: Map<(request: protocol.Request) => { response?: any, responseRequired?: boolean }> = { [CommandNames.Exit]: () => { this.exit(); @@ -1091,6 +1129,12 @@ namespace ts.server { const signatureHelpArgs = request.arguments; return { response: this.getSignatureHelpItems(signatureHelpArgs.line, signatureHelpArgs.offset, signatureHelpArgs.file), responseRequired: true }; }, + [CommandNames.SemanticDiagnosticsSync]: (request: protocol.FileRequest) => { + return this.requiredResponse(this.getSemanticDiagnosticsSync(request.arguments)); + }, + [CommandNames.SyntacticDiagnosticsSync]: (request: protocol.FileRequest) => { + return this.requiredResponse(this.getSyntacticDiagnosticsSync(request.arguments)); + }, [CommandNames.Geterr]: (request: protocol.Request) => { const geterrArgs = request.arguments; return { response: this.getDiagnostics(geterrArgs.delay, geterrArgs.files), responseRequired: false }; @@ -1114,7 +1158,7 @@ namespace ts.server { [CommandNames.Reload]: (request: protocol.Request) => { const reloadArgs = request.arguments; this.reload(reloadArgs.file, reloadArgs.tmpfile, request.seq); - return {response: { reloadFinished: true }, responseRequired: true}; + return { response: { reloadFinished: true }, responseRequired: true }; }, [CommandNames.Saveto]: (request: protocol.Request) => { const savetoArgs = request.arguments; diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index 0772210cb15..0a8cfb89ab3 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -4,13 +4,16 @@ "removeComments": true, "preserveConstEnums": true, "out": "../../built/local/tsserver.js", - "sourceMap": true + "sourceMap": true, + "stripInternal": true }, "files": [ + "../services/shims.ts", + "../services/utilities.ts", "node.d.ts", "editorServices.ts", "protocol.d.ts", - "server.ts", - "session.ts" + "session.ts", + "server.ts" ] } diff --git a/src/services/formatting/formatting.ts b/src/services/formatting/formatting.ts index ef8fddcfb3a..8a27501e684 100644 --- a/src/services/formatting/formatting.ts +++ b/src/services/formatting/formatting.ts @@ -78,7 +78,7 @@ namespace ts.formatting { // 1. the end of the previous line // 2. the last non-whitespace character in the current line let endOfFormatSpan = getEndLinePosition(line, sourceFile); - while (isWhiteSpace(sourceFile.text.charCodeAt(endOfFormatSpan)) && !isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { + while (isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(endOfFormatSpan))) { endOfFormatSpan--; } // if the character at the end of the span is a line break, we shouldn't include it, because it indicates we don't want to @@ -394,7 +394,10 @@ namespace ts.formatting { const startLinePosition = getLineStartPositionForPosition(startPos, sourceFile); const column = SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options); if (startLine !== parentStartLine || startPos === column) { - return column; + // Use the base indent size if it is greater than + // the indentation of the inherited predecessor. + const baseIndentSize = SmartIndenter.getBaseIndentation(options); + return baseIndentSize > column ? baseIndentSize : column; } } @@ -596,6 +599,9 @@ namespace ts.formatting { // child node is outside the target range - do not dive inside if (!rangeOverlapsWithStartEnd(originalRange, child.pos, child.end)) { + if (child.end < originalRange.pos) { + formattingScanner.skipToEndOf(child); + } return inheritedIndentation; } @@ -960,7 +966,7 @@ namespace ts.formatting { const whitespaceStart = getTrailingWhitespaceStartPosition(lineStartPosition, lineEndPosition); if (whitespaceStart !== -1) { - Debug.assert(whitespaceStart === lineStartPosition || !isWhiteSpace(sourceFile.text.charCodeAt(whitespaceStart - 1))); + Debug.assert(whitespaceStart === lineStartPosition || !isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(whitespaceStart - 1))); recordDelete(whitespaceStart, lineEndPosition + 1 - whitespaceStart); } } @@ -972,7 +978,7 @@ namespace ts.formatting { */ function getTrailingWhitespaceStartPosition(start: number, end: number) { let pos = end; - while (pos >= start && isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos >= start && isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos--; } if (pos !== end) { diff --git a/src/services/formatting/formattingScanner.ts b/src/services/formatting/formattingScanner.ts index babf0db3fd5..401794a077b 100644 --- a/src/services/formatting/formattingScanner.ts +++ b/src/services/formatting/formattingScanner.ts @@ -17,6 +17,7 @@ namespace ts.formatting { readTokenInfo(n: Node): TokenInfo; getCurrentLeadingTrivia(): TextRangeWithKind[]; lastTrailingTriviaWasNewLine(): boolean; + skipToEndOf(node: Node): void; close(): void; } @@ -36,12 +37,12 @@ namespace ts.formatting { scanner.setTextPos(startPos); let wasNewLine = true; - let leadingTrivia: TextRangeWithKind[]; - let trailingTrivia: TextRangeWithKind[]; + let leadingTrivia: TextRangeWithKind[] | undefined; + let trailingTrivia: TextRangeWithKind[] | undefined; let savedPos: number; - let lastScanAction: ScanAction; - let lastTokenInfo: TokenInfo; + let lastScanAction: ScanAction | undefined; + let lastTokenInfo: TokenInfo | undefined; return { advance, @@ -49,6 +50,7 @@ namespace ts.formatting { isOnToken, getCurrentLeadingTrivia: () => leadingTrivia, lastTrailingTriviaWasNewLine: () => wasNewLine, + skipToEndOf, close: () => { Debug.assert(scanner !== undefined); @@ -278,5 +280,15 @@ namespace ts.formatting { } return tokenInfo; } + + function skipToEndOf(node: Node): void { + scanner.setTextPos(node.end); + savedPos = scanner.getStartPos(); + lastScanAction = undefined; + lastTokenInfo = undefined; + wasNewLine = false; + leadingTrivia = undefined; + trailingTrivia = undefined; + } } } \ No newline at end of file diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts index da607aaf542..1a7f33d3e48 100644 --- a/src/services/formatting/rules.ts +++ b/src/services/formatting/rules.ts @@ -225,6 +225,12 @@ namespace ts.formatting { public NoSpaceBeforeTemplateMiddleAndTail: Rule; public SpaceBeforeTemplateMiddleAndTail: Rule; + // No space after { and before } in JSX expression + public NoSpaceAfterOpenBraceInJsxExpression: Rule; + public SpaceAfterOpenBraceInJsxExpression: Rule; + public NoSpaceBeforeCloseBraceInJsxExpression: Rule; + public SpaceBeforeCloseBraceInJsxExpression: Rule; + constructor() { /// /// Common Rules @@ -264,7 +270,7 @@ namespace ts.formatting { this.SpaceBeforeOpenBraceInFunction = new Rule(RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, SyntaxKind.OpenBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), RuleAction.Space), RuleFlags.CanDeleteNewLines); // Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc) - this.TypeScriptOpenBraceLeftTokenRange = Shared.TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.MultiLineCommentTrivia, SyntaxKind.ClassKeyword]); + this.TypeScriptOpenBraceLeftTokenRange = Shared.TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.MultiLineCommentTrivia, SyntaxKind.ClassKeyword, SyntaxKind.ExportKeyword, SyntaxKind.ImportKeyword]); this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Rule(RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, SyntaxKind.OpenBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), RuleAction.Space), RuleFlags.CanDeleteNewLines); // Place a space before open brace in a control flow construct @@ -316,7 +322,7 @@ namespace ts.formatting { // Add a space between statements. All keywords except (do,else,case) has open/close parens after them. // So, we have a rule to add a space for [),Any], [do,Any], [else,Any], and [case,Any] - this.SpaceBetweenStatements = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.CloseParenToken, SyntaxKind.DoKeyword, SyntaxKind.ElseKeyword, SyntaxKind.CaseKeyword]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotForContext), RuleAction.Space)); + this.SpaceBetweenStatements = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.CloseParenToken, SyntaxKind.DoKeyword, SyntaxKind.ElseKeyword, SyntaxKind.CaseKeyword]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext, Rules.IsNotForContext), RuleAction.Space)); // This low-pri rule takes care of "try {" and "finally {" in case the rule SpaceBeforeOpenBraceInControl didn't execute on FormatOnEnter. this.SpaceAfterTryFinally = new Rule(RuleDescriptor.create2(Shared.TokenRange.FromTokens([SyntaxKind.TryKeyword, SyntaxKind.FinallyKeyword]), SyntaxKind.OpenBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Space)); @@ -338,8 +344,8 @@ namespace ts.formatting { this.NoSpaceAfterModuleImport = new Rule(RuleDescriptor.create2(Shared.TokenRange.FromTokens([SyntaxKind.ModuleKeyword, SyntaxKind.RequireKeyword]), SyntaxKind.OpenParenToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete)); // Add a space around certain TypeScript keywords - this.SpaceAfterCertainTypeScriptKeywords = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.AbstractKeyword, SyntaxKind.ClassKeyword, SyntaxKind.DeclareKeyword, SyntaxKind.DefaultKeyword, SyntaxKind.EnumKeyword, SyntaxKind.ExportKeyword, SyntaxKind.ExtendsKeyword, SyntaxKind.GetKeyword, SyntaxKind.ImplementsKeyword, SyntaxKind.ImportKeyword, SyntaxKind.InterfaceKeyword, SyntaxKind.ModuleKeyword, SyntaxKind.NamespaceKeyword, SyntaxKind.PrivateKeyword, SyntaxKind.PublicKeyword, SyntaxKind.ProtectedKeyword, SyntaxKind.SetKeyword, SyntaxKind.StaticKeyword, SyntaxKind.TypeKeyword]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Space)); - this.SpaceBeforeCertainTypeScriptKeywords = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.ExtendsKeyword, SyntaxKind.ImplementsKeyword])), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Space)); + this.SpaceAfterCertainTypeScriptKeywords = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.AbstractKeyword, SyntaxKind.ClassKeyword, SyntaxKind.DeclareKeyword, SyntaxKind.DefaultKeyword, SyntaxKind.EnumKeyword, SyntaxKind.ExportKeyword, SyntaxKind.ExtendsKeyword, SyntaxKind.GetKeyword, SyntaxKind.ImplementsKeyword, SyntaxKind.ImportKeyword, SyntaxKind.InterfaceKeyword, SyntaxKind.ModuleKeyword, SyntaxKind.NamespaceKeyword, SyntaxKind.PrivateKeyword, SyntaxKind.PublicKeyword, SyntaxKind.ProtectedKeyword, SyntaxKind.SetKeyword, SyntaxKind.StaticKeyword, SyntaxKind.TypeKeyword, SyntaxKind.FromKeyword]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Space)); + this.SpaceBeforeCertainTypeScriptKeywords = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.ExtendsKeyword, SyntaxKind.ImplementsKeyword, SyntaxKind.FromKeyword])), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.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 Rule(RuleDescriptor.create1(SyntaxKind.StringLiteral, SyntaxKind.OpenBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsModuleDeclContext), RuleAction.Space)); @@ -444,8 +450,8 @@ namespace ts.formatting { /// // Insert space after comma delimiter - this.SpaceAfterComma = new Rule(RuleDescriptor.create3(SyntaxKind.CommaToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNextTokenNotCloseBracket), RuleAction.Space)); - this.NoSpaceAfterComma = new Rule(RuleDescriptor.create3(SyntaxKind.CommaToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete)); + this.SpaceAfterComma = new Rule(RuleDescriptor.create3(SyntaxKind.CommaToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext, Rules.IsNextTokenNotCloseBracket), RuleAction.Space)); + this.NoSpaceAfterComma = new Rule(RuleDescriptor.create3(SyntaxKind.CommaToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isNonJsxElementContext), RuleAction.Delete)); // Insert space before and after binary operators this.SpaceBeforeBinaryOperator = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.BinaryOperators), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), RuleAction.Space)); @@ -491,6 +497,12 @@ namespace ts.formatting { this.NoSpaceBeforeTemplateMiddleAndTail = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.TemplateMiddle, SyntaxKind.TemplateTail])), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete)); this.SpaceBeforeTemplateMiddleAndTail = new Rule(RuleDescriptor.create4(Shared.TokenRange.Any, Shared.TokenRange.FromTokens([SyntaxKind.TemplateMiddle, SyntaxKind.TemplateTail])), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Space)); + // No space after { and before } in JSX expression + this.NoSpaceAfterOpenBraceInJsxExpression = new Rule(RuleDescriptor.create3(SyntaxKind.OpenBraceToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Delete)); + this.SpaceAfterOpenBraceInJsxExpression = new Rule(RuleDescriptor.create3(SyntaxKind.OpenBraceToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Space)); + this.NoSpaceBeforeCloseBraceInJsxExpression = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.CloseBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Delete)); + this.SpaceBeforeCloseBraceInJsxExpression = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.CloseBraceToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.isJsxExpressionContext), RuleAction.Space)); + // Insert space after function keyword for anonymous functions this.SpaceAfterAnonymousFunctionKeyword = new Rule(RuleDescriptor.create1(SyntaxKind.FunctionKeyword, SyntaxKind.OpenParenToken), RuleOperation.create2(new RuleOperationContext(Rules.IsFunctionDeclContext), RuleAction.Space)); this.NoSpaceAfterAnonymousFunctionKeyword = new Rule(RuleDescriptor.create1(SyntaxKind.FunctionKeyword, SyntaxKind.OpenParenToken), RuleOperation.create2(new RuleOperationContext(Rules.IsFunctionDeclContext), RuleAction.Delete)); @@ -514,6 +526,8 @@ namespace ts.formatting { case SyntaxKind.BinaryExpression: case SyntaxKind.ConditionalExpression: case SyntaxKind.AsExpression: + case SyntaxKind.ExportSpecifier: + case SyntaxKind.ImportSpecifier: case SyntaxKind.TypePredicate: case SyntaxKind.UnionType: case SyntaxKind.IntersectionType: @@ -650,6 +664,10 @@ namespace ts.formatting { case SyntaxKind.EnumDeclaration: case SyntaxKind.TypeLiteral: case SyntaxKind.ModuleDeclaration: + case SyntaxKind.ExportDeclaration: + case SyntaxKind.NamedExports: + case SyntaxKind.ImportDeclaration: + case SyntaxKind.NamedImports: return true; } @@ -723,6 +741,14 @@ namespace ts.formatting { return context.TokensAreOnSameLine() && context.contextNode.kind !== SyntaxKind.JsxText; } + static isNonJsxElementContext(context: FormattingContext): boolean { + return context.contextNode.kind !== SyntaxKind.JsxElement; + } + + static isJsxExpressionContext(context: FormattingContext): boolean { + return context.contextNode.kind === SyntaxKind.JsxExpression; + } + static IsNotBeforeBlockInFunctionDeclarationContext(context: FormattingContext): boolean { return !Rules.IsFunctionDeclContext(context) && !Rules.IsBeforeBlockContext(context); } diff --git a/src/services/formatting/rulesProvider.ts b/src/services/formatting/rulesProvider.ts index d672a401d89..1be0f9e912d 100644 --- a/src/services/formatting/rulesProvider.ts +++ b/src/services/formatting/rulesProvider.ts @@ -90,6 +90,15 @@ namespace ts.formatting { rules.push(this.globalRules.NoSpaceBeforeTemplateMiddleAndTail); } + if (options.InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces) { + rules.push(this.globalRules.SpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.SpaceBeforeCloseBraceInJsxExpression); + } + else { + rules.push(this.globalRules.NoSpaceAfterOpenBraceInJsxExpression); + rules.push(this.globalRules.NoSpaceBeforeCloseBraceInJsxExpression); + } + if (options.InsertSpaceAfterSemicolonInForStatements) { rules.push(this.globalRules.SpaceAfterSemicolonInFor); } diff --git a/src/services/formatting/smartIndenter.ts b/src/services/formatting/smartIndenter.ts index 0846f19f4ea..bda46401ea7 100644 --- a/src/services/formatting/smartIndenter.ts +++ b/src/services/formatting/smartIndenter.ts @@ -10,7 +10,7 @@ namespace ts.formatting { export function getIndentation(position: number, sourceFile: SourceFile, options: EditorOptions): number { if (position > sourceFile.text.length) { - return 0; // past EOF + return getBaseIndentation(options); // past EOF } // no indentation when the indent style is set to none, @@ -21,7 +21,7 @@ namespace ts.formatting { const precedingToken = findPrecedingToken(position, sourceFile); if (!precedingToken) { - return 0; + return getBaseIndentation(options); } // no indentation in string \regex\template literals @@ -42,7 +42,7 @@ namespace ts.formatting { let current = position; while (current > 0) { const char = sourceFile.text.charCodeAt(current); - if (!isWhiteSpace(char) && !isLineBreak(char)) { + if (!isWhiteSpace(char)) { break; } current--; @@ -96,13 +96,17 @@ namespace ts.formatting { } if (!current) { - // no parent was found - return 0 to be indented on the level of SourceFile - return 0; + // no parent was found - return the base indentation of the SourceFile + return getBaseIndentation(options); } return getIndentationForNodeWorker(current, currentStart, /*ignoreActualIndentationRange*/ undefined, indentationDelta, sourceFile, options); } + export function getBaseIndentation(options: EditorOptions) { + return options.BaseIndentSize || 0; + } + export function getIndentationForNode(n: Node, ignoreActualIndentationRange: TextRange, sourceFile: SourceFile, options: FormatCodeOptions): number { const start = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); return getIndentationForNodeWorker(n, start, ignoreActualIndentationRange, /*indentationDelta*/ 0, sourceFile, options); @@ -162,7 +166,7 @@ namespace ts.formatting { parent = current.parent; } - return indentationDelta; + return indentationDelta + getBaseIndentation(options); } @@ -402,7 +406,7 @@ namespace ts.formatting { let column = 0; for (let pos = startPos; pos < endPos; pos++) { const ch = sourceFile.text.charCodeAt(pos); - if (!isWhiteSpace(ch)) { + if (!isWhiteSpaceSingleLine(ch)) { break; } @@ -462,7 +466,10 @@ namespace ts.formatting { case SyntaxKind.ParenthesizedType: case SyntaxKind.TaggedTemplateExpression: case SyntaxKind.AwaitExpression: + case SyntaxKind.NamedExports: case SyntaxKind.NamedImports: + case SyntaxKind.ExportSpecifier: + case SyntaxKind.ImportSpecifier: return true; } return false; @@ -486,6 +493,11 @@ namespace ts.formatting { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: return childKind !== SyntaxKind.Block; + case SyntaxKind.ExportDeclaration: + return childKind !== SyntaxKind.NamedExports; + case SyntaxKind.ImportDeclaration: + return childKind !== SyntaxKind.ImportClause || + ((child).namedBindings && (child).namedBindings.kind !== SyntaxKind.NamedImports); case SyntaxKind.JsxElement: return childKind !== SyntaxKind.JsxClosingElement; } diff --git a/src/services/jsTyping.ts b/src/services/jsTyping.ts index 943693bf52e..3b013a4a924 100644 --- a/src/services/jsTyping.ts +++ b/src/services/jsTyping.ts @@ -10,7 +10,7 @@ namespace ts.JsTyping { directoryExists: (path: string) => boolean; fileExists: (fileName: string) => boolean; readFile: (path: string, encoding?: string) => string; - readDirectory: (path: string, extension?: string, exclude?: string[], depth?: number) => string[]; + readDirectory: (rootDir: string, extensions: string[], excludes: string[], includes: string[], depth?: number) => string[]; }; interface PackageJson { @@ -187,7 +187,7 @@ namespace ts.JsTyping { } const typingNames: string[] = []; - const fileNames = host.readDirectory(nodeModulesPath, "*.json", /*exclude*/ undefined, /*depth*/ 2); + const fileNames = host.readDirectory(nodeModulesPath, ["*.json"], /*excludes*/ undefined, /*includes*/ undefined, /*depth*/ 2); for (const fileName of fileNames) { const normalizedFileName = normalizePath(fileName); if (getBaseFileName(normalizedFileName) !== "package.json") { diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index 920faf58e24..d5c85df45e7 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -2,860 +2,659 @@ /* @internal */ namespace ts.NavigationBar { - export function getNavigationBarItems(sourceFile: SourceFile, compilerOptions: CompilerOptions): ts.NavigationBarItem[] { - // TODO: Handle JS files differently in 'navbar' calls for now, but ideally we should unify - // the 'navbar' and 'navto' logic for TypeScript and JavaScript. - if (isSourceFileJavaScript(sourceFile)) { - return getJsNavigationBarItems(sourceFile, compilerOptions); + /** + * Represents a navigation bar item and its children. + * The returned NavigationBarItem is more complicated and doesn't include 'parent', so we use these to do work before converting. + */ + interface NavigationBarNode { + node: Node; + additionalNodes: Node[] | undefined; + parent: NavigationBarNode | undefined; // Present for all but root node + children: NavigationBarNode[] | undefined; + indent: number; // # of parents + } + + export function getNavigationBarItems(sourceFile: SourceFile): NavigationBarItem[] { + curSourceFile = sourceFile; + const result = map(topLevelItems(rootNavigationBarNode(sourceFile)), convertToTopLevelItem); + curSourceFile = undefined; + return result; + } + + // Keep sourceFile handy so we don't have to search for it every time we need to call `getText`. + let curSourceFile: SourceFile; + function nodeText(node: Node): string { + return node.getText(curSourceFile); + } + + function navigationBarNodeKind(n: NavigationBarNode): SyntaxKind { + return n.node.kind; + } + + function pushChild(parent: NavigationBarNode, child: NavigationBarNode): void { + if (parent.children) { + parent.children.push(child); + } + else { + parent.children = [child]; + } + } + + /* + For performance, we keep navigation bar parents on a stack rather than passing them through each recursion. + `parent` is the current parent and is *not* stored in parentsStack. + `startNode` sets a new parent and `endNode` returns to the previous parent. + */ + const parentsStack: NavigationBarNode[] = []; + let parent: NavigationBarNode; + + function rootNavigationBarNode(sourceFile: SourceFile): NavigationBarNode { + Debug.assert(!parentsStack.length); + const root: NavigationBarNode = { node: sourceFile, additionalNodes: undefined, parent: undefined, children: undefined, indent: 0 }; + parent = root; + for (const statement of sourceFile.statements) { + addChildrenRecursively(statement); + } + endNode(); + Debug.assert(!parent && !parentsStack.length); + return root; + } + + function addLeafNode(node: Node): void { + pushChild(parent, emptyNavigationBarNode(node)); + } + + function emptyNavigationBarNode(node: Node): NavigationBarNode { + return { + node, + additionalNodes: undefined, + parent, + children: undefined, + indent: parent.indent + 1 + }; + } + + /** + * Add a new level of NavigationBarNodes. + * This pushes to the stack, so you must call `endNode` when you are done adding to this node. + */ + function startNode(node: Node): void { + const navNode: NavigationBarNode = emptyNavigationBarNode(node); + pushChild(parent, navNode); + + // Save the old parent + parentsStack.push(parent); + parent = navNode; + } + + /** Call after calling `startNode` and adding children to it. */ + function endNode(): void { + if (parent.children) { + mergeChildren(parent.children); + sortChildren(parent.children); + } + parent = parentsStack.pop(); + } + + function addNodeWithRecursiveChild(node: Node, child: Node): void { + startNode(node); + addChildrenRecursively(child); + endNode(); + } + + /** Look for navigation bar items in node's subtree, adding them to the current `parent`. */ + function addChildrenRecursively(node: Node): void { + if (!node || isToken(node)) { + return; } - return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); + switch (node.kind) { + case SyntaxKind.Constructor: + // Get parameter properties, and treat them as being on the *same* level as the constructor, not under it. + const ctr = node; + addNodeWithRecursiveChild(ctr, ctr.body); - function getIndent(node: Node): number { - let indent = 1; // Global node is the only one with indent 0. + // Parameter properties are children of the class, not the constructor. + for (const param of ctr.parameters) { + if (isParameterPropertyDeclaration(param)) { + addLeafNode(param); + } + } + break; - let current = node.parent; - while (current) { - switch (current.kind) { - case SyntaxKind.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 === SyntaxKind.ModuleDeclaration); + case SyntaxKind.MethodDeclaration: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + case SyntaxKind.MethodSignature: + if (!hasDynamicName((node))) { + addNodeWithRecursiveChild(node, (node).body); + } + break; - // fall through - case SyntaxKind.ClassDeclaration: - case SyntaxKind.EnumDeclaration: - case SyntaxKind.InterfaceDeclaration: - case SyntaxKind.FunctionDeclaration: - indent++; + case SyntaxKind.PropertyDeclaration: + case SyntaxKind.PropertySignature: + if (!hasDynamicName((node))) { + addLeafNode(node); + } + break; + + case SyntaxKind.ImportClause: + let importClause = node; + // Handle default import case e.g.: + // import d from "mod"; + if (importClause.name) { + addLeafNode(importClause); } - current = current.parent; - } - - return indent; - } - - function getChildNodes(nodes: Node[]): Node[] { - const childNodes: Node[] = []; - - function visit(node: Node) { - switch (node.kind) { - case SyntaxKind.VariableStatement: - forEach((node).declarationList.declarations, visit); - break; - case SyntaxKind.ObjectBindingPattern: - case SyntaxKind.ArrayBindingPattern: - forEach((node).elements, visit); - break; - - case SyntaxKind.ExportDeclaration: - // Handle named exports case e.g.: - // export {a, b as B} from "mod"; - if ((node).exportClause) { - forEach((node).exportClause.elements, visit); + // Handle named bindings in imports e.g.: + // import * as NS from "mod"; + // import {a, b as B} from "mod"; + const {namedBindings} = importClause; + if (namedBindings) { + if (namedBindings.kind === SyntaxKind.NamespaceImport) { + addLeafNode(namedBindings); + } + else { + for (const element of (namedBindings).elements) { + addLeafNode(element); } - break; - - case SyntaxKind.ImportDeclaration: - let importClause = (node).importClause; - if (importClause) { - // Handle default import case e.g.: - // import d from "mod"; - if (importClause.name) { - childNodes.push(importClause); - } - - // Handle named bindings in imports e.g.: - // import * as NS from "mod"; - // import {a, b as B} from "mod"; - if (importClause.namedBindings) { - if (importClause.namedBindings.kind === SyntaxKind.NamespaceImport) { - childNodes.push(importClause.namedBindings); - } - else { - forEach((importClause.namedBindings).elements, visit); - } - } - } - break; - - case SyntaxKind.BindingElement: - case SyntaxKind.VariableDeclaration: - if (isBindingPattern((node).name)) { - visit((node).name); - break; - } - // Fall through - case SyntaxKind.ClassDeclaration: - case SyntaxKind.EnumDeclaration: - case SyntaxKind.InterfaceDeclaration: - case SyntaxKind.ModuleDeclaration: - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.ImportEqualsDeclaration: - case SyntaxKind.ImportSpecifier: - case SyntaxKind.ExportSpecifier: - case SyntaxKind.TypeAliasDeclaration: - childNodes.push(node); - break; + } } - } + break; - // for (let i = 0, n = nodes.length; i < n; i++) { - // let node = nodes[i]; - - // if (node.kind === SyntaxKind.ClassDeclaration || - // node.kind === SyntaxKind.EnumDeclaration || - // node.kind === SyntaxKind.InterfaceDeclaration || - // node.kind === SyntaxKind.ModuleDeclaration || - // node.kind === SyntaxKind.FunctionDeclaration) { - - // childNodes.push(node); - // } - // else if (node.kind === SyntaxKind.VariableStatement) { - // childNodes.push.apply(childNodes, (node).declarations); - // } - // } - forEach(nodes, visit); - return sortNodes(childNodes); - } - - function getTopLevelNodes(node: SourceFile): Node[] { - const topLevelNodes: Node[] = []; - topLevelNodes.push(node); - - addTopLevelNodes(node.statements, topLevelNodes); - - return topLevelNodes; - } - - function sortNodes(nodes: Node[]): Node[] { - return nodes.slice(0).sort((n1: Declaration, n2: Declaration) => { - if (n1.name && n2.name) { - return localeCompareFix(getPropertyNameForPropertyNameNode(n1.name), getPropertyNameForPropertyNameNode(n2.name)); + case SyntaxKind.BindingElement: + case SyntaxKind.VariableDeclaration: + const decl = node; + const name = decl.name; + if (isBindingPattern(name)) { + addChildrenRecursively(name); } - else if (n1.name) { - return 1; - } - else if (n2.name) { - return -1; + else if (decl.initializer && isFunctionOrClassExpression(decl.initializer)) { + // For `const x = function() {}`, just use the function node, not the const. + addChildrenRecursively(decl.initializer); } else { - return n1.kind - n2.kind; + addNodeWithRecursiveChild(decl, decl.initializer); } - }); + break; - // node 0.10 treats "a" as greater than "B". - // For consistency, sort alphabetically, falling back to which is lower-case. - function localeCompareFix(a: string, b: string) { - const cmp = a.toLowerCase().localeCompare(b.toLowerCase()); - if (cmp !== 0) - return cmp; - // Return the *opposite* of the `<` operator, which works the same in node 0.10 and 6.0. - return a < b ? 1 : a > b ? -1 : 0; - } - } + case SyntaxKind.ArrowFunction: + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + addNodeWithRecursiveChild(node, (node).body); + break; - function addTopLevelNodes(nodes: Node[], topLevelNodes: Node[]): void { - nodes = sortNodes(nodes); + case SyntaxKind.EnumDeclaration: + startNode(node); + for (const member of (node).members) { + if (!isComputedProperty(member)) { + addLeafNode(member); + } + } + endNode(); + break; - for (const node of nodes) { - switch (node.kind) { - case SyntaxKind.ClassDeclaration: - topLevelNodes.push(node); - for (const member of (node).members) { - if (member.kind === SyntaxKind.MethodDeclaration || member.kind === SyntaxKind.Constructor) { - type FunctionLikeMember = MethodDeclaration | ConstructorDeclaration; - if ((member).body) { - // We do not include methods that does not have child functions in it, because of duplications. - if (hasNamedFunctionDeclarations(((member).body).statements)) { - topLevelNodes.push(member); - } - addTopLevelNodes(((member).body).statements, topLevelNodes); - } + case SyntaxKind.ClassDeclaration: + case SyntaxKind.ClassExpression: + case SyntaxKind.InterfaceDeclaration: + startNode(node); + for (const member of (node).members) { + addChildrenRecursively(member); + } + endNode(); + break; + + case SyntaxKind.ModuleDeclaration: + addNodeWithRecursiveChild(node, getInteriorModule(node).body); + break; + + case SyntaxKind.ExportSpecifier: + case SyntaxKind.ImportEqualsDeclaration: + case SyntaxKind.IndexSignature: + case SyntaxKind.CallSignature: + case SyntaxKind.ConstructSignature: + case SyntaxKind.TypeAliasDeclaration: + addLeafNode(node); + break; + + default: + if (node.jsDocComments) { + for (const jsDocComment of node.jsDocComments) { + for (const tag of jsDocComment.tags) { + if (tag.kind === SyntaxKind.JSDocTypedefTag) { + addLeafNode(tag); } } - break; - case SyntaxKind.EnumDeclaration: - case SyntaxKind.InterfaceDeclaration: - case SyntaxKind.TypeAliasDeclaration: - topLevelNodes.push(node); - break; - - case SyntaxKind.ModuleDeclaration: - let moduleDeclaration = node; - topLevelNodes.push(node); - const inner = getInnermostModule(moduleDeclaration); - if (inner.body) { - addTopLevelNodes((inner.body).statements, topLevelNodes); - } - break; - - case SyntaxKind.FunctionDeclaration: - let functionDeclaration = node; - if (isTopLevelFunctionDeclaration(functionDeclaration)) { - topLevelNodes.push(node); - addTopLevelNodes((functionDeclaration.body).statements, topLevelNodes); - } - break; + } } - } - } - function hasNamedFunctionDeclarations(nodes: NodeArray): boolean { - for (const s of nodes) { - if (s.kind === SyntaxKind.FunctionDeclaration && !isEmpty((s).name.text)) { + forEachChild(node, addChildrenRecursively); + } + } + + /** Merge declarations of the same kind. */ + function mergeChildren(children: NavigationBarNode[]): void { + const nameToItems: Map = {}; + filterMutate(children, child => { + const decl = child.node; + const name = decl.name && nodeText(decl.name); + if (!name) { + // Anonymous items are never merged. + return true; + } + + const itemsWithSameName = getProperty(nameToItems, name); + if (!itemsWithSameName) { + nameToItems[name] = child; + return true; + } + + if (itemsWithSameName instanceof Array) { + for (const itemWithSameName of itemsWithSameName) { + if (tryMerge(itemWithSameName, child)) { + return false; + } + } + itemsWithSameName.push(child); + return true; + } + else { + const itemWithSameName = itemsWithSameName; + if (tryMerge(itemWithSameName, child)) { + return false; + } + nameToItems[name] = [itemWithSameName, child]; + return true; + } + + function tryMerge(a: NavigationBarNode, b: NavigationBarNode): boolean { + if (shouldReallyMerge(a.node, b.node)) { + merge(a, b); return true; } + return false; } - return false; - } + }); - function isTopLevelFunctionDeclaration(functionDeclaration: FunctionLikeDeclaration): boolean { - if (functionDeclaration.kind === SyntaxKind.FunctionDeclaration) { - // A function declaration is 'top level' if it contains any function declarations - // within it. - if (functionDeclaration.body && functionDeclaration.body.kind === SyntaxKind.Block) { - // Proper function declarations can only have identifier names - if (hasNamedFunctionDeclarations((functionDeclaration.body).statements)) { - return true; - } + /** a and b have the same name, but they may not be mergeable. */ + function shouldReallyMerge(a: Node, b: Node): boolean { + return a.kind === b.kind && (a.kind !== SyntaxKind.ModuleDeclaration || areSameModule(a, b)); - // Or if it is not parented by another function. I.e all functions at module scope are 'top level'. - if (!isFunctionBlock(functionDeclaration.parent)) { - return true; - } - - // Or if it is nested inside class methods and constructors. - else { - // We have made sure that a grand parent node exists with 'isFunctionBlock()' above. - const grandParentKind = functionDeclaration.parent.parent.kind; - if (grandParentKind === SyntaxKind.MethodDeclaration || - grandParentKind === SyntaxKind.Constructor) { - - return true; - } - } + // We use 1 NavNode to represent 'A.B.C', but there are multiple source nodes. + // Only merge module nodes that have the same chain. Don't merge 'A.B.C' with 'A'! + function areSameModule(a: ModuleDeclaration, b: ModuleDeclaration): boolean { + if (a.body.kind !== b.body.kind) { + return false; } - } - - return false; - } - - function getItemsWorker(nodes: Node[], createItem: (n: Node) => ts.NavigationBarItem): ts.NavigationBarItem[] { - const items: ts.NavigationBarItem[] = []; - - const keyToItem: Map = {}; - - for (const child of nodes) { - const item = createItem(child); - if (item !== undefined) { - if (item.text.length > 0) { - const key = item.text + "-" + item.kind + "-" + item.indent; - - const itemWithSameName = keyToItem[key]; - if (itemWithSameName) { - // We had an item with the same name. Merge these items together. - merge(itemWithSameName, item); - } - else { - keyToItem[key] = item; - items.push(item); - } - } - } - } - - return items; - } - - function merge(target: ts.NavigationBarItem, source: ts.NavigationBarItem) { - // First, add any spans in the source to the target. - addRange(target.spans, source.spans); - - if (source.childItems) { - if (!target.childItems) { - target.childItems = []; - } - - // Next, recursively merge or add any children in the source as appropriate. - outer: - 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); - continue outer; - } - } - - // Didn't find a match, just add this child to the list. - target.childItems.push(sourceChild); + if (a.body.kind !== SyntaxKind.ModuleDeclaration) { + return true; } + return areSameModule(a.body, b.body); } } - function createChildItem(node: Node): ts.NavigationBarItem { - switch (node.kind) { - case SyntaxKind.Parameter: - if (isBindingPattern((node).name)) { - break; + /** Merge source into target. Source should be thrown away after this is called. */ + function merge(target: NavigationBarNode, source: NavigationBarNode): void { + target.additionalNodes = target.additionalNodes || []; + target.additionalNodes.push(source.node); + if (source.additionalNodes) { + target.additionalNodes.push(...source.additionalNodes); + } + + target.children = concatenate(target.children, source.children); + if (target.children) { + mergeChildren(target.children); + sortChildren(target.children); + } + } + } + + /** Recursively ensure that each NavNode's children are in sorted order. */ + function sortChildren(children: NavigationBarNode[]): void { + children.sort(compareChildren); + } + + function compareChildren(child1: NavigationBarNode, child2: NavigationBarNode): number { + const name1 = tryGetName(child1.node), name2 = tryGetName(child2.node); + if (name1 && name2) { + const cmp = localeCompareFix(name1, name2); + return cmp !== 0 ? cmp : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + else { + return name1 ? 1 : name2 ? -1 : navigationBarNodeKind(child1) - navigationBarNodeKind(child2); + } + } + + // More efficient to create a collator once and use its `compare` than to call `a.localeCompare(b)` many times. + const collator: { compare(a: string, b: string): number } = typeof Intl === "undefined" ? undefined : new Intl.Collator(); + // Intl is missing in Safari, and node 0.10 treats "a" as greater than "B". + const localeCompareIsCorrect = collator && collator.compare("a", "B") < 0; + const localeCompareFix: (a: string, b: string) => number = localeCompareIsCorrect ? collator.compare : function(a, b) { + // This isn't perfect, but it passes all of our tests. + for (let i = 0; i < Math.min(a.length, b.length); i++) { + const chA = a.charAt(i), chB = b.charAt(i); + if (chA === "\"" && chB === "'") { + return 1; + } + if (chA === "'" && chB === "\"") { + return -1; + } + const cmp = chA.toLocaleLowerCase().localeCompare(chB.toLocaleLowerCase()); + if (cmp !== 0) { + return cmp; + } + } + return a.length - b.length; + }; + + /** + * This differs from getItemName because this is just used for sorting. + * We only sort nodes by name that have a more-or-less "direct" name, as opposed to `new()` and the like. + * So `new()` can still come before an `aardvark` method. + */ + function tryGetName(node: Node): string | undefined { + if (node.kind === SyntaxKind.ModuleDeclaration) { + return getModuleName(node); + } + + const decl = node; + if (decl.name) { + return getPropertyNameForPropertyNameNode(decl.name); + } + switch (node.kind) { + case SyntaxKind.FunctionExpression: + case SyntaxKind.ArrowFunction: + case SyntaxKind.ClassExpression: + return getFunctionOrClassName(node); + case SyntaxKind.JSDocTypedefTag: + return getJSDocTypedefTagName(node); + default: + return undefined; + } + } + + function getItemName(node: Node): string { + if (node.kind === SyntaxKind.ModuleDeclaration) { + return getModuleName(node); + } + + const name = (node).name; + if (name) { + const text = nodeText(name); + if (text.length > 0) { + return text; + } + } + + switch (node.kind) { + case SyntaxKind.SourceFile: + const sourceFile = node; + return isExternalModule(sourceFile) + ? `"${escapeString(getBaseFileName(removeFileExtension(normalizePath(sourceFile.fileName))))}"` + : ""; + case SyntaxKind.ArrowFunction: + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + case SyntaxKind.ClassDeclaration: + case SyntaxKind.ClassExpression: + if (getModifierFlags(node) & ModifierFlags.Default) { + return "default"; + } + return getFunctionOrClassName(node); + case SyntaxKind.Constructor: + return "constructor"; + case SyntaxKind.ConstructSignature: + return "new()"; + case SyntaxKind.CallSignature: + return "()"; + case SyntaxKind.IndexSignature: + return "[]"; + case SyntaxKind.JSDocTypedefTag: + return getJSDocTypedefTagName(node); + default: + return ""; + } + } + + function getJSDocTypedefTagName(node: JSDocTypedefTag): string { + if (node.name) { + return node.name.text; + } + else { + const parentNode = node.parent && node.parent.parent; + if (parentNode && parentNode.kind === SyntaxKind.VariableStatement) { + if ((parentNode).declarationList.declarations.length > 0) { + const nameIdentifier = (parentNode).declarationList.declarations[0].name; + if (nameIdentifier.kind === SyntaxKind.Identifier) { + return (nameIdentifier).text; } - if (!hasModifiers(node)) { - return undefined; + } + } + return ""; + } + } + + /** Flattens the NavNode tree to a list, keeping only the top-level items. */ + function topLevelItems(root: NavigationBarNode): NavigationBarNode[] { + const topLevel: NavigationBarNode[] = []; + function recur(item: NavigationBarNode) { + if (isTopLevel(item)) { + topLevel.push(item); + if (item.children) { + for (const child of item.children) { + recur(child); } - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberVariableElement); - - case SyntaxKind.MethodDeclaration: - case SyntaxKind.MethodSignature: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberFunctionElement); - - case SyntaxKind.GetAccessor: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberGetAccessorElement); - - case SyntaxKind.SetAccessor: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberSetAccessorElement); - - case SyntaxKind.IndexSignature: - return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); - - case SyntaxKind.EnumDeclaration: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.enumElement); - - case SyntaxKind.EnumMember: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberVariableElement); - - case SyntaxKind.ModuleDeclaration: - return createItem(node, getModuleName(node), ts.ScriptElementKind.moduleElement); - - case SyntaxKind.InterfaceDeclaration: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.interfaceElement); - - case SyntaxKind.TypeAliasDeclaration: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.typeElement); - - case SyntaxKind.CallSignature: - return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); - - case SyntaxKind.ConstructSignature: - return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); - - case SyntaxKind.PropertyDeclaration: - case SyntaxKind.PropertySignature: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberVariableElement); + } + } + } + recur(root); + return topLevel; + function isTopLevel(item: NavigationBarNode): boolean { + switch (navigationBarNodeKind(item)) { case SyntaxKind.ClassDeclaration: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.classElement); - - case SyntaxKind.FunctionDeclaration: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.functionElement); - - case SyntaxKind.VariableDeclaration: - case SyntaxKind.BindingElement: - let variableDeclarationNode: Node; - let name: Node; - - if (node.kind === SyntaxKind.BindingElement) { - name = (node).name; - variableDeclarationNode = node; - // binding elements are added only for variable declarations - // bubble up to the containing variable declaration - while (variableDeclarationNode && variableDeclarationNode.kind !== SyntaxKind.VariableDeclaration) { - variableDeclarationNode = variableDeclarationNode.parent; - } - Debug.assert(variableDeclarationNode !== undefined); - } - else { - Debug.assert(!isBindingPattern((node).name)); - variableDeclarationNode = node; - name = (node).name; - } - - if (isConst(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name), ts.ScriptElementKind.constElement); - } - else if (isLet(variableDeclarationNode)) { - return createItem(node, getTextOfNode(name), ts.ScriptElementKind.letElement); - } - else { - return createItem(node, getTextOfNode(name), ts.ScriptElementKind.variableElement); - } + case SyntaxKind.ClassExpression: + case SyntaxKind.EnumDeclaration: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.ModuleDeclaration: + case SyntaxKind.SourceFile: + case SyntaxKind.TypeAliasDeclaration: + case SyntaxKind.JSDocTypedefTag: + return true; case SyntaxKind.Constructor: - return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); + case SyntaxKind.MethodDeclaration: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + return hasSomeImportantChild(item); - case SyntaxKind.ExportSpecifier: - case SyntaxKind.ImportSpecifier: - case SyntaxKind.ImportEqualsDeclaration: - case SyntaxKind.ImportClause: - case SyntaxKind.NamespaceImport: - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.alias); + case SyntaxKind.ArrowFunction: + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + return isTopLevelFunctionDeclaration(item); + + default: + return false; } + function isTopLevelFunctionDeclaration(item: NavigationBarNode): boolean { + if (!(item.node).body) { + return false; + } - return undefined; - - function createItem(node: Node, name: string, scriptElementKind: string): NavigationBarItem { - return getNavigationBarItem(name, scriptElementKind, getNodeModifiers(node), [getNodeSpan(node)]); + switch (navigationBarNodeKind(item.parent)) { + case SyntaxKind.ModuleBlock: + case SyntaxKind.SourceFile: + case SyntaxKind.MethodDeclaration: + case SyntaxKind.Constructor: + return true; + default: + return hasSomeImportantChild(item); + } + } + function hasSomeImportantChild(item: NavigationBarNode) { + return forEach(item.children, child => { + const childKind = navigationBarNodeKind(child); + return childKind !== SyntaxKind.VariableDeclaration && childKind !== SyntaxKind.BindingElement; + }); } } + } - function isEmpty(text: string) { - return !text || text.trim() === ""; - } + // NavigationBarItem requires an array, but will not mutate it, so just give it this for performance. + const emptyChildItemArray: NavigationBarItem[] = []; - function getNavigationBarItem(text: string, kind: string, kindModifiers: string, spans: TextSpan[], childItems: NavigationBarItem[] = [], indent = 0): NavigationBarItem { - if (isEmpty(text)) { - return undefined; - } + function convertToTopLevelItem(n: NavigationBarNode): NavigationBarItem { + return { + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: getNodeModifiers(n.node), + spans: getSpans(n), + childItems: map(n.children, convertToChildItem) || emptyChildItemArray, + indent: n.indent, + bolded: false, + grayed: false + }; + function convertToChildItem(n: NavigationBarNode): NavigationBarItem { return { - text, - kind, - kindModifiers, - spans, - childItems, - indent, + text: getItemName(n.node), + kind: nodeKind(n.node), + kindModifiers: getNodeModifiers(n.node), + spans: getSpans(n), + childItems: emptyChildItemArray, + indent: 0, bolded: false, grayed: false }; } - function createTopLevelItem(node: Node): ts.NavigationBarItem { - switch (node.kind) { - case SyntaxKind.SourceFile: - return createSourceFileItem(node); - - case SyntaxKind.ClassDeclaration: - return createClassItem(node); - - case SyntaxKind.MethodDeclaration: - case SyntaxKind.Constructor: - return createMemberFunctionLikeItem(node); - - case SyntaxKind.EnumDeclaration: - return createEnumItem(node); - - case SyntaxKind.InterfaceDeclaration: - return createInterfaceItem(node); - - case SyntaxKind.ModuleDeclaration: - return createModuleItem(node); - - case SyntaxKind.FunctionDeclaration: - return createFunctionItem(node); - - case SyntaxKind.TypeAliasDeclaration: - return createTypeAliasItem(node); - } - - return undefined; - - function createModuleItem(node: ModuleDeclaration): NavigationBarItem { - const moduleName = getModuleName(node); - - const body = getInnermostModule(node).body; - const childItems = body ? getItemsWorker(getChildNodes(body.statements), createChildItem) : []; - - return getNavigationBarItem(moduleName, - ts.ScriptElementKind.moduleElement, - getNodeModifiers(node), - [getNodeSpan(node)], - childItems, - getIndent(node)); - } - - function createFunctionItem(node: FunctionDeclaration): ts.NavigationBarItem { - if (node.body && node.body.kind === SyntaxKind.Block) { - const childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); - - return getNavigationBarItem(!node.name ? "default" : node.name.text, - ts.ScriptElementKind.functionElement, - getNodeModifiers(node), - [getNodeSpan(node)], - childItems, - getIndent(node)); + function getSpans(n: NavigationBarNode): TextSpan[] { + const spans = [getNodeSpan(n.node)]; + if (n.additionalNodes) { + for (const node of n.additionalNodes) { + spans.push(getNodeSpan(node)); } - - 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) { - const childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); - let scriptElementKind: string; - let memberFunctionName: string; - if (node.kind === SyntaxKind.MethodDeclaration) { - memberFunctionName = getPropertyNameForPropertyNameNode(node.name); - scriptElementKind = ts.ScriptElementKind.memberFunctionElement; - } - else { - memberFunctionName = "constructor"; - scriptElementKind = ts.ScriptElementKind.constructorImplementationElement; - } - - return getNavigationBarItem(memberFunctionName, - scriptElementKind, - getNodeModifiers(node), - [getNodeSpan(node)], - childItems, - getIndent(node)); - } - - return undefined; - } - - function createSourceFileItem(node: SourceFile): ts.NavigationBarItem { - const childItems = getItemsWorker(getChildNodes(node.statements), createChildItem); - - const rootName = isExternalModule(node) - ? "\"" + escapeString(getBaseFileName(removeFileExtension(normalizePath(node.fileName)))) + "\"" - : ""; - - return getNavigationBarItem(rootName, - ts.ScriptElementKind.moduleElement, - ts.ScriptElementKindModifier.none, - [getNodeSpan(node)], - childItems); - } - - function createClassItem(node: ClassDeclaration): ts.NavigationBarItem { - let childItems: NavigationBarItem[]; - - if (node.members) { - 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. - const nodes: Node[] = removeDynamicallyNamedProperties(node); - if (constructor) { - addRange(nodes, filter(constructor.parameters, p => !isBindingPattern(p.name))); - } - - childItems = getItemsWorker(sortNodes(nodes), createChildItem); - } - - const nodeName = !node.name ? "default" : node.name.text; - - return getNavigationBarItem( - nodeName, - ts.ScriptElementKind.classElement, - getNodeModifiers(node), - [getNodeSpan(node)], - childItems, - getIndent(node)); - } - - function createEnumItem(node: EnumDeclaration): ts.NavigationBarItem { - const childItems = getItemsWorker(sortNodes(removeComputedProperties(node)), createChildItem); - return getNavigationBarItem( - node.name.text, - ts.ScriptElementKind.enumElement, - getNodeModifiers(node), - [getNodeSpan(node)], - childItems, - getIndent(node)); - } - - function createInterfaceItem(node: InterfaceDeclaration): ts.NavigationBarItem { - const childItems = getItemsWorker(sortNodes(removeDynamicallyNamedProperties(node)), createChildItem); - return getNavigationBarItem( - node.name.text, - ts.ScriptElementKind.interfaceElement, - getNodeModifiers(node), - [getNodeSpan(node)], - childItems, - getIndent(node)); - } - } - - function getModuleName(moduleDeclaration: ModuleDeclaration): string { - // We want to maintain quotation marks. - if (isAmbientModule(moduleDeclaration)) { - return getTextOfNode(moduleDeclaration.name); - } - - // Otherwise, we need to aggregate each identifier to build up the qualified name. - const result: string[] = []; - - result.push(moduleDeclaration.name.text); - - while (moduleDeclaration.body && moduleDeclaration.body.kind === SyntaxKind.ModuleDeclaration) { - moduleDeclaration = moduleDeclaration.body; - - result.push(moduleDeclaration.name.text); - } - - return result.join("."); - } - - function removeComputedProperties(node: EnumDeclaration): Declaration[] { - return filter(node.members, member => member.name === undefined || member.name.kind !== SyntaxKind.ComputedPropertyName); - } - - /** - * Like removeComputedProperties, but retains the properties with well known symbol names - */ - function removeDynamicallyNamedProperties(node: ClassDeclaration | InterfaceDeclaration): Declaration[] { - return filter(node.members, member => !hasDynamicName(member)); - } - - function getInnermostModule(node: ModuleDeclaration): ModuleDeclaration { - while (node.body && node.body.kind === SyntaxKind.ModuleDeclaration) { - node = node.body; - } - - return node; - } - - function getNodeSpan(node: Node) { - return node.kind === SyntaxKind.SourceFile - ? createTextSpanFromBounds(node.getFullStart(), node.getEnd()) - : createTextSpanFromBounds(node.getStart(), node.getEnd()); - } - - function getTextOfNode(node: Node): string { - return getTextOfNodeFromSourceText(sourceFile.text, node); + return spans; } } - export function getJsNavigationBarItems(sourceFile: SourceFile, compilerOptions: CompilerOptions): NavigationBarItem[] { - const anonFnText = ""; - const anonClassText = ""; - let indent = 0; + // TODO: GH#9145: We should just use getNodeKind. No reason why navigationBar and navigateTo should have different behaviors. + function nodeKind(node: Node): string { + switch (node.kind) { + case SyntaxKind.SourceFile: + return ScriptElementKind.moduleElement; - const rootName = isExternalModule(sourceFile) ? - "\"" + escapeString(getBaseFileName(removeFileExtension(normalizePath(sourceFile.fileName)))) + "\"" - : ""; + case SyntaxKind.EnumMember: + return ScriptElementKind.memberVariableElement; - const sourceFileItem = getNavBarItem(rootName, ScriptElementKind.moduleElement, [getNodeSpan(sourceFile)]); - let topItem = sourceFileItem; + case SyntaxKind.VariableDeclaration: + case SyntaxKind.BindingElement: + let variableDeclarationNode: Node; + let name: Node; - // Walk the whole file, because we want to also find function expressions - which may be in variable initializer, - // call arguments, expressions, etc... - forEachChild(sourceFile, visitNode); - - function visitNode(node: Node) { - const newItem = createNavBarItem(node); - - if (newItem) { - topItem.childItems.push(newItem); - } - - if (node.jsDocComments && node.jsDocComments.length > 0) { - for (const jsDocComment of node.jsDocComments) { - visitNode(jsDocComment); - } - } - - // Add a level if traversing into a container - if (newItem && (isFunctionLike(node) || isClassLike(node))) { - const lastTop = topItem; - indent++; - topItem = newItem; - forEachChild(node, visitNode); - topItem = lastTop; - indent--; - - // If the last item added was an anonymous function expression, and it had no children, discard it. - if (newItem && newItem.text === anonFnText && newItem.childItems.length === 0) { - topItem.childItems.pop(); - } - } - else { - forEachChild(node, visitNode); - } - } - - 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*/ - .parent/*SourceFile*/.kind !== SyntaxKind.SourceFile) { - return undefined; + if (node.kind === SyntaxKind.BindingElement) { + name = (node).name; + variableDeclarationNode = node; + // binding elements are added only for variable declarations + // bubble up to the containing variable declaration + while (variableDeclarationNode && variableDeclarationNode.kind !== SyntaxKind.VariableDeclaration) { + variableDeclarationNode = variableDeclarationNode.parent; } - // If it is initialized with a function expression, handle it when we reach the function expression node - const varDecl = node as VariableDeclaration; - if (varDecl.initializer && (varDecl.initializer.kind === SyntaxKind.FunctionExpression || - varDecl.initializer.kind === SyntaxKind.ArrowFunction || - varDecl.initializer.kind === SyntaxKind.ClassExpression)) { - return undefined; - } - // Fall through - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.ClassDeclaration: - case SyntaxKind.Constructor: - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - // "export default function().." looks just like a regular function/class declaration, except with the 'default' flag - const name = hasModifier(node, ModifierFlags.Default) && !(node as (Declaration)).name ? "default" : - node.kind === SyntaxKind.Constructor ? "constructor" : - declarationNameToString((node as (Declaration)).name); - return getNavBarItem(name, getScriptKindForElementKind(node.kind), [getNodeSpan(node)]); - case SyntaxKind.FunctionExpression: - case SyntaxKind.ArrowFunction: - case SyntaxKind.ClassExpression: - return getDefineModuleItem(node) || getFunctionOrClassExpressionItem(node); - case SyntaxKind.MethodDeclaration: - const methodDecl = node as MethodDeclaration; - return getNavBarItem(declarationNameToString(methodDecl.name), - ScriptElementKind.memberFunctionElement, - [getNodeSpan(node)]); - case SyntaxKind.ExportAssignment: - // e.g. "export default " - return getNavBarItem("default", ScriptElementKind.variableElement, [getNodeSpan(node)]); - case SyntaxKind.ImportClause: // e.g. 'def' in: import def from 'mod' (in ImportDeclaration) - if (!(node as ImportClause).name) { - // No default import (this node is still a parent of named & namespace imports, which are handled below) - return undefined; - } - // fall through - case SyntaxKind.ImportSpecifier: // e.g. 'id' in: import {id} from 'mod' (in NamedImports, in ImportClause) - case SyntaxKind.NamespaceImport: // e.g. '* as ns' in: import * as ns from 'mod' (in ImportClause) - case SyntaxKind.ExportSpecifier: // e.g. 'a' or 'b' in: export {a, foo as b} from 'mod' - // Export specifiers are only interesting if they are reexports from another module, or renamed, else they are already globals - if (node.kind === SyntaxKind.ExportSpecifier) { - if (!(node.parent.parent as ExportDeclaration).moduleSpecifier && !(node as ExportSpecifier).propertyName) { - return undefined; - } - } - const decl = node as (ImportSpecifier | ImportClause | NamespaceImport | ExportSpecifier); - if (!decl.name) { - return undefined; - } - const declName = declarationNameToString(decl.name); - return getNavBarItem(declName, ScriptElementKind.constElement, [getNodeSpan(node)]); - case SyntaxKind.JSDocTypedefTag: - if ((node).name) { - return getNavBarItem( - (node).name.text, - ScriptElementKind.typeElement, - [getNodeSpan(node)]); - } - else { - const parentNode = node.parent && node.parent.parent; - if (parentNode && parentNode.kind === SyntaxKind.VariableStatement) { - if ((parentNode).declarationList.declarations.length > 0) { - const nameIdentifier = (parentNode).declarationList.declarations[0].name; - if (nameIdentifier.kind === SyntaxKind.Identifier) { - return getNavBarItem( - (nameIdentifier).text, - ScriptElementKind.typeElement, - [getNodeSpan(node)]); - } - } - } - } - default: - return undefined; - } - } - - 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 { - if (node.kind !== SyntaxKind.FunctionExpression && node.kind !== SyntaxKind.ArrowFunction) { - return undefined; - } - - // No match if this is not a call expression to an identifier named 'define' - if (node.parent.kind !== SyntaxKind.CallExpression) { - return undefined; - } - const callExpr = node.parent as CallExpression; - if (callExpr.expression.kind !== SyntaxKind.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 - let defaultName = node.getSourceFile().fileName; - if (callExpr.arguments[0].kind === SyntaxKind.StringLiteral) { - defaultName = ((callExpr.arguments[0]) as StringLiteral).text; - } - return getNavBarItem(defaultName, ScriptElementKind.moduleElement, [getNodeSpan(node.parent)]); - } - - function getFunctionOrClassExpressionItem(node: Node): NavigationBarItem { - if (node.kind !== SyntaxKind.FunctionExpression && - node.kind !== SyntaxKind.ArrowFunction && - node.kind !== SyntaxKind.ClassExpression) { - return undefined; - } - - const fnExpr = node as FunctionExpression | ArrowFunction | ClassExpression; - let fnName: string; - if (fnExpr.name && getFullWidth(fnExpr.name) > 0) { - // The expression has an identifier, so use that as the name - fnName = declarationNameToString(fnExpr.name); - } - else { - // See if it is a var initializer. If so, use the var name. - if (fnExpr.parent.kind === SyntaxKind.VariableDeclaration) { - fnName = declarationNameToString((fnExpr.parent as VariableDeclaration).name); - } - // See if it is of the form " = function(){...}". If so, use the text from the left-hand side. - else if (fnExpr.parent.kind === SyntaxKind.BinaryExpression && - (fnExpr.parent as BinaryExpression).operatorToken.kind === SyntaxKind.EqualsToken) { - fnName = (fnExpr.parent as BinaryExpression).left.getText(); - } - // See if it is a property assignment, and if so use the property name - else if (fnExpr.parent.kind === SyntaxKind.PropertyAssignment && - (fnExpr.parent as PropertyAssignment).name) { - fnName = (fnExpr.parent as PropertyAssignment).name.getText(); + Debug.assert(!!variableDeclarationNode); } else { - fnName = node.kind === SyntaxKind.ClassExpression ? anonClassText : anonFnText; + Debug.assert(!isBindingPattern((node).name)); + variableDeclarationNode = node; + name = (node).name; } - } - const scriptKind = node.kind === SyntaxKind.ClassExpression ? ScriptElementKind.classElement : ScriptElementKind.functionElement; - return getNavBarItem(fnName, scriptKind, [getNodeSpan(node)]); + + if (isConst(variableDeclarationNode)) { + return ts.ScriptElementKind.constElement; + } + else if (isLet(variableDeclarationNode)) { + return ts.ScriptElementKind.letElement; + } + else { + return ts.ScriptElementKind.variableElement; + } + + case SyntaxKind.ArrowFunction: + return ts.ScriptElementKind.functionElement; + + case SyntaxKind.JSDocTypedefTag: + return ScriptElementKind.typeElement; + + default: + return getNodeKind(node); + } + } + + function getModuleName(moduleDeclaration: ModuleDeclaration): string { + // We want to maintain quotation marks. + if (isAmbientModule(moduleDeclaration)) { + return getTextOfNode(moduleDeclaration.name); } - function getNodeSpan(node: Node) { - return node.kind === SyntaxKind.SourceFile - ? createTextSpanFromBounds(node.getFullStart(), node.getEnd()) - : createTextSpanFromBounds(node.getStart(), node.getEnd()); + // Otherwise, we need to aggregate each identifier to build up the qualified name. + const result: string[] = []; + + result.push(moduleDeclaration.name.text); + + while (moduleDeclaration.body && moduleDeclaration.body.kind === SyntaxKind.ModuleDeclaration) { + moduleDeclaration = moduleDeclaration.body; + + result.push(moduleDeclaration.name.text); } - function getScriptKindForElementKind(kind: SyntaxKind) { - switch (kind) { - case SyntaxKind.VariableDeclaration: - return ScriptElementKind.variableElement; - case SyntaxKind.FunctionDeclaration: - return ScriptElementKind.functionElement; - case SyntaxKind.ClassDeclaration: - return ScriptElementKind.classElement; - case SyntaxKind.Constructor: - return ScriptElementKind.constructorImplementationElement; - case SyntaxKind.GetAccessor: - return ScriptElementKind.memberGetAccessorElement; - case SyntaxKind.SetAccessor: - return ScriptElementKind.memberSetAccessorElement; - default: - return "unknown"; - } - } + return result.join("."); + } - return sourceFileItem.childItems; + /** + * For 'module A.B.C', we want to get the node for 'C'. + * We store 'A' as associated with a NavNode, and use getModuleName to traverse down again. + */ + function getInteriorModule(decl: ModuleDeclaration): ModuleDeclaration { + return decl.body.kind === SyntaxKind.ModuleDeclaration ? getInteriorModule(decl.body) : decl; + } + + function isComputedProperty(member: EnumMember): boolean { + return !member.name || member.name.kind === SyntaxKind.ComputedPropertyName; + } + + function getNodeSpan(node: Node): TextSpan { + return node.kind === SyntaxKind.SourceFile + ? createTextSpanFromBounds(node.getFullStart(), node.getEnd()) + : createTextSpanFromBounds(node.getStart(curSourceFile), node.getEnd()); + } + + function getFunctionOrClassName(node: FunctionExpression | FunctionDeclaration | ArrowFunction | ClassLikeDeclaration): string { + if (node.name && getFullWidth(node.name) > 0) { + return declarationNameToString(node.name); + } + // See if it is a var initializer. If so, use the var name. + else if (node.parent.kind === SyntaxKind.VariableDeclaration) { + return declarationNameToString((node.parent as VariableDeclaration).name); + } + // See if it is of the form " = function(){...}". If so, use the text from the left-hand side. + else if (node.parent.kind === SyntaxKind.BinaryExpression && + (node.parent as BinaryExpression).operatorToken.kind === SyntaxKind.EqualsToken) { + return nodeText((node.parent as BinaryExpression).left); + } + // See if it is a property assignment, and if so use the property name + else if (node.parent.kind === SyntaxKind.PropertyAssignment && (node.parent as PropertyAssignment).name) { + return nodeText((node.parent as PropertyAssignment).name); + } + // Default exports are named "default" + else if (getModifierFlags(node) & ModifierFlags.Default) { + return "default"; + } + else { + return isClassLike(node) ? "" : ""; + } + } + + function isFunctionOrClassExpression(node: Node): boolean { + return node.kind === SyntaxKind.FunctionExpression || node.kind === SyntaxKind.ArrowFunction || node.kind === SyntaxKind.ClassExpression; } } diff --git a/src/services/services.ts b/src/services/services.ts index cdf31ea3197..f7a6fd8bfd4 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1,4 +1,5 @@ /// +/// /// /// @@ -479,8 +480,7 @@ namespace ts { for (; pos < end; pos++) { const ch = sourceFile.text.charCodeAt(pos); - if (!isWhiteSpace(ch) || isLineBreak(ch)) { - // Either found lineBreak or non whiteSpace + if (!isWhiteSpaceSingleLine(ch)) { return pos; } } @@ -499,8 +499,7 @@ namespace ts { function isName(pos: number, end: number, sourceFile: SourceFile, name: string) { return pos + name.length < end && sourceFile.text.substr(pos, name.length) === name && - (isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)) || - isLineBreak(sourceFile.text.charCodeAt(pos + name.length))); + isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)); } function isParamTag(pos: number, end: number, sourceFile: SourceFile) { @@ -695,7 +694,7 @@ namespace ts { return paramDocComments; function consumeWhiteSpaces(pos: number) { - while (pos < end && isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + while (pos < end && isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { pos++; } @@ -784,7 +783,7 @@ namespace ts { declaration: SignatureDeclaration; typeParameters: TypeParameter[]; parameters: Symbol[]; - thisType: Type; + thisParameter: Symbol; resolvedReturnType: Type; minArgumentCount: number; hasRestParameter: boolean; @@ -1152,7 +1151,7 @@ namespace ts { getDocCommentTemplateAtPosition(fileName: string, position: number): TextInsertion; - isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): boolean; + isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean; getEmitOutput(fileName: string): EmitOutput; @@ -1249,6 +1248,7 @@ namespace ts { } export interface EditorOptions { + BaseIndentSize?: number; IndentSize: number; TabSize: number; NewLineCharacter: string; @@ -1271,9 +1271,10 @@ namespace ts { InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean; InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: boolean; InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean; + InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean; PlaceOpenBraceOnNewLineForFunctions: boolean; PlaceOpenBraceOnNewLineForControlBlocks: boolean; - [s: string]: boolean | number | string; + [s: string]: boolean | number | string | undefined; } export interface DefinitionInfo { @@ -2007,6 +2008,18 @@ namespace ts { // so pass --noLib to avoid reporting a file not found error. options.noLib = true; + // Clear out other settings that would not be used in transpiling this module + options.lib = undefined; + options.types = undefined; + options.noEmit = undefined; + options.noEmitOnError = undefined; + options.paths = undefined; + options.rootDirs = undefined; + options.declaration = undefined; + options.declarationDir = undefined; + options.out = undefined; + options.outFile = undefined; + // We are not doing a full typecheck, we are not resolving the whole context, // so pass --noResolve to avoid reporting missing file errors. options.noResolve = true; @@ -2989,7 +3002,8 @@ namespace ts { oldSettings.moduleResolution !== newSettings.moduleResolution || oldSettings.noResolve !== newSettings.noResolve || oldSettings.jsx !== newSettings.jsx || - oldSettings.allowJs !== newSettings.allowJs); + oldSettings.allowJs !== newSettings.allowJs || + oldSettings.disableSizeLimit !== oldSettings.disableSizeLimit); // Now create a new compiler const compilerHost: CompilerHost = { @@ -5722,7 +5736,7 @@ namespace ts { // Avoid recalculating getStart() by iterating backwards. for (let j = ifKeyword.getStart() - 1; j >= elseKeyword.end; j--) { - if (!isWhiteSpace(sourceFile.text.charCodeAt(j))) { + if (!isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(j))) { shouldCombindElseAndIf = false; break; } @@ -5816,17 +5830,32 @@ namespace ts { return undefined; } - if (node.kind !== SyntaxKind.Identifier && - // TODO (drosen): This should be enabled in a later release - currently breaks rename. - // node.kind !== SyntaxKind.ThisKeyword && - // node.kind !== SyntaxKind.SuperKeyword && - node.kind !== SyntaxKind.StringLiteral && - !isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { - return undefined; + switch (node.kind) { + case SyntaxKind.NumericLiteral: + if (!isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + break; + } + // Fallthrough + case SyntaxKind.Identifier: + case SyntaxKind.ThisKeyword: + // case SyntaxKind.SuperKeyword: TODO:GH#9268 + case SyntaxKind.StringLiteral: + return getReferencedSymbolsForNode(node, program.getSourceFiles(), findInStrings, findInComments); } + return undefined; + } - Debug.assert(node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.NumericLiteral || node.kind === SyntaxKind.StringLiteral); - return getReferencedSymbolsForNode(node, program.getSourceFiles(), findInStrings, findInComments); + function isThis(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.ThisKeyword: + // case SyntaxKind.ThisType: TODO: GH#9267 + return true; + case SyntaxKind.Identifier: + // 'this' as a parameter + return (node as Identifier).originalKeywordKind === SyntaxKind.ThisKeyword && node.parent.kind === SyntaxKind.Parameter; + default: + return false; + } } function getReferencedSymbolsForNode(node: Node, sourceFiles: SourceFile[], findInStrings: boolean, findInComments: boolean): ReferencedSymbol[] { @@ -5846,7 +5875,7 @@ namespace ts { } } - if (node.kind === SyntaxKind.ThisKeyword || node.kind === SyntaxKind.ThisType) { + if (isThis(node)) { return getReferencesForThisKeyword(node, sourceFiles); } @@ -6381,7 +6410,7 @@ namespace ts { cancellationToken.throwIfCancellationRequested(); const node = getTouchingWord(sourceFile, position); - if (!node || (node.kind !== SyntaxKind.ThisKeyword && node.kind !== SyntaxKind.ThisType)) { + if (!node || !isThis(node)) { return; } @@ -7044,7 +7073,7 @@ namespace ts { function getNavigationBarItems(fileName: string): NavigationBarItem[] { const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); - return NavigationBar.getNavigationBarItems(sourceFile, host.getCompilationSettings()); + return NavigationBar.getNavigationBarItems(sourceFile); } function getSemanticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[] { @@ -7538,7 +7567,8 @@ namespace ts { return; case SyntaxKind.Parameter: if ((token.parent).name === token) { - return ClassificationType.parameterName; + const isThis = token.kind === SyntaxKind.Identifier && (token).originalKeywordKind === SyntaxKind.ThisKeyword; + return isThis ? ClassificationType.keyword : ClassificationType.parameterName; } return; } @@ -7765,7 +7795,7 @@ namespace ts { return { newText: result, caretOffset: preamble.length }; } - function isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): boolean { + function isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean { // '<' is currently not supported, figuring out if we're in a Generic Type vs. a comparison is too // expensive to do during typing scenarios @@ -8008,11 +8038,11 @@ namespace ts { const node = getTouchingWord(sourceFile, position, /*includeJsDocComment*/ true); - // Can only rename an identifier. if (node) { if (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.StringLiteral || - isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || + isThis(node)) { const symbol = typeChecker.getSymbolAtLocation(node); // Only allow a symbol to be renamed if it actually has at least one declaration. @@ -8133,7 +8163,7 @@ namespace ts { getFormattingEditsForDocument, getFormattingEditsAfterKeystroke, getDocCommentTemplateAtPosition, - isValidBraceCompletionAtPostion, + isValidBraceCompletionAtPosition, getEmitOutput, getNonBoundSourceFile, getProgram diff --git a/src/services/shims.ts b/src/services/shims.ts index 96392ca42be..e8b9b59b3cd 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -61,7 +61,7 @@ namespace ts { getLocalizedDiagnosticMessages(): string; getCancellationToken(): HostCancellationToken; getCurrentDirectory(): string; - getDirectories(path: string): string[]; + getDirectories(path: string): string; getDefaultLibFileName(options: string): string; getNewLine?(): string; getProjectVersion?(): string; @@ -80,8 +80,9 @@ namespace ts { * @param exclude A JSON encoded string[] containing the paths to exclude * when enumerating the directory. */ - readDirectory(rootDir: string, extension: string, exclude?: string, depth?: number): string; - + readDirectory(rootDir: string, extension: string, basePaths?: string, excludeEx?: string, includeFileEx?: string, includeDirEx?: string, depth?: number): string; + useCaseSensitiveFileNames?(): boolean; + getCurrentDirectory(): string; trace(s: string): void; } @@ -227,9 +228,10 @@ namespace ts { * at the current position. * E.g. we don't want brace completion inside string-literals, comments, etc. */ - isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): string; + isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): string; getEmitOutput(fileName: string): string; + getEmitOutputObject(fileName: string): EmitOutput; } export interface ClassifierShim extends Shim { @@ -402,7 +404,7 @@ namespace ts { } public getDirectories(path: string): string[] { - return this.shimHost.getDirectories(path); + return JSON.parse(this.shimHost.getDirectories(path)); } public getDefaultLibFileName(options: CompilerOptions): string { @@ -437,8 +439,10 @@ namespace ts { public directoryExists: (directoryName: string) => boolean; public realpath: (path: string) => string; + public useCaseSensitiveFileNames: boolean; constructor(private shimHost: CoreServicesShimHost) { + this.useCaseSensitiveFileNames = this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; if ("directoryExists" in this.shimHost) { this.directoryExists = directoryName => this.shimHost.directoryExists(directoryName); } @@ -447,17 +451,34 @@ namespace ts { } } - public readDirectory(rootDir: string, extension: string, exclude: string[], depth?: number): string[] { + public readDirectory(rootDir: string, extensions: string[], exclude: string[], include: string[], depth?: number): string[] { // Wrap the API changes for 2.0 release. This try/catch // should be removed once TypeScript 2.0 has shipped. - let encoded: string; try { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude), depth); + const pattern = getFileMatcherPatterns(rootDir, extensions, exclude, include, + this.shimHost.useCaseSensitiveFileNames(), this.shimHost.getCurrentDirectory()); + return JSON.parse(this.shimHost.readDirectory( + rootDir, + JSON.stringify(extensions), + JSON.stringify(pattern.basePaths), + pattern.excludePattern, + pattern.includeFilePattern, + pattern.includeDirectoryPattern, + depth + )); } catch (e) { - encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude)); + const results: string[] = []; + for (const extension of extensions) { + for (const file of this.readDirectoryFallback(rootDir, extension, exclude)) + { + if (!contains(results, file)) { + results.push(file); + } + } + } + return results; } - return JSON.parse(encoded); } public fileExists(fileName: string): boolean { @@ -467,6 +488,10 @@ namespace ts { public readFile(fileName: string): string { return this.shimHost.readFile(fileName); } + + private readDirectoryFallback(rootDir: string, extension: string, exclude: string[]) { + return JSON.parse(this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude))); + } } function simpleForwardCall(logger: Logger, actionDescription: string, action: () => any, logPerformance: boolean): any { @@ -494,9 +519,13 @@ namespace ts { } function forwardJSONCall(logger: Logger, actionDescription: string, action: () => any, logPerformance: boolean): string { + return forwardCall(logger, actionDescription, /*returnJson*/ true, action, logPerformance); + } + + function forwardCall(logger: Logger, actionDescription: string, returnJson: boolean, action: () => T, logPerformance: boolean): T | string { try { const result = simpleForwardCall(logger, actionDescription, action, logPerformance); - return JSON.stringify({ result }); + return returnJson ? JSON.stringify({ result }) : result; } catch (err) { if (err instanceof OperationCanceledException) { @@ -508,6 +537,7 @@ namespace ts { } } + class ShimBase implements Shim { constructor(private factory: ShimFactory) { factory.registerShim(this); @@ -749,10 +779,10 @@ namespace ts { ); } - public isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): string { + public isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): string { return this.forwardJSONCall( - `isValidBraceCompletionAtPostion('${fileName}', ${position}, ${openingBrace})`, - () => this.languageService.isValidBraceCompletionAtPostion(fileName, position, openingBrace) + `isValidBraceCompletionAtPosition('${fileName}', ${position}, ${openingBrace})`, + () => this.languageService.isValidBraceCompletionAtPosition(fileName, position, openingBrace) ); } @@ -894,6 +924,15 @@ namespace ts { () => this.languageService.getEmitOutput(fileName) ); } + + public getEmitOutputObject(fileName: string): any { + return forwardCall( + this.logger, + `getEmitOutput('${fileName}')`, + /*returnJson*/ false, + () => this.languageService.getEmitOutput(fileName), + this.logPerformance); + } } function convertClassifications(classifications: Classifications): { spans: string, endOfLineState: EndOfLineState } { diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index b5df2b5af20..50378aa64b1 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -357,8 +357,8 @@ namespace ts.SignatureHelp { } function getArgumentIndex(argumentsList: Node, node: Node) { - // The list we got back can include commas. In the presence of errors it may - // also just have nodes without commas. For example "Foo(a b c)" will have 3 + // The list we got back can include commas. In the presence of errors it may + // also just have nodes without commas. For example "Foo(a b c)" will have 3 // args without commas. We want to find what index we're at. So we count // forward until we hit ourselves, only incrementing the index if it isn't a // comma. @@ -390,8 +390,8 @@ namespace ts.SignatureHelp { // 'a' ''. So, in the case where the last child is a comma, we increase the // arg count by one to compensate. // - // Note: this subtlety only applies to the last comma. If you had "Foo(a,," then - // we'll have: 'a' '' '' + // Note: this subtlety only applies to the last comma. If you had "Foo(a,," then + // we'll have: 'a' '' '' // That will give us 2 non-commas. We then add one for the last comma, givin us an // arg count of 3. const listChildren = argumentsList.getChildren(); @@ -563,7 +563,7 @@ namespace ts.SignatureHelp { signatureHelpParameters = typeParameters && typeParameters.length > 0 ? map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray; suffixDisplayParts.push(punctuationPart(SyntaxKind.GreaterThanToken)); const parameterParts = mapToDisplayParts(writer => - typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisType, candidateSignature.parameters, writer, invocation)); + typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisParameter, candidateSignature.parameters, writer, invocation)); addRange(suffixDisplayParts, parameterParts); } else { diff --git a/src/services/tsconfig.json b/src/services/tsconfig.json index 9c733f67635..89401c221d8 100644 --- a/src/services/tsconfig.json +++ b/src/services/tsconfig.json @@ -1,10 +1,13 @@ { "compilerOptions": { "noImplicitAny": true, - "removeComments": true, + "removeComments": false, "preserveConstEnums": true, - "out": "../../built/local/typescriptServices.js", - "sourceMap": true + "outFile": "../../built/local/typescriptServices.js", + "sourceMap": true, + "stripInternal": true, + "noResolve": false, + "declaration": true }, "files": [ "../compiler/core.ts", @@ -29,11 +32,11 @@ "../compiler/transformer.ts", "../compiler/comments.ts", "../compiler/sourcemap.ts", + "../compiler/declarationEmitter.ts", "../compiler/emitter.ts", "../compiler/program.ts", - "../compiler/declarationEmitter.ts", - "../compiler/diagnosticInformationMap.generated.ts", "../compiler/commandLineParser.ts", + "../compiler/diagnosticInformationMap.generated.ts", "breakpoints.ts", "navigateTo.ts", "navigationBar.ts", diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 59ae5ebfeec..6d9031d2010 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -53,6 +53,8 @@ namespace ts { case SyntaxKind.Block: case SyntaxKind.ModuleBlock: case SyntaxKind.CaseBlock: + case SyntaxKind.NamedImports: + case SyntaxKind.NamedExports: return nodeEndsWith(n, SyntaxKind.CloseBraceToken, sourceFile); case SyntaxKind.CatchClause: return isCompletedNode((n).block, sourceFile); @@ -156,6 +158,10 @@ namespace ts { case SyntaxKind.TemplateSpan: return nodeIsPresent((n).literal); + case SyntaxKind.ExportDeclaration: + case SyntaxKind.ImportDeclaration: + return nodeIsPresent((n).moduleSpecifier); + case SyntaxKind.PrefixUnaryExpression: return isCompletedNode((n).operand, sourceFile); case SyntaxKind.BinaryExpression: diff --git a/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typedefTagWithChildrenTags.json b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typedefTagWithChildrenTags.json new file mode 100644 index 00000000000..2d6d58d36b2 --- /dev/null +++ b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typedefTagWithChildrenTags.json @@ -0,0 +1,135 @@ +{ + "kind": "JSDocComment", + "pos": 0, + "end": 102, + "tags": { + "0": { + "kind": "JSDocTypedefTag", + "pos": 8, + "end": 97, + "atToken": { + "kind": "AtToken", + "pos": 8, + "end": 9 + }, + "tagName": { + "kind": "Identifier", + "pos": 9, + "end": 16, + "text": "typedef" + }, + "name": { + "kind": "Identifier", + "pos": 17, + "end": 23, + "text": "People" + }, + "jsDocTypeLiteral": { + "kind": "JSDocTypeLiteral", + "pos": 23, + "end": 97, + "jsDocTypeTag": { + "kind": "JSDocTypeTag", + "pos": 27, + "end": 42, + "atToken": { + "kind": "AtToken", + "pos": 27, + "end": 29 + }, + "tagName": { + "kind": "Identifier", + "pos": 29, + "end": 33, + "text": "type" + }, + "typeExpression": { + "kind": "JSDocTypeExpression", + "pos": 34, + "end": 42, + "type": { + "kind": "JSDocTypeReference", + "pos": 35, + "end": 41, + "name": { + "kind": "Identifier", + "pos": 35, + "end": 41, + "text": "Object" + } + } + } + }, + "jsDocPropertyTags": [ + { + "kind": "JSDocPropertyTag", + "pos": 46, + "end": 69, + "atToken": { + "kind": "AtToken", + "pos": 46, + "end": 48 + }, + "tagName": { + "kind": "Identifier", + "pos": 48, + "end": 56, + "text": "property" + }, + "name": { + "kind": "Identifier", + "pos": 66, + "end": 69, + "text": "age" + }, + "typeExpression": { + "kind": "JSDocTypeExpression", + "pos": 57, + "end": 65, + "type": { + "kind": "NumberKeyword", + "pos": 58, + "end": 64 + } + } + }, + { + "kind": "JSDocPropertyTag", + "pos": 73, + "end": 97, + "atToken": { + "kind": "AtToken", + "pos": 73, + "end": 75 + }, + "tagName": { + "kind": "Identifier", + "pos": 75, + "end": 83, + "text": "property" + }, + "name": { + "kind": "Identifier", + "pos": 93, + "end": 97, + "text": "name" + }, + "typeExpression": { + "kind": "JSDocTypeExpression", + "pos": 84, + "end": 92, + "type": { + "kind": "StringKeyword", + "pos": 85, + "end": 91 + } + } + } + ] + } + }, + "length": 1, + "pos": 8, + "end": 97 + } +} \ No newline at end of file diff --git a/tests/baselines/reference/asyncFunctionNoReturnType.errors.txt b/tests/baselines/reference/asyncFunctionNoReturnType.errors.txt new file mode 100644 index 00000000000..a7dbb6ecb64 --- /dev/null +++ b/tests/baselines/reference/asyncFunctionNoReturnType.errors.txt @@ -0,0 +1,25 @@ +error TS2318: Cannot find global type 'Promise'. +tests/cases/compiler/asyncFunctionNoReturnType.ts(1,1): error TS1311: Async functions are only available when targeting ECMAScript 2015 or higher. +tests/cases/compiler/asyncFunctionNoReturnType.ts(1,1): error TS1057: An async function or method must have a valid awaitable return type. +tests/cases/compiler/asyncFunctionNoReturnType.ts(1,1): error TS7030: Not all code paths return a value. +tests/cases/compiler/asyncFunctionNoReturnType.ts(2,9): error TS2304: Cannot find name 'window'. +tests/cases/compiler/asyncFunctionNoReturnType.ts(3,9): error TS7030: Not all code paths return a value. + + +!!! error TS2318: Cannot find global type 'Promise'. +==== tests/cases/compiler/asyncFunctionNoReturnType.ts (5 errors) ==== + async () => { + ~~~~~ +!!! error TS1311: Async functions are only available when targeting ECMAScript 2015 or higher. + ~~~~~~~~~~~~~ +!!! error TS1057: An async function or method must have a valid awaitable return type. + ~~~~~~~~~~~~~ +!!! error TS7030: Not all code paths return a value. + if (window) + ~~~~~~ +!!! error TS2304: Cannot find name 'window'. + return; + ~~~~~~~ +!!! error TS7030: Not all code paths return a value. + } + \ No newline at end of file diff --git a/tests/baselines/reference/asyncFunctionNoReturnType.js b/tests/baselines/reference/asyncFunctionNoReturnType.js new file mode 100644 index 00000000000..1d321eea51c --- /dev/null +++ b/tests/baselines/reference/asyncFunctionNoReturnType.js @@ -0,0 +1,21 @@ +//// [asyncFunctionNoReturnType.ts] +async () => { + if (window) + return; +} + + +//// [asyncFunctionNoReturnType.js] +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments)).next()); + }); +}; +var _this = this; +(function () { return __awaiter(_this, void 0, void 0, function* () { + if (window) + return; +}); }); diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES61.js b/tests/baselines/reference/classExpressionWithStaticPropertiesES61.js index 43f5e7415c4..d3a210df7e2 100644 --- a/tests/baselines/reference/classExpressionWithStaticPropertiesES61.js +++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES61.js @@ -1,10 +1,15 @@ //// [classExpressionWithStaticPropertiesES61.ts] -var v = class C { static a = 1; static b = 2 }; +var v = class C { + static a = 1; + static b = 2; + static c = C.a + 3; +}; //// [classExpressionWithStaticPropertiesES61.js] var v = (_a = class C { }, _a.a = 1, _a.b = 2, + _a.c = _a.a + 3, _a); var _a; diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES61.symbols b/tests/baselines/reference/classExpressionWithStaticPropertiesES61.symbols index c5f53e19bff..1101c0bab2f 100644 --- a/tests/baselines/reference/classExpressionWithStaticPropertiesES61.symbols +++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES61.symbols @@ -1,7 +1,18 @@ === tests/cases/compiler/classExpressionWithStaticPropertiesES61.ts === -var v = class C { static a = 1; static b = 2 }; +var v = class C { >v : Symbol(v, Decl(classExpressionWithStaticPropertiesES61.ts, 0, 3)) >C : Symbol(C, Decl(classExpressionWithStaticPropertiesES61.ts, 0, 7)) ->a : Symbol(C.a, Decl(classExpressionWithStaticPropertiesES61.ts, 0, 17)) ->b : Symbol(C.b, Decl(classExpressionWithStaticPropertiesES61.ts, 0, 31)) + static a = 1; +>a : Symbol(C.a, Decl(classExpressionWithStaticPropertiesES61.ts, 0, 17)) + + static b = 2; +>b : Symbol(C.b, Decl(classExpressionWithStaticPropertiesES61.ts, 1, 17)) + + static c = C.a + 3; +>c : Symbol(C.c, Decl(classExpressionWithStaticPropertiesES61.ts, 2, 17)) +>C.a : Symbol(C.a, Decl(classExpressionWithStaticPropertiesES61.ts, 0, 17)) +>C : Symbol(C, Decl(classExpressionWithStaticPropertiesES61.ts, 0, 7)) +>a : Symbol(C.a, Decl(classExpressionWithStaticPropertiesES61.ts, 0, 17)) + +}; diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES61.types b/tests/baselines/reference/classExpressionWithStaticPropertiesES61.types index 02c385b7525..0ba6ada4131 100644 --- a/tests/baselines/reference/classExpressionWithStaticPropertiesES61.types +++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES61.types @@ -1,10 +1,23 @@ === tests/cases/compiler/classExpressionWithStaticPropertiesES61.ts === -var v = class C { static a = 1; static b = 2 }; +var v = class C { >v : typeof C ->class C { static a = 1; static b = 2 } : typeof C +>class C { static a = 1; static b = 2; static c = C.a + 3;} : typeof C >C : typeof C + + static a = 1; >a : number >1 : number + + static b = 2; >b : number >2 : number + static c = C.a + 3; +>c : number +>C.a + 3 : number +>C.a : number +>C : typeof C +>a : number +>3 : number + +}; diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES62.js b/tests/baselines/reference/classExpressionWithStaticPropertiesES62.js index 1efa56ecaa2..d0f56131d54 100644 --- a/tests/baselines/reference/classExpressionWithStaticPropertiesES62.js +++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES62.js @@ -1,9 +1,20 @@ //// [classExpressionWithStaticPropertiesES62.ts] -var v = class C { static a = 1; static b }; +var v = class C { + static a = 1; + static b + static c = { + x: "hi" + } + static d = C.c.x + " world"; + }; //// [classExpressionWithStaticPropertiesES62.js] var v = (_a = class C { }, _a.a = 1, + _a.c = { + x: "hi" + }, + _a.d = _a.c.x + " world", _a); var _a; diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES62.symbols b/tests/baselines/reference/classExpressionWithStaticPropertiesES62.symbols index be57a289f53..697be499595 100644 --- a/tests/baselines/reference/classExpressionWithStaticPropertiesES62.symbols +++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES62.symbols @@ -1,7 +1,26 @@ === tests/cases/compiler/classExpressionWithStaticPropertiesES62.ts === -var v = class C { static a = 1; static b }; +var v = class C { >v : Symbol(v, Decl(classExpressionWithStaticPropertiesES62.ts, 0, 3)) >C : Symbol(C, Decl(classExpressionWithStaticPropertiesES62.ts, 0, 7)) ->a : Symbol(C.a, Decl(classExpressionWithStaticPropertiesES62.ts, 0, 17)) ->b : Symbol(C.b, Decl(classExpressionWithStaticPropertiesES62.ts, 0, 31)) + static a = 1; +>a : Symbol(C.a, Decl(classExpressionWithStaticPropertiesES62.ts, 0, 17)) + + static b +>b : Symbol(C.b, Decl(classExpressionWithStaticPropertiesES62.ts, 1, 17)) + + static c = { +>c : Symbol(C.c, Decl(classExpressionWithStaticPropertiesES62.ts, 2, 12)) + + x: "hi" +>x : Symbol(x, Decl(classExpressionWithStaticPropertiesES62.ts, 3, 16)) + } + static d = C.c.x + " world"; +>d : Symbol(C.d, Decl(classExpressionWithStaticPropertiesES62.ts, 5, 5)) +>C.c.x : Symbol(x, Decl(classExpressionWithStaticPropertiesES62.ts, 3, 16)) +>C.c : Symbol(C.c, Decl(classExpressionWithStaticPropertiesES62.ts, 2, 12)) +>C : Symbol(C, Decl(classExpressionWithStaticPropertiesES62.ts, 0, 7)) +>c : Symbol(C.c, Decl(classExpressionWithStaticPropertiesES62.ts, 2, 12)) +>x : Symbol(x, Decl(classExpressionWithStaticPropertiesES62.ts, 3, 16)) + + }; diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES62.types b/tests/baselines/reference/classExpressionWithStaticPropertiesES62.types index e8ded1422f1..97d6940a3fc 100644 --- a/tests/baselines/reference/classExpressionWithStaticPropertiesES62.types +++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES62.types @@ -1,9 +1,32 @@ === tests/cases/compiler/classExpressionWithStaticPropertiesES62.ts === -var v = class C { static a = 1; static b }; +var v = class C { >v : typeof C ->class C { static a = 1; static b } : typeof C +>class C { static a = 1; static b static c = { x: "hi" } static d = C.c.x + " world"; } : typeof C >C : typeof C + + static a = 1; >a : number >1 : number + + static b >b : any + static c = { +>c : { x: string; } +>{ x: "hi" } : { x: string; } + + x: "hi" +>x : string +>"hi" : string + } + static d = C.c.x + " world"; +>d : string +>C.c.x + " world" : string +>C.c.x : string +>C.c : { x: string; } +>C : typeof C +>c : { x: string; } +>x : string +>" world" : string + + }; diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES63.js b/tests/baselines/reference/classExpressionWithStaticPropertiesES63.js new file mode 100644 index 00000000000..3993f18c0c7 --- /dev/null +++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES63.js @@ -0,0 +1,23 @@ +//// [classExpressionWithStaticPropertiesES63.ts] + +declare var console: any; +const arr: {y(): number}[] = []; +for (let i = 0; i < 3; i++) { + arr.push(class C { + static x = i; + static y = () => C.x * 2; + }); +} +arr.forEach(C => console.log(C.y())); + +//// [classExpressionWithStaticPropertiesES63.js] +const arr = []; +for (let i = 0; i < 3; i++) { + arr.push((_a = class C { + }, + _a.x = i, + _a.y = () => _a.x * 2, + _a)); +} +arr.forEach(C => console.log(C.y())); +var _a; diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES63.symbols b/tests/baselines/reference/classExpressionWithStaticPropertiesES63.symbols new file mode 100644 index 00000000000..f1a7fa807f5 --- /dev/null +++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES63.symbols @@ -0,0 +1,42 @@ +=== tests/cases/compiler/classExpressionWithStaticPropertiesES63.ts === + +declare var console: any; +>console : Symbol(console, Decl(classExpressionWithStaticPropertiesES63.ts, 1, 11)) + +const arr: {y(): number}[] = []; +>arr : Symbol(arr, Decl(classExpressionWithStaticPropertiesES63.ts, 2, 5)) +>y : Symbol(y, Decl(classExpressionWithStaticPropertiesES63.ts, 2, 12)) + +for (let i = 0; i < 3; i++) { +>i : Symbol(i, Decl(classExpressionWithStaticPropertiesES63.ts, 3, 8)) +>i : Symbol(i, Decl(classExpressionWithStaticPropertiesES63.ts, 3, 8)) +>i : Symbol(i, Decl(classExpressionWithStaticPropertiesES63.ts, 3, 8)) + + arr.push(class C { +>arr.push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --)) +>arr : Symbol(arr, Decl(classExpressionWithStaticPropertiesES63.ts, 2, 5)) +>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --)) +>C : Symbol(C, Decl(classExpressionWithStaticPropertiesES63.ts, 4, 13)) + + static x = i; +>x : Symbol(C.x, Decl(classExpressionWithStaticPropertiesES63.ts, 4, 22)) +>i : Symbol(i, Decl(classExpressionWithStaticPropertiesES63.ts, 3, 8)) + + static y = () => C.x * 2; +>y : Symbol(C.y, Decl(classExpressionWithStaticPropertiesES63.ts, 5, 21)) +>C.x : Symbol(C.x, Decl(classExpressionWithStaticPropertiesES63.ts, 4, 22)) +>C : Symbol(C, Decl(classExpressionWithStaticPropertiesES63.ts, 4, 13)) +>x : Symbol(C.x, Decl(classExpressionWithStaticPropertiesES63.ts, 4, 22)) + + }); +} +arr.forEach(C => console.log(C.y())); +>arr.forEach : Symbol(Array.forEach, Decl(lib.es5.d.ts, --, --)) +>arr : Symbol(arr, Decl(classExpressionWithStaticPropertiesES63.ts, 2, 5)) +>forEach : Symbol(Array.forEach, Decl(lib.es5.d.ts, --, --)) +>C : Symbol(C, Decl(classExpressionWithStaticPropertiesES63.ts, 9, 12)) +>console : Symbol(console, Decl(classExpressionWithStaticPropertiesES63.ts, 1, 11)) +>C.y : Symbol(y, Decl(classExpressionWithStaticPropertiesES63.ts, 2, 12)) +>C : Symbol(C, Decl(classExpressionWithStaticPropertiesES63.ts, 9, 12)) +>y : Symbol(y, Decl(classExpressionWithStaticPropertiesES63.ts, 2, 12)) + diff --git a/tests/baselines/reference/classExpressionWithStaticPropertiesES63.types b/tests/baselines/reference/classExpressionWithStaticPropertiesES63.types new file mode 100644 index 00000000000..92f14f3f65f --- /dev/null +++ b/tests/baselines/reference/classExpressionWithStaticPropertiesES63.types @@ -0,0 +1,58 @@ +=== tests/cases/compiler/classExpressionWithStaticPropertiesES63.ts === + +declare var console: any; +>console : any + +const arr: {y(): number}[] = []; +>arr : { y(): number; }[] +>y : () => number +>[] : undefined[] + +for (let i = 0; i < 3; i++) { +>i : number +>0 : number +>i < 3 : boolean +>i : number +>3 : number +>i++ : number +>i : number + + arr.push(class C { +>arr.push(class C { static x = i; static y = () => C.x * 2; }) : number +>arr.push : (...items: { y(): number; }[]) => number +>arr : { y(): number; }[] +>push : (...items: { y(): number; }[]) => number +>class C { static x = i; static y = () => C.x * 2; } : typeof C +>C : typeof C + + static x = i; +>x : number +>i : number + + static y = () => C.x * 2; +>y : () => number +>() => C.x * 2 : () => number +>C.x * 2 : number +>C.x : number +>C : typeof C +>x : number +>2 : number + + }); +} +arr.forEach(C => console.log(C.y())); +>arr.forEach(C => console.log(C.y())) : void +>arr.forEach : (callbackfn: (value: { y(): number; }, index: number, array: { y(): number; }[]) => void, thisArg?: any) => void +>arr : { y(): number; }[] +>forEach : (callbackfn: (value: { y(): number; }, index: number, array: { y(): number; }[]) => void, thisArg?: any) => void +>C => console.log(C.y()) : (C: { y(): number; }) => any +>C : { y(): number; } +>console.log(C.y()) : any +>console.log : any +>console : any +>log : any +>C.y() : number +>C.y : () => number +>C : { y(): number; } +>y : () => number + diff --git a/tests/baselines/reference/classExtendingClassLikeType.errors.txt b/tests/baselines/reference/classExtendingClassLikeType.errors.txt index 6f9aef927ea..5edefd78ec5 100644 --- a/tests/baselines/reference/classExtendingClassLikeType.errors.txt +++ b/tests/baselines/reference/classExtendingClassLikeType.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts(7,18): error TS2304: Cannot find name 'Base'. +tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts(7,18): error TS2689: Cannot extend an interface 'Base'. Did you mean 'implements'? tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts(45,18): error TS2508: No base constructor has the specified number of type arguments. tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts(56,18): error TS2510: Base constructors must all have the same return type. @@ -12,7 +12,7 @@ tests/cases/conformance/classes/classDeclarations/classExtendingClassLikeType.ts // Error, no Base constructor function class D0 extends Base { ~~~~ -!!! error TS2304: Cannot find name 'Base'. +!!! error TS2689: Cannot extend an interface 'Base'. Did you mean 'implements'? } interface BaseConstructor { diff --git a/tests/baselines/reference/classExtendsEveryObjectType.errors.txt b/tests/baselines/reference/classExtendsEveryObjectType.errors.txt index 0339dfad13a..e1c5137e3a9 100644 --- a/tests/baselines/reference/classExtendsEveryObjectType.errors.txt +++ b/tests/baselines/reference/classExtendsEveryObjectType.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(4,17): error TS2304: Cannot find name 'I'. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(4,17): error TS2689: Cannot extend an interface 'I'. Did you mean 'implements'? tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,18): error TS2507: Type '{ foo: any; }' is not a constructor function type. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,25): error TS2304: Cannot find name 'string'. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,31): error TS1005: ',' expected. @@ -14,7 +14,7 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla } class C extends I { } // error ~ -!!! error TS2304: Cannot find name 'I'. +!!! error TS2689: Cannot extend an interface 'I'. Did you mean 'implements'? class C2 extends { foo: string; } { } // error ~~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/classExtendsInterface.errors.txt b/tests/baselines/reference/classExtendsInterface.errors.txt index 2ecca6cf2cf..72b8466105c 100644 --- a/tests/baselines/reference/classExtendsInterface.errors.txt +++ b/tests/baselines/reference/classExtendsInterface.errors.txt @@ -1,17 +1,17 @@ -tests/cases/compiler/classExtendsInterface.ts(2,17): error TS2304: Cannot find name 'Comparable'. -tests/cases/compiler/classExtendsInterface.ts(6,21): error TS2304: Cannot find name 'Comparable2'. +tests/cases/compiler/classExtendsInterface.ts(2,17): error TS2689: Cannot extend an interface 'Comparable'. Did you mean 'implements'? +tests/cases/compiler/classExtendsInterface.ts(6,21): error TS2689: Cannot extend an interface 'Comparable2'. Did you mean 'implements'? ==== tests/cases/compiler/classExtendsInterface.ts (2 errors) ==== interface Comparable {} class A extends Comparable {} ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'Comparable'. +!!! error TS2689: Cannot extend an interface 'Comparable'. Did you mean 'implements'? class B implements Comparable {} - + interface Comparable2 {} class A2 extends Comparable2 {} ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'Comparable2'. +!!! error TS2689: Cannot extend an interface 'Comparable2'. Did you mean 'implements'? class B2 implements Comparable2 {} \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsInterface.js b/tests/baselines/reference/classExtendsInterface.js index c06c4e66d8b..b324f7382d8 100644 --- a/tests/baselines/reference/classExtendsInterface.js +++ b/tests/baselines/reference/classExtendsInterface.js @@ -2,7 +2,7 @@ interface Comparable {} class A extends Comparable {} class B implements Comparable {} - + interface Comparable2 {} class A2 extends Comparable2 {} class B2 implements Comparable2 {} diff --git a/tests/baselines/reference/classExtendsInterfaceInExpression.errors.txt b/tests/baselines/reference/classExtendsInterfaceInExpression.errors.txt new file mode 100644 index 00000000000..64b160ea766 --- /dev/null +++ b/tests/baselines/reference/classExtendsInterfaceInExpression.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/classExtendsInterfaceInExpression.ts(7,25): error TS2304: Cannot find name 'A'. + + +==== tests/cases/compiler/classExtendsInterfaceInExpression.ts (1 errors) ==== + interface A {} + + function factory(a: any): {new(): Object} { + return null; + } + + class C extends factory(A) {} + ~ +!!! error TS2304: Cannot find name 'A'. + \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsInterfaceInExpression.js b/tests/baselines/reference/classExtendsInterfaceInExpression.js new file mode 100644 index 00000000000..69e63f92570 --- /dev/null +++ b/tests/baselines/reference/classExtendsInterfaceInExpression.js @@ -0,0 +1,26 @@ +//// [classExtendsInterfaceInExpression.ts] +interface A {} + +function factory(a: any): {new(): Object} { + return null; +} + +class C extends factory(A) {} + + +//// [classExtendsInterfaceInExpression.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 factory(a) { + return null; +} +var C = (function (_super) { + __extends(C, _super); + function C() { + _super.apply(this, arguments); + } + return C; +}(factory(A))); diff --git a/tests/baselines/reference/classExtendsInterfaceInModule.errors.txt b/tests/baselines/reference/classExtendsInterfaceInModule.errors.txt new file mode 100644 index 00000000000..9a87ddf51b6 --- /dev/null +++ b/tests/baselines/reference/classExtendsInterfaceInModule.errors.txt @@ -0,0 +1,27 @@ +tests/cases/compiler/classExtendsInterfaceInModule.ts(5,18): error TS2689: Cannot extend an interface 'M.I1'. Did you mean 'implements'? +tests/cases/compiler/classExtendsInterfaceInModule.ts(6,21): error TS2689: Cannot extend an interface 'M.I2'. Did you mean 'implements'? +tests/cases/compiler/classExtendsInterfaceInModule.ts(14,17): error TS2689: Cannot extend an interface 'Mod.Nested.I'. Did you mean 'implements'? + + +==== tests/cases/compiler/classExtendsInterfaceInModule.ts (3 errors) ==== + module M { + export interface I1 {} + export interface I2 {} + } + class C1 extends M.I1 {} + ~ +!!! error TS2689: Cannot extend an interface 'M.I1'. Did you mean 'implements'? + class C2 extends M.I2 {} + ~ +!!! error TS2689: Cannot extend an interface 'M.I2'. Did you mean 'implements'? + + module Mod { + export namespace Nested { + export interface I {} + } + } + + class D extends Mod.Nested.I {} + ~~~ +!!! error TS2689: Cannot extend an interface 'Mod.Nested.I'. Did you mean 'implements'? + \ No newline at end of file diff --git a/tests/baselines/reference/classExtendsInterfaceInModule.js b/tests/baselines/reference/classExtendsInterfaceInModule.js new file mode 100644 index 00000000000..45415488700 --- /dev/null +++ b/tests/baselines/reference/classExtendsInterfaceInModule.js @@ -0,0 +1,44 @@ +//// [classExtendsInterfaceInModule.ts] +module M { + export interface I1 {} + export interface I2 {} +} +class C1 extends M.I1 {} +class C2 extends M.I2 {} + +module Mod { + export namespace Nested { + export interface I {} + } +} + +class D extends Mod.Nested.I {} + + +//// [classExtendsInterfaceInModule.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 C1 = (function (_super) { + __extends(C1, _super); + function C1() { + _super.apply(this, arguments); + } + return C1; +}(M.I1)); +var C2 = (function (_super) { + __extends(C2, _super); + function C2() { + _super.apply(this, arguments); + } + return C2; +}(M.I2)); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; +}(Mod.Nested.I)); diff --git a/tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt new file mode 100644 index 00000000000..a4d28f51878 --- /dev/null +++ b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/file1.ts(2,1): error TS2448: Block-scoped variable 'c' used before its declaration. + + +==== tests/cases/compiler/file1.ts (1 errors) ==== + + c; + ~ +!!! error TS2448: Block-scoped variable 'c' used before its declaration. + +==== tests/cases/compiler/file2.ts (0 errors) ==== + const c = 0; \ No newline at end of file diff --git a/tests/baselines/reference/constDeclarations-useBeforeDefinition2.symbols b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.symbols deleted file mode 100644 index 281ce427733..00000000000 --- a/tests/baselines/reference/constDeclarations-useBeforeDefinition2.symbols +++ /dev/null @@ -1,9 +0,0 @@ -=== tests/cases/compiler/file1.ts === - -c; ->c : Symbol(c, Decl(file2.ts, 0, 5)) - -=== tests/cases/compiler/file2.ts === -const c = 0; ->c : Symbol(c, Decl(file2.ts, 0, 5)) - diff --git a/tests/baselines/reference/constDeclarations-useBeforeDefinition2.types b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.types deleted file mode 100644 index ae60fdfa477..00000000000 --- a/tests/baselines/reference/constDeclarations-useBeforeDefinition2.types +++ /dev/null @@ -1,10 +0,0 @@ -=== tests/cases/compiler/file1.ts === - -c; ->c : number - -=== tests/cases/compiler/file2.ts === -const c = 0; ->c : number ->0 : number - diff --git a/tests/baselines/reference/declarationEmitDestructuringParameterProperties.errors.txt b/tests/baselines/reference/declarationEmitDestructuringParameterProperties.errors.txt index 83785e86f65..aab9d18d629 100644 --- a/tests/baselines/reference/declarationEmitDestructuringParameterProperties.errors.txt +++ b/tests/baselines/reference/declarationEmitDestructuringParameterProperties.errors.txt @@ -1,13 +1,13 @@ -tests/cases/compiler/declarationEmitDestructuringParameterProperties.ts(2,17): error TS1187: A parameter property may not be a binding pattern. -tests/cases/compiler/declarationEmitDestructuringParameterProperties.ts(8,17): error TS1187: A parameter property may not be a binding pattern. -tests/cases/compiler/declarationEmitDestructuringParameterProperties.ts(14,17): error TS1187: A parameter property may not be a binding pattern. +tests/cases/compiler/declarationEmitDestructuringParameterProperties.ts(2,17): error TS1187: A parameter property may not be declared using a binding pattern. +tests/cases/compiler/declarationEmitDestructuringParameterProperties.ts(8,17): error TS1187: A parameter property may not be declared using a binding pattern. +tests/cases/compiler/declarationEmitDestructuringParameterProperties.ts(14,17): error TS1187: A parameter property may not be declared using a binding pattern. ==== tests/cases/compiler/declarationEmitDestructuringParameterProperties.ts (3 errors) ==== class C1 { constructor(public [x, y, z]: string[]) { ~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. } } @@ -15,7 +15,7 @@ tests/cases/compiler/declarationEmitDestructuringParameterProperties.ts(14,17): class C2 { constructor(public [x, y, z]: TupleType1) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. } } @@ -23,6 +23,6 @@ tests/cases/compiler/declarationEmitDestructuringParameterProperties.ts(14,17): class C3 { constructor(public { x, y, z }: ObjType1) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. } } \ No newline at end of file diff --git a/tests/baselines/reference/declarationEmit_invalidReference2.errors.txt b/tests/baselines/reference/declarationEmit_invalidReference2.errors.txt index 1f3960a87ab..9d480419022 100644 --- a/tests/baselines/reference/declarationEmit_invalidReference2.errors.txt +++ b/tests/baselines/reference/declarationEmit_invalidReference2.errors.txt @@ -4,5 +4,5 @@ tests/cases/compiler/declarationEmit_invalidReference2.ts(1,1): error TS6053: Fi ==== tests/cases/compiler/declarationEmit_invalidReference2.ts (1 errors) ==== /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'invalid.ts' not found. +!!! error TS6053: File 'tests/cases/compiler/invalid.ts' not found. var x = 0; \ No newline at end of file diff --git a/tests/baselines/reference/declarationFileOverwriteError.errors.txt b/tests/baselines/reference/declarationFileOverwriteError.errors.txt index a12c60482e9..1974976dee1 100644 --- a/tests/baselines/reference/declarationFileOverwriteError.errors.txt +++ b/tests/baselines/reference/declarationFileOverwriteError.errors.txt @@ -1,7 +1,7 @@ error TS5055: Cannot write file 'tests/cases/compiler/a.d.ts' because it would overwrite input file. -!!! error TS5055: Cannot write file 'a.d.ts' because it would overwrite input file. +!!! error TS5055: Cannot write file 'tests/cases/compiler/a.d.ts' because it would overwrite input file. ==== tests/cases/compiler/a.d.ts (0 errors) ==== declare class c { diff --git a/tests/baselines/reference/declarationFileOverwriteErrorWithOut.errors.txt b/tests/baselines/reference/declarationFileOverwriteErrorWithOut.errors.txt index 02251900345..658465de9c2 100644 --- a/tests/baselines/reference/declarationFileOverwriteErrorWithOut.errors.txt +++ b/tests/baselines/reference/declarationFileOverwriteErrorWithOut.errors.txt @@ -1,7 +1,7 @@ error TS5055: Cannot write file 'tests/cases/compiler/out.d.ts' because it would overwrite input file. -!!! error TS5055: Cannot write file 'out.d.ts' because it would overwrite input file. +!!! error TS5055: Cannot write file 'tests/cases/compiler/out.d.ts' because it would overwrite input file. ==== tests/cases/compiler/out.d.ts (0 errors) ==== declare class c { diff --git a/tests/baselines/reference/decoratorMetadataWithImportDeclarationNameCollision4.js b/tests/baselines/reference/decoratorMetadataWithImportDeclarationNameCollision4.js index 73ae697f396..33eb93f380f 100644 --- a/tests/baselines/reference/decoratorMetadataWithImportDeclarationNameCollision4.js +++ b/tests/baselines/reference/decoratorMetadataWithImportDeclarationNameCollision4.js @@ -48,6 +48,7 @@ var MyClass = (function () { }()); MyClass = __decorate([ someDecorator, - __metadata("design:paramtypes", [Object]) + __metadata("design:paramtypes", [typeof (_a = (typeof db_1.default !== "undefined" && db_1.default).db) === "function" && _a || Object]) ], MyClass); exports.MyClass = MyClass; +var _a; diff --git a/tests/baselines/reference/defaultValueInFunctionTypes.errors.txt b/tests/baselines/reference/defaultValueInFunctionTypes.errors.txt index 01a807b3e7d..5544b9caae0 100644 --- a/tests/baselines/reference/defaultValueInFunctionTypes.errors.txt +++ b/tests/baselines/reference/defaultValueInFunctionTypes.errors.txt @@ -1,8 +1,11 @@ tests/cases/compiler/defaultValueInFunctionTypes.ts(1,9): error TS2371: A parameter initializer is only allowed in a function or constructor implementation. +tests/cases/compiler/defaultValueInFunctionTypes.ts(2,11): error TS2371: A parameter initializer is only allowed in a function or constructor implementation. -==== tests/cases/compiler/defaultValueInFunctionTypes.ts (1 errors) ==== +==== tests/cases/compiler/defaultValueInFunctionTypes.ts (2 errors) ==== var x: (a: number = 1) => number; ~~~~~~~~~~~~~ !!! error TS2371: A parameter initializer is only allowed in a function or constructor implementation. - var y = <(a : string = "") => any>(undefined) \ No newline at end of file + var y = <(a : string = "") => any>(undefined) + ~~~~~~~~~~~~~~~ +!!! error TS2371: A parameter initializer is only allowed in a function or constructor implementation. \ No newline at end of file diff --git a/tests/baselines/reference/destructuringAssignmentWithDefault.js b/tests/baselines/reference/destructuringAssignmentWithDefault.js new file mode 100644 index 00000000000..ce3837e1162 --- /dev/null +++ b/tests/baselines/reference/destructuringAssignmentWithDefault.js @@ -0,0 +1,11 @@ +//// [destructuringAssignmentWithDefault.ts] +const a: { x?: number } = { }; +let x = 0; +({x = 1} = a); + + +//// [destructuringAssignmentWithDefault.js] +var a = {}; +var x = 0; +(_a = a.x, x = _a === void 0 ? 1 : _a, a); +var _a; diff --git a/tests/baselines/reference/destructuringAssignmentWithDefault.symbols b/tests/baselines/reference/destructuringAssignmentWithDefault.symbols new file mode 100644 index 00000000000..b011834c4f0 --- /dev/null +++ b/tests/baselines/reference/destructuringAssignmentWithDefault.symbols @@ -0,0 +1,12 @@ +=== tests/cases/compiler/destructuringAssignmentWithDefault.ts === +const a: { x?: number } = { }; +>a : Symbol(a, Decl(destructuringAssignmentWithDefault.ts, 0, 5)) +>x : Symbol(x, Decl(destructuringAssignmentWithDefault.ts, 0, 10)) + +let x = 0; +>x : Symbol(x, Decl(destructuringAssignmentWithDefault.ts, 1, 3)) + +({x = 1} = a); +>x : Symbol(x, Decl(destructuringAssignmentWithDefault.ts, 2, 2)) +>a : Symbol(a, Decl(destructuringAssignmentWithDefault.ts, 0, 5)) + diff --git a/tests/baselines/reference/destructuringAssignmentWithDefault.types b/tests/baselines/reference/destructuringAssignmentWithDefault.types new file mode 100644 index 00000000000..1dc1fe23533 --- /dev/null +++ b/tests/baselines/reference/destructuringAssignmentWithDefault.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/destructuringAssignmentWithDefault.ts === +const a: { x?: number } = { }; +>a : { x?: number | undefined; } +>x : number | undefined +>{ } : {} + +let x = 0; +>x : number +>0 : number + +({x = 1} = a); +>({x = 1} = a) : { x?: number | undefined; } +>{x = 1} = a : { x?: number | undefined; } +>{x = 1} : { x?: number; } +>x : number +>a : { x?: number | undefined; } + diff --git a/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt b/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt index aa5a8e8daea..89c771139ce 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt +++ b/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt @@ -1,5 +1,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(11,13): error TS2370: A rest parameter must be of an array type. tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(13,13): error TS2370: A rest parameter must be of an array type. +tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(14,17): error TS1047: A rest parameter cannot be optional. +tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(15,16): error TS1048: A rest parameter cannot have an initializer. tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(20,19): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'number | string'. tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(21,7): error TS2304: Cannot find name 'array2'. tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(22,4): error TS2345: Argument of type '[number, number, string, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]]]'. @@ -10,12 +12,12 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts( tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(24,4): error TS2345: Argument of type '(number | string)[]' is not assignable to parameter of type 'number[]'. Type 'number | string' is not assignable to type 'number'. Type 'string' is not assignable to type 'number'. -tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(29,24): error TS1005: ',' expected. +tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(29,17): error TS1317: A parameter property cannot be declared using a rest parameter. tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(34,22): error TS2304: Cannot find name 'E1'. tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(34,28): error TS2304: Cannot find name 'E'. -==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts (10 errors) ==== +==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts (12 errors) ==== // If the parameter is a rest parameter, the parameter type is any[] // A type annotation for a rest parameter must denote an array type. @@ -34,7 +36,11 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts( ~~~~~~~~~~~~~~~ !!! error TS2370: A rest parameter must be of an array type. function a3(...b?) { } // Error, can't be optional + ~ +!!! error TS1047: A rest parameter cannot be optional. function a4(...b = [1,2,3]) { } // Error, can't have initializer + ~ +!!! error TS1048: A rest parameter cannot have an initializer. function a5([a, b, [[c]]]) { } function a6([a, b, c, ...x]: number[]) { } @@ -63,9 +69,9 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts( var temp = [1, 2, 3]; class C { - constructor(public ...temp) { } // Error, rest parameter can't have accessibilityModifier - ~~~ -!!! error TS1005: ',' expected. + constructor(public ...temp) { } // Error, rest parameter can't have properties + ~~~~~~~~~~~~~~ +!!! error TS1317: A parameter property cannot be declared using a rest parameter. } // Rest parameter with generic diff --git a/tests/baselines/reference/destructuringParameterDeclaration4.js b/tests/baselines/reference/destructuringParameterDeclaration4.js index 2f0f24ac123..44838d600d8 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration4.js +++ b/tests/baselines/reference/destructuringParameterDeclaration4.js @@ -27,7 +27,7 @@ a6([1, 2, "string"]); // Error, parameter type is number[] var temp = [1, 2, 3]; class C { - constructor(public ...temp) { } // Error, rest parameter can't have accessibilityModifier + constructor(public ...temp) { } // Error, rest parameter can't have properties } // Rest parameter with generic @@ -83,12 +83,13 @@ a5([1, 2]); // Error, parameter type is [any, any, [[any]]] a6([1, 2, "string"]); // Error, parameter type is number[] var temp = [1, 2, 3]; var C = (function () { - function C(public) { + function C() { var temp = []; - for (var _i = 1; _i < arguments.length; _i++) { - temp[_i - 1] = arguments[_i]; + for (var _i = 0; _i < arguments.length; _i++) { + temp[_i - 0] = arguments[_i]; } - } // Error, rest parameter can't have accessibilityModifier + this.temp = temp; + } // Error, rest parameter can't have properties return C; }()); // Rest parameter with generic diff --git a/tests/baselines/reference/destructuringParameterDeclaration7ES5.js b/tests/baselines/reference/destructuringParameterDeclaration7ES5.js new file mode 100644 index 00000000000..f9dac1ae2fa --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration7ES5.js @@ -0,0 +1,27 @@ +//// [destructuringParameterDeclaration7ES5.ts] + +interface ISomething { + foo: string, + bar: string +} + +function foo({}, {foo, bar}: ISomething) {} + +function baz([], {foo, bar}: ISomething) {} + +function one([], {}) {} + +function two([], [a, b, c]: number[]) {} + + +//// [destructuringParameterDeclaration7ES5.js] +function foo(_a, _b) { + var foo = _b.foo, bar = _b.bar; +} +function baz(_a, _b) { + var foo = _b.foo, bar = _b.bar; +} +function one(_a, _b) { } +function two(_a, _b) { + var a = _b[0], b = _b[1], c = _b[2]; +} diff --git a/tests/baselines/reference/destructuringParameterDeclaration7ES5.symbols b/tests/baselines/reference/destructuringParameterDeclaration7ES5.symbols new file mode 100644 index 00000000000..44709f18e1b --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration7ES5.symbols @@ -0,0 +1,33 @@ +=== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration7ES5.ts === + +interface ISomething { +>ISomething : Symbol(ISomething, Decl(destructuringParameterDeclaration7ES5.ts, 0, 0)) + + foo: string, +>foo : Symbol(ISomething.foo, Decl(destructuringParameterDeclaration7ES5.ts, 1, 22)) + + bar: string +>bar : Symbol(ISomething.bar, Decl(destructuringParameterDeclaration7ES5.ts, 2, 16)) +} + +function foo({}, {foo, bar}: ISomething) {} +>foo : Symbol(foo, Decl(destructuringParameterDeclaration7ES5.ts, 4, 1)) +>foo : Symbol(foo, Decl(destructuringParameterDeclaration7ES5.ts, 6, 18)) +>bar : Symbol(bar, Decl(destructuringParameterDeclaration7ES5.ts, 6, 22)) +>ISomething : Symbol(ISomething, Decl(destructuringParameterDeclaration7ES5.ts, 0, 0)) + +function baz([], {foo, bar}: ISomething) {} +>baz : Symbol(baz, Decl(destructuringParameterDeclaration7ES5.ts, 6, 43)) +>foo : Symbol(foo, Decl(destructuringParameterDeclaration7ES5.ts, 8, 18)) +>bar : Symbol(bar, Decl(destructuringParameterDeclaration7ES5.ts, 8, 22)) +>ISomething : Symbol(ISomething, Decl(destructuringParameterDeclaration7ES5.ts, 0, 0)) + +function one([], {}) {} +>one : Symbol(one, Decl(destructuringParameterDeclaration7ES5.ts, 8, 43)) + +function two([], [a, b, c]: number[]) {} +>two : Symbol(two, Decl(destructuringParameterDeclaration7ES5.ts, 10, 23)) +>a : Symbol(a, Decl(destructuringParameterDeclaration7ES5.ts, 12, 18)) +>b : Symbol(b, Decl(destructuringParameterDeclaration7ES5.ts, 12, 20)) +>c : Symbol(c, Decl(destructuringParameterDeclaration7ES5.ts, 12, 23)) + diff --git a/tests/baselines/reference/destructuringParameterDeclaration7ES5.types b/tests/baselines/reference/destructuringParameterDeclaration7ES5.types new file mode 100644 index 00000000000..7d64383b0b6 --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration7ES5.types @@ -0,0 +1,33 @@ +=== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration7ES5.ts === + +interface ISomething { +>ISomething : ISomething + + foo: string, +>foo : string + + bar: string +>bar : string +} + +function foo({}, {foo, bar}: ISomething) {} +>foo : ({}: {}, {foo, bar}: ISomething) => void +>foo : string +>bar : string +>ISomething : ISomething + +function baz([], {foo, bar}: ISomething) {} +>baz : ([]: any[], {foo, bar}: ISomething) => void +>foo : string +>bar : string +>ISomething : ISomething + +function one([], {}) {} +>one : ([]: any[], {}: {}) => void + +function two([], [a, b, c]: number[]) {} +>two : ([]: any[], [a, b, c]: number[]) => void +>a : number +>b : number +>c : number + diff --git a/tests/baselines/reference/destructuringParameterProperties1.errors.txt b/tests/baselines/reference/destructuringParameterProperties1.errors.txt index b8f3a22b4c5..09d44a64a62 100644 --- a/tests/baselines/reference/destructuringParameterProperties1.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties1.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(2,17): error TS1187: A parameter property may not be a binding pattern. -tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(9,17): error TS1187: A parameter property may not be a binding pattern. -tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(16,17): error TS1187: A parameter property may not be a binding pattern. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(2,17): error TS1187: A parameter property may not be declared using a binding pattern. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(9,17): error TS1187: A parameter property may not be declared using a binding pattern. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(16,17): error TS1187: A parameter property may not be declared using a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,26): error TS2339: Property 'x' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,35): error TS2339: Property 'y' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(22,43): error TS2339: Property 'y' does not exist on type 'C1'. @@ -17,7 +17,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(2 class C1 { constructor(public [x, y, z]: string[]) { ~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. } } @@ -26,7 +26,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(2 class C2 { constructor(public [x, y, z]: TupleType1) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. } } @@ -35,7 +35,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties1.ts(2 class C3 { constructor(public { x, y, z }: ObjType1) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. } } diff --git a/tests/baselines/reference/destructuringParameterProperties2.errors.txt b/tests/baselines/reference/destructuringParameterProperties2.errors.txt index bc7588a853d..ec0f400631f 100644 --- a/tests/baselines/reference/destructuringParameterProperties2.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(2,36): error TS1187: A parameter property may not be a binding pattern. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(2,36): error TS1187: A parameter property may not be declared using a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. @@ -14,7 +14,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties2.ts(2 class C1 { constructor(private k: number, private [a, b, c]: [number, string, boolean]) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { ~ !!! error TS2339: Property 'b' does not exist on type 'C1'. diff --git a/tests/baselines/reference/destructuringParameterProperties3.errors.txt b/tests/baselines/reference/destructuringParameterProperties3.errors.txt index 73d7dab2a38..cbd2d089c71 100644 --- a/tests/baselines/reference/destructuringParameterProperties3.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties3.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(2,31): error TS1187: A parameter property may not be a binding pattern. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(2,31): error TS1187: A parameter property may not be declared using a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(3,59): error TS2339: Property 'b' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(3,83): error TS2339: Property 'c' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(4,18): error TS2339: Property 'a' does not exist on type 'C1'. @@ -11,7 +11,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties3.ts(1 class C1 { constructor(private k: T, private [a, b, c]: [T,U,V]) { ~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { ~ !!! error TS2339: Property 'b' does not exist on type 'C1'. diff --git a/tests/baselines/reference/destructuringParameterProperties4.errors.txt b/tests/baselines/reference/destructuringParameterProperties4.errors.txt index 04f6f82b5df..249cecbc74f 100644 --- a/tests/baselines/reference/destructuringParameterProperties4.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties4.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(3,31): error TS1187: A parameter property may not be a binding pattern. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(3,31): error TS1187: A parameter property may not be declared using a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(4,59): error TS2339: Property 'b' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(4,83): error TS2339: Property 'c' does not exist on type 'C1'. tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(5,18): error TS2339: Property 'a' does not exist on type 'C1'. @@ -15,7 +15,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties4.ts(2 class C1 { constructor(private k: T, protected [a, b, c]: [T,U,V]) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. if ((b === undefined && c === undefined) || (this.b === undefined && this.c === undefined)) { ~ !!! error TS2339: Property 'b' does not exist on type 'C1'. diff --git a/tests/baselines/reference/destructuringParameterProperties5.errors.txt b/tests/baselines/reference/destructuringParameterProperties5.errors.txt index cfb38fde90b..6f5801b7898 100644 --- a/tests/baselines/reference/destructuringParameterProperties5.errors.txt +++ b/tests/baselines/reference/destructuringParameterProperties5.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,17): error TS1187: A parameter property may not be a binding pattern. +tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,17): error TS1187: A parameter property may not be declared using a binding pattern. tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,27): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x1' and no string index signature. tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,31): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x2' and no string index signature. tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(5,35): error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x3' and no string index signature. @@ -20,7 +20,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterProperties5.ts(1 class C1 { constructor(public [{ x1, x2, x3 }, y, z]: TupleType1) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1187: A parameter property may not be a binding pattern. +!!! error TS1187: A parameter property may not be declared using a binding pattern. ~~ !!! error TS2459: Type '{ x: number; y: string; z: boolean; }' has no property 'x1' and no string index signature. ~~ diff --git a/tests/baselines/reference/discriminatedUnionTypes1.js b/tests/baselines/reference/discriminatedUnionTypes1.js new file mode 100644 index 00000000000..8679689569a --- /dev/null +++ b/tests/baselines/reference/discriminatedUnionTypes1.js @@ -0,0 +1,252 @@ +//// [discriminatedUnionTypes1.ts] +interface Square { + kind: "square"; + size: number; +} + +interface Rectangle { + kind: "rectangle"; + width: number; + height: number; +} + +interface Circle { + kind: "circle"; + radius: number; +} + +type Shape = Square | Rectangle | Circle; + +function area1(s: Shape) { + if (s.kind === "square") { + return s.size * s.size; + } + else if (s.kind === "circle") { + return Math.PI * s.radius * s.radius; + } + else if (s.kind === "rectangle") { + return s.width * s.height; + } + else { + return 0; + } +} + +function area2(s: Shape) { + switch (s.kind) { + case "square": return s.size * s.size; + case "rectangle": return s.width * s.height; + case "circle": return Math.PI * s.radius * s.radius; + } +} + +function assertNever(x: never): never { + throw new Error("Unexpected object: " + x); +} + +function area3(s: Shape) { + switch (s.kind) { + case "square": return s.size * s.size; + case "rectangle": return s.width * s.height; + case "circle": return Math.PI * s.radius * s.radius; + default: return assertNever(s); + } +} + +function area4(s: Shape) { + switch (s.kind) { + case "square": return s.size * s.size; + case "rectangle": return s.width * s.height; + case "circle": return Math.PI * s.radius * s.radius; + } + return assertNever(s); +} + +type Message = + { kind: "A", x: string } | + { kind: "B" | "C", y: number } | + { kind: "D" }; + +function f1(m: Message) { + if (m.kind === "A") { + m; // { kind: "A", x: string } + } + else if (m.kind === "D") { + m; // { kind: "D" } + } + else { + m; // { kind: "B" | "C", y: number } + } +} + +function f2(m: Message) { + if (m.kind === "A") { + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +} + +function f3(m: Message) { + if (m.kind === "X") { + m; // never + } +} + +function f4(m: Message, x: "A" | "D") { + if (m.kind == x) { + m; // { kind: "A", x: string } | { kind: "D" } + } +} + +function f5(m: Message) { + switch (m.kind) { + case "A": + m; // { kind: "A", x: string } + break; + case "D": + m; // { kind: "D" } + break; + default: + m; // { kind: "B" | "C", y: number } + } +} + +function f6(m: Message) { + switch (m.kind) { + case "A": + m; // { kind: "A", x: string } + case "D": + m; // { kind: "A", x: string } | { kind: "D" } + break; + default: + m; // { kind: "B" | "C", y: number } + } +} + +function f7(m: Message) { + switch (m.kind) { + case "A": + case "B": + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +} + +function f8(m: Message) { + switch (m.kind) { + case "A": + return; + case "D": + throw new Error(); + } + m; // { kind: "B" | "C", y: number } +} + +//// [discriminatedUnionTypes1.js] +function area1(s) { + if (s.kind === "square") { + return s.size * s.size; + } + else if (s.kind === "circle") { + return Math.PI * s.radius * s.radius; + } + else if (s.kind === "rectangle") { + return s.width * s.height; + } + else { + return 0; + } +} +function area2(s) { + switch (s.kind) { + case "square": return s.size * s.size; + case "rectangle": return s.width * s.height; + case "circle": return Math.PI * s.radius * s.radius; + } +} +function assertNever(x) { + throw new Error("Unexpected object: " + x); +} +function area3(s) { + switch (s.kind) { + case "square": return s.size * s.size; + case "rectangle": return s.width * s.height; + case "circle": return Math.PI * s.radius * s.radius; + default: return assertNever(s); + } +} +function area4(s) { + switch (s.kind) { + case "square": return s.size * s.size; + case "rectangle": return s.width * s.height; + case "circle": return Math.PI * s.radius * s.radius; + } + return assertNever(s); +} +function f1(m) { + if (m.kind === "A") { + m; // { kind: "A", x: string } + } + else if (m.kind === "D") { + m; // { kind: "D" } + } + else { + m; // { kind: "B" | "C", y: number } + } +} +function f2(m) { + if (m.kind === "A") { + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +} +function f3(m) { + if (m.kind === "X") { + m; // never + } +} +function f4(m, x) { + if (m.kind == x) { + m; // { kind: "A", x: string } | { kind: "D" } + } +} +function f5(m) { + switch (m.kind) { + case "A": + m; // { kind: "A", x: string } + break; + case "D": + m; // { kind: "D" } + break; + default: + m; // { kind: "B" | "C", y: number } + } +} +function f6(m) { + switch (m.kind) { + case "A": + m; // { kind: "A", x: string } + case "D": + m; // { kind: "A", x: string } | { kind: "D" } + break; + default: + m; // { kind: "B" | "C", y: number } + } +} +function f7(m) { + switch (m.kind) { + case "A": + case "B": + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +} +function f8(m) { + switch (m.kind) { + case "A": + return; + case "D": + throw new Error(); + } + m; // { kind: "B" | "C", y: number } +} diff --git a/tests/baselines/reference/discriminatedUnionTypes1.symbols b/tests/baselines/reference/discriminatedUnionTypes1.symbols new file mode 100644 index 00000000000..38069447423 --- /dev/null +++ b/tests/baselines/reference/discriminatedUnionTypes1.symbols @@ -0,0 +1,402 @@ +=== tests/cases/conformance/types/union/discriminatedUnionTypes1.ts === +interface Square { +>Square : Symbol(Square, Decl(discriminatedUnionTypes1.ts, 0, 0)) + + kind: "square"; +>kind : Symbol(Square.kind, Decl(discriminatedUnionTypes1.ts, 0, 18)) + + size: number; +>size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +} + +interface Rectangle { +>Rectangle : Symbol(Rectangle, Decl(discriminatedUnionTypes1.ts, 3, 1)) + + kind: "rectangle"; +>kind : Symbol(Rectangle.kind, Decl(discriminatedUnionTypes1.ts, 5, 21)) + + width: number; +>width : Symbol(Rectangle.width, Decl(discriminatedUnionTypes1.ts, 6, 22)) + + height: number; +>height : Symbol(Rectangle.height, Decl(discriminatedUnionTypes1.ts, 7, 18)) +} + +interface Circle { +>Circle : Symbol(Circle, Decl(discriminatedUnionTypes1.ts, 9, 1)) + + kind: "circle"; +>kind : Symbol(Circle.kind, Decl(discriminatedUnionTypes1.ts, 11, 18)) + + radius: number; +>radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +} + +type Shape = Square | Rectangle | Circle; +>Shape : Symbol(Shape, Decl(discriminatedUnionTypes1.ts, 14, 1)) +>Square : Symbol(Square, Decl(discriminatedUnionTypes1.ts, 0, 0)) +>Rectangle : Symbol(Rectangle, Decl(discriminatedUnionTypes1.ts, 3, 1)) +>Circle : Symbol(Circle, Decl(discriminatedUnionTypes1.ts, 9, 1)) + +function area1(s: Shape) { +>area1 : Symbol(area1, Decl(discriminatedUnionTypes1.ts, 16, 41)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>Shape : Symbol(Shape, Decl(discriminatedUnionTypes1.ts, 14, 1)) + + if (s.kind === "square") { +>s.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 0, 18), Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 0, 18), Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) + + return s.size * s.size; +>s.size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s.size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) + } + else if (s.kind === "circle") { +>s.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) + + return Math.PI * s.radius * s.radius; +>Math.PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) +>s.radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s.radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) + } + else if (s.kind === "rectangle") { +>s.kind : Symbol(Rectangle.kind, Decl(discriminatedUnionTypes1.ts, 5, 21)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>kind : Symbol(Rectangle.kind, Decl(discriminatedUnionTypes1.ts, 5, 21)) + + return s.width * s.height; +>s.width : Symbol(Rectangle.width, Decl(discriminatedUnionTypes1.ts, 6, 22)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>width : Symbol(Rectangle.width, Decl(discriminatedUnionTypes1.ts, 6, 22)) +>s.height : Symbol(Rectangle.height, Decl(discriminatedUnionTypes1.ts, 7, 18)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 18, 15)) +>height : Symbol(Rectangle.height, Decl(discriminatedUnionTypes1.ts, 7, 18)) + } + else { + return 0; + } +} + +function area2(s: Shape) { +>area2 : Symbol(area2, Decl(discriminatedUnionTypes1.ts, 31, 1)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 33, 15)) +>Shape : Symbol(Shape, Decl(discriminatedUnionTypes1.ts, 14, 1)) + + switch (s.kind) { +>s.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 0, 18), Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 33, 15)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 0, 18), Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) + + case "square": return s.size * s.size; +>s.size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 33, 15)) +>size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s.size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 33, 15)) +>size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) + + case "rectangle": return s.width * s.height; +>s.width : Symbol(Rectangle.width, Decl(discriminatedUnionTypes1.ts, 6, 22)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 33, 15)) +>width : Symbol(Rectangle.width, Decl(discriminatedUnionTypes1.ts, 6, 22)) +>s.height : Symbol(Rectangle.height, Decl(discriminatedUnionTypes1.ts, 7, 18)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 33, 15)) +>height : Symbol(Rectangle.height, Decl(discriminatedUnionTypes1.ts, 7, 18)) + + case "circle": return Math.PI * s.radius * s.radius; +>Math.PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) +>s.radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 33, 15)) +>radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s.radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 33, 15)) +>radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) + } +} + +function assertNever(x: never): never { +>assertNever : Symbol(assertNever, Decl(discriminatedUnionTypes1.ts, 39, 1)) +>x : Symbol(x, Decl(discriminatedUnionTypes1.ts, 41, 21)) + + throw new Error("Unexpected object: " + x); +>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>x : Symbol(x, Decl(discriminatedUnionTypes1.ts, 41, 21)) +} + +function area3(s: Shape) { +>area3 : Symbol(area3, Decl(discriminatedUnionTypes1.ts, 43, 1)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 45, 15)) +>Shape : Symbol(Shape, Decl(discriminatedUnionTypes1.ts, 14, 1)) + + switch (s.kind) { +>s.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 0, 18), Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 45, 15)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 0, 18), Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) + + case "square": return s.size * s.size; +>s.size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 45, 15)) +>size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s.size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 45, 15)) +>size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) + + case "rectangle": return s.width * s.height; +>s.width : Symbol(Rectangle.width, Decl(discriminatedUnionTypes1.ts, 6, 22)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 45, 15)) +>width : Symbol(Rectangle.width, Decl(discriminatedUnionTypes1.ts, 6, 22)) +>s.height : Symbol(Rectangle.height, Decl(discriminatedUnionTypes1.ts, 7, 18)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 45, 15)) +>height : Symbol(Rectangle.height, Decl(discriminatedUnionTypes1.ts, 7, 18)) + + case "circle": return Math.PI * s.radius * s.radius; +>Math.PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) +>s.radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 45, 15)) +>radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s.radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 45, 15)) +>radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) + + default: return assertNever(s); +>assertNever : Symbol(assertNever, Decl(discriminatedUnionTypes1.ts, 39, 1)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 45, 15)) + } +} + +function area4(s: Shape) { +>area4 : Symbol(area4, Decl(discriminatedUnionTypes1.ts, 52, 1)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 54, 15)) +>Shape : Symbol(Shape, Decl(discriminatedUnionTypes1.ts, 14, 1)) + + switch (s.kind) { +>s.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 0, 18), Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 54, 15)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 0, 18), Decl(discriminatedUnionTypes1.ts, 5, 21), Decl(discriminatedUnionTypes1.ts, 11, 18)) + + case "square": return s.size * s.size; +>s.size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 54, 15)) +>size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s.size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 54, 15)) +>size : Symbol(Square.size, Decl(discriminatedUnionTypes1.ts, 1, 19)) + + case "rectangle": return s.width * s.height; +>s.width : Symbol(Rectangle.width, Decl(discriminatedUnionTypes1.ts, 6, 22)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 54, 15)) +>width : Symbol(Rectangle.width, Decl(discriminatedUnionTypes1.ts, 6, 22)) +>s.height : Symbol(Rectangle.height, Decl(discriminatedUnionTypes1.ts, 7, 18)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 54, 15)) +>height : Symbol(Rectangle.height, Decl(discriminatedUnionTypes1.ts, 7, 18)) + + case "circle": return Math.PI * s.radius * s.radius; +>Math.PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) +>s.radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 54, 15)) +>radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s.radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 54, 15)) +>radius : Symbol(Circle.radius, Decl(discriminatedUnionTypes1.ts, 12, 19)) + } + return assertNever(s); +>assertNever : Symbol(assertNever, Decl(discriminatedUnionTypes1.ts, 39, 1)) +>s : Symbol(s, Decl(discriminatedUnionTypes1.ts, 54, 15)) +} + +type Message = +>Message : Symbol(Message, Decl(discriminatedUnionTypes1.ts, 61, 1)) + + { kind: "A", x: string } | +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5)) +>x : Symbol(x, Decl(discriminatedUnionTypes1.ts, 64, 16)) + + { kind: "B" | "C", y: number } | +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 65, 5)) +>y : Symbol(y, Decl(discriminatedUnionTypes1.ts, 65, 22)) + + { kind: "D" }; +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 66, 5)) + +function f1(m: Message) { +>f1 : Symbol(f1, Decl(discriminatedUnionTypes1.ts, 66, 18)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 68, 12)) +>Message : Symbol(Message, Decl(discriminatedUnionTypes1.ts, 61, 1)) + + if (m.kind === "A") { +>m.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 68, 12)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) + + m; // { kind: "A", x: string } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 68, 12)) + } + else if (m.kind === "D") { +>m.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 68, 12)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) + + m; // { kind: "D" } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 68, 12)) + } + else { + m; // { kind: "B" | "C", y: number } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 68, 12)) + } +} + +function f2(m: Message) { +>f2 : Symbol(f2, Decl(discriminatedUnionTypes1.ts, 78, 1)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 80, 12)) +>Message : Symbol(Message, Decl(discriminatedUnionTypes1.ts, 61, 1)) + + if (m.kind === "A") { +>m.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 80, 12)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) + + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 80, 12)) +} + +function f3(m: Message) { +>f3 : Symbol(f3, Decl(discriminatedUnionTypes1.ts, 85, 1)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 87, 12)) +>Message : Symbol(Message, Decl(discriminatedUnionTypes1.ts, 61, 1)) + + if (m.kind === "X") { +>m.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 87, 12)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) + + m; // never +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 87, 12)) + } +} + +function f4(m: Message, x: "A" | "D") { +>f4 : Symbol(f4, Decl(discriminatedUnionTypes1.ts, 91, 1)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 93, 12)) +>Message : Symbol(Message, Decl(discriminatedUnionTypes1.ts, 61, 1)) +>x : Symbol(x, Decl(discriminatedUnionTypes1.ts, 93, 23)) + + if (m.kind == x) { +>m.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 93, 12)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>x : Symbol(x, Decl(discriminatedUnionTypes1.ts, 93, 23)) + + m; // { kind: "A", x: string } | { kind: "D" } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 93, 12)) + } +} + +function f5(m: Message) { +>f5 : Symbol(f5, Decl(discriminatedUnionTypes1.ts, 97, 1)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 99, 12)) +>Message : Symbol(Message, Decl(discriminatedUnionTypes1.ts, 61, 1)) + + switch (m.kind) { +>m.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 99, 12)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) + + case "A": + m; // { kind: "A", x: string } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 99, 12)) + + break; + case "D": + m; // { kind: "D" } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 99, 12)) + + break; + default: + m; // { kind: "B" | "C", y: number } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 99, 12)) + } +} + +function f6(m: Message) { +>f6 : Symbol(f6, Decl(discriminatedUnionTypes1.ts, 110, 1)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 112, 12)) +>Message : Symbol(Message, Decl(discriminatedUnionTypes1.ts, 61, 1)) + + switch (m.kind) { +>m.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 112, 12)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) + + case "A": + m; // { kind: "A", x: string } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 112, 12)) + + case "D": + m; // { kind: "A", x: string } | { kind: "D" } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 112, 12)) + + break; + default: + m; // { kind: "B" | "C", y: number } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 112, 12)) + } +} + +function f7(m: Message) { +>f7 : Symbol(f7, Decl(discriminatedUnionTypes1.ts, 122, 1)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 124, 12)) +>Message : Symbol(Message, Decl(discriminatedUnionTypes1.ts, 61, 1)) + + switch (m.kind) { +>m.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 124, 12)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) + + case "A": + case "B": + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 124, 12)) +} + +function f8(m: Message) { +>f8 : Symbol(f8, Decl(discriminatedUnionTypes1.ts, 131, 1)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 133, 12)) +>Message : Symbol(Message, Decl(discriminatedUnionTypes1.ts, 61, 1)) + + switch (m.kind) { +>m.kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 133, 12)) +>kind : Symbol(kind, Decl(discriminatedUnionTypes1.ts, 64, 5), Decl(discriminatedUnionTypes1.ts, 65, 5), Decl(discriminatedUnionTypes1.ts, 66, 5)) + + case "A": + return; + case "D": + throw new Error(); +>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + } + m; // { kind: "B" | "C", y: number } +>m : Symbol(m, Decl(discriminatedUnionTypes1.ts, 133, 12)) +} diff --git a/tests/baselines/reference/discriminatedUnionTypes1.types b/tests/baselines/reference/discriminatedUnionTypes1.types new file mode 100644 index 00000000000..234de28eaba --- /dev/null +++ b/tests/baselines/reference/discriminatedUnionTypes1.types @@ -0,0 +1,465 @@ +=== tests/cases/conformance/types/union/discriminatedUnionTypes1.ts === +interface Square { +>Square : Square + + kind: "square"; +>kind : "square" + + size: number; +>size : number +} + +interface Rectangle { +>Rectangle : Rectangle + + kind: "rectangle"; +>kind : "rectangle" + + width: number; +>width : number + + height: number; +>height : number +} + +interface Circle { +>Circle : Circle + + kind: "circle"; +>kind : "circle" + + radius: number; +>radius : number +} + +type Shape = Square | Rectangle | Circle; +>Shape : Square | Rectangle | Circle +>Square : Square +>Rectangle : Rectangle +>Circle : Circle + +function area1(s: Shape) { +>area1 : (s: Square | Rectangle | Circle) => number +>s : Square | Rectangle | Circle +>Shape : Square | Rectangle | Circle + + if (s.kind === "square") { +>s.kind === "square" : boolean +>s.kind : "square" | "rectangle" | "circle" +>s : Square | Rectangle | Circle +>kind : "square" | "rectangle" | "circle" +>"square" : string + + return s.size * s.size; +>s.size * s.size : number +>s.size : number +>s : Square +>size : number +>s.size : number +>s : Square +>size : number + } + else if (s.kind === "circle") { +>s.kind === "circle" : boolean +>s.kind : "rectangle" | "circle" +>s : Rectangle | Circle +>kind : "rectangle" | "circle" +>"circle" : string + + return Math.PI * s.radius * s.radius; +>Math.PI * s.radius * s.radius : number +>Math.PI * s.radius : number +>Math.PI : number +>Math : Math +>PI : number +>s.radius : number +>s : Circle +>radius : number +>s.radius : number +>s : Circle +>radius : number + } + else if (s.kind === "rectangle") { +>s.kind === "rectangle" : boolean +>s.kind : "rectangle" +>s : Rectangle +>kind : "rectangle" +>"rectangle" : string + + return s.width * s.height; +>s.width * s.height : number +>s.width : number +>s : Rectangle +>width : number +>s.height : number +>s : Rectangle +>height : number + } + else { + return 0; +>0 : number + } +} + +function area2(s: Shape) { +>area2 : (s: Square | Rectangle | Circle) => number +>s : Square | Rectangle | Circle +>Shape : Square | Rectangle | Circle + + switch (s.kind) { +>s.kind : "square" | "rectangle" | "circle" +>s : Square | Rectangle | Circle +>kind : "square" | "rectangle" | "circle" + + case "square": return s.size * s.size; +>"square" : string +>s.size * s.size : number +>s.size : number +>s : Square +>size : number +>s.size : number +>s : Square +>size : number + + case "rectangle": return s.width * s.height; +>"rectangle" : string +>s.width * s.height : number +>s.width : number +>s : Rectangle +>width : number +>s.height : number +>s : Rectangle +>height : number + + case "circle": return Math.PI * s.radius * s.radius; +>"circle" : string +>Math.PI * s.radius * s.radius : number +>Math.PI * s.radius : number +>Math.PI : number +>Math : Math +>PI : number +>s.radius : number +>s : Circle +>radius : number +>s.radius : number +>s : Circle +>radius : number + } +} + +function assertNever(x: never): never { +>assertNever : (x: never) => never +>x : never + + throw new Error("Unexpected object: " + x); +>new Error("Unexpected object: " + x) : Error +>Error : ErrorConstructor +>"Unexpected object: " + x : string +>"Unexpected object: " : string +>x : never +} + +function area3(s: Shape) { +>area3 : (s: Square | Rectangle | Circle) => number +>s : Square | Rectangle | Circle +>Shape : Square | Rectangle | Circle + + switch (s.kind) { +>s.kind : "square" | "rectangle" | "circle" +>s : Square | Rectangle | Circle +>kind : "square" | "rectangle" | "circle" + + case "square": return s.size * s.size; +>"square" : string +>s.size * s.size : number +>s.size : number +>s : Square +>size : number +>s.size : number +>s : Square +>size : number + + case "rectangle": return s.width * s.height; +>"rectangle" : string +>s.width * s.height : number +>s.width : number +>s : Rectangle +>width : number +>s.height : number +>s : Rectangle +>height : number + + case "circle": return Math.PI * s.radius * s.radius; +>"circle" : string +>Math.PI * s.radius * s.radius : number +>Math.PI * s.radius : number +>Math.PI : number +>Math : Math +>PI : number +>s.radius : number +>s : Circle +>radius : number +>s.radius : number +>s : Circle +>radius : number + + default: return assertNever(s); +>assertNever(s) : never +>assertNever : (x: never) => never +>s : never + } +} + +function area4(s: Shape) { +>area4 : (s: Square | Rectangle | Circle) => number +>s : Square | Rectangle | Circle +>Shape : Square | Rectangle | Circle + + switch (s.kind) { +>s.kind : "square" | "rectangle" | "circle" +>s : Square | Rectangle | Circle +>kind : "square" | "rectangle" | "circle" + + case "square": return s.size * s.size; +>"square" : string +>s.size * s.size : number +>s.size : number +>s : Square +>size : number +>s.size : number +>s : Square +>size : number + + case "rectangle": return s.width * s.height; +>"rectangle" : string +>s.width * s.height : number +>s.width : number +>s : Rectangle +>width : number +>s.height : number +>s : Rectangle +>height : number + + case "circle": return Math.PI * s.radius * s.radius; +>"circle" : string +>Math.PI * s.radius * s.radius : number +>Math.PI * s.radius : number +>Math.PI : number +>Math : Math +>PI : number +>s.radius : number +>s : Circle +>radius : number +>s.radius : number +>s : Circle +>radius : number + } + return assertNever(s); +>assertNever(s) : never +>assertNever : (x: never) => never +>s : never +} + +type Message = +>Message : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } + + { kind: "A", x: string } | +>kind : "A" +>x : string + + { kind: "B" | "C", y: number } | +>kind : "B" | "C" +>y : number + + { kind: "D" }; +>kind : "D" + +function f1(m: Message) { +>f1 : (m: { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; }) => void +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>Message : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } + + if (m.kind === "A") { +>m.kind === "A" : boolean +>m.kind : "A" | "B" | "C" | "D" +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>kind : "A" | "B" | "C" | "D" +>"A" : string + + m; // { kind: "A", x: string } +>m : { kind: "A"; x: string; } + } + else if (m.kind === "D") { +>m.kind === "D" : boolean +>m.kind : "B" | "C" | "D" +>m : { kind: "B" | "C"; y: number; } | { kind: "D"; } +>kind : "B" | "C" | "D" +>"D" : string + + m; // { kind: "D" } +>m : { kind: "D"; } + } + else { + m; // { kind: "B" | "C", y: number } +>m : { kind: "B" | "C"; y: number; } + } +} + +function f2(m: Message) { +>f2 : (m: { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; }) => void +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>Message : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } + + if (m.kind === "A") { +>m.kind === "A" : boolean +>m.kind : "A" | "B" | "C" | "D" +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>kind : "A" | "B" | "C" | "D" +>"A" : string + + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +>m : { kind: "B" | "C"; y: number; } | { kind: "D"; } +} + +function f3(m: Message) { +>f3 : (m: { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; }) => void +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>Message : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } + + if (m.kind === "X") { +>m.kind === "X" : boolean +>m.kind : "A" | "B" | "C" | "D" +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>kind : "A" | "B" | "C" | "D" +>"X" : string + + m; // never +>m : never + } +} + +function f4(m: Message, x: "A" | "D") { +>f4 : (m: { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; }, x: "A" | "D") => void +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>Message : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>x : "A" | "D" + + if (m.kind == x) { +>m.kind == x : boolean +>m.kind : "A" | "B" | "C" | "D" +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>kind : "A" | "B" | "C" | "D" +>x : "A" | "D" + + m; // { kind: "A", x: string } | { kind: "D" } +>m : { kind: "A"; x: string; } | { kind: "D"; } + } +} + +function f5(m: Message) { +>f5 : (m: { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; }) => void +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>Message : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } + + switch (m.kind) { +>m.kind : "A" | "B" | "C" | "D" +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>kind : "A" | "B" | "C" | "D" + + case "A": +>"A" : string + + m; // { kind: "A", x: string } +>m : { kind: "A"; x: string; } + + break; + case "D": +>"D" : string + + m; // { kind: "D" } +>m : { kind: "D"; } + + break; + default: + m; // { kind: "B" | "C", y: number } +>m : { kind: "B" | "C"; y: number; } + } +} + +function f6(m: Message) { +>f6 : (m: { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; }) => void +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>Message : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } + + switch (m.kind) { +>m.kind : "A" | "B" | "C" | "D" +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>kind : "A" | "B" | "C" | "D" + + case "A": +>"A" : string + + m; // { kind: "A", x: string } +>m : { kind: "A"; x: string; } + + case "D": +>"D" : string + + m; // { kind: "A", x: string } | { kind: "D" } +>m : { kind: "D"; } | { kind: "A"; x: string; } + + break; + default: + m; // { kind: "B" | "C", y: number } +>m : { kind: "B" | "C"; y: number; } + } +} + +function f7(m: Message) { +>f7 : (m: { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; }) => void +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>Message : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } + + switch (m.kind) { +>m.kind : "A" | "B" | "C" | "D" +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>kind : "A" | "B" | "C" | "D" + + case "A": +>"A" : string + + case "B": +>"B" : string + + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +>m : { kind: "B" | "C"; y: number; } | { kind: "D"; } +} + +function f8(m: Message) { +>f8 : (m: { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; }) => void +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>Message : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } + + switch (m.kind) { +>m.kind : "A" | "B" | "C" | "D" +>m : { kind: "A"; x: string; } | { kind: "B" | "C"; y: number; } | { kind: "D"; } +>kind : "A" | "B" | "C" | "D" + + case "A": +>"A" : string + + return; + case "D": +>"D" : string + + throw new Error(); +>new Error() : Error +>Error : ErrorConstructor + } + m; // { kind: "B" | "C", y: number } +>m : { kind: "B" | "C"; y: number; } +} diff --git a/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.errors.txt b/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.errors.txt new file mode 100644 index 00000000000..80b108bbd66 --- /dev/null +++ b/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions01.ts(2,11): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions01.ts(2,22): error TS2300: Duplicate identifier 'a'. + + +==== tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions01.ts (2 errors) ==== + + let x = <{a: number; a: number}>{}; + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~ +!!! error TS2300: Duplicate identifier 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.js b/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.js new file mode 100644 index 00000000000..03f46ad110a --- /dev/null +++ b/tests/baselines/reference/duplicatePropertiesInTypeAssertions01.js @@ -0,0 +1,12 @@ +//// [duplicatePropertiesInTypeAssertions01.ts] + +let x = <{a: number; a: number}>{}; + +//// [duplicatePropertiesInTypeAssertions01.js] +var x = {}; + + +//// [duplicatePropertiesInTypeAssertions01.d.ts] +declare let x: { + a: number; +}; diff --git a/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.errors.txt b/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.errors.txt new file mode 100644 index 00000000000..eeb9ffa9302 --- /dev/null +++ b/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions02.ts(2,16): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions02.ts(2,27): error TS2300: Duplicate identifier 'a'. + + +==== tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions02.ts (2 errors) ==== + + let x = {} as {a: number; a: number}; + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~ +!!! error TS2300: Duplicate identifier 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.js b/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.js new file mode 100644 index 00000000000..8aa4449595a --- /dev/null +++ b/tests/baselines/reference/duplicatePropertiesInTypeAssertions02.js @@ -0,0 +1,12 @@ +//// [duplicatePropertiesInTypeAssertions02.ts] + +let x = {} as {a: number; a: number}; + +//// [duplicatePropertiesInTypeAssertions02.js] +var x = {}; + + +//// [duplicatePropertiesInTypeAssertions02.d.ts] +declare let x: { + a: number; +}; diff --git a/tests/baselines/reference/emptyTuplesTypeAssertion01.errors.txt b/tests/baselines/reference/emptyTuplesTypeAssertion01.errors.txt new file mode 100644 index 00000000000..4d70873bd74 --- /dev/null +++ b/tests/baselines/reference/emptyTuplesTypeAssertion01.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion01.ts(2,10): error TS1122: A tuple type element list cannot be empty. + + +==== tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion01.ts (1 errors) ==== + + let x = <[]>[]; + ~~ +!!! error TS1122: A tuple type element list cannot be empty. + let y = x[0]; \ No newline at end of file diff --git a/tests/baselines/reference/emptyTuplesTypeAssertion01.js b/tests/baselines/reference/emptyTuplesTypeAssertion01.js new file mode 100644 index 00000000000..6ab1ec82bd5 --- /dev/null +++ b/tests/baselines/reference/emptyTuplesTypeAssertion01.js @@ -0,0 +1,13 @@ +//// [emptyTuplesTypeAssertion01.ts] + +let x = <[]>[]; +let y = x[0]; + +//// [emptyTuplesTypeAssertion01.js] +var x = []; +var y = x[0]; + + +//// [emptyTuplesTypeAssertion01.d.ts] +declare let x: []; +declare let y: never; diff --git a/tests/baselines/reference/emptyTuplesTypeAssertion02.errors.txt b/tests/baselines/reference/emptyTuplesTypeAssertion02.errors.txt new file mode 100644 index 00000000000..0cbc0d7371c --- /dev/null +++ b/tests/baselines/reference/emptyTuplesTypeAssertion02.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion02.ts(2,15): error TS1122: A tuple type element list cannot be empty. + + +==== tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion02.ts (1 errors) ==== + + let x = [] as []; + ~~ +!!! error TS1122: A tuple type element list cannot be empty. + let y = x[0]; \ No newline at end of file diff --git a/tests/baselines/reference/emptyTuplesTypeAssertion02.js b/tests/baselines/reference/emptyTuplesTypeAssertion02.js new file mode 100644 index 00000000000..ad112732cd2 --- /dev/null +++ b/tests/baselines/reference/emptyTuplesTypeAssertion02.js @@ -0,0 +1,13 @@ +//// [emptyTuplesTypeAssertion02.ts] + +let x = [] as []; +let y = x[0]; + +//// [emptyTuplesTypeAssertion02.js] +var x = []; +var y = x[0]; + + +//// [emptyTuplesTypeAssertion02.d.ts] +declare let x: []; +declare let y: never; diff --git a/tests/baselines/reference/exportDefaultAsyncFunction.js b/tests/baselines/reference/exportDefaultAsyncFunction.js new file mode 100644 index 00000000000..a06b41b5e73 --- /dev/null +++ b/tests/baselines/reference/exportDefaultAsyncFunction.js @@ -0,0 +1,18 @@ +//// [exportDefaultAsyncFunction.ts] +export default async function foo(): Promise {} +foo(); + + +//// [exportDefaultAsyncFunction.js] +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments)).next()); + }); +}; +export default function foo() { + return __awaiter(this, void 0, void 0, function* () { }); +} +foo(); diff --git a/tests/baselines/reference/exportDefaultAsyncFunction.symbols b/tests/baselines/reference/exportDefaultAsyncFunction.symbols new file mode 100644 index 00000000000..47178519558 --- /dev/null +++ b/tests/baselines/reference/exportDefaultAsyncFunction.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/exportDefaultAsyncFunction.ts === +export default async function foo(): Promise {} +>foo : Symbol(foo, Decl(exportDefaultAsyncFunction.ts, 0, 0)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + +foo(); +>foo : Symbol(foo, Decl(exportDefaultAsyncFunction.ts, 0, 0)) + diff --git a/tests/baselines/reference/exportDefaultAsyncFunction.types b/tests/baselines/reference/exportDefaultAsyncFunction.types new file mode 100644 index 00000000000..7258c6fcf0c --- /dev/null +++ b/tests/baselines/reference/exportDefaultAsyncFunction.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/exportDefaultAsyncFunction.ts === +export default async function foo(): Promise {} +>foo : () => Promise +>Promise : Promise + +foo(); +>foo() : Promise +>foo : () => Promise + diff --git a/tests/baselines/reference/exportDefaultAsyncFunction2.js b/tests/baselines/reference/exportDefaultAsyncFunction2.js new file mode 100644 index 00000000000..ff242eec6a1 --- /dev/null +++ b/tests/baselines/reference/exportDefaultAsyncFunction2.js @@ -0,0 +1,56 @@ +//// [tests/cases/compiler/exportDefaultAsyncFunction2.ts] //// + +//// [asyncawait.ts] + +export function async(...args: any[]): any { } +export function await(...args: any[]): any { } + +//// [a.ts] +import { async, await } from 'asyncawait'; +export default async(() => await(Promise.resolve(1))); + +//// [b.ts] +export default async () => { return 0; }; + +//// [c.ts] +import { async, await } from 'asyncawait'; +export default async(); + +//// [d.ts] +import { async, await } from 'asyncawait'; + +export default async; + +//// [e.ts] +import { async, await } from 'asyncawait'; + +export default async + +export function foo() { } + +//// [asyncawait.js] +export function async(...args) { } +export function await(...args) { } +//// [a.js] +import { async, await } from 'asyncawait'; +export default async(() => await(Promise.resolve(1))); +//// [b.js] +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments)).next()); + }); +}; +export default () => __awaiter(this, void 0, void 0, function* () { return 0; }); +//// [c.js] +import { async } from 'asyncawait'; +export default async(); +//// [d.js] +import { async } from 'asyncawait'; +export default async; +//// [e.js] +import { async } from 'asyncawait'; +export default async; +export function foo() { } diff --git a/tests/baselines/reference/exportDefaultAsyncFunction2.symbols b/tests/baselines/reference/exportDefaultAsyncFunction2.symbols new file mode 100644 index 00000000000..013d0d7f697 --- /dev/null +++ b/tests/baselines/reference/exportDefaultAsyncFunction2.symbols @@ -0,0 +1,53 @@ +=== tests/cases/compiler/asyncawait.ts === + +export function async(...args: any[]): any { } +>async : Symbol(async, Decl(asyncawait.ts, 0, 0)) +>T : Symbol(T, Decl(asyncawait.ts, 1, 22)) +>args : Symbol(args, Decl(asyncawait.ts, 1, 25)) + +export function await(...args: any[]): any { } +>await : Symbol(await, Decl(asyncawait.ts, 1, 49)) +>args : Symbol(args, Decl(asyncawait.ts, 2, 22)) + +=== tests/cases/compiler/a.ts === +import { async, await } from 'asyncawait'; +>async : Symbol(async, Decl(a.ts, 0, 8)) +>await : Symbol(await, Decl(a.ts, 0, 15)) + +export default async(() => await(Promise.resolve(1))); +>async : Symbol(async, Decl(a.ts, 0, 8)) +>await : Symbol(await, Decl(a.ts, 0, 15)) +>Promise.resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>resolve : Symbol(PromiseConstructor.resolve, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) + +=== tests/cases/compiler/b.ts === +export default async () => { return 0; }; +No type information for this code. +No type information for this code.=== tests/cases/compiler/c.ts === +import { async, await } from 'asyncawait'; +>async : Symbol(async, Decl(c.ts, 0, 8)) +>await : Symbol(await, Decl(c.ts, 0, 15)) + +export default async(); +>async : Symbol(async, Decl(c.ts, 0, 8)) + +=== tests/cases/compiler/d.ts === +import { async, await } from 'asyncawait'; +>async : Symbol(async, Decl(d.ts, 0, 8)) +>await : Symbol(await, Decl(d.ts, 0, 15)) + +export default async; +>async : Symbol(async, Decl(d.ts, 0, 8)) + +=== tests/cases/compiler/e.ts === +import { async, await } from 'asyncawait'; +>async : Symbol(async, Decl(e.ts, 0, 8)) +>await : Symbol(await, Decl(e.ts, 0, 15)) + +export default async +>async : Symbol(async, Decl(e.ts, 0, 8)) + +export function foo() { } +>foo : Symbol(foo, Decl(e.ts, 2, 20)) + diff --git a/tests/baselines/reference/exportDefaultAsyncFunction2.types b/tests/baselines/reference/exportDefaultAsyncFunction2.types new file mode 100644 index 00000000000..ae66620159d --- /dev/null +++ b/tests/baselines/reference/exportDefaultAsyncFunction2.types @@ -0,0 +1,61 @@ +=== tests/cases/compiler/asyncawait.ts === + +export function async(...args: any[]): any { } +>async : (...args: any[]) => any +>T : T +>args : any[] + +export function await(...args: any[]): any { } +>await : (...args: any[]) => any +>args : any[] + +=== tests/cases/compiler/a.ts === +import { async, await } from 'asyncawait'; +>async : (...args: any[]) => any +>await : (...args: any[]) => any + +export default async(() => await(Promise.resolve(1))); +>async(() => await(Promise.resolve(1))) : any +>async : (...args: any[]) => any +>() => await(Promise.resolve(1)) : () => any +>await(Promise.resolve(1)) : any +>await : (...args: any[]) => any +>Promise.resolve(1) : Promise +>Promise.resolve : { (value: T | PromiseLike): Promise; (): Promise; } +>Promise : PromiseConstructor +>resolve : { (value: T | PromiseLike): Promise; (): Promise; } +>1 : number + +=== tests/cases/compiler/b.ts === +export default async () => { return 0; }; +>async () => { return 0; } : () => Promise +>0 : number + +=== tests/cases/compiler/c.ts === +import { async, await } from 'asyncawait'; +>async : (...args: any[]) => any +>await : (...args: any[]) => any + +export default async(); +>async() : any +>async : (...args: any[]) => any + +=== tests/cases/compiler/d.ts === +import { async, await } from 'asyncawait'; +>async : (...args: any[]) => any +>await : (...args: any[]) => any + +export default async; +>async : (...args: any[]) => any + +=== tests/cases/compiler/e.ts === +import { async, await } from 'asyncawait'; +>async : (...args: any[]) => any +>await : (...args: any[]) => any + +export default async +>async : (...args: any[]) => any + +export function foo() { } +>foo : () => void + diff --git a/tests/baselines/reference/exportStarFromEmptyModule.errors.txt b/tests/baselines/reference/exportStarFromEmptyModule.errors.txt index 9d781da2707..8ca80fae408 100644 --- a/tests/baselines/reference/exportStarFromEmptyModule.errors.txt +++ b/tests/baselines/reference/exportStarFromEmptyModule.errors.txt @@ -14,7 +14,7 @@ tests/cases/compiler/exportStarFromEmptyModule_module4.ts(4,5): error TS2339: Pr ==== tests/cases/compiler/exportStarFromEmptyModule_module3.ts (1 errors) ==== export * from "./exportStarFromEmptyModule_module2"; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2306: File 'exportStarFromEmptyModule_module2.ts' is not a module. +!!! error TS2306: File 'tests/cases/compiler/exportStarFromEmptyModule_module2.ts' is not a module. export * from "./exportStarFromEmptyModule_module1"; export class A { diff --git a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.errors.txt b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.errors.txt index e590ad42a7d..b6767a3b938 100644 --- a/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.errors.txt +++ b/tests/baselines/reference/genericTypeReferenceWithoutTypeArgument2.errors.txt @@ -13,7 +13,7 @@ tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenc tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(18,23): error TS2314: Generic type 'I' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(18,27): error TS2314: Generic type 'I' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(18,38): error TS2314: Generic type 'I' requires 1 type argument(s). -tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(20,17): error TS2304: Cannot find name 'I'. +tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(20,17): error TS2689: Cannot extend an interface 'I'. Did you mean 'implements'? tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(23,21): error TS2314: Generic type 'I' requires 1 type argument(s). tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(29,18): error TS2304: Cannot find name 'M'. tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenceWithoutTypeArgument2.ts(30,24): error TS2314: Generic type 'E' requires 1 type argument(s). @@ -76,7 +76,7 @@ tests/cases/conformance/types/specifyingTypes/typeReferences/genericTypeReferenc class D extends I { ~ -!!! error TS2304: Cannot find name 'I'. +!!! error TS2689: Cannot extend an interface 'I'. Did you mean 'implements'? } interface U extends I {} diff --git a/tests/baselines/reference/importNonExternalModule.errors.txt b/tests/baselines/reference/importNonExternalModule.errors.txt index fb8294c5c03..96f8959565c 100644 --- a/tests/baselines/reference/importNonExternalModule.errors.txt +++ b/tests/baselines/reference/importNonExternalModule.errors.txt @@ -4,7 +4,7 @@ tests/cases/conformance/externalModules/foo_1.ts(1,22): error TS2306: File 'test ==== tests/cases/conformance/externalModules/foo_1.ts (1 errors) ==== import foo = require("./foo_0"); ~~~~~~~~~ -!!! error TS2306: File 'foo_0.ts' is not a module. +!!! error TS2306: File 'tests/cases/conformance/externalModules/foo_0.ts' is not a module. // Import should fail. foo_0 not an external module if(foo.answer === 42){ diff --git a/tests/baselines/reference/inferParameterWithMethodCallInitializer.symbols b/tests/baselines/reference/inferParameterWithMethodCallInitializer.symbols index e0734a4b39b..ce098f6e243 100644 --- a/tests/baselines/reference/inferParameterWithMethodCallInitializer.symbols +++ b/tests/baselines/reference/inferParameterWithMethodCallInitializer.symbols @@ -30,7 +30,7 @@ function weird(this: Example, a = this.getNumber()) { >Example : Symbol(Example, Decl(inferParameterWithMethodCallInitializer.ts, 2, 1)) >a : Symbol(a, Decl(inferParameterWithMethodCallInitializer.ts, 11, 29)) >this.getNumber : Symbol(Example.getNumber, Decl(inferParameterWithMethodCallInitializer.ts, 3, 15)) ->this : Symbol(Example, Decl(inferParameterWithMethodCallInitializer.ts, 2, 1)) +>this : Symbol(this, Decl(inferParameterWithMethodCallInitializer.ts, 11, 15)) >getNumber : Symbol(Example.getNumber, Decl(inferParameterWithMethodCallInitializer.ts, 3, 15)) return a; @@ -45,7 +45,7 @@ class Weird { >Example : Symbol(Example, Decl(inferParameterWithMethodCallInitializer.ts, 2, 1)) >a : Symbol(a, Decl(inferParameterWithMethodCallInitializer.ts, 15, 30)) >this.getNumber : Symbol(Example.getNumber, Decl(inferParameterWithMethodCallInitializer.ts, 3, 15)) ->this : Symbol(Example, Decl(inferParameterWithMethodCallInitializer.ts, 2, 1)) +>this : Symbol(this, Decl(inferParameterWithMethodCallInitializer.ts, 15, 16)) >getNumber : Symbol(Example.getNumber, Decl(inferParameterWithMethodCallInitializer.ts, 3, 15)) return a; diff --git a/tests/baselines/reference/inferenceLimit.symbols b/tests/baselines/reference/inferenceLimit.symbols index bedea9ce1f0..4601de27b51 100644 --- a/tests/baselines/reference/inferenceLimit.symbols +++ b/tests/baselines/reference/inferenceLimit.symbols @@ -37,14 +37,14 @@ export class BrokenClass { >reject : Symbol(reject, Decl(file1.ts, 13, 34)) this.doStuff(order.id) ->this.doStuff(order.id) .then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>this.doStuff(order.id) .then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) >this.doStuff : Symbol(BrokenClass.doStuff, Decl(file1.ts, 27, 3)) >this : Symbol(BrokenClass, Decl(file1.ts, 1, 39)) >doStuff : Symbol(BrokenClass.doStuff, Decl(file1.ts, 27, 3)) >order : Symbol(order, Decl(file1.ts, 12, 25)) .then((items) => { ->then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) >items : Symbol(items, Decl(file1.ts, 15, 17)) order.items = items; @@ -60,17 +60,17 @@ export class BrokenClass { }; return Promise.all(result.map(populateItems)) ->Promise.all(result.map(populateItems)) .then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) ->Promise.all : Symbol(PromiseConstructor.all, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Promise.all(result.map(populateItems)) .then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise.all : Symbol(PromiseConstructor.all, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->all : Symbol(PromiseConstructor.all, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>all : Symbol(PromiseConstructor.all, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >result.map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) >result : Symbol(result, Decl(file1.ts, 10, 7)) >map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) >populateItems : Symbol(populateItems, Decl(file1.ts, 12, 7)) .then((orders: Array) => { ->then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) >orders : Symbol(orders, Decl(file1.ts, 23, 13)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) >MyModule : Symbol(MyModule, Decl(file1.ts, 1, 6)) diff --git a/tests/baselines/reference/inferenceLimit.types b/tests/baselines/reference/inferenceLimit.types index 58f9b1e4ae0..37b51e49644 100644 --- a/tests/baselines/reference/inferenceLimit.types +++ b/tests/baselines/reference/inferenceLimit.types @@ -46,7 +46,7 @@ export class BrokenClass { this.doStuff(order.id) >this.doStuff(order.id) .then((items) => { order.items = items; resolve(order); }) : Promise ->this.doStuff(order.id) .then : { (onfulfilled?: (value: void) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: void) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>this.doStuff(order.id) .then : { (onfulfilled: (value: void) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: void) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: void) => TResult | PromiseLike): Promise; (): Promise; } >this.doStuff(order.id) : Promise >this.doStuff : (id: number) => Promise >this : this @@ -56,7 +56,7 @@ export class BrokenClass { >id : any .then((items) => { ->then : { (onfulfilled?: (value: void) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: void) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>then : { (onfulfilled: (value: void) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: void) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: void) => TResult | PromiseLike): Promise; (): Promise; } >(items) => { order.items = items; resolve(order); } : (items: void) => void >items : void @@ -78,11 +78,11 @@ export class BrokenClass { return Promise.all(result.map(populateItems)) >Promise.all(result.map(populateItems)) .then((orders: Array) => { resolve(orders); }) : Promise ->Promise.all(result.map(populateItems)) .then : { (onfulfilled?: (value: {}[]) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: {}[]) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>Promise.all(result.map(populateItems)) .then : { (onfulfilled: (value: {}[]) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: {}[]) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: {}[]) => TResult | PromiseLike): Promise; (): Promise<{}[]>; } >Promise.all(result.map(populateItems)) : Promise<{}[]> ->Promise.all : { (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike]): Promise<[T1, T2, T3, T4]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; (values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; (values: Iterable>): Promise; } +>Promise.all : { (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike]): Promise<[T1, T2, T3, T4]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; (values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; (values: (T | PromiseLike)[]): Promise; (values: Iterable>): Promise; } >Promise : PromiseConstructor ->all : { (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike]): Promise<[T1, T2, T3, T4]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; (values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; (values: Iterable>): Promise; } +>all : { (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike, T10 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike, T9 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike, T8 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike, T7 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike, T6 | PromiseLike]): Promise<[T1, T2, T3, T4, T5, T6]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike]): Promise<[T1, T2, T3, T4, T5]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike]): Promise<[T1, T2, T3, T4]>; (values: [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]): Promise<[T1, T2, T3]>; (values: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; (values: (T | PromiseLike)[]): Promise; (values: Iterable>): Promise; } >result.map(populateItems) : Promise<{}>[] >result.map : (callbackfn: (value: MyModule.MyModel, index: number, array: MyModule.MyModel[]) => U, thisArg?: any) => U[] >result : MyModule.MyModel[] @@ -90,7 +90,7 @@ export class BrokenClass { >populateItems : (order: any) => Promise<{}> .then((orders: Array) => { ->then : { (onfulfilled?: (value: {}[]) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: {}[]) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>then : { (onfulfilled: (value: {}[]) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: {}[]) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: {}[]) => TResult | PromiseLike): Promise; (): Promise<{}[]>; } >(orders: Array) => { resolve(orders); } : (orders: MyModule.MyModel[]) => void >orders : MyModule.MyModel[] >Array : T[] diff --git a/tests/baselines/reference/intersectionTypeReadonly.errors.txt b/tests/baselines/reference/intersectionTypeReadonly.errors.txt new file mode 100644 index 00000000000..d9e22fd2223 --- /dev/null +++ b/tests/baselines/reference/intersectionTypeReadonly.errors.txt @@ -0,0 +1,44 @@ +tests/cases/conformance/types/intersection/intersectionTypeReadonly.ts(17,1): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. +tests/cases/conformance/types/intersection/intersectionTypeReadonly.ts(19,1): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. +tests/cases/conformance/types/intersection/intersectionTypeReadonly.ts(21,1): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. +tests/cases/conformance/types/intersection/intersectionTypeReadonly.ts(23,1): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. +tests/cases/conformance/types/intersection/intersectionTypeReadonly.ts(25,1): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + + +==== tests/cases/conformance/types/intersection/intersectionTypeReadonly.ts (5 errors) ==== + interface Base { + readonly value: number; + } + interface Identical { + readonly value: number; + } + interface Mutable { + value: number; + } + interface DifferentType { + readonly value: string; + } + interface DifferentName { + readonly other: number; + } + let base: Base; + base.value = 12 // error, lhs can't be a readonly property + ~~~~~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + let identical: Base & Identical; + identical.value = 12; // error, lhs can't be a readonly property + ~~~~~~~~~~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + let mutable: Base & Mutable; + mutable.value = 12; // error, lhs can't be a readonly property + ~~~~~~~~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + let differentType: Base & DifferentType; + differentType.value = 12; // error, lhs can't be a readonly property + ~~~~~~~~~~~~~~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + let differentName: Base & DifferentName; + differentName.value = 12; // error, property 'value' doesn't exist + ~~~~~~~~~~~~~~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + \ No newline at end of file diff --git a/tests/baselines/reference/intersectionTypeReadonly.js b/tests/baselines/reference/intersectionTypeReadonly.js new file mode 100644 index 00000000000..7399125bbb1 --- /dev/null +++ b/tests/baselines/reference/intersectionTypeReadonly.js @@ -0,0 +1,39 @@ +//// [intersectionTypeReadonly.ts] +interface Base { + readonly value: number; +} +interface Identical { + readonly value: number; +} +interface Mutable { + value: number; +} +interface DifferentType { + readonly value: string; +} +interface DifferentName { + readonly other: number; +} +let base: Base; +base.value = 12 // error, lhs can't be a readonly property +let identical: Base & Identical; +identical.value = 12; // error, lhs can't be a readonly property +let mutable: Base & Mutable; +mutable.value = 12; // error, lhs can't be a readonly property +let differentType: Base & DifferentType; +differentType.value = 12; // error, lhs can't be a readonly property +let differentName: Base & DifferentName; +differentName.value = 12; // error, property 'value' doesn't exist + + +//// [intersectionTypeReadonly.js] +var base; +base.value = 12; // error, lhs can't be a readonly property +var identical; +identical.value = 12; // error, lhs can't be a readonly property +var mutable; +mutable.value = 12; // error, lhs can't be a readonly property +var differentType; +differentType.value = 12; // error, lhs can't be a readonly property +var differentName; +differentName.value = 12; // error, property 'value' doesn't exist diff --git a/tests/baselines/reference/invalidTripleSlashReference.errors.txt b/tests/baselines/reference/invalidTripleSlashReference.errors.txt index 40d75004a99..1de5ecaaae1 100644 --- a/tests/baselines/reference/invalidTripleSlashReference.errors.txt +++ b/tests/baselines/reference/invalidTripleSlashReference.errors.txt @@ -5,10 +5,10 @@ tests/cases/compiler/invalidTripleSlashReference.ts(2,1): error TS6053: File 'te ==== tests/cases/compiler/invalidTripleSlashReference.ts (2 errors) ==== /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'filedoesnotexist.ts' not found. +!!! error TS6053: File 'tests/cases/compiler/filedoesnotexist.ts' not found. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'otherdoesnotexist.d.ts' not found. +!!! error TS6053: File 'tests/cases/compiler/otherdoesnotexist.d.ts' not found. // this test doesn't actually give the errors you want due to the way the compiler reports errors var x = 1; \ No newline at end of file diff --git a/tests/baselines/reference/jsFileClassSelfReferencedProperty.symbols b/tests/baselines/reference/jsFileClassSelfReferencedProperty.symbols new file mode 100644 index 00000000000..2d9626897bf --- /dev/null +++ b/tests/baselines/reference/jsFileClassSelfReferencedProperty.symbols @@ -0,0 +1,17 @@ +=== tests/cases/compiler/foo.js === + +export class StackOverflowTest { +>StackOverflowTest : Symbol(StackOverflowTest, Decl(foo.js, 0, 0)) + + constructor () { + this.testStackOverflow = this.testStackOverflow.bind(this) +>this.testStackOverflow : Symbol(StackOverflowTest.testStackOverflow, Decl(foo.js, 2, 18)) +>this : Symbol(StackOverflowTest, Decl(foo.js, 0, 0)) +>testStackOverflow : Symbol(StackOverflowTest.testStackOverflow, Decl(foo.js, 2, 18)) +>this.testStackOverflow : Symbol(StackOverflowTest.testStackOverflow, Decl(foo.js, 2, 18)) +>this : Symbol(StackOverflowTest, Decl(foo.js, 0, 0)) +>testStackOverflow : Symbol(StackOverflowTest.testStackOverflow, Decl(foo.js, 2, 18)) +>this : Symbol(StackOverflowTest, Decl(foo.js, 0, 0)) + } +} + diff --git a/tests/baselines/reference/jsFileClassSelfReferencedProperty.types b/tests/baselines/reference/jsFileClassSelfReferencedProperty.types new file mode 100644 index 00000000000..44344ac1472 --- /dev/null +++ b/tests/baselines/reference/jsFileClassSelfReferencedProperty.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/foo.js === + +export class StackOverflowTest { +>StackOverflowTest : StackOverflowTest + + constructor () { + this.testStackOverflow = this.testStackOverflow.bind(this) +>this.testStackOverflow = this.testStackOverflow.bind(this) : any +>this.testStackOverflow : any +>this : this +>testStackOverflow : any +>this.testStackOverflow.bind(this) : any +>this.testStackOverflow.bind : any +>this.testStackOverflow : any +>this : this +>testStackOverflow : any +>bind : any +>this : this + } +} + diff --git a/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt b/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt index 21390cc2955..b88c73e0439 100644 --- a/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt +++ b/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt @@ -1,10 +1,13 @@ error TS5053: Option 'allowJs' cannot be specified with option 'declaration'. +tests/cases/compiler/a.ts(2,1): error TS2448: Block-scoped variable 'a' used before its declaration. !!! error TS5053: Option 'allowJs' cannot be specified with option 'declaration'. -==== tests/cases/compiler/a.ts (0 errors) ==== +==== tests/cases/compiler/a.ts (1 errors) ==== let b = 30; a = 10; + ~ +!!! error TS2448: Block-scoped variable 'a' used before its declaration. ==== tests/cases/compiler/b.js (0 errors) ==== let a = 10; b = 30; diff --git a/tests/baselines/reference/jsFileCompilationPropertySyntaxOfClass.errors.txt b/tests/baselines/reference/jsFileCompilationPropertySyntaxOfClass.errors.txt deleted file mode 100644 index fd5ea666459..00000000000 --- a/tests/baselines/reference/jsFileCompilationPropertySyntaxOfClass.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -error TS5055: Cannot write file 'tests/cases/compiler/a.js' because it would overwrite input file. -tests/cases/compiler/a.js(1,11): error TS8014: 'property declarations' can only be used in a .ts file. - - -!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' because it would overwrite input file. -==== tests/cases/compiler/a.js (1 errors) ==== - class C { v } - ~ -!!! error TS8014: 'property declarations' can only be used in a .ts file. \ No newline at end of file diff --git a/tests/baselines/reference/jsFileCompilationWithDeclarationEmitPathSameAsInput.errors.txt b/tests/baselines/reference/jsFileCompilationWithDeclarationEmitPathSameAsInput.errors.txt index 84900bccc88..9e9c2adb0ef 100644 --- a/tests/baselines/reference/jsFileCompilationWithDeclarationEmitPathSameAsInput.errors.txt +++ b/tests/baselines/reference/jsFileCompilationWithDeclarationEmitPathSameAsInput.errors.txt @@ -1,7 +1,7 @@ error TS5055: Cannot write file 'tests/cases/compiler/a.d.ts' because it would overwrite input file. -!!! error TS5055: Cannot write file 'a.d.ts' because it would overwrite input file. +!!! error TS5055: Cannot write file 'tests/cases/compiler/a.d.ts' because it would overwrite input file. ==== tests/cases/compiler/a.ts (0 errors) ==== class c { } diff --git a/tests/baselines/reference/jsFileCompilationWithOutDeclarationFileNameSameAsInputJsFile.errors.txt b/tests/baselines/reference/jsFileCompilationWithOutDeclarationFileNameSameAsInputJsFile.errors.txt index 826f906538f..10c7b8c90dd 100644 --- a/tests/baselines/reference/jsFileCompilationWithOutDeclarationFileNameSameAsInputJsFile.errors.txt +++ b/tests/baselines/reference/jsFileCompilationWithOutDeclarationFileNameSameAsInputJsFile.errors.txt @@ -1,7 +1,7 @@ error TS5055: Cannot write file 'tests/cases/compiler/b.d.ts' because it would overwrite input file. -!!! error TS5055: Cannot write file 'b.d.ts' because it would overwrite input file. +!!! error TS5055: Cannot write file 'tests/cases/compiler/b.d.ts' because it would overwrite input file. ==== tests/cases/compiler/a.ts (0 errors) ==== class c { } diff --git a/tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt new file mode 100644 index 00000000000..5b8633312d9 --- /dev/null +++ b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/file1.ts(2,1): error TS2448: Block-scoped variable 'l' used before its declaration. + + +==== tests/cases/compiler/file1.ts (1 errors) ==== + + l; + ~ +!!! error TS2448: Block-scoped variable 'l' used before its declaration. + +==== tests/cases/compiler/file2.ts (0 errors) ==== + const l = 0; \ No newline at end of file diff --git a/tests/baselines/reference/letDeclarations-useBeforeDefinition2.symbols b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.symbols deleted file mode 100644 index c5a067ede4d..00000000000 --- a/tests/baselines/reference/letDeclarations-useBeforeDefinition2.symbols +++ /dev/null @@ -1,9 +0,0 @@ -=== tests/cases/compiler/file1.ts === - -l; ->l : Symbol(l, Decl(file2.ts, 0, 5)) - -=== tests/cases/compiler/file2.ts === -const l = 0; ->l : Symbol(l, Decl(file2.ts, 0, 5)) - diff --git a/tests/baselines/reference/letDeclarations-useBeforeDefinition2.types b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.types deleted file mode 100644 index 793a7a78ba7..00000000000 --- a/tests/baselines/reference/letDeclarations-useBeforeDefinition2.types +++ /dev/null @@ -1,10 +0,0 @@ -=== tests/cases/compiler/file1.ts === - -l; ->l : number - -=== tests/cases/compiler/file2.ts === -const l = 0; ->l : number ->0 : number - diff --git a/tests/baselines/reference/library-reference-5.errors.txt b/tests/baselines/reference/library-reference-5.errors.txt index ea571cad1a3..a3729bc3a99 100644 --- a/tests/baselines/reference/library-reference-5.errors.txt +++ b/tests/baselines/reference/library-reference-5.errors.txt @@ -18,7 +18,7 @@ ==== /node_modules/bar/index.d.ts (1 errors) ==== /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! message TS4090: Conflicting library definitions for 'alpha' found at 'index.d.ts' and 'index.d.ts'. Copy the correct file to the 'typings' folder to resolve this conflict. +!!! message TS4090: Conflicting library definitions for 'alpha' found at '/node_modules/bar/node_modules/alpha/index.d.ts' and '/node_modules/foo/node_modules/alpha/index.d.ts'. Copy the correct file to the 'typings' folder to resolve this conflict. declare var bar: any; ==== /node_modules/bar/node_modules/alpha/index.d.ts (0 errors) ==== diff --git a/tests/baselines/reference/logicalAndOperatorStrictMode.types b/tests/baselines/reference/logicalAndOperatorStrictMode.types index ca225d4561a..a824af2f811 100644 --- a/tests/baselines/reference/logicalAndOperatorStrictMode.types +++ b/tests/baselines/reference/logicalAndOperatorStrictMode.types @@ -86,8 +86,8 @@ const a8 = a && z; >z : string | number | undefined const s1 = s && a; ->s1 : number[] | string ->s && a : number[] | string +>s1 : number[] +>s && a : number[] >s : string >a : number[] @@ -98,32 +98,32 @@ const s2 = s && s; >s : string const s3 = s && x; ->s3 : number | string ->s && x : number | string +>s3 : number +>s && x : number >s : string >x : number const s4 = s && b; ->s4 : boolean | string ->s && b : boolean | string +>s4 : boolean +>s && b : boolean >s : string >b : boolean const s5 = s && v; ->s5 : void | string ->s && v : void | string +>s5 : void +>s && v : void >s : string >v : void const s6 = s && u; ->s6 : string | undefined ->s && u : string | undefined +>s6 : undefined +>s && u : undefined >s : string >u : undefined const s7 = s && n; ->s7 : string | null ->s && n : string | null +>s7 : null +>s && n : null >s : string >n : null @@ -134,14 +134,14 @@ const s8 = s && z; >z : string | number | undefined const x1 = x && a; ->x1 : number[] | number ->x && a : number[] | number +>x1 : number[] +>x && a : number[] >x : number >a : number[] const x2 = x && s; ->x2 : string | number ->x && s : string | number +>x2 : string +>x && s : string >x : number >s : string @@ -152,26 +152,26 @@ const x3 = x && x; >x : number const x4 = x && b; ->x4 : boolean | number ->x && b : boolean | number +>x4 : boolean +>x && b : boolean >x : number >b : boolean const x5 = x && v; ->x5 : void | number ->x && v : void | number +>x5 : void +>x && v : void >x : number >v : void const x6 = x && u; ->x6 : number | undefined ->x && u : number | undefined +>x6 : undefined +>x && u : undefined >x : number >u : undefined const x7 = x && n; ->x7 : number | null ->x && n : number | null +>x7 : null +>x && n : null >x : number >n : null @@ -182,20 +182,20 @@ const x8 = x && z; >z : string | number | undefined const b1 = b && a; ->b1 : number[] | boolean ->b && a : number[] | boolean +>b1 : number[] +>b && a : number[] >b : boolean >a : number[] const b2 = b && s; ->b2 : string | boolean ->b && s : string | boolean +>b2 : string +>b && s : string >b : boolean >s : string const b3 = b && x; ->b3 : number | boolean ->b && x : number | boolean +>b3 : number +>b && x : number >b : boolean >x : number @@ -206,26 +206,26 @@ const b4 = b && b; >b : boolean const b5 = b && v; ->b5 : void | boolean ->b && v : void | boolean +>b5 : void +>b && v : void >b : boolean >v : void const b6 = b && u; ->b6 : boolean | undefined ->b && u : boolean | undefined +>b6 : undefined +>b && u : undefined >b : boolean >u : undefined const b7 = b && n; ->b7 : boolean | null ->b && n : boolean | null +>b7 : null +>b && n : null >b : boolean >n : null const b8 = b && z; ->b8 : string | number | boolean | undefined ->b && z : string | number | boolean | undefined +>b8 : string | number | undefined +>b && z : string | number | undefined >b : boolean >z : string | number | undefined @@ -374,44 +374,44 @@ const n8 = n && z; >z : string | number | undefined const z1 = z && a; ->z1 : number[] | string | number | undefined ->z && a : number[] | string | number | undefined +>z1 : number[] | undefined +>z && a : number[] | undefined >z : string | number | undefined >a : number[] const z2 = z && s; ->z2 : string | number | undefined ->z && s : string | number | undefined +>z2 : string | undefined +>z && s : string | undefined >z : string | number | undefined >s : string const z3 = z && x; ->z3 : number | string | undefined ->z && x : number | string | undefined +>z3 : number | undefined +>z && x : number | undefined >z : string | number | undefined >x : number const z4 = z && b; ->z4 : boolean | string | number | undefined ->z && b : boolean | string | number | undefined +>z4 : boolean | undefined +>z && b : boolean | undefined >z : string | number | undefined >b : boolean const z5 = z && v; ->z5 : void | string | number ->z && v : void | string | number +>z5 : void +>z && v : void >z : string | number | undefined >v : void const z6 = z && u; ->z6 : string | number | undefined ->z && u : string | number | undefined +>z6 : undefined +>z && u : undefined >z : string | number | undefined >u : undefined const z7 = z && n; ->z7 : string | number | null | undefined ->z && n : string | number | null | undefined +>z7 : null | undefined +>z && n : null | undefined >z : string | number | undefined >n : null diff --git a/tests/baselines/reference/methodsReturningThis.js b/tests/baselines/reference/methodsReturningThis.js new file mode 100644 index 00000000000..b0ebd84770d --- /dev/null +++ b/tests/baselines/reference/methodsReturningThis.js @@ -0,0 +1,36 @@ +//// [input.js] +function Class() +{ +} + +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; + +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +Class.prototype.m2 = function (x, y) { return this; }; +Class.prototype.m3 = function (x, y) { return this; }; +Class.prototype.m4 = function (angle) { return this; }; +Class.prototype.m5 = function (matrix) { return this; }; +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +Class.prototype.m7 = function(matrix) { return this; }; +Class.prototype.m8 = function() { return this; }; +Class.prototype.m9 = function () { return this; }; + + + +//// [output.js] +function Class() { +} +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +Class.prototype.m2 = function (x, y) { return this; }; +Class.prototype.m3 = function (x, y) { return this; }; +Class.prototype.m4 = function (angle) { return this; }; +Class.prototype.m5 = function (matrix) { return this; }; +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +Class.prototype.m7 = function (matrix) { return this; }; +Class.prototype.m8 = function () { return this; }; +Class.prototype.m9 = function () { return this; }; diff --git a/tests/baselines/reference/methodsReturningThis.symbols b/tests/baselines/reference/methodsReturningThis.symbols new file mode 100644 index 00000000000..eccb1a64f89 --- /dev/null +++ b/tests/baselines/reference/methodsReturningThis.symbols @@ -0,0 +1,101 @@ +=== tests/cases/conformance/salsa/input.js === +function Class() +>Class : Symbol(Class, Decl(input.js, 0, 0)) +{ +} + +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; +>Class.prototype : Symbol(Class.containsError, Decl(input.js, 2, 1)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>containsError : Symbol(Class.containsError, Decl(input.js, 2, 1)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +>Class.prototype : Symbol(Class.m1, Decl(input.js, 5, 72)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m1 : Symbol(Class.m1, Decl(input.js, 5, 72)) +>a : Symbol(a, Decl(input.js, 8, 31)) +>b : Symbol(b, Decl(input.js, 8, 33)) +>c : Symbol(c, Decl(input.js, 8, 36)) +>d : Symbol(d, Decl(input.js, 8, 39)) +>tx : Symbol(tx, Decl(input.js, 8, 42)) +>ty : Symbol(ty, Decl(input.js, 8, 46)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m2 = function (x, y) { return this; }; +>Class.prototype : Symbol(Class.m2, Decl(input.js, 8, 68)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m2 : Symbol(Class.m2, Decl(input.js, 8, 68)) +>x : Symbol(x, Decl(input.js, 9, 31)) +>y : Symbol(y, Decl(input.js, 9, 33)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m3 = function (x, y) { return this; }; +>Class.prototype : Symbol(Class.m3, Decl(input.js, 9, 54)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m3 : Symbol(Class.m3, Decl(input.js, 9, 54)) +>x : Symbol(x, Decl(input.js, 10, 31)) +>y : Symbol(y, Decl(input.js, 10, 33)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m4 = function (angle) { return this; }; +>Class.prototype : Symbol(Class.m4, Decl(input.js, 10, 54)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m4 : Symbol(Class.m4, Decl(input.js, 10, 54)) +>angle : Symbol(angle, Decl(input.js, 11, 31)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m5 = function (matrix) { return this; }; +>Class.prototype : Symbol(Class.m5, Decl(input.js, 11, 55)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m5 : Symbol(Class.m5, Decl(input.js, 11, 55)) +>matrix : Symbol(matrix, Decl(input.js, 12, 31)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +>Class.prototype : Symbol(Class.m6, Decl(input.js, 12, 56)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m6 : Symbol(Class.m6, Decl(input.js, 12, 56)) +>x : Symbol(x, Decl(input.js, 13, 31)) +>y : Symbol(y, Decl(input.js, 13, 33)) +>pivotX : Symbol(pivotX, Decl(input.js, 13, 36)) +>pivotY : Symbol(pivotY, Decl(input.js, 13, 44)) +>scaleX : Symbol(scaleX, Decl(input.js, 13, 52)) +>scaleY : Symbol(scaleY, Decl(input.js, 13, 60)) +>rotation : Symbol(rotation, Decl(input.js, 13, 68)) +>skewX : Symbol(skewX, Decl(input.js, 13, 78)) +>skewY : Symbol(skewY, Decl(input.js, 13, 85)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m7 = function(matrix) { return this; }; +>Class.prototype : Symbol(Class.m7, Decl(input.js, 13, 110)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m7 : Symbol(Class.m7, Decl(input.js, 13, 110)) +>matrix : Symbol(matrix, Decl(input.js, 14, 30)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m8 = function() { return this; }; +>Class.prototype : Symbol(Class.m8, Decl(input.js, 14, 55)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m8 : Symbol(Class.m8, Decl(input.js, 14, 55)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m9 = function () { return this; }; +>Class.prototype : Symbol(Class.m9, Decl(input.js, 15, 49)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m9 : Symbol(Class.m9, Decl(input.js, 15, 49)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + + diff --git a/tests/baselines/reference/methodsReturningThis.types b/tests/baselines/reference/methodsReturningThis.types new file mode 100644 index 00000000000..5bcaa992a71 --- /dev/null +++ b/tests/baselines/reference/methodsReturningThis.types @@ -0,0 +1,133 @@ +=== tests/cases/conformance/salsa/input.js === +function Class() +>Class : () => void +{ +} + +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; +>Class.prototype.containsError = function () { return this.notPresent; } : () => any +>Class.prototype.containsError : any +>Class.prototype : any +>Class : () => void +>prototype : any +>containsError : any +>function () { return this.notPresent; } : () => any +>this.notPresent : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>notPresent : any + +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +>Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; } : (a: any, b: any, c: any, d: any, tx: any, ty: any) => { containsError: () => any; m1: any; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m1 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m1 : any +>function (a, b, c, d, tx, ty) { return this; } : (a: any, b: any, c: any, d: any, tx: any, ty: any) => { containsError: () => any; m1: any; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>a : any +>b : any +>c : any +>d : any +>tx : any +>ty : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m2 = function (x, y) { return this; }; +>Class.prototype.m2 = function (x, y) { return this; } : (x: any, y: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: any; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m2 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m2 : any +>function (x, y) { return this; } : (x: any, y: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: any; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>x : any +>y : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m3 = function (x, y) { return this; }; +>Class.prototype.m3 = function (x, y) { return this; } : (x: any, y: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: any; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m3 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m3 : any +>function (x, y) { return this; } : (x: any, y: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: any; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>x : any +>y : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m4 = function (angle) { return this; }; +>Class.prototype.m4 = function (angle) { return this; } : (angle: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: any; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m4 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m4 : any +>function (angle) { return this; } : (angle: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: any; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>angle : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m5 = function (matrix) { return this; }; +>Class.prototype.m5 = function (matrix) { return this; } : (matrix: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: any; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m5 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m5 : any +>function (matrix) { return this; } : (matrix: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: any; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>matrix : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +>Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; } : (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: any; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m6 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m6 : any +>function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; } : (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: any; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>x : any +>y : any +>pivotX : any +>pivotY : any +>scaleX : any +>scaleY : any +>rotation : any +>skewX : any +>skewY : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m7 = function(matrix) { return this; }; +>Class.prototype.m7 = function(matrix) { return this; } : (matrix: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: any; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m7 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m7 : any +>function(matrix) { return this; } : (matrix: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: any; m8: () => typeof Class; m9: () => typeof Class; } +>matrix : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m8 = function() { return this; }; +>Class.prototype.m8 = function() { return this; } : () => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: any; m9: () => typeof Class; } +>Class.prototype.m8 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m8 : any +>function() { return this; } : () => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: any; m9: () => typeof Class; } +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m9 = function () { return this; }; +>Class.prototype.m9 = function () { return this; } : () => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: any; } +>Class.prototype.m9 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m9 : any +>function () { return this; } : () => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: any; } +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + + diff --git a/tests/baselines/reference/missingFunctionImplementation.errors.txt b/tests/baselines/reference/missingFunctionImplementation.errors.txt new file mode 100644 index 00000000000..4cf58d97d49 --- /dev/null +++ b/tests/baselines/reference/missingFunctionImplementation.errors.txt @@ -0,0 +1,140 @@ +tests/cases/compiler/missingFunctionImplementation.ts(3,3): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(8,3): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(16,3): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(22,10): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(28,10): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(33,10): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(41,10): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(48,10): error TS2300: Duplicate identifier 'm'. +tests/cases/compiler/missingFunctionImplementation.ts(49,10): error TS2300: Duplicate identifier 'm'. +tests/cases/compiler/missingFunctionImplementation.ts(49,10): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(52,19): error TS2300: Duplicate identifier 'm'. +tests/cases/compiler/missingFunctionImplementation.ts(57,10): error TS2300: Duplicate identifier 'm'. +tests/cases/compiler/missingFunctionImplementation.ts(60,19): error TS2300: Duplicate identifier 'm'. +tests/cases/compiler/missingFunctionImplementation.ts(60,19): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(65,19): error TS2391: Function implementation is missing or not immediately following the declaration. +tests/cases/compiler/missingFunctionImplementation.ts(73,19): error TS2393: Duplicate function implementation. +tests/cases/compiler/missingFunctionImplementation.ts(74,19): error TS2393: Duplicate function implementation. +tests/cases/compiler/missingFunctionImplementation.ts(75,19): error TS2393: Duplicate function implementation. +tests/cases/compiler/missingFunctionImplementation.ts(78,19): error TS2393: Duplicate function implementation. + + +==== tests/cases/compiler/missingFunctionImplementation.ts (19 errors) ==== + + export class C1 { + m(): void; + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + + // merged with a namespace + export class C2 { + m(): void; + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + export namespace C2 { } + + + // merged with a namespace, multiple overloads + class C3 { + m(a, b); + m(a); + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + namespace C3 { } + + // static methods, multiple overloads + class C4 { + static m(a): void; + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + + // static methods, multiple overloads + class C5 { + static m(a): void; + static m(): void; + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + + // merged with namespace, static methods + class C6 { + static m(): void; + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + namespace C6 { + } + + // merged with namespace, static methods, multiple overloads + class C7 { + static m(a): void; + static m(): void; + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + namespace C7 { + } + + // merged with namespace, static methods, duplicate declarations + class C8 { + static m(a): void; + ~ +!!! error TS2300: Duplicate identifier 'm'. + static m(a, b): void; + ~ +!!! error TS2300: Duplicate identifier 'm'. + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + namespace C8 { + export function m(a?, b?): void { } + ~ +!!! error TS2300: Duplicate identifier 'm'. + } + + // merged with namespace, static methods, duplicate declarations + class C9 { + static m(a): void { } + ~ +!!! error TS2300: Duplicate identifier 'm'. + } + namespace C9 { + export function m(a): void; + ~ +!!! error TS2300: Duplicate identifier 'm'. + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + + // merged namespaces + namespace N10 { + export function m(a): void; + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. + } + namespace N10 { + export function m(a): void { } + } + + // merged namespaces, duplicate defintions + namespace N12 { + export function m(a): void; + ~ +!!! error TS2393: Duplicate function implementation. + export function m(): void; + ~ +!!! error TS2393: Duplicate function implementation. + export function m(a?): void { } + ~ +!!! error TS2393: Duplicate function implementation. + } + namespace N12 { + export function m(a): void { } + ~ +!!! error TS2393: Duplicate function implementation. + } + \ No newline at end of file diff --git a/tests/baselines/reference/missingFunctionImplementation.js b/tests/baselines/reference/missingFunctionImplementation.js new file mode 100644 index 00000000000..a452c8080b7 --- /dev/null +++ b/tests/baselines/reference/missingFunctionImplementation.js @@ -0,0 +1,168 @@ +//// [missingFunctionImplementation.ts] + +export class C1 { + m(): void; +} + +// merged with a namespace +export class C2 { + m(): void; +} +export namespace C2 { } + + +// merged with a namespace, multiple overloads +class C3 { + m(a, b); + m(a); +} +namespace C3 { } + +// static methods, multiple overloads +class C4 { + static m(a): void; +} + +// static methods, multiple overloads +class C5 { + static m(a): void; + static m(): void; +} + +// merged with namespace, static methods +class C6 { + static m(): void; +} +namespace C6 { +} + +// merged with namespace, static methods, multiple overloads +class C7 { + static m(a): void; + static m(): void; +} +namespace C7 { +} + +// merged with namespace, static methods, duplicate declarations +class C8 { + static m(a): void; + static m(a, b): void; +} +namespace C8 { + export function m(a?, b?): void { } +} + +// merged with namespace, static methods, duplicate declarations +class C9 { + static m(a): void { } +} +namespace C9 { + export function m(a): void; +} + +// merged namespaces +namespace N10 { + export function m(a): void; +} +namespace N10 { + export function m(a): void { } +} + +// merged namespaces, duplicate defintions +namespace N12 { + export function m(a): void; + export function m(): void; + export function m(a?): void { } +} +namespace N12 { + export function m(a): void { } +} + + +//// [missingFunctionImplementation.js] +"use strict"; +var C1 = (function () { + function C1() { + } + return C1; +}()); +exports.C1 = C1; +// merged with a namespace +var C2 = (function () { + function C2() { + } + return C2; +}()); +exports.C2 = C2; +// merged with a namespace, multiple overloads +var C3 = (function () { + function C3() { + } + return C3; +}()); +// static methods, multiple overloads +var C4 = (function () { + function C4() { + } + return C4; +}()); +// static methods, multiple overloads +var C5 = (function () { + function C5() { + } + return C5; +}()); +// merged with namespace, static methods +var C6 = (function () { + function C6() { + } + return C6; +}()); +// merged with namespace, static methods, multiple overloads +var C7 = (function () { + function C7() { + } + return C7; +}()); +// merged with namespace, static methods, duplicate declarations +var C8 = (function () { + function C8() { + } + return C8; +}()); +var C8; +(function (C8) { + function m(a, b) { } + C8.m = m; +})(C8 || (C8 = {})); +// merged with namespace, static methods, duplicate declarations +var C9 = (function () { + function C9() { + } + C9.m = function (a) { }; + return C9; +}()); +var C9; +(function (C9) { +})(C9 || (C9 = {})); +// merged namespaces +var N10; +(function (N10) { +})(N10 || (N10 = {})); +var N10; +(function (N10) { + function m(a) { } + N10.m = m; +})(N10 || (N10 = {})); +// merged namespaces, duplicate defintions +var N12; +(function (N12) { + function m(a) { } + N12.m = m; +})(N12 || (N12 = {})); +var N12; +(function (N12) { + function m(a) { } + N12.m = m; +})(N12 || (N12 = {})); diff --git a/tests/baselines/reference/missingFunctionImplementation2.errors.txt b/tests/baselines/reference/missingFunctionImplementation2.errors.txt new file mode 100644 index 00000000000..a695482e1fb --- /dev/null +++ b/tests/baselines/reference/missingFunctionImplementation2.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/missingFunctionImplementation2_a.ts(3,19): error TS2384: Overload signatures must all be ambient or non-ambient. +tests/cases/compiler/missingFunctionImplementation2_b.ts(1,17): error TS2391: Function implementation is missing or not immediately following the declaration. + + +==== tests/cases/compiler/missingFunctionImplementation2_a.ts (1 errors) ==== + export {}; + declare module "./missingFunctionImplementation2_b.ts" { + export function f(a, b): void; + ~ +!!! error TS2384: Overload signatures must all be ambient or non-ambient. + } + +==== tests/cases/compiler/missingFunctionImplementation2_b.ts (1 errors) ==== + export function f(a?, b?); + ~ +!!! error TS2391: Function implementation is missing or not immediately following the declaration. \ No newline at end of file diff --git a/tests/baselines/reference/missingFunctionImplementation2.js b/tests/baselines/reference/missingFunctionImplementation2.js new file mode 100644 index 00000000000..104b6dd9443 --- /dev/null +++ b/tests/baselines/reference/missingFunctionImplementation2.js @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/missingFunctionImplementation2.ts] //// + +//// [missingFunctionImplementation2_a.ts] +export {}; +declare module "./missingFunctionImplementation2_b.ts" { + export function f(a, b): void; +} + +//// [missingFunctionImplementation2_b.ts] +export function f(a?, b?); + +//// [missingFunctionImplementation2_a.js] +"use strict"; +//// [missingFunctionImplementation2_b.js] +"use strict"; diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.symbols b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.symbols index 3bbe91bc9fa..d8520698e6c 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.symbols +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.symbols @@ -121,9 +121,9 @@ declare var console: any; >console : Symbol(console, Decl(modularizeLibrary_NoErrorDuplicateLibOptions1.ts, 52, 11)) out().then(() => { ->out().then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>out().then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) >out : Symbol(out, Decl(modularizeLibrary_NoErrorDuplicateLibOptions1.ts, 45, 37)) ->then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) console.log("Yea!"); >console : Symbol(console, Decl(modularizeLibrary_NoErrorDuplicateLibOptions1.ts, 52, 11)) diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types index 16051c14b7c..e0d0c492f4d 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types @@ -148,10 +148,10 @@ declare var console: any; out().then(() => { >out().then(() => { console.log("Yea!");}) : Promise ->out().then : { (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>out().then : { (onfulfilled: (value: {}) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike): Promise; (): Promise<{}>; } >out() : Promise<{}> >out : () => Promise<{}> ->then : { (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>then : { (onfulfilled: (value: {}) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike): Promise; (): Promise<{}>; } >() => { console.log("Yea!");} : () => void console.log("Yea!"); diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.symbols b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.symbols index 89cb8fe7179..ea1eb599c6f 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.symbols +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.symbols @@ -121,9 +121,9 @@ declare var console: any; >console : Symbol(console, Decl(modularizeLibrary_NoErrorDuplicateLibOptions2.ts, 52, 11)) out().then(() => { ->out().then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>out().then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) >out : Symbol(out, Decl(modularizeLibrary_NoErrorDuplicateLibOptions2.ts, 45, 37)) ->then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) console.log("Yea!"); >console : Symbol(console, Decl(modularizeLibrary_NoErrorDuplicateLibOptions2.ts, 52, 11)) diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types index a7d8e77e28c..21e658e29ce 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types @@ -148,10 +148,10 @@ declare var console: any; out().then(() => { >out().then(() => { console.log("Yea!");}) : Promise ->out().then : { (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>out().then : { (onfulfilled: (value: {}) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike): Promise; (): Promise<{}>; } >out() : Promise<{}> >out : () => Promise<{}> ->then : { (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>then : { (onfulfilled: (value: {}) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike): Promise; (): Promise<{}>; } >() => { console.log("Yea!");} : () => void console.log("Yea!"); diff --git a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.symbols b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.symbols index c8ccdd98653..ed1fb96ded3 100644 --- a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.symbols +++ b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.symbols @@ -121,9 +121,9 @@ declare var console: any; >console : Symbol(console, Decl(modularizeLibrary_TargetES5UsingES6Lib.ts, 52, 11)) out().then(() => { ->out().then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>out().then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) >out : Symbol(out, Decl(modularizeLibrary_TargetES5UsingES6Lib.ts, 45, 37)) ->then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) console.log("Yea!"); >console : Symbol(console, Decl(modularizeLibrary_TargetES5UsingES6Lib.ts, 52, 11)) diff --git a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types index 8272465da5e..24ff905f166 100644 --- a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types +++ b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types @@ -148,10 +148,10 @@ declare var console: any; out().then(() => { >out().then(() => { console.log("Yea!");}) : Promise ->out().then : { (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>out().then : { (onfulfilled: (value: {}) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike): Promise; (): Promise<{}>; } >out() : Promise<{}> >out : () => Promise<{}> ->then : { (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: {}) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>then : { (onfulfilled: (value: {}) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: {}) => TResult | PromiseLike): Promise; (): Promise<{}>; } >() => { console.log("Yea!");} : () => void console.log("Yea!"); diff --git a/tests/baselines/reference/multipleDeclarations.js b/tests/baselines/reference/multipleDeclarations.js new file mode 100644 index 00000000000..5f5ac29e909 --- /dev/null +++ b/tests/baselines/reference/multipleDeclarations.js @@ -0,0 +1,17 @@ +//// [input.js] + +function C() { + this.m = null; +} +C.prototype.m = function() { + this.nothing(); +}; + + +//// [output.js] +function C() { + this.m = null; +} +C.prototype.m = function () { + this.nothing(); +}; diff --git a/tests/baselines/reference/multipleDeclarations.symbols b/tests/baselines/reference/multipleDeclarations.symbols new file mode 100644 index 00000000000..a256943dd50 --- /dev/null +++ b/tests/baselines/reference/multipleDeclarations.symbols @@ -0,0 +1,19 @@ +=== tests/cases/conformance/salsa/input.js === + +function C() { +>C : Symbol(C, Decl(input.js, 0, 0)) + + this.m = null; +>m : Symbol(C.m, Decl(input.js, 1, 14), Decl(input.js, 3, 1)) +} +C.prototype.m = function() { +>C.prototype : Symbol(C.m, Decl(input.js, 1, 14), Decl(input.js, 3, 1)) +>C : Symbol(C, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m : Symbol(C.m, Decl(input.js, 1, 14), Decl(input.js, 3, 1)) + + this.nothing(); +>this : Symbol(C, Decl(input.js, 0, 0)) + +}; + diff --git a/tests/baselines/reference/multipleDeclarations.types b/tests/baselines/reference/multipleDeclarations.types new file mode 100644 index 00000000000..7c0a3de70c9 --- /dev/null +++ b/tests/baselines/reference/multipleDeclarations.types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/salsa/input.js === + +function C() { +>C : () => void + + this.m = null; +>this.m = null : null +>this.m : any +>this : any +>m : any +>null : null +} +C.prototype.m = function() { +>C.prototype.m = function() { this.nothing();} : () => void +>C.prototype.m : any +>C.prototype : any +>C : () => void +>prototype : any +>m : any +>function() { this.nothing();} : () => void + + this.nothing(); +>this.nothing() : any +>this.nothing : any +>this : { m: () => void; } +>nothing : any + +}; + diff --git a/tests/baselines/reference/nodeResolution6.js b/tests/baselines/reference/nodeResolution6.js index 58a9b907250..196e8ae57cf 100644 --- a/tests/baselines/reference/nodeResolution6.js +++ b/tests/baselines/reference/nodeResolution6.js @@ -13,7 +13,5 @@ export declare var y; import y = require("a"); -//// [ref.js] -var x = 1; //// [b.js] "use strict"; diff --git a/tests/baselines/reference/nodeResolution8.js b/tests/baselines/reference/nodeResolution8.js index 36b53eec553..1d90399ff70 100644 --- a/tests/baselines/reference/nodeResolution8.js +++ b/tests/baselines/reference/nodeResolution8.js @@ -12,7 +12,5 @@ export declare var y; //// [b.ts] import y = require("a"); -//// [ref.js] -var x = 1; //// [b.js] "use strict"; diff --git a/tests/baselines/reference/parser509668.errors.txt b/tests/baselines/reference/parser509668.errors.txt index 5ea380592ef..f83c53db449 100644 --- a/tests/baselines/reference/parser509668.errors.txt +++ b/tests/baselines/reference/parser509668.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509668.ts(3,23): error TS1005: ',' expected. +tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509668.ts(3,16): error TS1317: A parameter property cannot be declared using a rest parameter. ==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509668.ts (1 errors) ==== class Foo3 { // Doesn't work, but should constructor (public ...args: string[]) { } - ~~~ -!!! error TS1005: ',' expected. + ~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1317: A parameter property cannot be declared using a rest parameter. } \ No newline at end of file diff --git a/tests/baselines/reference/parser509668.js b/tests/baselines/reference/parser509668.js index 97a51d8a5e7..c767aea676a 100644 --- a/tests/baselines/reference/parser509668.js +++ b/tests/baselines/reference/parser509668.js @@ -7,11 +7,12 @@ class Foo3 { //// [parser509668.js] var Foo3 = (function () { // Doesn't work, but should - function Foo3(public) { + function Foo3() { var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i - 0] = arguments[_i]; } + this.args = args; } return Foo3; }()); diff --git a/tests/baselines/reference/parserRealSource1.errors.txt b/tests/baselines/reference/parserRealSource1.errors.txt index 0d238dabf2b..23d1a1d744a 100644 --- a/tests/baselines/reference/parserRealSource1.errors.txt +++ b/tests/baselines/reference/parserRealSource1.errors.txt @@ -7,7 +7,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource1.ts(4,1): error TS60 /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { export module CompilerDiagnostics { diff --git a/tests/baselines/reference/parserRealSource10.errors.txt b/tests/baselines/reference/parserRealSource10.errors.txt index b3c40202c4f..d6199636e69 100644 --- a/tests/baselines/reference/parserRealSource10.errors.txt +++ b/tests/baselines/reference/parserRealSource10.errors.txt @@ -348,7 +348,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(449,40): error /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { export enum TokenID { diff --git a/tests/baselines/reference/parserRealSource11.errors.txt b/tests/baselines/reference/parserRealSource11.errors.txt index 718bda19a67..efae0f962fd 100644 --- a/tests/baselines/reference/parserRealSource11.errors.txt +++ b/tests/baselines/reference/parserRealSource11.errors.txt @@ -523,7 +523,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { export class ASTSpan { diff --git a/tests/baselines/reference/parserRealSource12.errors.txt b/tests/baselines/reference/parserRealSource12.errors.txt index b7b221cbc03..22fb209d80c 100644 --- a/tests/baselines/reference/parserRealSource12.errors.txt +++ b/tests/baselines/reference/parserRealSource12.errors.txt @@ -215,7 +215,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(524,30): error /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { export interface IAstWalker { diff --git a/tests/baselines/reference/parserRealSource13.errors.txt b/tests/baselines/reference/parserRealSource13.errors.txt index e9380882e28..6ddc41ed610 100644 --- a/tests/baselines/reference/parserRealSource13.errors.txt +++ b/tests/baselines/reference/parserRealSource13.errors.txt @@ -122,7 +122,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(135,36): error /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript.AstWalkerWithDetailCallback { export interface AstWalkerDetailCallback { diff --git a/tests/baselines/reference/parserRealSource14.errors.txt b/tests/baselines/reference/parserRealSource14.errors.txt index bc32a8e585b..4881864e236 100644 --- a/tests/baselines/reference/parserRealSource14.errors.txt +++ b/tests/baselines/reference/parserRealSource14.errors.txt @@ -166,7 +166,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource14.ts(572,20): error /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { export function lastOf(items: any[]): any { diff --git a/tests/baselines/reference/parserRealSource2.errors.txt b/tests/baselines/reference/parserRealSource2.errors.txt index e552cb77812..42fcff36c70 100644 --- a/tests/baselines/reference/parserRealSource2.errors.txt +++ b/tests/baselines/reference/parserRealSource2.errors.txt @@ -7,7 +7,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource2.ts(4,1): error TS60 /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { diff --git a/tests/baselines/reference/parserRealSource3.errors.txt b/tests/baselines/reference/parserRealSource3.errors.txt index 98aae9660a8..5b00994052b 100644 --- a/tests/baselines/reference/parserRealSource3.errors.txt +++ b/tests/baselines/reference/parserRealSource3.errors.txt @@ -7,7 +7,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource3.ts(4,1): error TS60 /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { // Note: Any addition to the NodeType should also be supported with addition to AstWalkerDetailCallback diff --git a/tests/baselines/reference/parserRealSource4.errors.txt b/tests/baselines/reference/parserRealSource4.errors.txt index e0ae0d2221e..9722a5b670d 100644 --- a/tests/baselines/reference/parserRealSource4.errors.txt +++ b/tests/baselines/reference/parserRealSource4.errors.txt @@ -8,7 +8,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource4.ts(195,37): error T /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { diff --git a/tests/baselines/reference/parserRealSource5.errors.txt b/tests/baselines/reference/parserRealSource5.errors.txt index 78894b21420..7dc9b5942d5 100644 --- a/tests/baselines/reference/parserRealSource5.errors.txt +++ b/tests/baselines/reference/parserRealSource5.errors.txt @@ -16,7 +16,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(61,65): error TS /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { // TODO: refactor indent logic for use in emit diff --git a/tests/baselines/reference/parserRealSource6.errors.txt b/tests/baselines/reference/parserRealSource6.errors.txt index aa646ca1aba..aa6a9f41392 100644 --- a/tests/baselines/reference/parserRealSource6.errors.txt +++ b/tests/baselines/reference/parserRealSource6.errors.txt @@ -67,7 +67,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(215,20): error T /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { export class TypeCollectionContext { diff --git a/tests/baselines/reference/parserRealSource7.errors.txt b/tests/baselines/reference/parserRealSource7.errors.txt index 7945e5d7034..a3635dabc48 100644 --- a/tests/baselines/reference/parserRealSource7.errors.txt +++ b/tests/baselines/reference/parserRealSource7.errors.txt @@ -309,7 +309,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { export class Continuation { diff --git a/tests/baselines/reference/parserRealSource8.errors.txt b/tests/baselines/reference/parserRealSource8.errors.txt index d497b0884db..6249d3fd991 100644 --- a/tests/baselines/reference/parserRealSource8.errors.txt +++ b/tests/baselines/reference/parserRealSource8.errors.txt @@ -140,7 +140,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { diff --git a/tests/baselines/reference/parserRealSource9.errors.txt b/tests/baselines/reference/parserRealSource9.errors.txt index 9d89848ff20..caa142db60e 100644 --- a/tests/baselines/reference/parserRealSource9.errors.txt +++ b/tests/baselines/reference/parserRealSource9.errors.txt @@ -39,7 +39,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource9.ts(200,48): error T /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. module TypeScript { export class Binder { diff --git a/tests/baselines/reference/parserharness.errors.txt b/tests/baselines/reference/parserharness.errors.txt index 963ce12ddf1..fd9ad6d3a10 100644 --- a/tests/baselines/reference/parserharness.errors.txt +++ b/tests/baselines/reference/parserharness.errors.txt @@ -128,16 +128,16 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'io.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/compiler/io.ts' not found. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescript.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/compiler/typescript.ts' not found. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'typescriptServices.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/services/typescriptServices.ts' not found. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'diff.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/RealWorld/diff.ts' not found. declare var assert: Harness.Assert; ~~~~~~ diff --git a/tests/baselines/reference/parserindenter.errors.txt b/tests/baselines/reference/parserindenter.errors.txt index 8ccc9220710..2f51281e7aa 100644 --- a/tests/baselines/reference/parserindenter.errors.txt +++ b/tests/baselines/reference/parserindenter.errors.txt @@ -146,7 +146,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(736,38): /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'formatting.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/parser/ecmascript5/RealWorld/formatting.ts' not found. module Formatting { diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/amd/emitDecoratorMetadataCommonJSISolatedModules.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/amd/emitDecoratorMetadataCommonJSISolatedModules.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/amd/emitDecoratorMetadataCommonJSISolatedModules.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/amd/emitDecoratorMetadataCommonJSISolatedModules.json b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/amd/emitDecoratorMetadataCommonJSISolatedModules.json new file mode 100644 index 00000000000..470c5bf1301 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/amd/emitDecoratorMetadataCommonJSISolatedModules.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModule", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/amd/main.js b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/amd/main.js new file mode 100644 index 00000000000..8b73fc550cf --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/amd/main.js @@ -0,0 +1,24 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +define(["require", "exports", "angular2/core"], function (require, exports, ng) { + "use strict"; + var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; + }()); + MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) + ], MyClass1); + exports.MyClass1 = MyClass1; + var _a; +}); diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/node/emitDecoratorMetadataCommonJSISolatedModules.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/node/emitDecoratorMetadataCommonJSISolatedModules.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/node/emitDecoratorMetadataCommonJSISolatedModules.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/node/emitDecoratorMetadataCommonJSISolatedModules.json b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/node/emitDecoratorMetadataCommonJSISolatedModules.json new file mode 100644 index 00000000000..470c5bf1301 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/node/emitDecoratorMetadataCommonJSISolatedModules.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModule", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/node/main.js b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/node/main.js new file mode 100644 index 00000000000..3c1d2cd6da6 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModules/node/main.js @@ -0,0 +1,23 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var ng = require("angular2/core"); +var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; +}()); +MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) +], MyClass1); +exports.MyClass1 = MyClass1; +var _a; diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/amd/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/amd/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/amd/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/amd/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.json b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/amd/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.json new file mode 100644 index 00000000000..91749c0e189 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/amd/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModuleNoResolve", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/amd/main.js b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/amd/main.js new file mode 100644 index 00000000000..8b73fc550cf --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/amd/main.js @@ -0,0 +1,24 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +define(["require", "exports", "angular2/core"], function (require, exports, ng) { + "use strict"; + var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; + }()); + MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) + ], MyClass1); + exports.MyClass1 = MyClass1; + var _a; +}); diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/node/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/node/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/node/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/node/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.json b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/node/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.json new file mode 100644 index 00000000000..91749c0e189 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/node/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModuleNoResolve", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/node/main.js b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/node/main.js new file mode 100644 index 00000000000..3c1d2cd6da6 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve/node/main.js @@ -0,0 +1,23 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var ng = require("angular2/core"); +var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; +}()); +MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) +], MyClass1); +exports.MyClass1 = MyClass1; +var _a; diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/amd/emitDecoratorMetadataSystemJS.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/amd/emitDecoratorMetadataSystemJS.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/amd/emitDecoratorMetadataSystemJS.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/amd/emitDecoratorMetadataSystemJS.json b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/amd/emitDecoratorMetadataSystemJS.json new file mode 100644 index 00000000000..5b48b8fe70c --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/amd/emitDecoratorMetadataSystemJS.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJS", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/amd/main.js b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/amd/main.js new file mode 100644 index 00000000000..8b73fc550cf --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/amd/main.js @@ -0,0 +1,24 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +define(["require", "exports", "angular2/core"], function (require, exports, ng) { + "use strict"; + var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; + }()); + MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) + ], MyClass1); + exports.MyClass1 = MyClass1; + var _a; +}); diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/node/emitDecoratorMetadataSystemJS.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/node/emitDecoratorMetadataSystemJS.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/node/emitDecoratorMetadataSystemJS.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/node/emitDecoratorMetadataSystemJS.json b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/node/emitDecoratorMetadataSystemJS.json new file mode 100644 index 00000000000..5b48b8fe70c --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/node/emitDecoratorMetadataSystemJS.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJS", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/node/main.js b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/node/main.js new file mode 100644 index 00000000000..3c1d2cd6da6 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJS/node/main.js @@ -0,0 +1,23 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var ng = require("angular2/core"); +var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; +}()); +MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) +], MyClass1); +exports.MyClass1 = MyClass1; +var _a; diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/amd/emitDecoratorMetadataSystemJSISolatedModules.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/amd/emitDecoratorMetadataSystemJSISolatedModules.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/amd/emitDecoratorMetadataSystemJSISolatedModules.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/amd/emitDecoratorMetadataSystemJSISolatedModules.json b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/amd/emitDecoratorMetadataSystemJSISolatedModules.json new file mode 100644 index 00000000000..a01c921fdd1 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/amd/emitDecoratorMetadataSystemJSISolatedModules.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModule", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/amd/main.js b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/amd/main.js new file mode 100644 index 00000000000..8b73fc550cf --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/amd/main.js @@ -0,0 +1,24 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +define(["require", "exports", "angular2/core"], function (require, exports, ng) { + "use strict"; + var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; + }()); + MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) + ], MyClass1); + exports.MyClass1 = MyClass1; + var _a; +}); diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/node/emitDecoratorMetadataSystemJSISolatedModules.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/node/emitDecoratorMetadataSystemJSISolatedModules.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/node/emitDecoratorMetadataSystemJSISolatedModules.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/node/emitDecoratorMetadataSystemJSISolatedModules.json b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/node/emitDecoratorMetadataSystemJSISolatedModules.json new file mode 100644 index 00000000000..a01c921fdd1 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/node/emitDecoratorMetadataSystemJSISolatedModules.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModule", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/node/main.js b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/node/main.js new file mode 100644 index 00000000000..3c1d2cd6da6 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModules/node/main.js @@ -0,0 +1,23 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var ng = require("angular2/core"); +var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; +}()); +MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) +], MyClass1); +exports.MyClass1 = MyClass1; +var _a; diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/amd/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/amd/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/amd/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/amd/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.json b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/amd/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.json new file mode 100644 index 00000000000..14eafad1200 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/amd/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModuleNoResolve", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/amd/main.js b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/amd/main.js new file mode 100644 index 00000000000..8b73fc550cf --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/amd/main.js @@ -0,0 +1,24 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +define(["require", "exports", "angular2/core"], function (require, exports, ng) { + "use strict"; + var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; + }()); + MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) + ], MyClass1); + exports.MyClass1 = MyClass1; + var _a; +}); diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/node/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.errors.txt b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/node/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.errors.txt new file mode 100644 index 00000000000..d6d803104c9 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/node/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.errors.txt @@ -0,0 +1,14 @@ +main.ts(1,21): error TS2307: Cannot find module 'angular2/core'. + + +==== main.ts (1 errors) ==== + import * as ng from "angular2/core"; + ~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'angular2/core'. + + declare function foo(...args: any[]); + + @foo + export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} + } \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/node/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.json b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/node/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.json new file mode 100644 index 00000000000..14eafad1200 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/node/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.json @@ -0,0 +1,13 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModuleNoResolve", + "baselineCheck": true, + "runTest": true, + "resolvedInputFiles": [ + "lib.d.ts", + "main.ts" + ], + "emittedFiles": [ + "main.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/node/main.js b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/node/main.js new file mode 100644 index 00000000000..3c1d2cd6da6 --- /dev/null +++ b/tests/baselines/reference/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve/node/main.js @@ -0,0 +1,23 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var ng = require("angular2/core"); +var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; +}()); +MyClass1 = __decorate([ + foo, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) +], MyClass1); +exports.MyClass1 = MyClass1; +var _a; diff --git a/tests/baselines/reference/project/nodeModulesImportHigher/amd/importHigher/root.js b/tests/baselines/reference/project/nodeModulesImportHigher/amd/importHigher/root.js new file mode 100644 index 00000000000..5b8a451c781 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesImportHigher/amd/importHigher/root.js @@ -0,0 +1,6 @@ +define(["require", "exports", "m1"], function (require, exports, m1) { + "use strict"; + m1.f1("test"); + m1.f2.a = 10; + m1.f2.person.age = "10"; // Error: Should be number (if direct import of m2 made the m3 module visible). +}); diff --git a/tests/baselines/reference/project/nodeModulesImportHigher/amd/nodeModulesImportHigher.errors.txt b/tests/baselines/reference/project/nodeModulesImportHigher/amd/nodeModulesImportHigher.errors.txt new file mode 100644 index 00000000000..68a1ef3b7c9 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesImportHigher/amd/nodeModulesImportHigher.errors.txt @@ -0,0 +1,40 @@ +importHigher/root.ts(6,1): error TS2322: Type 'string' is not assignable to type 'number'. + + +==== entry.js (0 errors) ==== + var m3 = require("m3"); + + module.exports = { + "a": 42, + "b": "hello, world", + "person": m3.person + }; + +==== index.js (0 errors) ==== + var m2 = require('m2'); + + /** + * @param {string} p1 The first param + */ + exports.f1 = function(p1) { + return 42; + }; + + exports.f2 = m2; + +==== index.js (0 errors) ==== + exports.person = { + "name": "John Doe", + "age": 42 + } + +==== importHigher/root.ts (1 errors) ==== + import * as m1 from "m1"; + import * as m2 from "m2"; + + m1.f1("test"); + m1.f2.a = 10; + m1.f2.person.age = "10"; // Error: Should be number (if direct import of m2 made the m3 module visible). + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesImportHigher/amd/nodeModulesImportHigher.json b/tests/baselines/reference/project/nodeModulesImportHigher/amd/nodeModulesImportHigher.json new file mode 100644 index 00000000000..6f422876d33 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesImportHigher/amd/nodeModulesImportHigher.json @@ -0,0 +1,18 @@ +{ + "scenario": "Verify that a higher import loads a module that was previously skipped", + "projectRoot": "tests/cases/projects/NodeModulesSearch", + "baselineCheck": true, + "declaration": false, + "moduleResolution": "node", + "project": "importHigher", + "resolvedInputFiles": [ + "lib.d.ts", + "importHigher/node_modules/m2/entry.js", + "importHigher/node_modules/m1/index.js", + "importHigher/node_modules/m2/node_modules/m3/index.js", + "importHigher/root.ts" + ], + "emittedFiles": [ + "importHigher/root.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesImportHigher/node/importHigher/root.js b/tests/baselines/reference/project/nodeModulesImportHigher/node/importHigher/root.js new file mode 100644 index 00000000000..59944c663e9 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesImportHigher/node/importHigher/root.js @@ -0,0 +1,5 @@ +"use strict"; +var m1 = require("m1"); +m1.f1("test"); +m1.f2.a = 10; +m1.f2.person.age = "10"; // Error: Should be number (if direct import of m2 made the m3 module visible). diff --git a/tests/baselines/reference/project/nodeModulesImportHigher/node/nodeModulesImportHigher.errors.txt b/tests/baselines/reference/project/nodeModulesImportHigher/node/nodeModulesImportHigher.errors.txt new file mode 100644 index 00000000000..68a1ef3b7c9 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesImportHigher/node/nodeModulesImportHigher.errors.txt @@ -0,0 +1,40 @@ +importHigher/root.ts(6,1): error TS2322: Type 'string' is not assignable to type 'number'. + + +==== entry.js (0 errors) ==== + var m3 = require("m3"); + + module.exports = { + "a": 42, + "b": "hello, world", + "person": m3.person + }; + +==== index.js (0 errors) ==== + var m2 = require('m2'); + + /** + * @param {string} p1 The first param + */ + exports.f1 = function(p1) { + return 42; + }; + + exports.f2 = m2; + +==== index.js (0 errors) ==== + exports.person = { + "name": "John Doe", + "age": 42 + } + +==== importHigher/root.ts (1 errors) ==== + import * as m1 from "m1"; + import * as m2 from "m2"; + + m1.f1("test"); + m1.f2.a = 10; + m1.f2.person.age = "10"; // Error: Should be number (if direct import of m2 made the m3 module visible). + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesImportHigher/node/nodeModulesImportHigher.json b/tests/baselines/reference/project/nodeModulesImportHigher/node/nodeModulesImportHigher.json new file mode 100644 index 00000000000..6f422876d33 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesImportHigher/node/nodeModulesImportHigher.json @@ -0,0 +1,18 @@ +{ + "scenario": "Verify that a higher import loads a module that was previously skipped", + "projectRoot": "tests/cases/projects/NodeModulesSearch", + "baselineCheck": true, + "declaration": false, + "moduleResolution": "node", + "project": "importHigher", + "resolvedInputFiles": [ + "lib.d.ts", + "importHigher/node_modules/m2/entry.js", + "importHigher/node_modules/m1/index.js", + "importHigher/node_modules/m2/node_modules/m3/index.js", + "importHigher/root.ts" + ], + "emittedFiles": [ + "importHigher/root.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js new file mode 100644 index 00000000000..46d38afba6f --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js @@ -0,0 +1,10 @@ +var m2 = require('m2'); +var rel = require('./relative'); +/** + * @param {string} p1 The first param + */ +exports.f1 = function (p1) { + return 42; +}; +exports.f2 = m2; +exports.rel = rel.relativeProp; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js new file mode 100644 index 00000000000..13432076541 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js @@ -0,0 +1 @@ +exports.relativeProp = true; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/root.js new file mode 100644 index 00000000000..5a3916f07d1 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/root.js @@ -0,0 +1,7 @@ +define(["require", "exports", "m1"], function (require, exports, m1) { + "use strict"; + m1.f1("test"); + m1.f2.a = "10"; // Error: Should be number + m1.rel = 42; // Error: Should be boolean + m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". +}); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt new file mode 100644 index 00000000000..7099c05d577 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt @@ -0,0 +1,43 @@ +maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'. +maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to type 'boolean'. + + +==== entry.js (0 errors) ==== + var m3 = require("m3"); + + module.exports = { + "a": 42, + "b": "hello, world", + "person": m3.person + }; + +==== relative.js (0 errors) ==== + exports.relativeProp = true; + +==== maxDepthExceeded/node_modules/m1/index.js (0 errors) ==== + var m2 = require('m2'); + var rel = require('./relative'); + + /** + * @param {string} p1 The first param + */ + exports.f1 = function(p1) { + return 42; + }; + + exports.f2 = m2; + + exports.rel = rel.relativeProp; + +==== maxDepthExceeded/root.ts (2 errors) ==== + import * as m1 from "m1"; + m1.f1("test"); + m1.f2.a = "10"; // Error: Should be number + ~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + m1.rel = 42; // Error: Should be boolean + ~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'boolean'. + + m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". + \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json new file mode 100644 index 00000000000..86e856dc7b8 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json @@ -0,0 +1,20 @@ +{ + "scenario": "Verify that JavaScript modules are not resolved if too many hops", + "projectRoot": "tests/cases/projects/NodeModulesSearch", + "baselineCheck": true, + "declaration": false, + "moduleResolution": "node", + "project": "maxDepthExceeded", + "resolvedInputFiles": [ + "lib.d.ts", + "maxDepthExceeded/node_modules/m2/entry.js", + "maxDepthExceeded/node_modules/m1/relative.js", + "maxDepthExceeded/node_modules/m1/index.js", + "maxDepthExceeded/root.ts" + ], + "emittedFiles": [ + "maxDepthExceeded/built/node_modules/m1/relative.js", + "maxDepthExceeded/built/node_modules/m1/index.js", + "maxDepthExceeded/built/root.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js new file mode 100644 index 00000000000..46d38afba6f --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js @@ -0,0 +1,10 @@ +var m2 = require('m2'); +var rel = require('./relative'); +/** + * @param {string} p1 The first param + */ +exports.f1 = function (p1) { + return 42; +}; +exports.f2 = m2; +exports.rel = rel.relativeProp; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js new file mode 100644 index 00000000000..13432076541 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js @@ -0,0 +1 @@ +exports.relativeProp = true; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/root.js new file mode 100644 index 00000000000..fb4faf236b2 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/root.js @@ -0,0 +1,6 @@ +"use strict"; +var m1 = require("m1"); +m1.f1("test"); +m1.f2.a = "10"; // Error: Should be number +m1.rel = 42; // Error: Should be boolean +m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt new file mode 100644 index 00000000000..7099c05d577 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt @@ -0,0 +1,43 @@ +maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'. +maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to type 'boolean'. + + +==== entry.js (0 errors) ==== + var m3 = require("m3"); + + module.exports = { + "a": 42, + "b": "hello, world", + "person": m3.person + }; + +==== relative.js (0 errors) ==== + exports.relativeProp = true; + +==== maxDepthExceeded/node_modules/m1/index.js (0 errors) ==== + var m2 = require('m2'); + var rel = require('./relative'); + + /** + * @param {string} p1 The first param + */ + exports.f1 = function(p1) { + return 42; + }; + + exports.f2 = m2; + + exports.rel = rel.relativeProp; + +==== maxDepthExceeded/root.ts (2 errors) ==== + import * as m1 from "m1"; + m1.f1("test"); + m1.f2.a = "10"; // Error: Should be number + ~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + m1.rel = 42; // Error: Should be boolean + ~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'boolean'. + + m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". + \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json new file mode 100644 index 00000000000..86e856dc7b8 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json @@ -0,0 +1,20 @@ +{ + "scenario": "Verify that JavaScript modules are not resolved if too many hops", + "projectRoot": "tests/cases/projects/NodeModulesSearch", + "baselineCheck": true, + "declaration": false, + "moduleResolution": "node", + "project": "maxDepthExceeded", + "resolvedInputFiles": [ + "lib.d.ts", + "maxDepthExceeded/node_modules/m2/entry.js", + "maxDepthExceeded/node_modules/m1/relative.js", + "maxDepthExceeded/node_modules/m1/index.js", + "maxDepthExceeded/root.ts" + ], + "emittedFiles": [ + "maxDepthExceeded/built/node_modules/m1/relative.js", + "maxDepthExceeded/built/node_modules/m1/index.js", + "maxDepthExceeded/built/root.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/maxDepthIncreased/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/maxDepthIncreased/root.js new file mode 100644 index 00000000000..9ef3915c851 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/maxDepthIncreased/root.js @@ -0,0 +1,7 @@ +define(["require", "exports", "m1", "m4"], function (require, exports, m1, m4) { + "use strict"; + m1.f1("test"); + m1.f2.a = 10; + m1.f2.person.age = "10"; // Should error if loaded the .js files correctly + var r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file +}); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/nodeModulesMaxDepthIncreased.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/nodeModulesMaxDepthIncreased.errors.txt new file mode 100644 index 00000000000..f511000d5ac --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/nodeModulesMaxDepthIncreased.errors.txt @@ -0,0 +1,46 @@ +maxDepthIncreased/root.ts(7,1): error TS2322: Type 'string' is not assignable to type 'number'. + + +==== index.js (0 errors) ==== + exports.person = { + "name": "John Doe", + "age": 42 + } + +==== entry.js (0 errors) ==== + var m3 = require("m3"); + + module.exports = { + "a": 42, + "b": "hello, world", + "person": m3.person + }; + +==== index.js (0 errors) ==== + var m2 = require('m2'); + + /** + * @param {string} p1 The first param + */ + exports.f1 = function(p1) { + return 42; + }; + + exports.f2 = m2; + +==== entry.d.ts (0 errors) ==== + export declare var foo: number; + +==== maxDepthIncreased/root.ts (1 errors) ==== + import * as m1 from "m1"; + import * as m4 from "m4"; + + m1.f1("test"); + m1.f2.a = 10; + + m1.f2.person.age = "10"; // Should error if loaded the .js files correctly + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + + let r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file + \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/nodeModulesMaxDepthIncreased.json b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/nodeModulesMaxDepthIncreased.json new file mode 100644 index 00000000000..bb3234f1db2 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/amd/nodeModulesMaxDepthIncreased.json @@ -0,0 +1,19 @@ +{ + "scenario": "Verify that the setting to search node_modules deeper takes effect", + "projectRoot": "tests/cases/projects/NodeModulesSearch", + "baselineCheck": true, + "declaration": false, + "moduleResolution": "node", + "project": "maxDepthIncreased", + "resolvedInputFiles": [ + "lib.d.ts", + "maxDepthIncreased/node_modules/m2/node_modules/m3/index.js", + "maxDepthIncreased/node_modules/m2/entry.js", + "maxDepthIncreased/node_modules/m1/index.js", + "maxDepthIncreased/node_modules/@types/m4/entry.d.ts", + "maxDepthIncreased/root.ts" + ], + "emittedFiles": [ + "maxDepthIncreased/root.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/maxDepthIncreased/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/maxDepthIncreased/root.js new file mode 100644 index 00000000000..f6783cda79b --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/maxDepthIncreased/root.js @@ -0,0 +1,7 @@ +"use strict"; +var m1 = require("m1"); +var m4 = require("m4"); +m1.f1("test"); +m1.f2.a = 10; +m1.f2.person.age = "10"; // Should error if loaded the .js files correctly +var r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/nodeModulesMaxDepthIncreased.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/nodeModulesMaxDepthIncreased.errors.txt new file mode 100644 index 00000000000..f511000d5ac --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/nodeModulesMaxDepthIncreased.errors.txt @@ -0,0 +1,46 @@ +maxDepthIncreased/root.ts(7,1): error TS2322: Type 'string' is not assignable to type 'number'. + + +==== index.js (0 errors) ==== + exports.person = { + "name": "John Doe", + "age": 42 + } + +==== entry.js (0 errors) ==== + var m3 = require("m3"); + + module.exports = { + "a": 42, + "b": "hello, world", + "person": m3.person + }; + +==== index.js (0 errors) ==== + var m2 = require('m2'); + + /** + * @param {string} p1 The first param + */ + exports.f1 = function(p1) { + return 42; + }; + + exports.f2 = m2; + +==== entry.d.ts (0 errors) ==== + export declare var foo: number; + +==== maxDepthIncreased/root.ts (1 errors) ==== + import * as m1 from "m1"; + import * as m4 from "m4"; + + m1.f1("test"); + m1.f2.a = 10; + + m1.f2.person.age = "10"; // Should error if loaded the .js files correctly + ~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + + let r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file + \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/nodeModulesMaxDepthIncreased.json b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/nodeModulesMaxDepthIncreased.json new file mode 100644 index 00000000000..bb3234f1db2 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthIncreased/node/nodeModulesMaxDepthIncreased.json @@ -0,0 +1,19 @@ +{ + "scenario": "Verify that the setting to search node_modules deeper takes effect", + "projectRoot": "tests/cases/projects/NodeModulesSearch", + "baselineCheck": true, + "declaration": false, + "moduleResolution": "node", + "project": "maxDepthIncreased", + "resolvedInputFiles": [ + "lib.d.ts", + "maxDepthIncreased/node_modules/m2/node_modules/m3/index.js", + "maxDepthIncreased/node_modules/m2/entry.js", + "maxDepthIncreased/node_modules/m1/index.js", + "maxDepthIncreased/node_modules/@types/m4/entry.d.ts", + "maxDepthIncreased/root.ts" + ], + "emittedFiles": [ + "maxDepthIncreased/root.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/rootDirectoryErrors/amd/rootDirectoryErrors.errors.txt b/tests/baselines/reference/project/rootDirectoryErrors/amd/rootDirectoryErrors.errors.txt index dfbdd679685..f0809b38f27 100644 --- a/tests/baselines/reference/project/rootDirectoryErrors/amd/rootDirectoryErrors.errors.txt +++ b/tests/baselines/reference/project/rootDirectoryErrors/amd/rootDirectoryErrors.errors.txt @@ -1,7 +1,7 @@ error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. -!!! error TS6059: File 'fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. +!!! error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. ==== FolderA/FolderB/FolderC/fileC.ts (0 errors) ==== class C { } diff --git a/tests/baselines/reference/project/rootDirectoryErrors/node/rootDirectoryErrors.errors.txt b/tests/baselines/reference/project/rootDirectoryErrors/node/rootDirectoryErrors.errors.txt index dfbdd679685..f0809b38f27 100644 --- a/tests/baselines/reference/project/rootDirectoryErrors/node/rootDirectoryErrors.errors.txt +++ b/tests/baselines/reference/project/rootDirectoryErrors/node/rootDirectoryErrors.errors.txt @@ -1,7 +1,7 @@ error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. -!!! error TS6059: File 'fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. +!!! error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. ==== FolderA/FolderB/FolderC/fileC.ts (0 errors) ==== class C { } diff --git a/tests/baselines/reference/promiseType.js b/tests/baselines/reference/promiseType.js new file mode 100644 index 00000000000..6b8d292a2b0 --- /dev/null +++ b/tests/baselines/reference/promiseType.js @@ -0,0 +1,202 @@ +//// [promiseType.ts] +declare var p: Promise; + +const a = p.then(); +const b = p.then(b => 1); +const c = p.then(b => 1, e => 'error'); +const d = p.then(b => 1, e => { }); +const e = p.then(b => 1, e => { throw Error(); }); +const f = p.then(b => 1, e => Promise.reject(Error())); +const g = p.catch(e => 'error'); +const h = p.catch(e => { }); +const i = p.catch(e => { throw Error(); }); +const j = p.catch(e => Promise.reject(Error())); + +async function A() { + const a = await p; + return a; +} + +async function B() { + const a = await p; + return 1; +} + +// NOTE: This reports a "No best comment type exists among return expressions." error, and is +// ignored to get the types result for the test. +// async function C() { +// try { +// const a = await p; +// return 1; +// } +// catch (e) { +// return 'error'; +// } +// } + +async function D() { + try { + const a = await p; + return 1; + } + catch (e) { + } +} + +async function E() { + try { + const a = await p; + return 1; + } + catch (e) { + throw Error(); + } +} + +async function F() { + try { + const a = await p; + return 1; + } + catch (e) { + return Promise.reject(Error()); + } +} + +async function G() { + try { + const a = await p; + return a; + } + catch (e) { + return; + } +} + +async function H() { + try { + const a = await p; + return a; + } + catch (e) { + throw Error(); + } +} + +async function I() { + try { + const a = await p; + return a; + } + catch (e) { + return Promise.reject(Error()); + } +} + +//// [promiseType.js] +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments)).next()); + }); +}; +const a = p.then(); +const b = p.then(b => 1); +const c = p.then(b => 1, e => 'error'); +const d = p.then(b => 1, e => { }); +const e = p.then(b => 1, e => { throw Error(); }); +const f = p.then(b => 1, e => Promise.reject(Error())); +const g = p.catch(e => 'error'); +const h = p.catch(e => { }); +const i = p.catch(e => { throw Error(); }); +const j = p.catch(e => Promise.reject(Error())); +function A() { + return __awaiter(this, void 0, void 0, function* () { + const a = yield p; + return a; + }); +} +function B() { + return __awaiter(this, void 0, void 0, function* () { + const a = yield p; + return 1; + }); +} +// NOTE: This reports a "No best comment type exists among return expressions." error, and is +// ignored to get the types result for the test. +// async function C() { +// try { +// const a = await p; +// return 1; +// } +// catch (e) { +// return 'error'; +// } +// } +function D() { + return __awaiter(this, void 0, void 0, function* () { + try { + const a = yield p; + return 1; + } + catch (e) { + } + }); +} +function E() { + return __awaiter(this, void 0, void 0, function* () { + try { + const a = yield p; + return 1; + } + catch (e) { + throw Error(); + } + }); +} +function F() { + return __awaiter(this, void 0, void 0, function* () { + try { + const a = yield p; + return 1; + } + catch (e) { + return Promise.reject(Error()); + } + }); +} +function G() { + return __awaiter(this, void 0, void 0, function* () { + try { + const a = yield p; + return a; + } + catch (e) { + return; + } + }); +} +function H() { + return __awaiter(this, void 0, void 0, function* () { + try { + const a = yield p; + return a; + } + catch (e) { + throw Error(); + } + }); +} +function I() { + return __awaiter(this, void 0, void 0, function* () { + try { + const a = yield p; + return a; + } + catch (e) { + return Promise.reject(Error()); + } + }); +} diff --git a/tests/baselines/reference/promiseType.symbols b/tests/baselines/reference/promiseType.symbols new file mode 100644 index 00000000000..fde4cf4f6f2 --- /dev/null +++ b/tests/baselines/reference/promiseType.symbols @@ -0,0 +1,233 @@ +=== tests/cases/compiler/promiseType.ts === +declare var p: Promise; +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + +const a = p.then(); +>a : Symbol(a, Decl(promiseType.ts, 2, 5)) +>p.then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) + +const b = p.then(b => 1); +>b : Symbol(b, Decl(promiseType.ts, 3, 5)) +>p.then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>b : Symbol(b, Decl(promiseType.ts, 3, 17)) + +const c = p.then(b => 1, e => 'error'); +>c : Symbol(c, Decl(promiseType.ts, 4, 5)) +>p.then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>b : Symbol(b, Decl(promiseType.ts, 4, 17)) +>e : Symbol(e, Decl(promiseType.ts, 4, 24)) + +const d = p.then(b => 1, e => { }); +>d : Symbol(d, Decl(promiseType.ts, 5, 5)) +>p.then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>b : Symbol(b, Decl(promiseType.ts, 5, 17)) +>e : Symbol(e, Decl(promiseType.ts, 5, 24)) + +const e = p.then(b => 1, e => { throw Error(); }); +>e : Symbol(e, Decl(promiseType.ts, 6, 5)) +>p.then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>b : Symbol(b, Decl(promiseType.ts, 6, 17)) +>e : Symbol(e, Decl(promiseType.ts, 6, 24)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + +const f = p.then(b => 1, e => Promise.reject(Error())); +>f : Symbol(f, Decl(promiseType.ts, 7, 5)) +>p.then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>b : Symbol(b, Decl(promiseType.ts, 7, 17)) +>e : Symbol(e, Decl(promiseType.ts, 7, 24)) +>Promise.reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + +const g = p.catch(e => 'error'); +>g : Symbol(g, Decl(promiseType.ts, 8, 5)) +>p.catch : Symbol(Promise.catch, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>catch : Symbol(Promise.catch, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>e : Symbol(e, Decl(promiseType.ts, 8, 18)) + +const h = p.catch(e => { }); +>h : Symbol(h, Decl(promiseType.ts, 9, 5)) +>p.catch : Symbol(Promise.catch, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>catch : Symbol(Promise.catch, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>e : Symbol(e, Decl(promiseType.ts, 9, 18)) + +const i = p.catch(e => { throw Error(); }); +>i : Symbol(i, Decl(promiseType.ts, 10, 5)) +>p.catch : Symbol(Promise.catch, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>catch : Symbol(Promise.catch, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>e : Symbol(e, Decl(promiseType.ts, 10, 18)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + +const j = p.catch(e => Promise.reject(Error())); +>j : Symbol(j, Decl(promiseType.ts, 11, 5)) +>p.catch : Symbol(Promise.catch, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) +>catch : Symbol(Promise.catch, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>e : Symbol(e, Decl(promiseType.ts, 11, 18)) +>Promise.reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + +async function A() { +>A : Symbol(A, Decl(promiseType.ts, 11, 48)) + + const a = await p; +>a : Symbol(a, Decl(promiseType.ts, 14, 9)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) + + return a; +>a : Symbol(a, Decl(promiseType.ts, 14, 9)) +} + +async function B() { +>B : Symbol(B, Decl(promiseType.ts, 16, 1)) + + const a = await p; +>a : Symbol(a, Decl(promiseType.ts, 19, 9)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) + + return 1; +} + +// NOTE: This reports a "No best comment type exists among return expressions." error, and is +// ignored to get the types result for the test. +// async function C() { +// try { +// const a = await p; +// return 1; +// } +// catch (e) { +// return 'error'; +// } +// } + +async function D() { +>D : Symbol(D, Decl(promiseType.ts, 21, 1)) + + try { + const a = await p; +>a : Symbol(a, Decl(promiseType.ts, 37, 13)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) + + return 1; + } + catch (e) { +>e : Symbol(e, Decl(promiseType.ts, 40, 11)) + } +} + +async function E() { +>E : Symbol(E, Decl(promiseType.ts, 42, 1)) + + try { + const a = await p; +>a : Symbol(a, Decl(promiseType.ts, 46, 13)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) + + return 1; + } + catch (e) { +>e : Symbol(e, Decl(promiseType.ts, 49, 11)) + + throw Error(); +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + } +} + +async function F() { +>F : Symbol(F, Decl(promiseType.ts, 52, 1)) + + try { + const a = await p; +>a : Symbol(a, Decl(promiseType.ts, 56, 13)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) + + return 1; + } + catch (e) { +>e : Symbol(e, Decl(promiseType.ts, 59, 11)) + + return Promise.reject(Error()); +>Promise.reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + } +} + +async function G() { +>G : Symbol(G, Decl(promiseType.ts, 62, 1)) + + try { + const a = await p; +>a : Symbol(a, Decl(promiseType.ts, 66, 13)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) + + return a; +>a : Symbol(a, Decl(promiseType.ts, 66, 13)) + } + catch (e) { +>e : Symbol(e, Decl(promiseType.ts, 69, 11)) + + return; + } +} + +async function H() { +>H : Symbol(H, Decl(promiseType.ts, 72, 1)) + + try { + const a = await p; +>a : Symbol(a, Decl(promiseType.ts, 76, 13)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) + + return a; +>a : Symbol(a, Decl(promiseType.ts, 76, 13)) + } + catch (e) { +>e : Symbol(e, Decl(promiseType.ts, 79, 11)) + + throw Error(); +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + } +} + +async function I() { +>I : Symbol(I, Decl(promiseType.ts, 82, 1)) + + try { + const a = await p; +>a : Symbol(a, Decl(promiseType.ts, 86, 13)) +>p : Symbol(p, Decl(promiseType.ts, 0, 11)) + + return a; +>a : Symbol(a, Decl(promiseType.ts, 86, 13)) + } + catch (e) { +>e : Symbol(e, Decl(promiseType.ts, 89, 11)) + + return Promise.reject(Error()); +>Promise.reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>reject : Symbol(PromiseConstructor.reject, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + } +} diff --git a/tests/baselines/reference/promiseType.types b/tests/baselines/reference/promiseType.types new file mode 100644 index 00000000000..42f885eff68 --- /dev/null +++ b/tests/baselines/reference/promiseType.types @@ -0,0 +1,287 @@ +=== tests/cases/compiler/promiseType.ts === +declare var p: Promise; +>p : Promise +>Promise : Promise + +const a = p.then(); +>a : Promise +>p.then() : Promise +>p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>p : Promise +>then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } + +const b = p.then(b => 1); +>b : Promise +>p.then(b => 1) : Promise +>p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>p : Promise +>then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>b => 1 : (b: boolean) => number +>b : boolean +>1 : number + +const c = p.then(b => 1, e => 'error'); +>c : Promise +>p.then(b => 1, e => 'error') : Promise +>p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>p : Promise +>then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>b => 1 : (b: boolean) => number +>b : boolean +>1 : number +>e => 'error' : (e: any) => string +>e : any +>'error' : string + +const d = p.then(b => 1, e => { }); +>d : Promise +>p.then(b => 1, e => { }) : Promise +>p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>p : Promise +>then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>b => 1 : (b: boolean) => number +>b : boolean +>1 : number +>e => { } : (e: any) => void +>e : any + +const e = p.then(b => 1, e => { throw Error(); }); +>e : Promise +>p.then(b => 1, e => { throw Error(); }) : Promise +>p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>p : Promise +>then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>b => 1 : (b: boolean) => number +>b : boolean +>1 : number +>e => { throw Error(); } : (e: any) => never +>e : any +>Error() : Error +>Error : ErrorConstructor + +const f = p.then(b => 1, e => Promise.reject(Error())); +>f : Promise +>p.then(b => 1, e => Promise.reject(Error())) : Promise +>p.then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>p : Promise +>then : { (onfulfilled: (value: boolean) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: boolean) => TResult | PromiseLike): Promise; (): Promise; } +>b => 1 : (b: boolean) => number +>b : boolean +>1 : number +>e => Promise.reject(Error()) : (e: any) => Promise +>e : any +>Promise.reject(Error()) : Promise +>Promise.reject : { (reason: any): Promise; (reason: any): Promise; } +>Promise : PromiseConstructor +>reject : { (reason: any): Promise; (reason: any): Promise; } +>Error() : Error +>Error : ErrorConstructor + +const g = p.catch(e => 'error'); +>g : Promise +>p.catch(e => 'error') : Promise +>p.catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } +>p : Promise +>catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } +>e => 'error' : (e: any) => string +>e : any +>'error' : string + +const h = p.catch(e => { }); +>h : Promise +>p.catch(e => { }) : Promise +>p.catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } +>p : Promise +>catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } +>e => { } : (e: any) => void +>e : any + +const i = p.catch(e => { throw Error(); }); +>i : Promise +>p.catch(e => { throw Error(); }) : Promise +>p.catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } +>p : Promise +>catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } +>e => { throw Error(); } : (e: any) => never +>e : any +>Error() : Error +>Error : ErrorConstructor + +const j = p.catch(e => Promise.reject(Error())); +>j : Promise +>p.catch(e => Promise.reject(Error())) : Promise +>p.catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } +>p : Promise +>catch : { (onrejected: (reason: any) => TResult | PromiseLike): Promise; (onrejected: (reason: any) => boolean | PromiseLike): Promise; } +>e => Promise.reject(Error()) : (e: any) => Promise +>e : any +>Promise.reject(Error()) : Promise +>Promise.reject : { (reason: any): Promise; (reason: any): Promise; } +>Promise : PromiseConstructor +>reject : { (reason: any): Promise; (reason: any): Promise; } +>Error() : Error +>Error : ErrorConstructor + +async function A() { +>A : () => Promise + + const a = await p; +>a : boolean +>await p : boolean +>p : Promise + + return a; +>a : boolean +} + +async function B() { +>B : () => Promise + + const a = await p; +>a : boolean +>await p : boolean +>p : Promise + + return 1; +>1 : number +} + +// NOTE: This reports a "No best comment type exists among return expressions." error, and is +// ignored to get the types result for the test. +// async function C() { +// try { +// const a = await p; +// return 1; +// } +// catch (e) { +// return 'error'; +// } +// } + +async function D() { +>D : () => Promise + + try { + const a = await p; +>a : boolean +>await p : boolean +>p : Promise + + return 1; +>1 : number + } + catch (e) { +>e : any + } +} + +async function E() { +>E : () => Promise + + try { + const a = await p; +>a : boolean +>await p : boolean +>p : Promise + + return 1; +>1 : number + } + catch (e) { +>e : any + + throw Error(); +>Error() : Error +>Error : ErrorConstructor + } +} + +async function F() { +>F : () => Promise + + try { + const a = await p; +>a : boolean +>await p : boolean +>p : Promise + + return 1; +>1 : number + } + catch (e) { +>e : any + + return Promise.reject(Error()); +>Promise.reject(Error()) : Promise +>Promise.reject : { (reason: any): Promise; (reason: any): Promise; } +>Promise : PromiseConstructor +>reject : { (reason: any): Promise; (reason: any): Promise; } +>Error() : Error +>Error : ErrorConstructor + } +} + +async function G() { +>G : () => Promise + + try { + const a = await p; +>a : boolean +>await p : boolean +>p : Promise + + return a; +>a : boolean + } + catch (e) { +>e : any + + return; + } +} + +async function H() { +>H : () => Promise + + try { + const a = await p; +>a : boolean +>await p : boolean +>p : Promise + + return a; +>a : boolean + } + catch (e) { +>e : any + + throw Error(); +>Error() : Error +>Error : ErrorConstructor + } +} + +async function I() { +>I : () => Promise + + try { + const a = await p; +>a : boolean +>await p : boolean +>p : Promise + + return a; +>a : boolean + } + catch (e) { +>e : any + + return Promise.reject(Error()); +>Promise.reject(Error()) : Promise +>Promise.reject : { (reason: any): Promise; (reason: any): Promise; } +>Promise : PromiseConstructor +>reject : { (reason: any): Promise; (reason: any): Promise; } +>Error() : Error +>Error : ErrorConstructor + } +} diff --git a/tests/baselines/reference/promiseVoidErrorCallback.symbols b/tests/baselines/reference/promiseVoidErrorCallback.symbols index b2959f139ea..67747f5f150 100644 --- a/tests/baselines/reference/promiseVoidErrorCallback.symbols +++ b/tests/baselines/reference/promiseVoidErrorCallback.symbols @@ -47,12 +47,12 @@ function f2(x: T1): T2 { var x3 = f1() >x3 : Symbol(x3, Decl(promiseVoidErrorCallback.ts, 20, 3)) ->f1() .then(f2, (e: Error) => { throw e;}) .then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) ->f1() .then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>f1() .then(f2, (e: Error) => { throw e;}) .then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>f1() .then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) >f1 : Symbol(f1, Decl(promiseVoidErrorCallback.ts, 10, 1)) .then(f2, (e: Error) => { ->then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) >f2 : Symbol(f2, Decl(promiseVoidErrorCallback.ts, 14, 1)) >e : Symbol(e, Decl(promiseVoidErrorCallback.ts, 21, 15)) >Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) @@ -62,7 +62,7 @@ var x3 = f1() }) .then((x: T2) => { ->then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) +>then : Symbol(Promise.then, Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --)) >x : Symbol(x, Decl(promiseVoidErrorCallback.ts, 24, 11)) >T2 : Symbol(T2, Decl(promiseVoidErrorCallback.ts, 2, 1)) diff --git a/tests/baselines/reference/promiseVoidErrorCallback.types b/tests/baselines/reference/promiseVoidErrorCallback.types index b536ab089bd..94773394ade 100644 --- a/tests/baselines/reference/promiseVoidErrorCallback.types +++ b/tests/baselines/reference/promiseVoidErrorCallback.types @@ -54,14 +54,14 @@ function f2(x: T1): T2 { var x3 = f1() >x3 : Promise<{ __t3: string; }> >f1() .then(f2, (e: Error) => { throw e;}) .then((x: T2) => { return { __t3: x.__t2 + "bar" };}) : Promise<{ __t3: string; }> ->f1() .then(f2, (e: Error) => { throw e;}) .then : { (onfulfilled?: (value: T2) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: T2) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>f1() .then(f2, (e: Error) => { throw e;}) .then : { (onfulfilled: (value: T2) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: T2) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: T2) => TResult | PromiseLike): Promise; (): Promise; } >f1() .then(f2, (e: Error) => { throw e;}) : Promise ->f1() .then : { (onfulfilled?: (value: T1) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: T1) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>f1() .then : { (onfulfilled: (value: T1) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: T1) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: T1) => TResult | PromiseLike): Promise; (): Promise; } >f1() : Promise >f1 : () => Promise .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; } +>then : { (onfulfilled: (value: T1) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: T1) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: T1) => TResult | PromiseLike): Promise; (): Promise; } >f2 : (x: T1) => T2 >(e: Error) => { throw e;} : (e: Error) => never >e : Error @@ -72,7 +72,7 @@ var x3 = f1() }) .then((x: T2) => { ->then : { (onfulfilled?: (value: T2) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: T2) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } +>then : { (onfulfilled: (value: T2) => TResult1 | PromiseLike, onrejected: (reason: any) => TResult2 | PromiseLike): Promise; (onfulfilled: (value: T2) => TResult | PromiseLike, onrejected: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled: (value: T2) => TResult | PromiseLike): Promise; (): Promise; } >(x: T2) => { return { __t3: x.__t2 + "bar" };} : (x: T2) => { __t3: string; } >x : T2 >T2 : T2 diff --git a/tests/baselines/reference/requireOfAnEmptyFile1.errors.txt b/tests/baselines/reference/requireOfAnEmptyFile1.errors.txt index d02593feff9..922ff48ef58 100644 --- a/tests/baselines/reference/requireOfAnEmptyFile1.errors.txt +++ b/tests/baselines/reference/requireOfAnEmptyFile1.errors.txt @@ -6,7 +6,7 @@ tests/cases/compiler/requireOfAnEmptyFile1_a.ts(3,21): error TS2306: File 'tests import fs = require('./requireOfAnEmptyFile1_b'); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2306: File 'requireOfAnEmptyFile1_b.ts' is not a module. +!!! error TS2306: File 'tests/cases/compiler/requireOfAnEmptyFile1_b.ts' is not a module. ==== tests/cases/compiler/requireOfAnEmptyFile1_b.ts (0 errors) ==== \ No newline at end of file diff --git a/tests/baselines/reference/restParamModifier2.errors.txt b/tests/baselines/reference/restParamModifier2.errors.txt index 773592fa9bf..032f657c107 100644 --- a/tests/baselines/reference/restParamModifier2.errors.txt +++ b/tests/baselines/reference/restParamModifier2.errors.txt @@ -1,9 +1,9 @@ -tests/cases/compiler/restParamModifier2.ts(2,24): error TS1005: ',' expected. +tests/cases/compiler/restParamModifier2.ts(2,17): error TS1317: A parameter property cannot be declared using a rest parameter. ==== tests/cases/compiler/restParamModifier2.ts (1 errors) ==== class C { constructor(public ...rest: string[]) {} - ~~~ -!!! error TS1005: ',' expected. + ~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1317: A parameter property cannot be declared using a rest parameter. } \ No newline at end of file diff --git a/tests/baselines/reference/restParamModifier2.js b/tests/baselines/reference/restParamModifier2.js index ac8376319b3..a11b78a2376 100644 --- a/tests/baselines/reference/restParamModifier2.js +++ b/tests/baselines/reference/restParamModifier2.js @@ -5,11 +5,12 @@ class C { //// [restParamModifier2.js] var C = (function () { - function C(public) { + function C() { var rest = []; - for (var _i = 1; _i < arguments.length; _i++) { - rest[_i - 1] = arguments[_i]; + for (var _i = 0; _i < arguments.length; _i++) { + rest[_i - 0] = arguments[_i]; } + this.rest = rest; } return C; }()); diff --git a/tests/baselines/reference/scannertest1.errors.txt b/tests/baselines/reference/scannertest1.errors.txt index 3831dbe398e..fce2a0b292a 100644 --- a/tests/baselines/reference/scannertest1.errors.txt +++ b/tests/baselines/reference/scannertest1.errors.txt @@ -19,7 +19,7 @@ tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2304 ==== tests/cases/conformance/scanner/ecmascript5/scannertest1.ts (16 errors) ==== /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'References.ts' not found. +!!! error TS6053: File 'tests/cases/conformance/scanner/ecmascript5/References.ts' not found. class CharacterInfo { public static isDecimalDigit(c: number): boolean { diff --git a/tests/baselines/reference/selfReferencingFile2.errors.txt b/tests/baselines/reference/selfReferencingFile2.errors.txt index c993616784a..002e087d60e 100644 --- a/tests/baselines/reference/selfReferencingFile2.errors.txt +++ b/tests/baselines/reference/selfReferencingFile2.errors.txt @@ -4,7 +4,7 @@ tests/cases/compiler/selfReferencingFile2.ts(1,1): error TS6053: File 'tests/cas ==== tests/cases/compiler/selfReferencingFile2.ts (1 errors) ==== /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'selfReferencingFile2.ts' not found. +!!! error TS6053: File 'tests/cases/selfReferencingFile2.ts' not found. class selfReferencingFile2 { diff --git a/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.js b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.js new file mode 100644 index 00000000000..b3d61a9f590 --- /dev/null +++ b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.js @@ -0,0 +1,32 @@ +//// [jsDocOptionality.js] +function MyClass() { + this.prop = null; +} +/** + * @param {string} required + * @param {string} [notRequired] + * @returns {MyClass} + */ +MyClass.prototype.optionalParam = function(required, notRequired) { + return this; +}; +let pInst = new MyClass(); +let c1 = pInst.optionalParam('hello') +let c2 = pInst.optionalParam('hello', null) + + +//// [out_1.js] +function MyClass() { + this.prop = null; +} +/** + * @param {string} required + * @param {string} [notRequired] + * @returns {MyClass} + */ +MyClass.prototype.optionalParam = function (required, notRequired) { + return this; +}; +var pInst = new MyClass(); +var c1 = pInst.optionalParam('hello'); +var c2 = pInst.optionalParam('hello', null); diff --git a/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.symbols b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.symbols new file mode 100644 index 00000000000..52fc8b9a9a9 --- /dev/null +++ b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.symbols @@ -0,0 +1,40 @@ +=== tests/cases/compiler/jsDocOptionality.js === +function MyClass() { +>MyClass : Symbol(MyClass, Decl(jsDocOptionality.js, 0, 0)) + + this.prop = null; +>prop : Symbol(MyClass.prop, Decl(jsDocOptionality.js, 0, 20)) +} +/** + * @param {string} required + * @param {string} [notRequired] + * @returns {MyClass} + */ +MyClass.prototype.optionalParam = function(required, notRequired) { +>MyClass.prototype : Symbol(MyClass.optionalParam, Decl(jsDocOptionality.js, 2, 1)) +>MyClass : Symbol(MyClass, Decl(jsDocOptionality.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>optionalParam : Symbol(MyClass.optionalParam, Decl(jsDocOptionality.js, 2, 1)) +>required : Symbol(required, Decl(jsDocOptionality.js, 8, 43)) +>notRequired : Symbol(notRequired, Decl(jsDocOptionality.js, 8, 52)) + + return this; +>this : Symbol(MyClass, Decl(jsDocOptionality.js, 0, 0)) + +}; +let pInst = new MyClass(); +>pInst : Symbol(pInst, Decl(jsDocOptionality.js, 11, 3)) +>MyClass : Symbol(MyClass, Decl(jsDocOptionality.js, 0, 0)) + +let c1 = pInst.optionalParam('hello') +>c1 : Symbol(c1, Decl(jsDocOptionality.js, 12, 3)) +>pInst.optionalParam : Symbol(MyClass.optionalParam, Decl(jsDocOptionality.js, 2, 1)) +>pInst : Symbol(pInst, Decl(jsDocOptionality.js, 11, 3)) +>optionalParam : Symbol(MyClass.optionalParam, Decl(jsDocOptionality.js, 2, 1)) + +let c2 = pInst.optionalParam('hello', null) +>c2 : Symbol(c2, Decl(jsDocOptionality.js, 13, 3)) +>pInst.optionalParam : Symbol(MyClass.optionalParam, Decl(jsDocOptionality.js, 2, 1)) +>pInst : Symbol(pInst, Decl(jsDocOptionality.js, 11, 3)) +>optionalParam : Symbol(MyClass.optionalParam, Decl(jsDocOptionality.js, 2, 1)) + diff --git a/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.types b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.types new file mode 100644 index 00000000000..48d44bb5406 --- /dev/null +++ b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.types @@ -0,0 +1,53 @@ +=== tests/cases/compiler/jsDocOptionality.js === +function MyClass() { +>MyClass : () => void + + this.prop = null; +>this.prop = null : null +>this.prop : any +>this : any +>prop : any +>null : null +} +/** + * @param {string} required + * @param {string} [notRequired] + * @returns {MyClass} + */ +MyClass.prototype.optionalParam = function(required, notRequired) { +>MyClass.prototype.optionalParam = function(required, notRequired) { return this;} : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } +>MyClass.prototype.optionalParam : any +>MyClass.prototype : any +>MyClass : () => void +>prototype : any +>optionalParam : any +>function(required, notRequired) { return this;} : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } +>required : string +>notRequired : string + + return this; +>this : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } + +}; +let pInst = new MyClass(); +>pInst : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>new MyClass() : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>MyClass : () => void + +let c1 = pInst.optionalParam('hello') +>c1 : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>pInst.optionalParam('hello') : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>pInst.optionalParam : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } +>pInst : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>optionalParam : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } +>'hello' : string + +let c2 = pInst.optionalParam('hello', null) +>c2 : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>pInst.optionalParam('hello', null) : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>pInst.optionalParam : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } +>pInst : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>optionalParam : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } +>'hello' : string +>null : null + diff --git a/tests/baselines/reference/strictNullLogicalAndOr.js b/tests/baselines/reference/strictNullLogicalAndOr.js new file mode 100644 index 00000000000..f4dafe334b5 --- /dev/null +++ b/tests/baselines/reference/strictNullLogicalAndOr.js @@ -0,0 +1,26 @@ +//// [strictNullLogicalAndOr.ts] + +// Repro from #9113 + +let sinOrCos = Math.random() < .5; +let choice = sinOrCos && Math.sin || Math.cos; + +choice(Math.PI); + +function sq(n?: number): number { + const r = n !== undefined && n*n || 0; + return r; +} + +sq(3); + +//// [strictNullLogicalAndOr.js] +// Repro from #9113 +var sinOrCos = Math.random() < .5; +var choice = sinOrCos && Math.sin || Math.cos; +choice(Math.PI); +function sq(n) { + var r = n !== undefined && n * n || 0; + return r; +} +sq(3); diff --git a/tests/baselines/reference/strictNullLogicalAndOr.symbols b/tests/baselines/reference/strictNullLogicalAndOr.symbols new file mode 100644 index 00000000000..8bb0343b9c0 --- /dev/null +++ b/tests/baselines/reference/strictNullLogicalAndOr.symbols @@ -0,0 +1,44 @@ +=== tests/cases/compiler/strictNullLogicalAndOr.ts === + +// Repro from #9113 + +let sinOrCos = Math.random() < .5; +>sinOrCos : Symbol(sinOrCos, Decl(strictNullLogicalAndOr.ts, 3, 3)) +>Math.random : Symbol(Math.random, Decl(lib.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>random : Symbol(Math.random, Decl(lib.d.ts, --, --)) + +let choice = sinOrCos && Math.sin || Math.cos; +>choice : Symbol(choice, Decl(strictNullLogicalAndOr.ts, 4, 3)) +>sinOrCos : Symbol(sinOrCos, Decl(strictNullLogicalAndOr.ts, 3, 3)) +>Math.sin : Symbol(Math.sin, Decl(lib.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>sin : Symbol(Math.sin, Decl(lib.d.ts, --, --)) +>Math.cos : Symbol(Math.cos, Decl(lib.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>cos : Symbol(Math.cos, Decl(lib.d.ts, --, --)) + +choice(Math.PI); +>choice : Symbol(choice, Decl(strictNullLogicalAndOr.ts, 4, 3)) +>Math.PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>PI : Symbol(Math.PI, Decl(lib.d.ts, --, --)) + +function sq(n?: number): number { +>sq : Symbol(sq, Decl(strictNullLogicalAndOr.ts, 6, 16)) +>n : Symbol(n, Decl(strictNullLogicalAndOr.ts, 8, 12)) + + const r = n !== undefined && n*n || 0; +>r : Symbol(r, Decl(strictNullLogicalAndOr.ts, 9, 7)) +>n : Symbol(n, Decl(strictNullLogicalAndOr.ts, 8, 12)) +>undefined : Symbol(undefined) +>n : Symbol(n, Decl(strictNullLogicalAndOr.ts, 8, 12)) +>n : Symbol(n, Decl(strictNullLogicalAndOr.ts, 8, 12)) + + return r; +>r : Symbol(r, Decl(strictNullLogicalAndOr.ts, 9, 7)) +} + +sq(3); +>sq : Symbol(sq, Decl(strictNullLogicalAndOr.ts, 6, 16)) + diff --git a/tests/baselines/reference/strictNullLogicalAndOr.types b/tests/baselines/reference/strictNullLogicalAndOr.types new file mode 100644 index 00000000000..a11a7033fb6 --- /dev/null +++ b/tests/baselines/reference/strictNullLogicalAndOr.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/strictNullLogicalAndOr.ts === + +// Repro from #9113 + +let sinOrCos = Math.random() < .5; +>sinOrCos : boolean +>Math.random() < .5 : boolean +>Math.random() : number +>Math.random : () => number +>Math : Math +>random : () => number +>.5 : number + +let choice = sinOrCos && Math.sin || Math.cos; +>choice : (x: number) => number +>sinOrCos && Math.sin || Math.cos : (x: number) => number +>sinOrCos && Math.sin : (x: number) => number +>sinOrCos : boolean +>Math.sin : (x: number) => number +>Math : Math +>sin : (x: number) => number +>Math.cos : (x: number) => number +>Math : Math +>cos : (x: number) => number + +choice(Math.PI); +>choice(Math.PI) : number +>choice : (x: number) => number +>Math.PI : number +>Math : Math +>PI : number + +function sq(n?: number): number { +>sq : (n?: number | undefined) => number +>n : number | undefined + + const r = n !== undefined && n*n || 0; +>r : number +>n !== undefined && n*n || 0 : number +>n !== undefined && n*n : number +>n !== undefined : boolean +>n : number | undefined +>undefined : undefined +>n*n : number +>n : number +>n : number +>0 : number + + return r; +>r : number +} + +sq(3); +>sq(3) : number +>sq : (n?: number | undefined) => number +>3 : number + diff --git a/tests/baselines/reference/switchCaseCircularRefeference.errors.txt b/tests/baselines/reference/switchCaseCircularRefeference.errors.txt new file mode 100644 index 00000000000..9ee571de468 --- /dev/null +++ b/tests/baselines/reference/switchCaseCircularRefeference.errors.txt @@ -0,0 +1,18 @@ +tests/cases/compiler/switchCaseCircularRefeference.ts(5,10): error TS2678: Type '{ a: "A"; b: any; } | { a: "C"; e: any; }' is not comparable to type '"A" | "C"'. + Type '{ a: "C"; e: any; }' is not comparable to type '"A" | "C"'. + Type '{ a: "C"; e: any; }' is not comparable to type '"C"'. + + +==== tests/cases/compiler/switchCaseCircularRefeference.ts (1 errors) ==== + // Repro from #9507 + + function f(x: {a: "A", b} | {a: "C", e}) { + switch (x.a) { + case x: + ~ +!!! error TS2678: Type '{ a: "A"; b: any; } | { a: "C"; e: any; }' is not comparable to type '"A" | "C"'. +!!! error TS2678: Type '{ a: "C"; e: any; }' is not comparable to type '"A" | "C"'. +!!! error TS2678: Type '{ a: "C"; e: any; }' is not comparable to type '"C"'. + break; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/switchCaseCircularRefeference.js b/tests/baselines/reference/switchCaseCircularRefeference.js new file mode 100644 index 00000000000..7ef901511cf --- /dev/null +++ b/tests/baselines/reference/switchCaseCircularRefeference.js @@ -0,0 +1,18 @@ +//// [switchCaseCircularRefeference.ts] +// Repro from #9507 + +function f(x: {a: "A", b} | {a: "C", e}) { + switch (x.a) { + case x: + break; + } +} + +//// [switchCaseCircularRefeference.js] +// Repro from #9507 +function f(x) { + switch (x.a) { + case x: + break; + } +} diff --git a/tests/baselines/reference/thisTypeInAccessors.symbols b/tests/baselines/reference/thisTypeInAccessors.symbols index ef2201d3808..a68341dfc14 100644 --- a/tests/baselines/reference/thisTypeInAccessors.symbols +++ b/tests/baselines/reference/thisTypeInAccessors.symbols @@ -20,7 +20,7 @@ const explicit = { >this : Symbol(this, Decl(thisTypeInAccessors.ts, 7, 10)) >Foo : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 7, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) set x(this: Foo, n: number) { this.n = n; } @@ -29,7 +29,7 @@ const explicit = { >Foo : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 8, 20)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 8, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 8, 20)) } @@ -44,14 +44,14 @@ const copiedFromGetter = { >this : Symbol(this, Decl(thisTypeInAccessors.ts, 12, 10)) >Foo : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 12, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) set x(n) { this.n = n; } >x : Symbol(x, Decl(thisTypeInAccessors.ts, 11, 10), Decl(thisTypeInAccessors.ts, 12, 48)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 13, 10)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 12, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 13, 10)) } @@ -64,7 +64,7 @@ const copiedFromSetter = { get x() { return this.n }, >x : Symbol(x, Decl(thisTypeInAccessors.ts, 16, 10), Decl(thisTypeInAccessors.ts, 17, 30)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 18, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) set x(this: Foo, n: number) { this.n = n; } @@ -73,7 +73,7 @@ const copiedFromSetter = { >Foo : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 18, 20)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 18, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 18, 20)) } @@ -88,7 +88,7 @@ const copiedFromGetterUnannotated = { >this : Symbol(this, Decl(thisTypeInAccessors.ts, 22, 10)) >Foo : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 22, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) set x(this, n) { this.n = n; } @@ -96,7 +96,7 @@ const copiedFromGetterUnannotated = { >this : Symbol(this, Decl(thisTypeInAccessors.ts, 23, 10)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 23, 15)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 23, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 23, 15)) } @@ -112,7 +112,7 @@ class Explicit { >this : Symbol(this, Decl(thisTypeInAccessors.ts, 28, 10)) >Foo : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 28, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) set x(this: Foo, n: number) { this.n = n; } @@ -121,7 +121,7 @@ class Explicit { >Foo : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 29, 20)) >this.n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) ->this : Symbol(Foo, Decl(thisTypeInAccessors.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInAccessors.ts, 29, 10)) >n : Symbol(Foo.n, Decl(thisTypeInAccessors.ts, 0, 15)) >n : Symbol(n, Decl(thisTypeInAccessors.ts, 29, 20)) } diff --git a/tests/baselines/reference/thisTypeInFunctions.symbols b/tests/baselines/reference/thisTypeInFunctions.symbols index 3d4c3f6ecc7..8a0be7427ed 100644 --- a/tests/baselines/reference/thisTypeInFunctions.symbols +++ b/tests/baselines/reference/thisTypeInFunctions.symbols @@ -19,7 +19,7 @@ class C { return this.n + m; >this.n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) ->this : Symbol(C, Decl(thisTypeInFunctions.ts, 3, 1)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 6, 17)) >n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 6, 28)) } @@ -31,7 +31,7 @@ class C { return this.n + m; >this.n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) ->this : Symbol(C, Decl(thisTypeInFunctions.ts, 3, 1)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 9, 14)) >n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 9, 22)) } @@ -43,7 +43,7 @@ class C { return this.n + m; >this.n : Symbol(n, Decl(thisTypeInFunctions.ts, 12, 28)) ->this : Symbol(, Decl(thisTypeInFunctions.ts, 12, 26)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 12, 21)) >n : Symbol(n, Decl(thisTypeInFunctions.ts, 12, 28)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 12, 39)) } @@ -97,7 +97,7 @@ function explicitStructural(this: { y: number }, x: number): number { return x + this.y; >x : Symbol(x, Decl(thisTypeInFunctions.ts, 28, 48)) >this.y : Symbol(y, Decl(thisTypeInFunctions.ts, 28, 35)) ->this : Symbol(, Decl(thisTypeInFunctions.ts, 28, 33)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 28, 28)) >y : Symbol(y, Decl(thisTypeInFunctions.ts, 28, 35)) } function justThis(this: { y: number }): number { @@ -107,7 +107,7 @@ function justThis(this: { y: number }): number { return this.y; >this.y : Symbol(y, Decl(thisTypeInFunctions.ts, 31, 25)) ->this : Symbol(, Decl(thisTypeInFunctions.ts, 31, 23)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 31, 18)) >y : Symbol(y, Decl(thisTypeInFunctions.ts, 31, 25)) } function implicitThis(n: number): number { @@ -435,7 +435,7 @@ c.explicitC = function(this: C, m: number) { return this.n + m }; >C : Symbol(C, Decl(thisTypeInFunctions.ts, 3, 1)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 105, 31)) >this.n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) ->this : Symbol(C, Decl(thisTypeInFunctions.ts, 3, 1)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 105, 23)) >n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 105, 31)) @@ -453,7 +453,7 @@ c.explicitProperty = function(this: {n: number}, m: number) { return this.n + m >n : Symbol(n, Decl(thisTypeInFunctions.ts, 107, 37)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 107, 48)) >this.n : Symbol(n, Decl(thisTypeInFunctions.ts, 107, 37)) ->this : Symbol(, Decl(thisTypeInFunctions.ts, 107, 35)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 107, 30)) >n : Symbol(n, Decl(thisTypeInFunctions.ts, 107, 37)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 107, 48)) @@ -525,7 +525,7 @@ c.explicitThis = function(this: C, m: number) { return this.n + m }; >C : Symbol(C, Decl(thisTypeInFunctions.ts, 3, 1)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 123, 34)) >this.n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) ->this : Symbol(C, Decl(thisTypeInFunctions.ts, 3, 1)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 123, 26)) >n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 123, 34)) @@ -568,7 +568,7 @@ c.explicitThis = function(this, m) { return this.n + m }; >this : Symbol(this, Decl(thisTypeInFunctions.ts, 131, 26)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 131, 31)) >this.n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) ->this : Symbol(C, Decl(thisTypeInFunctions.ts, 3, 1)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 131, 26)) >n : Symbol(C.n, Decl(thisTypeInFunctions.ts, 4, 9)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 131, 31)) @@ -581,7 +581,7 @@ c.explicitC = function(this: B, m: number) { return this.n + m }; >B : Symbol(B, Decl(thisTypeInFunctions.ts, 0, 0)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 134, 31)) >this.n : Symbol(B.n, Decl(thisTypeInFunctions.ts, 1, 9)) ->this : Symbol(B, Decl(thisTypeInFunctions.ts, 0, 0)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 134, 23)) >n : Symbol(B.n, Decl(thisTypeInFunctions.ts, 1, 9)) >m : Symbol(m, Decl(thisTypeInFunctions.ts, 134, 31)) @@ -604,7 +604,7 @@ class Base1 { >polymorphic : Symbol(Base1.polymorphic, Decl(thisTypeInFunctions.ts, 141, 14)) >this : Symbol(this, Decl(thisTypeInFunctions.ts, 142, 23)) >this.x : Symbol(Base1.x, Decl(thisTypeInFunctions.ts, 140, 13)) ->this : Symbol(Base1, Decl(thisTypeInFunctions.ts, 137, 24)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 142, 23)) >x : Symbol(Base1.x, Decl(thisTypeInFunctions.ts, 140, 13)) explicit(this: Base1): number { return this.x; } @@ -612,7 +612,7 @@ class Base1 { >this : Symbol(this, Decl(thisTypeInFunctions.ts, 143, 13)) >Base1 : Symbol(Base1, Decl(thisTypeInFunctions.ts, 137, 24)) >this.x : Symbol(Base1.x, Decl(thisTypeInFunctions.ts, 140, 13)) ->this : Symbol(Base1, Decl(thisTypeInFunctions.ts, 137, 24)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 143, 13)) >x : Symbol(Base1.x, Decl(thisTypeInFunctions.ts, 140, 13)) static explicitStatic(this: typeof Base1): number { return this.y; } @@ -620,7 +620,7 @@ class Base1 { >this : Symbol(this, Decl(thisTypeInFunctions.ts, 144, 26)) >Base1 : Symbol(Base1, Decl(thisTypeInFunctions.ts, 137, 24)) >this.y : Symbol(Base1.y, Decl(thisTypeInFunctions.ts, 144, 72)) ->this : Symbol(Base1, Decl(thisTypeInFunctions.ts, 137, 24)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 144, 26)) >y : Symbol(Base1.y, Decl(thisTypeInFunctions.ts, 144, 72)) static y: number; @@ -643,7 +643,7 @@ class Base2 { >polymorphic : Symbol(Base2.polymorphic, Decl(thisTypeInFunctions.ts, 151, 13)) >this : Symbol(this, Decl(thisTypeInFunctions.ts, 152, 16)) >this.y : Symbol(Base2.y, Decl(thisTypeInFunctions.ts, 150, 13)) ->this : Symbol(Base2, Decl(thisTypeInFunctions.ts, 149, 1)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 152, 16)) >y : Symbol(Base2.y, Decl(thisTypeInFunctions.ts, 150, 13)) explicit(this: Base1): number { return this.x; } @@ -651,7 +651,7 @@ class Base2 { >this : Symbol(this, Decl(thisTypeInFunctions.ts, 153, 13)) >Base1 : Symbol(Base1, Decl(thisTypeInFunctions.ts, 137, 24)) >this.x : Symbol(Base1.x, Decl(thisTypeInFunctions.ts, 140, 13)) ->this : Symbol(Base1, Decl(thisTypeInFunctions.ts, 137, 24)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 153, 13)) >x : Symbol(Base1.x, Decl(thisTypeInFunctions.ts, 140, 13)) } class Derived2 extends Base2 { @@ -734,7 +734,7 @@ function InterfaceThis(this: I) { this.a = 12; >this.a : Symbol(I.a, Decl(thisTypeInFunctions.ts, 20, 13)) ->this : Symbol(I, Decl(thisTypeInFunctions.ts, 19, 21)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 172, 23)) >a : Symbol(I.a, Decl(thisTypeInFunctions.ts, 20, 13)) } function LiteralTypeThis(this: {x: string}) { @@ -744,7 +744,7 @@ function LiteralTypeThis(this: {x: string}) { this.x = "ok"; >this.x : Symbol(x, Decl(thisTypeInFunctions.ts, 175, 32)) ->this : Symbol(, Decl(thisTypeInFunctions.ts, 175, 30)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 175, 25)) >x : Symbol(x, Decl(thisTypeInFunctions.ts, 175, 32)) } function AnyThis(this: any) { @@ -752,6 +752,7 @@ function AnyThis(this: any) { >this : Symbol(this, Decl(thisTypeInFunctions.ts, 178, 17)) this.x = "ok"; +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 178, 17)) } let interfaceThis = new InterfaceThis(); >interfaceThis : Symbol(interfaceThis, Decl(thisTypeInFunctions.ts, 181, 3)) @@ -793,5 +794,6 @@ function missingTypeIsImplicitAny(this, a: number) { return this.anything + a; } >missingTypeIsImplicitAny : Symbol(missingTypeIsImplicitAny, Decl(thisTypeInFunctions.ts, 190, 27)) >this : Symbol(this, Decl(thisTypeInFunctions.ts, 192, 34)) >a : Symbol(a, Decl(thisTypeInFunctions.ts, 192, 39)) +>this : Symbol(this, Decl(thisTypeInFunctions.ts, 192, 34)) >a : Symbol(a, Decl(thisTypeInFunctions.ts, 192, 39)) diff --git a/tests/baselines/reference/thisTypeInFunctions.types b/tests/baselines/reference/thisTypeInFunctions.types index ddef8544a54..24c4fb87baf 100644 --- a/tests/baselines/reference/thisTypeInFunctions.types +++ b/tests/baselines/reference/thisTypeInFunctions.types @@ -692,11 +692,11 @@ c.explicitThis = function(m) { return this.n + m }; // this: contextual typing c.explicitThis = function(this, m) { return this.n + m }; ->c.explicitThis = function(this, m) { return this.n + m } : (this: any, m: number) => number +>c.explicitThis = function(this, m) { return this.n + m } : (this: C, m: number) => number >c.explicitThis : (this: C, m: number) => number >c : C >explicitThis : (this: C, m: number) => number ->function(this, m) { return this.n + m } : (this: any, m: number) => number +>function(this, m) { return this.n + m } : (this: C, m: number) => number >this : C >m : number >this.n + m : number diff --git a/tests/baselines/reference/transpile/Correctly serialize metadata when transpile with CommonJS option.js b/tests/baselines/reference/transpile/Correctly serialize metadata when transpile with CommonJS option.js new file mode 100644 index 00000000000..f1e36ae9b15 --- /dev/null +++ b/tests/baselines/reference/transpile/Correctly serialize metadata when transpile with CommonJS option.js @@ -0,0 +1,23 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var ng = require("angular2/core"); +var MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; +}()); +MyClass1 = __decorate([ + fooexport, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) +], MyClass1); +var _a; +//# sourceMappingURL=file.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Correctly serialize metadata when transpile with System option.js b/tests/baselines/reference/transpile/Correctly serialize metadata when transpile with System option.js new file mode 100644 index 00000000000..9e3d59ce27c --- /dev/null +++ b/tests/baselines/reference/transpile/Correctly serialize metadata when transpile with System option.js @@ -0,0 +1,34 @@ +System.register(["angular2/core"], function (exports_1, context_1) { + "use strict"; + var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + 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; + return c > 3 && r && Object.defineProperty(target, key, r), r; + }; + var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); + }; + var __moduleName = context_1 && context_1.id; + var ng, MyClass1, _a; + return { + setters: [ + function (ng_1) { + ng = ng_1; + } + ], + execute: function () { + MyClass1 = (function () { + function MyClass1(_elementRef) { + this._elementRef = _elementRef; + } + return MyClass1; + }()); + MyClass1 = __decorate([ + fooexport, + __metadata("design:paramtypes", [typeof (_a = (typeof ng !== "undefined" && ng).ElementRef) === "function" && _a || Object]) + ], MyClass1); + } + }; +}); +//# sourceMappingURL=file.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Support options with lib values.js b/tests/baselines/reference/transpile/Support options with lib values.js new file mode 100644 index 00000000000..36c68f08b9f --- /dev/null +++ b/tests/baselines/reference/transpile/Support options with lib values.js @@ -0,0 +1,3 @@ +"use strict"; +var a = 10; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Support options with types values.js b/tests/baselines/reference/transpile/Support options with types values.js new file mode 100644 index 00000000000..36c68f08b9f --- /dev/null +++ b/tests/baselines/reference/transpile/Support options with types values.js @@ -0,0 +1,3 @@ +"use strict"; +var a = 10; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting allowJs.js b/tests/baselines/reference/transpile/Supports setting allowJs.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting allowJs.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting allowSyntheticDefaultImports.js b/tests/baselines/reference/transpile/Supports setting allowSyntheticDefaultImports.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting allowSyntheticDefaultImports.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting allowUnreachableCode.js b/tests/baselines/reference/transpile/Supports setting allowUnreachableCode.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting allowUnreachableCode.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting allowUnusedLabels.js b/tests/baselines/reference/transpile/Supports setting allowUnusedLabels.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting allowUnusedLabels.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting baseUrl.js b/tests/baselines/reference/transpile/Supports setting baseUrl.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting baseUrl.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting charset.js b/tests/baselines/reference/transpile/Supports setting charset.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting charset.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting declaration.js b/tests/baselines/reference/transpile/Supports setting declaration.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting declaration.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting declarationDir.js b/tests/baselines/reference/transpile/Supports setting declarationDir.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting declarationDir.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting emitBOM.js b/tests/baselines/reference/transpile/Supports setting emitBOM.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting emitBOM.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting emitDecoratorMetadata.js b/tests/baselines/reference/transpile/Supports setting emitDecoratorMetadata.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting emitDecoratorMetadata.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting experimentalDecorators.js b/tests/baselines/reference/transpile/Supports setting experimentalDecorators.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting experimentalDecorators.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting forceConsistentCasingInFileNames.js b/tests/baselines/reference/transpile/Supports setting forceConsistentCasingInFileNames.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting forceConsistentCasingInFileNames.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting isolatedModules.js b/tests/baselines/reference/transpile/Supports setting isolatedModules.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting isolatedModules.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting jsx.js b/tests/baselines/reference/transpile/Supports setting jsx.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting jsx.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting lib.js b/tests/baselines/reference/transpile/Supports setting lib.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting lib.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting locale.js b/tests/baselines/reference/transpile/Supports setting locale.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting locale.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting module.js b/tests/baselines/reference/transpile/Supports setting module.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting module.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting moduleResolution.js b/tests/baselines/reference/transpile/Supports setting moduleResolution.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting moduleResolution.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting newLine.js b/tests/baselines/reference/transpile/Supports setting newLine.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting newLine.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noEmit.js b/tests/baselines/reference/transpile/Supports setting noEmit.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noEmit.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noEmitHelpers.js b/tests/baselines/reference/transpile/Supports setting noEmitHelpers.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noEmitHelpers.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noEmitOnError.js b/tests/baselines/reference/transpile/Supports setting noEmitOnError.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noEmitOnError.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noErrorTruncation.js b/tests/baselines/reference/transpile/Supports setting noErrorTruncation.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noErrorTruncation.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noFallthroughCasesInSwitch.js b/tests/baselines/reference/transpile/Supports setting noFallthroughCasesInSwitch.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noFallthroughCasesInSwitch.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noImplicitAny.js b/tests/baselines/reference/transpile/Supports setting noImplicitAny.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noImplicitAny.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noImplicitReturns.js b/tests/baselines/reference/transpile/Supports setting noImplicitReturns.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noImplicitReturns.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noImplicitThis.js b/tests/baselines/reference/transpile/Supports setting noImplicitThis.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noImplicitThis.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noImplicitUseStrict.js b/tests/baselines/reference/transpile/Supports setting noImplicitUseStrict.js new file mode 100644 index 00000000000..8394371f908 --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noImplicitUseStrict.js @@ -0,0 +1,2 @@ +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noLib.js b/tests/baselines/reference/transpile/Supports setting noLib.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noLib.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting noResolve.js b/tests/baselines/reference/transpile/Supports setting noResolve.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting noResolve.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting out.js b/tests/baselines/reference/transpile/Supports setting out.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting out.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting outDir.js b/tests/baselines/reference/transpile/Supports setting outDir.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting outDir.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting outFile.js b/tests/baselines/reference/transpile/Supports setting outFile.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting outFile.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting paths.js b/tests/baselines/reference/transpile/Supports setting paths.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting paths.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting preserveConstEnums.js b/tests/baselines/reference/transpile/Supports setting preserveConstEnums.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting preserveConstEnums.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting reactNamespace.js b/tests/baselines/reference/transpile/Supports setting reactNamespace.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting reactNamespace.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting removeComments.js b/tests/baselines/reference/transpile/Supports setting removeComments.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting removeComments.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting rootDir.js b/tests/baselines/reference/transpile/Supports setting rootDir.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting rootDir.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting rootDirs.js b/tests/baselines/reference/transpile/Supports setting rootDirs.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting rootDirs.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting skipDefaultLibCheck.js b/tests/baselines/reference/transpile/Supports setting skipDefaultLibCheck.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting skipDefaultLibCheck.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting skipLibCheck.js b/tests/baselines/reference/transpile/Supports setting skipLibCheck.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting skipLibCheck.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting strictNullChecks.js b/tests/baselines/reference/transpile/Supports setting strictNullChecks.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting strictNullChecks.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting stripInternal.js b/tests/baselines/reference/transpile/Supports setting stripInternal.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting stripInternal.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting suppressExcessPropertyErrors.js b/tests/baselines/reference/transpile/Supports setting suppressExcessPropertyErrors.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting suppressExcessPropertyErrors.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting suppressImplicitAnyIndexErrors.js b/tests/baselines/reference/transpile/Supports setting suppressImplicitAnyIndexErrors.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting suppressImplicitAnyIndexErrors.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting target.js b/tests/baselines/reference/transpile/Supports setting target.js new file mode 100644 index 00000000000..8394371f908 --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting target.js @@ -0,0 +1,2 @@ +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting typeRoots.js b/tests/baselines/reference/transpile/Supports setting typeRoots.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting typeRoots.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Supports setting types.js b/tests/baselines/reference/transpile/Supports setting types.js new file mode 100644 index 00000000000..8d91090453b --- /dev/null +++ b/tests/baselines/reference/transpile/Supports setting types.js @@ -0,0 +1,3 @@ +"use strict"; +x; +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/tests/baselines/reference/tsxDynamicTagName1.js b/tests/baselines/reference/tsxDynamicTagName1.js new file mode 100644 index 00000000000..e77d126dd83 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName1.js @@ -0,0 +1,8 @@ +//// [tsxDynamicTagName1.tsx] + +var CustomTag = "h1"; + Hello World // No error + +//// [tsxDynamicTagName1.jsx] +var CustomTag = "h1"; + Hello World ; // No error diff --git a/tests/baselines/reference/tsxDynamicTagName1.symbols b/tests/baselines/reference/tsxDynamicTagName1.symbols new file mode 100644 index 00000000000..c3ba6440e48 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName1.symbols @@ -0,0 +1,9 @@ +=== tests/cases/conformance/jsx/tsxDynamicTagName1.tsx === + +var CustomTag = "h1"; +>CustomTag : Symbol(CustomTag, Decl(tsxDynamicTagName1.tsx, 1, 3)) + + Hello World // No error +>CustomTag : Symbol(CustomTag, Decl(tsxDynamicTagName1.tsx, 1, 3)) +>CustomTag : Symbol(CustomTag, Decl(tsxDynamicTagName1.tsx, 1, 3)) + diff --git a/tests/baselines/reference/tsxDynamicTagName1.types b/tests/baselines/reference/tsxDynamicTagName1.types new file mode 100644 index 00000000000..005afcf6adb --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName1.types @@ -0,0 +1,11 @@ +=== tests/cases/conformance/jsx/tsxDynamicTagName1.tsx === + +var CustomTag = "h1"; +>CustomTag : string +>"h1" : string + + Hello World // No error +> Hello World : any +>CustomTag : string +>CustomTag : string + diff --git a/tests/baselines/reference/tsxDynamicTagName2.errors.txt b/tests/baselines/reference/tsxDynamicTagName2.errors.txt new file mode 100644 index 00000000000..008a013e379 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName2.errors.txt @@ -0,0 +1,19 @@ +tests/cases/conformance/jsx/tsxDynamicTagName2.tsx(10,1): error TS2339: Property 'customTag' does not exist on type 'JSX.IntrinsicElements'. +tests/cases/conformance/jsx/tsxDynamicTagName2.tsx(10,25): error TS2339: Property 'customTag' does not exist on type 'JSX.IntrinsicElements'. + + +==== tests/cases/conformance/jsx/tsxDynamicTagName2.tsx (2 errors) ==== + + declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + } + } + + var customTag = "h1"; + Hello World // This should be an error. The lower-case is look up as an intrinsic element name + ~~~~~~~~~~~ +!!! error TS2339: Property 'customTag' does not exist on type 'JSX.IntrinsicElements'. + ~~~~~~~~~~~~ +!!! error TS2339: Property 'customTag' does not exist on type 'JSX.IntrinsicElements'. \ No newline at end of file diff --git a/tests/baselines/reference/tsxDynamicTagName2.js b/tests/baselines/reference/tsxDynamicTagName2.js new file mode 100644 index 00000000000..7fb7bb1a965 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName2.js @@ -0,0 +1,15 @@ +//// [tsxDynamicTagName2.tsx] + +declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + } +} + +var customTag = "h1"; + Hello World // This should be an error. The lower-case is look up as an intrinsic element name + +//// [tsxDynamicTagName2.jsx] +var customTag = "h1"; + Hello World ; // This should be an error. The lower-case is look up as an intrinsic element name diff --git a/tests/baselines/reference/tsxDynamicTagName3.errors.txt b/tests/baselines/reference/tsxDynamicTagName3.errors.txt new file mode 100644 index 00000000000..40c10c63f53 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName3.errors.txt @@ -0,0 +1,16 @@ +tests/cases/conformance/jsx/tsxDynamicTagName3.tsx(10,1): error TS2339: Property 'h1' does not exist on type 'JSX.IntrinsicElements'. + + +==== tests/cases/conformance/jsx/tsxDynamicTagName3.tsx (1 errors) ==== + + declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + } + } + + var CustomTag: "h1" = "h1"; + Hello World // This should be an error. we will try look up string literal type in JSX.IntrinsicElements + ~~~~~~~~~~~ +!!! error TS2339: Property 'h1' does not exist on type 'JSX.IntrinsicElements'. \ No newline at end of file diff --git a/tests/baselines/reference/tsxDynamicTagName3.js b/tests/baselines/reference/tsxDynamicTagName3.js new file mode 100644 index 00000000000..63c2a0a398b --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName3.js @@ -0,0 +1,15 @@ +//// [tsxDynamicTagName3.tsx] + +declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + } +} + +var CustomTag: "h1" = "h1"; + Hello World // This should be an error. we will try look up string literal type in JSX.IntrinsicElements + +//// [tsxDynamicTagName3.jsx] +var CustomTag = "h1"; + Hello World ; // This should be an error. we will try look up string literal type in JSX.IntrinsicElements diff --git a/tests/baselines/reference/tsxDynamicTagName4.js b/tests/baselines/reference/tsxDynamicTagName4.js new file mode 100644 index 00000000000..e708273237d --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName4.js @@ -0,0 +1,16 @@ +//// [tsxDynamicTagName4.tsx] + +declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + h1: any + } +} + +var CustomTag: "h1" = "h1"; + Hello World + +//// [tsxDynamicTagName4.jsx] +var CustomTag = "h1"; + Hello World ; diff --git a/tests/baselines/reference/tsxDynamicTagName4.symbols b/tests/baselines/reference/tsxDynamicTagName4.symbols new file mode 100644 index 00000000000..3f0fe57ce1f --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName4.symbols @@ -0,0 +1,26 @@ +=== tests/cases/conformance/jsx/tsxDynamicTagName4.tsx === + +declare module JSX { +>JSX : Symbol(JSX, Decl(tsxDynamicTagName4.tsx, 0, 0)) + + interface Element { } +>Element : Symbol(Element, Decl(tsxDynamicTagName4.tsx, 1, 20)) + + interface IntrinsicElements { +>IntrinsicElements : Symbol(IntrinsicElements, Decl(tsxDynamicTagName4.tsx, 2, 22)) + + div: any +>div : Symbol(IntrinsicElements.div, Decl(tsxDynamicTagName4.tsx, 3, 30)) + + h1: any +>h1 : Symbol(IntrinsicElements.h1, Decl(tsxDynamicTagName4.tsx, 4, 10)) + } +} + +var CustomTag: "h1" = "h1"; +>CustomTag : Symbol(CustomTag, Decl(tsxDynamicTagName4.tsx, 9, 3)) + + Hello World +>CustomTag : Symbol(CustomTag, Decl(tsxDynamicTagName4.tsx, 9, 3)) +>CustomTag : Symbol(CustomTag, Decl(tsxDynamicTagName4.tsx, 9, 3)) + diff --git a/tests/baselines/reference/tsxDynamicTagName4.types b/tests/baselines/reference/tsxDynamicTagName4.types new file mode 100644 index 00000000000..3a9a34f2898 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName4.types @@ -0,0 +1,28 @@ +=== tests/cases/conformance/jsx/tsxDynamicTagName4.tsx === + +declare module JSX { +>JSX : any + + interface Element { } +>Element : Element + + interface IntrinsicElements { +>IntrinsicElements : IntrinsicElements + + div: any +>div : any + + h1: any +>h1 : any + } +} + +var CustomTag: "h1" = "h1"; +>CustomTag : "h1" +>"h1" : "h1" + + Hello World +> Hello World : JSX.Element +>CustomTag : "h1" +>CustomTag : "h1" + diff --git a/tests/baselines/reference/tsxDynamicTagName5.js b/tests/baselines/reference/tsxDynamicTagName5.js new file mode 100644 index 00000000000..a8d154998e1 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName5.js @@ -0,0 +1,41 @@ +//// [tests/cases/conformance/jsx/tsxDynamicTagName5.tsx] //// + +//// [react.d.ts] + +declare module 'react' { + class Component { } +} + +//// [app.tsx] +import * as React from 'react'; + +export class Text extends React.Component<{}, {}> { + _tagName: string = 'div'; + + render() { + return ( + + ); + } +} + +//// [app.jsx] +"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 Text = (function (_super) { + __extends(Text, _super); + function Text() { + _super.apply(this, arguments); + this._tagName = 'div'; + } + Text.prototype.render = function () { + return (); + }; + return Text; +}(React.Component)); +exports.Text = Text; diff --git a/tests/baselines/reference/tsxDynamicTagName5.symbols b/tests/baselines/reference/tsxDynamicTagName5.symbols new file mode 100644 index 00000000000..9abac5521c9 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName5.symbols @@ -0,0 +1,34 @@ +=== tests/cases/conformance/jsx/react.d.ts === + +declare module 'react' { + class Component { } +>Component : Symbol(Component, Decl(react.d.ts, 1, 24)) +>T : Symbol(T, Decl(react.d.ts, 2, 17)) +>U : Symbol(U, Decl(react.d.ts, 2, 19)) +} + +=== tests/cases/conformance/jsx/app.tsx === +import * as React from 'react'; +>React : Symbol(React, Decl(app.tsx, 0, 6)) + +export class Text extends React.Component<{}, {}> { +>Text : Symbol(Text, Decl(app.tsx, 0, 31)) +>React.Component : Symbol(React.Component, Decl(react.d.ts, 1, 24)) +>React : Symbol(React, Decl(app.tsx, 0, 6)) +>Component : Symbol(React.Component, Decl(react.d.ts, 1, 24)) + + _tagName: string = 'div'; +>_tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) + + render() { +>render : Symbol(Text.render, Decl(app.tsx, 3, 27)) + + return ( + +>this._tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) +>this : Symbol(Text, Decl(app.tsx, 0, 31)) +>_tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) + + ); + } +} diff --git a/tests/baselines/reference/tsxDynamicTagName5.types b/tests/baselines/reference/tsxDynamicTagName5.types new file mode 100644 index 00000000000..ac4ee31141a --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName5.types @@ -0,0 +1,38 @@ +=== tests/cases/conformance/jsx/react.d.ts === + +declare module 'react' { + class Component { } +>Component : Component +>T : T +>U : U +} + +=== tests/cases/conformance/jsx/app.tsx === +import * as React from 'react'; +>React : typeof React + +export class Text extends React.Component<{}, {}> { +>Text : Text +>React.Component : React.Component<{}, {}> +>React : typeof React +>Component : typeof React.Component + + _tagName: string = 'div'; +>_tagName : string +>'div' : string + + render() { +>render : () => any + + return ( +>( ) : any + + +> : any +>this._tagName : string +>this : this +>_tagName : string + + ); + } +} diff --git a/tests/baselines/reference/tsxDynamicTagName6.js b/tests/baselines/reference/tsxDynamicTagName6.js new file mode 100644 index 00000000000..a7ec12b50b7 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName6.js @@ -0,0 +1,15 @@ +//// [tsxDynamicTagName6.tsx] + +declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + } +} + +const t = {tag:'h1'} +const foo = // No error + +//// [tsxDynamicTagName6.jsx] +var t = { tag: 'h1' }; +var foo = ; // No error diff --git a/tests/baselines/reference/tsxDynamicTagName6.symbols b/tests/baselines/reference/tsxDynamicTagName6.symbols new file mode 100644 index 00000000000..f1afd91eacb --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName6.symbols @@ -0,0 +1,26 @@ +=== tests/cases/conformance/jsx/tsxDynamicTagName6.tsx === + +declare module JSX { +>JSX : Symbol(JSX, Decl(tsxDynamicTagName6.tsx, 0, 0)) + + interface Element { } +>Element : Symbol(Element, Decl(tsxDynamicTagName6.tsx, 1, 20)) + + interface IntrinsicElements { +>IntrinsicElements : Symbol(IntrinsicElements, Decl(tsxDynamicTagName6.tsx, 2, 22)) + + div: any +>div : Symbol(IntrinsicElements.div, Decl(tsxDynamicTagName6.tsx, 3, 30)) + } +} + +const t = {tag:'h1'} +>t : Symbol(t, Decl(tsxDynamicTagName6.tsx, 8, 5)) +>tag : Symbol(tag, Decl(tsxDynamicTagName6.tsx, 8, 11)) + +const foo = // No error +>foo : Symbol(foo, Decl(tsxDynamicTagName6.tsx, 9, 5)) +>t.tag : Symbol(tag, Decl(tsxDynamicTagName6.tsx, 8, 11)) +>t : Symbol(t, Decl(tsxDynamicTagName6.tsx, 8, 5)) +>tag : Symbol(tag, Decl(tsxDynamicTagName6.tsx, 8, 11)) + diff --git a/tests/baselines/reference/tsxDynamicTagName6.types b/tests/baselines/reference/tsxDynamicTagName6.types new file mode 100644 index 00000000000..5dadf6fe825 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName6.types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/jsx/tsxDynamicTagName6.tsx === + +declare module JSX { +>JSX : any + + interface Element { } +>Element : Element + + interface IntrinsicElements { +>IntrinsicElements : IntrinsicElements + + div: any +>div : any + } +} + +const t = {tag:'h1'} +>t : { tag: string; } +>{tag:'h1'} : { tag: string; } +>tag : string +>'h1' : string + +const foo = // No error +>foo : JSX.Element +> : JSX.Element +>t.tag : string +>t : { tag: string; } +>tag : string + diff --git a/tests/baselines/reference/tsxDynamicTagName7.errors.txt b/tests/baselines/reference/tsxDynamicTagName7.errors.txt new file mode 100644 index 00000000000..19f9bed3c27 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName7.errors.txt @@ -0,0 +1,23 @@ +tests/cases/conformance/jsx/app.tsx(8,8): error TS2604: JSX element type 'this' does not have any construct or call signatures. + + +==== tests/cases/conformance/jsx/react.d.ts (0 errors) ==== + + declare module 'react' { + class Component { } + } + +==== tests/cases/conformance/jsx/app.tsx (1 errors) ==== + import * as React from 'react'; + + export class Text extends React.Component<{}, {}> { + _tagName: string = 'div'; + + render() { + return ( + // this should be an error + ~~~~ +!!! error TS2604: JSX element type 'this' does not have any construct or call signatures. + ); + } + } \ No newline at end of file diff --git a/tests/baselines/reference/tsxDynamicTagName7.js b/tests/baselines/reference/tsxDynamicTagName7.js new file mode 100644 index 00000000000..dbe171f9682 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName7.js @@ -0,0 +1,42 @@ +//// [tests/cases/conformance/jsx/tsxDynamicTagName7.tsx] //// + +//// [react.d.ts] + +declare module 'react' { + class Component { } +} + +//// [app.tsx] +import * as React from 'react'; + +export class Text extends React.Component<{}, {}> { + _tagName: string = 'div'; + + render() { + return ( + // this should be an error + ); + } +} + +//// [app.jsx] +"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 Text = (function (_super) { + __extends(Text, _super); + function Text() { + _super.apply(this, arguments); + this._tagName = 'div'; + } + Text.prototype.render = function () { + return ( // this should be an error + ); + }; + return Text; +}(React.Component)); +exports.Text = Text; diff --git a/tests/baselines/reference/tsxDynamicTagName8.js b/tests/baselines/reference/tsxDynamicTagName8.js new file mode 100644 index 00000000000..e6f63b6a9bf --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName8.js @@ -0,0 +1,41 @@ +//// [tests/cases/conformance/jsx/tsxDynamicTagName8.tsx] //// + +//// [react.d.ts] + +declare module 'react' { + class Component { } +} + +//// [app.tsx] +import * as React from 'react'; + +export class Text extends React.Component<{}, {}> { + _tagName: string = 'div'; + + render() { + return ( + Hello world + ); + } +} + +//// [app.jsx] +"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 Text = (function (_super) { + __extends(Text, _super); + function Text() { + _super.apply(this, arguments); + this._tagName = 'div'; + } + Text.prototype.render = function () { + return ( Hello world ); + }; + return Text; +}(React.Component)); +exports.Text = Text; diff --git a/tests/baselines/reference/tsxDynamicTagName8.symbols b/tests/baselines/reference/tsxDynamicTagName8.symbols new file mode 100644 index 00000000000..87a71e740de --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName8.symbols @@ -0,0 +1,37 @@ +=== tests/cases/conformance/jsx/react.d.ts === + +declare module 'react' { + class Component { } +>Component : Symbol(Component, Decl(react.d.ts, 1, 24)) +>T : Symbol(T, Decl(react.d.ts, 2, 17)) +>U : Symbol(U, Decl(react.d.ts, 2, 19)) +} + +=== tests/cases/conformance/jsx/app.tsx === +import * as React from 'react'; +>React : Symbol(React, Decl(app.tsx, 0, 6)) + +export class Text extends React.Component<{}, {}> { +>Text : Symbol(Text, Decl(app.tsx, 0, 31)) +>React.Component : Symbol(React.Component, Decl(react.d.ts, 1, 24)) +>React : Symbol(React, Decl(app.tsx, 0, 6)) +>Component : Symbol(React.Component, Decl(react.d.ts, 1, 24)) + + _tagName: string = 'div'; +>_tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) + + render() { +>render : Symbol(Text.render, Decl(app.tsx, 3, 27)) + + return ( + Hello world +>this._tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) +>this : Symbol(Text, Decl(app.tsx, 0, 31)) +>_tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) +>this._tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) +>this : Symbol(Text, Decl(app.tsx, 0, 31)) +>_tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) + + ); + } +} diff --git a/tests/baselines/reference/tsxDynamicTagName8.types b/tests/baselines/reference/tsxDynamicTagName8.types new file mode 100644 index 00000000000..154e7e33fe0 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName8.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/jsx/react.d.ts === + +declare module 'react' { + class Component { } +>Component : Component +>T : T +>U : U +} + +=== tests/cases/conformance/jsx/app.tsx === +import * as React from 'react'; +>React : typeof React + +export class Text extends React.Component<{}, {}> { +>Text : Text +>React.Component : React.Component<{}, {}> +>React : typeof React +>Component : typeof React.Component + + _tagName: string = 'div'; +>_tagName : string +>'div' : string + + render() { +>render : () => any + + return ( +>( Hello world ) : any + + Hello world +> Hello world : any +>this._tagName : string +>this : this +>_tagName : string +>this._tagName : string +>this : this +>_tagName : string + + ); + } +} diff --git a/tests/baselines/reference/tsxDynamicTagName9.js b/tests/baselines/reference/tsxDynamicTagName9.js new file mode 100644 index 00000000000..589cc7cd226 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName9.js @@ -0,0 +1,41 @@ +//// [tests/cases/conformance/jsx/tsxDynamicTagName9.tsx] //// + +//// [react.d.ts] + +declare module 'react' { + class Component { } +} + +//// [app.tsx] +import * as React from 'react'; + +export class Text extends React.Component<{}, {}> { + _tagName: "div" = 'div'; + + render() { + return ( + Hello world + ); + } +} + +//// [app.jsx] +"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 Text = (function (_super) { + __extends(Text, _super); + function Text() { + _super.apply(this, arguments); + this._tagName = 'div'; + } + Text.prototype.render = function () { + return ( Hello world ); + }; + return Text; +}(React.Component)); +exports.Text = Text; diff --git a/tests/baselines/reference/tsxDynamicTagName9.symbols b/tests/baselines/reference/tsxDynamicTagName9.symbols new file mode 100644 index 00000000000..436e1205751 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName9.symbols @@ -0,0 +1,37 @@ +=== tests/cases/conformance/jsx/react.d.ts === + +declare module 'react' { + class Component { } +>Component : Symbol(Component, Decl(react.d.ts, 1, 24)) +>T : Symbol(T, Decl(react.d.ts, 2, 17)) +>U : Symbol(U, Decl(react.d.ts, 2, 19)) +} + +=== tests/cases/conformance/jsx/app.tsx === +import * as React from 'react'; +>React : Symbol(React, Decl(app.tsx, 0, 6)) + +export class Text extends React.Component<{}, {}> { +>Text : Symbol(Text, Decl(app.tsx, 0, 31)) +>React.Component : Symbol(React.Component, Decl(react.d.ts, 1, 24)) +>React : Symbol(React, Decl(app.tsx, 0, 6)) +>Component : Symbol(React.Component, Decl(react.d.ts, 1, 24)) + + _tagName: "div" = 'div'; +>_tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) + + render() { +>render : Symbol(Text.render, Decl(app.tsx, 3, 26)) + + return ( + Hello world +>this._tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) +>this : Symbol(Text, Decl(app.tsx, 0, 31)) +>_tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) +>this._tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) +>this : Symbol(Text, Decl(app.tsx, 0, 31)) +>_tagName : Symbol(Text._tagName, Decl(app.tsx, 2, 51)) + + ); + } +} diff --git a/tests/baselines/reference/tsxDynamicTagName9.types b/tests/baselines/reference/tsxDynamicTagName9.types new file mode 100644 index 00000000000..e500d3f0ab1 --- /dev/null +++ b/tests/baselines/reference/tsxDynamicTagName9.types @@ -0,0 +1,41 @@ +=== tests/cases/conformance/jsx/react.d.ts === + +declare module 'react' { + class Component { } +>Component : Component +>T : T +>U : U +} + +=== tests/cases/conformance/jsx/app.tsx === +import * as React from 'react'; +>React : typeof React + +export class Text extends React.Component<{}, {}> { +>Text : Text +>React.Component : React.Component<{}, {}> +>React : typeof React +>Component : typeof React.Component + + _tagName: "div" = 'div'; +>_tagName : "div" +>'div' : "div" + + render() { +>render : () => any + + return ( +>( Hello world ) : any + + Hello world +> Hello world : any +>this._tagName : "div" +>this : this +>_tagName : "div" +>this._tagName : "div" +>this : this +>_tagName : "div" + + ); + } +} diff --git a/tests/baselines/reference/tsxUnionTypeComponent2.errors.txt b/tests/baselines/reference/tsxUnionTypeComponent2.errors.txt index e5a5c77da4c..a43c45ec59e 100644 --- a/tests/baselines/reference/tsxUnionTypeComponent2.errors.txt +++ b/tests/baselines/reference/tsxUnionTypeComponent2.errors.txt @@ -5,9 +5,9 @@ tests/cases/conformance/jsx/file.tsx(8,2): error TS2604: JSX element type 'X' do import React = require('react'); - type Invalid1 = React.ComponentClass | string; + type Invalid1 = React.ComponentClass | number; - const X: Invalid1 = "Should fail to construct"; + const X: Invalid1 = 1; ; ~ diff --git a/tests/baselines/reference/tsxUnionTypeComponent2.js b/tests/baselines/reference/tsxUnionTypeComponent2.js index b2be1b880b5..3cc6f44c699 100644 --- a/tests/baselines/reference/tsxUnionTypeComponent2.js +++ b/tests/baselines/reference/tsxUnionTypeComponent2.js @@ -2,9 +2,9 @@ import React = require('react'); -type Invalid1 = React.ComponentClass | string; +type Invalid1 = React.ComponentClass | number; -const X: Invalid1 = "Should fail to construct"; +const X: Invalid1 = 1; ; @@ -14,5 +14,5 @@ const X: Invalid1 = "Should fail to construct"; //// [file.js] "use strict"; var React = require("react"); -var X = "Should fail to construct"; +var X = 1; React.createElement(X, null); diff --git a/tests/baselines/reference/umd-augmentation-2.js b/tests/baselines/reference/umd-augmentation-2.js index a4a98690b52..2656ae9d0e8 100644 --- a/tests/baselines/reference/umd-augmentation-2.js +++ b/tests/baselines/reference/umd-augmentation-2.js @@ -42,8 +42,8 @@ var t = p.x; //// [a.js] /// /// -var v = new exports.Math2d.Vector(3, 2); -var magnitude = exports.Math2d.getLength(v); +var v = new Math2d.Vector(3, 2); +var magnitude = Math2d.getLength(v); var p = v.translate(5, 5); p = v.reverse(); var t = p.x; diff --git a/tests/baselines/reference/umd-augmentation-4.js b/tests/baselines/reference/umd-augmentation-4.js index da0f2ec1777..69c27cfe484 100644 --- a/tests/baselines/reference/umd-augmentation-4.js +++ b/tests/baselines/reference/umd-augmentation-4.js @@ -48,8 +48,8 @@ var t = p.x; //// [a.js] /// /// -var v = new exports.Math2d.Vector(3, 2); -var magnitude = exports.Math2d.getLength(v); +var v = new Math2d.Vector(3, 2); +var magnitude = Math2d.getLength(v); var p = v.translate(5, 5); p = v.reverse(); var t = p.x; diff --git a/tests/baselines/reference/umd1.js b/tests/baselines/reference/umd1.js index 9b059da4887..c343e0539cc 100644 --- a/tests/baselines/reference/umd1.js +++ b/tests/baselines/reference/umd1.js @@ -16,6 +16,6 @@ let y: number = x.n; //// [a.js] /// -exports.Foo.fn(); +Foo.fn(); var x; var y = x.n; diff --git a/tests/baselines/reference/umd5.js b/tests/baselines/reference/umd5.js index b1cfdbcbaa9..95626132f77 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 = exports.Foo; +var z = Foo; diff --git a/tests/baselines/reference/umd6.js b/tests/baselines/reference/umd6.js index d4d84fd0384..d2ae5a4a6ca 100644 --- a/tests/baselines/reference/umd6.js +++ b/tests/baselines/reference/umd6.js @@ -15,4 +15,4 @@ let y: number = Foo.fn(); //// [a.js] /// -var y = exports.Foo.fn(); +var y = Foo.fn(); diff --git a/tests/baselines/reference/umd7.js b/tests/baselines/reference/umd7.js index 12d0a8651fc..acf1d011e4d 100644 --- a/tests/baselines/reference/umd7.js +++ b/tests/baselines/reference/umd7.js @@ -13,4 +13,4 @@ let y: number = Foo(); //// [a.js] /// -var y = exports.Foo(); +var y = Foo(); diff --git a/tests/baselines/reference/unionTypeReadonly.errors.txt b/tests/baselines/reference/unionTypeReadonly.errors.txt new file mode 100644 index 00000000000..0875b2b5af3 --- /dev/null +++ b/tests/baselines/reference/unionTypeReadonly.errors.txt @@ -0,0 +1,45 @@ +tests/cases/conformance/types/union/unionTypeReadonly.ts(17,1): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. +tests/cases/conformance/types/union/unionTypeReadonly.ts(19,1): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. +tests/cases/conformance/types/union/unionTypeReadonly.ts(21,1): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. +tests/cases/conformance/types/union/unionTypeReadonly.ts(23,1): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. +tests/cases/conformance/types/union/unionTypeReadonly.ts(25,15): error TS2339: Property 'value' does not exist on type 'Base | DifferentName'. + + +==== tests/cases/conformance/types/union/unionTypeReadonly.ts (5 errors) ==== + interface Base { + readonly value: number; + } + interface Identical { + readonly value: number; + } + interface Mutable { + value: number; + } + interface DifferentType { + readonly value: string; + } + interface DifferentName { + readonly other: number; + } + let base: Base; + base.value = 12 // error, lhs can't be a readonly property + ~~~~~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + let identical: Base | Identical; + identical.value = 12; // error, lhs can't be a readonly property + ~~~~~~~~~~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + let mutable: Base | Mutable; + mutable.value = 12; // error, lhs can't be a readonly property + ~~~~~~~~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + let differentType: Base | DifferentType; + differentType.value = 12; // error, lhs can't be a readonly property + ~~~~~~~~~~~~~~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + let differentName: Base | DifferentName; + differentName.value = 12; // error, property 'value' doesn't exist + ~~~~~ +!!! error TS2339: Property 'value' does not exist on type 'Base | DifferentName'. + + \ No newline at end of file diff --git a/tests/baselines/reference/unionTypeReadonly.js b/tests/baselines/reference/unionTypeReadonly.js new file mode 100644 index 00000000000..cdc893c91d9 --- /dev/null +++ b/tests/baselines/reference/unionTypeReadonly.js @@ -0,0 +1,40 @@ +//// [unionTypeReadonly.ts] +interface Base { + readonly value: number; +} +interface Identical { + readonly value: number; +} +interface Mutable { + value: number; +} +interface DifferentType { + readonly value: string; +} +interface DifferentName { + readonly other: number; +} +let base: Base; +base.value = 12 // error, lhs can't be a readonly property +let identical: Base | Identical; +identical.value = 12; // error, lhs can't be a readonly property +let mutable: Base | Mutable; +mutable.value = 12; // error, lhs can't be a readonly property +let differentType: Base | DifferentType; +differentType.value = 12; // error, lhs can't be a readonly property +let differentName: Base | DifferentName; +differentName.value = 12; // error, property 'value' doesn't exist + + + +//// [unionTypeReadonly.js] +var base; +base.value = 12; // error, lhs can't be a readonly property +var identical; +identical.value = 12; // error, lhs can't be a readonly property +var mutable; +mutable.value = 12; // error, lhs can't be a readonly property +var differentType; +differentType.value = 12; // error, lhs can't be a readonly property +var differentName; +differentName.value = 12; // error, property 'value' doesn't exist diff --git a/tests/baselines/reference/unusedClassesinModule1.errors.txt b/tests/baselines/reference/unusedClassesinModule1.errors.txt new file mode 100644 index 00000000000..6f2f936ce25 --- /dev/null +++ b/tests/baselines/reference/unusedClassesinModule1.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedClassesinModule1.ts(3,11): error TS6133: 'Calculator' is declared but never used. + + +==== tests/cases/compiler/unusedClassesinModule1.ts (1 errors) ==== + + module A { + class Calculator { + ~~~~~~~~~~ +!!! error TS6133: 'Calculator' is declared but never used. + public handelChar() { + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedClassesinModule1.js b/tests/baselines/reference/unusedClassesinModule1.js new file mode 100644 index 00000000000..d3fb726c2dd --- /dev/null +++ b/tests/baselines/reference/unusedClassesinModule1.js @@ -0,0 +1,20 @@ +//// [unusedClassesinModule1.ts] + +module A { + class Calculator { + public handelChar() { + } + } +} + +//// [unusedClassesinModule1.js] +var A; +(function (A) { + var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handelChar = function () { + }; + return Calculator; + }()); +})(A || (A = {})); diff --git a/tests/baselines/reference/unusedClassesinNamespace1.errors.txt b/tests/baselines/reference/unusedClassesinNamespace1.errors.txt new file mode 100644 index 00000000000..dc5dc397fec --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace1.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedClassesinNamespace1.ts(3,11): error TS6133: 'c1' is declared but never used. + + +==== tests/cases/compiler/unusedClassesinNamespace1.ts (1 errors) ==== + + namespace Validation { + class c1 { + ~~ +!!! error TS6133: 'c1' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedClassesinNamespace1.js b/tests/baselines/reference/unusedClassesinNamespace1.js new file mode 100644 index 00000000000..e49b9019a28 --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace1.js @@ -0,0 +1,17 @@ +//// [unusedClassesinNamespace1.ts] + +namespace Validation { + class c1 { + + } +} + +//// [unusedClassesinNamespace1.js] +var Validation; +(function (Validation) { + var c1 = (function () { + function c1() { + } + return c1; + }()); +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedClassesinNamespace2.errors.txt b/tests/baselines/reference/unusedClassesinNamespace2.errors.txt new file mode 100644 index 00000000000..322b2697550 --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace2.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/unusedClassesinNamespace2.ts(3,11): error TS6133: 'c1' is declared but never used. + + +==== tests/cases/compiler/unusedClassesinNamespace2.ts (1 errors) ==== + + namespace Validation { + class c1 { + ~~ +!!! error TS6133: 'c1' is declared but never used. + + } + + export class c2 { + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedClassesinNamespace2.js b/tests/baselines/reference/unusedClassesinNamespace2.js new file mode 100644 index 00000000000..03431e4fd04 --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace2.js @@ -0,0 +1,27 @@ +//// [unusedClassesinNamespace2.ts] + +namespace Validation { + class c1 { + + } + + export class c2 { + + } +} + +//// [unusedClassesinNamespace2.js] +var Validation; +(function (Validation) { + var c1 = (function () { + function c1() { + } + return c1; + }()); + var c2 = (function () { + function c2() { + } + return c2; + }()); + Validation.c2 = c2; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedClassesinNamespace3.js b/tests/baselines/reference/unusedClassesinNamespace3.js new file mode 100644 index 00000000000..bdb646e87b2 --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace3.js @@ -0,0 +1,30 @@ +//// [unusedClassesinNamespace3.ts] + +namespace Validation { + class c1 { + + } + + export class c2 { + + } + + export let a = new c1(); +} + +//// [unusedClassesinNamespace3.js] +var Validation; +(function (Validation) { + var c1 = (function () { + function c1() { + } + return c1; + }()); + var c2 = (function () { + function c2() { + } + return c2; + }()); + Validation.c2 = c2; + Validation.a = new c1(); +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedClassesinNamespace3.symbols b/tests/baselines/reference/unusedClassesinNamespace3.symbols new file mode 100644 index 00000000000..d8eeb0b5460 --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace3.symbols @@ -0,0 +1,19 @@ +=== tests/cases/compiler/unusedClassesinNamespace3.ts === + +namespace Validation { +>Validation : Symbol(Validation, Decl(unusedClassesinNamespace3.ts, 0, 0)) + + class c1 { +>c1 : Symbol(c1, Decl(unusedClassesinNamespace3.ts, 1, 22)) + + } + + export class c2 { +>c2 : Symbol(c2, Decl(unusedClassesinNamespace3.ts, 4, 5)) + + } + + export let a = new c1(); +>a : Symbol(a, Decl(unusedClassesinNamespace3.ts, 10, 14)) +>c1 : Symbol(c1, Decl(unusedClassesinNamespace3.ts, 1, 22)) +} diff --git a/tests/baselines/reference/unusedClassesinNamespace3.types b/tests/baselines/reference/unusedClassesinNamespace3.types new file mode 100644 index 00000000000..cef64a4c4e3 --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace3.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/unusedClassesinNamespace3.ts === + +namespace Validation { +>Validation : typeof Validation + + class c1 { +>c1 : c1 + + } + + export class c2 { +>c2 : c2 + + } + + export let a = new c1(); +>a : c1 +>new c1() : c1 +>c1 : typeof c1 +} diff --git a/tests/baselines/reference/unusedClassesinNamespace4.errors.txt b/tests/baselines/reference/unusedClassesinNamespace4.errors.txt new file mode 100644 index 00000000000..2fd6e70524e --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace4.errors.txt @@ -0,0 +1,20 @@ +tests/cases/compiler/unusedClassesinNamespace4.ts(11,11): error TS6133: 'c3' is declared but never used. + + +==== tests/cases/compiler/unusedClassesinNamespace4.ts (1 errors) ==== + + namespace Validation { + class c1 { + + } + + export class c2 { + + } + + class c3 extends c1 { + ~~ +!!! error TS6133: 'c3' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedClassesinNamespace4.js b/tests/baselines/reference/unusedClassesinNamespace4.js new file mode 100644 index 00000000000..65198c1c1aa --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace4.js @@ -0,0 +1,43 @@ +//// [unusedClassesinNamespace4.ts] + +namespace Validation { + class c1 { + + } + + export class c2 { + + } + + class c3 extends c1 { + + } +} + +//// [unusedClassesinNamespace4.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 Validation; +(function (Validation) { + var c1 = (function () { + function c1() { + } + return c1; + }()); + var c2 = (function () { + function c2() { + } + return c2; + }()); + Validation.c2 = c2; + var c3 = (function (_super) { + __extends(c3, _super); + function c3() { + _super.apply(this, arguments); + } + return c3; + }(c1)); +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedClassesinNamespace5.errors.txt b/tests/baselines/reference/unusedClassesinNamespace5.errors.txt new file mode 100644 index 00000000000..752036b2d03 --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace5.errors.txt @@ -0,0 +1,20 @@ +tests/cases/compiler/unusedClassesinNamespace5.ts(11,11): error TS6133: 'c3' is declared but never used. + + +==== tests/cases/compiler/unusedClassesinNamespace5.ts (1 errors) ==== + + namespace Validation { + class c1 { + + } + + export class c2 { + + } + + class c3 { + ~~ +!!! error TS6133: 'c3' is declared but never used. + public x: c1; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedClassesinNamespace5.js b/tests/baselines/reference/unusedClassesinNamespace5.js new file mode 100644 index 00000000000..037a3564bd7 --- /dev/null +++ b/tests/baselines/reference/unusedClassesinNamespace5.js @@ -0,0 +1,36 @@ +//// [unusedClassesinNamespace5.ts] + +namespace Validation { + class c1 { + + } + + export class c2 { + + } + + class c3 { + public x: c1; + } +} + +//// [unusedClassesinNamespace5.js] +var Validation; +(function (Validation) { + var c1 = (function () { + function c1() { + } + return c1; + }()); + var c2 = (function () { + function c2() { + } + return c2; + }()); + Validation.c2 = c2; + var c3 = (function () { + function c3() { + } + return c3; + }()); +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces1.errors.txt b/tests/baselines/reference/unusedFunctionsinNamespaces1.errors.txt new file mode 100644 index 00000000000..428eeae8de5 --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces1.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/unusedFunctionsinNamespaces1.ts(3,14): error TS6133: 'function1' is declared but never used. + + +==== tests/cases/compiler/unusedFunctionsinNamespaces1.ts (1 errors) ==== + + namespace Validation { + function function1() { + ~~~~~~~~~ +!!! error TS6133: 'function1' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces1.js b/tests/baselines/reference/unusedFunctionsinNamespaces1.js new file mode 100644 index 00000000000..a6eec74b1f5 --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces1.js @@ -0,0 +1,13 @@ +//// [unusedFunctionsinNamespaces1.ts] + +namespace Validation { + function function1() { + } +} + +//// [unusedFunctionsinNamespaces1.js] +var Validation; +(function (Validation) { + function function1() { + } +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces2.errors.txt b/tests/baselines/reference/unusedFunctionsinNamespaces2.errors.txt new file mode 100644 index 00000000000..2b0b6def378 --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces2.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/unusedFunctionsinNamespaces2.ts(3,9): error TS6133: 'function1' is declared but never used. + + +==== tests/cases/compiler/unusedFunctionsinNamespaces2.ts (1 errors) ==== + + namespace Validation { + var function1 = function() { + ~~~~~~~~~ +!!! error TS6133: 'function1' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces2.js b/tests/baselines/reference/unusedFunctionsinNamespaces2.js new file mode 100644 index 00000000000..c908e38e7a6 --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces2.js @@ -0,0 +1,13 @@ +//// [unusedFunctionsinNamespaces2.ts] + +namespace Validation { + var function1 = function() { + } +} + +//// [unusedFunctionsinNamespaces2.js] +var Validation; +(function (Validation) { + var function1 = function () { + }; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces3.errors.txt b/tests/baselines/reference/unusedFunctionsinNamespaces3.errors.txt new file mode 100644 index 00000000000..cfbeecc3c49 --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces3.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedFunctionsinNamespaces3.ts(3,9): error TS6133: 'function1' is declared but never used. +tests/cases/compiler/unusedFunctionsinNamespaces3.ts(3,30): error TS6133: 'param1' is declared but never used. + + +==== tests/cases/compiler/unusedFunctionsinNamespaces3.ts (2 errors) ==== + + namespace Validation { + var function1 = function(param1:string) { + ~~~~~~~~~ +!!! error TS6133: 'function1' is declared but never used. + ~~~~~~ +!!! error TS6133: 'param1' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces3.js b/tests/baselines/reference/unusedFunctionsinNamespaces3.js new file mode 100644 index 00000000000..5501ed62a6f --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces3.js @@ -0,0 +1,13 @@ +//// [unusedFunctionsinNamespaces3.ts] + +namespace Validation { + var function1 = function(param1:string) { + } +} + +//// [unusedFunctionsinNamespaces3.js] +var Validation; +(function (Validation) { + var function1 = function (param1) { + }; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces4.errors.txt b/tests/baselines/reference/unusedFunctionsinNamespaces4.errors.txt new file mode 100644 index 00000000000..72ce63924fd --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces4.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/unusedFunctionsinNamespaces4.ts(3,9): error TS6133: 'function1' is declared but never used. + + +==== tests/cases/compiler/unusedFunctionsinNamespaces4.ts (1 errors) ==== + + namespace Validation { + var function1 = function() { + ~~~~~~~~~ +!!! error TS6133: 'function1' is declared but never used. + } + + export function function2() { + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces4.js b/tests/baselines/reference/unusedFunctionsinNamespaces4.js new file mode 100644 index 00000000000..41557a62045 --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces4.js @@ -0,0 +1,20 @@ +//// [unusedFunctionsinNamespaces4.ts] + +namespace Validation { + var function1 = function() { + } + + export function function2() { + + } +} + +//// [unusedFunctionsinNamespaces4.js] +var Validation; +(function (Validation) { + var function1 = function () { + }; + function function2() { + } + Validation.function2 = function2; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces5.errors.txt b/tests/baselines/reference/unusedFunctionsinNamespaces5.errors.txt new file mode 100644 index 00000000000..239680499bd --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces5.errors.txt @@ -0,0 +1,26 @@ +tests/cases/compiler/unusedFunctionsinNamespaces5.ts(10,14): error TS6133: 'function3' is declared but never used. +tests/cases/compiler/unusedFunctionsinNamespaces5.ts(14,14): error TS6133: 'function4' is declared but never used. + + +==== tests/cases/compiler/unusedFunctionsinNamespaces5.ts (2 errors) ==== + + namespace Validation { + var function1 = function() { + } + + export function function2() { + + } + + function function3() { + ~~~~~~~~~ +!!! error TS6133: 'function3' is declared but never used. + function1(); + } + + function function4() { + ~~~~~~~~~ +!!! error TS6133: 'function4' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces5.js b/tests/baselines/reference/unusedFunctionsinNamespaces5.js new file mode 100644 index 00000000000..4023876b359 --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces5.js @@ -0,0 +1,33 @@ +//// [unusedFunctionsinNamespaces5.ts] + +namespace Validation { + var function1 = function() { + } + + export function function2() { + + } + + function function3() { + function1(); + } + + function function4() { + + } +} + +//// [unusedFunctionsinNamespaces5.js] +var Validation; +(function (Validation) { + var function1 = function () { + }; + function function2() { + } + Validation.function2 = function2; + function function3() { + function1(); + } + function function4() { + } +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces6.errors.txt b/tests/baselines/reference/unusedFunctionsinNamespaces6.errors.txt new file mode 100644 index 00000000000..f8f0d12dd51 --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces6.errors.txt @@ -0,0 +1,25 @@ +tests/cases/compiler/unusedFunctionsinNamespaces6.ts(14,14): error TS6133: 'function4' is declared but never used. + + +==== tests/cases/compiler/unusedFunctionsinNamespaces6.ts (1 errors) ==== + + namespace Validation { + var function1 = function() { + } + + export function function2() { + + } + + function function3() { + function1(); + } + + function function4() { + ~~~~~~~~~ +!!! error TS6133: 'function4' is declared but never used. + + } + + export let a = function3; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedFunctionsinNamespaces6.js b/tests/baselines/reference/unusedFunctionsinNamespaces6.js new file mode 100644 index 00000000000..81ff5d9ea54 --- /dev/null +++ b/tests/baselines/reference/unusedFunctionsinNamespaces6.js @@ -0,0 +1,36 @@ +//// [unusedFunctionsinNamespaces6.ts] + +namespace Validation { + var function1 = function() { + } + + export function function2() { + + } + + function function3() { + function1(); + } + + function function4() { + + } + + export let a = function3; +} + +//// [unusedFunctionsinNamespaces6.js] +var Validation; +(function (Validation) { + var function1 = function () { + }; + function function2() { + } + Validation.function2 = function2; + function function3() { + function1(); + } + function function4() { + } + Validation.a = function3; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedGetterInClass.js b/tests/baselines/reference/unusedGetterInClass.js new file mode 100644 index 00000000000..0920ace0195 --- /dev/null +++ b/tests/baselines/reference/unusedGetterInClass.js @@ -0,0 +1,23 @@ +//// [unusedGetterInClass.ts] + +class Employee { + private _fullName: string; + + get fullName(): string { + return this._fullName; + } +} + +//// [unusedGetterInClass.js] +var Employee = (function () { + function Employee() { + } + Object.defineProperty(Employee.prototype, "fullName", { + get: function () { + return this._fullName; + }, + enumerable: true, + configurable: true + }); + return Employee; +}()); diff --git a/tests/baselines/reference/unusedGetterInClass.symbols b/tests/baselines/reference/unusedGetterInClass.symbols new file mode 100644 index 00000000000..3d19dd41241 --- /dev/null +++ b/tests/baselines/reference/unusedGetterInClass.symbols @@ -0,0 +1,17 @@ +=== tests/cases/compiler/unusedGetterInClass.ts === + +class Employee { +>Employee : Symbol(Employee, Decl(unusedGetterInClass.ts, 0, 0)) + + private _fullName: string; +>_fullName : Symbol(Employee._fullName, Decl(unusedGetterInClass.ts, 1, 16)) + + get fullName(): string { +>fullName : Symbol(Employee.fullName, Decl(unusedGetterInClass.ts, 2, 30)) + + return this._fullName; +>this._fullName : Symbol(Employee._fullName, Decl(unusedGetterInClass.ts, 1, 16)) +>this : Symbol(Employee, Decl(unusedGetterInClass.ts, 0, 0)) +>_fullName : Symbol(Employee._fullName, Decl(unusedGetterInClass.ts, 1, 16)) + } +} diff --git a/tests/baselines/reference/unusedGetterInClass.types b/tests/baselines/reference/unusedGetterInClass.types new file mode 100644 index 00000000000..8ad7479c443 --- /dev/null +++ b/tests/baselines/reference/unusedGetterInClass.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/unusedGetterInClass.ts === + +class Employee { +>Employee : Employee + + private _fullName: string; +>_fullName : string + + get fullName(): string { +>fullName : string + + return this._fullName; +>this._fullName : string +>this : this +>_fullName : string + } +} diff --git a/tests/baselines/reference/unusedIdentifiersConsolidated1.errors.txt b/tests/baselines/reference/unusedIdentifiersConsolidated1.errors.txt new file mode 100644 index 00000000000..a174074bdf7 --- /dev/null +++ b/tests/baselines/reference/unusedIdentifiersConsolidated1.errors.txt @@ -0,0 +1,153 @@ +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(2,18): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(3,9): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(6,32): error TS6133: 'unusedtypeparameter' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(7,13): error TS6133: 'unusedprivatevariable' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(12,17): error TS6133: 'message' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(13,13): error TS6133: 'unused2' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(17,20): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(18,13): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(25,13): error TS6133: 'unUsedPrivateFunction' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(38,11): error TS6133: 'numberRegexp' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(45,17): error TS6133: 'unUsedPrivateFunction' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(58,15): error TS6133: 'usedLocallyInterface2' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(65,11): error TS6133: 'dummy' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(68,15): error TS6133: 'unusedInterface' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(80,11): error TS6133: 'class3' is declared but never used. +tests/cases/compiler/unusedIdentifiersConsolidated1.ts(100,15): error TS6133: 'interface5' is declared but never used. + + +==== tests/cases/compiler/unusedIdentifiersConsolidated1.ts (16 errors) ==== + + function greeter(person: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + } + + class Dummy { + ~~~~~~~~~~~~~~~~~~~ +!!! error TS6133: 'unusedtypeparameter' is declared but never used. + private unusedprivatevariable: string; + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS6133: 'unusedprivatevariable' is declared but never used. + private greeting: string; + public unusedpublicvariable: string; + public typedvariable: usedtypeparameter; + + constructor(message: string) { + ~~~~~~~ +!!! error TS6133: 'message' is declared but never used. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but never used. + this.greeting = "Dummy Message"; + } + + public greeter(person: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + this.usedPrivateFunction(); + } + + private usedPrivateFunction() { + } + + private unUsedPrivateFunction() { + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS6133: 'unUsedPrivateFunction' is declared but never used. + } + } + + var user = "Jane User"; + var user2 = "Jane2 User2"; + + namespace Validation { + export interface StringValidator { + isAcceptable(s: string): boolean; + } + + const lettersRegexp = /^[A-Za-z]+$/; + const numberRegexp = /^[0-9]+$/; + ~~~~~~~~~~~~ +!!! error TS6133: 'numberRegexp' is declared but never used. + + export class LettersOnlyValidator implements StringValidator { + isAcceptable(s2: string) { + return lettersRegexp.test(s2); + } + + private unUsedPrivateFunction() { + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS6133: 'unUsedPrivateFunction' is declared but never used. + } + } + + export class ZipCodeValidator implements StringValidator { + isAcceptable(s3: string) { + return s3.length === 5; + } + } + + interface usedLocallyInterface { + } + + interface usedLocallyInterface2 { + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS6133: 'usedLocallyInterface2' is declared but never used. + someFunction(s1: string): void; + } + + export interface exportedInterface { + } + + class dummy implements usedLocallyInterface { + ~~~~~ +!!! error TS6133: 'dummy' is declared but never used. + } + + interface unusedInterface { + ~~~~~~~~~~~~~~~ +!!! error TS6133: 'unusedInterface' is declared but never used. + } + } + + + namespace Greeter { + class class1 { + } + + export class class2 extends class1 { + } + + class class3 { + ~~~~~~ +!!! error TS6133: 'class3' is declared but never used. + } + + export class class4 { + } + + interface interface1 { + } + + export interface interface2 extends interface1 { + } + + interface interface3 { + } + + export interface interface4 { + } + + export let a: interface3; + + interface interface5 { + ~~~~~~~~~~ +!!! error TS6133: 'interface5' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedIdentifiersConsolidated1.js b/tests/baselines/reference/unusedIdentifiersConsolidated1.js new file mode 100644 index 00000000000..521f17bf5ef --- /dev/null +++ b/tests/baselines/reference/unusedIdentifiersConsolidated1.js @@ -0,0 +1,187 @@ +//// [unusedIdentifiersConsolidated1.ts] + +function greeter(person: string) { + var unused = 20; +} + +class Dummy { + private unusedprivatevariable: string; + private greeting: string; + public unusedpublicvariable: string; + public typedvariable: usedtypeparameter; + + constructor(message: string) { + var unused2 = 22; + this.greeting = "Dummy Message"; + } + + public greeter(person: string) { + var unused = 20; + this.usedPrivateFunction(); + } + + private usedPrivateFunction() { + } + + private unUsedPrivateFunction() { + } +} + +var user = "Jane User"; +var user2 = "Jane2 User2"; + +namespace Validation { + export interface StringValidator { + isAcceptable(s: string): boolean; + } + + const lettersRegexp = /^[A-Za-z]+$/; + const numberRegexp = /^[0-9]+$/; + + export class LettersOnlyValidator implements StringValidator { + isAcceptable(s2: string) { + return lettersRegexp.test(s2); + } + + private unUsedPrivateFunction() { + } + } + + export class ZipCodeValidator implements StringValidator { + isAcceptable(s3: string) { + return s3.length === 5; + } + } + + interface usedLocallyInterface { + } + + interface usedLocallyInterface2 { + someFunction(s1: string): void; + } + + export interface exportedInterface { + } + + class dummy implements usedLocallyInterface { + } + + interface unusedInterface { + } +} + + +namespace Greeter { + class class1 { + } + + export class class2 extends class1 { + } + + class class3 { + } + + export class class4 { + } + + interface interface1 { + } + + export interface interface2 extends interface1 { + } + + interface interface3 { + } + + export interface interface4 { + } + + export let a: interface3; + + interface interface5 { + } +} + +//// [unusedIdentifiersConsolidated1.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 greeter(person) { + var unused = 20; +} +var Dummy = (function () { + function Dummy(message) { + var unused2 = 22; + this.greeting = "Dummy Message"; + } + Dummy.prototype.greeter = function (person) { + var unused = 20; + this.usedPrivateFunction(); + }; + Dummy.prototype.usedPrivateFunction = function () { + }; + Dummy.prototype.unUsedPrivateFunction = function () { + }; + return Dummy; +}()); +var user = "Jane User"; +var user2 = "Jane2 User2"; +var Validation; +(function (Validation) { + var lettersRegexp = /^[A-Za-z]+$/; + var numberRegexp = /^[0-9]+$/; + var LettersOnlyValidator = (function () { + function LettersOnlyValidator() { + } + LettersOnlyValidator.prototype.isAcceptable = function (s2) { + return lettersRegexp.test(s2); + }; + LettersOnlyValidator.prototype.unUsedPrivateFunction = function () { + }; + return LettersOnlyValidator; + }()); + Validation.LettersOnlyValidator = LettersOnlyValidator; + var ZipCodeValidator = (function () { + function ZipCodeValidator() { + } + ZipCodeValidator.prototype.isAcceptable = function (s3) { + return s3.length === 5; + }; + return ZipCodeValidator; + }()); + Validation.ZipCodeValidator = ZipCodeValidator; + var dummy = (function () { + function dummy() { + } + return dummy; + }()); +})(Validation || (Validation = {})); +var Greeter; +(function (Greeter) { + var class1 = (function () { + function class1() { + } + return class1; + }()); + var class2 = (function (_super) { + __extends(class2, _super); + function class2() { + _super.apply(this, arguments); + } + return class2; + }(class1)); + Greeter.class2 = class2; + var class3 = (function () { + function class3() { + } + return class3; + }()); + var class4 = (function () { + function class4() { + } + return class4; + }()); + Greeter.class4 = class4; +})(Greeter || (Greeter = {})); diff --git a/tests/baselines/reference/unusedImports1.errors.txt b/tests/baselines/reference/unusedImports1.errors.txt new file mode 100644 index 00000000000..f2d59c994b5 --- /dev/null +++ b/tests/baselines/reference/unusedImports1.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/file2.ts(1,9): error TS6133: 'Calculator' is declared but never used. + + +==== tests/cases/compiler/file1.ts (0 errors) ==== + + export class Calculator { + + } + +==== tests/cases/compiler/file2.ts (1 errors) ==== + import {Calculator} from "./file1" + ~~~~~~~~~~ +!!! error TS6133: 'Calculator' is declared but never used. \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports1.js b/tests/baselines/reference/unusedImports1.js new file mode 100644 index 00000000000..afd6eb80843 --- /dev/null +++ b/tests/baselines/reference/unusedImports1.js @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/unusedImports1.ts] //// + +//// [file1.ts] + +export class Calculator { + +} + +//// [file2.ts] +import {Calculator} from "./file1" + +//// [file1.js] +"use strict"; +var Calculator = (function () { + function Calculator() { + } + return Calculator; +}()); +exports.Calculator = Calculator; +//// [file2.js] +"use strict"; diff --git a/tests/baselines/reference/unusedImports10.errors.txt b/tests/baselines/reference/unusedImports10.errors.txt new file mode 100644 index 00000000000..c4937a420f9 --- /dev/null +++ b/tests/baselines/reference/unusedImports10.errors.txt @@ -0,0 +1,17 @@ +tests/cases/compiler/unusedImports10.ts(10,12): error TS6133: 'a' is declared but never used. + + +==== tests/cases/compiler/unusedImports10.ts (1 errors) ==== + + module A { + export class Calculator { + public handelChar() { + } + } + } + + module B { + import a = A; + ~ +!!! error TS6133: 'a' is declared but never used. + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports10.js b/tests/baselines/reference/unusedImports10.js new file mode 100644 index 00000000000..49365e6e3ff --- /dev/null +++ b/tests/baselines/reference/unusedImports10.js @@ -0,0 +1,25 @@ +//// [unusedImports10.ts] + +module A { + export class Calculator { + public handelChar() { + } + } +} + +module B { + import a = A; +} + +//// [unusedImports10.js] +var A; +(function (A) { + var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handelChar = function () { + }; + return Calculator; + }()); + A.Calculator = Calculator; +})(A || (A = {})); diff --git a/tests/baselines/reference/unusedImports11.js b/tests/baselines/reference/unusedImports11.js new file mode 100644 index 00000000000..109c2e5a886 --- /dev/null +++ b/tests/baselines/reference/unusedImports11.js @@ -0,0 +1,41 @@ +//// [tests/cases/compiler/unusedImports11.ts] //// + +//// [b.ts] + +export class Member {} +export default Member; + + +//// [a.ts] +import { Member } from './b'; +import d, { Member as M } from './b'; +import * as ns from './b'; +import r = require("./b"); + +new Member(); +new d(); +new M(); +new ns.Member(); +new r.Member(); + +//// [b.js] +"use strict"; +var Member = (function () { + function Member() { + } + return Member; +}()); +exports.Member = Member; +exports.__esModule = true; +exports["default"] = Member; +//// [a.js] +"use strict"; +var b_1 = require("./b"); +var b_2 = require("./b"); +var ns = require("./b"); +var r = require("./b"); +new b_1.Member(); +new b_2["default"](); +new b_2.Member(); +new ns.Member(); +new r.Member(); diff --git a/tests/baselines/reference/unusedImports11.symbols b/tests/baselines/reference/unusedImports11.symbols new file mode 100644 index 00000000000..995b4a40c2a --- /dev/null +++ b/tests/baselines/reference/unusedImports11.symbols @@ -0,0 +1,43 @@ +=== tests/cases/compiler/a.ts === +import { Member } from './b'; +>Member : Symbol(Member, Decl(a.ts, 0, 8)) + +import d, { Member as M } from './b'; +>d : Symbol(d, Decl(a.ts, 1, 6)) +>Member : Symbol(M, Decl(a.ts, 1, 11)) +>M : Symbol(M, Decl(a.ts, 1, 11)) + +import * as ns from './b'; +>ns : Symbol(ns, Decl(a.ts, 2, 6)) + +import r = require("./b"); +>r : Symbol(r, Decl(a.ts, 2, 26)) + +new Member(); +>Member : Symbol(Member, Decl(a.ts, 0, 8)) + +new d(); +>d : Symbol(d, Decl(a.ts, 1, 6)) + +new M(); +>M : Symbol(M, Decl(a.ts, 1, 11)) + +new ns.Member(); +>ns.Member : Symbol(Member, Decl(b.ts, 0, 0)) +>ns : Symbol(ns, Decl(a.ts, 2, 6)) +>Member : Symbol(Member, Decl(b.ts, 0, 0)) + +new r.Member(); +>r.Member : Symbol(Member, Decl(b.ts, 0, 0)) +>r : Symbol(r, Decl(a.ts, 2, 26)) +>Member : Symbol(Member, Decl(b.ts, 0, 0)) + +=== tests/cases/compiler/b.ts === + +export class Member {} +>Member : Symbol(Member, Decl(b.ts, 0, 0)) + +export default Member; +>Member : Symbol(Member, Decl(b.ts, 0, 0)) + + diff --git a/tests/baselines/reference/unusedImports11.types b/tests/baselines/reference/unusedImports11.types new file mode 100644 index 00000000000..1d71a0226b6 --- /dev/null +++ b/tests/baselines/reference/unusedImports11.types @@ -0,0 +1,48 @@ +=== tests/cases/compiler/a.ts === +import { Member } from './b'; +>Member : typeof Member + +import d, { Member as M } from './b'; +>d : typeof Member +>Member : typeof Member +>M : typeof Member + +import * as ns from './b'; +>ns : typeof ns + +import r = require("./b"); +>r : typeof ns + +new Member(); +>new Member() : Member +>Member : typeof Member + +new d(); +>new d() : Member +>d : typeof Member + +new M(); +>new M() : Member +>M : typeof Member + +new ns.Member(); +>new ns.Member() : Member +>ns.Member : typeof Member +>ns : typeof ns +>Member : typeof Member + +new r.Member(); +>new r.Member() : Member +>r.Member : typeof Member +>r : typeof ns +>Member : typeof Member + +=== tests/cases/compiler/b.ts === + +export class Member {} +>Member : Member + +export default Member; +>Member : Member + + diff --git a/tests/baselines/reference/unusedImports12.errors.txt b/tests/baselines/reference/unusedImports12.errors.txt new file mode 100644 index 00000000000..89b0687317b --- /dev/null +++ b/tests/baselines/reference/unusedImports12.errors.txt @@ -0,0 +1,29 @@ +tests/cases/compiler/a.ts(1,10): error TS6133: 'Member' is declared but never used. +tests/cases/compiler/a.ts(2,8): error TS6133: 'd' is declared but never used. +tests/cases/compiler/a.ts(2,23): error TS6133: 'M' is declared but never used. +tests/cases/compiler/a.ts(3,13): error TS6133: 'ns' is declared but never used. +tests/cases/compiler/a.ts(4,8): error TS6133: 'r' is declared but never used. + + +==== tests/cases/compiler/a.ts (5 errors) ==== + import { Member } from './b'; + ~~~~~~ +!!! error TS6133: 'Member' is declared but never used. + import d, { Member as M } from './b'; + ~ +!!! error TS6133: 'd' is declared but never used. + ~ +!!! error TS6133: 'M' is declared but never used. + import * as ns from './b'; + ~~ +!!! error TS6133: 'ns' is declared but never used. + import r = require("./b"); + ~ +!!! error TS6133: 'r' is declared but never used. + +==== tests/cases/compiler/b.ts (0 errors) ==== + + export class Member {} + export default Member; + + \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports12.js b/tests/baselines/reference/unusedImports12.js new file mode 100644 index 00000000000..ece9b105bc9 --- /dev/null +++ b/tests/baselines/reference/unusedImports12.js @@ -0,0 +1,27 @@ +//// [tests/cases/compiler/unusedImports12.ts] //// + +//// [b.ts] + +export class Member {} +export default Member; + + +//// [a.ts] +import { Member } from './b'; +import d, { Member as M } from './b'; +import * as ns from './b'; +import r = require("./b"); + + +//// [b.js] +"use strict"; +var Member = (function () { + function Member() { + } + return Member; +}()); +exports.Member = Member; +exports.__esModule = true; +exports["default"] = Member; +//// [a.js] +"use strict"; diff --git a/tests/baselines/reference/unusedImports2.errors.txt b/tests/baselines/reference/unusedImports2.errors.txt new file mode 100644 index 00000000000..d2b3a3c2bc5 --- /dev/null +++ b/tests/baselines/reference/unusedImports2.errors.txt @@ -0,0 +1,21 @@ +tests/cases/compiler/file2.ts(2,9): error TS6133: 'test' is declared but never used. + + +==== tests/cases/compiler/file1.ts (0 errors) ==== + + export class Calculator { + handleChar() {} + } + + export function test() { + + } + +==== tests/cases/compiler/file2.ts (1 errors) ==== + import {Calculator} from "./file1" + import {test} from "./file1" + ~~~~ +!!! error TS6133: 'test' is declared but never used. + + var x = new Calculator(); + x.handleChar(); \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports2.js b/tests/baselines/reference/unusedImports2.js new file mode 100644 index 00000000000..f8918db5ab1 --- /dev/null +++ b/tests/baselines/reference/unusedImports2.js @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/unusedImports2.ts] //// + +//// [file1.ts] + +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +//// [file2.ts] +import {Calculator} from "./file1" +import {test} from "./file1" + +var x = new Calculator(); +x.handleChar(); + +//// [file1.js] +"use strict"; +var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handleChar = function () { }; + return Calculator; +}()); +exports.Calculator = Calculator; +function test() { +} +exports.test = test; +//// [file2.js] +"use strict"; +var file1_1 = require("./file1"); +var x = new file1_1.Calculator(); +x.handleChar(); diff --git a/tests/baselines/reference/unusedImports3.errors.txt b/tests/baselines/reference/unusedImports3.errors.txt new file mode 100644 index 00000000000..fe398ab4f8e --- /dev/null +++ b/tests/baselines/reference/unusedImports3.errors.txt @@ -0,0 +1,24 @@ +tests/cases/compiler/file2.ts(1,9): error TS6133: 'Calculator' is declared but never used. + + +==== tests/cases/compiler/file1.ts (0 errors) ==== + + export class Calculator { + handleChar() {} + } + + export function test() { + + } + + export function test2() { + + } + +==== tests/cases/compiler/file2.ts (1 errors) ==== + import {Calculator, test, test2} from "./file1" + ~~~~~~~~~~ +!!! error TS6133: 'Calculator' is declared but never used. + + test(); + test2(); \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports3.js b/tests/baselines/reference/unusedImports3.js new file mode 100644 index 00000000000..5c0a3edf16b --- /dev/null +++ b/tests/baselines/reference/unusedImports3.js @@ -0,0 +1,42 @@ +//// [tests/cases/compiler/unusedImports3.ts] //// + +//// [file1.ts] + +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +//// [file2.ts] +import {Calculator, test, test2} from "./file1" + +test(); +test2(); + +//// [file1.js] +"use strict"; +var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handleChar = function () { }; + return Calculator; +}()); +exports.Calculator = Calculator; +function test() { +} +exports.test = test; +function test2() { +} +exports.test2 = test2; +//// [file2.js] +"use strict"; +var file1_1 = require("./file1"); +file1_1.test(); +file1_1.test2(); diff --git a/tests/baselines/reference/unusedImports4.errors.txt b/tests/baselines/reference/unusedImports4.errors.txt new file mode 100644 index 00000000000..872ef8e452e --- /dev/null +++ b/tests/baselines/reference/unusedImports4.errors.txt @@ -0,0 +1,25 @@ +tests/cases/compiler/file2.ts(1,21): error TS6133: 'test' is declared but never used. + + +==== tests/cases/compiler/file1.ts (0 errors) ==== + + export class Calculator { + handleChar() {} + } + + export function test() { + + } + + export function test2() { + + } + +==== tests/cases/compiler/file2.ts (1 errors) ==== + import {Calculator, test, test2} from "./file1" + ~~~~ +!!! error TS6133: 'test' is declared but never used. + + var x = new Calculator(); + x.handleChar(); + test2(); \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports4.js b/tests/baselines/reference/unusedImports4.js new file mode 100644 index 00000000000..e95938091ae --- /dev/null +++ b/tests/baselines/reference/unusedImports4.js @@ -0,0 +1,44 @@ +//// [tests/cases/compiler/unusedImports4.ts] //// + +//// [file1.ts] + +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +//// [file2.ts] +import {Calculator, test, test2} from "./file1" + +var x = new Calculator(); +x.handleChar(); +test2(); + +//// [file1.js] +"use strict"; +var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handleChar = function () { }; + return Calculator; +}()); +exports.Calculator = Calculator; +function test() { +} +exports.test = test; +function test2() { +} +exports.test2 = test2; +//// [file2.js] +"use strict"; +var file1_1 = require("./file1"); +var x = new file1_1.Calculator(); +x.handleChar(); +file1_1.test2(); diff --git a/tests/baselines/reference/unusedImports5.errors.txt b/tests/baselines/reference/unusedImports5.errors.txt new file mode 100644 index 00000000000..deb9dd00f9c --- /dev/null +++ b/tests/baselines/reference/unusedImports5.errors.txt @@ -0,0 +1,25 @@ +tests/cases/compiler/file2.ts(1,27): error TS6133: 'test2' is declared but never used. + + +==== tests/cases/compiler/file1.ts (0 errors) ==== + + export class Calculator { + handleChar() {} + } + + export function test() { + + } + + export function test2() { + + } + +==== tests/cases/compiler/file2.ts (1 errors) ==== + import {Calculator, test, test2} from "./file1" + ~~~~~ +!!! error TS6133: 'test2' is declared but never used. + + var x = new Calculator(); + x.handleChar(); + test(); \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports5.js b/tests/baselines/reference/unusedImports5.js new file mode 100644 index 00000000000..cf92d01eb75 --- /dev/null +++ b/tests/baselines/reference/unusedImports5.js @@ -0,0 +1,44 @@ +//// [tests/cases/compiler/unusedImports5.ts] //// + +//// [file1.ts] + +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +//// [file2.ts] +import {Calculator, test, test2} from "./file1" + +var x = new Calculator(); +x.handleChar(); +test(); + +//// [file1.js] +"use strict"; +var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handleChar = function () { }; + return Calculator; +}()); +exports.Calculator = Calculator; +function test() { +} +exports.test = test; +function test2() { +} +exports.test2 = test2; +//// [file2.js] +"use strict"; +var file1_1 = require("./file1"); +var x = new file1_1.Calculator(); +x.handleChar(); +file1_1.test(); diff --git a/tests/baselines/reference/unusedImports6.errors.txt b/tests/baselines/reference/unusedImports6.errors.txt new file mode 100644 index 00000000000..b27e50ab2d3 --- /dev/null +++ b/tests/baselines/reference/unusedImports6.errors.txt @@ -0,0 +1,25 @@ +tests/cases/compiler/file2.ts(1,8): error TS6133: 'd' is declared but never used. + + +==== tests/cases/compiler/file1.ts (0 errors) ==== + + export class Calculator { + handleChar() {} + } + + export function test() { + + } + + export default function test2() { + + } + +==== tests/cases/compiler/file2.ts (1 errors) ==== + import d from "./file1" + ~ +!!! error TS6133: 'd' is declared but never used. + + + + \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports6.js b/tests/baselines/reference/unusedImports6.js new file mode 100644 index 00000000000..2e203a62a1b --- /dev/null +++ b/tests/baselines/reference/unusedImports6.js @@ -0,0 +1,41 @@ +//// [tests/cases/compiler/unusedImports6.ts] //// + +//// [file1.ts] + +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export default function test2() { + +} + +//// [file2.ts] +import d from "./file1" + + + + + +//// [file1.js] +"use strict"; +var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handleChar = function () { }; + return Calculator; +}()); +exports.Calculator = Calculator; +function test() { +} +exports.test = test; +function test2() { +} +exports.__esModule = true; +exports["default"] = test2; +//// [file2.js] +"use strict"; diff --git a/tests/baselines/reference/unusedImports7.errors.txt b/tests/baselines/reference/unusedImports7.errors.txt new file mode 100644 index 00000000000..1ea8ed60635 --- /dev/null +++ b/tests/baselines/reference/unusedImports7.errors.txt @@ -0,0 +1,23 @@ +tests/cases/compiler/file2.ts(1,13): error TS6133: 'n' is declared but never used. + + +==== tests/cases/compiler/file1.ts (0 errors) ==== + + export class Calculator { + handleChar() {} + } + + export function test() { + + } + + export default function test2() { + + } + +==== tests/cases/compiler/file2.ts (1 errors) ==== + import * as n from "./file1" + ~ +!!! error TS6133: 'n' is declared but never used. + + \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports7.js b/tests/baselines/reference/unusedImports7.js new file mode 100644 index 00000000000..67524fcd22a --- /dev/null +++ b/tests/baselines/reference/unusedImports7.js @@ -0,0 +1,39 @@ +//// [tests/cases/compiler/unusedImports7.ts] //// + +//// [file1.ts] + +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export default function test2() { + +} + +//// [file2.ts] +import * as n from "./file1" + + + +//// [file1.js] +"use strict"; +var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handleChar = function () { }; + return Calculator; +}()); +exports.Calculator = Calculator; +function test() { +} +exports.test = test; +function test2() { +} +exports.__esModule = true; +exports["default"] = test2; +//// [file2.js] +"use strict"; diff --git a/tests/baselines/reference/unusedImports8.errors.txt b/tests/baselines/reference/unusedImports8.errors.txt new file mode 100644 index 00000000000..d82193106b7 --- /dev/null +++ b/tests/baselines/reference/unusedImports8.errors.txt @@ -0,0 +1,25 @@ +tests/cases/compiler/file2.ts(1,50): error TS6133: 't2' is declared but never used. + + +==== tests/cases/compiler/file1.ts (0 errors) ==== + + export class Calculator { + handleChar() {} + } + + export function test() { + + } + + export function test2() { + + } + +==== tests/cases/compiler/file2.ts (1 errors) ==== + import {Calculator as calc, test as t1, test2 as t2} from "./file1" + ~~ +!!! error TS6133: 't2' is declared but never used. + + var x = new calc(); + x.handleChar(); + t1(); \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports8.js b/tests/baselines/reference/unusedImports8.js new file mode 100644 index 00000000000..2554472e6ce --- /dev/null +++ b/tests/baselines/reference/unusedImports8.js @@ -0,0 +1,44 @@ +//// [tests/cases/compiler/unusedImports8.ts] //// + +//// [file1.ts] + +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +//// [file2.ts] +import {Calculator as calc, test as t1, test2 as t2} from "./file1" + +var x = new calc(); +x.handleChar(); +t1(); + +//// [file1.js] +"use strict"; +var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handleChar = function () { }; + return Calculator; +}()); +exports.Calculator = Calculator; +function test() { +} +exports.test = test; +function test2() { +} +exports.test2 = test2; +//// [file2.js] +"use strict"; +var file1_1 = require("./file1"); +var x = new file1_1.Calculator(); +x.handleChar(); +file1_1.test(); diff --git a/tests/baselines/reference/unusedImports9.errors.txt b/tests/baselines/reference/unusedImports9.errors.txt new file mode 100644 index 00000000000..8503a35e290 --- /dev/null +++ b/tests/baselines/reference/unusedImports9.errors.txt @@ -0,0 +1,21 @@ +tests/cases/compiler/file2.ts(1,8): error TS6133: 'c' is declared but never used. + + +==== tests/cases/compiler/file2.ts (1 errors) ==== + import c = require('./file1') + ~ +!!! error TS6133: 'c' is declared but never used. +==== tests/cases/compiler/file1.ts (0 errors) ==== + + export class Calculator { + handleChar() {} + } + + export function test() { + + } + + export function test2() { + + } + \ No newline at end of file diff --git a/tests/baselines/reference/unusedImports9.js b/tests/baselines/reference/unusedImports9.js new file mode 100644 index 00000000000..cd19e167b19 --- /dev/null +++ b/tests/baselines/reference/unusedImports9.js @@ -0,0 +1,36 @@ +//// [tests/cases/compiler/unusedImports9.ts] //// + +//// [file1.ts] + +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +//// [file2.ts] +import c = require('./file1') + +//// [file1.js] +"use strict"; +var Calculator = (function () { + function Calculator() { + } + Calculator.prototype.handleChar = function () { }; + return Calculator; +}()); +exports.Calculator = Calculator; +function test() { +} +exports.test = test; +function test2() { +} +exports.test2 = test2; +//// [file2.js] +"use strict"; diff --git a/tests/baselines/reference/unusedInterfaceinNamespace1.errors.txt b/tests/baselines/reference/unusedInterfaceinNamespace1.errors.txt new file mode 100644 index 00000000000..3fa066e5aae --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace1.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedInterfaceinNamespace1.ts(3,15): error TS6133: 'i1' is declared but never used. + + +==== tests/cases/compiler/unusedInterfaceinNamespace1.ts (1 errors) ==== + + namespace Validation { + interface i1 { + ~~ +!!! error TS6133: 'i1' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedInterfaceinNamespace1.js b/tests/baselines/reference/unusedInterfaceinNamespace1.js new file mode 100644 index 00000000000..8b4334c13c7 --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace1.js @@ -0,0 +1,9 @@ +//// [unusedInterfaceinNamespace1.ts] + +namespace Validation { + interface i1 { + + } +} + +//// [unusedInterfaceinNamespace1.js] diff --git a/tests/baselines/reference/unusedInterfaceinNamespace2.errors.txt b/tests/baselines/reference/unusedInterfaceinNamespace2.errors.txt new file mode 100644 index 00000000000..0635e7be07b --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace2.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/unusedInterfaceinNamespace2.ts(3,15): error TS6133: 'i1' is declared but never used. + + +==== tests/cases/compiler/unusedInterfaceinNamespace2.ts (1 errors) ==== + + namespace Validation { + interface i1 { + ~~ +!!! error TS6133: 'i1' is declared but never used. + + } + + export interface i2 { + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedInterfaceinNamespace2.js b/tests/baselines/reference/unusedInterfaceinNamespace2.js new file mode 100644 index 00000000000..fbec39921d3 --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace2.js @@ -0,0 +1,13 @@ +//// [unusedInterfaceinNamespace2.ts] + +namespace Validation { + interface i1 { + + } + + export interface i2 { + + } +} + +//// [unusedInterfaceinNamespace2.js] diff --git a/tests/baselines/reference/unusedInterfaceinNamespace3.errors.txt b/tests/baselines/reference/unusedInterfaceinNamespace3.errors.txt new file mode 100644 index 00000000000..8aa0e89ae1a --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace3.errors.txt @@ -0,0 +1,20 @@ +tests/cases/compiler/unusedInterfaceinNamespace3.ts(11,15): error TS6133: 'i3' is declared but never used. + + +==== tests/cases/compiler/unusedInterfaceinNamespace3.ts (1 errors) ==== + + namespace Validation { + interface i1 { + + } + + export interface i2 { + + } + + interface i3 extends i1 { + ~~ +!!! error TS6133: 'i3' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedInterfaceinNamespace3.js b/tests/baselines/reference/unusedInterfaceinNamespace3.js new file mode 100644 index 00000000000..7409a3d8623 --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace3.js @@ -0,0 +1,17 @@ +//// [unusedInterfaceinNamespace3.ts] + +namespace Validation { + interface i1 { + + } + + export interface i2 { + + } + + interface i3 extends i1 { + + } +} + +//// [unusedInterfaceinNamespace3.js] diff --git a/tests/baselines/reference/unusedInterfaceinNamespace4.js b/tests/baselines/reference/unusedInterfaceinNamespace4.js new file mode 100644 index 00000000000..51e09a1565b --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace4.js @@ -0,0 +1,30 @@ +//// [unusedInterfaceinNamespace4.ts] + +namespace Validation { + interface i1 { + + } + + export interface i2 { + + } + + interface i3 extends i1 { + + } + + export class c1 implements i3 { + + } +} + +//// [unusedInterfaceinNamespace4.js] +var Validation; +(function (Validation) { + var c1 = (function () { + function c1() { + } + return c1; + }()); + Validation.c1 = c1; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedInterfaceinNamespace4.symbols b/tests/baselines/reference/unusedInterfaceinNamespace4.symbols new file mode 100644 index 00000000000..90b2ff5df70 --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace4.symbols @@ -0,0 +1,27 @@ +=== tests/cases/compiler/unusedInterfaceinNamespace4.ts === + +namespace Validation { +>Validation : Symbol(Validation, Decl(unusedInterfaceinNamespace4.ts, 0, 0)) + + interface i1 { +>i1 : Symbol(i1, Decl(unusedInterfaceinNamespace4.ts, 1, 22)) + + } + + export interface i2 { +>i2 : Symbol(i2, Decl(unusedInterfaceinNamespace4.ts, 4, 5)) + + } + + interface i3 extends i1 { +>i3 : Symbol(i3, Decl(unusedInterfaceinNamespace4.ts, 8, 5)) +>i1 : Symbol(i1, Decl(unusedInterfaceinNamespace4.ts, 1, 22)) + + } + + export class c1 implements i3 { +>c1 : Symbol(c1, Decl(unusedInterfaceinNamespace4.ts, 12, 5)) +>i3 : Symbol(i3, Decl(unusedInterfaceinNamespace4.ts, 8, 5)) + + } +} diff --git a/tests/baselines/reference/unusedInterfaceinNamespace4.types b/tests/baselines/reference/unusedInterfaceinNamespace4.types new file mode 100644 index 00000000000..1b1efebb299 --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace4.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/unusedInterfaceinNamespace4.ts === + +namespace Validation { +>Validation : typeof Validation + + interface i1 { +>i1 : i1 + + } + + export interface i2 { +>i2 : i2 + + } + + interface i3 extends i1 { +>i3 : i3 +>i1 : i1 + + } + + export class c1 implements i3 { +>c1 : c1 +>i3 : i3 + + } +} diff --git a/tests/baselines/reference/unusedInterfaceinNamespace5.js b/tests/baselines/reference/unusedInterfaceinNamespace5.js new file mode 100644 index 00000000000..bb29b33ebca --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace5.js @@ -0,0 +1,36 @@ +//// [unusedInterfaceinNamespace5.ts] + +namespace Validation { + interface i1 { + + } + + export interface i2 { + + } + + interface i3 extends i1 { + + } + + export class c1 implements i3 { + + } + + interface i4 { + + } + + export let c2:i4; +} + +//// [unusedInterfaceinNamespace5.js] +var Validation; +(function (Validation) { + var c1 = (function () { + function c1() { + } + return c1; + }()); + Validation.c1 = c1; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedInterfaceinNamespace5.symbols b/tests/baselines/reference/unusedInterfaceinNamespace5.symbols new file mode 100644 index 00000000000..156dc9a3ef1 --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace5.symbols @@ -0,0 +1,36 @@ +=== tests/cases/compiler/unusedInterfaceinNamespace5.ts === + +namespace Validation { +>Validation : Symbol(Validation, Decl(unusedInterfaceinNamespace5.ts, 0, 0)) + + interface i1 { +>i1 : Symbol(i1, Decl(unusedInterfaceinNamespace5.ts, 1, 22)) + + } + + export interface i2 { +>i2 : Symbol(i2, Decl(unusedInterfaceinNamespace5.ts, 4, 5)) + + } + + interface i3 extends i1 { +>i3 : Symbol(i3, Decl(unusedInterfaceinNamespace5.ts, 8, 5)) +>i1 : Symbol(i1, Decl(unusedInterfaceinNamespace5.ts, 1, 22)) + + } + + export class c1 implements i3 { +>c1 : Symbol(c1, Decl(unusedInterfaceinNamespace5.ts, 12, 5)) +>i3 : Symbol(i3, Decl(unusedInterfaceinNamespace5.ts, 8, 5)) + + } + + interface i4 { +>i4 : Symbol(i4, Decl(unusedInterfaceinNamespace5.ts, 16, 5)) + + } + + export let c2:i4; +>c2 : Symbol(c2, Decl(unusedInterfaceinNamespace5.ts, 22, 14)) +>i4 : Symbol(i4, Decl(unusedInterfaceinNamespace5.ts, 16, 5)) +} diff --git a/tests/baselines/reference/unusedInterfaceinNamespace5.types b/tests/baselines/reference/unusedInterfaceinNamespace5.types new file mode 100644 index 00000000000..db896be80ae --- /dev/null +++ b/tests/baselines/reference/unusedInterfaceinNamespace5.types @@ -0,0 +1,36 @@ +=== tests/cases/compiler/unusedInterfaceinNamespace5.ts === + +namespace Validation { +>Validation : typeof Validation + + interface i1 { +>i1 : i1 + + } + + export interface i2 { +>i2 : i2 + + } + + interface i3 extends i1 { +>i3 : i3 +>i1 : i1 + + } + + export class c1 implements i3 { +>c1 : c1 +>i3 : i3 + + } + + interface i4 { +>i4 : i4 + + } + + export let c2:i4; +>c2 : i4 +>i4 : i4 +} diff --git a/tests/baselines/reference/unusedLocalsAndParameters.errors.txt b/tests/baselines/reference/unusedLocalsAndParameters.errors.txt new file mode 100644 index 00000000000..a7b1d1b37f4 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParameters.errors.txt @@ -0,0 +1,159 @@ +tests/cases/compiler/unusedLocalsAndParameters.ts(5,12): error TS6133: 'a' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(10,22): error TS6133: 'a' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(16,5): error TS6133: 'farrow' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(16,15): error TS6133: 'a' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(19,7): error TS6133: 'C' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(21,12): error TS6133: 'a' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(24,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/unusedLocalsAndParameters.ts(24,11): error TS6133: 'v' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(28,5): error TS6133: 'E' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(30,12): error TS6133: 'a' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(33,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/unusedLocalsAndParameters.ts(33,11): error TS6133: 'v' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(39,12): error TS6133: 'a' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(42,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/unusedLocalsAndParameters.ts(42,11): error TS6133: 'v' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(49,10): error TS6133: 'i' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(53,10): error TS6133: 'i' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(57,17): error TS6133: 'n' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(64,11): error TS6133: 'c' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(69,11): error TS6133: 'a' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(72,11): error TS6133: 'c' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(75,11): error TS6133: 'c' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(80,11): error TS6133: 'N' is declared but never used. +tests/cases/compiler/unusedLocalsAndParameters.ts(81,9): error TS6133: 'x' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsAndParameters.ts (24 errors) ==== + + export { }; + + // function declaration paramter + function f(a) { + ~ +!!! error TS6133: 'a' is declared but never used. + } + f(0); + + // function expression paramter + var fexp = function (a) { + ~ +!!! error TS6133: 'a' is declared but never used. + }; + + fexp(0); + + // arrow function paramter + var farrow = (a) => { + ~~~~~~ +!!! error TS6133: 'farrow' is declared but never used. + ~ +!!! error TS6133: 'a' is declared but never used. + }; + + class C { + ~ +!!! error TS6133: 'C' is declared but never used. + // Method declaration paramter + method(a) { + ~ +!!! error TS6133: 'a' is declared but never used. + } + // Accessor declaration paramter + set x(v: number) { + ~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS6133: 'v' is declared but never used. + } + } + + var E = class { + ~ +!!! error TS6133: 'E' is declared but never used. + // Method declaration paramter + method(a) { + ~ +!!! error TS6133: 'a' is declared but never used. + } + // Accessor declaration paramter + set x(v: number) { + ~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS6133: 'v' is declared but never used. + } + } + + var o = { + // Object literal method declaration paramter + method(a) { + ~ +!!! error TS6133: 'a' is declared but never used. + }, + // Accessor declaration paramter + set x(v: number) { + ~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS6133: 'v' is declared but never used. + } + }; + + o; + + // in a for..in statment + for (let i in o) { + ~ +!!! error TS6133: 'i' is declared but never used. + } + + // in a for..of statment + for (let i of [1, 2, 3]) { + ~ +!!! error TS6133: 'i' is declared but never used. + } + + // in a for. statment + for (let i = 0, n; i < 10; i++) { + ~ +!!! error TS6133: 'n' is declared but never used. + } + + // in a block + + const condition = false; + if (condition) { + const c = 0; + ~ +!!! error TS6133: 'c' is declared but never used. + } + + // in try/catch/finally + try { + const a = 0; + ~ +!!! error TS6133: 'a' is declared but never used. + } + catch (e) { + const c = 1; + ~ +!!! error TS6133: 'c' is declared but never used. + } + finally { + const c = 0; + ~ +!!! error TS6133: 'c' is declared but never used. + } + + + // in a namespace + namespace N { + ~ +!!! error TS6133: 'N' is declared but never used. + var x; + ~ +!!! error TS6133: 'x' is declared but never used. + } + + \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsAndParameters.js b/tests/baselines/reference/unusedLocalsAndParameters.js new file mode 100644 index 00000000000..64ff373db4a --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParameters.js @@ -0,0 +1,168 @@ +//// [unusedLocalsAndParameters.ts] + +export { }; + +// function declaration paramter +function f(a) { +} +f(0); + +// function expression paramter +var fexp = function (a) { +}; + +fexp(0); + +// arrow function paramter +var farrow = (a) => { +}; + +class C { + // Method declaration paramter + method(a) { + } + // Accessor declaration paramter + set x(v: number) { + } +} + +var E = class { + // Method declaration paramter + method(a) { + } + // Accessor declaration paramter + set x(v: number) { + } +} + +var o = { + // Object literal method declaration paramter + method(a) { + }, + // Accessor declaration paramter + set x(v: number) { + } +}; + +o; + +// in a for..in statment +for (let i in o) { +} + +// in a for..of statment +for (let i of [1, 2, 3]) { +} + +// in a for. statment +for (let i = 0, n; i < 10; i++) { +} + +// in a block + +const condition = false; +if (condition) { + const c = 0; +} + +// in try/catch/finally +try { + const a = 0; +} +catch (e) { + const c = 1; +} +finally { + const c = 0; +} + + +// in a namespace +namespace N { + var x; +} + + + +//// [unusedLocalsAndParameters.js] +"use strict"; +// function declaration paramter +function f(a) { +} +f(0); +// function expression paramter +var fexp = function (a) { +}; +fexp(0); +// arrow function paramter +var farrow = function (a) { +}; +var C = (function () { + function C() { + } + // Method declaration paramter + C.prototype.method = function (a) { + }; + Object.defineProperty(C.prototype, "x", { + // Accessor declaration paramter + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return C; +}()); +var E = (function () { + function class_1() { + } + // Method declaration paramter + class_1.prototype.method = function (a) { + }; + Object.defineProperty(class_1.prototype, "x", { + // Accessor declaration paramter + set: function (v) { + }, + enumerable: true, + configurable: true + }); + return class_1; +}()); +var o = { + // Object literal method declaration paramter + method: function (a) { + }, + // Accessor declaration paramter + set x(v) { + } +}; +o; +// in a for..in statment +for (var i in o) { +} +// in a for..of statment +for (var _i = 0, _a = [1, 2, 3]; _i < _a.length; _i++) { + var i = _a[_i]; +} +// in a for. statment +for (var i = 0, n = void 0; i < 10; i++) { +} +// in a block +var condition = false; +if (condition) { + var c = 0; +} +// in try/catch/finally +try { + var a = 0; +} +catch (e) { + var c = 1; +} +finally { + var c = 0; +} +// in a namespace +var N; +(function (N) { + var x; +})(N || (N = {})); diff --git a/tests/baselines/reference/unusedLocalsAndParametersDeferred.errors.txt b/tests/baselines/reference/unusedLocalsAndParametersDeferred.errors.txt new file mode 100644 index 00000000000..63afd213f1c --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersDeferred.errors.txt @@ -0,0 +1,172 @@ +tests/cases/compiler/unusedLocalsAndParametersDeferred.ts(42,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/unusedLocalsAndParametersDeferred.ts(65,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/unusedLocalsAndParametersDeferred.ts(87,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + + +==== tests/cases/compiler/unusedLocalsAndParametersDeferred.ts (3 errors) ==== + + export { }; + + function defered(a: () => T): T { + return a(); + } + + // function declaration paramter + function f(a) { + defered(() => { + a; + }); + } + f(0); + + // function expression paramter + var fexp = function (a) { + defered(() => { + a; + }); + }; + fexp(1); + + // arrow function paramter + var farrow = (a) => { + defered(() => { + a; + }); + }; + farrow(2); + + let prop1; + + class C { + // Method declaration paramter + method(a) { + defered(() => { + a; + }); + } + // Accessor declaration paramter + set x(v: number) { + ~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + defered(() => { + v; + }); + } + // in a property initalizer + p = defered(() => { + prop1; + }); + } + + new C(); + + let prop2; + + var E = class { + // Method declaration paramter + method(a) { + defered(() => { + a; + }); + } + // Accessor declaration paramter + set x(v: number) { + ~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + defered(() => { + v; + }); + } + // in a property initalizer + p = defered(() => { + prop2; + }); + } + + new E(); + + + var o = { + // Object literal method declaration paramter + method(a) { + defered(() => { + a; + }); + }, + // Accessor declaration paramter + set x(v: number) { + ~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + defered(() => { + v; + }); + }, + // in a property initalizer + p: defered(() => { + prop1; + }) + }; + + o; + + // in a for..in statment + for (let i in o) { + defered(() => { + i; + }); + } + + // in a for..of statment + for (let i of [1,2,3]) { + defered(() => { + i; + }); + } + + // in a for. statment + for (let i = 0; i < 10; i++) { + defered(() => { + i; + }); + } + + // in a block + + const condition = false; + if (condition) { + const c = 0; + defered(() => { + c; + }); + } + + // in try/catch/finally + try { + const a = 0; + defered(() => { + a; + }); + } + catch (e) { + const c = 1; + defered(() => { + c; + }); + } + finally { + const c = 0; + defered(() => { + c; + }); + } + + + // in a namespace + namespace N { + var x; + defered(() => { + x; + }); + } + N; + \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsAndParametersDeferred.js b/tests/baselines/reference/unusedLocalsAndParametersDeferred.js new file mode 100644 index 00000000000..d6e2326842a --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersDeferred.js @@ -0,0 +1,325 @@ +//// [unusedLocalsAndParametersDeferred.ts] + +export { }; + +function defered(a: () => T): T { + return a(); +} + +// function declaration paramter +function f(a) { + defered(() => { + a; + }); +} +f(0); + +// function expression paramter +var fexp = function (a) { + defered(() => { + a; + }); +}; +fexp(1); + +// arrow function paramter +var farrow = (a) => { + defered(() => { + a; + }); +}; +farrow(2); + +let prop1; + +class C { + // Method declaration paramter + method(a) { + defered(() => { + a; + }); + } + // Accessor declaration paramter + set x(v: number) { + defered(() => { + v; + }); + } + // in a property initalizer + p = defered(() => { + prop1; + }); +} + +new C(); + +let prop2; + +var E = class { + // Method declaration paramter + method(a) { + defered(() => { + a; + }); + } + // Accessor declaration paramter + set x(v: number) { + defered(() => { + v; + }); + } + // in a property initalizer + p = defered(() => { + prop2; + }); +} + +new E(); + + +var o = { + // Object literal method declaration paramter + method(a) { + defered(() => { + a; + }); + }, + // Accessor declaration paramter + set x(v: number) { + defered(() => { + v; + }); + }, + // in a property initalizer + p: defered(() => { + prop1; + }) +}; + +o; + +// in a for..in statment +for (let i in o) { + defered(() => { + i; + }); +} + +// in a for..of statment +for (let i of [1,2,3]) { + defered(() => { + i; + }); +} + +// in a for. statment +for (let i = 0; i < 10; i++) { + defered(() => { + i; + }); +} + +// in a block + +const condition = false; +if (condition) { + const c = 0; + defered(() => { + c; + }); +} + +// in try/catch/finally +try { + const a = 0; + defered(() => { + a; + }); +} +catch (e) { + const c = 1; + defered(() => { + c; + }); +} +finally { + const c = 0; + defered(() => { + c; + }); +} + + +// in a namespace +namespace N { + var x; + defered(() => { + x; + }); +} +N; + + +//// [unusedLocalsAndParametersDeferred.js] +"use strict"; +function defered(a) { + return a(); +} +// function declaration paramter +function f(a) { + defered(function () { + a; + }); +} +f(0); +// function expression paramter +var fexp = function (a) { + defered(function () { + a; + }); +}; +fexp(1); +// arrow function paramter +var farrow = function (a) { + defered(function () { + a; + }); +}; +farrow(2); +var prop1; +var C = (function () { + function C() { + // in a property initalizer + this.p = defered(function () { + prop1; + }); + } + // Method declaration paramter + C.prototype.method = function (a) { + defered(function () { + a; + }); + }; + Object.defineProperty(C.prototype, "x", { + // Accessor declaration paramter + set: function (v) { + defered(function () { + v; + }); + }, + enumerable: true, + configurable: true + }); + return C; +}()); +new C(); +var prop2; +var E = (function () { + function class_1() { + // in a property initalizer + this.p = defered(function () { + prop2; + }); + } + // Method declaration paramter + class_1.prototype.method = function (a) { + defered(function () { + a; + }); + }; + Object.defineProperty(class_1.prototype, "x", { + // Accessor declaration paramter + set: function (v) { + defered(function () { + v; + }); + }, + enumerable: true, + configurable: true + }); + return class_1; +}()); +new E(); +var o = { + // Object literal method declaration paramter + method: function (a) { + defered(function () { + a; + }); + }, + // Accessor declaration paramter + set x(v) { + defered(function () { + v; + }); + }, + // in a property initalizer + p: defered(function () { + prop1; + }) +}; +o; +var _loop_1 = function (i) { + defered(function () { + i; + }); +}; +// in a for..in statment +for (var i in o) { + _loop_1(i); +} +var _loop_2 = function (i) { + defered(function () { + i; + }); +}; +// in a for..of statment +for (var _i = 0, _a = [1, 2, 3]; _i < _a.length; _i++) { + var i = _a[_i]; + _loop_2(i); +} +var _loop_3 = function (i) { + defered(function () { + i; + }); +}; +// in a for. statment +for (var i = 0; i < 10; i++) { + _loop_3(i); +} +// in a block +var condition = false; +if (condition) { + var c_1 = 0; + defered(function () { + c_1; + }); +} +// in try/catch/finally +try { + var a_1 = 0; + defered(function () { + a_1; + }); +} +catch (e) { + var c_2 = 1; + defered(function () { + c_2; + }); +} +finally { + var c_3 = 0; + defered(function () { + c_3; + }); +} +// in a namespace +var N; +(function (N) { + var x; + defered(function () { + x; + }); +})(N || (N = {})); +N; diff --git a/tests/baselines/reference/unusedLocalsAndParametersOverloadSignatures.js b/tests/baselines/reference/unusedLocalsAndParametersOverloadSignatures.js new file mode 100644 index 00000000000..221d49a0fdf --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersOverloadSignatures.js @@ -0,0 +1,45 @@ +//// [unusedLocalsAndParametersOverloadSignatures.ts] + +export function func(details: number, message: string, ...args: any[]): void; +export function func(details: number, message: string): any { + return details + message; +} + +export class C { + constructor(details: number, message: string, ...args: any[]); + constructor(details: number, message: string) { + details + message; + } + + method(details: number, message: string, ...args: any[]): void; + method(details: number, message: string): any { + return details + message; + } +} + + +export function genericFunc(details: number, message: T, ...args: any[]): void; +export function genericFunc(details: number, message: any): any { + return details + message; +} + +//// [unusedLocalsAndParametersOverloadSignatures.js] +"use strict"; +function func(details, message) { + return details + message; +} +exports.func = func; +var C = (function () { + function C(details, message) { + details + message; + } + C.prototype.method = function (details, message) { + return details + message; + }; + return C; +}()); +exports.C = C; +function genericFunc(details, message) { + return details + message; +} +exports.genericFunc = genericFunc; diff --git a/tests/baselines/reference/unusedLocalsAndParametersOverloadSignatures.symbols b/tests/baselines/reference/unusedLocalsAndParametersOverloadSignatures.symbols new file mode 100644 index 00000000000..da3c47f2e42 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersOverloadSignatures.symbols @@ -0,0 +1,70 @@ +=== tests/cases/compiler/unusedLocalsAndParametersOverloadSignatures.ts === + +export function func(details: number, message: string, ...args: any[]): void; +>func : Symbol(func, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 0, 0), Decl(unusedLocalsAndParametersOverloadSignatures.ts, 1, 77)) +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 1, 21)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 1, 37)) +>args : Symbol(args, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 1, 54)) + +export function func(details: number, message: string): any { +>func : Symbol(func, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 0, 0), Decl(unusedLocalsAndParametersOverloadSignatures.ts, 1, 77)) +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 2, 21)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 2, 37)) + + return details + message; +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 2, 21)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 2, 37)) +} + +export class C { +>C : Symbol(C, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 4, 1)) + + constructor(details: number, message: string, ...args: any[]); +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 7, 16)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 7, 32)) +>args : Symbol(args, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 7, 49)) + + constructor(details: number, message: string) { +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 8, 16)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 8, 32)) + + details + message; +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 8, 16)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 8, 32)) + } + + method(details: number, message: string, ...args: any[]): void; +>method : Symbol(C.method, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 10, 5), Decl(unusedLocalsAndParametersOverloadSignatures.ts, 12, 67)) +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 12, 11)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 12, 27)) +>args : Symbol(args, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 12, 44)) + + method(details: number, message: string): any { +>method : Symbol(C.method, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 10, 5), Decl(unusedLocalsAndParametersOverloadSignatures.ts, 12, 67)) +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 13, 11)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 13, 27)) + + return details + message; +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 13, 11)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 13, 27)) + } +} + + +export function genericFunc(details: number, message: T, ...args: any[]): void; +>genericFunc : Symbol(genericFunc, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 16, 1), Decl(unusedLocalsAndParametersOverloadSignatures.ts, 19, 82)) +>T : Symbol(T, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 19, 28)) +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 19, 31)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 19, 47)) +>T : Symbol(T, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 19, 28)) +>args : Symbol(args, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 19, 59)) + +export function genericFunc(details: number, message: any): any { +>genericFunc : Symbol(genericFunc, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 16, 1), Decl(unusedLocalsAndParametersOverloadSignatures.ts, 19, 82)) +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 20, 28)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 20, 44)) + + return details + message; +>details : Symbol(details, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 20, 28)) +>message : Symbol(message, Decl(unusedLocalsAndParametersOverloadSignatures.ts, 20, 44)) +} diff --git a/tests/baselines/reference/unusedLocalsAndParametersOverloadSignatures.types b/tests/baselines/reference/unusedLocalsAndParametersOverloadSignatures.types new file mode 100644 index 00000000000..2a216c8acd2 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersOverloadSignatures.types @@ -0,0 +1,74 @@ +=== tests/cases/compiler/unusedLocalsAndParametersOverloadSignatures.ts === + +export function func(details: number, message: string, ...args: any[]): void; +>func : (details: number, message: string, ...args: any[]) => void +>details : number +>message : string +>args : any[] + +export function func(details: number, message: string): any { +>func : (details: number, message: string, ...args: any[]) => void +>details : number +>message : string + + return details + message; +>details + message : string +>details : number +>message : string +} + +export class C { +>C : C + + constructor(details: number, message: string, ...args: any[]); +>details : number +>message : string +>args : any[] + + constructor(details: number, message: string) { +>details : number +>message : string + + details + message; +>details + message : string +>details : number +>message : string + } + + method(details: number, message: string, ...args: any[]): void; +>method : (details: number, message: string, ...args: any[]) => void +>details : number +>message : string +>args : any[] + + method(details: number, message: string): any { +>method : (details: number, message: string, ...args: any[]) => void +>details : number +>message : string + + return details + message; +>details + message : string +>details : number +>message : string + } +} + + +export function genericFunc(details: number, message: T, ...args: any[]): void; +>genericFunc : (details: number, message: T, ...args: any[]) => void +>T : T +>details : number +>message : T +>T : T +>args : any[] + +export function genericFunc(details: number, message: any): any { +>genericFunc : (details: number, message: T, ...args: any[]) => void +>details : number +>message : any + + return details + message; +>details + message : any +>details : number +>message : any +} diff --git a/tests/baselines/reference/unusedLocalsAndParametersTypeAliases.js b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases.js new file mode 100644 index 00000000000..b854278a3e3 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases.js @@ -0,0 +1,35 @@ +//// [unusedLocalsAndParametersTypeAliases.ts] + +// used in a declaration +type handler1 = () => void; +export interface I1 { + getHandler: handler1; +} + +// exported +export type handler2 = () => void; + +// used in extends clause +type handler3 = () => void; +export interface I3 { + getHandler: T; +} + +// used in another type alias declaration +type handler4 = () => void; +type handler5 = handler4 | (()=>number); +var x: handler5; +x(); + +// used as type argument +type handler6 = () => void; +var y: Array; +y[0](); + + +//// [unusedLocalsAndParametersTypeAliases.js] +"use strict"; +var x; +x(); +var y; +y[0](); diff --git a/tests/baselines/reference/unusedLocalsAndParametersTypeAliases.symbols b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases.symbols new file mode 100644 index 00000000000..9f9004d7a28 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases.symbols @@ -0,0 +1,59 @@ +=== tests/cases/compiler/unusedLocalsAndParametersTypeAliases.ts === + +// used in a declaration +type handler1 = () => void; +>handler1 : Symbol(handler1, Decl(unusedLocalsAndParametersTypeAliases.ts, 0, 0)) + +export interface I1 { +>I1 : Symbol(I1, Decl(unusedLocalsAndParametersTypeAliases.ts, 2, 27)) + + getHandler: handler1; +>getHandler : Symbol(I1.getHandler, Decl(unusedLocalsAndParametersTypeAliases.ts, 3, 21)) +>handler1 : Symbol(handler1, Decl(unusedLocalsAndParametersTypeAliases.ts, 0, 0)) +} + +// exported +export type handler2 = () => void; +>handler2 : Symbol(handler2, Decl(unusedLocalsAndParametersTypeAliases.ts, 5, 1)) + +// used in extends clause +type handler3 = () => void; +>handler3 : Symbol(handler3, Decl(unusedLocalsAndParametersTypeAliases.ts, 8, 34)) + +export interface I3 { +>I3 : Symbol(I3, Decl(unusedLocalsAndParametersTypeAliases.ts, 11, 27)) +>T : Symbol(T, Decl(unusedLocalsAndParametersTypeAliases.ts, 12, 20)) +>handler3 : Symbol(handler3, Decl(unusedLocalsAndParametersTypeAliases.ts, 8, 34)) + + getHandler: T; +>getHandler : Symbol(I3.getHandler, Decl(unusedLocalsAndParametersTypeAliases.ts, 12, 41)) +>T : Symbol(T, Decl(unusedLocalsAndParametersTypeAliases.ts, 12, 20)) +} + +// used in another type alias declaration +type handler4 = () => void; +>handler4 : Symbol(handler4, Decl(unusedLocalsAndParametersTypeAliases.ts, 14, 1)) + +type handler5 = handler4 | (()=>number); +>handler5 : Symbol(handler5, Decl(unusedLocalsAndParametersTypeAliases.ts, 17, 27)) +>handler4 : Symbol(handler4, Decl(unusedLocalsAndParametersTypeAliases.ts, 14, 1)) + +var x: handler5; +>x : Symbol(x, Decl(unusedLocalsAndParametersTypeAliases.ts, 19, 3)) +>handler5 : Symbol(handler5, Decl(unusedLocalsAndParametersTypeAliases.ts, 17, 27)) + +x(); +>x : Symbol(x, Decl(unusedLocalsAndParametersTypeAliases.ts, 19, 3)) + +// used as type argument +type handler6 = () => void; +>handler6 : Symbol(handler6, Decl(unusedLocalsAndParametersTypeAliases.ts, 20, 4)) + +var y: Array; +>y : Symbol(y, Decl(unusedLocalsAndParametersTypeAliases.ts, 24, 3)) +>Array : Symbol(Array, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>handler6 : Symbol(handler6, Decl(unusedLocalsAndParametersTypeAliases.ts, 20, 4)) + +y[0](); +>y : Symbol(y, Decl(unusedLocalsAndParametersTypeAliases.ts, 24, 3)) + diff --git a/tests/baselines/reference/unusedLocalsAndParametersTypeAliases.types b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases.types new file mode 100644 index 00000000000..82c87deb7d0 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases.types @@ -0,0 +1,63 @@ +=== tests/cases/compiler/unusedLocalsAndParametersTypeAliases.ts === + +// used in a declaration +type handler1 = () => void; +>handler1 : () => void + +export interface I1 { +>I1 : I1 + + getHandler: handler1; +>getHandler : () => void +>handler1 : () => void +} + +// exported +export type handler2 = () => void; +>handler2 : () => void + +// used in extends clause +type handler3 = () => void; +>handler3 : () => void + +export interface I3 { +>I3 : I3 +>T : T +>handler3 : () => void + + getHandler: T; +>getHandler : T +>T : T +} + +// used in another type alias declaration +type handler4 = () => void; +>handler4 : () => void + +type handler5 = handler4 | (()=>number); +>handler5 : (() => void) | (() => number) +>handler4 : () => void + +var x: handler5; +>x : (() => void) | (() => number) +>handler5 : (() => void) | (() => number) + +x(); +>x() : void | number +>x : (() => void) | (() => number) + +// used as type argument +type handler6 = () => void; +>handler6 : () => void + +var y: Array; +>y : (() => void)[] +>Array : T[] +>handler6 : () => void + +y[0](); +>y[0]() : void +>y[0] : () => void +>y : (() => void)[] +>0 : number + diff --git a/tests/baselines/reference/unusedLocalsAndParametersTypeAliases2.errors.txt b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases2.errors.txt new file mode 100644 index 00000000000..d6abf6f2f3f --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases2.errors.txt @@ -0,0 +1,20 @@ +tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts(3,6): error TS6133: 'handler1' is declared but never used. +tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts(7,10): error TS6133: 'handler2' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts (2 errors) ==== + + // unused + type handler1 = () => void; + ~~~~~~~~ +!!! error TS6133: 'handler1' is declared but never used. + + + function foo() { + type handler2 = () => void; + ~~~~~~~~ +!!! error TS6133: 'handler2' is declared but never used. + foo(); + } + + export {} \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsAndParametersTypeAliases2.js b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases2.js new file mode 100644 index 00000000000..7da916370ca --- /dev/null +++ b/tests/baselines/reference/unusedLocalsAndParametersTypeAliases2.js @@ -0,0 +1,18 @@ +//// [unusedLocalsAndParametersTypeAliases2.ts] + +// unused +type handler1 = () => void; + + +function foo() { + type handler2 = () => void; + foo(); +} + +export {} + +//// [unusedLocalsAndParametersTypeAliases2.js] +"use strict"; +function foo() { + foo(); +} diff --git a/tests/baselines/reference/unusedLocalsInMethod1.errors.txt b/tests/baselines/reference/unusedLocalsInMethod1.errors.txt new file mode 100644 index 00000000000..18141e5acdd --- /dev/null +++ b/tests/baselines/reference/unusedLocalsInMethod1.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedLocalsInMethod1.ts(4,13): error TS6133: 'x' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsInMethod1.ts (1 errors) ==== + + class greeter { + public function1() { + var x = 10; + ~ +!!! error TS6133: 'x' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsInMethod1.js b/tests/baselines/reference/unusedLocalsInMethod1.js new file mode 100644 index 00000000000..7f2e555ab62 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsInMethod1.js @@ -0,0 +1,17 @@ +//// [unusedLocalsInMethod1.ts] + +class greeter { + public function1() { + var x = 10; + } +} + +//// [unusedLocalsInMethod1.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.function1 = function () { + var x = 10; + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedLocalsInMethod2.errors.txt b/tests/baselines/reference/unusedLocalsInMethod2.errors.txt new file mode 100644 index 00000000000..524580bcdf4 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsInMethod2.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedLocalsInMethod2.ts(4,13): error TS6133: 'x' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsInMethod2.ts (1 errors) ==== + + class greeter { + public function1() { + var x, y = 10; + ~ +!!! error TS6133: 'x' is declared but never used. + y++; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsInMethod2.js b/tests/baselines/reference/unusedLocalsInMethod2.js new file mode 100644 index 00000000000..b92de249750 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsInMethod2.js @@ -0,0 +1,19 @@ +//// [unusedLocalsInMethod2.ts] + +class greeter { + public function1() { + var x, y = 10; + y++; + } +} + +//// [unusedLocalsInMethod2.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.function1 = function () { + var x, y = 10; + y++; + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedLocalsInMethod3.errors.txt b/tests/baselines/reference/unusedLocalsInMethod3.errors.txt new file mode 100644 index 00000000000..b82ceaedba2 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsInMethod3.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedLocalsInMethod3.ts(4,13): error TS6133: 'x' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsInMethod3.ts (1 errors) ==== + + class greeter { + public function1() { + var x, y; + ~ +!!! error TS6133: 'x' is declared but never used. + y = 1; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsInMethod3.js b/tests/baselines/reference/unusedLocalsInMethod3.js new file mode 100644 index 00000000000..ff148f7a78f --- /dev/null +++ b/tests/baselines/reference/unusedLocalsInMethod3.js @@ -0,0 +1,19 @@ +//// [unusedLocalsInMethod3.ts] + +class greeter { + public function1() { + var x, y; + y = 1; + } +} + +//// [unusedLocalsInMethod3.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.function1 = function () { + var x, y; + y = 1; + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.errors.txt b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.errors.txt new file mode 100644 index 00000000000..fa8337c8f17 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.errors.txt @@ -0,0 +1,26 @@ +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(2,18): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(3,9): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(4,14): error TS6133: 'maker' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(4,20): error TS6133: 'child' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(5,13): error TS6133: 'unused2' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts (5 errors) ==== + + function greeter(person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + function maker(child: string): void { + ~~~~~ +!!! error TS6133: 'maker' is declared but never used. + ~~~~~ +!!! error TS6133: 'child' is declared but never used. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but never used. + } + person2 = "dummy value"; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.js b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.js new file mode 100644 index 00000000000..a8da9dcfa87 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.js @@ -0,0 +1,18 @@ +//// [unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts] + +function greeter(person: string, person2: string) { + var unused = 20; + function maker(child: string): void { + var unused2 = 22; + } + person2 = "dummy value"; +} + +//// [unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.js] +function greeter(person, person2) { + var unused = 20; + function maker(child) { + var unused2 = 22; + } + person2 = "dummy value"; +} diff --git a/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.errors.txt b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.errors.txt new file mode 100644 index 00000000000..0e56f97d1a3 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.errors.txt @@ -0,0 +1,35 @@ +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(2,18): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(3,9): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(4,14): error TS6133: 'maker' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(4,20): error TS6133: 'child' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(5,13): error TS6133: 'unused2' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(7,21): error TS6133: 'child2' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(8,13): error TS6133: 'unused3' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts (7 errors) ==== + + function greeter(person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + function maker(child: string): void { + ~~~~~ +!!! error TS6133: 'maker' is declared but never used. + ~~~~~ +!!! error TS6133: 'child' is declared but never used. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but never used. + } + function maker2(child2: string): void { + ~~~~~~ +!!! error TS6133: 'child2' is declared but never used. + var unused3 = 23; + ~~~~~~~ +!!! error TS6133: 'unused3' is declared but never used. + } + maker2(person2); + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.js b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.js new file mode 100644 index 00000000000..28b5057d640 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.js @@ -0,0 +1,24 @@ +//// [unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts] + +function greeter(person: string, person2: string) { + var unused = 20; + function maker(child: string): void { + var unused2 = 22; + } + function maker2(child2: string): void { + var unused3 = 23; + } + maker2(person2); +} + +//// [unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.js] +function greeter(person, person2) { + var unused = 20; + function maker(child) { + var unused2 = 22; + } + function maker2(child2) { + var unused3 = 23; + } + maker2(person2); +} diff --git a/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.errors.txt b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.errors.txt new file mode 100644 index 00000000000..0b161952835 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.errors.txt @@ -0,0 +1,26 @@ +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(2,25): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(3,9): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(4,14): error TS6133: 'maker' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(4,20): error TS6133: 'child' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(5,13): error TS6133: 'unused2' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts (5 errors) ==== + + var greeter = function (person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + function maker(child: string): void { + ~~~~~ +!!! error TS6133: 'maker' is declared but never used. + ~~~~~ +!!! error TS6133: 'child' is declared but never used. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but never used. + } + person2 = "dummy value"; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.js b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.js new file mode 100644 index 00000000000..b9c76493239 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.js @@ -0,0 +1,18 @@ +//// [unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts] + +var greeter = function (person: string, person2: string) { + var unused = 20; + function maker(child: string): void { + var unused2 = 22; + } + person2 = "dummy value"; +} + +//// [unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.js] +var greeter = function (person, person2) { + var unused = 20; + function maker(child) { + var unused2 = 22; + } + person2 = "dummy value"; +}; diff --git a/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.errors.txt b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.errors.txt new file mode 100644 index 00000000000..7e772d98637 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.errors.txt @@ -0,0 +1,35 @@ +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(2,25): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(3,9): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(4,14): error TS6133: 'maker' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(4,20): error TS6133: 'child' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(5,13): error TS6133: 'unused2' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(7,21): error TS6133: 'child2' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(8,13): error TS6133: 'unused3' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts (7 errors) ==== + + var greeter = function (person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + function maker(child: string): void { + ~~~~~ +!!! error TS6133: 'maker' is declared but never used. + ~~~~~ +!!! error TS6133: 'child' is declared but never used. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but never used. + } + function maker2(child2: string): void { + ~~~~~~ +!!! error TS6133: 'child2' is declared but never used. + var unused3 = 23; + ~~~~~~~ +!!! error TS6133: 'unused3' is declared but never used. + } + maker2(person2); + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.js b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.js new file mode 100644 index 00000000000..e7930da686c --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.js @@ -0,0 +1,24 @@ +//// [unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts] + +var greeter = function (person: string, person2: string) { + var unused = 20; + function maker(child: string): void { + var unused2 = 22; + } + function maker2(child2: string): void { + var unused3 = 23; + } + maker2(person2); +} + +//// [unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.js] +var greeter = function (person, person2) { + var unused = 20; + function maker(child) { + var unused2 = 22; + } + function maker2(child2) { + var unused3 = 23; + } + maker2(person2); +}; diff --git a/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.errors.txt b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.errors.txt new file mode 100644 index 00000000000..99a4fef8958 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.errors.txt @@ -0,0 +1,26 @@ +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(2,18): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(3,9): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(4,9): error TS6133: 'maker' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(4,27): error TS6133: 'child' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(5,13): error TS6133: 'unused2' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts (5 errors) ==== + + function greeter(person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + var maker = function (child: string): void { + ~~~~~ +!!! error TS6133: 'maker' is declared but never used. + ~~~~~ +!!! error TS6133: 'child' is declared but never used. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but never used. + } + person2 = "dummy value"; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.js b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.js new file mode 100644 index 00000000000..880053a8667 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.js @@ -0,0 +1,18 @@ +//// [unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts] + +function greeter(person: string, person2: string) { + var unused = 20; + var maker = function (child: string): void { + var unused2 = 22; + } + person2 = "dummy value"; +} + +//// [unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.js] +function greeter(person, person2) { + var unused = 20; + var maker = function (child) { + var unused2 = 22; + }; + person2 = "dummy value"; +} diff --git a/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.errors.txt b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.errors.txt new file mode 100644 index 00000000000..8eb1e73d87c --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.errors.txt @@ -0,0 +1,35 @@ +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(2,18): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(3,9): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(4,9): error TS6133: 'maker' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(4,26): error TS6133: 'child' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(5,13): error TS6133: 'unused2' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(7,27): error TS6133: 'child2' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(8,13): error TS6133: 'unused3' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts (7 errors) ==== + + function greeter(person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + var maker = function(child: string): void { + ~~~~~ +!!! error TS6133: 'maker' is declared but never used. + ~~~~~ +!!! error TS6133: 'child' is declared but never used. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but never used. + } + var maker2 = function(child2: string): void { + ~~~~~~ +!!! error TS6133: 'child2' is declared but never used. + var unused3 = 23; + ~~~~~~~ +!!! error TS6133: 'unused3' is declared but never used. + } + maker2(person2); + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.js b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.js new file mode 100644 index 00000000000..fb37bf9cb5a --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.js @@ -0,0 +1,24 @@ +//// [unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts] + +function greeter(person: string, person2: string) { + var unused = 20; + var maker = function(child: string): void { + var unused2 = 22; + } + var maker2 = function(child2: string): void { + var unused3 = 23; + } + maker2(person2); +} + +//// [unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.js] +function greeter(person, person2) { + var unused = 20; + var maker = function (child) { + var unused2 = 22; + }; + var maker2 = function (child2) { + var unused3 = 23; + }; + maker2(person2); +} diff --git a/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.errors.txt b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.errors.txt new file mode 100644 index 00000000000..dd4778b4f3d --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.errors.txt @@ -0,0 +1,26 @@ +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(2,25): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(3,9): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(4,9): error TS6133: 'maker' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(4,27): error TS6133: 'child' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(5,13): error TS6133: 'unused2' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts (5 errors) ==== + + var greeter = function (person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + var maker = function (child: string): void { + ~~~~~ +!!! error TS6133: 'maker' is declared but never used. + ~~~~~ +!!! error TS6133: 'child' is declared but never used. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but never used. + } + person2 = "dummy value"; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.js b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.js new file mode 100644 index 00000000000..299c0e97b94 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.js @@ -0,0 +1,18 @@ +//// [unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts] + +var greeter = function (person: string, person2: string) { + var unused = 20; + var maker = function (child: string): void { + var unused2 = 22; + } + person2 = "dummy value"; +} + +//// [unusedLocalsOnFunctionExpressionWithinFunctionExpression1.js] +var greeter = function (person, person2) { + var unused = 20; + var maker = function (child) { + var unused2 = 22; + }; + person2 = "dummy value"; +}; diff --git a/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.errors.txt b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.errors.txt new file mode 100644 index 00000000000..6d22b7a2bde --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.errors.txt @@ -0,0 +1,35 @@ +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(2,25): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(3,9): error TS6133: 'unused' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(4,9): error TS6133: 'maker' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(4,27): error TS6133: 'child' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(5,13): error TS6133: 'unused2' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(7,28): error TS6133: 'child2' is declared but never used. +tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(8,13): error TS6133: 'unused3' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts (7 errors) ==== + + var greeter = function (person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + var maker = function (child: string): void { + ~~~~~ +!!! error TS6133: 'maker' is declared but never used. + ~~~~~ +!!! error TS6133: 'child' is declared but never used. + var unused2 = 22; + ~~~~~~~ +!!! error TS6133: 'unused2' is declared but never used. + } + var maker2 = function (child2: string): void { + ~~~~~~ +!!! error TS6133: 'child2' is declared but never used. + var unused3 = 23; + ~~~~~~~ +!!! error TS6133: 'unused3' is declared but never used. + } + maker2(person2); + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.js b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.js new file mode 100644 index 00000000000..00ba31b16d7 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.js @@ -0,0 +1,24 @@ +//// [unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts] + +var greeter = function (person: string, person2: string) { + var unused = 20; + var maker = function (child: string): void { + var unused2 = 22; + } + var maker2 = function (child2: string): void { + var unused3 = 23; + } + maker2(person2); +} + +//// [unusedLocalsOnFunctionExpressionWithinFunctionExpression2.js] +var greeter = function (person, person2) { + var unused = 20; + var maker = function (child) { + var unused2 = 22; + }; + var maker2 = function (child2) { + var unused3 = 23; + }; + maker2(person2); +}; diff --git a/tests/baselines/reference/unusedLocalsinConstructor1.errors.txt b/tests/baselines/reference/unusedLocalsinConstructor1.errors.txt new file mode 100644 index 00000000000..6fa3ef08839 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsinConstructor1.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedLocalsinConstructor1.ts(4,13): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsinConstructor1.ts (1 errors) ==== + + class greeter { + constructor() { + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsinConstructor1.js b/tests/baselines/reference/unusedLocalsinConstructor1.js new file mode 100644 index 00000000000..28bd7573068 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsinConstructor1.js @@ -0,0 +1,15 @@ +//// [unusedLocalsinConstructor1.ts] + +class greeter { + constructor() { + var unused = 20; + } +} + +//// [unusedLocalsinConstructor1.js] +var greeter = (function () { + function greeter() { + var unused = 20; + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedLocalsinConstructor2.errors.txt b/tests/baselines/reference/unusedLocalsinConstructor2.errors.txt new file mode 100644 index 00000000000..44c0bddf87c --- /dev/null +++ b/tests/baselines/reference/unusedLocalsinConstructor2.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedLocalsinConstructor2.ts(4,13): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedLocalsinConstructor2.ts (1 errors) ==== + + class greeter { + constructor() { + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + var used = "dummy"; + used = used + "second part"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsinConstructor2.js b/tests/baselines/reference/unusedLocalsinConstructor2.js new file mode 100644 index 00000000000..2fda63d28a3 --- /dev/null +++ b/tests/baselines/reference/unusedLocalsinConstructor2.js @@ -0,0 +1,19 @@ +//// [unusedLocalsinConstructor2.ts] + +class greeter { + constructor() { + var unused = 20; + var used = "dummy"; + used = used + "second part"; + } +} + +//// [unusedLocalsinConstructor2.js] +var greeter = (function () { + function greeter() { + var unused = 20; + var used = "dummy"; + used = used + "second part"; + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedMethodsInInterface.js b/tests/baselines/reference/unusedMethodsInInterface.js new file mode 100644 index 00000000000..7a1142d99b9 --- /dev/null +++ b/tests/baselines/reference/unusedMethodsInInterface.js @@ -0,0 +1,8 @@ +//// [unusedMethodsInInterface.ts] + +interface I1 { + f1(); + f2(x: number, y: string); +} + +//// [unusedMethodsInInterface.js] diff --git a/tests/baselines/reference/unusedMethodsInInterface.symbols b/tests/baselines/reference/unusedMethodsInInterface.symbols new file mode 100644 index 00000000000..66e4c6cb100 --- /dev/null +++ b/tests/baselines/reference/unusedMethodsInInterface.symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/unusedMethodsInInterface.ts === + +interface I1 { +>I1 : Symbol(I1, Decl(unusedMethodsInInterface.ts, 0, 0)) + + f1(); +>f1 : Symbol(I1.f1, Decl(unusedMethodsInInterface.ts, 1, 14)) + + f2(x: number, y: string); +>f2 : Symbol(I1.f2, Decl(unusedMethodsInInterface.ts, 2, 9)) +>x : Symbol(x, Decl(unusedMethodsInInterface.ts, 3, 7)) +>y : Symbol(y, Decl(unusedMethodsInInterface.ts, 3, 17)) +} diff --git a/tests/baselines/reference/unusedMethodsInInterface.types b/tests/baselines/reference/unusedMethodsInInterface.types new file mode 100644 index 00000000000..eb1befac9f0 --- /dev/null +++ b/tests/baselines/reference/unusedMethodsInInterface.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/unusedMethodsInInterface.ts === + +interface I1 { +>I1 : I1 + + f1(); +>f1 : () => any + + f2(x: number, y: string); +>f2 : (x: number, y: string) => any +>x : number +>y : string +} diff --git a/tests/baselines/reference/unusedModuleInModule.errors.txt b/tests/baselines/reference/unusedModuleInModule.errors.txt new file mode 100644 index 00000000000..2430b07c392 --- /dev/null +++ b/tests/baselines/reference/unusedModuleInModule.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/unusedModuleInModule.ts(3,12): error TS6133: 'B' is declared but never used. + + +==== tests/cases/compiler/unusedModuleInModule.ts (1 errors) ==== + + module A { + module B {} + ~ +!!! error TS6133: 'B' is declared but never used. + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedModuleInModule.js b/tests/baselines/reference/unusedModuleInModule.js new file mode 100644 index 00000000000..68042be9321 --- /dev/null +++ b/tests/baselines/reference/unusedModuleInModule.js @@ -0,0 +1,7 @@ +//// [unusedModuleInModule.ts] + +module A { + module B {} +} + +//// [unusedModuleInModule.js] diff --git a/tests/baselines/reference/unusedMultipleParameter1InContructor.errors.txt b/tests/baselines/reference/unusedMultipleParameter1InContructor.errors.txt new file mode 100644 index 00000000000..28cfc1d578f --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameter1InContructor.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/unusedMultipleParameter1InContructor.ts(3,17): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedMultipleParameter1InContructor.ts(4,13): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedMultipleParameter1InContructor.ts (2 errors) ==== + + class Dummy { + constructor(person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + person2 = "Dummy value"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedMultipleParameter1InContructor.js b/tests/baselines/reference/unusedMultipleParameter1InContructor.js new file mode 100644 index 00000000000..e236ea3d26a --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameter1InContructor.js @@ -0,0 +1,17 @@ +//// [unusedMultipleParameter1InContructor.ts] + +class Dummy { + constructor(person: string, person2: string) { + var unused = 20; + person2 = "Dummy value"; + } +} + +//// [unusedMultipleParameter1InContructor.js] +var Dummy = (function () { + function Dummy(person, person2) { + var unused = 20; + person2 = "Dummy value"; + } + return Dummy; +}()); diff --git a/tests/baselines/reference/unusedMultipleParameter1InFunctionExpression.errors.txt b/tests/baselines/reference/unusedMultipleParameter1InFunctionExpression.errors.txt new file mode 100644 index 00000000000..d841f7064a1 --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameter1InFunctionExpression.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedMultipleParameter1InFunctionExpression.ts(2,21): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedMultipleParameter1InFunctionExpression.ts(3,9): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedMultipleParameter1InFunctionExpression.ts (2 errors) ==== + + var func = function(person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + person2 = "Dummy value"; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedMultipleParameter1InFunctionExpression.js b/tests/baselines/reference/unusedMultipleParameter1InFunctionExpression.js new file mode 100644 index 00000000000..55a697cc3e0 --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameter1InFunctionExpression.js @@ -0,0 +1,12 @@ +//// [unusedMultipleParameter1InFunctionExpression.ts] + +var func = function(person: string, person2: string) { + var unused = 20; + person2 = "Dummy value"; +} + +//// [unusedMultipleParameter1InFunctionExpression.js] +var func = function (person, person2) { + var unused = 20; + person2 = "Dummy value"; +}; diff --git a/tests/baselines/reference/unusedMultipleParameter2InContructor.errors.txt b/tests/baselines/reference/unusedMultipleParameter2InContructor.errors.txt new file mode 100644 index 00000000000..2397a849c5c --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameter2InContructor.errors.txt @@ -0,0 +1,19 @@ +tests/cases/compiler/unusedMultipleParameter2InContructor.ts(3,17): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedMultipleParameter2InContructor.ts(3,50): error TS6133: 'person3' is declared but never used. +tests/cases/compiler/unusedMultipleParameter2InContructor.ts(4,13): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedMultipleParameter2InContructor.ts (3 errors) ==== + + class Dummy { + constructor(person: string, person2: string, person3: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + ~~~~~~~ +!!! error TS6133: 'person3' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + person2 = "Dummy value"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedMultipleParameter2InContructor.js b/tests/baselines/reference/unusedMultipleParameter2InContructor.js new file mode 100644 index 00000000000..8ffd4c36591 --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameter2InContructor.js @@ -0,0 +1,17 @@ +//// [unusedMultipleParameter2InContructor.ts] + +class Dummy { + constructor(person: string, person2: string, person3: string) { + var unused = 20; + person2 = "Dummy value"; + } +} + +//// [unusedMultipleParameter2InContructor.js] +var Dummy = (function () { + function Dummy(person, person2, person3) { + var unused = 20; + person2 = "Dummy value"; + } + return Dummy; +}()); diff --git a/tests/baselines/reference/unusedMultipleParameter2InFunctionExpression.errors.txt b/tests/baselines/reference/unusedMultipleParameter2InFunctionExpression.errors.txt new file mode 100644 index 00000000000..1a4e78cd9fa --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameter2InFunctionExpression.errors.txt @@ -0,0 +1,17 @@ +tests/cases/compiler/unusedMultipleParameter2InFunctionExpression.ts(2,21): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedMultipleParameter2InFunctionExpression.ts(2,54): error TS6133: 'person3' is declared but never used. +tests/cases/compiler/unusedMultipleParameter2InFunctionExpression.ts(3,9): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedMultipleParameter2InFunctionExpression.ts (3 errors) ==== + + var func = function(person: string, person2: string, person3: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + ~~~~~~~ +!!! error TS6133: 'person3' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + person2 = "Dummy value"; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedMultipleParameter2InFunctionExpression.js b/tests/baselines/reference/unusedMultipleParameter2InFunctionExpression.js new file mode 100644 index 00000000000..1c35c1762f3 --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameter2InFunctionExpression.js @@ -0,0 +1,12 @@ +//// [unusedMultipleParameter2InFunctionExpression.ts] + +var func = function(person: string, person2: string, person3: string) { + var unused = 20; + person2 = "Dummy value"; +} + +//// [unusedMultipleParameter2InFunctionExpression.js] +var func = function (person, person2, person3) { + var unused = 20; + person2 = "Dummy value"; +}; diff --git a/tests/baselines/reference/unusedMultipleParameters1InFunctionDeclaration.errors.txt b/tests/baselines/reference/unusedMultipleParameters1InFunctionDeclaration.errors.txt new file mode 100644 index 00000000000..5ca5eb3bd0c --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameters1InFunctionDeclaration.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedMultipleParameters1InFunctionDeclaration.ts(2,18): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedMultipleParameters1InFunctionDeclaration.ts(3,9): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedMultipleParameters1InFunctionDeclaration.ts (2 errors) ==== + + function greeter(person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + person2 = "dummy value"; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedMultipleParameters1InFunctionDeclaration.js b/tests/baselines/reference/unusedMultipleParameters1InFunctionDeclaration.js new file mode 100644 index 00000000000..caac12c8735 --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameters1InFunctionDeclaration.js @@ -0,0 +1,12 @@ +//// [unusedMultipleParameters1InFunctionDeclaration.ts] + +function greeter(person: string, person2: string) { + var unused = 20; + person2 = "dummy value"; +} + +//// [unusedMultipleParameters1InFunctionDeclaration.js] +function greeter(person, person2) { + var unused = 20; + person2 = "dummy value"; +} diff --git a/tests/baselines/reference/unusedMultipleParameters1InMethodDeclaration.errors.txt b/tests/baselines/reference/unusedMultipleParameters1InMethodDeclaration.errors.txt new file mode 100644 index 00000000000..9e917be257e --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameters1InMethodDeclaration.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/unusedMultipleParameters1InMethodDeclaration.ts(3,20): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedMultipleParameters1InMethodDeclaration.ts(4,13): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedMultipleParameters1InMethodDeclaration.ts (2 errors) ==== + + class Dummy { + public greeter(person: string, person2: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + person2 = "dummy value"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedMultipleParameters1InMethodDeclaration.js b/tests/baselines/reference/unusedMultipleParameters1InMethodDeclaration.js new file mode 100644 index 00000000000..bc78da7bd75 --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameters1InMethodDeclaration.js @@ -0,0 +1,19 @@ +//// [unusedMultipleParameters1InMethodDeclaration.ts] + +class Dummy { + public greeter(person: string, person2: string) { + var unused = 20; + person2 = "dummy value"; + } +} + +//// [unusedMultipleParameters1InMethodDeclaration.js] +var Dummy = (function () { + function Dummy() { + } + Dummy.prototype.greeter = function (person, person2) { + var unused = 20; + person2 = "dummy value"; + }; + return Dummy; +}()); diff --git a/tests/baselines/reference/unusedMultipleParameters2InFunctionDeclaration.errors.txt b/tests/baselines/reference/unusedMultipleParameters2InFunctionDeclaration.errors.txt new file mode 100644 index 00000000000..0c755b404cd --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameters2InFunctionDeclaration.errors.txt @@ -0,0 +1,17 @@ +tests/cases/compiler/unusedMultipleParameters2InFunctionDeclaration.ts(2,18): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedMultipleParameters2InFunctionDeclaration.ts(2,51): error TS6133: 'person3' is declared but never used. +tests/cases/compiler/unusedMultipleParameters2InFunctionDeclaration.ts(3,9): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedMultipleParameters2InFunctionDeclaration.ts (3 errors) ==== + + function greeter(person: string, person2: string, person3: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + ~~~~~~~ +!!! error TS6133: 'person3' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + person2 = "dummy value"; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedMultipleParameters2InFunctionDeclaration.js b/tests/baselines/reference/unusedMultipleParameters2InFunctionDeclaration.js new file mode 100644 index 00000000000..1197cabf646 --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameters2InFunctionDeclaration.js @@ -0,0 +1,12 @@ +//// [unusedMultipleParameters2InFunctionDeclaration.ts] + +function greeter(person: string, person2: string, person3: string) { + var unused = 20; + person2 = "dummy value"; +} + +//// [unusedMultipleParameters2InFunctionDeclaration.js] +function greeter(person, person2, person3) { + var unused = 20; + person2 = "dummy value"; +} diff --git a/tests/baselines/reference/unusedMultipleParameters2InMethodDeclaration.errors.txt b/tests/baselines/reference/unusedMultipleParameters2InMethodDeclaration.errors.txt new file mode 100644 index 00000000000..ab3313dc98b --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameters2InMethodDeclaration.errors.txt @@ -0,0 +1,19 @@ +tests/cases/compiler/unusedMultipleParameters2InMethodDeclaration.ts(3,20): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedMultipleParameters2InMethodDeclaration.ts(3,53): error TS6133: 'person3' is declared but never used. +tests/cases/compiler/unusedMultipleParameters2InMethodDeclaration.ts(4,13): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedMultipleParameters2InMethodDeclaration.ts (3 errors) ==== + + class Dummy { + public greeter(person: string, person2: string, person3: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + ~~~~~~~ +!!! error TS6133: 'person3' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + person2 = "dummy value"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedMultipleParameters2InMethodDeclaration.js b/tests/baselines/reference/unusedMultipleParameters2InMethodDeclaration.js new file mode 100644 index 00000000000..80f93990b5b --- /dev/null +++ b/tests/baselines/reference/unusedMultipleParameters2InMethodDeclaration.js @@ -0,0 +1,19 @@ +//// [unusedMultipleParameters2InMethodDeclaration.ts] + +class Dummy { + public greeter(person: string, person2: string, person3: string) { + var unused = 20; + person2 = "dummy value"; + } +} + +//// [unusedMultipleParameters2InMethodDeclaration.js] +var Dummy = (function () { + function Dummy() { + } + Dummy.prototype.greeter = function (person, person2, person3) { + var unused = 20; + person2 = "dummy value"; + }; + return Dummy; +}()); diff --git a/tests/baselines/reference/unusedNamespaceInModule.errors.txt b/tests/baselines/reference/unusedNamespaceInModule.errors.txt new file mode 100644 index 00000000000..78e389f4c47 --- /dev/null +++ b/tests/baselines/reference/unusedNamespaceInModule.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/unusedNamespaceInModule.ts(3,15): error TS6133: 'B' is declared but never used. + + +==== tests/cases/compiler/unusedNamespaceInModule.ts (1 errors) ==== + + module A { + namespace B { } + ~ +!!! error TS6133: 'B' is declared but never used. + export namespace C {} + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedNamespaceInModule.js b/tests/baselines/reference/unusedNamespaceInModule.js new file mode 100644 index 00000000000..238ff84767c --- /dev/null +++ b/tests/baselines/reference/unusedNamespaceInModule.js @@ -0,0 +1,8 @@ +//// [unusedNamespaceInModule.ts] + +module A { + namespace B { } + export namespace C {} +} + +//// [unusedNamespaceInModule.js] diff --git a/tests/baselines/reference/unusedNamespaceInNamespace.errors.txt b/tests/baselines/reference/unusedNamespaceInNamespace.errors.txt new file mode 100644 index 00000000000..53582b8bec7 --- /dev/null +++ b/tests/baselines/reference/unusedNamespaceInNamespace.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/unusedNamespaceInNamespace.ts(3,15): error TS6133: 'B' is declared but never used. + + +==== tests/cases/compiler/unusedNamespaceInNamespace.ts (1 errors) ==== + + namespace A { + namespace B { } + ~ +!!! error TS6133: 'B' is declared but never used. + export namespace C {} + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedNamespaceInNamespace.js b/tests/baselines/reference/unusedNamespaceInNamespace.js new file mode 100644 index 00000000000..1dc8103d77f --- /dev/null +++ b/tests/baselines/reference/unusedNamespaceInNamespace.js @@ -0,0 +1,8 @@ +//// [unusedNamespaceInNamespace.ts] + +namespace A { + namespace B { } + export namespace C {} +} + +//// [unusedNamespaceInNamespace.js] diff --git a/tests/baselines/reference/unusedParameterInCatchClause.js b/tests/baselines/reference/unusedParameterInCatchClause.js new file mode 100644 index 00000000000..153ee17926e --- /dev/null +++ b/tests/baselines/reference/unusedParameterInCatchClause.js @@ -0,0 +1,11 @@ +//// [unusedParameterInCatchClause.ts] + +function f1() { + try {} catch(ex){} +} + +//// [unusedParameterInCatchClause.js] +function f1() { + try { } + catch (ex) { } +} diff --git a/tests/baselines/reference/unusedParameterInCatchClause.symbols b/tests/baselines/reference/unusedParameterInCatchClause.symbols new file mode 100644 index 00000000000..9406d3ea53e --- /dev/null +++ b/tests/baselines/reference/unusedParameterInCatchClause.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/unusedParameterInCatchClause.ts === + +function f1() { +>f1 : Symbol(f1, Decl(unusedParameterInCatchClause.ts, 0, 0)) + + try {} catch(ex){} +>ex : Symbol(ex, Decl(unusedParameterInCatchClause.ts, 2, 17)) +} diff --git a/tests/baselines/reference/unusedParameterInCatchClause.types b/tests/baselines/reference/unusedParameterInCatchClause.types new file mode 100644 index 00000000000..ad23b5d753b --- /dev/null +++ b/tests/baselines/reference/unusedParameterInCatchClause.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/unusedParameterInCatchClause.ts === + +function f1() { +>f1 : () => void + + try {} catch(ex){} +>ex : any +} diff --git a/tests/baselines/reference/unusedParameterUsedInTypeOf.js b/tests/baselines/reference/unusedParameterUsedInTypeOf.js new file mode 100644 index 00000000000..fc2589c31ff --- /dev/null +++ b/tests/baselines/reference/unusedParameterUsedInTypeOf.js @@ -0,0 +1,10 @@ +//// [unusedParameterUsedInTypeOf.ts] + +function f1 (a: number, b: typeof a) { + b++; +} + +//// [unusedParameterUsedInTypeOf.js] +function f1(a, b) { + b++; +} diff --git a/tests/baselines/reference/unusedParameterUsedInTypeOf.symbols b/tests/baselines/reference/unusedParameterUsedInTypeOf.symbols new file mode 100644 index 00000000000..9730baca34f --- /dev/null +++ b/tests/baselines/reference/unusedParameterUsedInTypeOf.symbols @@ -0,0 +1,11 @@ +=== tests/cases/compiler/unusedParameterUsedInTypeOf.ts === + +function f1 (a: number, b: typeof a) { +>f1 : Symbol(f1, Decl(unusedParameterUsedInTypeOf.ts, 0, 0)) +>a : Symbol(a, Decl(unusedParameterUsedInTypeOf.ts, 1, 13)) +>b : Symbol(b, Decl(unusedParameterUsedInTypeOf.ts, 1, 23)) +>a : Symbol(a, Decl(unusedParameterUsedInTypeOf.ts, 1, 13)) + + b++; +>b : Symbol(b, Decl(unusedParameterUsedInTypeOf.ts, 1, 23)) +} diff --git a/tests/baselines/reference/unusedParameterUsedInTypeOf.types b/tests/baselines/reference/unusedParameterUsedInTypeOf.types new file mode 100644 index 00000000000..d3b5bb67661 --- /dev/null +++ b/tests/baselines/reference/unusedParameterUsedInTypeOf.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/unusedParameterUsedInTypeOf.ts === + +function f1 (a: number, b: typeof a) { +>f1 : (a: number, b: number) => void +>a : number +>b : number +>a : number + + b++; +>b++ : number +>b : number +} diff --git a/tests/baselines/reference/unusedParametersInLambda1.errors.txt b/tests/baselines/reference/unusedParametersInLambda1.errors.txt new file mode 100644 index 00000000000..2c54de1d571 --- /dev/null +++ b/tests/baselines/reference/unusedParametersInLambda1.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedParametersInLambda1.ts(4,17): error TS6133: 'X' is declared but never used. + + +==== tests/cases/compiler/unusedParametersInLambda1.ts (1 errors) ==== + + class A { + public f1() { + return (X) => { + ~ +!!! error TS6133: 'X' is declared but never used. + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedParametersInLambda1.js b/tests/baselines/reference/unusedParametersInLambda1.js new file mode 100644 index 00000000000..c3ca54bd6a7 --- /dev/null +++ b/tests/baselines/reference/unusedParametersInLambda1.js @@ -0,0 +1,19 @@ +//// [unusedParametersInLambda1.ts] + +class A { + public f1() { + return (X) => { + } + } +} + +//// [unusedParametersInLambda1.js] +var A = (function () { + function A() { + } + A.prototype.f1 = function () { + return function (X) { + }; + }; + return A; +}()); diff --git a/tests/baselines/reference/unusedParametersInLambda2.errors.txt b/tests/baselines/reference/unusedParametersInLambda2.errors.txt new file mode 100644 index 00000000000..3044e6d9c88 --- /dev/null +++ b/tests/baselines/reference/unusedParametersInLambda2.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedParametersInLambda2.ts(4,17): error TS6133: 'X' is declared but never used. + + +==== tests/cases/compiler/unusedParametersInLambda2.ts (1 errors) ==== + + class A { + public f1() { + return (X, Y) => { + ~ +!!! error TS6133: 'X' is declared but never used. + Y; + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedParametersInLambda2.js b/tests/baselines/reference/unusedParametersInLambda2.js new file mode 100644 index 00000000000..b7833af340e --- /dev/null +++ b/tests/baselines/reference/unusedParametersInLambda2.js @@ -0,0 +1,21 @@ +//// [unusedParametersInLambda2.ts] + +class A { + public f1() { + return (X, Y) => { + Y; + } + } +} + +//// [unusedParametersInLambda2.js] +var A = (function () { + function A() { + } + A.prototype.f1 = function () { + return function (X, Y) { + Y; + }; + }; + return A; +}()); diff --git a/tests/baselines/reference/unusedParametersThis.js b/tests/baselines/reference/unusedParametersThis.js new file mode 100644 index 00000000000..8cf135bf71a --- /dev/null +++ b/tests/baselines/reference/unusedParametersThis.js @@ -0,0 +1,67 @@ +//// [unusedParametersThis.ts] + +class A { + public a: number; + + public method(this: this): number { + return this.a; + } + + public method2(this: A): number { + return this.a; + } + + public method3(this: this): number { + var fn = () => this.a; + return fn(); + } + + public method4(this: A): number { + var fn = () => this.a; + return fn(); + } + + static staticMethod(this: A): number { + return this.a; + } +} + +function f(this: A): number { + return this.a +} + +var f2 = function f2(this: A): number { + return this.a; +}; + +//// [unusedParametersThis.js] +var A = (function () { + function A() { + } + A.prototype.method = function () { + return this.a; + }; + A.prototype.method2 = function () { + return this.a; + }; + A.prototype.method3 = function () { + var _this = this; + var fn = function () { return _this.a; }; + return fn(); + }; + A.prototype.method4 = function () { + var _this = this; + var fn = function () { return _this.a; }; + return fn(); + }; + A.staticMethod = function () { + return this.a; + }; + return A; +}()); +function f() { + return this.a; +} +var f2 = function f2() { + return this.a; +}; diff --git a/tests/baselines/reference/unusedParametersThis.symbols b/tests/baselines/reference/unusedParametersThis.symbols new file mode 100644 index 00000000000..58f8856c281 --- /dev/null +++ b/tests/baselines/reference/unusedParametersThis.symbols @@ -0,0 +1,93 @@ +=== tests/cases/compiler/unusedParametersThis.ts === + +class A { +>A : Symbol(A, Decl(unusedParametersThis.ts, 0, 0)) + + public a: number; +>a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) + + public method(this: this): number { +>method : Symbol(A.method, Decl(unusedParametersThis.ts, 2, 21)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 4, 18)) + + return this.a; +>this.a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 4, 18)) +>a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) + } + + public method2(this: A): number { +>method2 : Symbol(A.method2, Decl(unusedParametersThis.ts, 6, 5)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 8, 19)) +>A : Symbol(A, Decl(unusedParametersThis.ts, 0, 0)) + + return this.a; +>this.a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 8, 19)) +>a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) + } + + public method3(this: this): number { +>method3 : Symbol(A.method3, Decl(unusedParametersThis.ts, 10, 5)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 12, 19)) + + var fn = () => this.a; +>fn : Symbol(fn, Decl(unusedParametersThis.ts, 13, 11)) +>this.a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 12, 19)) +>a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) + + return fn(); +>fn : Symbol(fn, Decl(unusedParametersThis.ts, 13, 11)) + } + + public method4(this: A): number { +>method4 : Symbol(A.method4, Decl(unusedParametersThis.ts, 15, 5)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 17, 19)) +>A : Symbol(A, Decl(unusedParametersThis.ts, 0, 0)) + + var fn = () => this.a; +>fn : Symbol(fn, Decl(unusedParametersThis.ts, 18, 11)) +>this.a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 17, 19)) +>a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) + + return fn(); +>fn : Symbol(fn, Decl(unusedParametersThis.ts, 18, 11)) + } + + static staticMethod(this: A): number { +>staticMethod : Symbol(A.staticMethod, Decl(unusedParametersThis.ts, 20, 5)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 22, 24)) +>A : Symbol(A, Decl(unusedParametersThis.ts, 0, 0)) + + return this.a; +>this.a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 22, 24)) +>a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) + } +} + +function f(this: A): number { +>f : Symbol(f, Decl(unusedParametersThis.ts, 25, 1)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 27, 11)) +>A : Symbol(A, Decl(unusedParametersThis.ts, 0, 0)) + + return this.a +>this.a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 27, 11)) +>a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) +} + +var f2 = function f2(this: A): number { +>f2 : Symbol(f2, Decl(unusedParametersThis.ts, 31, 3)) +>f2 : Symbol(f2, Decl(unusedParametersThis.ts, 31, 8)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 31, 21)) +>A : Symbol(A, Decl(unusedParametersThis.ts, 0, 0)) + + return this.a; +>this.a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) +>this : Symbol(this, Decl(unusedParametersThis.ts, 31, 21)) +>a : Symbol(A.a, Decl(unusedParametersThis.ts, 1, 9)) + +}; diff --git a/tests/baselines/reference/unusedParametersThis.types b/tests/baselines/reference/unusedParametersThis.types new file mode 100644 index 00000000000..814f56be101 --- /dev/null +++ b/tests/baselines/reference/unusedParametersThis.types @@ -0,0 +1,98 @@ +=== tests/cases/compiler/unusedParametersThis.ts === + +class A { +>A : A + + public a: number; +>a : number + + public method(this: this): number { +>method : (this: this) => number +>this : this + + return this.a; +>this.a : number +>this : this +>a : number + } + + public method2(this: A): number { +>method2 : (this: A) => number +>this : A +>A : A + + return this.a; +>this.a : number +>this : A +>a : number + } + + public method3(this: this): number { +>method3 : (this: this) => number +>this : this + + var fn = () => this.a; +>fn : () => number +>() => this.a : () => number +>this.a : number +>this : this +>a : number + + return fn(); +>fn() : number +>fn : () => number + } + + public method4(this: A): number { +>method4 : (this: A) => number +>this : A +>A : A + + var fn = () => this.a; +>fn : () => number +>() => this.a : () => number +>this.a : number +>this : A +>a : number + + return fn(); +>fn() : number +>fn : () => number + } + + static staticMethod(this: A): number { +>staticMethod : (this: A) => number +>this : A +>A : A + + return this.a; +>this.a : number +>this : A +>a : number + } +} + +function f(this: A): number { +>f : (this: A) => number +>this : A +>A : A + + return this.a +>this.a : number +>this : A +>a : number +} + +var f2 = function f2(this: A): number { +>f2 : (this: A) => number +>function f2(this: A): number { return this.a;} : (this: A) => number +>f2 : (this: A) => number +>this : A +>A : A + + return this.a; +>this.a : number +>this : A +>a : number + +}; diff --git a/tests/baselines/reference/unusedParametersWithUnderscore.errors.txt b/tests/baselines/reference/unusedParametersWithUnderscore.errors.txt new file mode 100644 index 00000000000..adfe7bb9bc1 --- /dev/null +++ b/tests/baselines/reference/unusedParametersWithUnderscore.errors.txt @@ -0,0 +1,56 @@ +tests/cases/compiler/unusedParametersWithUnderscore.ts(2,12): error TS6133: 'a' is declared but never used. +tests/cases/compiler/unusedParametersWithUnderscore.ts(2,19): error TS6133: 'c' is declared but never used. +tests/cases/compiler/unusedParametersWithUnderscore.ts(2,27): error TS6133: 'd' is declared but never used. +tests/cases/compiler/unusedParametersWithUnderscore.ts(2,29): error TS6133: 'e___' is declared but never used. +tests/cases/compiler/unusedParametersWithUnderscore.ts(6,14): error TS6133: '_a' is declared but never used. +tests/cases/compiler/unusedParametersWithUnderscore.ts(6,18): error TS6133: '___b' is declared but never used. +tests/cases/compiler/unusedParametersWithUnderscore.ts(9,14): error TS6133: '_a' is declared but never used. +tests/cases/compiler/unusedParametersWithUnderscore.ts(9,19): error TS6133: '___b' is declared but never used. +tests/cases/compiler/unusedParametersWithUnderscore.ts(12,16): error TS6133: 'arg' is declared but never used. +tests/cases/compiler/unusedParametersWithUnderscore.ts(18,13): error TS6133: 'arg' is declared but never used. + + +==== tests/cases/compiler/unusedParametersWithUnderscore.ts (10 errors) ==== + + function f(a, _b, c, ___, d,e___, _f) { + ~ +!!! error TS6133: 'a' is declared but never used. + ~ +!!! error TS6133: 'c' is declared but never used. + ~ +!!! error TS6133: 'd' is declared but never used. + ~~~~ +!!! error TS6133: 'e___' is declared but never used. + } + + + function f2({_a, __b}) { + ~~ +!!! error TS6133: '_a' is declared but never used. + ~~~ +!!! error TS6133: '___b' is declared but never used. + } + + function f3([_a, ,__b]) { + ~~ +!!! error TS6133: '_a' is declared but never used. + ~~~ +!!! error TS6133: '___b' is declared but never used. + } + + function f4(...arg) { + ~~~ +!!! error TS6133: 'arg' is declared but never used. + } + + function f5(..._arg) { + } + + function f6(arg?, _arg?) { + ~~~ +!!! error TS6133: 'arg' is declared but never used. + } + + var f7 = _ => undefined; + + var f8 = function (_) { }; \ No newline at end of file diff --git a/tests/baselines/reference/unusedParametersWithUnderscore.js b/tests/baselines/reference/unusedParametersWithUnderscore.js new file mode 100644 index 00000000000..2899d347c66 --- /dev/null +++ b/tests/baselines/reference/unusedParametersWithUnderscore.js @@ -0,0 +1,50 @@ +//// [unusedParametersWithUnderscore.ts] + +function f(a, _b, c, ___, d,e___, _f) { +} + + +function f2({_a, __b}) { +} + +function f3([_a, ,__b]) { +} + +function f4(...arg) { +} + +function f5(..._arg) { +} + +function f6(arg?, _arg?) { +} + +var f7 = _ => undefined; + +var f8 = function (_) { }; + +//// [unusedParametersWithUnderscore.js] +function f(a, _b, c, ___, d, e___, _f) { +} +function f2(_c) { + var _a = _c._a, __b = _c.__b; +} +function f3(_c) { + var _a = _c[0], __b = _c[2]; +} +function f4() { + var arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + arg[_i - 0] = arguments[_i]; + } +} +function f5() { + var _arg = []; + for (var _i = 0; _i < arguments.length; _i++) { + _arg[_i - 0] = arguments[_i]; + } +} +function f6(arg, _arg) { +} +var f7 = function (_) { return undefined; }; +var f8 = function (_) { }; diff --git a/tests/baselines/reference/unusedParametersinConstructor1.errors.txt b/tests/baselines/reference/unusedParametersinConstructor1.errors.txt new file mode 100644 index 00000000000..d09d5906ed1 --- /dev/null +++ b/tests/baselines/reference/unusedParametersinConstructor1.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/unusedParametersinConstructor1.ts(3,17): error TS6133: 'param1' is declared but never used. + + +==== tests/cases/compiler/unusedParametersinConstructor1.ts (1 errors) ==== + + class greeter { + constructor(param1: string) { + ~~~~~~ +!!! error TS6133: 'param1' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedParametersinConstructor1.js b/tests/baselines/reference/unusedParametersinConstructor1.js new file mode 100644 index 00000000000..500d7a45eb2 --- /dev/null +++ b/tests/baselines/reference/unusedParametersinConstructor1.js @@ -0,0 +1,13 @@ +//// [unusedParametersinConstructor1.ts] + +class greeter { + constructor(param1: string) { + } +} + +//// [unusedParametersinConstructor1.js] +var greeter = (function () { + function greeter(param1) { + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedParametersinConstructor2.errors.txt b/tests/baselines/reference/unusedParametersinConstructor2.errors.txt new file mode 100644 index 00000000000..4566713f24f --- /dev/null +++ b/tests/baselines/reference/unusedParametersinConstructor2.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedParametersinConstructor2.ts(3,17): error TS6133: 'param1' is declared but never used. + + +==== tests/cases/compiler/unusedParametersinConstructor2.ts (1 errors) ==== + + class greeter { + constructor(param1: string, param2: string) { + ~~~~~~ +!!! error TS6133: 'param1' is declared but never used. + param2 = param2 + "dummy value"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedParametersinConstructor2.js b/tests/baselines/reference/unusedParametersinConstructor2.js new file mode 100644 index 00000000000..97bbf21ee04 --- /dev/null +++ b/tests/baselines/reference/unusedParametersinConstructor2.js @@ -0,0 +1,15 @@ +//// [unusedParametersinConstructor2.ts] + +class greeter { + constructor(param1: string, param2: string) { + param2 = param2 + "dummy value"; + } +} + +//// [unusedParametersinConstructor2.js] +var greeter = (function () { + function greeter(param1, param2) { + param2 = param2 + "dummy value"; + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedParametersinConstructor3.errors.txt b/tests/baselines/reference/unusedParametersinConstructor3.errors.txt new file mode 100644 index 00000000000..48891e5361e --- /dev/null +++ b/tests/baselines/reference/unusedParametersinConstructor3.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/unusedParametersinConstructor3.ts(3,17): error TS6133: 'param1' is declared but never used. +tests/cases/compiler/unusedParametersinConstructor3.ts(3,49): error TS6133: 'param3' is declared but never used. + + +==== tests/cases/compiler/unusedParametersinConstructor3.ts (2 errors) ==== + + class greeter { + constructor(param1: string, param2: string, param3: string) { + ~~~~~~ +!!! error TS6133: 'param1' is declared but never used. + ~~~~~~ +!!! error TS6133: 'param3' is declared but never used. + param2 = param2 + "dummy value"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedParametersinConstructor3.js b/tests/baselines/reference/unusedParametersinConstructor3.js new file mode 100644 index 00000000000..06ac99229ac --- /dev/null +++ b/tests/baselines/reference/unusedParametersinConstructor3.js @@ -0,0 +1,15 @@ +//// [unusedParametersinConstructor3.ts] + +class greeter { + constructor(param1: string, param2: string, param3: string) { + param2 = param2 + "dummy value"; + } +} + +//// [unusedParametersinConstructor3.js] +var greeter = (function () { + function greeter(param1, param2, param3) { + param2 = param2 + "dummy value"; + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedPrivateMembers.js b/tests/baselines/reference/unusedPrivateMembers.js new file mode 100644 index 00000000000..cdb540349c3 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMembers.js @@ -0,0 +1,114 @@ +//// [unusedPrivateMembers.ts] + +class Test1 { + private initializeInternal() { + } + + public test() { + var x = new Test1(); + x.initializeInternal(); + } +} + +class Test2 { + private p = 0; + public test() { + var x = new Test2(); + x.p; + } +} + +class Test3 { + private get x () { + return 0; + } + + public test() { + var x = new Test3(); + x.x; + } +} + +class Test4 { + private set x(v) { + v; + } + + public test() { + var x = new Test4(); + x.x; + } +} + +class Test5 { + private p: T; + public test() { + var x = new Test5(); + x.p; + } +} + + +//// [unusedPrivateMembers.js] +var Test1 = (function () { + function Test1() { + } + Test1.prototype.initializeInternal = function () { + }; + Test1.prototype.test = function () { + var x = new Test1(); + x.initializeInternal(); + }; + return Test1; +}()); +var Test2 = (function () { + function Test2() { + this.p = 0; + } + Test2.prototype.test = function () { + var x = new Test2(); + x.p; + }; + return Test2; +}()); +var Test3 = (function () { + function Test3() { + } + Object.defineProperty(Test3.prototype, "x", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + Test3.prototype.test = function () { + var x = new Test3(); + x.x; + }; + return Test3; +}()); +var Test4 = (function () { + function Test4() { + } + Object.defineProperty(Test4.prototype, "x", { + set: function (v) { + v; + }, + enumerable: true, + configurable: true + }); + Test4.prototype.test = function () { + var x = new Test4(); + x.x; + }; + return Test4; +}()); +var Test5 = (function () { + function Test5() { + } + Test5.prototype.test = function () { + var x = new Test5(); + x.p; + }; + return Test5; +}()); diff --git a/tests/baselines/reference/unusedPrivateMembers.symbols b/tests/baselines/reference/unusedPrivateMembers.symbols new file mode 100644 index 00000000000..0d4426a594a --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMembers.symbols @@ -0,0 +1,113 @@ +=== tests/cases/compiler/unusedPrivateMembers.ts === + +class Test1 { +>Test1 : Symbol(Test1, Decl(unusedPrivateMembers.ts, 0, 0)) + + private initializeInternal() { +>initializeInternal : Symbol(Test1.initializeInternal, Decl(unusedPrivateMembers.ts, 1, 13)) + } + + public test() { +>test : Symbol(Test1.test, Decl(unusedPrivateMembers.ts, 3, 5)) + + var x = new Test1(); +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 6, 11)) +>Test1 : Symbol(Test1, Decl(unusedPrivateMembers.ts, 0, 0)) + + x.initializeInternal(); +>x.initializeInternal : Symbol(Test1.initializeInternal, Decl(unusedPrivateMembers.ts, 1, 13)) +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 6, 11)) +>initializeInternal : Symbol(Test1.initializeInternal, Decl(unusedPrivateMembers.ts, 1, 13)) + } +} + +class Test2 { +>Test2 : Symbol(Test2, Decl(unusedPrivateMembers.ts, 9, 1)) + + private p = 0; +>p : Symbol(Test2.p, Decl(unusedPrivateMembers.ts, 11, 13)) + + public test() { +>test : Symbol(Test2.test, Decl(unusedPrivateMembers.ts, 12, 18)) + + var x = new Test2(); +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 14, 11)) +>Test2 : Symbol(Test2, Decl(unusedPrivateMembers.ts, 9, 1)) + + x.p; +>x.p : Symbol(Test2.p, Decl(unusedPrivateMembers.ts, 11, 13)) +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 14, 11)) +>p : Symbol(Test2.p, Decl(unusedPrivateMembers.ts, 11, 13)) + } +} + +class Test3 { +>Test3 : Symbol(Test3, Decl(unusedPrivateMembers.ts, 17, 1)) + + private get x () { +>x : Symbol(Test3.x, Decl(unusedPrivateMembers.ts, 19, 13)) + + return 0; + } + + public test() { +>test : Symbol(Test3.test, Decl(unusedPrivateMembers.ts, 22, 5)) + + var x = new Test3(); +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 25, 11)) +>Test3 : Symbol(Test3, Decl(unusedPrivateMembers.ts, 17, 1)) + + x.x; +>x.x : Symbol(Test3.x, Decl(unusedPrivateMembers.ts, 19, 13)) +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 25, 11)) +>x : Symbol(Test3.x, Decl(unusedPrivateMembers.ts, 19, 13)) + } +} + +class Test4 { +>Test4 : Symbol(Test4, Decl(unusedPrivateMembers.ts, 28, 1)) + + private set x(v) { +>x : Symbol(Test4.x, Decl(unusedPrivateMembers.ts, 30, 13)) +>v : Symbol(v, Decl(unusedPrivateMembers.ts, 31, 18)) + + v; +>v : Symbol(v, Decl(unusedPrivateMembers.ts, 31, 18)) + } + + public test() { +>test : Symbol(Test4.test, Decl(unusedPrivateMembers.ts, 33, 5)) + + var x = new Test4(); +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 36, 11)) +>Test4 : Symbol(Test4, Decl(unusedPrivateMembers.ts, 28, 1)) + + x.x; +>x.x : Symbol(Test4.x, Decl(unusedPrivateMembers.ts, 30, 13)) +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 36, 11)) +>x : Symbol(Test4.x, Decl(unusedPrivateMembers.ts, 30, 13)) + } +} + +class Test5 { +>Test5 : Symbol(Test5, Decl(unusedPrivateMembers.ts, 39, 1)) +>T : Symbol(T, Decl(unusedPrivateMembers.ts, 41, 12)) + + private p: T; +>p : Symbol(Test5.p, Decl(unusedPrivateMembers.ts, 41, 16)) +>T : Symbol(T, Decl(unusedPrivateMembers.ts, 41, 12)) + + public test() { +>test : Symbol(Test5.test, Decl(unusedPrivateMembers.ts, 42, 17)) + + var x = new Test5(); +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 44, 11)) +>Test5 : Symbol(Test5, Decl(unusedPrivateMembers.ts, 39, 1)) + + x.p; +>x.p : Symbol(Test5.p, Decl(unusedPrivateMembers.ts, 41, 16)) +>x : Symbol(x, Decl(unusedPrivateMembers.ts, 44, 11)) +>p : Symbol(Test5.p, Decl(unusedPrivateMembers.ts, 41, 16)) + } +} + diff --git a/tests/baselines/reference/unusedPrivateMembers.types b/tests/baselines/reference/unusedPrivateMembers.types new file mode 100644 index 00000000000..1d303068f24 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMembers.types @@ -0,0 +1,121 @@ +=== tests/cases/compiler/unusedPrivateMembers.ts === + +class Test1 { +>Test1 : Test1 + + private initializeInternal() { +>initializeInternal : () => void + } + + public test() { +>test : () => void + + var x = new Test1(); +>x : Test1 +>new Test1() : Test1 +>Test1 : typeof Test1 + + x.initializeInternal(); +>x.initializeInternal() : void +>x.initializeInternal : () => void +>x : Test1 +>initializeInternal : () => void + } +} + +class Test2 { +>Test2 : Test2 + + private p = 0; +>p : number +>0 : number + + public test() { +>test : () => void + + var x = new Test2(); +>x : Test2 +>new Test2() : Test2 +>Test2 : typeof Test2 + + x.p; +>x.p : number +>x : Test2 +>p : number + } +} + +class Test3 { +>Test3 : Test3 + + private get x () { +>x : number + + return 0; +>0 : number + } + + public test() { +>test : () => void + + var x = new Test3(); +>x : Test3 +>new Test3() : Test3 +>Test3 : typeof Test3 + + x.x; +>x.x : number +>x : Test3 +>x : number + } +} + +class Test4 { +>Test4 : Test4 + + private set x(v) { +>x : any +>v : any + + v; +>v : any + } + + public test() { +>test : () => void + + var x = new Test4(); +>x : Test4 +>new Test4() : Test4 +>Test4 : typeof Test4 + + x.x; +>x.x : any +>x : Test4 +>x : any + } +} + +class Test5 { +>Test5 : Test5 +>T : T + + private p: T; +>p : T +>T : T + + public test() { +>test : () => void + + var x = new Test5(); +>x : Test5 +>new Test5() : Test5 +>Test5 : typeof Test5 + + x.p; +>x.p : number +>x : Test5 +>p : number + } +} + diff --git a/tests/baselines/reference/unusedPrivateMethodInClass1.errors.txt b/tests/baselines/reference/unusedPrivateMethodInClass1.errors.txt new file mode 100644 index 00000000000..40357c0b7f0 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMethodInClass1.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedPrivateMethodInClass1.ts(3,13): error TS6133: 'function1' is declared but never used. + + +==== tests/cases/compiler/unusedPrivateMethodInClass1.ts (1 errors) ==== + + class greeter { + private function1() { + ~~~~~~~~~ +!!! error TS6133: 'function1' is declared but never used. + var y = 10; + y++; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateMethodInClass1.js b/tests/baselines/reference/unusedPrivateMethodInClass1.js new file mode 100644 index 00000000000..18e6fc339c3 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMethodInClass1.js @@ -0,0 +1,19 @@ +//// [unusedPrivateMethodInClass1.ts] + +class greeter { + private function1() { + var y = 10; + y++; + } +} + +//// [unusedPrivateMethodInClass1.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.function1 = function () { + var y = 10; + y++; + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedPrivateMethodInClass2.errors.txt b/tests/baselines/reference/unusedPrivateMethodInClass2.errors.txt new file mode 100644 index 00000000000..36a7a3c40d0 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMethodInClass2.errors.txt @@ -0,0 +1,21 @@ +tests/cases/compiler/unusedPrivateMethodInClass2.ts(3,13): error TS6133: 'function1' is declared but never used. +tests/cases/compiler/unusedPrivateMethodInClass2.ts(8,13): error TS6133: 'function2' is declared but never used. + + +==== tests/cases/compiler/unusedPrivateMethodInClass2.ts (2 errors) ==== + + class greeter { + private function1() { + ~~~~~~~~~ +!!! error TS6133: 'function1' is declared but never used. + var y = 10; + y++; + } + + private function2() { + ~~~~~~~~~ +!!! error TS6133: 'function2' is declared but never used. + var y = 10; + y++; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateMethodInClass2.js b/tests/baselines/reference/unusedPrivateMethodInClass2.js new file mode 100644 index 00000000000..6a1dbd4df68 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMethodInClass2.js @@ -0,0 +1,28 @@ +//// [unusedPrivateMethodInClass2.ts] + +class greeter { + private function1() { + var y = 10; + y++; + } + + private function2() { + var y = 10; + y++; + } +} + +//// [unusedPrivateMethodInClass2.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.function1 = function () { + var y = 10; + y++; + }; + greeter.prototype.function2 = function () { + var y = 10; + y++; + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedPrivateMethodInClass3.errors.txt b/tests/baselines/reference/unusedPrivateMethodInClass3.errors.txt new file mode 100644 index 00000000000..365cfb32135 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMethodInClass3.errors.txt @@ -0,0 +1,26 @@ +tests/cases/compiler/unusedPrivateMethodInClass3.ts(3,13): error TS6133: 'function1' is declared but never used. +tests/cases/compiler/unusedPrivateMethodInClass3.ts(8,13): error TS6133: 'function2' is declared but never used. + + +==== tests/cases/compiler/unusedPrivateMethodInClass3.ts (2 errors) ==== + + class greeter { + private function1() { + ~~~~~~~~~ +!!! error TS6133: 'function1' is declared but never used. + var y = 10; + y++; + } + + private function2() { + ~~~~~~~~~ +!!! error TS6133: 'function2' is declared but never used. + var y = 10; + y++; + } + + public function3() { + var y = 10; + y++; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateMethodInClass3.js b/tests/baselines/reference/unusedPrivateMethodInClass3.js new file mode 100644 index 00000000000..0009a52f8b6 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMethodInClass3.js @@ -0,0 +1,37 @@ +//// [unusedPrivateMethodInClass3.ts] + +class greeter { + private function1() { + var y = 10; + y++; + } + + private function2() { + var y = 10; + y++; + } + + public function3() { + var y = 10; + y++; + } +} + +//// [unusedPrivateMethodInClass3.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.function1 = function () { + var y = 10; + y++; + }; + greeter.prototype.function2 = function () { + var y = 10; + y++; + }; + greeter.prototype.function3 = function () { + var y = 10; + y++; + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedPrivateMethodInClass4.errors.txt b/tests/baselines/reference/unusedPrivateMethodInClass4.errors.txt new file mode 100644 index 00000000000..324e7d17bbc --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMethodInClass4.errors.txt @@ -0,0 +1,24 @@ +tests/cases/compiler/unusedPrivateMethodInClass4.ts(3,13): error TS6133: 'function1' is declared but never used. + + +==== tests/cases/compiler/unusedPrivateMethodInClass4.ts (1 errors) ==== + + class greeter { + private function1() { + ~~~~~~~~~ +!!! error TS6133: 'function1' is declared but never used. + var y = 10; + y++; + } + + private function2() { + var y = 10; + y++; + } + + public function3() { + var y = 10; + y++; + this.function2(); + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateMethodInClass4.js b/tests/baselines/reference/unusedPrivateMethodInClass4.js new file mode 100644 index 00000000000..6bf2b928fa4 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateMethodInClass4.js @@ -0,0 +1,39 @@ +//// [unusedPrivateMethodInClass4.ts] + +class greeter { + private function1() { + var y = 10; + y++; + } + + private function2() { + var y = 10; + y++; + } + + public function3() { + var y = 10; + y++; + this.function2(); + } +} + +//// [unusedPrivateMethodInClass4.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.function1 = function () { + var y = 10; + y++; + }; + greeter.prototype.function2 = function () { + var y = 10; + y++; + }; + greeter.prototype.function3 = function () { + var y = 10; + y++; + this.function2(); + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedPrivateVariableInClass1.errors.txt b/tests/baselines/reference/unusedPrivateVariableInClass1.errors.txt new file mode 100644 index 00000000000..bb971334135 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass1.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/unusedPrivateVariableInClass1.ts(3,13): error TS6133: 'x' is declared but never used. + + +==== tests/cases/compiler/unusedPrivateVariableInClass1.ts (1 errors) ==== + + class greeter { + private x: string; + ~ +!!! error TS6133: 'x' is declared but never used. + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateVariableInClass1.js b/tests/baselines/reference/unusedPrivateVariableInClass1.js new file mode 100644 index 00000000000..464676490d8 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass1.js @@ -0,0 +1,12 @@ +//// [unusedPrivateVariableInClass1.ts] + +class greeter { + private x: string; +} + +//// [unusedPrivateVariableInClass1.js] +var greeter = (function () { + function greeter() { + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedPrivateVariableInClass2.errors.txt b/tests/baselines/reference/unusedPrivateVariableInClass2.errors.txt new file mode 100644 index 00000000000..3b814e5ca7c --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass2.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedPrivateVariableInClass2.ts(3,13): error TS6133: 'x' is declared but never used. +tests/cases/compiler/unusedPrivateVariableInClass2.ts(4,13): error TS6133: 'y' is declared but never used. + + +==== tests/cases/compiler/unusedPrivateVariableInClass2.ts (2 errors) ==== + + class greeter { + private x: string; + ~ +!!! error TS6133: 'x' is declared but never used. + private y: string; + ~ +!!! error TS6133: 'y' is declared but never used. + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateVariableInClass2.js b/tests/baselines/reference/unusedPrivateVariableInClass2.js new file mode 100644 index 00000000000..329e2bbe2b6 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass2.js @@ -0,0 +1,13 @@ +//// [unusedPrivateVariableInClass2.ts] + +class greeter { + private x: string; + private y: string; +} + +//// [unusedPrivateVariableInClass2.js] +var greeter = (function () { + function greeter() { + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedPrivateVariableInClass3.errors.txt b/tests/baselines/reference/unusedPrivateVariableInClass3.errors.txt new file mode 100644 index 00000000000..5d5e18a2fdf --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass3.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/unusedPrivateVariableInClass3.ts(3,13): error TS6133: 'x' is declared but never used. +tests/cases/compiler/unusedPrivateVariableInClass3.ts(4,13): error TS6133: 'y' is declared but never used. + + +==== tests/cases/compiler/unusedPrivateVariableInClass3.ts (2 errors) ==== + + class greeter { + private x: string; + ~ +!!! error TS6133: 'x' is declared but never used. + private y: string; + ~ +!!! error TS6133: 'y' is declared but never used. + public z: string; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateVariableInClass3.js b/tests/baselines/reference/unusedPrivateVariableInClass3.js new file mode 100644 index 00000000000..c72b9e61995 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass3.js @@ -0,0 +1,14 @@ +//// [unusedPrivateVariableInClass3.ts] + +class greeter { + private x: string; + private y: string; + public z: string; +} + +//// [unusedPrivateVariableInClass3.js] +var greeter = (function () { + function greeter() { + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedPrivateVariableInClass4.errors.txt b/tests/baselines/reference/unusedPrivateVariableInClass4.errors.txt new file mode 100644 index 00000000000..83325cf2d8a --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass4.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/unusedPrivateVariableInClass4.ts(4,13): error TS6133: 'y' is declared but never used. + + +==== tests/cases/compiler/unusedPrivateVariableInClass4.ts (1 errors) ==== + + class greeter { + private x: string; + private y: string; + ~ +!!! error TS6133: 'y' is declared but never used. + public z: string; + + public method1() { + this.x = "dummy value"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateVariableInClass4.js b/tests/baselines/reference/unusedPrivateVariableInClass4.js new file mode 100644 index 00000000000..878a7780e85 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass4.js @@ -0,0 +1,21 @@ +//// [unusedPrivateVariableInClass4.ts] + +class greeter { + private x: string; + private y: string; + public z: string; + + public method1() { + this.x = "dummy value"; + } +} + +//// [unusedPrivateVariableInClass4.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.method1 = function () { + this.x = "dummy value"; + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedPrivateVariableInClass5.errors.txt b/tests/baselines/reference/unusedPrivateVariableInClass5.errors.txt new file mode 100644 index 00000000000..741406c5284 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass5.errors.txt @@ -0,0 +1,16 @@ +tests/cases/compiler/unusedPrivateVariableInClass5.ts(4,13): error TS6133: 'y' is declared but never used. + + +==== tests/cases/compiler/unusedPrivateVariableInClass5.ts (1 errors) ==== + + class greeter { + private x: string; + private y: string; + ~ +!!! error TS6133: 'y' is declared but never used. + public z: string; + + constructor() { + this.x = "dummy value"; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateVariableInClass5.js b/tests/baselines/reference/unusedPrivateVariableInClass5.js new file mode 100644 index 00000000000..4d9b3017222 --- /dev/null +++ b/tests/baselines/reference/unusedPrivateVariableInClass5.js @@ -0,0 +1,19 @@ +//// [unusedPrivateVariableInClass5.ts] + +class greeter { + private x: string; + private y: string; + public z: string; + + constructor() { + this.x = "dummy value"; + } +} + +//// [unusedPrivateVariableInClass5.js] +var greeter = (function () { + function greeter() { + this.x = "dummy value"; + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedSetterInClass.js b/tests/baselines/reference/unusedSetterInClass.js new file mode 100644 index 00000000000..aff12b7d043 --- /dev/null +++ b/tests/baselines/reference/unusedSetterInClass.js @@ -0,0 +1,23 @@ +//// [unusedSetterInClass.ts] + +class Employee { + private _fullName: string; + + set fullName(newName: string) { + this._fullName = newName; + } +} + +//// [unusedSetterInClass.js] +var Employee = (function () { + function Employee() { + } + Object.defineProperty(Employee.prototype, "fullName", { + set: function (newName) { + this._fullName = newName; + }, + enumerable: true, + configurable: true + }); + return Employee; +}()); diff --git a/tests/baselines/reference/unusedSetterInClass.symbols b/tests/baselines/reference/unusedSetterInClass.symbols new file mode 100644 index 00000000000..511b106aded --- /dev/null +++ b/tests/baselines/reference/unusedSetterInClass.symbols @@ -0,0 +1,19 @@ +=== tests/cases/compiler/unusedSetterInClass.ts === + +class Employee { +>Employee : Symbol(Employee, Decl(unusedSetterInClass.ts, 0, 0)) + + private _fullName: string; +>_fullName : Symbol(Employee._fullName, Decl(unusedSetterInClass.ts, 1, 16)) + + set fullName(newName: string) { +>fullName : Symbol(Employee.fullName, Decl(unusedSetterInClass.ts, 2, 30)) +>newName : Symbol(newName, Decl(unusedSetterInClass.ts, 4, 17)) + + this._fullName = newName; +>this._fullName : Symbol(Employee._fullName, Decl(unusedSetterInClass.ts, 1, 16)) +>this : Symbol(Employee, Decl(unusedSetterInClass.ts, 0, 0)) +>_fullName : Symbol(Employee._fullName, Decl(unusedSetterInClass.ts, 1, 16)) +>newName : Symbol(newName, Decl(unusedSetterInClass.ts, 4, 17)) + } +} diff --git a/tests/baselines/reference/unusedSetterInClass.types b/tests/baselines/reference/unusedSetterInClass.types new file mode 100644 index 00000000000..9a74ef383ae --- /dev/null +++ b/tests/baselines/reference/unusedSetterInClass.types @@ -0,0 +1,20 @@ +=== tests/cases/compiler/unusedSetterInClass.ts === + +class Employee { +>Employee : Employee + + private _fullName: string; +>_fullName : string + + set fullName(newName: string) { +>fullName : string +>newName : string + + this._fullName = newName; +>this._fullName = newName : string +>this._fullName : string +>this : this +>_fullName : string +>newName : string + } +} diff --git a/tests/baselines/reference/unusedSingleParameterInContructor.errors.txt b/tests/baselines/reference/unusedSingleParameterInContructor.errors.txt new file mode 100644 index 00000000000..2549266dfc2 --- /dev/null +++ b/tests/baselines/reference/unusedSingleParameterInContructor.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/unusedSingleParameterInContructor.ts(3,17): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedSingleParameterInContructor.ts(4,13): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedSingleParameterInContructor.ts (2 errors) ==== + + class Dummy { + constructor(person: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedSingleParameterInContructor.js b/tests/baselines/reference/unusedSingleParameterInContructor.js new file mode 100644 index 00000000000..172f9e20ab8 --- /dev/null +++ b/tests/baselines/reference/unusedSingleParameterInContructor.js @@ -0,0 +1,15 @@ +//// [unusedSingleParameterInContructor.ts] + +class Dummy { + constructor(person: string) { + var unused = 20; + } +} + +//// [unusedSingleParameterInContructor.js] +var Dummy = (function () { + function Dummy(person) { + var unused = 20; + } + return Dummy; +}()); diff --git a/tests/baselines/reference/unusedSingleParameterInFunctionDeclaration.errors.txt b/tests/baselines/reference/unusedSingleParameterInFunctionDeclaration.errors.txt new file mode 100644 index 00000000000..e29269e9b05 --- /dev/null +++ b/tests/baselines/reference/unusedSingleParameterInFunctionDeclaration.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedSingleParameterInFunctionDeclaration.ts(2,18): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedSingleParameterInFunctionDeclaration.ts(3,9): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedSingleParameterInFunctionDeclaration.ts (2 errors) ==== + + function greeter(person: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedSingleParameterInFunctionDeclaration.js b/tests/baselines/reference/unusedSingleParameterInFunctionDeclaration.js new file mode 100644 index 00000000000..0ee7c3d608a --- /dev/null +++ b/tests/baselines/reference/unusedSingleParameterInFunctionDeclaration.js @@ -0,0 +1,10 @@ +//// [unusedSingleParameterInFunctionDeclaration.ts] + +function greeter(person: string) { + var unused = 20; +} + +//// [unusedSingleParameterInFunctionDeclaration.js] +function greeter(person) { + var unused = 20; +} diff --git a/tests/baselines/reference/unusedSingleParameterInFunctionExpression.errors.txt b/tests/baselines/reference/unusedSingleParameterInFunctionExpression.errors.txt new file mode 100644 index 00000000000..ad3e5e67a72 --- /dev/null +++ b/tests/baselines/reference/unusedSingleParameterInFunctionExpression.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedSingleParameterInFunctionExpression.ts(2,21): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedSingleParameterInFunctionExpression.ts(3,9): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedSingleParameterInFunctionExpression.ts (2 errors) ==== + + var func = function(person: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedSingleParameterInFunctionExpression.js b/tests/baselines/reference/unusedSingleParameterInFunctionExpression.js new file mode 100644 index 00000000000..578707e43cc --- /dev/null +++ b/tests/baselines/reference/unusedSingleParameterInFunctionExpression.js @@ -0,0 +1,10 @@ +//// [unusedSingleParameterInFunctionExpression.ts] + +var func = function(person: string) { + var unused = 20; +} + +//// [unusedSingleParameterInFunctionExpression.js] +var func = function (person) { + var unused = 20; +}; diff --git a/tests/baselines/reference/unusedSingleParameterInMethodDeclaration.errors.txt b/tests/baselines/reference/unusedSingleParameterInMethodDeclaration.errors.txt new file mode 100644 index 00000000000..af806bbadfb --- /dev/null +++ b/tests/baselines/reference/unusedSingleParameterInMethodDeclaration.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/unusedSingleParameterInMethodDeclaration.ts(3,20): error TS6133: 'person' is declared but never used. +tests/cases/compiler/unusedSingleParameterInMethodDeclaration.ts(4,13): error TS6133: 'unused' is declared but never used. + + +==== tests/cases/compiler/unusedSingleParameterInMethodDeclaration.ts (2 errors) ==== + + class Dummy { + public greeter(person: string) { + ~~~~~~ +!!! error TS6133: 'person' is declared but never used. + var unused = 20; + ~~~~~~ +!!! error TS6133: 'unused' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedSingleParameterInMethodDeclaration.js b/tests/baselines/reference/unusedSingleParameterInMethodDeclaration.js new file mode 100644 index 00000000000..993866086db --- /dev/null +++ b/tests/baselines/reference/unusedSingleParameterInMethodDeclaration.js @@ -0,0 +1,17 @@ +//// [unusedSingleParameterInMethodDeclaration.ts] + +class Dummy { + public greeter(person: string) { + var unused = 20; + } +} + +//// [unusedSingleParameterInMethodDeclaration.js] +var Dummy = (function () { + function Dummy() { + } + Dummy.prototype.greeter = function (person) { + var unused = 20; + }; + return Dummy; +}()); diff --git a/tests/baselines/reference/unusedSwitchStatment.errors.txt b/tests/baselines/reference/unusedSwitchStatment.errors.txt new file mode 100644 index 00000000000..58359eed90d --- /dev/null +++ b/tests/baselines/reference/unusedSwitchStatment.errors.txt @@ -0,0 +1,31 @@ +tests/cases/compiler/unusedSwitchStatment.ts(4,13): error TS6133: 'x' is declared but never used. +tests/cases/compiler/unusedSwitchStatment.ts(7,15): error TS6133: 'c' is declared but never used. +tests/cases/compiler/unusedSwitchStatment.ts(10,13): error TS6133: 'z' is declared but never used. + + +==== tests/cases/compiler/unusedSwitchStatment.ts (3 errors) ==== + + switch (1) { + case 0: + let x; + ~ +!!! error TS6133: 'x' is declared but never used. + break; + case 1: + const c = 1; + ~ +!!! error TS6133: 'c' is declared but never used. + break; + default: + let z = 2; + ~ +!!! error TS6133: 'z' is declared but never used. + } + + + switch (2) { + case 0: + let x; + case 1: + x++; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedSwitchStatment.js b/tests/baselines/reference/unusedSwitchStatment.js new file mode 100644 index 00000000000..2fd0d1fc49e --- /dev/null +++ b/tests/baselines/reference/unusedSwitchStatment.js @@ -0,0 +1,38 @@ +//// [unusedSwitchStatment.ts] + +switch (1) { + case 0: + let x; + break; + case 1: + const c = 1; + break; + default: + let z = 2; +} + + +switch (2) { + case 0: + let x; + case 1: + x++; +} + +//// [unusedSwitchStatment.js] +switch (1) { + case 0: + var x = void 0; + break; + case 1: + var c = 1; + break; + default: + var z = 2; +} +switch (2) { + case 0: + var x = void 0; + case 1: + x++; +} diff --git a/tests/baselines/reference/unusedTypeParameterInFunction1.errors.txt b/tests/baselines/reference/unusedTypeParameterInFunction1.errors.txt new file mode 100644 index 00000000000..afbdb09c162 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInFunction1.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/unusedTypeParameterInFunction1.ts(2,13): error TS6133: 'T' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInFunction1.ts (1 errors) ==== + + function f1() { + ~ +!!! error TS6133: 'T' is declared but never used. + + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInFunction1.js b/tests/baselines/reference/unusedTypeParameterInFunction1.js new file mode 100644 index 00000000000..6ecf90343b7 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInFunction1.js @@ -0,0 +1,9 @@ +//// [unusedTypeParameterInFunction1.ts] + +function f1() { + +} + +//// [unusedTypeParameterInFunction1.js] +function f1() { +} diff --git a/tests/baselines/reference/unusedTypeParameterInFunction2.errors.txt b/tests/baselines/reference/unusedTypeParameterInFunction2.errors.txt new file mode 100644 index 00000000000..0097cc99810 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInFunction2.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/unusedTypeParameterInFunction2.ts(2,16): error TS6133: 'Y' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInFunction2.ts (1 errors) ==== + + function f1() { + ~ +!!! error TS6133: 'Y' is declared but never used. + var a: X; + a; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInFunction2.js b/tests/baselines/reference/unusedTypeParameterInFunction2.js new file mode 100644 index 00000000000..7c3eaa91127 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInFunction2.js @@ -0,0 +1,12 @@ +//// [unusedTypeParameterInFunction2.ts] + +function f1() { + var a: X; + a; +} + +//// [unusedTypeParameterInFunction2.js] +function f1() { + var a; + a; +} diff --git a/tests/baselines/reference/unusedTypeParameterInFunction3.errors.txt b/tests/baselines/reference/unusedTypeParameterInFunction3.errors.txt new file mode 100644 index 00000000000..7a2e33769da --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInFunction3.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedTypeParameterInFunction3.ts(2,16): error TS6133: 'Y' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInFunction3.ts (1 errors) ==== + + function f1() { + ~ +!!! error TS6133: 'Y' is declared but never used. + var a: X; + var b: Z; + a; + b; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInFunction3.js b/tests/baselines/reference/unusedTypeParameterInFunction3.js new file mode 100644 index 00000000000..335a5668acc --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInFunction3.js @@ -0,0 +1,16 @@ +//// [unusedTypeParameterInFunction3.ts] + +function f1() { + var a: X; + var b: Z; + a; + b; +} + +//// [unusedTypeParameterInFunction3.js] +function f1() { + var a; + var b; + a; + b; +} diff --git a/tests/baselines/reference/unusedTypeParameterInFunction4.errors.txt b/tests/baselines/reference/unusedTypeParameterInFunction4.errors.txt new file mode 100644 index 00000000000..7840ff31df3 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInFunction4.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedTypeParameterInFunction4.ts(2,13): error TS6133: 'X' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInFunction4.ts (1 errors) ==== + + function f1() { + ~ +!!! error TS6133: 'X' is declared but never used. + var a: Y; + var b: Z; + a; + b; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInFunction4.js b/tests/baselines/reference/unusedTypeParameterInFunction4.js new file mode 100644 index 00000000000..e6b26dfbd4e --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInFunction4.js @@ -0,0 +1,16 @@ +//// [unusedTypeParameterInFunction4.ts] + +function f1() { + var a: Y; + var b: Z; + a; + b; +} + +//// [unusedTypeParameterInFunction4.js] +function f1() { + var a; + var b; + a; + b; +} diff --git a/tests/baselines/reference/unusedTypeParameterInInterface1.errors.txt b/tests/baselines/reference/unusedTypeParameterInInterface1.errors.txt new file mode 100644 index 00000000000..fbe6ef3f0d1 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInInterface1.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/unusedTypeParameterInInterface1.ts(2,15): error TS6133: 'T' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInInterface1.ts (1 errors) ==== + + interface int { + ~ +!!! error TS6133: 'T' is declared but never used. + + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInInterface1.js b/tests/baselines/reference/unusedTypeParameterInInterface1.js new file mode 100644 index 00000000000..8f9a6962b35 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInInterface1.js @@ -0,0 +1,7 @@ +//// [unusedTypeParameterInInterface1.ts] + +interface int { + +} + +//// [unusedTypeParameterInInterface1.js] diff --git a/tests/baselines/reference/unusedTypeParameterInInterface2.errors.txt b/tests/baselines/reference/unusedTypeParameterInInterface2.errors.txt new file mode 100644 index 00000000000..ed3e5847774 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInInterface2.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/unusedTypeParameterInInterface2.ts(2,18): error TS6133: 'U' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInInterface2.ts (1 errors) ==== + + interface int { + ~ +!!! error TS6133: 'U' is declared but never used. + f1(a: T): string; + c: V; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInInterface2.js b/tests/baselines/reference/unusedTypeParameterInInterface2.js new file mode 100644 index 00000000000..d5a4c490d27 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInInterface2.js @@ -0,0 +1,8 @@ +//// [unusedTypeParameterInInterface2.ts] + +interface int { + f1(a: T): string; + c: V; +} + +//// [unusedTypeParameterInInterface2.js] diff --git a/tests/baselines/reference/unusedTypeParameterInLambda1.errors.txt b/tests/baselines/reference/unusedTypeParameterInLambda1.errors.txt new file mode 100644 index 00000000000..a84df63b317 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInLambda1.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedTypeParameterInLambda1.ts(4,17): error TS6133: 'T' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInLambda1.ts (1 errors) ==== + + class A { + public f1() { + return () => { + ~ +!!! error TS6133: 'T' is declared but never used. + + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInLambda1.js b/tests/baselines/reference/unusedTypeParameterInLambda1.js new file mode 100644 index 00000000000..0f55a4a32a1 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInLambda1.js @@ -0,0 +1,20 @@ +//// [unusedTypeParameterInLambda1.ts] + +class A { + public f1() { + return () => { + + } + } +} + +//// [unusedTypeParameterInLambda1.js] +var A = (function () { + function A() { + } + A.prototype.f1 = function () { + return function () { + }; + }; + return A; +}()); diff --git a/tests/baselines/reference/unusedTypeParameterInLambda2.errors.txt b/tests/baselines/reference/unusedTypeParameterInLambda2.errors.txt new file mode 100644 index 00000000000..c1104743472 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInLambda2.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/unusedTypeParameterInLambda2.ts(4,17): error TS6133: 'T' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInLambda2.ts (1 errors) ==== + + class A { + public f1() { + return () => { + ~ +!!! error TS6133: 'T' is declared but never used. + var a: X; + a; + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInLambda2.js b/tests/baselines/reference/unusedTypeParameterInLambda2.js new file mode 100644 index 00000000000..16545eb13f2 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInLambda2.js @@ -0,0 +1,23 @@ +//// [unusedTypeParameterInLambda2.ts] + +class A { + public f1() { + return () => { + var a: X; + a; + } + } +} + +//// [unusedTypeParameterInLambda2.js] +var A = (function () { + function A() { + } + A.prototype.f1 = function () { + return function () { + var a; + a; + }; + }; + return A; +}()); diff --git a/tests/baselines/reference/unusedTypeParameterInLambda3.errors.txt b/tests/baselines/reference/unusedTypeParameterInLambda3.errors.txt new file mode 100644 index 00000000000..5477f611e72 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInLambda3.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedTypeParameterInLambda3.ts(5,15): error TS6133: 'U' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInLambda3.ts (1 errors) ==== + class A { + public x: T; + } + + var y: new (a:T)=>void; + ~ +!!! error TS6133: 'U' is declared but never used. + \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInLambda3.js b/tests/baselines/reference/unusedTypeParameterInLambda3.js new file mode 100644 index 00000000000..27899320fc2 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInLambda3.js @@ -0,0 +1,15 @@ +//// [unusedTypeParameterInLambda3.ts] +class A { + public x: T; +} + +var y: new (a:T)=>void; + + +//// [unusedTypeParameterInLambda3.js] +var A = (function () { + function A() { + } + return A; +}()); +var y; diff --git a/tests/baselines/reference/unusedTypeParameterInMethod1.errors.txt b/tests/baselines/reference/unusedTypeParameterInMethod1.errors.txt new file mode 100644 index 00000000000..3b39d9b35ec --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod1.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/unusedTypeParameterInMethod1.ts(3,15): error TS6133: 'X' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInMethod1.ts (1 errors) ==== + + class A { + public f1() { + ~ +!!! error TS6133: 'X' is declared but never used. + var a: Y; + var b: Z; + a; + b; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInMethod1.js b/tests/baselines/reference/unusedTypeParameterInMethod1.js new file mode 100644 index 00000000000..e5ab22095b8 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod1.js @@ -0,0 +1,23 @@ +//// [unusedTypeParameterInMethod1.ts] + +class A { + public f1() { + var a: Y; + var b: Z; + a; + b; + } +} + +//// [unusedTypeParameterInMethod1.js] +var A = (function () { + function A() { + } + A.prototype.f1 = function () { + var a; + var b; + a; + b; + }; + return A; +}()); diff --git a/tests/baselines/reference/unusedTypeParameterInMethod2.errors.txt b/tests/baselines/reference/unusedTypeParameterInMethod2.errors.txt new file mode 100644 index 00000000000..f1dafb5a19e --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod2.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/unusedTypeParameterInMethod2.ts(3,18): error TS6133: 'Y' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInMethod2.ts (1 errors) ==== + + class A { + public f1() { + ~ +!!! error TS6133: 'Y' is declared but never used. + var a: X; + var b: Z; + a; + b; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInMethod2.js b/tests/baselines/reference/unusedTypeParameterInMethod2.js new file mode 100644 index 00000000000..9fb785634c6 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod2.js @@ -0,0 +1,23 @@ +//// [unusedTypeParameterInMethod2.ts] + +class A { + public f1() { + var a: X; + var b: Z; + a; + b; + } +} + +//// [unusedTypeParameterInMethod2.js] +var A = (function () { + function A() { + } + A.prototype.f1 = function () { + var a; + var b; + a; + b; + }; + return A; +}()); diff --git a/tests/baselines/reference/unusedTypeParameterInMethod3.errors.txt b/tests/baselines/reference/unusedTypeParameterInMethod3.errors.txt new file mode 100644 index 00000000000..04a43e3d011 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod3.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/unusedTypeParameterInMethod3.ts(3,21): error TS6133: 'Z' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInMethod3.ts (1 errors) ==== + + class A { + public f1() { + ~ +!!! error TS6133: 'Z' is declared but never used. + var a: X; + var b: Y; + a; + b; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInMethod3.js b/tests/baselines/reference/unusedTypeParameterInMethod3.js new file mode 100644 index 00000000000..b81d0796dc4 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod3.js @@ -0,0 +1,23 @@ +//// [unusedTypeParameterInMethod3.ts] + +class A { + public f1() { + var a: X; + var b: Y; + a; + b; + } +} + +//// [unusedTypeParameterInMethod3.js] +var A = (function () { + function A() { + } + A.prototype.f1 = function () { + var a; + var b; + a; + b; + }; + return A; +}()); diff --git a/tests/baselines/reference/unusedTypeParameterInMethod4.errors.txt b/tests/baselines/reference/unusedTypeParameterInMethod4.errors.txt new file mode 100644 index 00000000000..9026aaad321 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod4.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedTypeParameterInMethod4.ts(3,15): error TS6133: 'X' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInMethod4.ts (1 errors) ==== + + class A { + public f1() { + ~ +!!! error TS6133: 'X' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInMethod4.js b/tests/baselines/reference/unusedTypeParameterInMethod4.js new file mode 100644 index 00000000000..4db72f193a2 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod4.js @@ -0,0 +1,16 @@ +//// [unusedTypeParameterInMethod4.ts] + +class A { + public f1() { + + } +} + +//// [unusedTypeParameterInMethod4.js] +var A = (function () { + function A() { + } + A.prototype.f1 = function () { + }; + return A; +}()); diff --git a/tests/baselines/reference/unusedTypeParameterInMethod5.errors.txt b/tests/baselines/reference/unusedTypeParameterInMethod5.errors.txt new file mode 100644 index 00000000000..20d95ec4bb5 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod5.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedTypeParameterInMethod5.ts(3,26): error TS6133: 'X' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameterInMethod5.ts (1 errors) ==== + + class A { + public f1 = function() { + ~ +!!! error TS6133: 'X' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameterInMethod5.js b/tests/baselines/reference/unusedTypeParameterInMethod5.js new file mode 100644 index 00000000000..e1863b4cbb1 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameterInMethod5.js @@ -0,0 +1,16 @@ +//// [unusedTypeParameterInMethod5.ts] + +class A { + public f1 = function() { + + } +} + +//// [unusedTypeParameterInMethod5.js] +var A = (function () { + function A() { + this.f1 = function () { + }; + } + return A; +}()); diff --git a/tests/baselines/reference/unusedTypeParameters1.errors.txt b/tests/baselines/reference/unusedTypeParameters1.errors.txt new file mode 100644 index 00000000000..15d85d0e815 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters1.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/unusedTypeParameters1.ts(2,15): error TS6133: 'typeparameter1' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameters1.ts (1 errors) ==== + + class greeter { + ~~~~~~~~~~~~~~ +!!! error TS6133: 'typeparameter1' is declared but never used. + + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameters1.js b/tests/baselines/reference/unusedTypeParameters1.js new file mode 100644 index 00000000000..27de80a9ecc --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters1.js @@ -0,0 +1,12 @@ +//// [unusedTypeParameters1.ts] + +class greeter { + +} + +//// [unusedTypeParameters1.js] +var greeter = (function () { + function greeter() { + } + return greeter; +}()); diff --git a/tests/baselines/reference/unusedTypeParameters2.errors.txt b/tests/baselines/reference/unusedTypeParameters2.errors.txt new file mode 100644 index 00000000000..a82a119d2ca --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters2.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedTypeParameters2.ts(2,15): error TS6133: 'typeparameter1' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameters2.ts (1 errors) ==== + + class greeter { + ~~~~~~~~~~~~~~ +!!! error TS6133: 'typeparameter1' is declared but never used. + private x: typeparameter2; + + public function1() { + this.x; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameters2.js b/tests/baselines/reference/unusedTypeParameters2.js new file mode 100644 index 00000000000..b28aa5074e7 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters2.js @@ -0,0 +1,19 @@ +//// [unusedTypeParameters2.ts] + +class greeter { + private x: typeparameter2; + + public function1() { + this.x; + } +} + +//// [unusedTypeParameters2.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.function1 = function () { + this.x; + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedTypeParameters3.errors.txt b/tests/baselines/reference/unusedTypeParameters3.errors.txt new file mode 100644 index 00000000000..0b051ad476b --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters3.errors.txt @@ -0,0 +1,17 @@ +tests/cases/compiler/unusedTypeParameters3.ts(2,15): error TS6133: 'typeparameter1' is declared but never used. +tests/cases/compiler/unusedTypeParameters3.ts(2,47): error TS6133: 'typeparameter3' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameters3.ts (2 errors) ==== + + class greeter { + ~~~~~~~~~~~~~~ +!!! error TS6133: 'typeparameter1' is declared but never used. + ~~~~~~~~~~~~~~ +!!! error TS6133: 'typeparameter3' is declared but never used. + private x: typeparameter2; + + public function1() { + this.x; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameters3.js b/tests/baselines/reference/unusedTypeParameters3.js new file mode 100644 index 00000000000..0552acaf540 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters3.js @@ -0,0 +1,19 @@ +//// [unusedTypeParameters3.ts] + +class greeter { + private x: typeparameter2; + + public function1() { + this.x; + } +} + +//// [unusedTypeParameters3.js] +var greeter = (function () { + function greeter() { + } + greeter.prototype.function1 = function () { + this.x; + }; + return greeter; +}()); diff --git a/tests/baselines/reference/unusedTypeParameters4.errors.txt b/tests/baselines/reference/unusedTypeParameters4.errors.txt new file mode 100644 index 00000000000..3aad5d5a346 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters4.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/unusedTypeParameters4.ts(3,13): error TS6133: 'U' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameters4.ts (1 errors) ==== + + var x: { + new (a: T): void; + ~ +!!! error TS6133: 'U' is declared but never used. + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameters4.js b/tests/baselines/reference/unusedTypeParameters4.js new file mode 100644 index 00000000000..4e679ed3f6b --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters4.js @@ -0,0 +1,8 @@ +//// [unusedTypeParameters4.ts] + +var x: { + new (a: T): void; +} + +//// [unusedTypeParameters4.js] +var x; diff --git a/tests/baselines/reference/unusedTypeParameters5.errors.txt b/tests/baselines/reference/unusedTypeParameters5.errors.txt new file mode 100644 index 00000000000..ed150710d94 --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters5.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedTypeParameters5.ts(7,16): error TS6133: 'K' is declared but never used. + + +==== tests/cases/compiler/unusedTypeParameters5.ts (1 errors) ==== + + class A { + public x: Dummy; + } + + var x: { + new (a: T): A; + ~ +!!! error TS6133: 'K' is declared but never used. + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedTypeParameters5.js b/tests/baselines/reference/unusedTypeParameters5.js new file mode 100644 index 00000000000..75dfd892eff --- /dev/null +++ b/tests/baselines/reference/unusedTypeParameters5.js @@ -0,0 +1,17 @@ +//// [unusedTypeParameters5.ts] + +class A { + public x: Dummy; +} + +var x: { + new (a: T): A; +} + +//// [unusedTypeParameters5.js] +var A = (function () { + function A() { + } + return A; +}()); +var x; diff --git a/tests/baselines/reference/unusedVariablesinBlocks1.errors.txt b/tests/baselines/reference/unusedVariablesinBlocks1.errors.txt new file mode 100644 index 00000000000..4f4291395f3 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinBlocks1.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedVariablesinBlocks1.ts(3,9): error TS6133: 'x' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinBlocks1.ts (1 errors) ==== + + function f1 () { + let x = 10; + ~ +!!! error TS6133: 'x' is declared but never used. + { + let x = 11; + x++; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinBlocks1.js b/tests/baselines/reference/unusedVariablesinBlocks1.js new file mode 100644 index 00000000000..d569485aa82 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinBlocks1.js @@ -0,0 +1,18 @@ +//// [unusedVariablesinBlocks1.ts] + +function f1 () { + let x = 10; + { + let x = 11; + x++; + } +} + +//// [unusedVariablesinBlocks1.js] +function f1() { + var x = 10; + { + var x_1 = 11; + x_1++; + } +} diff --git a/tests/baselines/reference/unusedVariablesinBlocks2.errors.txt b/tests/baselines/reference/unusedVariablesinBlocks2.errors.txt new file mode 100644 index 00000000000..70af896324c --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinBlocks2.errors.txt @@ -0,0 +1,14 @@ +tests/cases/compiler/unusedVariablesinBlocks2.ts(5,13): error TS6133: 'x' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinBlocks2.ts (1 errors) ==== + + function f1 () { + let x = 10; + { + let x = 11; + ~ +!!! error TS6133: 'x' is declared but never used. + } + x++; + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinBlocks2.js b/tests/baselines/reference/unusedVariablesinBlocks2.js new file mode 100644 index 00000000000..0f4cb346398 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinBlocks2.js @@ -0,0 +1,18 @@ +//// [unusedVariablesinBlocks2.ts] + +function f1 () { + let x = 10; + { + let x = 11; + } + x++; +} + +//// [unusedVariablesinBlocks2.js] +function f1() { + var x = 10; + { + var x_1 = 11; + } + x++; +} diff --git a/tests/baselines/reference/unusedVariablesinForLoop.errors.txt b/tests/baselines/reference/unusedVariablesinForLoop.errors.txt new file mode 100644 index 00000000000..b44e9dfdab1 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinForLoop.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedVariablesinForLoop.ts(3,13): error TS6133: 'i' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinForLoop.ts (1 errors) ==== + + function f1 () { + for(var i = 0; ;) { + ~ +!!! error TS6133: 'i' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinForLoop.js b/tests/baselines/reference/unusedVariablesinForLoop.js new file mode 100644 index 00000000000..a87e395d6e7 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinForLoop.js @@ -0,0 +1,13 @@ +//// [unusedVariablesinForLoop.ts] + +function f1 () { + for(var i = 0; ;) { + + } +} + +//// [unusedVariablesinForLoop.js] +function f1() { + for (var i = 0;;) { + } +} diff --git a/tests/baselines/reference/unusedVariablesinForLoop2.errors.txt b/tests/baselines/reference/unusedVariablesinForLoop2.errors.txt new file mode 100644 index 00000000000..71974af00f4 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinForLoop2.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedVariablesinForLoop2.ts(3,16): error TS6133: 'elem' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinForLoop2.ts (1 errors) ==== + + function f1 () { + for (const elem in ["a", "b", "c"]) { + ~~~~ +!!! error TS6133: 'elem' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinForLoop2.js b/tests/baselines/reference/unusedVariablesinForLoop2.js new file mode 100644 index 00000000000..523fdb18f9e --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinForLoop2.js @@ -0,0 +1,13 @@ +//// [unusedVariablesinForLoop2.ts] + +function f1 () { + for (const elem in ["a", "b", "c"]) { + + } +} + +//// [unusedVariablesinForLoop2.js] +function f1() { + for (var elem in ["a", "b", "c"]) { + } +} diff --git a/tests/baselines/reference/unusedVariablesinForLoop3.errors.txt b/tests/baselines/reference/unusedVariablesinForLoop3.errors.txt new file mode 100644 index 00000000000..dbaf91ae70d --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinForLoop3.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedVariablesinForLoop3.ts(3,16): error TS6133: 'elem' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinForLoop3.ts (1 errors) ==== + + function f1 () { + for (const elem of ["a", "b", "c"]) { + ~~~~ +!!! error TS6133: 'elem' is declared but never used. + + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinForLoop3.js b/tests/baselines/reference/unusedVariablesinForLoop3.js new file mode 100644 index 00000000000..833214f3ba5 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinForLoop3.js @@ -0,0 +1,14 @@ +//// [unusedVariablesinForLoop3.ts] + +function f1 () { + for (const elem of ["a", "b", "c"]) { + + } +} + +//// [unusedVariablesinForLoop3.js] +function f1() { + for (var _i = 0, _a = ["a", "b", "c"]; _i < _a.length; _i++) { + var elem = _a[_i]; + } +} diff --git a/tests/baselines/reference/unusedVariablesinForLoop4.errors.txt b/tests/baselines/reference/unusedVariablesinForLoop4.errors.txt new file mode 100644 index 00000000000..d54500d353d --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinForLoop4.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/unusedVariablesinForLoop4.ts(5,13): error TS6133: 'x' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinForLoop4.ts (1 errors) ==== + + function f1 () { + for (const elem of ["a", "b", "c"]) { + elem; + var x = 20; + ~ +!!! error TS6133: 'x' is declared but never used. + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinForLoop4.js b/tests/baselines/reference/unusedVariablesinForLoop4.js new file mode 100644 index 00000000000..6ec7f6fec55 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinForLoop4.js @@ -0,0 +1,17 @@ +//// [unusedVariablesinForLoop4.ts] + +function f1 () { + for (const elem of ["a", "b", "c"]) { + elem; + var x = 20; + } +} + +//// [unusedVariablesinForLoop4.js] +function f1() { + for (var _i = 0, _a = ["a", "b", "c"]; _i < _a.length; _i++) { + var elem = _a[_i]; + elem; + var x = 20; + } +} diff --git a/tests/baselines/reference/unusedVariablesinModules1.errors.txt b/tests/baselines/reference/unusedVariablesinModules1.errors.txt new file mode 100644 index 00000000000..00faee6a6b3 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinModules1.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/unusedVariablesinModules1.ts(4,5): error TS6133: 'x' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinModules1.ts (1 errors) ==== + + export {}; + + var x: string; + ~ +!!! error TS6133: 'x' is declared but never used. + + export var y: string; \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinModules1.js b/tests/baselines/reference/unusedVariablesinModules1.js new file mode 100644 index 00000000000..18622a32ba9 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinModules1.js @@ -0,0 +1,11 @@ +//// [unusedVariablesinModules1.ts] + +export {}; + +var x: string; + +export var y: string; + +//// [unusedVariablesinModules1.js] +"use strict"; +var x; diff --git a/tests/baselines/reference/unusedVariablesinNamespaces1.errors.txt b/tests/baselines/reference/unusedVariablesinNamespaces1.errors.txt new file mode 100644 index 00000000000..39c1cdc4e08 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinNamespaces1.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/unusedVariablesinNamespaces1.ts(3,11): error TS6133: 'lettersRegexp' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinNamespaces1.ts (1 errors) ==== + + namespace Validation { + const lettersRegexp = /^[A-Za-z]+$/; + ~~~~~~~~~~~~~ +!!! error TS6133: 'lettersRegexp' is declared but never used. + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinNamespaces1.js b/tests/baselines/reference/unusedVariablesinNamespaces1.js new file mode 100644 index 00000000000..a6dca8e413f --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinNamespaces1.js @@ -0,0 +1,11 @@ +//// [unusedVariablesinNamespaces1.ts] + +namespace Validation { + const lettersRegexp = /^[A-Za-z]+$/; +} + +//// [unusedVariablesinNamespaces1.js] +var Validation; +(function (Validation) { + var lettersRegexp = /^[A-Za-z]+$/; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedVariablesinNamespaces2.errors.txt b/tests/baselines/reference/unusedVariablesinNamespaces2.errors.txt new file mode 100644 index 00000000000..43d41e6338b --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinNamespaces2.errors.txt @@ -0,0 +1,17 @@ +tests/cases/compiler/unusedVariablesinNamespaces2.ts(4,11): error TS6133: 'numberRegexp' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinNamespaces2.ts (1 errors) ==== + + namespace Validation { + const lettersRegexp = /^[A-Za-z]+$/; + const numberRegexp = /^[0-9]+$/; + ~~~~~~~~~~~~ +!!! error TS6133: 'numberRegexp' is declared but never used. + + export class LettersOnlyValidator { + isAcceptable(s2: string) { + return lettersRegexp.test(s2); + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinNamespaces2.js b/tests/baselines/reference/unusedVariablesinNamespaces2.js new file mode 100644 index 00000000000..b0b64fa644d --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinNamespaces2.js @@ -0,0 +1,28 @@ +//// [unusedVariablesinNamespaces2.ts] + +namespace Validation { + const lettersRegexp = /^[A-Za-z]+$/; + const numberRegexp = /^[0-9]+$/; + + export class LettersOnlyValidator { + isAcceptable(s2: string) { + return lettersRegexp.test(s2); + } + } +} + +//// [unusedVariablesinNamespaces2.js] +var Validation; +(function (Validation) { + var lettersRegexp = /^[A-Za-z]+$/; + var numberRegexp = /^[0-9]+$/; + var LettersOnlyValidator = (function () { + function LettersOnlyValidator() { + } + LettersOnlyValidator.prototype.isAcceptable = function (s2) { + return lettersRegexp.test(s2); + }; + return LettersOnlyValidator; + }()); + Validation.LettersOnlyValidator = LettersOnlyValidator; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/unusedVariablesinNamespaces3.errors.txt b/tests/baselines/reference/unusedVariablesinNamespaces3.errors.txt new file mode 100644 index 00000000000..a0a274c6b2a --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinNamespaces3.errors.txt @@ -0,0 +1,18 @@ +tests/cases/compiler/unusedVariablesinNamespaces3.ts(4,11): error TS6133: 'numberRegexp' is declared but never used. + + +==== tests/cases/compiler/unusedVariablesinNamespaces3.ts (1 errors) ==== + + namespace Validation { + const lettersRegexp = /^[A-Za-z]+$/; + const numberRegexp = /^[0-9]+$/; + ~~~~~~~~~~~~ +!!! error TS6133: 'numberRegexp' is declared but never used. + export const anotherUnusedVariable = "Dummy value"; + + export class LettersOnlyValidator { + isAcceptable(s2: string) { + return lettersRegexp.test(s2); + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinNamespaces3.js b/tests/baselines/reference/unusedVariablesinNamespaces3.js new file mode 100644 index 00000000000..16a92a475d9 --- /dev/null +++ b/tests/baselines/reference/unusedVariablesinNamespaces3.js @@ -0,0 +1,30 @@ +//// [unusedVariablesinNamespaces3.ts] + +namespace Validation { + const lettersRegexp = /^[A-Za-z]+$/; + const numberRegexp = /^[0-9]+$/; + export const anotherUnusedVariable = "Dummy value"; + + export class LettersOnlyValidator { + isAcceptable(s2: string) { + return lettersRegexp.test(s2); + } + } +} + +//// [unusedVariablesinNamespaces3.js] +var Validation; +(function (Validation) { + var lettersRegexp = /^[A-Za-z]+$/; + var numberRegexp = /^[0-9]+$/; + Validation.anotherUnusedVariable = "Dummy value"; + var LettersOnlyValidator = (function () { + function LettersOnlyValidator() { + } + LettersOnlyValidator.prototype.isAcceptable = function (s2) { + return lettersRegexp.test(s2); + }; + return LettersOnlyValidator; + }()); + Validation.LettersOnlyValidator = LettersOnlyValidator; +})(Validation || (Validation = {})); diff --git a/tests/baselines/reference/varArgConstructorMemberParameter.errors.txt b/tests/baselines/reference/varArgConstructorMemberParameter.errors.txt index e3257b870d6..9fb55a4d5fc 100644 --- a/tests/baselines/reference/varArgConstructorMemberParameter.errors.txt +++ b/tests/baselines/reference/varArgConstructorMemberParameter.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/varArgConstructorMemberParameter.ts(10,25): error TS1005: ',' expected. +tests/cases/compiler/varArgConstructorMemberParameter.ts(10,18): error TS1317: A parameter property cannot be declared using a rest parameter. ==== tests/cases/compiler/varArgConstructorMemberParameter.ts (1 errors) ==== @@ -12,7 +12,7 @@ tests/cases/compiler/varArgConstructorMemberParameter.ts(10,25): error TS1005: ' class Foo3 { constructor (public ...args: string[]) { } - ~~~ -!!! error TS1005: ',' expected. + ~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1317: A parameter property cannot be declared using a rest parameter. } \ No newline at end of file diff --git a/tests/baselines/reference/varArgConstructorMemberParameter.js b/tests/baselines/reference/varArgConstructorMemberParameter.js index 620642a7514..2715ed9e542 100644 --- a/tests/baselines/reference/varArgConstructorMemberParameter.js +++ b/tests/baselines/reference/varArgConstructorMemberParameter.js @@ -29,11 +29,12 @@ var Foo2 = (function () { return Foo2; }()); var Foo3 = (function () { - function Foo3(public) { + function Foo3() { var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i - 0] = arguments[_i]; } + this.args = args; } return Foo3; }()); diff --git a/tests/baselines/reference/verifyDefaultLib_dom.js b/tests/baselines/reference/verifyDefaultLib_dom.js new file mode 100644 index 00000000000..b65e133572a --- /dev/null +++ b/tests/baselines/reference/verifyDefaultLib_dom.js @@ -0,0 +1,6 @@ +//// [verifyDefaultLib_dom.ts] + +var x: HTMLElement; + +//// [verifyDefaultLib_dom.js] +var x; diff --git a/tests/baselines/reference/verifyDefaultLib_dom.symbols b/tests/baselines/reference/verifyDefaultLib_dom.symbols new file mode 100644 index 00000000000..53502b040c3 --- /dev/null +++ b/tests/baselines/reference/verifyDefaultLib_dom.symbols @@ -0,0 +1,6 @@ +=== tests/cases/compiler/verifyDefaultLib_dom.ts === + +var x: HTMLElement; +>x : Symbol(x, Decl(verifyDefaultLib_dom.ts, 1, 3)) +>HTMLElement : Symbol(HTMLElement, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --)) + diff --git a/tests/baselines/reference/verifyDefaultLib_dom.types b/tests/baselines/reference/verifyDefaultLib_dom.types new file mode 100644 index 00000000000..aafd063846d --- /dev/null +++ b/tests/baselines/reference/verifyDefaultLib_dom.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/verifyDefaultLib_dom.ts === + +var x: HTMLElement; +>x : HTMLElement +>HTMLElement : HTMLElement + diff --git a/tests/baselines/reference/verifyDefaultLib_webworker.js b/tests/baselines/reference/verifyDefaultLib_webworker.js new file mode 100644 index 00000000000..515b5d9632f --- /dev/null +++ b/tests/baselines/reference/verifyDefaultLib_webworker.js @@ -0,0 +1,6 @@ +//// [verifyDefaultLib_webworker.ts] + +var x: Worker; + +//// [verifyDefaultLib_webworker.js] +var x; diff --git a/tests/baselines/reference/verifyDefaultLib_webworker.symbols b/tests/baselines/reference/verifyDefaultLib_webworker.symbols new file mode 100644 index 00000000000..ac27e7c83dc --- /dev/null +++ b/tests/baselines/reference/verifyDefaultLib_webworker.symbols @@ -0,0 +1,6 @@ +=== tests/cases/compiler/verifyDefaultLib_webworker.ts === + +var x: Worker; +>x : Symbol(x, Decl(verifyDefaultLib_webworker.ts, 1, 3)) +>Worker : Symbol(Worker, Decl(lib.webworker.d.ts, --, --), Decl(lib.webworker.d.ts, --, --)) + diff --git a/tests/baselines/reference/verifyDefaultLib_webworker.types b/tests/baselines/reference/verifyDefaultLib_webworker.types new file mode 100644 index 00000000000..38accb39842 --- /dev/null +++ b/tests/baselines/reference/verifyDefaultLib_webworker.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/verifyDefaultLib_webworker.ts === + +var x: Worker; +>x : Worker +>Worker : Worker + diff --git a/tests/cases/compiler/asyncFunctionNoReturnType.ts b/tests/cases/compiler/asyncFunctionNoReturnType.ts new file mode 100644 index 00000000000..4a4b5316d72 --- /dev/null +++ b/tests/cases/compiler/asyncFunctionNoReturnType.ts @@ -0,0 +1,5 @@ +// @noImplicitReturns: true +async () => { + if (window) + return; +} diff --git a/tests/cases/compiler/classExpressionWithStaticPropertiesES61.ts b/tests/cases/compiler/classExpressionWithStaticPropertiesES61.ts index 8df07b9569a..3f9fc43835e 100644 --- a/tests/cases/compiler/classExpressionWithStaticPropertiesES61.ts +++ b/tests/cases/compiler/classExpressionWithStaticPropertiesES61.ts @@ -1,2 +1,6 @@ //@target: es6 -var v = class C { static a = 1; static b = 2 }; \ No newline at end of file +var v = class C { + static a = 1; + static b = 2; + static c = C.a + 3; +}; \ No newline at end of file diff --git a/tests/cases/compiler/classExpressionWithStaticPropertiesES62.ts b/tests/cases/compiler/classExpressionWithStaticPropertiesES62.ts index ee0430eb793..afb87b10de9 100644 --- a/tests/cases/compiler/classExpressionWithStaticPropertiesES62.ts +++ b/tests/cases/compiler/classExpressionWithStaticPropertiesES62.ts @@ -1,2 +1,9 @@ //@target: es6 -var v = class C { static a = 1; static b }; \ No newline at end of file +var v = class C { + static a = 1; + static b + static c = { + x: "hi" + } + static d = C.c.x + " world"; + }; \ No newline at end of file diff --git a/tests/cases/compiler/classExpressionWithStaticPropertiesES63.ts b/tests/cases/compiler/classExpressionWithStaticPropertiesES63.ts new file mode 100644 index 00000000000..939a344f9bb --- /dev/null +++ b/tests/cases/compiler/classExpressionWithStaticPropertiesES63.ts @@ -0,0 +1,11 @@ +//@target: es6 + +declare var console: any; +const arr: {y(): number}[] = []; +for (let i = 0; i < 3; i++) { + arr.push(class C { + static x = i; + static y = () => C.x * 2; + }); +} +arr.forEach(C => console.log(C.y())); \ No newline at end of file diff --git a/tests/cases/compiler/classExtendsInterface.ts b/tests/cases/compiler/classExtendsInterface.ts index 36f42167d1a..eaab1d60fc4 100644 --- a/tests/cases/compiler/classExtendsInterface.ts +++ b/tests/cases/compiler/classExtendsInterface.ts @@ -1,7 +1,7 @@ interface Comparable {} class A extends Comparable {} class B implements Comparable {} - + interface Comparable2 {} class A2 extends Comparable2 {} class B2 implements Comparable2 {} diff --git a/tests/cases/compiler/classExtendsInterfaceInExpression.ts b/tests/cases/compiler/classExtendsInterfaceInExpression.ts new file mode 100644 index 00000000000..002631afedf --- /dev/null +++ b/tests/cases/compiler/classExtendsInterfaceInExpression.ts @@ -0,0 +1,7 @@ +interface A {} + +function factory(a: any): {new(): Object} { + return null; +} + +class C extends factory(A) {} diff --git a/tests/cases/compiler/classExtendsInterfaceInModule.ts b/tests/cases/compiler/classExtendsInterfaceInModule.ts new file mode 100644 index 00000000000..4ea24e5dd7d --- /dev/null +++ b/tests/cases/compiler/classExtendsInterfaceInModule.ts @@ -0,0 +1,14 @@ +module M { + export interface I1 {} + export interface I2 {} +} +class C1 extends M.I1 {} +class C2 extends M.I2 {} + +module Mod { + export namespace Nested { + export interface I {} + } +} + +class D extends Mod.Nested.I {} diff --git a/tests/cases/compiler/destructuringAssignmentWithDefault.ts b/tests/cases/compiler/destructuringAssignmentWithDefault.ts new file mode 100644 index 00000000000..45ade402eb8 --- /dev/null +++ b/tests/cases/compiler/destructuringAssignmentWithDefault.ts @@ -0,0 +1,4 @@ +// @strictNullChecks: true +const a: { x?: number } = { }; +let x = 0; +({x = 1} = a); diff --git a/tests/cases/compiler/exportDefaultAsyncFunction.ts b/tests/cases/compiler/exportDefaultAsyncFunction.ts new file mode 100644 index 00000000000..c05296711ec --- /dev/null +++ b/tests/cases/compiler/exportDefaultAsyncFunction.ts @@ -0,0 +1,3 @@ +// @target: es6 +export default async function foo(): Promise {} +foo(); diff --git a/tests/cases/compiler/exportDefaultAsyncFunction2.ts b/tests/cases/compiler/exportDefaultAsyncFunction2.ts new file mode 100644 index 00000000000..2d2ee4ef345 --- /dev/null +++ b/tests/cases/compiler/exportDefaultAsyncFunction2.ts @@ -0,0 +1,28 @@ +// @target: es6 + +// @filename: asyncawait.ts +export function async(...args: any[]): any { } +export function await(...args: any[]): any { } + +// @filename: a.ts +import { async, await } from 'asyncawait'; +export default async(() => await(Promise.resolve(1))); + +// @filename: b.ts +export default async () => { return 0; }; + +// @filename: c.ts +import { async, await } from 'asyncawait'; +export default async(); + +// @filename: d.ts +import { async, await } from 'asyncawait'; + +export default async; + +// @filename: e.ts +import { async, await } from 'asyncawait'; + +export default async + +export function foo() { } \ No newline at end of file diff --git a/tests/cases/compiler/jsFileClassSelfReferencedProperty.ts b/tests/cases/compiler/jsFileClassSelfReferencedProperty.ts new file mode 100644 index 00000000000..8d6cecdb200 --- /dev/null +++ b/tests/cases/compiler/jsFileClassSelfReferencedProperty.ts @@ -0,0 +1,9 @@ +// @allowJs: true +// @noEmit: true + +// @filename: foo.js +export class StackOverflowTest { + constructor () { + this.testStackOverflow = this.testStackOverflow.bind(this) + } +} diff --git a/tests/cases/compiler/jsFileCompilationPropertySyntaxOfClass.ts b/tests/cases/compiler/jsFileCompilationPropertySyntaxOfClass.ts deleted file mode 100644 index 62a0058bcef..00000000000 --- a/tests/cases/compiler/jsFileCompilationPropertySyntaxOfClass.ts +++ /dev/null @@ -1,3 +0,0 @@ -// @allowJs: true -// @filename: a.js -class C { v } \ No newline at end of file diff --git a/tests/cases/compiler/missingFunctionImplementation.ts b/tests/cases/compiler/missingFunctionImplementation.ts new file mode 100644 index 00000000000..e261db3a667 --- /dev/null +++ b/tests/cases/compiler/missingFunctionImplementation.ts @@ -0,0 +1,79 @@ + +export class C1 { + m(): void; +} + +// merged with a namespace +export class C2 { + m(): void; +} +export namespace C2 { } + + +// merged with a namespace, multiple overloads +class C3 { + m(a, b); + m(a); +} +namespace C3 { } + +// static methods, multiple overloads +class C4 { + static m(a): void; +} + +// static methods, multiple overloads +class C5 { + static m(a): void; + static m(): void; +} + +// merged with namespace, static methods +class C6 { + static m(): void; +} +namespace C6 { +} + +// merged with namespace, static methods, multiple overloads +class C7 { + static m(a): void; + static m(): void; +} +namespace C7 { +} + +// merged with namespace, static methods, duplicate declarations +class C8 { + static m(a): void; + static m(a, b): void; +} +namespace C8 { + export function m(a?, b?): void { } +} + +// merged with namespace, static methods, duplicate declarations +class C9 { + static m(a): void { } +} +namespace C9 { + export function m(a): void; +} + +// merged namespaces +namespace N10 { + export function m(a): void; +} +namespace N10 { + export function m(a): void { } +} + +// merged namespaces, duplicate defintions +namespace N12 { + export function m(a): void; + export function m(): void; + export function m(a?): void { } +} +namespace N12 { + export function m(a): void { } +} diff --git a/tests/cases/compiler/missingFunctionImplementation2.ts b/tests/cases/compiler/missingFunctionImplementation2.ts new file mode 100644 index 00000000000..25909b6add4 --- /dev/null +++ b/tests/cases/compiler/missingFunctionImplementation2.ts @@ -0,0 +1,8 @@ +// @Filename: missingFunctionImplementation2_a.ts +export {}; +declare module "./missingFunctionImplementation2_b.ts" { + export function f(a, b): void; +} + +// @Filename: missingFunctionImplementation2_b.ts +export function f(a?, b?); \ No newline at end of file diff --git a/tests/cases/compiler/promiseType.ts b/tests/cases/compiler/promiseType.ts new file mode 100644 index 00000000000..c1b795b6cc7 --- /dev/null +++ b/tests/cases/compiler/promiseType.ts @@ -0,0 +1,94 @@ +// @target: es6 +declare var p: Promise; + +const a = p.then(); +const b = p.then(b => 1); +const c = p.then(b => 1, e => 'error'); +const d = p.then(b => 1, e => { }); +const e = p.then(b => 1, e => { throw Error(); }); +const f = p.then(b => 1, e => Promise.reject(Error())); +const g = p.catch(e => 'error'); +const h = p.catch(e => { }); +const i = p.catch(e => { throw Error(); }); +const j = p.catch(e => Promise.reject(Error())); + +async function A() { + const a = await p; + return a; +} + +async function B() { + const a = await p; + return 1; +} + +// NOTE: This reports a "No best comment type exists among return expressions." error, and is +// ignored to get the types result for the test. +// async function C() { +// try { +// const a = await p; +// return 1; +// } +// catch (e) { +// return 'error'; +// } +// } + +async function D() { + try { + const a = await p; + return 1; + } + catch (e) { + } +} + +async function E() { + try { + const a = await p; + return 1; + } + catch (e) { + throw Error(); + } +} + +async function F() { + try { + const a = await p; + return 1; + } + catch (e) { + return Promise.reject(Error()); + } +} + +async function G() { + try { + const a = await p; + return a; + } + catch (e) { + return; + } +} + +async function H() { + try { + const a = await p; + return a; + } + catch (e) { + throw Error(); + } +} + +async function I() { + try { + const a = await p; + return a; + } + catch (e) { + return Promise.reject(Error()); + } +} \ No newline at end of file diff --git a/tests/cases/compiler/signaturesUseJSDocForOptionalParameters.ts b/tests/cases/compiler/signaturesUseJSDocForOptionalParameters.ts new file mode 100644 index 00000000000..a6f9c9fb394 --- /dev/null +++ b/tests/cases/compiler/signaturesUseJSDocForOptionalParameters.ts @@ -0,0 +1,17 @@ +// @allowJs: true +// @out: out_1.js +// @filename: jsDocOptionality.js +function MyClass() { + this.prop = null; +} +/** + * @param {string} required + * @param {string} [notRequired] + * @returns {MyClass} + */ +MyClass.prototype.optionalParam = function(required, notRequired) { + return this; +}; +let pInst = new MyClass(); +let c1 = pInst.optionalParam('hello') +let c2 = pInst.optionalParam('hello', null) diff --git a/tests/cases/compiler/strictNullLogicalAndOr.ts b/tests/cases/compiler/strictNullLogicalAndOr.ts new file mode 100644 index 00000000000..68055f8b20b --- /dev/null +++ b/tests/cases/compiler/strictNullLogicalAndOr.ts @@ -0,0 +1,15 @@ +// @strictNullChecks: true + +// Repro from #9113 + +let sinOrCos = Math.random() < .5; +let choice = sinOrCos && Math.sin || Math.cos; + +choice(Math.PI); + +function sq(n?: number): number { + const r = n !== undefined && n*n || 0; + return r; +} + +sq(3); \ No newline at end of file diff --git a/tests/cases/compiler/switchCaseCircularRefeference.ts b/tests/cases/compiler/switchCaseCircularRefeference.ts new file mode 100644 index 00000000000..060b90fa8a1 --- /dev/null +++ b/tests/cases/compiler/switchCaseCircularRefeference.ts @@ -0,0 +1,8 @@ +// Repro from #9507 + +function f(x: {a: "A", b} | {a: "C", e}) { + switch (x.a) { + case x: + break; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedClassesinModule1.ts b/tests/cases/compiler/unusedClassesinModule1.ts new file mode 100644 index 00000000000..0efc4966388 --- /dev/null +++ b/tests/cases/compiler/unusedClassesinModule1.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +module A { + class Calculator { + public handelChar() { + } + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedClassesinNamespace1.ts b/tests/cases/compiler/unusedClassesinNamespace1.ts new file mode 100644 index 00000000000..da1feef9195 --- /dev/null +++ b/tests/cases/compiler/unusedClassesinNamespace1.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + class c1 { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedClassesinNamespace2.ts b/tests/cases/compiler/unusedClassesinNamespace2.ts new file mode 100644 index 00000000000..83d60ff1628 --- /dev/null +++ b/tests/cases/compiler/unusedClassesinNamespace2.ts @@ -0,0 +1,12 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + class c1 { + + } + + export class c2 { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedClassesinNamespace3.ts b/tests/cases/compiler/unusedClassesinNamespace3.ts new file mode 100644 index 00000000000..9d39af37ea2 --- /dev/null +++ b/tests/cases/compiler/unusedClassesinNamespace3.ts @@ -0,0 +1,14 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + class c1 { + + } + + export class c2 { + + } + + export let a = new c1(); +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedClassesinNamespace4.ts b/tests/cases/compiler/unusedClassesinNamespace4.ts new file mode 100644 index 00000000000..390df8f7229 --- /dev/null +++ b/tests/cases/compiler/unusedClassesinNamespace4.ts @@ -0,0 +1,16 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + class c1 { + + } + + export class c2 { + + } + + class c3 extends c1 { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedClassesinNamespace5.ts b/tests/cases/compiler/unusedClassesinNamespace5.ts new file mode 100644 index 00000000000..43265e8fc40 --- /dev/null +++ b/tests/cases/compiler/unusedClassesinNamespace5.ts @@ -0,0 +1,16 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + class c1 { + + } + + export class c2 { + + } + + class c3 { + public x: c1; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedFunctionsinNamespaces1.ts b/tests/cases/compiler/unusedFunctionsinNamespaces1.ts new file mode 100644 index 00000000000..3e4a1814ba8 --- /dev/null +++ b/tests/cases/compiler/unusedFunctionsinNamespaces1.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + function function1() { + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedFunctionsinNamespaces2.ts b/tests/cases/compiler/unusedFunctionsinNamespaces2.ts new file mode 100644 index 00000000000..5f38bbaaaac --- /dev/null +++ b/tests/cases/compiler/unusedFunctionsinNamespaces2.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + var function1 = function() { + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedFunctionsinNamespaces3.ts b/tests/cases/compiler/unusedFunctionsinNamespaces3.ts new file mode 100644 index 00000000000..c20759494f6 --- /dev/null +++ b/tests/cases/compiler/unusedFunctionsinNamespaces3.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + var function1 = function(param1:string) { + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedFunctionsinNamespaces4.ts b/tests/cases/compiler/unusedFunctionsinNamespaces4.ts new file mode 100644 index 00000000000..b8855ba2650 --- /dev/null +++ b/tests/cases/compiler/unusedFunctionsinNamespaces4.ts @@ -0,0 +1,11 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + var function1 = function() { + } + + export function function2() { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedFunctionsinNamespaces5.ts b/tests/cases/compiler/unusedFunctionsinNamespaces5.ts new file mode 100644 index 00000000000..f1d516fa66f --- /dev/null +++ b/tests/cases/compiler/unusedFunctionsinNamespaces5.ts @@ -0,0 +1,19 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + var function1 = function() { + } + + export function function2() { + + } + + function function3() { + function1(); + } + + function function4() { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedFunctionsinNamespaces6.ts b/tests/cases/compiler/unusedFunctionsinNamespaces6.ts new file mode 100644 index 00000000000..19f1591249c --- /dev/null +++ b/tests/cases/compiler/unusedFunctionsinNamespaces6.ts @@ -0,0 +1,21 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + var function1 = function() { + } + + export function function2() { + + } + + function function3() { + function1(); + } + + function function4() { + + } + + export let a = function3; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedGetterInClass.ts b/tests/cases/compiler/unusedGetterInClass.ts new file mode 100644 index 00000000000..e5259f91cdc --- /dev/null +++ b/tests/cases/compiler/unusedGetterInClass.ts @@ -0,0 +1,11 @@ +//@target: ES5 +//@noUnusedLocals:true +//@noUnusedParameters:true + +class Employee { + private _fullName: string; + + get fullName(): string { + return this._fullName; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedIdentifiersConsolidated1.ts b/tests/cases/compiler/unusedIdentifiersConsolidated1.ts new file mode 100644 index 00000000000..7c6e9b2e695 --- /dev/null +++ b/tests/cases/compiler/unusedIdentifiersConsolidated1.ts @@ -0,0 +1,104 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function greeter(person: string) { + var unused = 20; +} + +class Dummy { + private unusedprivatevariable: string; + private greeting: string; + public unusedpublicvariable: string; + public typedvariable: usedtypeparameter; + + constructor(message: string) { + var unused2 = 22; + this.greeting = "Dummy Message"; + } + + public greeter(person: string) { + var unused = 20; + this.usedPrivateFunction(); + } + + private usedPrivateFunction() { + } + + private unUsedPrivateFunction() { + } +} + +var user = "Jane User"; +var user2 = "Jane2 User2"; + +namespace Validation { + export interface StringValidator { + isAcceptable(s: string): boolean; + } + + const lettersRegexp = /^[A-Za-z]+$/; + const numberRegexp = /^[0-9]+$/; + + export class LettersOnlyValidator implements StringValidator { + isAcceptable(s2: string) { + return lettersRegexp.test(s2); + } + + private unUsedPrivateFunction() { + } + } + + export class ZipCodeValidator implements StringValidator { + isAcceptable(s3: string) { + return s3.length === 5; + } + } + + interface usedLocallyInterface { + } + + interface usedLocallyInterface2 { + someFunction(s1: string): void; + } + + export interface exportedInterface { + } + + class dummy implements usedLocallyInterface { + } + + interface unusedInterface { + } +} + + +namespace Greeter { + class class1 { + } + + export class class2 extends class1 { + } + + class class3 { + } + + export class class4 { + } + + interface interface1 { + } + + export interface interface2 extends interface1 { + } + + interface interface3 { + } + + export interface interface4 { + } + + export let a: interface3; + + interface interface5 { + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedImports1.ts b/tests/cases/compiler/unusedImports1.ts new file mode 100644 index 00000000000..30fff0c1ed1 --- /dev/null +++ b/tests/cases/compiler/unusedImports1.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @Filename: file1.ts +export class Calculator { + +} + +// @Filename: file2.ts +import {Calculator} from "./file1" \ No newline at end of file diff --git a/tests/cases/compiler/unusedImports10.ts b/tests/cases/compiler/unusedImports10.ts new file mode 100644 index 00000000000..1cccfbd38bb --- /dev/null +++ b/tests/cases/compiler/unusedImports10.ts @@ -0,0 +1,13 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +module A { + export class Calculator { + public handelChar() { + } + } +} + +module B { + import a = A; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedImports11.ts b/tests/cases/compiler/unusedImports11.ts new file mode 100644 index 00000000000..4f2fed649d1 --- /dev/null +++ b/tests/cases/compiler/unusedImports11.ts @@ -0,0 +1,19 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @filename: b.ts +export class Member {} +export default Member; + + +// @filename: a.ts +import { Member } from './b'; +import d, { Member as M } from './b'; +import * as ns from './b'; +import r = require("./b"); + +new Member(); +new d(); +new M(); +new ns.Member(); +new r.Member(); \ No newline at end of file diff --git a/tests/cases/compiler/unusedImports12.ts b/tests/cases/compiler/unusedImports12.ts new file mode 100644 index 00000000000..14206284b64 --- /dev/null +++ b/tests/cases/compiler/unusedImports12.ts @@ -0,0 +1,13 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @filename: b.ts +export class Member {} +export default Member; + + +// @filename: a.ts +import { Member } from './b'; +import d, { Member as M } from './b'; +import * as ns from './b'; +import r = require("./b"); diff --git a/tests/cases/compiler/unusedImports2.ts b/tests/cases/compiler/unusedImports2.ts new file mode 100644 index 00000000000..00e7fcff33b --- /dev/null +++ b/tests/cases/compiler/unusedImports2.ts @@ -0,0 +1,18 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @Filename: file1.ts +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +// @Filename: file2.ts +import {Calculator} from "./file1" +import {test} from "./file1" + +var x = new Calculator(); +x.handleChar(); \ No newline at end of file diff --git a/tests/cases/compiler/unusedImports3.ts b/tests/cases/compiler/unusedImports3.ts new file mode 100644 index 00000000000..349c2c9abe8 --- /dev/null +++ b/tests/cases/compiler/unusedImports3.ts @@ -0,0 +1,21 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @Filename: file1.ts +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +// @Filename: file2.ts +import {Calculator, test, test2} from "./file1" + +test(); +test2(); \ No newline at end of file diff --git a/tests/cases/compiler/unusedImports4.ts b/tests/cases/compiler/unusedImports4.ts new file mode 100644 index 00000000000..472c5965850 --- /dev/null +++ b/tests/cases/compiler/unusedImports4.ts @@ -0,0 +1,22 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @Filename: file1.ts +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +// @Filename: file2.ts +import {Calculator, test, test2} from "./file1" + +var x = new Calculator(); +x.handleChar(); +test2(); \ No newline at end of file diff --git a/tests/cases/compiler/unusedImports5.ts b/tests/cases/compiler/unusedImports5.ts new file mode 100644 index 00000000000..85943691ce2 --- /dev/null +++ b/tests/cases/compiler/unusedImports5.ts @@ -0,0 +1,22 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @Filename: file1.ts +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +// @Filename: file2.ts +import {Calculator, test, test2} from "./file1" + +var x = new Calculator(); +x.handleChar(); +test(); \ No newline at end of file diff --git a/tests/cases/compiler/unusedImports6.ts b/tests/cases/compiler/unusedImports6.ts new file mode 100644 index 00000000000..6ff45cc1b29 --- /dev/null +++ b/tests/cases/compiler/unusedImports6.ts @@ -0,0 +1,21 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @Filename: file1.ts +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export default function test2() { + +} + +// @Filename: file2.ts +import d from "./file1" + + + diff --git a/tests/cases/compiler/unusedImports7.ts b/tests/cases/compiler/unusedImports7.ts new file mode 100644 index 00000000000..94df3581745 --- /dev/null +++ b/tests/cases/compiler/unusedImports7.ts @@ -0,0 +1,19 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @Filename: file1.ts +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export default function test2() { + +} + +// @Filename: file2.ts +import * as n from "./file1" + diff --git a/tests/cases/compiler/unusedImports8.ts b/tests/cases/compiler/unusedImports8.ts new file mode 100644 index 00000000000..e8bd982d038 --- /dev/null +++ b/tests/cases/compiler/unusedImports8.ts @@ -0,0 +1,22 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @Filename: file1.ts +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +// @Filename: file2.ts +import {Calculator as calc, test as t1, test2 as t2} from "./file1" + +var x = new calc(); +x.handleChar(); +t1(); \ No newline at end of file diff --git a/tests/cases/compiler/unusedImports9.ts b/tests/cases/compiler/unusedImports9.ts new file mode 100644 index 00000000000..2e13e216c15 --- /dev/null +++ b/tests/cases/compiler/unusedImports9.ts @@ -0,0 +1,18 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// @Filename: file1.ts +export class Calculator { + handleChar() {} +} + +export function test() { + +} + +export function test2() { + +} + +// @Filename: file2.ts +import c = require('./file1') \ No newline at end of file diff --git a/tests/cases/compiler/unusedInterfaceinNamespace1.ts b/tests/cases/compiler/unusedInterfaceinNamespace1.ts new file mode 100644 index 00000000000..db50d0da2b6 --- /dev/null +++ b/tests/cases/compiler/unusedInterfaceinNamespace1.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + interface i1 { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedInterfaceinNamespace2.ts b/tests/cases/compiler/unusedInterfaceinNamespace2.ts new file mode 100644 index 00000000000..d0b6eb239ef --- /dev/null +++ b/tests/cases/compiler/unusedInterfaceinNamespace2.ts @@ -0,0 +1,12 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + interface i1 { + + } + + export interface i2 { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedInterfaceinNamespace3.ts b/tests/cases/compiler/unusedInterfaceinNamespace3.ts new file mode 100644 index 00000000000..48c615be903 --- /dev/null +++ b/tests/cases/compiler/unusedInterfaceinNamespace3.ts @@ -0,0 +1,16 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + interface i1 { + + } + + export interface i2 { + + } + + interface i3 extends i1 { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedInterfaceinNamespace4.ts b/tests/cases/compiler/unusedInterfaceinNamespace4.ts new file mode 100644 index 00000000000..e643f812227 --- /dev/null +++ b/tests/cases/compiler/unusedInterfaceinNamespace4.ts @@ -0,0 +1,20 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + interface i1 { + + } + + export interface i2 { + + } + + interface i3 extends i1 { + + } + + export class c1 implements i3 { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedInterfaceinNamespace5.ts b/tests/cases/compiler/unusedInterfaceinNamespace5.ts new file mode 100644 index 00000000000..901124e0f39 --- /dev/null +++ b/tests/cases/compiler/unusedInterfaceinNamespace5.ts @@ -0,0 +1,26 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + interface i1 { + + } + + export interface i2 { + + } + + interface i3 extends i1 { + + } + + export class c1 implements i3 { + + } + + interface i4 { + + } + + export let c2:i4; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsAndParameters.ts b/tests/cases/compiler/unusedLocalsAndParameters.ts new file mode 100644 index 00000000000..1f4fc944ff4 --- /dev/null +++ b/tests/cases/compiler/unusedLocalsAndParameters.ts @@ -0,0 +1,86 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +export { }; + +// function declaration paramter +function f(a) { +} +f(0); + +// function expression paramter +var fexp = function (a) { +}; + +fexp(0); + +// arrow function paramter +var farrow = (a) => { +}; + +class C { + // Method declaration paramter + method(a) { + } + // Accessor declaration paramter + set x(v: number) { + } +} + +var E = class { + // Method declaration paramter + method(a) { + } + // Accessor declaration paramter + set x(v: number) { + } +} + +var o = { + // Object literal method declaration paramter + method(a) { + }, + // Accessor declaration paramter + set x(v: number) { + } +}; + +o; + +// in a for..in statment +for (let i in o) { +} + +// in a for..of statment +for (let i of [1, 2, 3]) { +} + +// in a for. statment +for (let i = 0, n; i < 10; i++) { +} + +// in a block + +const condition = false; +if (condition) { + const c = 0; +} + +// in try/catch/finally +try { + const a = 0; +} +catch (e) { + const c = 1; +} +finally { + const c = 0; +} + + +// in a namespace +namespace N { + var x; +} + + \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsAndParametersDeferred.ts b/tests/cases/compiler/unusedLocalsAndParametersDeferred.ts new file mode 100644 index 00000000000..75b98308199 --- /dev/null +++ b/tests/cases/compiler/unusedLocalsAndParametersDeferred.ts @@ -0,0 +1,162 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +export { }; + +function defered(a: () => T): T { + return a(); +} + +// function declaration paramter +function f(a) { + defered(() => { + a; + }); +} +f(0); + +// function expression paramter +var fexp = function (a) { + defered(() => { + a; + }); +}; +fexp(1); + +// arrow function paramter +var farrow = (a) => { + defered(() => { + a; + }); +}; +farrow(2); + +let prop1; + +class C { + // Method declaration paramter + method(a) { + defered(() => { + a; + }); + } + // Accessor declaration paramter + set x(v: number) { + defered(() => { + v; + }); + } + // in a property initalizer + p = defered(() => { + prop1; + }); +} + +new C(); + +let prop2; + +var E = class { + // Method declaration paramter + method(a) { + defered(() => { + a; + }); + } + // Accessor declaration paramter + set x(v: number) { + defered(() => { + v; + }); + } + // in a property initalizer + p = defered(() => { + prop2; + }); +} + +new E(); + + +var o = { + // Object literal method declaration paramter + method(a) { + defered(() => { + a; + }); + }, + // Accessor declaration paramter + set x(v: number) { + defered(() => { + v; + }); + }, + // in a property initalizer + p: defered(() => { + prop1; + }) +}; + +o; + +// in a for..in statment +for (let i in o) { + defered(() => { + i; + }); +} + +// in a for..of statment +for (let i of [1,2,3]) { + defered(() => { + i; + }); +} + +// in a for. statment +for (let i = 0; i < 10; i++) { + defered(() => { + i; + }); +} + +// in a block + +const condition = false; +if (condition) { + const c = 0; + defered(() => { + c; + }); +} + +// in try/catch/finally +try { + const a = 0; + defered(() => { + a; + }); +} +catch (e) { + const c = 1; + defered(() => { + c; + }); +} +finally { + const c = 0; + defered(() => { + c; + }); +} + + +// in a namespace +namespace N { + var x; + defered(() => { + x; + }); +} +N; + \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsAndParametersOverloadSignatures.ts b/tests/cases/compiler/unusedLocalsAndParametersOverloadSignatures.ts new file mode 100644 index 00000000000..32affb28be3 --- /dev/null +++ b/tests/cases/compiler/unusedLocalsAndParametersOverloadSignatures.ts @@ -0,0 +1,25 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +export function func(details: number, message: string, ...args: any[]): void; +export function func(details: number, message: string): any { + return details + message; +} + +export class C { + constructor(details: number, message: string, ...args: any[]); + constructor(details: number, message: string) { + details + message; + } + + method(details: number, message: string, ...args: any[]): void; + method(details: number, message: string): any { + return details + message; + } +} + + +export function genericFunc(details: number, message: T, ...args: any[]): void; +export function genericFunc(details: number, message: any): any { + return details + message; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsAndParametersTypeAliases.ts b/tests/cases/compiler/unusedLocalsAndParametersTypeAliases.ts new file mode 100644 index 00000000000..b94f88845bc --- /dev/null +++ b/tests/cases/compiler/unusedLocalsAndParametersTypeAliases.ts @@ -0,0 +1,29 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// used in a declaration +type handler1 = () => void; +export interface I1 { + getHandler: handler1; +} + +// exported +export type handler2 = () => void; + +// used in extends clause +type handler3 = () => void; +export interface I3 { + getHandler: T; +} + +// used in another type alias declaration +type handler4 = () => void; +type handler5 = handler4 | (()=>number); +var x: handler5; +x(); + +// used as type argument +type handler6 = () => void; +var y: Array; +y[0](); + \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts b/tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts new file mode 100644 index 00000000000..23d23a5bc18 --- /dev/null +++ b/tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts @@ -0,0 +1,13 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +// unused +type handler1 = () => void; + + +function foo() { + type handler2 = () => void; + foo(); +} + +export {} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsInMethod1.ts b/tests/cases/compiler/unusedLocalsInMethod1.ts new file mode 100644 index 00000000000..7da21b2c1af --- /dev/null +++ b/tests/cases/compiler/unusedLocalsInMethod1.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + public function1() { + var x = 10; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsInMethod2.ts b/tests/cases/compiler/unusedLocalsInMethod2.ts new file mode 100644 index 00000000000..a376e6de0ac --- /dev/null +++ b/tests/cases/compiler/unusedLocalsInMethod2.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + public function1() { + var x, y = 10; + y++; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsInMethod3.ts b/tests/cases/compiler/unusedLocalsInMethod3.ts new file mode 100644 index 00000000000..5d949110573 --- /dev/null +++ b/tests/cases/compiler/unusedLocalsInMethod3.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + public function1() { + var x, y; + y = 1; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts b/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts new file mode 100644 index 00000000000..0c325f198fa --- /dev/null +++ b/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function greeter(person: string, person2: string) { + var unused = 20; + function maker(child: string): void { + var unused2 = 22; + } + person2 = "dummy value"; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts b/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts new file mode 100644 index 00000000000..00615f034b7 --- /dev/null +++ b/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts @@ -0,0 +1,13 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function greeter(person: string, person2: string) { + var unused = 20; + function maker(child: string): void { + var unused2 = 22; + } + function maker2(child2: string): void { + var unused3 = 23; + } + maker2(person2); +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts b/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts new file mode 100644 index 00000000000..fd0e0f190e9 --- /dev/null +++ b/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +var greeter = function (person: string, person2: string) { + var unused = 20; + function maker(child: string): void { + var unused2 = 22; + } + person2 = "dummy value"; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts b/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts new file mode 100644 index 00000000000..73adf038564 --- /dev/null +++ b/tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts @@ -0,0 +1,13 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +var greeter = function (person: string, person2: string) { + var unused = 20; + function maker(child: string): void { + var unused2 = 22; + } + function maker2(child2: string): void { + var unused3 = 23; + } + maker2(person2); +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts b/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts new file mode 100644 index 00000000000..9417b13b65a --- /dev/null +++ b/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function greeter(person: string, person2: string) { + var unused = 20; + var maker = function (child: string): void { + var unused2 = 22; + } + person2 = "dummy value"; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts b/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts new file mode 100644 index 00000000000..7971ce5a30a --- /dev/null +++ b/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts @@ -0,0 +1,13 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function greeter(person: string, person2: string) { + var unused = 20; + var maker = function(child: string): void { + var unused2 = 22; + } + var maker2 = function(child2: string): void { + var unused3 = 23; + } + maker2(person2); +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts b/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts new file mode 100644 index 00000000000..edeb341ee7d --- /dev/null +++ b/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +var greeter = function (person: string, person2: string) { + var unused = 20; + var maker = function (child: string): void { + var unused2 = 22; + } + person2 = "dummy value"; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts b/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts new file mode 100644 index 00000000000..b407755c259 --- /dev/null +++ b/tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts @@ -0,0 +1,13 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +var greeter = function (person: string, person2: string) { + var unused = 20; + var maker = function (child: string): void { + var unused2 = 22; + } + var maker2 = function (child2: string): void { + var unused3 = 23; + } + maker2(person2); +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsinConstructor1.ts b/tests/cases/compiler/unusedLocalsinConstructor1.ts new file mode 100644 index 00000000000..fca303d2b9f --- /dev/null +++ b/tests/cases/compiler/unusedLocalsinConstructor1.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + constructor() { + var unused = 20; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedLocalsinConstructor2.ts b/tests/cases/compiler/unusedLocalsinConstructor2.ts new file mode 100644 index 00000000000..2e67d98d56e --- /dev/null +++ b/tests/cases/compiler/unusedLocalsinConstructor2.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + constructor() { + var unused = 20; + var used = "dummy"; + used = used + "second part"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedMethodsInInterface.ts b/tests/cases/compiler/unusedMethodsInInterface.ts new file mode 100644 index 00000000000..29769bc5b11 --- /dev/null +++ b/tests/cases/compiler/unusedMethodsInInterface.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +interface I1 { + f1(); + f2(x: number, y: string); +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedModuleInModule.ts b/tests/cases/compiler/unusedModuleInModule.ts new file mode 100644 index 00000000000..dc5f55398a7 --- /dev/null +++ b/tests/cases/compiler/unusedModuleInModule.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +module A { + module B {} +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedMultipleParameter1InContructor.ts b/tests/cases/compiler/unusedMultipleParameter1InContructor.ts new file mode 100644 index 00000000000..b9565cafca6 --- /dev/null +++ b/tests/cases/compiler/unusedMultipleParameter1InContructor.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class Dummy { + constructor(person: string, person2: string) { + var unused = 20; + person2 = "Dummy value"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedMultipleParameter1InFunctionExpression.ts b/tests/cases/compiler/unusedMultipleParameter1InFunctionExpression.ts new file mode 100644 index 00000000000..3892db7e39d --- /dev/null +++ b/tests/cases/compiler/unusedMultipleParameter1InFunctionExpression.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +var func = function(person: string, person2: string) { + var unused = 20; + person2 = "Dummy value"; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedMultipleParameter2InContructor.ts b/tests/cases/compiler/unusedMultipleParameter2InContructor.ts new file mode 100644 index 00000000000..34d54c714af --- /dev/null +++ b/tests/cases/compiler/unusedMultipleParameter2InContructor.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class Dummy { + constructor(person: string, person2: string, person3: string) { + var unused = 20; + person2 = "Dummy value"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedMultipleParameter2InFunctionExpression.ts b/tests/cases/compiler/unusedMultipleParameter2InFunctionExpression.ts new file mode 100644 index 00000000000..4d5bb2a103b --- /dev/null +++ b/tests/cases/compiler/unusedMultipleParameter2InFunctionExpression.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +var func = function(person: string, person2: string, person3: string) { + var unused = 20; + person2 = "Dummy value"; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedMultipleParameters1InFunctionDeclaration.ts b/tests/cases/compiler/unusedMultipleParameters1InFunctionDeclaration.ts new file mode 100644 index 00000000000..bc63d72f015 --- /dev/null +++ b/tests/cases/compiler/unusedMultipleParameters1InFunctionDeclaration.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function greeter(person: string, person2: string) { + var unused = 20; + person2 = "dummy value"; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedMultipleParameters1InMethodDeclaration.ts b/tests/cases/compiler/unusedMultipleParameters1InMethodDeclaration.ts new file mode 100644 index 00000000000..c74e702bbae --- /dev/null +++ b/tests/cases/compiler/unusedMultipleParameters1InMethodDeclaration.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class Dummy { + public greeter(person: string, person2: string) { + var unused = 20; + person2 = "dummy value"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedMultipleParameters2InFunctionDeclaration.ts b/tests/cases/compiler/unusedMultipleParameters2InFunctionDeclaration.ts new file mode 100644 index 00000000000..ad20d044ecc --- /dev/null +++ b/tests/cases/compiler/unusedMultipleParameters2InFunctionDeclaration.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function greeter(person: string, person2: string, person3: string) { + var unused = 20; + person2 = "dummy value"; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedMultipleParameters2InMethodDeclaration.ts b/tests/cases/compiler/unusedMultipleParameters2InMethodDeclaration.ts new file mode 100644 index 00000000000..4ede3cd47a4 --- /dev/null +++ b/tests/cases/compiler/unusedMultipleParameters2InMethodDeclaration.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class Dummy { + public greeter(person: string, person2: string, person3: string) { + var unused = 20; + person2 = "dummy value"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedNamespaceInModule.ts b/tests/cases/compiler/unusedNamespaceInModule.ts new file mode 100644 index 00000000000..adca8a84187 --- /dev/null +++ b/tests/cases/compiler/unusedNamespaceInModule.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +module A { + namespace B { } + export namespace C {} +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedNamespaceInNamespace.ts b/tests/cases/compiler/unusedNamespaceInNamespace.ts new file mode 100644 index 00000000000..8de3768a201 --- /dev/null +++ b/tests/cases/compiler/unusedNamespaceInNamespace.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace A { + namespace B { } + export namespace C {} +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedParameterInCatchClause.ts b/tests/cases/compiler/unusedParameterInCatchClause.ts new file mode 100644 index 00000000000..3034ab0aef8 --- /dev/null +++ b/tests/cases/compiler/unusedParameterInCatchClause.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1() { + try {} catch(ex){} +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedParameterUsedInTypeOf.ts b/tests/cases/compiler/unusedParameterUsedInTypeOf.ts new file mode 100644 index 00000000000..b69b2412314 --- /dev/null +++ b/tests/cases/compiler/unusedParameterUsedInTypeOf.ts @@ -0,0 +1,7 @@ +//@target: ES5 +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1 (a: number, b: typeof a) { + b++; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedParametersInLambda1.ts b/tests/cases/compiler/unusedParametersInLambda1.ts new file mode 100644 index 00000000000..431ac1eb1dc --- /dev/null +++ b/tests/cases/compiler/unusedParametersInLambda1.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public f1() { + return (X) => { + } + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedParametersInLambda2.ts b/tests/cases/compiler/unusedParametersInLambda2.ts new file mode 100644 index 00000000000..ed4dfb3404b --- /dev/null +++ b/tests/cases/compiler/unusedParametersInLambda2.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public f1() { + return (X, Y) => { + Y; + } + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedParametersThis.ts b/tests/cases/compiler/unusedParametersThis.ts new file mode 100644 index 00000000000..800229fcdbc --- /dev/null +++ b/tests/cases/compiler/unusedParametersThis.ts @@ -0,0 +1,37 @@ +//@noImplicitThis:true +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public a: number; + + public method(this: this): number { + return this.a; + } + + public method2(this: A): number { + return this.a; + } + + public method3(this: this): number { + var fn = () => this.a; + return fn(); + } + + public method4(this: A): number { + var fn = () => this.a; + return fn(); + } + + static staticMethod(this: A): number { + return this.a; + } +} + +function f(this: A): number { + return this.a +} + +var f2 = function f2(this: A): number { + return this.a; +}; \ No newline at end of file diff --git a/tests/cases/compiler/unusedParametersWithUnderscore.ts b/tests/cases/compiler/unusedParametersWithUnderscore.ts new file mode 100644 index 00000000000..e7382e5c2af --- /dev/null +++ b/tests/cases/compiler/unusedParametersWithUnderscore.ts @@ -0,0 +1,25 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f(a, _b, c, ___, d,e___, _f) { +} + + +function f2({_a, __b}) { +} + +function f3([_a, ,__b]) { +} + +function f4(...arg) { +} + +function f5(..._arg) { +} + +function f6(arg?, _arg?) { +} + +var f7 = _ => undefined; + +var f8 = function (_) { }; \ No newline at end of file diff --git a/tests/cases/compiler/unusedParametersinConstructor1.ts b/tests/cases/compiler/unusedParametersinConstructor1.ts new file mode 100644 index 00000000000..421636d661b --- /dev/null +++ b/tests/cases/compiler/unusedParametersinConstructor1.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + constructor(param1: string) { + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedParametersinConstructor2.ts b/tests/cases/compiler/unusedParametersinConstructor2.ts new file mode 100644 index 00000000000..d6812f438c5 --- /dev/null +++ b/tests/cases/compiler/unusedParametersinConstructor2.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + constructor(param1: string, param2: string) { + param2 = param2 + "dummy value"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedParametersinConstructor3.ts b/tests/cases/compiler/unusedParametersinConstructor3.ts new file mode 100644 index 00000000000..e6295cd49fa --- /dev/null +++ b/tests/cases/compiler/unusedParametersinConstructor3.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + constructor(param1: string, param2: string, param3: string) { + param2 = param2 + "dummy value"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateMembers.ts b/tests/cases/compiler/unusedPrivateMembers.ts new file mode 100644 index 00000000000..ab4e5ba9bca --- /dev/null +++ b/tests/cases/compiler/unusedPrivateMembers.ts @@ -0,0 +1,51 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true +//@target:ES5 + +class Test1 { + private initializeInternal() { + } + + public test() { + var x = new Test1(); + x.initializeInternal(); + } +} + +class Test2 { + private p = 0; + public test() { + var x = new Test2(); + x.p; + } +} + +class Test3 { + private get x () { + return 0; + } + + public test() { + var x = new Test3(); + x.x; + } +} + +class Test4 { + private set x(v) { + v; + } + + public test() { + var x = new Test4(); + x.x; + } +} + +class Test5 { + private p: T; + public test() { + var x = new Test5(); + x.p; + } +} diff --git a/tests/cases/compiler/unusedPrivateMethodInClass1.ts b/tests/cases/compiler/unusedPrivateMethodInClass1.ts new file mode 100644 index 00000000000..e31dec6033b --- /dev/null +++ b/tests/cases/compiler/unusedPrivateMethodInClass1.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private function1() { + var y = 10; + y++; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateMethodInClass2.ts b/tests/cases/compiler/unusedPrivateMethodInClass2.ts new file mode 100644 index 00000000000..5039c265890 --- /dev/null +++ b/tests/cases/compiler/unusedPrivateMethodInClass2.ts @@ -0,0 +1,14 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private function1() { + var y = 10; + y++; + } + + private function2() { + var y = 10; + y++; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateMethodInClass3.ts b/tests/cases/compiler/unusedPrivateMethodInClass3.ts new file mode 100644 index 00000000000..a35cd4512ec --- /dev/null +++ b/tests/cases/compiler/unusedPrivateMethodInClass3.ts @@ -0,0 +1,19 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private function1() { + var y = 10; + y++; + } + + private function2() { + var y = 10; + y++; + } + + public function3() { + var y = 10; + y++; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateMethodInClass4.ts b/tests/cases/compiler/unusedPrivateMethodInClass4.ts new file mode 100644 index 00000000000..5e2741a12bc --- /dev/null +++ b/tests/cases/compiler/unusedPrivateMethodInClass4.ts @@ -0,0 +1,20 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private function1() { + var y = 10; + y++; + } + + private function2() { + var y = 10; + y++; + } + + public function3() { + var y = 10; + y++; + this.function2(); + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateVariableInClass1.ts b/tests/cases/compiler/unusedPrivateVariableInClass1.ts new file mode 100644 index 00000000000..0877b7cd868 --- /dev/null +++ b/tests/cases/compiler/unusedPrivateVariableInClass1.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private x: string; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateVariableInClass2.ts b/tests/cases/compiler/unusedPrivateVariableInClass2.ts new file mode 100644 index 00000000000..acaf1e80412 --- /dev/null +++ b/tests/cases/compiler/unusedPrivateVariableInClass2.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private x: string; + private y: string; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateVariableInClass3.ts b/tests/cases/compiler/unusedPrivateVariableInClass3.ts new file mode 100644 index 00000000000..6cfa3184f44 --- /dev/null +++ b/tests/cases/compiler/unusedPrivateVariableInClass3.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private x: string; + private y: string; + public z: string; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateVariableInClass4.ts b/tests/cases/compiler/unusedPrivateVariableInClass4.ts new file mode 100644 index 00000000000..23598d5a491 --- /dev/null +++ b/tests/cases/compiler/unusedPrivateVariableInClass4.ts @@ -0,0 +1,12 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private x: string; + private y: string; + public z: string; + + public method1() { + this.x = "dummy value"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateVariableInClass5.ts b/tests/cases/compiler/unusedPrivateVariableInClass5.ts new file mode 100644 index 00000000000..51e64afca1d --- /dev/null +++ b/tests/cases/compiler/unusedPrivateVariableInClass5.ts @@ -0,0 +1,12 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private x: string; + private y: string; + public z: string; + + constructor() { + this.x = "dummy value"; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedSetterInClass.ts b/tests/cases/compiler/unusedSetterInClass.ts new file mode 100644 index 00000000000..a8e45bab434 --- /dev/null +++ b/tests/cases/compiler/unusedSetterInClass.ts @@ -0,0 +1,11 @@ +//@target: ES5 +//@noUnusedLocals:true +//@noUnusedParameters:true + +class Employee { + private _fullName: string; + + set fullName(newName: string) { + this._fullName = newName; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedSingleParameterInContructor.ts b/tests/cases/compiler/unusedSingleParameterInContructor.ts new file mode 100644 index 00000000000..0f8f756fb48 --- /dev/null +++ b/tests/cases/compiler/unusedSingleParameterInContructor.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class Dummy { + constructor(person: string) { + var unused = 20; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedSingleParameterInFunctionDeclaration.ts b/tests/cases/compiler/unusedSingleParameterInFunctionDeclaration.ts new file mode 100644 index 00000000000..8122065d7ca --- /dev/null +++ b/tests/cases/compiler/unusedSingleParameterInFunctionDeclaration.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function greeter(person: string) { + var unused = 20; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedSingleParameterInFunctionExpression.ts b/tests/cases/compiler/unusedSingleParameterInFunctionExpression.ts new file mode 100644 index 00000000000..f4a749c33af --- /dev/null +++ b/tests/cases/compiler/unusedSingleParameterInFunctionExpression.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +var func = function(person: string) { + var unused = 20; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedSingleParameterInMethodDeclaration.ts b/tests/cases/compiler/unusedSingleParameterInMethodDeclaration.ts new file mode 100644 index 00000000000..2dee007f210 --- /dev/null +++ b/tests/cases/compiler/unusedSingleParameterInMethodDeclaration.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class Dummy { + public greeter(person: string) { + var unused = 20; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedSwitchStatment.ts b/tests/cases/compiler/unusedSwitchStatment.ts new file mode 100644 index 00000000000..53f93b913aa --- /dev/null +++ b/tests/cases/compiler/unusedSwitchStatment.ts @@ -0,0 +1,21 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +switch (1) { + case 0: + let x; + break; + case 1: + const c = 1; + break; + default: + let z = 2; +} + + +switch (2) { + case 0: + let x; + case 1: + x++; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInFunction1.ts b/tests/cases/compiler/unusedTypeParameterInFunction1.ts new file mode 100644 index 00000000000..421d2aa7b37 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInFunction1.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1() { + +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInFunction2.ts b/tests/cases/compiler/unusedTypeParameterInFunction2.ts new file mode 100644 index 00000000000..76eeb11bb34 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInFunction2.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1() { + var a: X; + a; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInFunction3.ts b/tests/cases/compiler/unusedTypeParameterInFunction3.ts new file mode 100644 index 00000000000..37f01468156 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInFunction3.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1() { + var a: X; + var b: Z; + a; + b; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInFunction4.ts b/tests/cases/compiler/unusedTypeParameterInFunction4.ts new file mode 100644 index 00000000000..56549d93976 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInFunction4.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1() { + var a: Y; + var b: Z; + a; + b; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInInterface1.ts b/tests/cases/compiler/unusedTypeParameterInInterface1.ts new file mode 100644 index 00000000000..2098e5d4bc5 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInInterface1.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +interface int { + +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInInterface2.ts b/tests/cases/compiler/unusedTypeParameterInInterface2.ts new file mode 100644 index 00000000000..cdcd45a7f30 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInInterface2.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +interface int { + f1(a: T): string; + c: V; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInLambda1.ts b/tests/cases/compiler/unusedTypeParameterInLambda1.ts new file mode 100644 index 00000000000..dd4dbe7824a --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInLambda1.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public f1() { + return () => { + + } + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInLambda2.ts b/tests/cases/compiler/unusedTypeParameterInLambda2.ts new file mode 100644 index 00000000000..73177a8b09d --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInLambda2.ts @@ -0,0 +1,11 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public f1() { + return () => { + var a: X; + a; + } + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInLambda3.ts b/tests/cases/compiler/unusedTypeParameterInLambda3.ts new file mode 100644 index 00000000000..eb6582caf4e --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInLambda3.ts @@ -0,0 +1,7 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true +class A { + public x: T; +} + +var y: new (a:T)=>void; diff --git a/tests/cases/compiler/unusedTypeParameterInMethod1.ts b/tests/cases/compiler/unusedTypeParameterInMethod1.ts new file mode 100644 index 00000000000..f58bde3d2a1 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInMethod1.ts @@ -0,0 +1,11 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public f1() { + var a: Y; + var b: Z; + a; + b; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInMethod2.ts b/tests/cases/compiler/unusedTypeParameterInMethod2.ts new file mode 100644 index 00000000000..f344d188b0a --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInMethod2.ts @@ -0,0 +1,11 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public f1() { + var a: X; + var b: Z; + a; + b; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInMethod3.ts b/tests/cases/compiler/unusedTypeParameterInMethod3.ts new file mode 100644 index 00000000000..9734136bd03 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInMethod3.ts @@ -0,0 +1,11 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public f1() { + var a: X; + var b: Y; + a; + b; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInMethod4.ts b/tests/cases/compiler/unusedTypeParameterInMethod4.ts new file mode 100644 index 00000000000..ef487d11118 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInMethod4.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public f1() { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameterInMethod5.ts b/tests/cases/compiler/unusedTypeParameterInMethod5.ts new file mode 100644 index 00000000000..73cedcf402e --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameterInMethod5.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public f1 = function() { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameters1.ts b/tests/cases/compiler/unusedTypeParameters1.ts new file mode 100644 index 00000000000..cec2be7efda --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameters1.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameters2.ts b/tests/cases/compiler/unusedTypeParameters2.ts new file mode 100644 index 00000000000..c1018578147 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameters2.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private x: typeparameter2; + + public function1() { + this.x; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameters3.ts b/tests/cases/compiler/unusedTypeParameters3.ts new file mode 100644 index 00000000000..ea67756d5ad --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameters3.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class greeter { + private x: typeparameter2; + + public function1() { + this.x; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameters4.ts b/tests/cases/compiler/unusedTypeParameters4.ts new file mode 100644 index 00000000000..1b470c4ae28 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameters4.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +var x: { + new (a: T): void; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedTypeParameters5.ts b/tests/cases/compiler/unusedTypeParameters5.ts new file mode 100644 index 00000000000..7a5025a7907 --- /dev/null +++ b/tests/cases/compiler/unusedTypeParameters5.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +class A { + public x: Dummy; +} + +var x: { + new (a: T): A; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinBlocks1.ts b/tests/cases/compiler/unusedVariablesinBlocks1.ts new file mode 100644 index 00000000000..b937fbd8ac1 --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinBlocks1.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1 () { + let x = 10; + { + let x = 11; + x++; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinBlocks2.ts b/tests/cases/compiler/unusedVariablesinBlocks2.ts new file mode 100644 index 00000000000..248e6302cd0 --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinBlocks2.ts @@ -0,0 +1,10 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1 () { + let x = 10; + { + let x = 11; + } + x++; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinForLoop.ts b/tests/cases/compiler/unusedVariablesinForLoop.ts new file mode 100644 index 00000000000..01f8a4bdfc5 --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinForLoop.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1 () { + for(var i = 0; ;) { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinForLoop2.ts b/tests/cases/compiler/unusedVariablesinForLoop2.ts new file mode 100644 index 00000000000..b5d3496608d --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinForLoop2.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1 () { + for (const elem in ["a", "b", "c"]) { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinForLoop3.ts b/tests/cases/compiler/unusedVariablesinForLoop3.ts new file mode 100644 index 00000000000..c08f225e7be --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinForLoop3.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1 () { + for (const elem of ["a", "b", "c"]) { + + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinForLoop4.ts b/tests/cases/compiler/unusedVariablesinForLoop4.ts new file mode 100644 index 00000000000..ac75e065b9e --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinForLoop4.ts @@ -0,0 +1,9 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +function f1 () { + for (const elem of ["a", "b", "c"]) { + elem; + var x = 20; + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinModules1.ts b/tests/cases/compiler/unusedVariablesinModules1.ts new file mode 100644 index 00000000000..92a5a14590d --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinModules1.ts @@ -0,0 +1,8 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +export {}; + +var x: string; + +export var y: string; \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinNamespaces1.ts b/tests/cases/compiler/unusedVariablesinNamespaces1.ts new file mode 100644 index 00000000000..04febf70260 --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinNamespaces1.ts @@ -0,0 +1,6 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + const lettersRegexp = /^[A-Za-z]+$/; +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinNamespaces2.ts b/tests/cases/compiler/unusedVariablesinNamespaces2.ts new file mode 100644 index 00000000000..2178da8fbda --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinNamespaces2.ts @@ -0,0 +1,13 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + const lettersRegexp = /^[A-Za-z]+$/; + const numberRegexp = /^[0-9]+$/; + + export class LettersOnlyValidator { + isAcceptable(s2: string) { + return lettersRegexp.test(s2); + } + } +} \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinNamespaces3.ts b/tests/cases/compiler/unusedVariablesinNamespaces3.ts new file mode 100644 index 00000000000..9952da92a7f --- /dev/null +++ b/tests/cases/compiler/unusedVariablesinNamespaces3.ts @@ -0,0 +1,14 @@ +//@noUnusedLocals:true +//@noUnusedParameters:true + +namespace Validation { + const lettersRegexp = /^[A-Za-z]+$/; + const numberRegexp = /^[0-9]+$/; + export const anotherUnusedVariable = "Dummy value"; + + export class LettersOnlyValidator { + isAcceptable(s2: string) { + return lettersRegexp.test(s2); + } + } +} \ No newline at end of file diff --git a/tests/cases/compiler/verifyDefaultLib_dom.ts b/tests/cases/compiler/verifyDefaultLib_dom.ts new file mode 100644 index 00000000000..519485320ae --- /dev/null +++ b/tests/cases/compiler/verifyDefaultLib_dom.ts @@ -0,0 +1,7 @@ +// @strictNullChecks: true +// @noImplicitAny: true +// @noImplicitThis: true +// @skipDefaultLibCheck: false +// @lib: es2015,es2016,es2017,dom,scripthost + +var x: HTMLElement; \ No newline at end of file diff --git a/tests/cases/compiler/verifyDefaultLib_webworker.ts b/tests/cases/compiler/verifyDefaultLib_webworker.ts new file mode 100644 index 00000000000..7da62387d2f --- /dev/null +++ b/tests/cases/compiler/verifyDefaultLib_webworker.ts @@ -0,0 +1,7 @@ +// @strictNullChecks: true +// @noImplicitAny: true +// @noImplicitThis: true +// @skipDefaultLibCheck: false +// @lib: es2015,es2016,es2017,webworker + +var x: Worker; \ No newline at end of file diff --git a/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts index 02fc84b380a..6a153034b32 100644 --- a/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts +++ b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts @@ -26,7 +26,7 @@ a6([1, 2, "string"]); // Error, parameter type is number[] var temp = [1, 2, 3]; class C { - constructor(public ...temp) { } // Error, rest parameter can't have accessibilityModifier + constructor(public ...temp) { } // Error, rest parameter can't have properties } // Rest parameter with generic diff --git a/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration7ES5.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration7ES5.ts new file mode 100644 index 00000000000..97822e92e2d --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration7ES5.ts @@ -0,0 +1,14 @@ +// @target: es5 + +interface ISomething { + foo: string, + bar: string +} + +function foo({}, {foo, bar}: ISomething) {} + +function baz([], {foo, bar}: ISomething) {} + +function one([], {}) {} + +function two([], [a, b, c]: number[]) {} diff --git a/tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions01.ts b/tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions01.ts new file mode 100644 index 00000000000..2f3da304c99 --- /dev/null +++ b/tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions01.ts @@ -0,0 +1,3 @@ +// @declaration: true + +let x = <{a: number; a: number}>{}; \ No newline at end of file diff --git a/tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions02.ts b/tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions02.ts new file mode 100644 index 00000000000..265fdbe5321 --- /dev/null +++ b/tests/cases/conformance/expressions/typeAssertions/duplicatePropertiesInTypeAssertions02.ts @@ -0,0 +1,3 @@ +// @declaration: true + +let x = {} as {a: number; a: number}; \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxDynamicTagName1.tsx b/tests/cases/conformance/jsx/tsxDynamicTagName1.tsx new file mode 100644 index 00000000000..1a54b55f94e --- /dev/null +++ b/tests/cases/conformance/jsx/tsxDynamicTagName1.tsx @@ -0,0 +1,4 @@ +// @jsx: preserve + +var CustomTag = "h1"; + Hello World // No error \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxDynamicTagName2.tsx b/tests/cases/conformance/jsx/tsxDynamicTagName2.tsx new file mode 100644 index 00000000000..0d5810bbd9a --- /dev/null +++ b/tests/cases/conformance/jsx/tsxDynamicTagName2.tsx @@ -0,0 +1,11 @@ +// @jsx: preserve + +declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + } +} + +var customTag = "h1"; + Hello World // This should be an error. The lower-case is look up as an intrinsic element name \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxDynamicTagName3.tsx b/tests/cases/conformance/jsx/tsxDynamicTagName3.tsx new file mode 100644 index 00000000000..09e05800ca5 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxDynamicTagName3.tsx @@ -0,0 +1,11 @@ +// @jsx: preserve + +declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + } +} + +var CustomTag: "h1" = "h1"; + Hello World // This should be an error. we will try look up string literal type in JSX.IntrinsicElements \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxDynamicTagName4.tsx b/tests/cases/conformance/jsx/tsxDynamicTagName4.tsx new file mode 100644 index 00000000000..18ea11a6647 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxDynamicTagName4.tsx @@ -0,0 +1,12 @@ +// @jsx: preserve + +declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + h1: any + } +} + +var CustomTag: "h1" = "h1"; + Hello World \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxDynamicTagName5.tsx b/tests/cases/conformance/jsx/tsxDynamicTagName5.tsx new file mode 100644 index 00000000000..b8e98cc1103 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxDynamicTagName5.tsx @@ -0,0 +1,19 @@ +// @jsx: preserve + +//@filename: react.d.ts +declare module 'react' { + class Component { } +} + +//@filename: app.tsx +import * as React from 'react'; + +export class Text extends React.Component<{}, {}> { + _tagName: string = 'div'; + + render() { + return ( + + ); + } +} \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxDynamicTagName6.tsx b/tests/cases/conformance/jsx/tsxDynamicTagName6.tsx new file mode 100644 index 00000000000..7657f7a82b3 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxDynamicTagName6.tsx @@ -0,0 +1,11 @@ +// @jsx: preserve + +declare module JSX { + interface Element { } + interface IntrinsicElements { + div: any + } +} + +const t = {tag:'h1'} +const foo = // No error \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxDynamicTagName7.tsx b/tests/cases/conformance/jsx/tsxDynamicTagName7.tsx new file mode 100644 index 00000000000..52ff5f4ec24 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxDynamicTagName7.tsx @@ -0,0 +1,19 @@ +// @jsx: preserve + +//@filename: react.d.ts +declare module 'react' { + class Component { } +} + +//@filename: app.tsx +import * as React from 'react'; + +export class Text extends React.Component<{}, {}> { + _tagName: string = 'div'; + + render() { + return ( + // this should be an error + ); + } +} \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxDynamicTagName8.tsx b/tests/cases/conformance/jsx/tsxDynamicTagName8.tsx new file mode 100644 index 00000000000..ee3bfaa0dfa --- /dev/null +++ b/tests/cases/conformance/jsx/tsxDynamicTagName8.tsx @@ -0,0 +1,19 @@ +// @jsx: preserve + +//@filename: react.d.ts +declare module 'react' { + class Component { } +} + +//@filename: app.tsx +import * as React from 'react'; + +export class Text extends React.Component<{}, {}> { + _tagName: string = 'div'; + + render() { + return ( + Hello world + ); + } +} \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxDynamicTagName9.tsx b/tests/cases/conformance/jsx/tsxDynamicTagName9.tsx new file mode 100644 index 00000000000..397fbdcd837 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxDynamicTagName9.tsx @@ -0,0 +1,19 @@ +// @jsx: preserve + +//@filename: react.d.ts +declare module 'react' { + class Component { } +} + +//@filename: app.tsx +import * as React from 'react'; + +export class Text extends React.Component<{}, {}> { + _tagName: "div" = 'div'; + + render() { + return ( + Hello world + ); + } +} \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxUnionTypeComponent2.tsx b/tests/cases/conformance/jsx/tsxUnionTypeComponent2.tsx index 39807219661..dbd14f6c27f 100644 --- a/tests/cases/conformance/jsx/tsxUnionTypeComponent2.tsx +++ b/tests/cases/conformance/jsx/tsxUnionTypeComponent2.tsx @@ -5,9 +5,9 @@ import React = require('react'); -type Invalid1 = React.ComponentClass | string; +type Invalid1 = React.ComponentClass | number; -const X: Invalid1 = "Should fail to construct"; +const X: Invalid1 = 1; ; diff --git a/tests/cases/conformance/salsa/methodsReturningThis.ts b/tests/cases/conformance/salsa/methodsReturningThis.ts new file mode 100644 index 00000000000..4c9f0d5cd0b --- /dev/null +++ b/tests/cases/conformance/salsa/methodsReturningThis.ts @@ -0,0 +1,21 @@ +// @filename: input.js +// @out: output.js +// @allowJs: true +function Class() +{ +} + +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; + +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +Class.prototype.m2 = function (x, y) { return this; }; +Class.prototype.m3 = function (x, y) { return this; }; +Class.prototype.m4 = function (angle) { return this; }; +Class.prototype.m5 = function (matrix) { return this; }; +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +Class.prototype.m7 = function(matrix) { return this; }; +Class.prototype.m8 = function() { return this; }; +Class.prototype.m9 = function () { return this; }; + diff --git a/tests/cases/conformance/salsa/multipleDeclarations.ts b/tests/cases/conformance/salsa/multipleDeclarations.ts new file mode 100644 index 00000000000..6899be2ec89 --- /dev/null +++ b/tests/cases/conformance/salsa/multipleDeclarations.ts @@ -0,0 +1,10 @@ +// @filename: input.js +// @out: output.js +// @allowJs: true + +function C() { + this.m = null; +} +C.prototype.m = function() { + this.nothing(); +}; diff --git a/tests/cases/conformance/types/intersection/intersectionTypeReadonly.ts b/tests/cases/conformance/types/intersection/intersectionTypeReadonly.ts new file mode 100644 index 00000000000..e659c6f6f56 --- /dev/null +++ b/tests/cases/conformance/types/intersection/intersectionTypeReadonly.ts @@ -0,0 +1,25 @@ +interface Base { + readonly value: number; +} +interface Identical { + readonly value: number; +} +interface Mutable { + value: number; +} +interface DifferentType { + readonly value: string; +} +interface DifferentName { + readonly other: number; +} +let base: Base; +base.value = 12 // error, lhs can't be a readonly property +let identical: Base & Identical; +identical.value = 12; // error, lhs can't be a readonly property +let mutable: Base & Mutable; +mutable.value = 12; // error, lhs can't be a readonly property +let differentType: Base & DifferentType; +differentType.value = 12; // error, lhs can't be a readonly property +let differentName: Base & DifferentName; +differentName.value = 12; // error, property 'value' doesn't exist diff --git a/tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion01.ts b/tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion01.ts new file mode 100644 index 00000000000..2e1e2d42499 --- /dev/null +++ b/tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion01.ts @@ -0,0 +1,4 @@ +// @declaration: true + +let x = <[]>[]; +let y = x[0]; \ No newline at end of file diff --git a/tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion02.ts b/tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion02.ts new file mode 100644 index 00000000000..43f63e9ce77 --- /dev/null +++ b/tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion02.ts @@ -0,0 +1,4 @@ +// @declaration: true + +let x = [] as []; +let y = x[0]; \ No newline at end of file diff --git a/tests/cases/conformance/types/union/discriminatedUnionTypes1.ts b/tests/cases/conformance/types/union/discriminatedUnionTypes1.ts new file mode 100644 index 00000000000..404162308b9 --- /dev/null +++ b/tests/cases/conformance/types/union/discriminatedUnionTypes1.ts @@ -0,0 +1,142 @@ +interface Square { + kind: "square"; + size: number; +} + +interface Rectangle { + kind: "rectangle"; + width: number; + height: number; +} + +interface Circle { + kind: "circle"; + radius: number; +} + +type Shape = Square | Rectangle | Circle; + +function area1(s: Shape) { + if (s.kind === "square") { + return s.size * s.size; + } + else if (s.kind === "circle") { + return Math.PI * s.radius * s.radius; + } + else if (s.kind === "rectangle") { + return s.width * s.height; + } + else { + return 0; + } +} + +function area2(s: Shape) { + switch (s.kind) { + case "square": return s.size * s.size; + case "rectangle": return s.width * s.height; + case "circle": return Math.PI * s.radius * s.radius; + } +} + +function assertNever(x: never): never { + throw new Error("Unexpected object: " + x); +} + +function area3(s: Shape) { + switch (s.kind) { + case "square": return s.size * s.size; + case "rectangle": return s.width * s.height; + case "circle": return Math.PI * s.radius * s.radius; + default: return assertNever(s); + } +} + +function area4(s: Shape) { + switch (s.kind) { + case "square": return s.size * s.size; + case "rectangle": return s.width * s.height; + case "circle": return Math.PI * s.radius * s.radius; + } + return assertNever(s); +} + +type Message = + { kind: "A", x: string } | + { kind: "B" | "C", y: number } | + { kind: "D" }; + +function f1(m: Message) { + if (m.kind === "A") { + m; // { kind: "A", x: string } + } + else if (m.kind === "D") { + m; // { kind: "D" } + } + else { + m; // { kind: "B" | "C", y: number } + } +} + +function f2(m: Message) { + if (m.kind === "A") { + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +} + +function f3(m: Message) { + if (m.kind === "X") { + m; // never + } +} + +function f4(m: Message, x: "A" | "D") { + if (m.kind == x) { + m; // { kind: "A", x: string } | { kind: "D" } + } +} + +function f5(m: Message) { + switch (m.kind) { + case "A": + m; // { kind: "A", x: string } + break; + case "D": + m; // { kind: "D" } + break; + default: + m; // { kind: "B" | "C", y: number } + } +} + +function f6(m: Message) { + switch (m.kind) { + case "A": + m; // { kind: "A", x: string } + case "D": + m; // { kind: "A", x: string } | { kind: "D" } + break; + default: + m; // { kind: "B" | "C", y: number } + } +} + +function f7(m: Message) { + switch (m.kind) { + case "A": + case "B": + return; + } + m; // { kind: "B" | "C", y: number } | { kind: "D" } +} + +function f8(m: Message) { + switch (m.kind) { + case "A": + return; + case "D": + throw new Error(); + } + m; // { kind: "B" | "C", y: number } +} \ No newline at end of file diff --git a/tests/cases/conformance/types/union/unionTypeReadonly.ts b/tests/cases/conformance/types/union/unionTypeReadonly.ts new file mode 100644 index 00000000000..89cf1cbfd37 --- /dev/null +++ b/tests/cases/conformance/types/union/unionTypeReadonly.ts @@ -0,0 +1,26 @@ +interface Base { + readonly value: number; +} +interface Identical { + readonly value: number; +} +interface Mutable { + value: number; +} +interface DifferentType { + readonly value: string; +} +interface DifferentName { + readonly other: number; +} +let base: Base; +base.value = 12 // error, lhs can't be a readonly property +let identical: Base | Identical; +identical.value = 12; // error, lhs can't be a readonly property +let mutable: Base | Mutable; +mutable.value = 12; // error, lhs can't be a readonly property +let differentType: Base | DifferentType; +differentType.value = 12; // error, lhs can't be a readonly property +let differentName: Base | DifferentName; +differentName.value = 12; // error, property 'value' doesn't exist + diff --git a/tests/cases/fourslash/ambientShorthandFindAllRefs.ts b/tests/cases/fourslash/ambientShorthandFindAllRefs.ts index 16fddd1869d..2f0dbf914e7 100644 --- a/tests/cases/fourslash/ambientShorthandFindAllRefs.ts +++ b/tests/cases/fourslash/ambientShorthandFindAllRefs.ts @@ -9,13 +9,4 @@ // @Filename: user2.ts ////import {[|x|]} from "jquery"; -let ranges = test.ranges(); -for (let range of ranges) { - goTo.file(range.fileName); - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } -} +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts b/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts index 48a698c5a47..d3d18b2dabb 100644 --- a/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts +++ b/tests/cases/fourslash/cancellationWhenfindingAllRefsOnDefinition.ts @@ -7,7 +7,7 @@ //// //// } //// -//// public /*1*/start(){ +//// public /**/[|start|](){ //// return this; //// } //// @@ -20,19 +20,14 @@ ////import Second = require("./findAllRefsOnDefinition-import"); //// ////var second = new Second.Test() -////second.start(); +////second.[|start|](); ////second.stop(); -goTo.file("findAllRefsOnDefinition-import.ts"); -goTo.marker("1"); - -verify.referencesCountIs(2); +verify.rangesReferenceEachOther(); cancellation.setCancelled(); -goTo.marker("1"); -verifyOperationIsCancelled(() => verify.referencesCountIs(0) ); +verifyOperationIsCancelled(() => verify.rangesReferenceEachOther()); // verify that internal state is still correct cancellation.resetCancelled(); -goTo.marker("1"); -verify.referencesCountIs(2); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/classifyThisParameter.ts b/tests/cases/fourslash/classifyThisParameter.ts new file mode 100644 index 00000000000..5e0c9a9d4b6 --- /dev/null +++ b/tests/cases/fourslash/classifyThisParameter.ts @@ -0,0 +1,13 @@ +/// + +////function f(this){} + +var c = classification; +verify.syntacticClassificationsAre( + c.keyword("function"), + c.identifier("f"), + c.punctuation("("), + c.keyword("this"), + c.punctuation(")"), + c.punctuation("{"), + c.punctuation("}")); diff --git a/tests/cases/fourslash/commentBraceCompletionPosition.ts b/tests/cases/fourslash/commentBraceCompletionPosition.ts index 23b8240dcaf..b92c49d3a14 100644 --- a/tests/cases/fourslash/commentBraceCompletionPosition.ts +++ b/tests/cases/fourslash/commentBraceCompletionPosition.ts @@ -14,10 +14,10 @@ //// } goTo.marker('1'); -verify.not.isValidBraceCompletionAtPostion('('); +verify.not.isValidBraceCompletionAtPosition('('); goTo.marker('2'); -verify.not.isValidBraceCompletionAtPostion('('); +verify.not.isValidBraceCompletionAtPosition('('); goTo.marker('3'); -verify.not.isValidBraceCompletionAtPostion('('); \ No newline at end of file +verify.not.isValidBraceCompletionAtPosition('('); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsForComputedProperties.ts b/tests/cases/fourslash/findAllRefsForComputedProperties.ts index 3ea226b3ce4..065d34c6fc5 100644 --- a/tests/cases/fourslash/findAllRefsForComputedProperties.ts +++ b/tests/cases/fourslash/findAllRefsForComputedProperties.ts @@ -13,12 +13,4 @@ //// ["[|prop1|]"]: function () { }, ////} -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForComputedProperties2.ts b/tests/cases/fourslash/findAllRefsForComputedProperties2.ts index b9f6e9538eb..37a9bd8470e 100644 --- a/tests/cases/fourslash/findAllRefsForComputedProperties2.ts +++ b/tests/cases/fourslash/findAllRefsForComputedProperties2.ts @@ -12,12 +12,4 @@ //// ["[|42|]"]: function () { } ////} -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForDefaultExport01.ts b/tests/cases/fourslash/findAllRefsForDefaultExport01.ts index 2f40af93c02..39079294a3b 100644 --- a/tests/cases/fourslash/findAllRefsForDefaultExport01.ts +++ b/tests/cases/fourslash/findAllRefsForDefaultExport01.ts @@ -7,12 +7,4 @@ //// ////var y = new [|DefaultExportedClass|]; -let ranges = test.ranges() -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForDefaultExport02.ts b/tests/cases/fourslash/findAllRefsForDefaultExport02.ts index db773c74e3c..19f31ece9b0 100644 --- a/tests/cases/fourslash/findAllRefsForDefaultExport02.ts +++ b/tests/cases/fourslash/findAllRefsForDefaultExport02.ts @@ -8,12 +8,4 @@ //// ////var y = [|DefaultExportedFunction|](); -let ranges = test.ranges() -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForDefaultExport03.ts b/tests/cases/fourslash/findAllRefsForDefaultExport03.ts index f753d17de49..b9bbfa14a64 100644 --- a/tests/cases/fourslash/findAllRefsForDefaultExport03.ts +++ b/tests/cases/fourslash/findAllRefsForDefaultExport03.ts @@ -14,12 +14,4 @@ //// var local = 100; ////} -let ranges = test.ranges() -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForDefaultExport04.ts b/tests/cases/fourslash/findAllRefsForDefaultExport04.ts index 45b008b55fe..44b7ee0a06f 100644 --- a/tests/cases/fourslash/findAllRefsForDefaultExport04.ts +++ b/tests/cases/fourslash/findAllRefsForDefaultExport04.ts @@ -20,9 +20,4 @@ // site is included in the references to the namespace. goTo.marker(); -let ranges = test.ranges(); -verify.referencesCountIs(ranges.length); - -for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); -} +verify.referencesAre(test.ranges()); diff --git a/tests/cases/fourslash/findAllRefsForDefaultExport05.ts b/tests/cases/fourslash/findAllRefsForDefaultExport05.ts index 6655138da3b..0f06792458d 100644 --- a/tests/cases/fourslash/findAllRefsForDefaultExport05.ts +++ b/tests/cases/fourslash/findAllRefsForDefaultExport05.ts @@ -20,9 +20,4 @@ // and all value-uses of 'f' are included in the references to the function. goTo.marker(); -let ranges = test.ranges(); -verify.referencesCountIs(ranges.length); - -for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); -} +verify.referencesAre(test.ranges()); diff --git a/tests/cases/fourslash/findAllRefsForDefaultExport06.ts b/tests/cases/fourslash/findAllRefsForDefaultExport06.ts index 12c187b4b0c..cdd9b4f980c 100644 --- a/tests/cases/fourslash/findAllRefsForDefaultExport06.ts +++ b/tests/cases/fourslash/findAllRefsForDefaultExport06.ts @@ -20,9 +20,4 @@ // and all value-uses of 'f' are included in the references to the function. goTo.marker(); -let ranges = test.ranges(); -verify.referencesCountIs(ranges.length); - -for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); -} +verify.referencesAre(test.ranges()); diff --git a/tests/cases/fourslash/findAllRefsForDefaultExport07.ts b/tests/cases/fourslash/findAllRefsForDefaultExport07.ts index 9534a671316..88d0a775026 100644 --- a/tests/cases/fourslash/findAllRefsForDefaultExport07.ts +++ b/tests/cases/fourslash/findAllRefsForDefaultExport07.ts @@ -8,11 +8,9 @@ //// ////var y = DefaultExportedFunction(); //// -////namespace /**/DefaultExportedFunction { +////namespace [|DefaultExportedFunction|] { ////} // The namespace and function do not merge, // so the namespace should be all alone. - -goTo.marker(); -verify.referencesCountIs(1); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForDefaultExport08.ts b/tests/cases/fourslash/findAllRefsForDefaultExport08.ts index 80eabbe53f4..b7ae7f4d534 100644 --- a/tests/cases/fourslash/findAllRefsForDefaultExport08.ts +++ b/tests/cases/fourslash/findAllRefsForDefaultExport08.ts @@ -7,11 +7,10 @@ //// ////var y = new DefaultExportedClass; //// -////namespace /**/DefaultExportedClass { +////namespace [|DefaultExportedClass|] { ////} // The namespace and class do not merge, // so the namespace should be all alone. -goTo.marker(); -verify.referencesCountIs(1); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForFunctionExpression01.ts b/tests/cases/fourslash/findAllRefsForFunctionExpression01.ts index a312a277ebb..35d5c45e3d9 100644 --- a/tests/cases/fourslash/findAllRefsForFunctionExpression01.ts +++ b/tests/cases/fourslash/findAllRefsForFunctionExpression01.ts @@ -9,13 +9,4 @@ /////// ////foo(); - -let ranges = test.ranges() -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForObjectLiteralProperties.ts b/tests/cases/fourslash/findAllRefsForObjectLiteralProperties.ts index cb5e702dc90..cea4db81ea1 100644 --- a/tests/cases/fourslash/findAllRefsForObjectLiteralProperties.ts +++ b/tests/cases/fourslash/findAllRefsForObjectLiteralProperties.ts @@ -8,13 +8,4 @@ //// ////let {[|property|]: pVar} = x; - -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForStringLiteralTypes.ts b/tests/cases/fourslash/findAllRefsForStringLiteralTypes.ts index dcf7240312c..45e981d8a84 100644 --- a/tests/cases/fourslash/findAllRefsForStringLiteralTypes.ts +++ b/tests/cases/fourslash/findAllRefsForStringLiteralTypes.ts @@ -3,12 +3,4 @@ ////type Options = "[|option 1|]" | "option 2"; ////let myOption: Options = "[|option 1|]"; -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForVariableInExtendsClause01.ts b/tests/cases/fourslash/findAllRefsForVariableInExtendsClause01.ts index 1ec144d7e82..dd8fb1026c4 100644 --- a/tests/cases/fourslash/findAllRefsForVariableInExtendsClause01.ts +++ b/tests/cases/fourslash/findAllRefsForVariableInExtendsClause01.ts @@ -1,15 +1,6 @@ /// - ////var [|Base|] = class { }; ////class C extends [|Base|] { } -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForVariableInExtendsClause02.ts b/tests/cases/fourslash/findAllRefsForVariableInExtendsClause02.ts index 0f06a3c4202..3fc41358dfd 100644 --- a/tests/cases/fourslash/findAllRefsForVariableInExtendsClause02.ts +++ b/tests/cases/fourslash/findAllRefsForVariableInExtendsClause02.ts @@ -6,12 +6,4 @@ //// interface I extends [|Base|] { } ////} -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsForVariableInImplementsClause01.ts b/tests/cases/fourslash/findAllRefsForVariableInImplementsClause01.ts index 93f8cec8109..f8326eade58 100644 --- a/tests/cases/fourslash/findAllRefsForVariableInImplementsClause01.ts +++ b/tests/cases/fourslash/findAllRefsForVariableInImplementsClause01.ts @@ -1,10 +1,7 @@ /// - ////var Base = class { }; -////class C extends Base implements [|Base|] { } +////class C extends Base implements /**/Base { } -let ranges = test.ranges(); -for (let range of ranges) { - verify.referencesCountIs(0); -} \ No newline at end of file +goTo.marker(); +verify.referencesAre([]); diff --git a/tests/cases/fourslash/findAllRefsInClassExpression.ts b/tests/cases/fourslash/findAllRefsInClassExpression.ts index 951acdd336c..f874bcbcb5c 100644 --- a/tests/cases/fourslash/findAllRefsInClassExpression.ts +++ b/tests/cases/fourslash/findAllRefsInClassExpression.ts @@ -5,12 +5,4 @@ //// [|boom|](){} ////} -let ranges = test.ranges() -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsInheritedProperties1.ts b/tests/cases/fourslash/findAllRefsInheritedProperties1.ts index b2755923d37..358ba3f249d 100644 --- a/tests/cases/fourslash/findAllRefsInheritedProperties1.ts +++ b/tests/cases/fourslash/findAllRefsInheritedProperties1.ts @@ -9,17 +9,8 @@ //// v.[|doStuff|](); //// v.[|propName|]; -function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) { - goTo.position(query.start); - for (const ref of references) { - verify.referencesAtPositionContains(ref); - } -} - -const ranges = test.ranges(); -verify.assertHasRanges(ranges); -const [r0, r1, r2, r3] = ranges; -verifyReferences(r0, [r0, r2]); -verifyReferences(r1, [r1, r3]); -verifyReferences(r2, [r0, r2]); -verifyReferences(r3, [r1, r3]); \ No newline at end of file +const [r0, r1, r2, r3] = test.ranges(); +verify.referencesOf(r0, [r0, r2]); +verify.referencesOf(r1, [r1, r3]); +verify.referencesOf(r2, [r0, r2]); +verify.referencesOf(r3, [r1, r3]); diff --git a/tests/cases/fourslash/findAllRefsInheritedProperties2.ts b/tests/cases/fourslash/findAllRefsInheritedProperties2.ts index 1ab92c251da..9fe36fbb48e 100644 --- a/tests/cases/fourslash/findAllRefsInheritedProperties2.ts +++ b/tests/cases/fourslash/findAllRefsInheritedProperties2.ts @@ -9,17 +9,8 @@ //// v.[|doStuff|](); // r2 //// v.[|propName|]; // r3 -function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) { - goTo.position(query.start); - for (const ref of references) { - verify.referencesAtPositionContains(ref); - } -} - -const ranges = test.ranges(); -verify.assertHasRanges(ranges); -const [r0, r1, r2, r3] = ranges; -verifyReferences(r0, [r0, r2]); -verifyReferences(r1, [r1, r3]); -verifyReferences(r2, [r0, r2]); -verifyReferences(r3, [r1, r3]); \ No newline at end of file +const [r0, r1, r2, r3] = test.ranges(); +verify.referencesOf(r0, [r0, r2]); +verify.referencesOf(r1, [r1, r3]); +verify.referencesOf(r2, [r0, r2]); +verify.referencesOf(r3, [r1, r3]); diff --git a/tests/cases/fourslash/findAllRefsInheritedProperties3.ts b/tests/cases/fourslash/findAllRefsInheritedProperties3.ts index 9a46b08f357..772fb78a2e8 100644 --- a/tests/cases/fourslash/findAllRefsInheritedProperties3.ts +++ b/tests/cases/fourslash/findAllRefsInheritedProperties3.ts @@ -17,21 +17,12 @@ //// v.[|propName|]; // r6 //// v.[|doStuff|](); // r7 -function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) { - goTo.position(query.start); - for (const ref of references) { - verify.referencesAtPositionContains(ref); - } -} - -const ranges = test.ranges(); -verify.assertHasRanges(ranges); -const [r0, r1, r2, r3, r4, r5, r6, r7] = ranges; -verifyReferences(r0, [r0]); -verifyReferences(r1, [r1, r5, r6]); -verifyReferences(r2, [r2, r4, r7]); -verifyReferences(r3, [r3, r5, r6]); -verifyReferences(r4, [r2, r4, r7]); -verifyReferences(r5, [r1, r3, r5, r6]); -verifyReferences(r6, [r1, r3, r5, r6]); -verifyReferences(r7, [r2, r4, r7]); \ No newline at end of file +const [r0, r1, r2, r3, r4, r5, r6, r7] = test.ranges(); +verify.referencesOf(r0, [r0, r4, r7]); +verify.referencesOf(r1, [r1, r5, r6]); +verify.referencesOf(r2, [r2, r4, r7]); +verify.referencesOf(r3, [r3, r5, r6]); +verify.referencesOf(r4, [r0, r2, r4, r7]); +verify.referencesOf(r5, [r1, r3, r5, r6]); +verify.referencesOf(r6, [r1, r3, r5, r6]); +verify.referencesOf(r7, [r0, r2, r4, r7]); diff --git a/tests/cases/fourslash/findAllRefsInheritedProperties4.ts b/tests/cases/fourslash/findAllRefsInheritedProperties4.ts index bcd41331f73..1ecb85bfae1 100644 --- a/tests/cases/fourslash/findAllRefsInheritedProperties4.ts +++ b/tests/cases/fourslash/findAllRefsInheritedProperties4.ts @@ -13,18 +13,9 @@ //// d.[|prop0|]; // r3 //// d.[|prop1|]; // r4 -function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) { - goTo.position(query.start); - for (const ref of references) { - verify.referencesAtPositionContains(ref); - } -} - -const ranges = test.ranges(); -verify.assertHasRanges(ranges); -const [r0, r1, r2, r3, r4] = ranges; -verifyReferences(r0, [r0, r2, r3]); -verifyReferences(r1, [r1]); -verifyReferences(r2, [r0, r2, r3]); -verifyReferences(r3, [r0, r2, r3]); -verifyReferences(r4, []); \ No newline at end of file +const [r0, r1, r2, r3, r4] = test.ranges(); +verify.referencesOf(r0, [r0, r2, r3]); +verify.referencesOf(r1, [r1]); +verify.referencesOf(r2, [r0, r2, r3]); +verify.referencesOf(r3, [r0, r2, r3]); +verify.referencesOf(r4, []); diff --git a/tests/cases/fourslash/findAllRefsInheritedProperties5.ts b/tests/cases/fourslash/findAllRefsInheritedProperties5.ts index d4e02a36b09..6d6dbb392bf 100644 --- a/tests/cases/fourslash/findAllRefsInheritedProperties5.ts +++ b/tests/cases/fourslash/findAllRefsInheritedProperties5.ts @@ -13,18 +13,9 @@ //// d.[|prop0|]; // r3 //// d.[|prop1|]; // r4 -function verifyReferences(query: FourSlashInterface.Range, references: FourSlashInterface.Range[]) { - goTo.position(query.start); - for (const ref of references) { - verify.referencesAtPositionContains(ref); - } -} - -const ranges = test.ranges(); -verify.assertHasRanges(ranges); -const [r0, r1, r2, r3, r4] = ranges; -verifyReferences(r0, [r0]); -verifyReferences(r1, [r1]); -verifyReferences(r2, [r2, r3]); -verifyReferences(r3, [r2, r3]); -verifyReferences(r4, []); +const [r0, r1, r2, r3, r4] = test.ranges(); +verify.referencesOf(r0, [r0]); +verify.referencesOf(r1, [r1]); +verify.referencesOf(r2, [r2, r3]); +verify.referencesOf(r3, [r2, r3]); +verify.referencesOf(r4, []); diff --git a/tests/cases/fourslash/findAllRefsInsideTemplates1.ts b/tests/cases/fourslash/findAllRefsInsideTemplates1.ts index dd4461751de..9ab4c624230 100644 --- a/tests/cases/fourslash/findAllRefsInsideTemplates1.ts +++ b/tests/cases/fourslash/findAllRefsInsideTemplates1.ts @@ -3,10 +3,4 @@ ////var [|x|] = 10; ////var y = `${ [|x|] } ${ [|x|] }` -test.ranges().forEach(targetRange => { - goTo.position(targetRange.start); - - test.ranges().forEach(range => { - verify.referencesAtPositionContains(range); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsInsideTemplates2.ts b/tests/cases/fourslash/findAllRefsInsideTemplates2.ts index 7f585234082..63265eb944b 100644 --- a/tests/cases/fourslash/findAllRefsInsideTemplates2.ts +++ b/tests/cases/fourslash/findAllRefsInsideTemplates2.ts @@ -3,10 +3,4 @@ ////function [|f|](...rest: any[]) { } ////[|f|] `${ [|f|] } ${ [|f|] }` -test.ranges().forEach(targetRange => { - goTo.position(targetRange.start); - - test.ranges().forEach(range => { - verify.referencesAtPositionContains(range); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsInsideWithBlock.ts b/tests/cases/fourslash/findAllRefsInsideWithBlock.ts index fc8a94eaa2d..c95925ff863 100644 --- a/tests/cases/fourslash/findAllRefsInsideWithBlock.ts +++ b/tests/cases/fourslash/findAllRefsInsideWithBlock.ts @@ -1,16 +1,12 @@ /// -////var x = 0; +////var [|x|] = 0; //// ////with ({}) { //// var y = x; // Reference of x here should not be picked //// /*2*/y++; // also reference for y should be ignored ////} //// -////x = /*1*/x + 1; +////[|x|] = [|x|] + 1; -goTo.marker('1'); -verify.referencesCountIs(3); - -goTo.marker('2'); -verify.referencesCountIs(0); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName01.ts b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName01.ts index 0d03561515d..895b2168b23 100644 --- a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName01.ts +++ b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName01.ts @@ -8,12 +8,4 @@ ////var foo: I; ////var { [|property1|]: prop1 } = foo; -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName02.ts b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName02.ts index 86514051557..67a31f33d1e 100644 --- a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName02.ts +++ b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName02.ts @@ -8,12 +8,4 @@ ////var foo: I; ////var { [|property1|]: {} } = foo; -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName03.ts b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName03.ts index 8dc2b1e7bb8..40ecf0139a7 100644 --- a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName03.ts +++ b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName03.ts @@ -8,12 +8,4 @@ ////var foo: I; ////var [{ [|property1|]: prop1 }, { [|property1|], property2 } ] = [foo, foo]; -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName04.ts b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName04.ts index dfa0997774e..5696d242fed 100644 --- a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName04.ts +++ b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName04.ts @@ -5,17 +5,11 @@ //// property2: string; ////} //// -////function f({ /**/[|property1|]: p1 }: I, +////function f({ [|property1|]: p1 }: I, //// { [|property1|] }: I, //// { property1: p2 }) { //// //// return [|property1|] + 1; ////} -goTo.marker(); - -let ranges = test.ranges(); -verify.referencesCountIs(ranges.length); -for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName05.ts b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName05.ts index f7e3b80fe45..e33c73ff838 100644 --- a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName05.ts +++ b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName05.ts @@ -10,4 +10,4 @@ ////} goTo.marker(); -verify.referencesCountIs(0); \ No newline at end of file +verify.referencesAre([]); \ No newline at end of file diff --git a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName06.ts b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName06.ts index 379d1d4d5f5..8be45ac87e6 100644 --- a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName06.ts +++ b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName06.ts @@ -19,12 +19,4 @@ // Note: if this test ever changes, consider updating // 'quickInfoForObjectBindingElementPropertyName05.ts' -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName07.ts b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName07.ts index 6448d2396b3..96f414dc060 100644 --- a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName07.ts +++ b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName07.ts @@ -4,12 +4,4 @@ //// ////p, [{ [|a|]: p, b }] = [{ [|a|]: 10, b: true }]; -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName09.ts b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName09.ts index 0b82c73e31d..5696d242fed 100644 --- a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName09.ts +++ b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName09.ts @@ -6,16 +6,10 @@ ////} //// ////function f({ [|property1|]: p1 }: I, -//// { /**/[|property1|] }: I, +//// { [|property1|] }: I, //// { property1: p2 }) { //// //// return [|property1|] + 1; ////} -goTo.marker(); - -let ranges = test.ranges(); -verify.referencesCountIs(ranges.length); -for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName10.ts b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName10.ts index 7b8be1aa91c..6ffa4b03b68 100644 --- a/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName10.ts +++ b/tests/cases/fourslash/findAllRefsObjectBindingElementPropertyName10.ts @@ -8,12 +8,4 @@ ////function f ({ [|next|]: { [|next|]: x} }: Recursive) { ////} -let ranges = test.ranges(); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsOnDecorators.ts b/tests/cases/fourslash/findAllRefsOnDecorators.ts index 3225bc108ce..b58e15b9571 100644 --- a/tests/cases/fourslash/findAllRefsOnDecorators.ts +++ b/tests/cases/fourslash/findAllRefsOnDecorators.ts @@ -1,19 +1,16 @@ /// // @Filename: a.ts -////function decorator(target) { +////function [|decorator|](target) { //// return target; ////} -////decorator(); +////[|decorator|](); // @Filename: b.ts -////@deco/*1*/rator @decorator("again") +////@[|decorator|] @[|decorator|]("again") ////class C { -//// @decorator +//// @[|decorator|] //// method() {} ////} -goTo.file("b.ts"); -goTo.marker("1"); - -verify.referencesCountIs(5); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsOnDefinition.ts b/tests/cases/fourslash/findAllRefsOnDefinition.ts index a25a6e1285f..cb829807602 100644 --- a/tests/cases/fourslash/findAllRefsOnDefinition.ts +++ b/tests/cases/fourslash/findAllRefsOnDefinition.ts @@ -7,7 +7,7 @@ //// //// } //// -//// public /*1*/start(){ +//// public [|start|](){ //// return this; //// } //// @@ -20,10 +20,7 @@ ////import Second = require("./findAllRefsOnDefinition-import"); //// ////var second = new Second.Test() -////second.start(); +////second.[|start|](); ////second.stop(); -goTo.file("findAllRefsOnDefinition-import.ts"); -goTo.marker("1"); - -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsOnDefinition2.ts b/tests/cases/fourslash/findAllRefsOnDefinition2.ts index c9a116d4622..8edfd7f8cd7 100644 --- a/tests/cases/fourslash/findAllRefsOnDefinition2.ts +++ b/tests/cases/fourslash/findAllRefsOnDefinition2.ts @@ -3,7 +3,7 @@ //@Filename: findAllRefsOnDefinition2-import.ts ////export module Test{ //// -//// export interface /*1*/start { } +//// export interface [|start|] { } //// //// export interface stop { } ////} @@ -11,10 +11,7 @@ //@Filename: findAllRefsOnDefinition2.ts ////import Second = require("./findAllRefsOnDefinition2-import"); //// -////var start: Second.Test.start; +////var start: Second.Test.[|start|]; ////var stop: Second.Test.stop; -goTo.file("findAllRefsOnDefinition2-import.ts"); -goTo.marker("1"); - -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsOnImportAliases.ts b/tests/cases/fourslash/findAllRefsOnImportAliases.ts index 8460e3f39b2..cd258e80316 100644 --- a/tests/cases/fourslash/findAllRefsOnImportAliases.ts +++ b/tests/cases/fourslash/findAllRefsOnImportAliases.ts @@ -1,29 +1,15 @@ /// //@Filename: a.ts -////export class /*1*/Class{ +////export class [|Class|] { ////} //@Filename: b.ts -////import { /*2*/Class } from "./a"; +////import { [|Class|] } from "./a"; //// -////var c = new /*3*/Class(); +////var c = new [|Class|](); //@Filename: c.ts -////export { /*4*/Class } from "./a"; - -goTo.file("a.ts"); -goTo.marker("1"); -verify.referencesCountIs(4); - -goTo.file("b.ts"); -goTo.marker("2"); -verify.referencesCountIs(4); - -goTo.marker("3"); -verify.referencesCountIs(4); - -goTo.file("c.ts"); -goTo.marker("4"); -verify.referencesCountIs(4); +////export { [|Class|] } from "./a"; +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsOnImportAliases2.ts b/tests/cases/fourslash/findAllRefsOnImportAliases2.ts index ab7a99e1e74..67c4d14b5d9 100644 --- a/tests/cases/fourslash/findAllRefsOnImportAliases2.ts +++ b/tests/cases/fourslash/findAllRefsOnImportAliases2.ts @@ -1,31 +1,15 @@ /// //@Filename: a.ts -////export class /*1*/Class{ +////export class [|Class|] { ////} //@Filename: b.ts -////import { /*2*/Class as /*3*/C2} from "./a"; +////import { [|Class|] as [|C2|] } from "./a"; //// -////var c = new C2(); +////var c = new [|C2|](); //@Filename: c.ts -////export { /*4*/Class as /*5*/C3 } from "./a"; +////export { [|Class|] as [|C3|] } from "./a"; -goTo.file("a.ts"); -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.file("b.ts"); -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(2); - -goTo.file("c.ts"); -goTo.marker("4"); -verify.referencesCountIs(3); - -goTo.marker("5"); -verify.referencesCountIs(1); +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsOnPrivateParameterProperty1.ts b/tests/cases/fourslash/findAllRefsOnPrivateParameterProperty1.ts index 6686a771b34..3b8b5084a6b 100644 --- a/tests/cases/fourslash/findAllRefsOnPrivateParameterProperty1.ts +++ b/tests/cases/fourslash/findAllRefsOnPrivateParameterProperty1.ts @@ -9,10 +9,4 @@ //// } ////} -test.ranges().forEach(r => { - goTo.position(r.start); - - test.ranges().forEach(range => { - verify.referencesAtPositionContains(range); - }); -}); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration1.ts b/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration1.ts index 4018698f4ef..8f30e3cc853 100644 --- a/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration1.ts +++ b/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration1.ts @@ -7,15 +7,4 @@ //// } //// } -const ranges = test.ranges(); -verify.assertHasRanges(ranges); -for (const range of ranges) { - goTo.position(range.start); - - if (ranges.length) { - verify.referencesCountIs(ranges.length); - for (const expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration2.ts b/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration2.ts index a450a77e2dc..d9656e8b5cf 100644 --- a/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration2.ts +++ b/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration2.ts @@ -7,13 +7,4 @@ //// } //// } -let ranges = test.ranges(); -verify.assertHasRanges(ranges); -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration3.ts b/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration3.ts index 82fd67dfc9b..dc48ffedb21 100644 --- a/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration3.ts +++ b/tests/cases/fourslash/findAllRefsParameterPropertyDeclaration3.ts @@ -7,13 +7,4 @@ //// } //// } -const ranges = test.ranges(); -verify.assertHasRanges(ranges); -for (const range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (const expectedRange of ranges) { - verify.referencesAtPositionContains(expectedRange); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsPropertyContextuallyTypedByTypeParam01.ts b/tests/cases/fourslash/findAllRefsPropertyContextuallyTypedByTypeParam01.ts index 357b355971d..f5b0143ac4b 100644 --- a/tests/cases/fourslash/findAllRefsPropertyContextuallyTypedByTypeParam01.ts +++ b/tests/cases/fourslash/findAllRefsPropertyContextuallyTypedByTypeParam01.ts @@ -17,12 +17,4 @@ //// [|a|]: "ss" ////}; -let ranges = test.ranges() -for (let range of ranges) { - goTo.position(range.start); - - verify.referencesCountIs(ranges.length); - for (let expectedReference of ranges) { - verify.referencesAtPositionContains(expectedReference); - } -} \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsThisKeyword.ts b/tests/cases/fourslash/findAllRefsThisKeyword.ts new file mode 100644 index 00000000000..f08a70ccf65 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsThisKeyword.ts @@ -0,0 +1,33 @@ +/// +// @noLib: true + +////[|this|]; +////function f([|this|]) { +//// return [|this|]; +//// function g([|this|]) { return [|this|]; } +////} +////class C { +//// static x() { +//// [|this|]; +//// } +//// static y() { +//// () => [|this|]; +//// } +//// constructor() { +//// [|this|]; +//// } +//// method() { +//// () => [|this|]; +//// } +////} +////// These are *not* real uses of the 'this' keyword, they are identifiers. +////const x = { [|this|]: 0 } +////x.[|this|]; + +const [global, f0, f1, g0, g1, x, y, constructor, method, propDef, propUse] = test.ranges(); +verify.referencesOf(global, [global]); +verify.rangesReferenceEachOther([f0, f1]); +verify.rangesReferenceEachOther([g0, g1]); +verify.rangesReferenceEachOther([x, y]); +verify.rangesReferenceEachOther([constructor, method]); +verify.rangesReferenceEachOther([propDef, propUse]); diff --git a/tests/cases/fourslash/findAllRefsThisKeywordMultipleFiles.ts b/tests/cases/fourslash/findAllRefsThisKeywordMultipleFiles.ts index 4b9f7a450ec..a4bab7f876c 100644 --- a/tests/cases/fourslash/findAllRefsThisKeywordMultipleFiles.ts +++ b/tests/cases/fourslash/findAllRefsThisKeywordMultipleFiles.ts @@ -1,18 +1,15 @@ /// // @Filename: file1.ts -////this; this; +////[|this|]; [|this|]; // @Filename: file2.ts -////this; -////this; +////[|this|]; +////[|this|]; // @Filename: file3.ts -//// ((x = this, y) => t/**/his)(this, this); +//// ((x = [|this|], y) => [|this|])([|this|], [|this|]); +//// // different 'this' +//// function f(this) { return this; } -goTo.file("file1.ts"); -goTo.marker(); - -// TODO (drosen): The CURRENT behavior is that findAllRefs doesn't work on 'this' or 'super' keywords. -// This should change down the line. -verify.referencesCountIs(0); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts index 369258832a9..7cc47ee34ea 100644 --- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames1.ts @@ -7,12 +7,4 @@ ////var x: Foo; ////x.[|_bar|]; - -test.ranges().forEach(r1 => { - goTo.position(r1.start); - verify.referencesCountIs(2); - - test.ranges().forEach(r2 => { - verify.referencesAtPositionContains(r2); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts index 53adb8236a4..d1449016b59 100644 --- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames2.ts @@ -7,12 +7,4 @@ ////var x: Foo; ////x.[|__bar|]; - -test.ranges().forEach(r1 => { - goTo.position(r1.start); - verify.referencesCountIs(2); - - test.ranges().forEach(r2 => { - verify.referencesAtPositionContains(r2); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts index 1793ec6ddc4..e0d6f7f3456 100644 --- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames3.ts @@ -7,12 +7,4 @@ ////var x: Foo; ////x.[|___bar|]; - -test.ranges().forEach(r1 => { - goTo.position(r1.start); - verify.referencesCountIs(2); - - test.ranges().forEach(r2 => { - verify.referencesAtPositionContains(r2); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts index 694ecdc79ab..5a8de54db4d 100644 --- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames4.ts @@ -7,12 +7,4 @@ ////var x: Foo; ////x.[|____bar|]; - -test.ranges().forEach(r1 => { - goTo.position(r1.start); - verify.referencesCountIs(2); - - test.ranges().forEach(r2 => { - verify.referencesAtPositionContains(r2); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts index a110597f4b7..4ab28f164fe 100644 --- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames5.ts @@ -13,12 +13,4 @@ ////x.[|___bar|]; ////x.____bar; - -test.ranges().forEach(r1 => { - goTo.position(r1.start); - verify.referencesCountIs(2); - - test.ranges().forEach(r2 => { - verify.referencesAtPositionContains(r2); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts index 97ed29eb178..191b0bdbc14 100644 --- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames6.ts @@ -13,12 +13,4 @@ ////x.___bar; ////x.____bar; - -test.ranges().forEach(r1 => { - goTo.position(r1.start); - verify.referencesCountIs(2); - - test.ranges().forEach(r2 => { - verify.referencesAtPositionContains(r2); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts index afcaf625ede..f3578193096 100644 --- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames7.ts @@ -4,11 +4,4 @@ //// [|__foo|](); ////} -test.ranges().forEach(r => { - goTo.position(r.start); - verify.referencesCountIs(2); - - test.ranges().forEach(range => { - verify.referencesAtPositionContains(range); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts index 08ed3414366..15c66f4e7c6 100644 --- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames8.ts @@ -4,11 +4,4 @@ //// [|__foo|](); ////}) -test.ranges().forEach(r => { - goTo.position(r.start); - verify.referencesCountIs(2); - - test.ranges().forEach(range => { - verify.referencesAtPositionContains(range); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts index a3923783c46..cc33b618c41 100644 --- a/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts +++ b/tests/cases/fourslash/findAllRefsWithLeadingUnderscoreNames9.ts @@ -4,11 +4,4 @@ //// [|___foo|](); ////}) -test.ranges().forEach(r => { - goTo.position(r.start); - verify.referencesCountIs(2); - - test.ranges().forEach(range => { - verify.referencesAtPositionContains(range); - }); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment.ts b/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment.ts index 7a1f7a0225f..0dc050602c5 100644 --- a/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment.ts +++ b/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment.ts @@ -1,19 +1,14 @@ /// -//// var /*1*/name = "Foo"; +//// var [|name|] = "Foo"; //// -//// var obj = { /*2*/name }; -//// var obj1 = { /*3*/name:name }; -//// obj./*4*/name; +//// var obj = { [|name|] }; +//// var obj1 = { [|name|]:[|name|] }; +//// obj.[|name|]; -goTo.marker('1'); -verify.referencesCountIs(3); - -goTo.marker('2'); -verify.referencesCountIs(4); - -goTo.marker('3'); -verify.referencesCountIs(1); - -goTo.marker('4'); -verify.referencesCountIs(2); +const [r0, r1, r2, r3, r4] = test.ranges(); +verify.referencesOf(r0, [r0, r1, r3]); +verify.referencesOf(r1, [r0, r1, r3, r4]); +verify.referencesOf(r2, [r2]); +verify.referencesOf(r3, [r0, r1, r3]); +verify.referencesOf(r4, [r1, r4]); diff --git a/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment2.ts b/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment2.ts index b3f283f1272..59ba87fabb6 100644 --- a/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment2.ts +++ b/tests/cases/fourslash/findAllRefsWithShorthandPropertyAssignment2.ts @@ -1,22 +1,16 @@ /// -//// var /*1*/dx = "Foo"; +//// var [|dx|] = "Foo"; //// -//// module M { export var /*2*/dx; } +//// module M { export var [|dx|]; } //// module M { //// var z = 100; -//// export var y = { /*3*/dx, z }; +//// export var y = { [|dx|], z }; //// } -//// M.y./*4*/dx; +//// M.y.[|dx|]; -goTo.marker('1'); -verify.referencesCountIs(1); - -goTo.marker('2'); -verify.referencesCountIs(2); - -goTo.marker('3'); -verify.referencesCountIs(3); - -goTo.marker('4'); -verify.referencesCountIs(2); \ No newline at end of file +const [r0, r1, r2, r3] = test.ranges(); +verify.referencesOf(r0, [r0]); +verify.referencesOf(r1, [r1, r2]); +verify.referencesOf(r2, [r1, r2, r3]); +verify.referencesOf(r3, [r2, r3]); diff --git a/tests/cases/fourslash/findReferencesAcrossMultipleProjects.ts b/tests/cases/fourslash/findReferencesAcrossMultipleProjects.ts index 0ef7745f8f9..a9915fc4b3d 100644 --- a/tests/cases/fourslash/findReferencesAcrossMultipleProjects.ts +++ b/tests/cases/fourslash/findReferencesAcrossMultipleProjects.ts @@ -1,17 +1,14 @@ /// //@Filename: a.ts -////var /*1*/x: number; +////var [|x|]: number; //@Filename: b.ts /////// -////x++; +////[|x|]++; //@Filename: c.ts /////// -////x++; +////[|x|]++; -goTo.file("a.ts"); -goTo.marker("1"); - -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findReferencesAfterEdit.ts b/tests/cases/fourslash/findReferencesAfterEdit.ts index 5eca1a3b8f2..6140ca9a767 100644 --- a/tests/cases/fourslash/findReferencesAfterEdit.ts +++ b/tests/cases/fourslash/findReferencesAfterEdit.ts @@ -2,21 +2,19 @@ // @Filename: a.ts ////interface A { -//// foo: string; +//// [|foo|]: string; ////} // @Filename: b.ts /////// -/////*0*/ +/////**/ ////function foo(x: A) { -//// x.f/*1*/oo +//// x.[|foo|] ////} -goTo.marker("1"); -verify.referencesCountIs(2); +verify.rangesReferenceEachOther(); -goTo.marker("0"); +goTo.marker(""); edit.insert("\r\n"); -goTo.marker("1"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findReferencesJSXTagName.ts b/tests/cases/fourslash/findReferencesJSXTagName.ts index a6170b4fc8f..24760046eb2 100644 --- a/tests/cases/fourslash/findReferencesJSXTagName.ts +++ b/tests/cases/fourslash/findReferencesJSXTagName.ts @@ -1,22 +1,14 @@ /// // @Filename: index.tsx -////import { /*1*/SubmissionComp } from "./RedditSubmission" +////import { [|SubmissionComp|] } from "./RedditSubmission" ////function displaySubreddit(subreddit: string) { //// let components = submissions -//// .map((value, index) => ); +//// .map((value, index) => <[|SubmissionComp|] key={ index } elementPosition= { index } {...value.data} />); ////} // @Filename: RedditSubmission.ts -////export const /*3*/SubmissionComp = (submission: SubmissionProps) => +////export const [|SubmissionComp|] = (submission: SubmissionProps) => ////
; - -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/findReferencesJSXTagName2.ts b/tests/cases/fourslash/findReferencesJSXTagName2.ts index a7bb7fd97dd..4ce08647c52 100644 --- a/tests/cases/fourslash/findReferencesJSXTagName2.ts +++ b/tests/cases/fourslash/findReferencesJSXTagName2.ts @@ -1,11 +1,7 @@ /// // @Filename: index.tsx -////const /*1*/obj = {Component: () =>
}; -////const element = ; +////const [|obj|] = {Component: () =>
}; +////const element = <[|obj|].Component/>; -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/formatNamedExportImport.ts b/tests/cases/fourslash/formatNamedExportImport.ts new file mode 100644 index 00000000000..efc91111b2d --- /dev/null +++ b/tests/cases/fourslash/formatNamedExportImport.ts @@ -0,0 +1,81 @@ +/// + +/////*selectionStart*/ +////export { x, y as yy, z } from "foo"/*export1*/ +////export{x, y as yy, z}from"bar"/*export2*/ +//// +////export +/////*exportOpenBrace*/{x,/*exportSpecifier1*/ +////y as yy, z/*exportSpecifier2*/ }/*exportCloseBrace*/ +//// from/*fromKeywordAutoformat*/ +/////*fromKeywordIndent*/ +////"foo"/*exportDir*/ +//// +////import {x, y as yy, z}from "baz"/*import1*/ +//// +////import/*importOpenBrace*/{x,/*importSpecifier1*/ +////y +////as yy,/*importSpecifier2*/ +////z}/*importCloseBrace*/ +////from "wow"/*importDir*/ +/////*selectionEnd*/ +//// +////export/*formatOnEnter*/{/*formatOnEnterOpenBrace*/ +/////*differentLineIndent*/x/*differentLineAutoformat*/ +////} from "abc" +//// +////export { +/////*incompleteExportDeclIndent*/ +/////*incompleteExportDeclIndent2*/ + +format.selection("selectionStart", "selectionEnd"); + +goTo.marker("export1"); +verify.currentLineContentIs('export { x, y as yy, z } from "foo"'); +goTo.marker("export2"); +verify.currentLineContentIs('export { x, y as yy, z } from "bar"'); + +goTo.marker("exportOpenBrace"); +verify.currentLineContentIs("export {"); +goTo.marker("exportSpecifier1"); +verify.currentLineContentIs(" x,"); +goTo.marker("exportSpecifier2"); +verify.currentLineContentIs(" y as yy, z"); +goTo.marker("exportCloseBrace"); +verify.currentLineContentIs("}"); +goTo.marker("fromKeywordAutoformat"); +verify.currentLineContentIs(" from"); +goTo.marker("fromKeywordIndent"); +verify.indentationIs(4); +goTo.marker("exportDir"); +verify.currentLineContentIs(' "foo"'); + +goTo.marker("import1"); +verify.currentLineContentIs('import { x, y as yy, z } from "baz"'); + +goTo.marker("importOpenBrace"); +verify.currentLineContentIs("import {"); +goTo.marker("importSpecifier1"); +verify.currentLineContentIs(" x,"); +goTo.marker("importSpecifier2"); +verify.currentLineContentIs(" as yy,"); +goTo.marker("importCloseBrace"); +verify.currentLineContentIs("}"); +goTo.marker("importDir"); +verify.currentLineContentIs(' from "wow"'); + +goTo.marker("formatOnEnter"); +edit.insertLine(''); +goTo.marker("formatOnEnterOpenBrace"); +verify.currentLineContentIs("{"); +goTo.marker("differentLineIndent"); +verify.indentationIs(4); +edit.insertLine(''); +goTo.marker("differentLineAutoformat"); +verify.currentLineContentIs(" x"); + +goTo.marker("incompleteExportDeclIndent") +verify.indentationIs(4); +edit.insert("} from"); +goTo.marker("incompleteExportDeclIndent2"); +verify.indentationIs(4); \ No newline at end of file diff --git a/tests/cases/fourslash/formatWithBaseIndent.ts b/tests/cases/fourslash/formatWithBaseIndent.ts new file mode 100644 index 00000000000..660131996c9 --- /dev/null +++ b/tests/cases/fourslash/formatWithBaseIndent.ts @@ -0,0 +1,264 @@ +/// + +//// +/////*1*/ module classes { +/////*2*/ class Bar { +//// +/////*3*/ constructor() { +/////*4*/ } +//// +/////*5*/private foo: string = ""; +//// +/////*6*/ private f() { +/////*7*/ var a: any[] = [[1, 2], [3, 4], 5]; +/////*8*/ return ((1 + 1)); +/////*9*/ } +//// +/////*10*/ private f2() { +/////*11*/ if (true) { } { }; +/////*12*/ } +/////*13*/ } +/////*14*/ } +//// +//// +/////*15*/ module interfaces { +/////*16*/ interface Foo { +//// +/////*17*/ x: number; +//// +/////*18*/ foo(): number; +/////*19*/ } +/////*20*/ } +//// +//// +/////*21*/ module nestedModules { +/////*22*/ module Foo2 { +/////*23*/ function f() { +/////*24*/ } +/////*25*/ var x: number; +/////*26*/} +/////*27*/ } +//// +//// +/////*28*/ module Enums { +/////*29*/ enum Foo3 { +/////*30*/ val1 , +/////*31*/ val2, +/////*32*/ } +/////*33*/ } +//// +//// +/////*34*/ function controlStatements() { +/////*35*/ for (var i = 0; i < 10; i++) { +/////*36*/ } +//// +/////*37*/ for (var e in foo.bar) { +/////*38*/ } +//// +/////*39*/with (foo.bar) { +/////*40*/ } +//// +/////*41*/ while (false) { +/////*42*/ } +//// +/////*43*/ do { +/////*44*/ } while (false); +//// +/////*45*/ switch (foo.bar) { +/////*46*/ } +//// +/////*47*/ switch (foo.bar) { +/////*48*/ case 1: +/////*49*/ break; +/////*50*/ default: +/////*51*/ break; +/////*52*/ } +/////*53*/ } +//// +//// +/////*54*/ function tryCatch() { +/////*55*/try { +/////*56*/} +/////*57*/catch (err) { +/////*58*/ } +/////*59*/ } +//// +//// +/////*60*/ function tryFinally() { +/////*61*/ try { +/////*62*/ } +/////*63*/ finally { +/////*64*/ } +/////*65*/ } +//// +//// +/////*66*/ function tryCatchFinally() { +/////*67*/ try { +/////*68*/ } +/////*69*/ catch (err) { +/////*70*/ } +/////*71*/ finally { +/////*72*/ } +/////*73*/ } +//// +//// +/////*74*/ class indentBeforeCurly +/////*75*/ { +/////*76*/ } +//// +//// +/////*77*/ function argumentsListIndentation(bar, +/////*78*/ blah, +/////*79*/ ); +//// +//// +/////*80*/ function blockIndentAfterIndentedParameter1(bar, +/////*81*/ blah) { +/////*82*/ } +//// +//// +/////*83*/ function blockIndentAfterIndentedParameter2(bar, +/////*84*/ blah) { +/////*85*/ if (foo) { +/////*86*/ } +/////*87*/} +//// +/////*88*/ var templateLiterals = `abcdefghi +/////*89*/jklmnop +/////*90*/qrstuvwxyz`; + +var originalOptions = format.copyFormatOptions(); +var copy = format.copyFormatOptions(); +copy.BaseIndentSize = 10; +copy.IndentSize = 4; + +format.setFormatOptions(copy); +format.document(); + +verify.currentFileContentIs(` + module classes { + class Bar { + + constructor() { + } + + private foo: string = ""; + + private f() { + var a: any[] = [[1, 2], [3, 4], 5]; + return ((1 + 1)); + } + + private f2() { + if (true) { } { }; + } + } + } + + + module interfaces { + interface Foo { + + x: number; + + foo(): number; + } + } + + + module nestedModules { + module Foo2 { + function f() { + } + var x: number; + } + } + + + module Enums { + enum Foo3 { + val1, + val2, + } + } + + + function controlStatements() { + for (var i = 0; i < 10; i++) { + } + + for (var e in foo.bar) { + } + + with (foo.bar) { + } + + while (false) { + } + + do { + } while (false); + + switch (foo.bar) { + } + + switch (foo.bar) { + case 1: + break; + default: + break; + } + } + + + function tryCatch() { + try { + } + catch (err) { + } + } + + + function tryFinally() { + try { + } + finally { + } + } + + + function tryCatchFinally() { + try { + } + catch (err) { + } + finally { + } + } + + + class indentBeforeCurly { + } + + + function argumentsListIndentation(bar, + blah, + ); + + + function blockIndentAfterIndentedParameter1(bar, + blah) { + } + + + function blockIndentAfterIndentedParameter2(bar, + blah) { + if (foo) { + } + } + + var templateLiterals = \`abcdefghi +jklmnop +qrstuvwxyz\`;`); + +format.setFormatOptions(originalOptions); \ No newline at end of file diff --git a/tests/cases/fourslash/formattingIllegalImportClause.ts b/tests/cases/fourslash/formattingIllegalImportClause.ts new file mode 100644 index 00000000000..9e97087c000 --- /dev/null +++ b/tests/cases/fourslash/formattingIllegalImportClause.ts @@ -0,0 +1,26 @@ +/// + +//// var expect = require('expect.js'); +//// import React from 'react'/*1*/; +//// import { mount } from 'enzyme'; +//// require('../setup'); +//// var Amount = require('../../src/js/components/amount'); + +//// describe('', () => { +//// var history +//// beforeEach(() => { +//// history = createMemoryHistory(); +//// sinon.spy(history, 'pushState'); +//// }); + +//// afterEach(() => { +//// }) + +//// it('redirects to order summary', () => { + +//// }); +//// }); + +format.document(); +goTo.marker("1"); +verify.currentLineContentIs("import React from 'react';") \ No newline at end of file diff --git a/tests/cases/fourslash/formattingJsxElements.ts b/tests/cases/fourslash/formattingJsxElements.ts index fbe4bb5d29e..e07149960db 100644 --- a/tests/cases/fourslash/formattingJsxElements.ts +++ b/tests/cases/fourslash/formattingJsxElements.ts @@ -9,7 +9,7 @@ ////
//// ) ////} -//// +//// ////function foo1() { //// return ( ////
@@ -45,8 +45,8 @@ //// class3= {/*5*/ //// }/>/*6*/ //// ) -////} -//// +////} +//// ////(function () { //// return
/*grandchildJsxElementAutoformat*/ /////*containedClosingTagAutoformat*/ -//// +////; +//// +////
,{integer}
;/*commaInJsxElement*/ +////
, {integer}
;/*commaInJsxElement2*/ +////);/*closingParenInJsxElement*/ +////) ;/*closingParenInJsxElement2*/ +////;/*jsxExpressionSpaces*/ +////;/*jsxExpressionSpaces2*/ format.document(); goTo.marker("autoformat"); @@ -114,7 +121,7 @@ verify.indentationIs(12); goTo.marker("danglingBracketAutoformat") // TODO: verify.currentLineContentIs(" >"); -verify.currentLineContentIs(" >"); +verify.currentLineContentIs(" >"); goTo.marker("closingTagAutoformat"); verify.currentLineContentIs("
"); @@ -125,4 +132,17 @@ verify.indentationIs(8); goTo.marker("grandchildJsxElementAutoformat"); verify.currentLineContentIs(" "); goTo.marker("containedClosingTagAutoformat"); -verify.currentLineContentIs(" "); \ No newline at end of file +verify.currentLineContentIs(" "); + +goTo.marker("commaInJsxElement"); +verify.currentLineContentIs("
,{integer}
;"); +goTo.marker("commaInJsxElement2"); +verify.currentLineContentIs("
, {integer}
;"); +goTo.marker("closingParenInJsxElement"); +verify.currentLineContentIs(");"); +goTo.marker("closingParenInJsxElement2"); +verify.currentLineContentIs(") ;"); +goTo.marker("jsxExpressionSpaces"); +verify.currentLineContentIs(";"); +goTo.marker("jsxExpressionSpaces2"); +verify.currentLineContentIs(";"); \ No newline at end of file diff --git a/tests/cases/fourslash/formattingOptionsChangeJsx.ts b/tests/cases/fourslash/formattingOptionsChangeJsx.ts new file mode 100644 index 00000000000..a3c7e28a1ef --- /dev/null +++ b/tests/cases/fourslash/formattingOptionsChangeJsx.ts @@ -0,0 +1,32 @@ +/// + +//@Filename: file.tsx +/////*InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces*/; + +runTest("InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces", ";", ";"); + + +function runTest(propertyName: string, expectedStringWhenTrue: string, expectedStringWhenFalse: string) { + // Go to the correct file + goTo.marker(propertyName); + + // Set the option to false first + format.setOption(propertyName, false); + + // Format + format.document(); + + // Verify + goTo.marker(propertyName); + verify.currentLineContentIs(expectedStringWhenFalse); + + // Set the option to true + format.setOption(propertyName, true); + + // Format + format.document(); + + // Verify + goTo.marker(propertyName); + verify.currentLineContentIs(expectedStringWhenTrue); +} \ No newline at end of file diff --git a/tests/cases/fourslash/formattingTemplatesWithNewline.ts b/tests/cases/fourslash/formattingTemplatesWithNewline.ts new file mode 100644 index 00000000000..20654f3f963 --- /dev/null +++ b/tests/cases/fourslash/formattingTemplatesWithNewline.ts @@ -0,0 +1,9 @@ +/// + +////`${1}`; +////` +////`;/**/1 + +goTo.marker(); +edit.insert('\n'); +verify.currentLineContentIs("1"); diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 78de5b02358..a7f353fdebb 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -68,6 +68,7 @@ declare namespace FourSlashInterface { data?: any; } interface EditorOptions { + BaseIndentSize?: number, IndentSize: number; TabSize: number; NewLineCharacter: string; @@ -84,7 +85,7 @@ declare namespace FourSlashInterface { InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean; PlaceOpenBraceOnNewLineForFunctions: boolean; PlaceOpenBraceOnNewLineForControlBlocks: boolean; - [s: string]: boolean | number | string; + [s: string]: boolean | number | string | undefined; } interface Range { fileName: string; @@ -100,6 +101,7 @@ declare namespace FourSlashInterface { markers(): Marker[]; marker(name?: string): Marker; ranges(): Range[]; + rangesByText(): { [text: string]: Range[] }; markerByName(s: string): Marker; } class goTo { @@ -124,8 +126,6 @@ declare namespace FourSlashInterface { completionListIsEmpty(): void; completionListAllowsNewIdentifier(): void; memberListIsEmpty(): void; - referencesCountIs(count: number): void; - referencesAtPositionContains(range: Range, isWriteAccess?: boolean, isDefinition?: boolean): void; signatureHelpPresent(): void; errorExistsBetweenMarkers(startMarker: string, endMarker: string): void; errorExistsAfterMarker(markerName?: string): void; @@ -136,13 +136,13 @@ declare namespace FourSlashInterface { typeDefinitionCountIs(expectedCount: number): void; definitionLocationExists(): void; verifyDefinitionsName(name: string, containerName: string): void; - isValidBraceCompletionAtPostion(openingBrace?: string): void; + isValidBraceCompletionAtPosition(openingBrace?: string): void; } class verify extends verifyNegatable { assertHasRanges(ranges: Range[]): void; caretAtMarker(markerName?: string): void; indentationIs(numberOfSpaces: number): void; - indentationAtPositionIs(fileName: string, position: number, numberOfSpaces: number, indentStyle?: ts.IndentStyle): void; + indentationAtPositionIs(fileName: string, position: number, numberOfSpaces: number, indentStyle?: ts.IndentStyle, baseIndentSize?: number): void; textAtCaretIs(text: string): void; /** * Compiles the current file and evaluates 'expr' in a context containing @@ -154,6 +154,25 @@ declare namespace FourSlashInterface { currentFileContentIs(text: string): void; verifyGetEmitOutputForCurrentFile(expected: string): void; verifyGetEmitOutputContentsForCurrentFile(expected: ts.OutputFile[]): void; + referencesCountIs(count: number): void; + /** + * Asserts that the given ranges are the references from the current position. + * If ranges have markers, those markers may have "isDefinition" and "isWriteAccess" data + * (otherwise these properties pf the reference are not tested). + * Order of ranges does not matter. + */ + referencesAre(ranges: Range[]): void; + /** + * Like `referencesAre`, but goes to `start` first. + * `start` should be included in `references`. + */ + referencesOf(start: Range, references: Range[]): void; + /** + * Performs `referencesOf` for every range on the whole set. + * If `ranges` is omitted, this is `test.ranges()`. + */ + rangesReferenceEachOther(ranges?: Range[]): void; + rangesWithSameTextReferenceEachOther(): void; currentParameterHelpArgumentNameIs(name: string): void; currentParameterSpanIs(parameter: string): void; currentParameterHelpArgumentDocCommentIs(docComment: string): void; @@ -200,7 +219,7 @@ declare namespace FourSlashInterface { }[]): void; renameInfoSucceeded(displayName?: string, fullDisplayName?: string, kind?: string, kindModifiers?: string): void; renameInfoFailed(message?: string): void; - renameLocations(findInStrings: boolean, findInComments: boolean): void; + renameLocations(findInStrings: boolean, findInComments: boolean, ranges?: Range[]): void; verifyQuickInfoDisplayParts(kind: string, kindModifiers: string, textSpan: { start: number; length: number; diff --git a/tests/cases/fourslash/getJavaScriptSemanticDiagnostics18.ts b/tests/cases/fourslash/getJavaScriptSemanticDiagnostics18.ts index fdaafa9aa51..707d1537fc5 100644 --- a/tests/cases/fourslash/getJavaScriptSemanticDiagnostics18.ts +++ b/tests/cases/fourslash/getJavaScriptSemanticDiagnostics18.ts @@ -2,14 +2,35 @@ // @allowJs: true // @Filename: a.js -//// class C { v } +////class C { +//// x; // Regular property declaration allowed +//// static y; // static allowed +//// public z; // public not allowed +////} +goTo.file("a.js"); verify.getSemanticDiagnostics(`[ { - "message": "'property declarations' can only be used in a .ts file.", - "start": 10, - "length": 1, + "message": "\'public\' can only be used in a .ts file.", + "start": 93, + "length": 6, "category": "error", - "code": 8014 + "code": 8009 } -]`); \ No newline at end of file +]`); + +// @Filename: b.js +////class C { +//// x: number; // Types not allowed +////} + +goTo.file("b.js"); +verify.getSemanticDiagnostics(`[ + { + "message": "'types' can only be used in a .ts file.", + "start": 17, + "length": 6, + "category": "error", + "code": 8010 + } +]`); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts index eb9980c946d..57b4c14ffba 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts @@ -1,8 +1,5 @@ /// ////var [|{| "isDefinition": true |}f|] = x => x + 1; ////[|{| "isDefinition": false |}f|](12); -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts index 9a30687c59e..e60921ec3b8 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts @@ -1,8 +1,5 @@ /// ////const { [|{| "isDefinition": true |}x|], y } = { x: 1, y: 2 }; ////const z = [|{| "isDefinition": false |}x|]; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts index 04b1f90681a..0a3c2e4231c 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts @@ -6,8 +6,5 @@ //// } ////} ////let c = new [|{| "isDefinition": false |}C|](); -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts index 8896694db50..81df97eff2d 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts @@ -1,9 +1,7 @@ /// -////let o = { ["[|{| "isDefinition": true |}foo|]"]: 12 }; +////let o = { ["/**/[|{| "isDefinition": true |}foo|]"]: 12 }; ////let y = o.[|{| "isDefinition": false |}foo|]; ////let z = o['[|{| "isDefinition": false |}foo|]']; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +goTo.marker(); +verify.referencesAre(test.ranges()); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts index a5764206bce..5b77bf6158a 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts @@ -4,8 +4,5 @@ //// Second ////} ////let first = [|{| "isDefinition": false |}E|].First; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts index f863af9184f..759df4fa383 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts @@ -4,8 +4,5 @@ // @Filename: main.ts ////import { [|{| "isDefinition": true |}x|] } from "./m"; ////const y = [|{| "isDefinition": false |}x|]; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts index 456d953092d..357ef088d61 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts @@ -2,8 +2,5 @@ ////function [|{| "isDefinition": true |}func|](x: number) { ////} ////[|{| "isDefinition": false |}func|](x) -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts index 51d1e858185..b7117995d84 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts @@ -3,8 +3,5 @@ //// p: number; ////} ////let i: [|{| "isDefinition": false |}I|] = { p: 12 }; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts index 7efefa17a4b..b0506490c70 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts @@ -12,8 +12,5 @@ ////} ////let i: [|{| "isDefinition": false |}Numbers|] = new [|{| "isDefinition": false |}Numbers|](); ////let x = i.f(i.p + i.m); -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts index 86b92ec9ce7..ff1cf00fa9b 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts @@ -3,8 +3,5 @@ //// export var n = 12; ////} ////let x = [|{| "isDefinition": false |}Numbers|].n + 1; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts index 7e3e084948f..a041dab435a 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts @@ -1,8 +1,5 @@ /// ////let o = { [|{| "isDefinition": true |}1|]: 12 }; ////let y = o[[|{| "isDefinition": false |}1|]]; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts index cdb0e281d53..cdcc47014fd 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts @@ -2,8 +2,5 @@ ////function f([|{| "isDefinition": true |}x|]: number) { //// return [|{| "isDefinition": false |}x|] + 1 ////} -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts index 291aec90dda..383cf49a2e3 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts @@ -1,8 +1,5 @@ /// ////let o = { "[|{| "isDefinition": true |}x|]": 12 }; ////let y = o.[|{| "isDefinition": false |}x|]; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts index 44a7c64a93a..2bd66830c69 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts @@ -1,8 +1,5 @@ /// ////type [|{| "isDefinition": true |}Alias|]= number; ////let n: [|{| "isDefinition": false |}Alias|] = 12; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts index 8d046c67e3a..78529186ad3 100644 --- a/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts @@ -16,8 +16,5 @@ //// ////[|{| "isDefinition": false |}x|] += 1; ////[|{| "isDefinition": false |}x|] <<= 1; -var firstRange = test.ranges()[0]; -goTo.position(firstRange.start, firstRange.fileName); -test.ranges().forEach(range => { - verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); -}); + +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/goToDefinitionThis.ts b/tests/cases/fourslash/goToDefinitionThis.ts new file mode 100644 index 00000000000..300e3423d81 --- /dev/null +++ b/tests/cases/fourslash/goToDefinitionThis.ts @@ -0,0 +1,20 @@ +/// + +// @noLib: true +////function f(/*fnDecl*/this: number) { +//// return /*fnUse*/this; +////} +/////*cls*/class C { +//// constructor() { return /*clsUse*/this; } +//// get self(/*getterDecl*/this: number) { return /*getterUse*/this; } +////} + +function verifyDefinition(a, b) { + goTo.marker(a); + goTo.definition(); + verify.caretAtMarker(b); +} + +verifyDefinition("fnUse", "fnDecl"); +verifyDefinition("clsUse", "cls"); +verifyDefinition("getterUse", "getterDecl"); diff --git a/tests/cases/fourslash/hoverOverComment.ts b/tests/cases/fourslash/hoverOverComment.ts index a9549a932f7..c0e585ca3b6 100644 --- a/tests/cases/fourslash/hoverOverComment.ts +++ b/tests/cases/fourslash/hoverOverComment.ts @@ -8,4 +8,4 @@ goTo.marker(); verify.quickInfoIs(""); verify.verifyDefinitionsName("", ""); verify.typeDefinitionCountIs(0); -verify.referencesCountIs(0); +verify.referencesAre([]); diff --git a/tests/cases/fourslash/importJsNodeModule1.ts b/tests/cases/fourslash/importJsNodeModule1.ts new file mode 100644 index 00000000000..2c4b6352cb0 --- /dev/null +++ b/tests/cases/fourslash/importJsNodeModule1.ts @@ -0,0 +1,18 @@ +/// + +// @allowJs: true +// @Filename: node_modules/myMod/index.js +//// module.exports = { n: 3, s: 'foo', b: true }; + +// @Filename: consumer.js +//// var x = require('myMod'); +//// x/**/; + +goTo.file('consumer.js'); +goTo.marker(); +edit.insert('.'); +verify.completionListContains("n", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +verify.completionListContains("s", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +verify.completionListContains("b", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +edit.insert('n.'); +verify.completionListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method"); diff --git a/tests/cases/fourslash/importJsNodeModule2.ts b/tests/cases/fourslash/importJsNodeModule2.ts new file mode 100644 index 00000000000..c8b7c479ddf --- /dev/null +++ b/tests/cases/fourslash/importJsNodeModule2.ts @@ -0,0 +1,23 @@ +/// + +// @allowJs: true + +// @Filename: node_modules/myMod/package.json +//// {"main": "entry.js"} + + +// @Filename: node_modules/myMod/entry.js +//// module.exports = { n: 3, s: 'foo', b: true }; + +// @Filename: consumer.js +//// var x = require('myMod'); +//// x/**/; + +goTo.file('consumer.js'); +goTo.marker(); +edit.insert('.'); +verify.completionListContains("n", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +verify.completionListContains("s", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +verify.completionListContains("b", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +edit.insert('n.'); +verify.completionListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method"); diff --git a/tests/cases/fourslash/importJsNodeModule3.ts b/tests/cases/fourslash/importJsNodeModule3.ts new file mode 100644 index 00000000000..b790d351a1f --- /dev/null +++ b/tests/cases/fourslash/importJsNodeModule3.ts @@ -0,0 +1,38 @@ +/// + +// @allowJs: true + +// @Filename: node_modules/myMod/index.js +//// exports.n = 3; +//// exports.s = 'foo'; +//// exports.b = true; + +// @Filename: node_modules/anotherMod/index.js +//// exports.x = 3; +//// exports.y = 'foo'; +//// /** +//// * @param {(number | boolean)} a The first param +//// * @param {Array} b The second param +//// */ +//// exports.z = function(a,b){ return "test"; }; + +// @Filename: consumer.js +//// import * as x from 'myMod'; +//// import {y,z} from 'anotherMod'; +//// x/**/; + +goTo.file('consumer.js'); +goTo.marker(); +edit.insert('.'); +verify.completionListContains("n", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +verify.completionListContains("s", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +verify.completionListContains("b", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +edit.insert('n.'); +verify.completionListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method"); + +edit.backspace(4); +edit.insert('y.'); +verify.completionListContains("toUpperCase", /*displayText:*/ undefined, /*documentation*/ undefined, "method"); +edit.backspace(2); +edit.insert('z('); +verify.currentSignatureHelpIs("z(a: number | boolean, b: string[]): string"); diff --git a/tests/cases/fourslash/importJsNodeModule4.ts b/tests/cases/fourslash/importJsNodeModule4.ts new file mode 100644 index 00000000000..917bea35842 --- /dev/null +++ b/tests/cases/fourslash/importJsNodeModule4.ts @@ -0,0 +1,19 @@ +/// + +// @allowJs: true + +// @Filename: node_modules/myMod/index.js +//// module.exports = { n: 3, s: 'foo', b: true }; + +// @Filename: consumer.js +//// import * as x from 'myMod'; +//// x/**/; + +goTo.file('consumer.js'); +goTo.marker(); +edit.insert('.'); +verify.completionListContains("n", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +verify.completionListContains("s", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +verify.completionListContains("b", /*displayText:*/ undefined, /*documentation*/ undefined, "property"); +edit.insert('n.'); +verify.completionListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method"); diff --git a/tests/cases/fourslash/indentationWithBaseIndent.ts b/tests/cases/fourslash/indentationWithBaseIndent.ts new file mode 100644 index 00000000000..53ee01c9a3c --- /dev/null +++ b/tests/cases/fourslash/indentationWithBaseIndent.ts @@ -0,0 +1,211 @@ +/// + +//// +////{| "indent": 10 , "baseIndentSize": 10 |} +//// module classes { +////{| "indent": 14 , "baseIndentSize": 10 |} +//// class Bar { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// +//// constructor() { +////{| "indent": 22, "baseIndentSize": 10 |} +//// } +//// +//// private foo: string = ""; +////{| "indent": 18, "baseIndentSize": 10 |} +//// +//// private f() { +//// var a: any[] = [[1, 2], [3, 4], 5]; +////{| "indent": 22, "baseIndentSize": 10 |} +//// return ((1 + 1)); +//// } +//// +////{| "indent": 18, "baseIndentSize": 10 |} +//// private f2() { +//// if (true) { } { }; +//// } +//// } +//// } +//// +//// +//// module interfaces { +////{| "indent": 14 , "baseIndentSize": 10 |} +//// interface Foo { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// +//// x: number; +////{| "indent": 18 , "baseIndentSize": 10 |} +//// +//// foo(): number; +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +//// } +//// +//// +//// module nestedModules { +//// module Foo2 { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// function f() { +//// } +////{| "indent": 18 , "baseIndentSize": 10 |} +//// var x: number; +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +//// } +//// +//// +//// module Enums { +//// enum Foo3 { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// val1, +////{| "indent": 18 , "baseIndentSize": 10 |} +//// val2, +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +////{| "indent": 14 , "baseIndentSize": 10 |} +//// } +//// +//// +//// function controlStatements() { +//// for (var i = 0; i < 10; i++) { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +//// +//// for (var e in foo.bar) { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +//// +//// with (foo.bar) { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +//// +//// while (false) { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +//// +//// do { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } while (false); +//// +//// switch (foo.bar) { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +//// +//// switch (foo.bar) { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// case 1: +////{| "indent": 22 , "baseIndentSize": 10 |} +//// break; +//// default: +////{| "indent": 22 , "baseIndentSize": 10 |} +//// break; +//// } +//// } +//// +//// +//// function tryCatch() { +////{| "indent": 14 , "baseIndentSize": 10 |} +//// try { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +////{| "indent": 14 , "baseIndentSize": 10 |} +//// catch (err) { +////{| "indent": 18, "baseIndentSize": 10 |} +//// } +////{| "indent": 14, "baseIndentSize": 10 |} +//// } +//// +//// +//// function tryFinally() { +////{| "indent": 14 , "baseIndentSize": 10 |} +//// try { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +////{| "indent": 14 , "baseIndentSize": 10 |} +//// finally { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +////{| "indent": 14 , "baseIndentSize": 10 |} +//// } +//// +//// +//// function tryCatchFinally() { +////{| "indent": 14 , "baseIndentSize": 10 |} +//// try { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +////{| "indent": 14 , "baseIndentSize": 10 |} +//// catch (err) { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +////{| "indent": 14 , "baseIndentSize": 10 |} +//// finally { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +////{| "indent": 14 , "baseIndentSize": 10 |} +//// } +//// +//// +//// class indentBeforeCurly +////{| "indent": 10 , "baseIndentSize": 10 |} +////{| "indent": 10 , "baseIndentSize": 10 |} +//// { +////{| "indent": 14 , "baseIndentSize": 10 |} +//// } +////{| "indent": 10 , "baseIndentSize": 10 |} +//// +//// +//// function argumentsListIndentation(bar, +//// blah, +//// {| "indent": 14 , "baseIndentSize": 10 |} +//// ); +//// +//// +//// function blockIndentAfterIndentedParameter1(bar, +//// blah) { +////{| "indent": 14 , "baseIndentSize": 10 |} +//// } +//// +//// +//// function blockIndentAfterIndentedParameter2(bar, +//// blah) { +//// if (foo) { +////{| "indent": 18 , "baseIndentSize": 10 |} +//// } +////} +////{| "indent": 10 , "baseIndentSize": 10 |} +//// +//// var templateLiterals = `abcdefghi +////{| "indent": 0 , "baseIndentSize": 10 |} +////jklmnop +////{| "indent": 0 , "baseIndentSize": 10 |} +////qrstuvwxyz`; +////{| "indent": 10 , "baseIndentSize": 10 |} +//// +//// +//// module changeBaseIndentSizeInSameFile { +////{| "indent": 21 , "baseIndentSize": 17 |} +//// interface Foo { +////{| "indent": 25 , "baseIndentSize": 17 |} +//// +//// x: number; +////{| "indent": 25 , "baseIndentSize": 10 |} +//// +//// foo(): number; +////{| "indent": 25 , "baseIndentSize": 10 |} +//// } +////{| "indent": 21 , "baseIndentSize": 10 |} +//// } +////{| "indent": 17 , "baseIndentSize": 17 |} +//// +//// +////// Note: Do not add more tests at the end of this file, as +////// the purpose of this test is to verify smart indent +////// works for unterminated function arguments at the end of a file. +//// function unterminatedListIndentation(a, +////{| "indent": 14 , "baseIndentSize": 10 |} + +debugger; +test.markers().forEach(marker => { + verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent, ts.IndentStyle.Smart, marker.data.baseIndentSize); +}); diff --git a/tests/cases/fourslash/jsxBraceCompletionPosition.ts b/tests/cases/fourslash/jsxBraceCompletionPosition.ts index c1c331435ce..91ee96cc5b7 100644 --- a/tests/cases/fourslash/jsxBraceCompletionPosition.ts +++ b/tests/cases/fourslash/jsxBraceCompletionPosition.ts @@ -19,29 +19,29 @@ ////
goTo.marker('1'); -verify.not.isValidBraceCompletionAtPostion('('); -verify.isValidBraceCompletionAtPostion('{'); +verify.not.isValidBraceCompletionAtPosition('('); +verify.isValidBraceCompletionAtPosition('{'); goTo.marker('2'); -verify.not.isValidBraceCompletionAtPostion('('); -verify.not.isValidBraceCompletionAtPostion('{'); +verify.not.isValidBraceCompletionAtPosition('('); +verify.not.isValidBraceCompletionAtPosition('{'); goTo.marker('3'); -verify.not.isValidBraceCompletionAtPostion('('); -verify.isValidBraceCompletionAtPostion('{'); +verify.not.isValidBraceCompletionAtPosition('('); +verify.isValidBraceCompletionAtPosition('{'); goTo.marker('4'); -verify.not.isValidBraceCompletionAtPostion('('); -verify.isValidBraceCompletionAtPostion('{'); +verify.not.isValidBraceCompletionAtPosition('('); +verify.isValidBraceCompletionAtPosition('{'); goTo.marker('5'); -verify.not.isValidBraceCompletionAtPostion('('); -verify.isValidBraceCompletionAtPostion('{'); +verify.not.isValidBraceCompletionAtPosition('('); +verify.isValidBraceCompletionAtPosition('{'); goTo.marker('6'); -verify.not.isValidBraceCompletionAtPostion('('); -verify.isValidBraceCompletionAtPostion('{'); +verify.not.isValidBraceCompletionAtPosition('('); +verify.isValidBraceCompletionAtPosition('{'); goTo.marker('7'); -verify.not.isValidBraceCompletionAtPostion('('); -verify.isValidBraceCompletionAtPostion('{'); \ No newline at end of file +verify.not.isValidBraceCompletionAtPosition('('); +verify.isValidBraceCompletionAtPosition('{'); \ No newline at end of file diff --git a/tests/cases/fourslash/localGetReferences.ts b/tests/cases/fourslash/localGetReferences.ts index e5873efeeb4..ada4947acde 100644 --- a/tests/cases/fourslash/localGetReferences.ts +++ b/tests/cases/fourslash/localGetReferences.ts @@ -2,35 +2,39 @@ // @Filename: localGetReferences_1.ts ////// Comment Refence Test: g/*1*/lobalVar -////var g/*3*/lobalVar: n/*2*/umber = 2; +////// References to a variable declared in global. +////var [|globalVar|]: n/*2*/umber = 2; //// ////class fooCls { -//// static clsS/*5*/Var = 1; -//// //Declare -//// cls/*4*/Var = 1; +//// // References to static variable declared in a class. +//// static [|clsSVar|] = 1; +//// // References to a variable declared in a class. +//// [|clsVar|] = 1; //// -//// constructor (public clsParam: number) { +//// constructor (public [|clsParam|]: number) { //// //Increments -//// globalVar++; -//// this.clsVar++; -//// fooCls.clsSVar++; -//// this.cls/*7*/Param++; +//// [|globalVar|]++; +//// this.[|clsVar|]++; +//// fooCls.[|clsSVar|]++; +//// // References to a class parameter. +//// this.[|clsParam|]++; //// modTest.modVar++; //// } ////} //// -////function foo(/*8*/x: number) { -//// //Declare -//// var fn/*6*/Var = 1; +////// References to a function parameter. +////function [|foo|]([|x|]: number) { +//// // References to a variable declared in a function. +//// var [|fnVar|] = 1; //// //// //Increments -//// fooCls.clsSVar++; -//// globalVar++; +//// fooCls.[|clsSVar|]++; +//// [|globalVar|]++; //// modTest.modVar++; -//// fnVar++; +//// [|fnVar|]++; //// //// //Return -//// return x++; +//// return [|x|]++; ////} //// ////module modTest { @@ -38,25 +42,25 @@ //// export var modVar:number; //// //// //Increments -//// globalVar++; -//// fooCls.clsSVar++; +//// [|globalVar|]++; +//// fooCls.[|clsSVar|]++; //// modVar++; //// //// class testCls { -//// static boo = foo; +//// static boo = [|foo|]; //// } //// //// function testFn(){ -//// static boo = foo; +//// static boo = [|foo|]; //// //// //Increments -//// globalVar++; -//// fooCls.clsSVar++; +//// [|globalVar|]++; +//// fooCls.[|clsSVar|]++; //// modVar++; //// } //// //// module testMod { -//// var boo = foo; +//// var boo = [|foo|]; //// } ////} //// @@ -64,24 +68,27 @@ ////var clsTest: fooCls; //// //////Arguments -////clsTest = new fooCls(globalV/*10*/ar); -////foo(glo/*9*/balVar); +////// References to a class argument. +////clsTest = new fooCls([|globalVar|]); +////// References to a function argument. +////[|foo|]([|globalVar|]); //// //////Increments -////fooCls.clsSVar++; +////fooCls.[|clsSVar|]++; ////modTest.modVar++; -////globalVar = globalVar + globalVar; +////[|globalVar|] = [|globalVar|] + [|globalVar|]; //// //////ETC - Other cases -////globalVar = 3; -/////*11*/foo = foo + 1; -/////*12*/err = err++; -/////*13*/ +////[|globalVar|] = 3; +////// References to illegal assignment. +////[|foo|] = [|foo|] + 1; +/////*3*/err = err++; +/////*4*/ //////Shadowed fn Parameter -////function shdw(globa/*14*/lVar: number) { +////function shdw([|{| "shadow": true |}globalVar|]: number) { //// //Increments -//// globalVar++; -//// return globalVar; +//// [|{| "shadow": true |}globalVar|]++; +//// return [|{| "shadow": true |}globalVar|]; ////} //// //////Remotes @@ -110,11 +117,12 @@ ////array.forEach( //// //// -////function(str) { +////function([|str|]) { //// //// //// -//// return /*15*/str + " "; +//// // Reference misses function parameter. +//// return [|str|] + " "; //// ////}); @@ -162,7 +170,7 @@ //// class remotetestCls { //// static remoteboo = remotefoo; //// } -//// +////` //// function remotetestFn(){ //// static remoteboo = remotefoo; //// @@ -179,60 +187,30 @@ // References to comment. goTo.marker("1"); -verify.referencesCountIs(0); +verify.referencesAre([]); // References to type. goTo.marker("2"); -verify.referencesCountIs(0); - -// References to a variable declared in global. -goTo.marker("3"); -verify.referencesCountIs(11); - -// References to a variable declared in a class. -goTo.marker("4"); -verify.referencesCountIs(2); - -// References to static variable declared in a class. -goTo.marker("5"); -verify.referencesCountIs(6); - -// References to a variable declared in a function. -goTo.marker("6"); -verify.referencesCountIs(2); - -// References to a class parameter. -goTo.marker("7"); -verify.referencesCountIs(2); - -// References to a function parameter. -goTo.marker("8"); -verify.referencesCountIs(2); - -// References to a function argument. -goTo.marker("9"); -verify.referencesCountIs(11); - -// References to a class argument. -goTo.marker("10"); -verify.referencesCountIs(11); - -// References to illegal assignment. -goTo.marker("11"); -verify.referencesCountIs(7); +verify.referencesAre([]); // References to unresolved symbol. -goTo.marker("12"); -verify.referencesCountIs(0); +goTo.marker("3"); +verify.referencesAre([]); // References to no context. -goTo.marker("13"); -verify.referencesCountIs(0); +goTo.marker("4"); +verify.referencesAre([]); -// References to shadowed function parameter. -goTo.marker("14"); -verify.referencesCountIs(3); - -// Reference misses function parameter. -goTo.marker("15"); -verify.referencesCountIs(2); \ No newline at end of file +const rangesByText = test.rangesByText(); +for (const text in rangesByText) { + const ranges = rangesByText[text]; + if (text === "globalVar") { + function isShadow(r) { + return r.marker && r.marker.data && r.marker.data.shadow; + } + verify.rangesReferenceEachOther(ranges.filter(isShadow)); + verify.rangesReferenceEachOther(ranges.filter(r => !isShadow(r))); + } else { + verify.rangesReferenceEachOther(ranges); + } +} diff --git a/tests/cases/fourslash/navbar_contains-no-duplicates.ts b/tests/cases/fourslash/navbar_contains-no-duplicates.ts index e259a7bef90..10e4027ff84 100644 --- a/tests/cases/fourslash/navbar_contains-no-duplicates.ts +++ b/tests/cases/fourslash/navbar_contains-no-duplicates.ts @@ -7,7 +7,7 @@ //// } //// } //// } -//// +//// //// declare module Windows { //// export module Foundation { //// export var B; @@ -16,13 +16,13 @@ //// } //// } //// } -//// +//// //// class ABC { //// public foo() { //// return 3; //// } //// } -//// +//// //// module ABC { //// export var x = 3; //// } @@ -95,13 +95,13 @@ verify.navigationBar([ "kindModifiers": "export,declare" }, { - "text": "Test", - "kind": "class", + "text": "B", + "kind": "var", "kindModifiers": "export,declare" }, { - "text": "B", - "kind": "var", + "text": "Test", + "kind": "class", "kindModifiers": "export,declare" }, { diff --git a/tests/cases/fourslash/navbar_exportDefault.ts b/tests/cases/fourslash/navbar_exportDefault.ts index dc99cff7d64..e547c9129a6 100644 --- a/tests/cases/fourslash/navbar_exportDefault.ts +++ b/tests/cases/fourslash/navbar_exportDefault.ts @@ -16,7 +16,14 @@ goTo.file("a.ts"); verify.navigationBar([ { "text": "\"a\"", - "kind": "module" + "kind": "module", + "childItems": [ + { + "text": "default", + "kind": "class", + "kindModifiers": "export" + } + ] }, { "text": "default", @@ -52,6 +59,13 @@ verify.navigationBar([ { "text": "\"c\"", "kind": "module", + "childItems": [ + { + "text": "default", + "kind": "function", + "kindModifiers": "export" + } + ] }, { "text": "default", diff --git a/tests/cases/fourslash/navigationBarAnonymousClassAndFunctionExpressions.ts b/tests/cases/fourslash/navigationBarAnonymousClassAndFunctionExpressions.ts new file mode 100644 index 00000000000..f15959812fc --- /dev/null +++ b/tests/cases/fourslash/navigationBarAnonymousClassAndFunctionExpressions.ts @@ -0,0 +1,147 @@ +/// + +////global.cls = class { }; +////(function() { +//// const x = () => { +//// // Presence of inner function causes x to be a top-level function. +//// function xx() {} +//// }; +//// const y = { +//// // This is not a top-level function (contains nothing, but shows up in childItems of its parent.) +//// foo: function() {} +//// }; +//// (function nest() { +//// function moreNest() {} +//// })(); +////})(); +////(function() { // Different anonymous functions are not merged +//// // These will only show up as childItems. +//// function z() {} +//// console.log(function() {}) +////}) +////(function classes() { +//// // Classes show up in top-level regardless of whether they have names or inner declarations. +//// const cls2 = class { }; +//// console.log(class cls3 {}); +//// (class { }); +////}) + +verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "", + "kind": "function" + }, + { + "text": "", + "kind": "function" + }, + { + "text": "classes", + "kind": "function" + }, + { + "text": "global.cls", + "kind": "class" + } + ] + }, + { + "text": "", + "kind": "function", + "childItems": [ + { + "text": "nest", + "kind": "function" + }, + { + "text": "x", + "kind": "function" + }, + { + "text": "y", + "kind": "const" + } + ], + "indent": 1 + }, + { + "text": "nest", + "kind": "function", + "childItems": [ + { + "text": "moreNest", + "kind": "function" + } + ], + "indent": 2 + }, + { + "text": "x", + "kind": "function", + "childItems": [ + { + "text": "xx", + "kind": "function" + } + ], + "indent": 2 + }, + { + "text": "", + "kind": "function", + "childItems": [ + { + "text": "", + "kind": "function" + }, + { + "text": "z", + "kind": "function" + } + ], + "indent": 1 + }, + { + "text": "classes", + "kind": "function", + "childItems": [ + { + "text": "", + "kind": "class" + }, + { + "text": "cls2", + "kind": "class" + }, + { + "text": "cls3", + "kind": "class" + } + ], + "indent": 1 + }, + { + "text": "", + "kind": "class", + "indent": 2 + }, + { + "text": "cls2", + "kind": "class", + "indent": 2 + }, + { + "text": "cls3", + "kind": "class", + "indent": 2 + }, + { + "text": "global.cls", + "kind": "class", + "indent": 1 + } +]); diff --git a/tests/cases/fourslash/navigationBarAnonymousClassAndFunctionExpressions2.ts b/tests/cases/fourslash/navigationBarAnonymousClassAndFunctionExpressions2.ts new file mode 100644 index 00000000000..214a14949ac --- /dev/null +++ b/tests/cases/fourslash/navigationBarAnonymousClassAndFunctionExpressions2.ts @@ -0,0 +1,64 @@ +/// + +////console.log(console.log(class Y {}, class X {}), console.log(class B {}, class A {})); +////console.log(class Cls { meth() {} }); + +verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "A", + "kind": "class" + }, + { + "text": "B", + "kind": "class" + }, + { + "text": "Cls", + "kind": "class" + }, + { + "text": "X", + "kind": "class" + }, + { + "text": "Y", + "kind": "class" + } + ] + }, + { + "text": "A", + "kind": "class", + "indent": 1 + }, + { + "text": "B", + "kind": "class", + "indent": 1 + }, + { + "text": "Cls", + "kind": "class", + "childItems": [ + { + "text": "meth", + "kind": "method" + } + ], + "indent": 1 + }, + { + "text": "X", + "kind": "class", + "indent": 1 + }, + { + "text": "Y", + "kind": "class", + "indent": 1 + } +]); diff --git a/tests/cases/fourslash/navigationBarGetterAndSetter.ts b/tests/cases/fourslash/navigationBarGetterAndSetter.ts new file mode 100644 index 00000000000..48105e4e9af --- /dev/null +++ b/tests/cases/fourslash/navigationBarGetterAndSetter.ts @@ -0,0 +1,48 @@ +/// + +////class X { +//// get x() {} +//// set x(value) { +//// // Inner declaration should make the setter top-level. +//// function f() {} +//// } +////} + +verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "X", + "kind": "class" + } + ] + }, + { + "text": "X", + "kind": "class", + "childItems": [ + { + "text": "x", + "kind": "getter" + }, + { + "text": "x", + "kind": "setter" + } + ], + "indent": 1 + }, + { + "text": "x", + "kind": "setter", + "childItems": [ + { + "text": "f", + "kind": "function" + } + ], + "indent": 2 + } +]); diff --git a/tests/cases/fourslash/navigationBarImports.ts b/tests/cases/fourslash/navigationBarImports.ts new file mode 100644 index 00000000000..43cb99c556a --- /dev/null +++ b/tests/cases/fourslash/navigationBarImports.ts @@ -0,0 +1,30 @@ +/// + +////import a, {b} from "m"; +////import c = require("m"); +////import * as d from "m"; + +verify.navigationBar([ + { + "text": "\"navigationBarImports\"", + "kind": "module", + "childItems": [ + { + "text": "a", + "kind": "alias" + }, + { + "text": "b", + "kind": "alias" + }, + { + "text": "c", + "kind": "alias" + }, + { + "text": "d", + "kind": "alias" + } + ] + } +]); diff --git a/tests/cases/fourslash/navigationBarItemsFunctions.ts b/tests/cases/fourslash/navigationBarItemsFunctions.ts index 91546462a25..f5aa3fb681d 100644 --- a/tests/cases/fourslash/navigationBarItemsFunctions.ts +++ b/tests/cases/fourslash/navigationBarItemsFunctions.ts @@ -32,6 +32,12 @@ verify.navigationBar([ { "text": "baz", "kind": "function", + "childItems": [ + { + "text": "v", + "kind": "var" + } + ], "indent": 1 }, { @@ -41,6 +47,10 @@ verify.navigationBar([ { "text": "bar", "kind": "function" + }, + { + "text": "x", + "kind": "var" } ], "indent": 1 @@ -52,6 +62,10 @@ verify.navigationBar([ { "text": "biz", "kind": "function" + }, + { + "text": "y", + "kind": "var" } ], "indent": 2 diff --git a/tests/cases/fourslash/navigationBarItemsFunctionsBroken.ts b/tests/cases/fourslash/navigationBarItemsFunctionsBroken.ts index 96dcbb944ae..2f17a5006ff 100644 --- a/tests/cases/fourslash/navigationBarItemsFunctionsBroken.ts +++ b/tests/cases/fourslash/navigationBarItemsFunctionsBroken.ts @@ -18,6 +18,12 @@ verify.navigationBar([ { "text": "f", "kind": "function", + "childItems": [ + { + "text": "", + "kind": "function" + } + ], "indent": 1 } ]); diff --git a/tests/cases/fourslash/navigationBarItemsFunctionsBroken2.ts b/tests/cases/fourslash/navigationBarItemsFunctionsBroken2.ts index 127bde8c9e7..f907bdad067 100644 --- a/tests/cases/fourslash/navigationBarItemsFunctionsBroken2.ts +++ b/tests/cases/fourslash/navigationBarItemsFunctionsBroken2.ts @@ -10,6 +10,10 @@ verify.navigationBar([ "text": "", "kind": "module", "childItems": [ + { + "text": "", + "kind": "function" + }, { "text": "f", "kind": "function" @@ -19,6 +23,12 @@ verify.navigationBar([ { "text": "f", "kind": "function", + "childItems": [ + { + "text": "", + "kind": "function" + } + ], "indent": 1 } ]); diff --git a/tests/cases/fourslash/navigationBarItemsInsideMethodsAndConstructors.ts b/tests/cases/fourslash/navigationBarItemsInsideMethodsAndConstructors.ts index 28ec25c6f1d..3af3b351114 100644 --- a/tests/cases/fourslash/navigationBarItemsInsideMethodsAndConstructors.ts +++ b/tests/cases/fourslash/navigationBarItemsInsideMethodsAndConstructors.ts @@ -76,17 +76,17 @@ verify.navigationBar([ "kind": "property" } ], - "indent": 2 + "indent": 3 }, { "text": "LocalFunctionInConstructor", "kind": "function", - "indent": 2 + "indent": 3 }, { "text": "LocalInterfaceInConstrcutor", "kind": "interface", - "indent": 2 + "indent": 3 }, { "text": "method", @@ -116,7 +116,7 @@ verify.navigationBar([ "kind": "property" } ], - "indent": 2 + "indent": 3 }, { "text": "LocalFunctionInMethod", @@ -127,11 +127,11 @@ verify.navigationBar([ "kind": "function" } ], - "indent": 2 + "indent": 3 }, { "text": "LocalInterfaceInMethod", "kind": "interface", - "indent": 2 + "indent": 3 } ]); diff --git a/tests/cases/fourslash/navigationBarItemsItems2.ts b/tests/cases/fourslash/navigationBarItemsItems2.ts index 762531d8778..6ab0827e8f9 100644 --- a/tests/cases/fourslash/navigationBarItemsItems2.ts +++ b/tests/cases/fourslash/navigationBarItemsItems2.ts @@ -12,6 +12,11 @@ verify.navigationBar([ "text": "\"navigationBarItemsItems2\"", "kind": "module", "childItems": [ + { + "text": "", + "kind": "class", + "kindModifiers": "export" + }, { "text": "A", "kind": "module" @@ -19,7 +24,7 @@ verify.navigationBar([ ] }, { - "text": "default", + "text": "", "kind": "class", "kindModifiers": "export", "indent": 1 diff --git a/tests/cases/fourslash/navigationBarItemsItemsContainsNoAnonymousFunctions.ts b/tests/cases/fourslash/navigationBarItemsItemsContainsNoAnonymousFunctions.ts deleted file mode 100644 index 276e19624c9..00000000000 --- a/tests/cases/fourslash/navigationBarItemsItemsContainsNoAnonymousFunctions.ts +++ /dev/null @@ -1,80 +0,0 @@ -/// -// @Filename: scriptLexicalStructureItemsContainsNoAnonymouseFunctions_0.ts -/////*file1*/ -////(function() { -//// // this should not be included -//// var x = 0; -//// -//// // this should not be included either -//// function foo() { -//// -//// } -////})(); -//// -// @Filename: scriptLexicalStructureItemsContainsNoAnonymouseFunctions_1.ts -/////*file2*/ -////var x = function() { -//// // this should not be included -//// var x = 0; -//// -//// // this should not be included either -//// function foo() { -////}; -//// -// @Filename: scriptLexicalStructureItemsContainsNoAnonymouseFunctions_2.ts -////// Named functions should still show up -/////*file3*/ -////function foo() { -////} -////function bar() { -////} - -goTo.marker("file1"); -verify.navigationBar([ - { - "text": "", - "kind": "module" - } -]); - -goTo.marker("file2"); -verify.navigationBar([ - { - "text": "", - "kind": "module", - "childItems": [ - { - "text": "x", - "kind": "var" - } - ] - } -]); - -goTo.marker("file3"); -verify.navigationBar([ - { - "text": "", - "kind": "module", - "childItems": [ - { - "text": "bar", - "kind": "function" - }, - { - "text": "foo", - "kind": "function" - } - ] - }, - { - "text": "bar", - "kind": "function", - "indent": 1 - }, - { - "text": "foo", - "kind": "function", - "indent": 1 - } -]); diff --git a/tests/cases/fourslash/navigationBarItemsMissingName1.ts b/tests/cases/fourslash/navigationBarItemsMissingName1.ts index af0e89683bc..2a445a5e1ed 100644 --- a/tests/cases/fourslash/navigationBarItemsMissingName1.ts +++ b/tests/cases/fourslash/navigationBarItemsMissingName1.ts @@ -8,6 +8,11 @@ verify.navigationBar([ "text": "\"navigationBarItemsMissingName1\"", "kind": "module", "childItems": [ + { + "text": "", + "kind": "function", + "kindModifiers": "export" + }, { "text": "C", "kind": "class" diff --git a/tests/cases/fourslash/navigationBarItemsMissingName2.ts b/tests/cases/fourslash/navigationBarItemsMissingName2.ts index 2eda3b07855..a878c5be845 100644 --- a/tests/cases/fourslash/navigationBarItemsMissingName2.ts +++ b/tests/cases/fourslash/navigationBarItemsMissingName2.ts @@ -9,10 +9,16 @@ verify.navigationBar([ { "text": "", - "kind": "module" + "kind": "module", + "childItems": [ + { + "text": "", + "kind": "class" + } + ] }, { - "text": "default", + "text": "", "kind": "class", "childItems": [ { diff --git a/tests/cases/fourslash/navigationBarItemsModules.ts b/tests/cases/fourslash/navigationBarItemsModules.ts index 979f22084e5..ec11cd52b94 100644 --- a/tests/cases/fourslash/navigationBarItemsModules.ts +++ b/tests/cases/fourslash/navigationBarItemsModules.ts @@ -28,107 +28,107 @@ //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.navigationBar([ - { - "text": "", - "kind": "module", - "childItems": [ - { - "text": "A.B.C", - "kind": "module" - }, - { - "text": "A.B", - "kind": "module" - }, - { - "text": "A", - "kind": "module" - }, - { - "text": "\"X.Y.Z\"", + { + "text": "", "kind": "module", - "kindModifiers": "declare" - }, - { + "childItems": [ + { + "text": "'X2.Y2.Z2'", + "kind": "module", + "kindModifiers": "declare" + }, + { + "text": "\"X.Y.Z\"", + "kind": "module", + "kindModifiers": "declare" + }, + { + "text": "A", + "kind": "module" + }, + { + "text": "A.B", + "kind": "module" + }, + { + "text": "A.B.C", + "kind": "module" + } + ] + }, + { "text": "'X2.Y2.Z2'", "kind": "module", - "kindModifiers": "declare" - } - ] - }, - { - "text": "A.B.C", - "kind": "module", - "childItems": [ - { - "text": "x", - "kind": "var", - "kindModifiers": "export" - } - ], - "indent": 1 - }, - { - "text": "A.B", - "kind": "module", - "childItems": [ - { - "text": "y", - "kind": "var", - "kindModifiers": "export" - } - ], - "indent": 1 - }, - { - "text": "A", - "kind": "module", - "childItems": [ - { - "text": "z", - "kind": "var", - "kindModifiers": "export" - }, - { + "kindModifiers": "declare", + "indent": 1 + }, + { + "text": "\"X.Y.Z\"", + "kind": "module", + "kindModifiers": "declare", + "indent": 1 + }, + { + "text": "A", + "kind": "module", + "childItems": [ + { + "text": "B", + "kind": "module" + }, + { + "text": "z", + "kind": "var", + "kindModifiers": "export" + } + ], + "indent": 1 + }, + { "text": "B", - "kind": "module" - } - ], - "indent": 1 - }, - { - "text": "B", - "kind": "module", - "childItems": [ - { + "kind": "module", + "childItems": [ + { + "text": "C", + "kind": "module" + } + ], + "indent": 2 + }, + { "text": "C", - "kind": "module" - } - ], - "indent": 2 - }, - { - "text": "C", - "kind": "module", - "childItems": [ - { - "text": "x", - "kind": "var", - "kindModifiers": "declare" - } - ], - "indent": 3 - }, - { - "text": "\"X.Y.Z\"", - "kind": "module", - "kindModifiers": "declare", - "indent": 1 - }, - { - "text": "'X2.Y2.Z2'", - "kind": "module", - "kindModifiers": "declare", - "indent": 1 - } + "kind": "module", + "childItems": [ + { + "text": "x", + "kind": "var", + "kindModifiers": "declare" + } + ], + "indent": 3 + }, + { + "text": "A.B", + "kind": "module", + "childItems": [ + { + "text": "y", + "kind": "var", + "kindModifiers": "export" + } + ], + "indent": 1 + }, + { + "text": "A.B.C", + "kind": "module", + "childItems": [ + { + "text": "x", + "kind": "var", + "kindModifiers": "export" + } + ], + "indent": 1 + } ]); diff --git a/tests/cases/fourslash/navigationBarItemsMultilineStringIdentifiers.ts b/tests/cases/fourslash/navigationBarItemsMultilineStringIdentifiers.ts index 2ee4c93a2f1..4a29d718f2e 100644 --- a/tests/cases/fourslash/navigationBarItemsMultilineStringIdentifiers.ts +++ b/tests/cases/fourslash/navigationBarItemsMultilineStringIdentifiers.ts @@ -30,12 +30,9 @@ verify.navigationBar([ "kind": "module", "childItems": [ { - "text": "Bar", - "kind": "class" - }, - { - "text": "Foo", - "kind": "interface" + "text": "\"Multiline\\\nMadness\"", + "kind": "module", + "kindModifiers": "declare" }, { "text": "\"Multiline\\r\\nMadness\"", @@ -43,17 +40,38 @@ verify.navigationBar([ "kindModifiers": "declare" }, { - "text": "\"Multiline\\\nMadness\"", + "text": "\"MultilineMadness\"", "kind": "module", "kindModifiers": "declare" }, { - "text": "\"MultilineMadness\"", - "kind": "module", - "kindModifiers": "declare" + "text": "Bar", + "kind": "class" + }, + { + "text": "Foo", + "kind": "interface" } ] }, + { + "text": "\"Multiline\\\nMadness\"", + "kind": "module", + "kindModifiers": "declare", + "indent": 1 + }, + { + "text": "\"Multiline\\r\\nMadness\"", + "kind": "module", + "kindModifiers": "declare", + "indent": 1 + }, + { + "text": "\"MultilineMadness\"", + "kind": "module", + "kindModifiers": "declare", + "indent": 1 + }, { "text": "Bar", "kind": "class", @@ -83,23 +101,5 @@ verify.navigationBar([ } ], "indent": 1 - }, - { - "text": "\"Multiline\\r\\nMadness\"", - "kind": "module", - "kindModifiers": "declare", - "indent": 1 - }, - { - "text": "\"Multiline\\\nMadness\"", - "kind": "module", - "kindModifiers": "declare", - "indent": 1 - }, - { - "text": "\"MultilineMadness\"", - "kind": "module", - "kindModifiers": "declare", - "indent": 1 } ]); diff --git a/tests/cases/fourslash/navigationBarJsDoc.ts b/tests/cases/fourslash/navigationBarJsDoc.ts index 20a235bce95..a2d33e216bf 100644 --- a/tests/cases/fourslash/navigationBarJsDoc.ts +++ b/tests/cases/fourslash/navigationBarJsDoc.ts @@ -6,16 +6,32 @@ ////const x = 0; verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "NumberLike", + "kind": "type" + }, + { + "text": "x", + "kind": "const" + }, + { + "text": "x", + "kind": "type" + } + ] + }, { "text": "NumberLike", - "kind": "type" + "kind": "type", + "indent": 1, }, { "text": "x", - "kind": "type" - }, - { - "text": "x", - "kind": "var" + "kind": "type", + "indent": 1 } ]); diff --git a/tests/cases/fourslash/navigationBarMerging.ts b/tests/cases/fourslash/navigationBarMerging.ts new file mode 100644 index 00000000000..192efe5db44 --- /dev/null +++ b/tests/cases/fourslash/navigationBarMerging.ts @@ -0,0 +1,189 @@ +/// + +// @Filename: file1.ts +////module a { +//// function foo() {} +////} +////module b { +//// function foo() {} +////} +////module a { +//// function bar() {} +////} + +verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "a", + "kind": "module" + }, + { + "text": "b", + "kind": "module" + } + ] + }, + { + "text": "a", + "kind": "module", + "childItems": [ + { + "text": "bar", + "kind": "function" + }, + { + "text": "foo", + "kind": "function" + } + ], + "indent": 1 + }, + { + "text": "b", + "kind": "module", + "childItems": [ + { + "text": "foo", + "kind": "function" + } + ], + "indent": 1 + } +]); + +// Does not merge unlike declarations. +// @Filename: file2.ts +////module a {} +////function a() {} + +goTo.file("file2.ts"); +verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "a", + "kind": "function" + }, + { + "text": "a", + "kind": "module" + } + ] + }, + { + "text": "a", + "kind": "function", + "indent": 1 + }, + { + "text": "a", + "kind": "module", + "indent": 1 + } +]); + +// Merges recursively +// @Filename: file3.ts +////module a { +//// interface A { +//// foo: number; +//// } +////} +////module a { +//// interface A { +//// bar: number; +//// } +////} + +goTo.file("file3.ts"); +verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "a", + "kind": "module" + } + ] + }, + { + "text": "a", + "kind": "module", + "childItems": [ + { + "text": "A", + "kind": "interface" + } + ], + "indent": 1 + }, + { + "text": "A", + "kind": "interface", + "childItems": [ + { + "text": "bar", + "kind": "property" + }, + { + "text": "foo", + "kind": "property" + } + ], + "indent": 2 + } +]); + +// Does not merge 'module A' with 'module A.B' + +// @Filename: file4.ts +////module A { export var x; } +////module A.B { export var y; } + +goTo.file("file4.ts"); +verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "A", + "kind": "module" + }, + { + "text": "A.B", + "kind": "module" + } + ] + }, + { + "text": "A", + "kind": "module", + "childItems": [ + { + "text": "x", + "kind": "var", + "kindModifiers": "export" + } + ], + "indent": 1 + }, + { + "text": "A.B", + "kind": "module", + "childItems": [ + { + "text": "y", + "kind": "var", + "kindModifiers": "export" + } + ], + "indent": 1 + } +]); diff --git a/tests/cases/fourslash/navigationBarNamespaceImportWithNoName.ts b/tests/cases/fourslash/navigationBarNamespaceImportWithNoName.ts new file mode 100644 index 00000000000..732e2deb1dd --- /dev/null +++ b/tests/cases/fourslash/navigationBarNamespaceImportWithNoName.ts @@ -0,0 +1,13 @@ +////import *{} from 'foo'; +verify.navigationBar([ + { + "text": "\"navigationBarNamespaceImportWithNoName\"", + "kind": "module", + "childItems": [ + { + "text": "", + "kind": "alias" + } + ] + } +]); diff --git a/tests/cases/fourslash/navigationBarVariables.ts b/tests/cases/fourslash/navigationBarVariables.ts new file mode 100644 index 00000000000..42344c96f73 --- /dev/null +++ b/tests/cases/fourslash/navigationBarVariables.ts @@ -0,0 +1,53 @@ +/// + +////var x = 0; +////let y = 1; +////const z = 2; + +verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "x", + "kind": "var" + }, + { + "text": "y", + "kind": "let" + }, + { + "text": "z", + "kind": "const" + } + ] + } +]); + +// @Filename: file2.ts +////var {a} = 0; +////let {a: b} = 0; +////const [c] = 0; + +goTo.file("file2.ts"); +verify.navigationBar([ + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "a", + "kind": "var" + }, + { + "text": "b", + "kind": "let" + }, + { + "text": "c", + "kind": "const" + } + ] + } +]); diff --git a/tests/cases/fourslash/quickInfoForRequire.ts b/tests/cases/fourslash/quickInfoForRequire.ts index 8e714c08736..cb5a0b6e8ec 100644 --- a/tests/cases/fourslash/quickInfoForRequire.ts +++ b/tests/cases/fourslash/quickInfoForRequire.ts @@ -8,4 +8,4 @@ goTo.marker('1'); verify.quickInfoIs('module a'); -verify.referencesCountIs(0); \ No newline at end of file +verify.referencesAre([]); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoOnThis.ts b/tests/cases/fourslash/quickInfoOnThis.ts index 4191c0846ec..14737486b87 100644 --- a/tests/cases/fourslash/quickInfoOnThis.ts +++ b/tests/cases/fourslash/quickInfoOnThis.ts @@ -25,7 +25,7 @@ goTo.marker('0'); verify.quickInfoIs('this: this'); goTo.marker('1'); -verify.quickInfoIs('void'); +verify.quickInfoIs('this: void'); goTo.marker('2'); verify.quickInfoIs('this: this'); goTo.marker('3'); diff --git a/tests/cases/fourslash/quickInfoOnThis3.ts b/tests/cases/fourslash/quickInfoOnThis3.ts index 6988ac14860..239e49d5dc0 100644 --- a/tests/cases/fourslash/quickInfoOnThis3.ts +++ b/tests/cases/fourslash/quickInfoOnThis3.ts @@ -20,7 +20,7 @@ verify.quickInfoIs('any'); goTo.marker('2'); verify.quickInfoIs('(parameter) this: void'); goTo.marker('3'); -verify.quickInfoIs('void'); +verify.quickInfoIs('this: void'); goTo.marker('4'); verify.quickInfoIs('(parameter) this: Restricted'); goTo.marker('5'); diff --git a/tests/cases/fourslash/referenceInParameterPropertyDeclaration.ts b/tests/cases/fourslash/referenceInParameterPropertyDeclaration.ts index 4e86e7a4915..68a9f73b1d6 100644 --- a/tests/cases/fourslash/referenceInParameterPropertyDeclaration.ts +++ b/tests/cases/fourslash/referenceInParameterPropertyDeclaration.ts @@ -2,23 +2,19 @@ // @Filename: file1.ts //// class Foo { -//// constructor(private /*0*/privateParam: number, -//// public /*1*/publicParam: string, -//// protected /*2*/protectedParam: boolean) { +//// constructor(private [|privateParam|]: number, +//// public [|publicParam|]: string, +//// protected [|protectedParam|]: boolean) { //// -//// let localPrivate = /*3*/privateParam; -//// this./*4*/privateParam += 10; +//// let localPrivate = [|privateParam|]; +//// this.[|privateParam|] += 10; //// -//// let localPublic = /*5*/publicParam; -//// this./*6*/publicParam += " Hello!"; +//// let localPublic = [|publicParam|]; +//// this.[|publicParam|] += " Hello!"; //// -//// let localProtected = /*7*/protectedParam; -//// this./*8*/protectedParam = false; +//// let localProtected = [|protectedParam|]; +//// this.[|protectedParam|] = false; //// } //// } -let markers = test.markers() -for (let marker of markers) { - goTo.position(marker.position); - verify.referencesCountIs(3); -} \ No newline at end of file +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referenceToClass.ts b/tests/cases/fourslash/referenceToClass.ts index 2907a468577..3e523487bd1 100644 --- a/tests/cases/fourslash/referenceToClass.ts +++ b/tests/cases/fourslash/referenceToClass.ts @@ -3,34 +3,21 @@ // Class references should work across file and not find local variables. // @Filename: referenceToClass_1.ts -////class /*1*/foo { -//// public n: /*2*/foo; +////class [|foo|] { +//// public n: [|foo|]; //// public foo: number; ////} //// ////class bar { -//// public n: fo/*3*/o; -//// public k = new foo(); +//// public n: [|foo|]; +//// public k = new [|foo|](); ////} //// ////module mod { -//// var k: foo = null; +//// var k: [|foo|] = null; ////} // @Filename: referenceToClass_2.ts -////var k: /*4*/foo; +////var k: [|foo|]; -goTo.marker("1"); -verify.referencesCountIs(6); - -goTo.marker("2"); - -verify.referencesCountIs(6); - -goTo.marker("3"); - -verify.referencesCountIs(6); - -goTo.marker("4"); - -verify.referencesCountIs(6); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesBloomFilters.ts b/tests/cases/fourslash/referencesBloomFilters.ts index 3961d557e89..7d99ccdfd3c 100644 --- a/tests/cases/fourslash/referencesBloomFilters.ts +++ b/tests/cases/fourslash/referencesBloomFilters.ts @@ -3,18 +3,15 @@ // Ensure BloomFilter building logic is correct, by having one reference per file // @Filename: declaration.ts -////var container = { /*1*/searchProp : 1 }; +////var container = { [|searchProp|] : 1 }; // @Filename: expression.ts -////function blah() { return (1 + 2 + container./*2*/searchProp()) === 2; }; +////function blah() { return (1 + 2 + container.[|searchProp|]()) === 2; }; // @Filename: stringIndexer.ts -////function blah2() { container[/*3*/"searchProp"] }; +////function blah2() { container["[|searchProp|]"] }; // @Filename: redeclaration.ts -////container = { /*4*/"searchProp" : 18 }; +////container = { "[|searchProp|]" : 18 }; -test.markers().forEach(m => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(4); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesBloomFilters2.ts b/tests/cases/fourslash/referencesBloomFilters2.ts index ef7643e0215..c42e5d4eaf1 100644 --- a/tests/cases/fourslash/referencesBloomFilters2.ts +++ b/tests/cases/fourslash/referencesBloomFilters2.ts @@ -3,18 +3,15 @@ // Ensure BloomFilter building logic is correct, by having one reference per file // @Filename: declaration.ts -////var container = { /*1*/42 : 1 }; +////var container = { [|42|]: 1 }; // @Filename: expression.ts -////function blah() { return (container[/*2*/42]) === 2; }; +////function blah() { return (container[[|42|]]) === 2; }; // @Filename: stringIndexer.ts -////function blah2() { container[/*3*/"42"] }; +////function blah2() { container["[|42|]"] }; // @Filename: redeclaration.ts -////container = { /*4*/"42" : 18 }; +////container = { "[|42|]" : 18 }; -test.markers().forEach(m => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(4); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesBloomFilters3.ts b/tests/cases/fourslash/referencesBloomFilters3.ts index 65215469950..9703baceb12 100644 --- a/tests/cases/fourslash/referencesBloomFilters3.ts +++ b/tests/cases/fourslash/referencesBloomFilters3.ts @@ -4,13 +4,9 @@ // @Filename: declaration.ts -////enum Test { /*1*/"42" = 1 }; +////enum Test { "[|42|]" = 1 }; // @Filename: expression.ts -////(Test[/*2*/42]); +////(Test[[|42|]]); - -test.markers().forEach(m => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(2); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForAmbients.ts b/tests/cases/fourslash/referencesForAmbients.ts index deea6ec3d29..da3f3f43aae 100644 --- a/tests/cases/fourslash/referencesForAmbients.ts +++ b/tests/cases/fourslash/referencesForAmbients.ts @@ -1,30 +1,21 @@ /// -////declare module /*1*/"foo" { -//// var f: number; +////declare module "[|foo|]" { +//// var [|f|]: number; ////} //// -////declare module "bar" { -//// export import foo = require(/*2*/"foo"); -//// var f2: typeof foo./*4*/f; +////declare module "[|bar|]" { +//// export import [|foo|] = require("[|foo|]"); +//// var f2: typeof [|foo|].[|f|]; ////} //// ////declare module "baz" { -//// import bar = require(/*3*/"bar"); -//// var f2: typeof bar./*5*/foo; +//// import bar = require("[|bar|]"); +//// var f2: typeof bar.[|foo|]; ////} -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); - -goTo.marker("3"); -verify.referencesCountIs(2); - -goTo.marker("4"); -verify.referencesCountIs(2); - -goTo.marker("5"); -verify.referencesCountIs(3); \ No newline at end of file +const [moduleFoo0, f0, moduleBar0, foo0, moduleFoo1, foo1, f1, moduleBar1, foo2] = test.ranges(); +verify.rangesReferenceEachOther([moduleFoo0, moduleFoo1]); +verify.rangesReferenceEachOther([moduleBar0, moduleBar1]); +verify.rangesReferenceEachOther([foo0, foo1, foo2]); +verify.rangesReferenceEachOther([f0, f1]); diff --git a/tests/cases/fourslash/referencesForClassLocal.ts b/tests/cases/fourslash/referencesForClassLocal.ts index 3351bcd1afb..bdde0e7f126 100644 --- a/tests/cases/fourslash/referencesForClassLocal.ts +++ b/tests/cases/fourslash/referencesForClassLocal.ts @@ -5,14 +5,14 @@ ////var n = 14; //// ////class foo { -//// private /*1*/n = 0; +//// private [|n|] = 0; //// //// public bar() { -//// this.n = 9; +//// this.[|n|] = 9; //// } //// //// constructor() { -//// this./*2*/n = 4; +//// this.[|n|] = 4; //// } //// //// public bar2() { @@ -20,8 +20,4 @@ //// } ////} -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForClassMembers.ts b/tests/cases/fourslash/referencesForClassMembers.ts index 851c1b39ab0..0208b13589d 100644 --- a/tests/cases/fourslash/referencesForClassMembers.ts +++ b/tests/cases/fourslash/referencesForClassMembers.ts @@ -1,32 +1,16 @@ /// ////class Base { -//// /*1*/a: number; -//// /*2*/method(): void { } +//// [|a|]: number; +//// [|method|](): void { } ////} ////class MyClass extends Base { -//// /*3*/a; -//// /*4*/method() { } +//// [|a|]; +//// [|method|]() { } ////} //// ////var c: MyClass; -////c./*5*/a; -////c./*6*/method(); +////c.[|a|]; +////c.[|method|](); -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(3); - -goTo.marker("4"); -verify.referencesCountIs(3); - -goTo.marker("5"); -verify.referencesCountIs(3); - -goTo.marker("6"); -verify.referencesCountIs(3); +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForClassMembersExtendingAbstractClass.ts b/tests/cases/fourslash/referencesForClassMembersExtendingAbstractClass.ts index fcabff979fb..46115f9da17 100644 --- a/tests/cases/fourslash/referencesForClassMembersExtendingAbstractClass.ts +++ b/tests/cases/fourslash/referencesForClassMembersExtendingAbstractClass.ts @@ -1,32 +1,16 @@ /// ////abstract class Base { -//// abstract /*1*/a: number; -//// abstract /*2*/method(): void; +//// abstract [|a|]: number; +//// abstract [|method|](): void; ////} ////class MyClass extends Base { -//// /*3*/a; -//// /*4*/method() { } +//// [|a|]; +//// [|method|]() { } ////} //// ////var c: MyClass; -////c./*5*/a; -////c./*6*/method(); +////c.[|a|]; +////c.[|method|](); -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(3); - -goTo.marker("4"); -verify.referencesCountIs(3); - -goTo.marker("5"); -verify.referencesCountIs(3); - -goTo.marker("6"); -verify.referencesCountIs(3); +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForClassMembersExtendingGenericClass.ts b/tests/cases/fourslash/referencesForClassMembersExtendingGenericClass.ts index f0185fb39aa..2b701f25cc1 100644 --- a/tests/cases/fourslash/referencesForClassMembersExtendingGenericClass.ts +++ b/tests/cases/fourslash/referencesForClassMembersExtendingGenericClass.ts @@ -1,32 +1,16 @@ /// ////class Base { -//// /*1*/a: this; -//// /*2*/method(a?:T, b?:U): this { } +//// [|a|]: this; +//// [|method|](a?:T, b?:U): this { } ////} ////class MyClass extends Base { -//// /*3*/a; -//// /*4*/method() { } +//// [|a|]; +//// [|method|]() { } ////} //// ////var c: MyClass; -////c./*5*/a; -////c./*6*/method(); +////c.[|a|]; +////c.[|method|](); -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(3); - -goTo.marker("4"); -verify.referencesCountIs(3); - -goTo.marker("5"); -verify.referencesCountIs(3); - -goTo.marker("6"); -verify.referencesCountIs(3); +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForClassParameter.ts b/tests/cases/fourslash/referencesForClassParameter.ts index 48cdbbf1e41..ce383b36503 100644 --- a/tests/cases/fourslash/referencesForClassParameter.ts +++ b/tests/cases/fourslash/referencesForClassParameter.ts @@ -7,20 +7,16 @@ ////class p { } //// ////class foo { -//// constructor (public p: any) { +//// constructor (public [|p|]: any) { //// } //// //// public f(p) { -//// this./*1*/p = p; +//// this.[|p|] = p; //// } //// ////} //// ////var n = new foo(undefined); -////n./*2*/p = null; +////n.[|p|] = null; -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForContextuallyTypedObjectLiteralProperties.ts b/tests/cases/fourslash/referencesForContextuallyTypedObjectLiteralProperties.ts index 15dd5720019..65bd7eebfb5 100644 --- a/tests/cases/fourslash/referencesForContextuallyTypedObjectLiteralProperties.ts +++ b/tests/cases/fourslash/referencesForContextuallyTypedObjectLiteralProperties.ts @@ -1,32 +1,28 @@ /// -////interface IFoo { /*1*/xy: number; } +////interface IFoo { [|xy|]: number; } //// ////// Assignment -////var a1: IFoo = { /*2*/xy: 0 }; -////var a2: IFoo = { xy: 0 }; +////var a1: IFoo = { [|xy|]: 0 }; +////var a2: IFoo = { [|xy|]: 0 }; //// ////// Function call ////function consumer(f: IFoo) { } -////consumer({ xy: 1 }); +////consumer({ [|xy|]: 1 }); //// ////// Type cast -////var c = { xy: 0 }; +////var c = { [|xy|]: 0 }; //// ////// Array literal -////var ar: IFoo[] = [{ xy: 1 }, { /*3*/xy: 2 }]; +////var ar: IFoo[] = [{ [|xy|]: 1 }, { [|xy|]: 2 }]; //// ////// Nested object literal -////var ob: { ifoo: IFoo } = { ifoo: { xy: 0 } }; +////var ob: { ifoo: IFoo } = { ifoo: { [|xy|]: 0 } }; //// ////// Widened type -////var w: IFoo = { /*4*/xy: undefined }; +////var w: IFoo = { [|xy|]: undefined }; //// ////// Untped -- should not be included ////var u = { xy: 0 }; - -test.markers().forEach((m) => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(9); -}); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForContextuallyTypedUnionProperties.ts b/tests/cases/fourslash/referencesForContextuallyTypedUnionProperties.ts index f9c479de769..c0e4a5f90ea 100644 --- a/tests/cases/fourslash/referencesForContextuallyTypedUnionProperties.ts +++ b/tests/cases/fourslash/referencesForContextuallyTypedUnionProperties.ts @@ -2,39 +2,42 @@ ////interface A { //// a: number; -//// common: string; +//// [|common|]: string; ////} //// ////interface B { //// b: number; -//// common: number; +//// [|common|]: number; ////} //// ////// Assignment -////var v1: A | B = { a: 0, /*1*/common: "" }; -////var v2: A | B = { b: 0, /*2*/common: 3 }; +////var v1: A | B = { a: 0, [|common|]: "" }; +////var v2: A | B = { b: 0, [|common|]: 3 }; //// ////// Function call ////function consumer(f: A | B) { } -////consumer({ a: 0, b: 0, /*3*/common: 1 }); +////consumer({ a: 0, b: 0, [|common|]: 1 }); //// ////// Type cast -////var c = { /*4*/common: 0, b: 0 }; +////var c = { [|common|]: 0, b: 0 }; //// ////// Array literal -////var ar: Array = [{ a: 0, /*5*/common: "" }, { b: 0, /*6*/common: 0 }]; +////var ar: Array = [{ a: 0, [|common|]: "" }, { b: 0, [|common|]: 0 }]; //// ////// Nested object literal -////var ob: { aorb: A|B } = { aorb: { b: 0, /*7*/common: 0 } }; +////var ob: { aorb: A|B } = { aorb: { b: 0, [|common|]: 0 } }; //// ////// Widened type -////var w: A|B = { a:0, /*8*/common: undefined }; +////var w: A|B = { a:0, [|common|]: undefined }; //// ////// Untped -- should not be included ////var u1 = { a: 0, b: 0, common: "" }; ////var u2 = { b: 0, common: 0 }; -test.markers().forEach((m) => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(10); // 8 contextually typed common, and 2 in definition (A.common, B.common) -}); +const all = test.ranges(); +const [aCommon, bCommon, ...unionRefs] = all; +verify.referencesOf(aCommon, [aCommon, ...unionRefs]); +verify.referencesOf(bCommon, [bCommon, ...unionRefs]); +for (const ref of unionRefs) { + verify.referencesOf(ref, all); +} diff --git a/tests/cases/fourslash/referencesForContextuallyTypedUnionProperties2.ts b/tests/cases/fourslash/referencesForContextuallyTypedUnionProperties2.ts index bbcc482a6e7..de9ffbfd3be 100644 --- a/tests/cases/fourslash/referencesForContextuallyTypedUnionProperties2.ts +++ b/tests/cases/fourslash/referencesForContextuallyTypedUnionProperties2.ts @@ -6,35 +6,32 @@ ////} //// ////interface B { -//// /*1*/b: number; +//// [|b|]: number; //// common: number; ////} //// ////// Assignment ////var v1: A | B = { a: 0, common: "" }; -////var v2: A | B = { /*2*/b: 0, common: 3 }; +////var v2: A | B = { [|b|]: 0, common: 3 }; //// ////// Function call ////function consumer(f: A | B) { } -////consumer({ a: 0, /*3*/b: 0, common: 1 }); +////consumer({ a: 0, [|b|]: 0, common: 1 }); //// ////// Type cast -////var c = { common: 0, /*4*/b: 0 }; +////var c = { common: 0, [|b|]: 0 }; //// ////// Array literal -////var ar: Array = [{ a: 0, common: "" }, { /*5*/b: 0, common: 0 }]; +////var ar: Array = [{ a: 0, common: "" }, { [|b|]: 0, common: 0 }]; //// ////// Nested object literal -////var ob: { aorb: A|B } = { aorb: { /*6*/b: 0, common: 0 } }; +////var ob: { aorb: A|B } = { aorb: { [|b|]: 0, common: 0 } }; //// ////// Widened type -////var w: A|B = { /*7*/b:undefined, common: undefined }; +////var w: A|B = { [|b|]:undefined, common: undefined }; //// ////// Untped -- should not be included ////var u1 = { a: 0, b: 0, common: "" }; ////var u2 = { b: 0, common: 0 }; -test.markers().forEach((m) => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(7); -}); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForEnums.ts b/tests/cases/fourslash/referencesForEnums.ts index fe1fd592dbb..3b979bc5096 100644 --- a/tests/cases/fourslash/referencesForEnums.ts +++ b/tests/cases/fourslash/referencesForEnums.ts @@ -1,22 +1,14 @@ /// ////enum E { -//// /*value1*/value1 = 1, -//// "value2" = value1, -//// 111 = 11 +//// [|value1|] = 1, +//// "[|value2|]" = [|value1|], +//// [|111|] = 11 ////} //// -////E.value1; -////E["value2"]; -////E./*value2*/value2; -////E[/*value3*/111]; +////E.[|value1|]; +////E["[|value2|]"]; +////E.[|value2|]; +////E[[|111|]]; - -goTo.marker("value1"); -verify.referencesCountIs(3); - -goTo.marker("value2"); -verify.referencesCountIs(3); - -goTo.marker("value3"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForExportedValues.ts b/tests/cases/fourslash/referencesForExportedValues.ts index dc7c52174af..315d0b1b585 100644 --- a/tests/cases/fourslash/referencesForExportedValues.ts +++ b/tests/cases/fourslash/referencesForExportedValues.ts @@ -1,16 +1,13 @@ /// ////module M { -//// export var /*1*/variable = 0; +//// export var [|variable|] = 0; //// //// // local use -//// var x = /*2*/variable; +//// var x = [|variable|]; ////} //// ////// external use -////M./*3*/variable +////M.[|variable|] -test.markers().forEach((m) => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(3); -}); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForExternalModuleNames.ts b/tests/cases/fourslash/referencesForExternalModuleNames.ts index 7da6091d9e2..ee783c8bd7e 100644 --- a/tests/cases/fourslash/referencesForExternalModuleNames.ts +++ b/tests/cases/fourslash/referencesForExternalModuleNames.ts @@ -3,16 +3,12 @@ // Global interface reference. // @Filename: referencesForGlobals_1.ts -////declare module /*1*/"foo" { +////declare module "[|foo|]" { //// var f: number; ////} // @Filename: referencesForGlobals_2.ts -////import f = require(/*2*/"foo"); +////import f = require("[|foo|]"); -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForFunctionOverloads.ts b/tests/cases/fourslash/referencesForFunctionOverloads.ts index 2a4981ff4a3..d6873643cd4 100644 --- a/tests/cases/fourslash/referencesForFunctionOverloads.ts +++ b/tests/cases/fourslash/referencesForFunctionOverloads.ts @@ -2,16 +2,9 @@ // Function overloads should be highlighted together. -////function /*1*/foo(x: string); -////function /*2*/foo(x: string, y: number) { -//// /*3*/foo('', 43); +////function [|foo|](x: string); +////function [|foo|](x: string, y: number) { +//// [|foo|]('', 43); ////} -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForFunctionParameter.ts b/tests/cases/fourslash/referencesForFunctionParameter.ts index fd9189d1b72..64d33ca9a60 100644 --- a/tests/cases/fourslash/referencesForFunctionParameter.ts +++ b/tests/cases/fourslash/referencesForFunctionParameter.ts @@ -3,13 +3,9 @@ ////var x; ////var n; //// -////function n(x: number, /*1*/n: number) { -//// /*2*/n = 32; -//// x = n; +////function n(x: number, [|n|]: number) { +//// [|n|] = 32; +//// x = [|n|]; ////} -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForGlobals.ts b/tests/cases/fourslash/referencesForGlobals.ts index a4efddae3d7..f4d7c479767 100644 --- a/tests/cases/fourslash/referencesForGlobals.ts +++ b/tests/cases/fourslash/referencesForGlobals.ts @@ -3,7 +3,7 @@ // Global variable reference. // @Filename: referencesForGlobals_1.ts -////var /*1*/global = 2; +////var [|global|] = 2; //// ////class foo { //// constructor (public global) { } @@ -13,20 +13,16 @@ //// ////class bar { //// constructor () { -//// var n = global; +//// var n = [|global|]; //// //// var f = new foo(''); //// f.global = ''; //// } ////} //// -////var k = global; +////var k = [|global|]; // @Filename: referencesForGlobals_2.ts -////var m = global; +////var m = [|global|]; -// this line triggers a semantic/syntactic error check, remove line when 788570 is fixed -edit.insert(''); - -goTo.marker("1"); -verify.referencesCountIs(4); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForGlobals2.ts b/tests/cases/fourslash/referencesForGlobals2.ts index a0a35d8a08f..7c6baf5bf67 100644 --- a/tests/cases/fourslash/referencesForGlobals2.ts +++ b/tests/cases/fourslash/referencesForGlobals2.ts @@ -3,15 +3,11 @@ // Global class reference. // @Filename: referencesForGlobals_1.ts -////class /*2*/globalClass { +////class [|globalClass|] { //// public f() { } ////} // @Filename: referencesForGlobals_2.ts -////var c = /*1*/globalClass(); +////var c = [|globalClass|](); -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForGlobals3.ts b/tests/cases/fourslash/referencesForGlobals3.ts index 636e14bf629..67e209aaad3 100644 --- a/tests/cases/fourslash/referencesForGlobals3.ts +++ b/tests/cases/fourslash/referencesForGlobals3.ts @@ -3,15 +3,11 @@ // Global interface reference. // @Filename: referencesForGlobals_1.ts -////interface /*2*/globalInterface { +////interface [|globalInterface|] { //// f(); ////} // @Filename: referencesForGlobals_2.ts -////var i: /*1*/globalInterface; +////var i: [|globalInterface|]; -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForGlobals4.ts b/tests/cases/fourslash/referencesForGlobals4.ts index ee12a1754cd..d7acfbd2df4 100644 --- a/tests/cases/fourslash/referencesForGlobals4.ts +++ b/tests/cases/fourslash/referencesForGlobals4.ts @@ -3,15 +3,11 @@ // Global module reference. // @Filename: referencesForGlobals_1.ts -////module /*2*/globalModule { +////module [|globalModule|] { //// export f() { }; ////} // @Filename: referencesForGlobals_2.ts -////var m = /*1*/globalModule; +////var m = [|globalModule|]; -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForGlobals5.ts b/tests/cases/fourslash/referencesForGlobals5.ts index 9c800f116be..4db2410f638 100644 --- a/tests/cases/fourslash/referencesForGlobals5.ts +++ b/tests/cases/fourslash/referencesForGlobals5.ts @@ -7,13 +7,9 @@ //// export var x; ////} //// -////import /*2*/globalAlias = globalModule; +////import [|globalAlias|] = globalModule; // @Filename: referencesForGlobals_2.ts -////var m = /*1*/globalAlias; +////var m = [|globalAlias|]; -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForGlobalsInExternalModule.ts b/tests/cases/fourslash/referencesForGlobalsInExternalModule.ts index b76007624bb..c2f70420402 100644 --- a/tests/cases/fourslash/referencesForGlobalsInExternalModule.ts +++ b/tests/cases/fourslash/referencesForGlobalsInExternalModule.ts @@ -2,23 +2,20 @@ // Global variable reference. -////var /*1*/topLevelVar = 2; -////var topLevelVar2 = topLevelVar; +////var [|topLevelVar|] = 2; +////var topLevelVar2 = [|topLevelVar|]; //// -////class /*2*/topLevelClass { } -////var c = new topLevelClass(); +////class [|topLevelClass|] { } +////var c = new [|topLevelClass|](); //// -////interface topLevelInterface { } -////var i: /*3*/topLevelInterface; +////interface [|topLevelInterface|] { } +////var i: [|topLevelInterface|]; //// -////module topLevelModule { +////module [|topLevelModule|] { //// export var x; ////} -////var x = /*4*/topLevelModule.x; +////var x = [|topLevelModule|].x; //// ////export = x; -test.markers().forEach(m => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(2); -}); \ No newline at end of file +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForIllegalAssignment.ts b/tests/cases/fourslash/referencesForIllegalAssignment.ts index 403bf0432a7..59cb6f4f273 100644 --- a/tests/cases/fourslash/referencesForIllegalAssignment.ts +++ b/tests/cases/fourslash/referencesForIllegalAssignment.ts @@ -2,20 +2,13 @@ ////f/*1*/oo = fo/*2*/o; -////var /*3*/bar = function () { }; -////ba/*4*/r = b/*5*/ar + 1; +////var [|bar|] = function () { }; +////[|bar|] = [|bar|] + 1; goTo.marker("1"); -verify.referencesCountIs(0); +verify.referencesAre([]); goTo.marker("2"); -verify.referencesCountIs(0); +verify.referencesAre([]); -goTo.marker("3"); -verify.referencesCountIs(3); - -goTo.marker("4"); -verify.referencesCountIs(3); - -goTo.marker("5"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForImports.ts b/tests/cases/fourslash/referencesForImports.ts index 58ad1cc5a0d..0203bcee096 100644 --- a/tests/cases/fourslash/referencesForImports.ts +++ b/tests/cases/fourslash/referencesForImports.ts @@ -5,19 +5,11 @@ //// export = $; ////} +////import [|$|] = require("jquery"); +////[|$|]("a"); -////import /*1*/$ = require("jquery"); -/////*2*/$("a"); +////import [|$|] = require("jquery"); - -////import /*3*/$ = require("jquery"); - - -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); - -goTo.marker("3"); -verify.referencesCountIs(1); \ No newline at end of file +const [r0, r1, r2] = test.ranges(); +verify.rangesReferenceEachOther([r0, r1]); +verify.referencesOf(r2, [r2]); diff --git a/tests/cases/fourslash/referencesForIndexProperty.ts b/tests/cases/fourslash/referencesForIndexProperty.ts index 89084a2ef05..49d12c25819 100644 --- a/tests/cases/fourslash/referencesForIndexProperty.ts +++ b/tests/cases/fourslash/referencesForIndexProperty.ts @@ -3,16 +3,12 @@ // References a class property using string index access ////class Foo { -//// property: number; -//// method(): void { } +//// [|property|]: number; +//// [|method|](): void { } ////} //// ////var f: Foo; -////f[/*1*/"property"]; -////f[/*2*/"method"]; +////f["[|property|]"]; +////f["[|method|]"]; -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForIndexProperty2.ts b/tests/cases/fourslash/referencesForIndexProperty2.ts index 9dcba3163c6..ad440d84493 100644 --- a/tests/cases/fourslash/referencesForIndexProperty2.ts +++ b/tests/cases/fourslash/referencesForIndexProperty2.ts @@ -3,7 +3,7 @@ // References to a unknown index property ////var a; -////a[/*1*/"blah"]; +////a[/**/"blah"]; -goTo.marker("1"); -verify.referencesCountIs(0); \ No newline at end of file +goTo.marker(""); +verify.referencesAre([]); diff --git a/tests/cases/fourslash/referencesForIndexProperty3.ts b/tests/cases/fourslash/referencesForIndexProperty3.ts index 07081f8c17d..1fdee9b6602 100644 --- a/tests/cases/fourslash/referencesForIndexProperty3.ts +++ b/tests/cases/fourslash/referencesForIndexProperty3.ts @@ -3,17 +3,13 @@ // References to a property of the apparent type using string indexer ////interface Object { -//// toMyString(); +//// [|toMyString|](); ////} //// ////var y: Object; -////y./*1*/toMyString(); +////y.[|toMyString|](); //// ////var x = {}; -////x[/*2*/"toMyString"](); +////x["[|toMyString|]"](); -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForInheritedProperties.ts b/tests/cases/fourslash/referencesForInheritedProperties.ts index a11d86ef5e1..19fef4066ee 100644 --- a/tests/cases/fourslash/referencesForInheritedProperties.ts +++ b/tests/cases/fourslash/referencesForInheritedProperties.ts @@ -1,15 +1,15 @@ /// ////interface interface1 { -//// /*1*/doStuff(): void; +//// [|doStuff|](): void; ////} //// ////interface interface2 extends interface1{ -//// /*2*/doStuff(): void; +//// [|doStuff|](): void; ////} //// ////class class1 implements interface2 { -//// /*3*/doStuff() { +//// [|doStuff|]() { //// //// } ////} @@ -19,9 +19,6 @@ ////} //// ////var v: class2; -////v./*4*/doStuff(); +////v.[|doStuff|](); -test.markers().forEach(m=> { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(4); -}); +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForInheritedProperties2.ts b/tests/cases/fourslash/referencesForInheritedProperties2.ts index 2203b005284..33a7f26aaea 100644 --- a/tests/cases/fourslash/referencesForInheritedProperties2.ts +++ b/tests/cases/fourslash/referencesForInheritedProperties2.ts @@ -3,18 +3,18 @@ // extends statement in a diffrent declaration ////interface interface1 { -//// /*1*/doStuff(): void; +//// [|doStuff|](): void; ////} //// ////interface interface2 { -//// /*2*/doStuff(): void; +//// [|doStuff|](): void; ////} //// ////interface interface2 extends interface1 { ////} //// ////class class1 implements interface2 { -//// /*3*/doStuff() { +//// [|doStuff|]() { //// //// } ////} @@ -24,9 +24,6 @@ ////} //// ////var v: class2; -////v./*4*/doStuff(); +////v.[|doStuff|](); -test.markers().forEach(m=> { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(4); -}); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForInheritedProperties3.ts b/tests/cases/fourslash/referencesForInheritedProperties3.ts index 134f75da84b..3a2d11da692 100644 --- a/tests/cases/fourslash/referencesForInheritedProperties3.ts +++ b/tests/cases/fourslash/referencesForInheritedProperties3.ts @@ -1,15 +1,12 @@ /// //// interface interface1 extends interface1 { -//// /*1*/doStuff(): void; -//// /*2*/propName: string; +//// [|doStuff|](): void; +//// [|propName|]: string; //// } //// //// var v: interface1; -//// v./*3*/propName; -//// v./*4*/doStuff(); +//// v.[|propName|]; +//// v.[|doStuff|](); -test.markers().forEach(m => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(2); -}); \ No newline at end of file +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForInheritedProperties4.ts b/tests/cases/fourslash/referencesForInheritedProperties4.ts index 10dcc9c77a2..96010d05086 100644 --- a/tests/cases/fourslash/referencesForInheritedProperties4.ts +++ b/tests/cases/fourslash/referencesForInheritedProperties4.ts @@ -1,15 +1,12 @@ /// //// class class1 extends class1 { -//// /*1*/doStuff() { } -//// /*2*/propName: string; +//// [|doStuff|]() { } +//// [|propName|]: string; //// } //// //// var c: class1; -//// c./*3*/doStuff(); -//// c./*4*/propName; +//// c.[|doStuff|](); +//// c.[|propName|]; -test.markers().forEach(m => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(2); -}); \ No newline at end of file +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForInheritedProperties5.ts b/tests/cases/fourslash/referencesForInheritedProperties5.ts index 722c5c96f0a..bbb86f0defb 100644 --- a/tests/cases/fourslash/referencesForInheritedProperties5.ts +++ b/tests/cases/fourslash/referencesForInheritedProperties5.ts @@ -1,19 +1,16 @@ /// //// interface interface1 extends interface1 { -//// /*1*/doStuff(): void; -//// /*2*/propName: string; +//// [|doStuff|](): void; +//// [|propName|]: string; //// } //// interface interface2 extends interface1 { -//// /*3*/doStuff(): void; -//// /*4*/propName: string; +//// [|doStuff|](): void; +//// [|propName|]: string; //// } //// //// var v: interface1; -//// v./*5*/propName; -//// v./*6*/doStuff(); +//// v.[|propName|]; +//// v.[|doStuff|](); -test.markers().forEach(m => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(3); -}); \ No newline at end of file +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForInheritedProperties6.ts b/tests/cases/fourslash/referencesForInheritedProperties6.ts index ddd52447dc1..ff008cceb43 100644 --- a/tests/cases/fourslash/referencesForInheritedProperties6.ts +++ b/tests/cases/fourslash/referencesForInheritedProperties6.ts @@ -1,32 +1,16 @@ /// //// class class1 extends class1 { -//// /*1*/doStuff() { } -//// /*2*/propName: string; +//// [|doStuff|]() { } +//// [|propName|]: string; //// } //// class class2 extends class1 { -//// /*3*/doStuff() { } -//// /*4*/propName: string; +//// [|doStuff|]() { } +//// [|propName|]: string; //// } //// //// var v: class2; -//// v./*5*/propName; -//// v./*6*/doStuff(); +//// v.[|propName|]; +//// v.[|doStuff|](); -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(3); - -goTo.marker("4"); -verify.referencesCountIs(3); - -goTo.marker("5"); -verify.referencesCountIs(3); - -goTo.marker("6"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForInheritedProperties7.ts b/tests/cases/fourslash/referencesForInheritedProperties7.ts index 5747e99615f..ec92a06f0a3 100644 --- a/tests/cases/fourslash/referencesForInheritedProperties7.ts +++ b/tests/cases/fourslash/referencesForInheritedProperties7.ts @@ -1,42 +1,30 @@ /// //// class class1 extends class1 { -//// /*1*/doStuff() { } -//// /*2*/propName: string; +//// [|doStuff|]() { } +//// [|propName|]: string; //// } //// interface interface1 extends interface1 { -//// /*3*/doStuff(): void; -//// /*4*/propName: string; +//// [|doStuff|](): void; +//// [|propName|]: string; //// } //// class class2 extends class1 implements interface1 { -//// /*5*/doStuff() { } -//// /*6*/propName: string; +//// [|doStuff|]() { } +//// [|propName|]: string; //// } //// //// var v: class2; -//// v./*7*/propName; -//// v./*8*/doStuff(); +//// v.[|propName|]; +//// v.[|doStuff|](); -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(3); - -goTo.marker("4"); -verify.referencesCountIs(3); - -goTo.marker("5"); -verify.referencesCountIs(4); - -goTo.marker("6"); -verify.referencesCountIs(4); - -goTo.marker("7"); -verify.referencesCountIs(4); - -goTo.marker("8"); -verify.referencesCountIs(4); \ No newline at end of file +const [r0, r1, r2, r3, r4, r5, r6, r7] = test.ranges(); +verify.referencesOf(r0, [r0, r4, r7]); +verify.referencesOf(r1, [r1, r5, r6]); +verify.referencesOf(r2, [r2, r4, r7]); +verify.referencesOf(r3, [r3, r5, r6]); +const allDoStuff = [r0, r2, r4, r7]; +verify.referencesOf(r4, allDoStuff); +const allPropName = [r1, r3, r5, r6]; +verify.referencesOf(r5, allPropName); +verify.referencesOf(r6, allPropName); +verify.referencesOf(r7, allDoStuff); diff --git a/tests/cases/fourslash/referencesForInheritedProperties8.ts b/tests/cases/fourslash/referencesForInheritedProperties8.ts index f34b327a472..964309fc477 100644 --- a/tests/cases/fourslash/referencesForInheritedProperties8.ts +++ b/tests/cases/fourslash/referencesForInheritedProperties8.ts @@ -1,27 +1,16 @@ /// //// interface C extends D { -//// /*0*/propD: number; +//// [|propD|]: number; //// } //// interface D extends C { -//// /*1*/propD: string; -//// /*3*/propC: number; +//// [|propD|]: string; +//// [|propC|]: number; //// } //// var d: D; -//// d./*2*/propD; -//// d./*4*/propC; +//// d.[|propD|]; +//// d.[|propC|]; -goTo.marker("0"); -verify.referencesCountIs(3); - -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(2); - -goTo.marker("4"); -verify.referencesCountIs(2); \ No newline at end of file +const [d0, d1, c0, d2, c1] = test.ranges(); +verify.rangesReferenceEachOther([d0, d1, d2]); +verify.rangesReferenceEachOther([c0, c1]); diff --git a/tests/cases/fourslash/referencesForInheritedProperties9.ts b/tests/cases/fourslash/referencesForInheritedProperties9.ts index b348d6e8cf6..7d4330d0aa6 100644 --- a/tests/cases/fourslash/referencesForInheritedProperties9.ts +++ b/tests/cases/fourslash/referencesForInheritedProperties9.ts @@ -1,21 +1,16 @@ /// //// class D extends C { -//// /*0*/prop1: string; +//// [|prop1|]: string; //// } //// //// class C extends D { -//// /*1*/prop1: string; +//// [|prop1|]: string; //// } //// //// var c: C; -//// c./*2*/prop1; +//// c.[|prop1|]; -goTo.marker("0"); -verify.referencesCountIs(1); - -goTo.marker("1"); -verify.referencesCountIs(2) - -goTo.marker("2"); -verify.referencesCountIs(2) \ No newline at end of file +const [r0, r1, r2] = test.ranges(); +verify.referencesOf(r0, [r0]); +verify.rangesReferenceEachOther([r1, r2]); diff --git a/tests/cases/fourslash/referencesForLabel.ts b/tests/cases/fourslash/referencesForLabel.ts index f79e038ca0a..14b58fd1d92 100644 --- a/tests/cases/fourslash/referencesForLabel.ts +++ b/tests/cases/fourslash/referencesForLabel.ts @@ -2,22 +2,14 @@ // Valid References for a label -/////*1*/label: while (true) { -//// if (false) break /*2*/label; -//// if (true) continue /*3*/label; +////[|label|]: while (true) { +//// if (false) break [|label|]; +//// if (true) continue [|label|]; ////} //// -/////*4*/label: while (false) { } +////[|label|]: while (false) { } ////var label = "label"; -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(3); - -goTo.marker("4"); -verify.referencesCountIs(1); \ No newline at end of file +const [r0, r1, r2, r3] = test.ranges(); +verify.rangesReferenceEachOther([r0, r1, r2]); +verify.referencesOf(r3, [r3]); diff --git a/tests/cases/fourslash/referencesForLabel2.ts b/tests/cases/fourslash/referencesForLabel2.ts index ccb441d60b9..841e35ad700 100644 --- a/tests/cases/fourslash/referencesForLabel2.ts +++ b/tests/cases/fourslash/referencesForLabel2.ts @@ -4,9 +4,9 @@ ////var label = "label"; ////while (true) { -//// if (false) break /*1*/label; +//// if (false) break /**/label; //// if (true) continue label; ////} -goTo.marker("1"); -verify.referencesCountIs(0); +goTo.marker(); +verify.referencesAre([]); diff --git a/tests/cases/fourslash/referencesForLabel3.ts b/tests/cases/fourslash/referencesForLabel3.ts index 9c621909c34..fb7a51f858e 100644 --- a/tests/cases/fourslash/referencesForLabel3.ts +++ b/tests/cases/fourslash/referencesForLabel3.ts @@ -2,9 +2,9 @@ // References to unused label -/////*1*/label: while (true) { +////[|label|]: while (true) { //// var label = "label"; ////} -goTo.marker("1"); -verify.referencesCountIs(1); +const [label] = test.ranges(); +verify.referencesOf(label, [label]); diff --git a/tests/cases/fourslash/referencesForLabel4.ts b/tests/cases/fourslash/referencesForLabel4.ts index d9817b2d857..5462500f53c 100644 --- a/tests/cases/fourslash/referencesForLabel4.ts +++ b/tests/cases/fourslash/referencesForLabel4.ts @@ -2,14 +2,10 @@ // References to a label outside function bounderies -/////*1*/label: function foo(label) { +////[|label|]: function foo(label) { //// while (true) { -//// break /*2*/label; +//// break [|label|]; //// } ////} -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForLabel5.ts b/tests/cases/fourslash/referencesForLabel5.ts index dba59ec79ab..48d5aab04c2 100644 --- a/tests/cases/fourslash/referencesForLabel5.ts +++ b/tests/cases/fourslash/referencesForLabel5.ts @@ -2,27 +2,16 @@ // References to shadowed label -/////*outer1*/label: while (true) { -//// if (false) break /*outer2*/label; +////[|label|]: while (true) { +//// if (false) break [|label|]; //// function blah() { -/////*inner1*/label: while (true) { -//// if (false) break /*inner2*/label; +////[|label|]: while (true) { +//// if (false) break [|label|]; //// } //// } -//// if (false) break /*outer3*/label; +//// if (false) break [|label|]; //// } -goTo.marker("outer1"); -verify.referencesCountIs(3); - -goTo.marker("outer2"); -verify.referencesCountIs(3); - -goTo.marker("outer3"); -verify.referencesCountIs(3); - -goTo.marker("inner1"); -verify.referencesCountIs(2); - -goTo.marker("inner2"); -verify.referencesCountIs(2); +const [outer1, outer2, inner1, inner2, outer3] = test.ranges(); +verify.rangesReferenceEachOther([outer1, outer2, outer3]); +verify.rangesReferenceEachOther([inner1, inner2]); diff --git a/tests/cases/fourslash/referencesForLabel6.ts b/tests/cases/fourslash/referencesForLabel6.ts index a9aab59c467..aea45805756 100644 --- a/tests/cases/fourslash/referencesForLabel6.ts +++ b/tests/cases/fourslash/referencesForLabel6.ts @@ -1,14 +1,12 @@ /// -// References to lable wiht close names +// References to labels with close names -/////*1*/labela: while (true) { -/////*2*/labelb: while (false) { break labelb; } +////[|labela|]: while (true) { +////[|labelb|]: while (false) { break [|labelb|]; } //// break labelc; ////} -goTo.marker("1"); -verify.referencesCountIs(1); - -goTo.marker("2"); -verify.referencesCountIs(2); \ No newline at end of file +const [a, b, useB] = test.ranges(); +verify.referencesOf(a, [a]); +verify.rangesReferenceEachOther([b, useB]); diff --git a/tests/cases/fourslash/referencesForMergedDeclarations.ts b/tests/cases/fourslash/referencesForMergedDeclarations.ts index a475780b66e..8a0a5d4c680 100644 --- a/tests/cases/fourslash/referencesForMergedDeclarations.ts +++ b/tests/cases/fourslash/referencesForMergedDeclarations.ts @@ -1,21 +1,20 @@ /// -////interface /*type1*/Foo { +////interface [|Foo|] { ////} //// -////module /*namespace1*/Foo { +////module [|Foo|] { //// export interface Bar { } ////} //// -////function /*value1*/Foo(): void { +////function [|Foo|](): void { ////} //// -////var f1: /*namespace2*/Foo.Bar; -////var f2: /*type2*/Foo; -/////*value2*/Foo.bind(this); +////var f1: [|Foo|].Bar; +////var f2: [|Foo|]; +////[|Foo|].bind(this); - -test.markers().forEach(m => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(2); -}); +const [type1, namespace1, value1, namespace2, type2, value2] = test.ranges(); +verify.rangesReferenceEachOther([type1, type2]); +verify.rangesReferenceEachOther([namespace1, namespace2]); +verify.rangesReferenceEachOther([value1, value2]); diff --git a/tests/cases/fourslash/referencesForMergedDeclarations2.ts b/tests/cases/fourslash/referencesForMergedDeclarations2.ts index f7dbdc289d4..75d485002a4 100644 --- a/tests/cases/fourslash/referencesForMergedDeclarations2.ts +++ b/tests/cases/fourslash/referencesForMergedDeclarations2.ts @@ -6,16 +6,9 @@ //// ////function ATest() { } //// -////import /*definition*/alias = ATest; +////import [|alias|] = ATest; // definition //// -////var a: /*namespace*/alias.Bar; -/////*value*/alias.call(this); +////var a: [|alias|].Bar; // namespace +////[|alias|].call(this); // value -goTo.marker("definition"); -verify.referencesCountIs(3); - -goTo.marker("namespace"); -verify.referencesCountIs(3); - -goTo.marker("value"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForMergedDeclarations3.ts b/tests/cases/fourslash/referencesForMergedDeclarations3.ts index 80cf1fb9e42..181d68e79b3 100644 --- a/tests/cases/fourslash/referencesForMergedDeclarations3.ts +++ b/tests/cases/fourslash/referencesForMergedDeclarations3.ts @@ -2,38 +2,24 @@ // class and uninstanciated module -////class testClass { +////class [|testClass|] { //// static staticMethod() { } //// method() { } ////} //// -////module testClass { +////module [|testClass|] { //// export interface Bar { //// //// } ////} //// -////var c1: /*class1*/testClass; -////var c2: /*module*/testClass.Bar; -/////*class2*/testClass.staticMethod(); -/////*class3*/testClass.prototype.method(); -/////*class4*/testClass.bind(this); -////new /*class5*/testClass(); +////var c1: [|testClass|]; +////var c2: [|testClass|].Bar; +////[|testClass|].staticMethod(); +////[|testClass|].prototype.method(); +////[|testClass|].bind(this); +////new [|testClass|](); -goTo.marker("module"); -verify.referencesCountIs(2); - -goTo.marker("class1"); -verify.referencesCountIs(6); - -goTo.marker("class2"); -verify.referencesCountIs(6); - -goTo.marker("class3"); -verify.referencesCountIs(6); - -goTo.marker("class4"); -verify.referencesCountIs(6); - -goTo.marker("class5"); -verify.referencesCountIs(6); \ No newline at end of file +const [class0, module0, class1, module1, class2, class3, class4, class5] = test.ranges(); +verify.rangesReferenceEachOther([module0, module1]); +verify.rangesReferenceEachOther([class0, class1, class2, class3, class4, class5]); diff --git a/tests/cases/fourslash/referencesForMergedDeclarations4.ts b/tests/cases/fourslash/referencesForMergedDeclarations4.ts index 88faf672fcc..d35cbea745d 100644 --- a/tests/cases/fourslash/referencesForMergedDeclarations4.ts +++ b/tests/cases/fourslash/referencesForMergedDeclarations4.ts @@ -2,28 +2,24 @@ // class and instanciated module -////class testClass { +////class [|testClass|] { //// static staticMethod() { } //// method() { } ////} //// -////module testClass { +////module [|testClass|] { //// export interface Bar { //// //// } //// export var s = 0; ////} //// -////var c1: /*1*/testClass; -////var c2: /*2*/testClass.Bar; -/////*3*/testClass.staticMethod(); -/////*4*/testClass.prototype.method(); -/////*5*/testClass.bind(this); -/////*6*/testClass.s; -////new /*7*/testClass(); +////var c1: [|testClass|]; +////var c2: [|testClass|].Bar; +////[|testClass|].staticMethod(); +////[|testClass|].prototype.method(); +////[|testClass|].bind(this); +////[|testClass|].s; +////new [|testClass|](); -// Instanciated Module and class intersect in the value space, so we consider them all one group -test.markers().forEach(m => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(9); -}); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForMergedDeclarations5.ts b/tests/cases/fourslash/referencesForMergedDeclarations5.ts index deb7ad321c9..8fe33ca31e4 100644 --- a/tests/cases/fourslash/referencesForMergedDeclarations5.ts +++ b/tests/cases/fourslash/referencesForMergedDeclarations5.ts @@ -1,10 +1,10 @@ /// -////interface Foo { } -////module Foo { export interface Bar { } } -////function Foo() { } +////interface [|Foo|] { } +////module [|Foo|] { export interface Bar { } } +////function [|Foo|]() { } //// -////export = /*1*/Foo; +////export = [|Foo|]; -goTo.marker("1"); -verify.referencesCountIs(4); \ No newline at end of file +const [r0, r1, r2, r3] = test.ranges(); +verify.referencesOf(r3, [r0, r1, r2, r3]); diff --git a/tests/cases/fourslash/referencesForMergedDeclarations6.ts b/tests/cases/fourslash/referencesForMergedDeclarations6.ts index ae0e3992146..e4b5b9111c6 100644 --- a/tests/cases/fourslash/referencesForMergedDeclarations6.ts +++ b/tests/cases/fourslash/referencesForMergedDeclarations6.ts @@ -1,14 +1,13 @@ /// ////interface Foo { } -////module Foo { +////module [|Foo|] { //// export interface Bar { } //// export module Bar { export interface Baz { } } //// export function Bar() { } ////} //// ////// module -////import a1 = /*1*/Foo; +////import a1 = [|Foo|]; -goTo.marker("1"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForMergedDeclarations7.ts b/tests/cases/fourslash/referencesForMergedDeclarations7.ts index 1c6d730797f..bc56b5d6f9d 100644 --- a/tests/cases/fourslash/referencesForMergedDeclarations7.ts +++ b/tests/cases/fourslash/referencesForMergedDeclarations7.ts @@ -2,13 +2,13 @@ ////interface Foo { } ////module Foo { -//// export interface Bar { } -//// export module Bar { export interface Baz { } } -//// export function Bar() { } +//// export interface [|Bar|] { } +//// export module [|Bar|] { export interface Baz { } } +//// export function [|Bar|]() { } ////} //// ////// module, value and type -////import a2 = Foo./*1*/Bar; +////import a2 = Foo.[|Bar|]; -goTo.marker("1"); -verify.referencesCountIs(4); \ No newline at end of file +const [r0, r1, r2, r3] = test.ranges(); +verify.referencesOf(r3, [r0, r1, r2, r3]); diff --git a/tests/cases/fourslash/referencesForMergedDeclarations8.ts b/tests/cases/fourslash/referencesForMergedDeclarations8.ts index 9e7a821a024..b5b1428b7c9 100644 --- a/tests/cases/fourslash/referencesForMergedDeclarations8.ts +++ b/tests/cases/fourslash/referencesForMergedDeclarations8.ts @@ -3,12 +3,11 @@ ////interface Foo { } ////module Foo { //// export interface Bar { } -//// export module Bar { export interface Baz { } } +//// export module [|Bar|] { export interface Baz { } } //// export function Bar() { } ////} //// ////// module -////import a3 = Foo./*1*/Bar.Baz; +////import a3 = Foo.[|Bar|].Baz; -goTo.marker("1"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForNoContext.ts b/tests/cases/fourslash/referencesForNoContext.ts index ee9391e5416..4631ce50c16 100644 --- a/tests/cases/fourslash/referencesForNoContext.ts +++ b/tests/cases/fourslash/referencesForNoContext.ts @@ -22,13 +22,13 @@ ////} goTo.marker("1"); -verify.referencesCountIs(0); +verify.referencesAre([]); goTo.marker("2"); -verify.referencesCountIs(0); +verify.referencesAre([]); goTo.marker("3"); -verify.referencesCountIs(0); +verify.referencesAre([]); goTo.marker("4"); -verify.referencesCountIs(0); +verify.referencesAre([]); diff --git a/tests/cases/fourslash/referencesForNumericLiteralPropertyNames.ts b/tests/cases/fourslash/referencesForNumericLiteralPropertyNames.ts index e2a781ff58c..5e6e8172092 100644 --- a/tests/cases/fourslash/referencesForNumericLiteralPropertyNames.ts +++ b/tests/cases/fourslash/referencesForNumericLiteralPropertyNames.ts @@ -1,15 +1,12 @@ /// ////class Foo { -//// public /*1*/12: any; +//// public [|12|]: any; ////} //// ////var x: Foo; -////x[/*2*/12]; -////x = { "12": 0 }; -////x = { /*3*/12: 0 }; +////x[[|12|]]; +////x = { "[|12|]": 0 }; +////x = { [|12|]: 0 }; -test.markers().forEach((m) => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(4); -}); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForObjectLiteralProperties.ts b/tests/cases/fourslash/referencesForObjectLiteralProperties.ts index 8515a5487b7..f2a815e845b 100644 --- a/tests/cases/fourslash/referencesForObjectLiteralProperties.ts +++ b/tests/cases/fourslash/referencesForObjectLiteralProperties.ts @@ -2,14 +2,10 @@ // References to an object literal property -////var x = { /*1*/add: 0, b: "string" }; -////x["add"]; -////x./*2*/add; +////var x = { [|add|]: 0, b: "string" }; +////x["[|add|]"]; +////x.[|add|]; ////var y = x; -////y.add; +////y.[|add|]; -goTo.marker("1"); -verify.referencesCountIs(4); - -goTo.marker("2"); -verify.referencesCountIs(4); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForOverrides.ts b/tests/cases/fourslash/referencesForOverrides.ts index 2b67269a6f3..4896bd1cd39 100644 --- a/tests/cases/fourslash/referencesForOverrides.ts +++ b/tests/cases/fourslash/referencesForOverrides.ts @@ -3,82 +3,76 @@ ////module FindRef3 { //// module SimpleClassTest { //// export class Foo { -//// public foo(): void { +//// public [|foo|](): void { //// } //// } //// export class Bar extends Foo { -//// public foo(): void { +//// public [|foo|](): void { //// } //// } //// } //// //// module SimpleInterfaceTest { //// export interface IFoo { -//// foo(): void; +//// [|ifoo|](): void; //// } //// export interface IBar extends IFoo { -//// foo(): void; +//// [|ifoo|](): void; //// } //// } //// //// module SimpleClassInterfaceTest { //// export interface IFoo { -//// foo(): void; +//// [|icfoo|](): void; //// } //// export class Bar implements IFoo { -//// public foo(): void { +//// public [|icfoo|](): void { //// } //// } //// } //// //// module Test { //// export interface IBase { -//// field: string; -//// method(): void; +//// [|field|]: string; +//// [|method|](): void; //// } //// //// export interface IBlah extends IBase { -//// field: string; +//// [|field|]: string; //// } //// //// export interface IBlah2 extends IBlah { -//// field: string; +//// [|field|]: string; //// } //// //// export interface IDerived extends IBlah2 { -//// method(): void; +//// [|method|](): void; //// } //// //// export class Bar implements IDerived { -//// public field: string; -//// public method(): void { } +//// public [|field|]: string; +//// public [|method|](): void { } //// } //// //// export class BarBlah extends Bar { -//// public field: string; +//// public [|field|]: string; //// } //// } //// //// function test() { //// var x = new SimpleClassTest.Bar(); -//// x.fo/*1*/o(); +//// x.[|foo|](); //// //// var y: SimpleInterfaceTest.IBar = null; -//// y.fo/*2*/o(); +//// y.[|ifoo|](); +//// +//// var w: SimpleClassInterfaceTest.Bar = null; +//// w.[|icfoo|](); //// //// var z = new Test.BarBlah(); -//// z.fi/*3*/eld = ""; +//// z.[|field|] = ""; +//// z.[|method|](); //// } ////} -// References to a field declared in a base class. -goTo.marker("1"); -verify.referencesCountIs(3); - -// References to a field declared in a base interface. -goTo.marker("2"); -verify.referencesCountIs(3); - -// References to a field declared in a chain of base class and interfaces. -goTo.marker("3"); -verify.referencesCountIs(6); +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForPropertiesOfGenericType.ts b/tests/cases/fourslash/referencesForPropertiesOfGenericType.ts index c611c40fc89..a8b08eae506 100644 --- a/tests/cases/fourslash/referencesForPropertiesOfGenericType.ts +++ b/tests/cases/fourslash/referencesForPropertiesOfGenericType.ts @@ -1,15 +1,13 @@ /// ////interface IFoo { -//// /*1*/doSomething(v: T): T; +//// [|doSomething|](v: T): T; ////} //// ////var x: IFoo; -////x.doSomething("ss"); +////x.[|doSomething|]("ss"); //// ////var y: IFoo; -////y.doSomething(12); +////y.[|doSomething|](12); - -goTo.marker("1"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForStatic.ts b/tests/cases/fourslash/referencesForStatic.ts index 34b34e2d474..c6594006708 100644 --- a/tests/cases/fourslash/referencesForStatic.ts +++ b/tests/cases/fourslash/referencesForStatic.ts @@ -6,35 +6,28 @@ ////var n = 43; //// ////class foo { -//// static n = ''; +//// static [|n|] = ''; //// //// public bar() { -//// foo./*1*/n = "'"; -//// if(foo.n) { -//// var x = foo.n; +//// foo.[|n|] = "'"; +//// if(foo.[|n|]) { +//// var x = foo.[|n|]; //// } //// } ////} //// ////class foo2 { -//// private x = foo./*2*/n; +//// private x = foo.[|n|]; //// constructor() { -//// foo./*3*/n = x; +//// foo.[|n|] = x; //// } //// //// function b(n) { -//// n = foo.n; +//// n = foo.[|n|]; //// } ////} // @Filename: referencesOnStatic_2.ts -////var q = foo.n; +////var q = foo.[|n|]; -goTo.marker("1"); -verify.referencesCountIs(8); - -goTo.marker("2"); -verify.referencesCountIs(8); - -goTo.marker("3"); -verify.referencesCountIs(8); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForStaticsAndMembersWithSameNames.ts b/tests/cases/fourslash/referencesForStaticsAndMembersWithSameNames.ts index fe83f47757b..cada3e0fcf4 100644 --- a/tests/cases/fourslash/referencesForStaticsAndMembersWithSameNames.ts +++ b/tests/cases/fourslash/referencesForStaticsAndMembersWithSameNames.ts @@ -3,12 +3,12 @@ ////module FindRef4 { //// module MixedStaticsClassTest { //// export class Foo { -//// b/*3*/ar: Foo; -//// static b/*4*/ar: Foo; +//// [|bar|]: Foo; +//// static [|bar|]: Foo; //// -//// public f/*1*/oo(): void { +//// public [|foo|](): void { //// } -//// public static f/*2*/oo(): void { +//// public static [|foo|](): void { //// } //// } //// } @@ -16,34 +16,25 @@ //// function test() { //// // instance function //// var x = new MixedStaticsClassTest.Foo(); -//// x.foo(); -//// x.bar; -//// -//// var y = new MixedStaticsClassTest.Foo(); -//// y.foo(); -//// y.bar; +//// x.[|foo|](); +//// x.[|bar|]; //// //// // static function -//// MixedStaticsClassTest.Foo.foo(); -//// MixedStaticsClassTest.Foo.bar; +//// MixedStaticsClassTest.Foo.[|foo|](); +//// MixedStaticsClassTest.Foo.[|bar|]; //// } ////} -// this line triggers a semantic/syntactic error check, remove line when 788570 is fixed -edit.insert(''); +const [fooBar, fooStaticBar, fooFoo, fooStaticFoo, xFoo, xBar, staticFoo, staticBar] = test.ranges(); // References to a member method with the same name as a static. -goTo.marker("1"); -verify.referencesCountIs(3); +verify.referencesOf(fooFoo, [fooFoo, xFoo]); // References to a static method with the same name as a member. -goTo.marker("2"); -verify.referencesCountIs(2); +verify.referencesOf(fooStaticFoo, [fooStaticFoo, staticFoo]); // References to a member property with the same name as a static. -goTo.marker("3"); -verify.referencesCountIs(3); +verify.referencesOf(fooBar, [fooBar, xBar]); // References to a static property with the same name as a member. -goTo.marker("4"); -verify.referencesCountIs(2); +verify.referencesOf(fooStaticBar, [fooStaticBar, staticBar]); diff --git a/tests/cases/fourslash/referencesForStringLiteralPropertyNames.ts b/tests/cases/fourslash/referencesForStringLiteralPropertyNames.ts index e2f61d9cab3..2db0325d324 100644 --- a/tests/cases/fourslash/referencesForStringLiteralPropertyNames.ts +++ b/tests/cases/fourslash/referencesForStringLiteralPropertyNames.ts @@ -1,16 +1,13 @@ /// ////class Foo { -//// public /*1*/"ss": any; +//// public "[|ss|]": any; ////} //// ////var x: Foo; -////x.ss; -////x[/*2*/"ss"]; -////x = { "ss": 0 }; -////x = { /*3*/ss: 0 }; +////x.[|ss|]; +////x["[|ss|]"]; +////x = { "[|ss|]": 0 }; +////x = { [|ss|]: 0 }; -test.markers().forEach((m) => { - goTo.position(m.position, m.fileName); - verify.referencesCountIs(5); -}); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForStringLiteralPropertyNames2.ts b/tests/cases/fourslash/referencesForStringLiteralPropertyNames2.ts index 67b956dcd02..275a2b2756c 100644 --- a/tests/cases/fourslash/referencesForStringLiteralPropertyNames2.ts +++ b/tests/cases/fourslash/referencesForStringLiteralPropertyNames2.ts @@ -1,15 +1,10 @@ /// ////class Foo { -//// /*1*/"blah"() { return 0; } +//// "[|blah|]"() { return 0; } ////} //// ////var x: Foo; -////x./*2*/blah; +////x.[|blah|]; - -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForStringLiteralPropertyNames3.ts b/tests/cases/fourslash/referencesForStringLiteralPropertyNames3.ts index 3288aec9b92..55a067ae8c3 100644 --- a/tests/cases/fourslash/referencesForStringLiteralPropertyNames3.ts +++ b/tests/cases/fourslash/referencesForStringLiteralPropertyNames3.ts @@ -1,15 +1,11 @@ /// ////class Foo2 { -//// get /*1*/"42"() { return 0; } -//// set /*2*/42(n) { } +//// get "[|42|]"() { return 0; } +//// set [|42|](n) { } ////} //// ////var y: Foo2; -////y[42]; +////y[[|42|]]; -goTo.marker("1"); -verify.referencesCountIs(3); - -goTo.marker("2"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForStringLiteralPropertyNames4.ts b/tests/cases/fourslash/referencesForStringLiteralPropertyNames4.ts index 08d04188ee9..34cad8f11e8 100644 --- a/tests/cases/fourslash/referencesForStringLiteralPropertyNames4.ts +++ b/tests/cases/fourslash/referencesForStringLiteralPropertyNames4.ts @@ -4,5 +4,4 @@ ////x["[|someProperty|]"] = 3; ////x./*1*/[|someProperty|] = 5; -goTo.marker("1"); -test.ranges().forEach(r => verify.referencesAtPositionContains(r)); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/referencesForUnionProperties.ts b/tests/cases/fourslash/referencesForUnionProperties.ts index d5f0a2fd516..07eebeb5f74 100644 --- a/tests/cases/fourslash/referencesForUnionProperties.ts +++ b/tests/cases/fourslash/referencesForUnionProperties.ts @@ -1,16 +1,16 @@ /// ////interface One { -//// common: { /*1*/a: number; }; +//// common: { [|a|]: number; }; ////} //// ////interface Base { -//// /*2*/a: string; +//// [|a|]: string; //// b: string; ////} //// ////interface HasAOrB extends Base { -//// /*3*/a: string; +//// [|a|]: string; //// b: string; ////} //// @@ -20,16 +20,10 @@ //// ////var x : One | Two; //// -////x.common./*4*/a; +////x.common.[|a|]; -goTo.marker("1"); -verify.referencesCountIs(2); // One.common.a, x.common.a - -goTo.marker("2"); -verify.referencesCountIs(3); // Base.a, HasAOrB.a, x.common.a - -goTo.marker("3"); -verify.referencesCountIs(3); // Base.a, HasAOrB.a, x.common.a - -goTo.marker("4"); -verify.referencesCountIs(4); // One.common.a, Base.a, HasAOrB.a, x.common.a \ No newline at end of file +const [one, base, hasAOrB, x] = test.ranges(); +verify.referencesOf(one, [one, x]); +verify.referencesOf(base, [base, hasAOrB, x]); +verify.referencesOf(hasAOrB, [base, hasAOrB, x]); +verify.referencesOf(x, [one, base, hasAOrB, x]); diff --git a/tests/cases/fourslash/referencesInComment.ts b/tests/cases/fourslash/referencesInComment.ts index 7ae9fdec9d2..c53a2e6d9b3 100644 --- a/tests/cases/fourslash/referencesInComment.ts +++ b/tests/cases/fourslash/referencesInComment.ts @@ -5,14 +5,6 @@ ////class foo { } ////var bar = 0; -goTo.marker("1"); -verify.referencesCountIs(0); - -goTo.marker("2"); -verify.referencesCountIs(0); - -goTo.marker("3"); -verify.referencesCountIs(0); - -goTo.marker("4"); -verify.referencesCountIs(0); \ No newline at end of file +for (const marker of test.markers()) { + verify.referencesAre([]); +} diff --git a/tests/cases/fourslash/remoteGetReferences.ts b/tests/cases/fourslash/remoteGetReferences.ts index cdc4ab035a3..d9b6c6e852c 100644 --- a/tests/cases/fourslash/remoteGetReferences.ts +++ b/tests/cases/fourslash/remoteGetReferences.ts @@ -86,19 +86,19 @@ //// //////Remotes //////Type test -////var remoteclsTest: rem/*2*/otefooCls; +////var remoteclsTest: [|remotefooCls|]; //// //////Arguments -////remoteclsTest = new remotefooCls(remoteglo/*4*/balVar); -////remotefoo(remotegl/*3*/obalVar); +////remoteclsTest = new [|remotefooCls|]([|remoteglobalVar|]); +////remotefoo([|remoteglobalVar|]); //// //////Increments -////remotefooCls.remoteclsSVar++; +////[|remotefooCls|].[|remoteclsSVar|]++; ////remotemodTest.remotemodVar++; -/////*1*/remoteglobalVar = remoteglobalVar + remoteglobalVar; +////[|remoteglobalVar|] = [|remoteglobalVar|] + [|remoteglobalVar|]; //// //////ETC - Other cases -////remoteglobalVar = 3; +////[|remoteglobalVar|] = 3; //// //////Find References misses method param ////var @@ -119,18 +119,18 @@ ////}); // @Filename: remoteGetReferences_2.ts -////var remoteglobalVar: number = 2; +////var [|remoteglobalVar|]: number = 2; //// -////class remotefooCls { +////class [|remotefooCls|] { //// //Declare -//// rem/*5*/oteclsVar = 1; -//// static r/*6*/emoteclsSVar = 1; +//// [|remoteclsVar|] = 1; +//// static [|remoteclsSVar|] = 1; //// //// constructor(public remoteclsParam: number) { //// //Increments -//// remoteglobalVar++; -//// this.remoteclsVar++; -//// remotefooCls.remoteclsSVar++; +//// [|remoteglobalVar|]++; +//// this.[|remoteclsVar|]++; +//// [|remotefooCls|].[|remoteclsSVar|]++; //// this.remoteclsParam++; //// remotemodTest.remotemodVar++; //// } @@ -141,8 +141,8 @@ //// var remotefnVar = 1; //// //// //Increments -//// remotefooCls.remoteclsSVar++; -//// remoteglobalVar++; +//// [|remotefooCls|].[|remoteclsSVar|]++; +//// [|remoteglobalVar|]++; //// remotemodTest.remotemodVar++; //// remotefnVar++; //// @@ -155,8 +155,8 @@ //// export var remotemodVar: number; //// //// //Increments -//// remoteglobalVar++; -//// remotefooCls.remoteclsSVar++; +//// [|remoteglobalVar|]++; +//// [|remotefooCls|].[|remoteclsSVar|]++; //// remotemodVar++; //// //// class remotetestCls { @@ -167,8 +167,8 @@ //// static remoteboo = remotefoo; //// //// //Increments -//// remoteglobalVar++; -//// remotefooCls.remoteclsSVar++; +//// [|remoteglobalVar|]++; +//// [|remotefooCls|].[|remoteclsSVar|]++; //// remotemodVar++; //// } //// @@ -177,26 +177,4 @@ //// } ////} -// References to a variable declared in global. -goTo.marker("1"); -verify.referencesCountIs(11); - -// References to a type. -goTo.marker("2"); -verify.referencesCountIs(8); - -// References to a function argument. -goTo.marker("3"); -verify.referencesCountIs(11); - -// References to a class argument. -goTo.marker("4"); -verify.referencesCountIs(11); - -// References to a variable declared in a class. -goTo.marker("5"); -verify.referencesCountIs(2); - -// References to static variable declared in a class. -goTo.marker("6"); -verify.referencesCountIs(6); \ No newline at end of file +verify.rangesWithSameTextReferenceEachOther(); diff --git a/tests/cases/fourslash/renameImportAndExportInDiffFiles.ts b/tests/cases/fourslash/renameImportAndExportInDiffFiles.ts index 7b098721196..e982d6a4c7b 100644 --- a/tests/cases/fourslash/renameImportAndExportInDiffFiles.ts +++ b/tests/cases/fourslash/renameImportAndExportInDiffFiles.ts @@ -1,18 +1,10 @@ /// // @Filename: a.ts -////export var /*1*/a; +////export var [|a|]; // @Filename: b.ts -////import { /*2*/a } from './a'; -////export { /*3*/a }; +////import { [|a|] } from './a'; +////export { [|a|] }; -goTo.file("a.ts"); -goTo.marker("1"); - -goTo.file("b.ts"); -goTo.marker("2"); -verify.referencesCountIs(3); - -goTo.marker("3"); -verify.referencesCountIs(3); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/renameThis.ts b/tests/cases/fourslash/renameThis.ts new file mode 100644 index 00000000000..f567cace70d --- /dev/null +++ b/tests/cases/fourslash/renameThis.ts @@ -0,0 +1,22 @@ +/// + +////function f([|this|]) { +//// return [|this|]; +////} +////this/**/; +////const _ = { [|this|]: 0 }.[|this|]; + +let [r0, r1, r2, r3] = test.ranges() +for (let range of [r0, r1]) { + goTo.position(range.start); + verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false, [r0, r1]); +} + +// Trying to rename a non-parameter 'this' should fail +goTo.marker(); +verify.renameInfoFailed("You cannot rename this element."); + +for (let range of [r2, r3]) { + goTo.position(range.start); + verify.renameLocations(/*findInStrings*/ false, /*findInComments*/ false, [r2, r3]); +} diff --git a/tests/cases/fourslash/server/jsdocTypedefTagNavigateTo.ts b/tests/cases/fourslash/server/jsdocTypedefTagNavigateTo.ts index 77cd75aa44c..1c617091f4c 100644 --- a/tests/cases/fourslash/server/jsdocTypedefTagNavigateTo.ts +++ b/tests/cases/fourslash/server/jsdocTypedefTagNavigateTo.ts @@ -11,20 +11,36 @@ //// var numberLike; verify.navigationBar([ - { - "text": "NumberLike", - "kind": "type" - }, - { - "text": "NumberLike2", - "kind": "type" - }, - { - "text": "NumberLike2", - "kind": "var" - }, - { - "text": "numberLike", - "kind": "var" - } + { + "text": "", + "kind": "module", + "childItems": [ + { + "text": "numberLike", + "kind": "var" + }, + { + "text": "NumberLike", + "kind": "type" + }, + { + "text": "NumberLike2", + "kind": "var" + }, + { + "text": "NumberLike2", + "kind": "type" + } + ] + }, + { + "text": "NumberLike", + "kind": "type", + "indent": 1, + }, + { + "text": "NumberLike2", + "kind": "type", + "indent": 1 + } ]); \ No newline at end of file diff --git a/tests/cases/fourslash/server/references01.ts b/tests/cases/fourslash/server/references01.ts index 0ecbeb43de3..528f79de5b4 100644 --- a/tests/cases/fourslash/server/references01.ts +++ b/tests/cases/fourslash/server/references01.ts @@ -3,16 +3,13 @@ // Global class reference. // @Filename: referencesForGlobals_1.ts -////class /*2*/globalClass { +////class [|globalClass|] { //// public f() { } ////} // @Filename: referencesForGlobals_2.ts /////// -////var c = /*1*/globalClass(); +////var c = [|globalClass|](); -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); \ No newline at end of file +// Must reverse ranges so that referencesForGlobals_2 goes first -- otherwise referencesForGlobals_1 won't pick it up. +verify.rangesReferenceEachOther(test.ranges().reverse()); diff --git a/tests/cases/fourslash/server/referencesInConfiguredProject.ts b/tests/cases/fourslash/server/referencesInConfiguredProject.ts index 9a0d7095a93..109b5e36e4d 100644 --- a/tests/cases/fourslash/server/referencesInConfiguredProject.ts +++ b/tests/cases/fourslash/server/referencesInConfiguredProject.ts @@ -3,18 +3,14 @@ // Global class reference. // @Filename: referencesForGlobals_1.ts -////class /*2*/globalClass { +////class [|globalClass|] { //// public f() { } ////} // @Filename: referencesForGlobals_2.ts -////var c = /*1*/globalClass(); +////var c = [|globalClass|](); // @Filename: tsconfig.json ////{ "files": ["referencesForGlobals_1.ts", "referencesForGlobals_2.ts"] } -goTo.marker("1"); -verify.referencesCountIs(2); - -goTo.marker("2"); -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/server/typeReferenceOnServer.ts b/tests/cases/fourslash/server/typeReferenceOnServer.ts new file mode 100644 index 00000000000..574ea6f60c4 --- /dev/null +++ b/tests/cases/fourslash/server/typeReferenceOnServer.ts @@ -0,0 +1,9 @@ +/// + +/////// +////var x: number; +////x./*1*/ + +goTo.marker("1"); +verify.not.completionListIsEmpty(); + diff --git a/tests/cases/fourslash/shims-pp/getReferencesAtPosition.ts b/tests/cases/fourslash/shims-pp/getReferencesAtPosition.ts index a25a6e1285f..cb829807602 100644 --- a/tests/cases/fourslash/shims-pp/getReferencesAtPosition.ts +++ b/tests/cases/fourslash/shims-pp/getReferencesAtPosition.ts @@ -7,7 +7,7 @@ //// //// } //// -//// public /*1*/start(){ +//// public [|start|](){ //// return this; //// } //// @@ -20,10 +20,7 @@ ////import Second = require("./findAllRefsOnDefinition-import"); //// ////var second = new Second.Test() -////second.start(); +////second.[|start|](); ////second.stop(); -goTo.file("findAllRefsOnDefinition-import.ts"); -goTo.marker("1"); - -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/shims/getReferencesAtPosition.ts b/tests/cases/fourslash/shims/getReferencesAtPosition.ts index a25a6e1285f..cb829807602 100644 --- a/tests/cases/fourslash/shims/getReferencesAtPosition.ts +++ b/tests/cases/fourslash/shims/getReferencesAtPosition.ts @@ -7,7 +7,7 @@ //// //// } //// -//// public /*1*/start(){ +//// public [|start|](){ //// return this; //// } //// @@ -20,10 +20,7 @@ ////import Second = require("./findAllRefsOnDefinition-import"); //// ////var second = new Second.Test() -////second.start(); +////second.[|start|](); ////second.stop(); -goTo.file("findAllRefsOnDefinition-import.ts"); -goTo.marker("1"); - -verify.referencesCountIs(2); \ No newline at end of file +verify.rangesReferenceEachOther(); diff --git a/tests/cases/fourslash/stringBraceCompletionPosition.ts b/tests/cases/fourslash/stringBraceCompletionPosition.ts index 09a9a86b0f1..5df80e2c676 100644 --- a/tests/cases/fourslash/stringBraceCompletionPosition.ts +++ b/tests/cases/fourslash/stringBraceCompletionPosition.ts @@ -6,11 +6,11 @@ //// /*3*/"; goTo.marker('1'); -verify.not.isValidBraceCompletionAtPostion('('); +verify.not.isValidBraceCompletionAtPosition('('); goTo.marker('2'); -verify.not.isValidBraceCompletionAtPostion('('); +verify.not.isValidBraceCompletionAtPosition('('); goTo.marker('3'); -verify.not.isValidBraceCompletionAtPostion('('); +verify.not.isValidBraceCompletionAtPosition('('); diff --git a/tests/cases/fourslash/stringTemplateBraceCompletionPosition.ts b/tests/cases/fourslash/stringTemplateBraceCompletionPosition.ts index 33bcd4d0625..73c945e932c 100644 --- a/tests/cases/fourslash/stringTemplateBraceCompletionPosition.ts +++ b/tests/cases/fourslash/stringTemplateBraceCompletionPosition.ts @@ -4,13 +4,13 @@ //// var y = `hello /*2*/world, ${100}how /*3*/are you{ 200 } to/*4*/day!?` goTo.marker('1'); -verify.not.isValidBraceCompletionAtPostion('('); +verify.not.isValidBraceCompletionAtPosition('('); goTo.marker('2'); -verify.not.isValidBraceCompletionAtPostion('('); +verify.not.isValidBraceCompletionAtPosition('('); goTo.marker('3'); -verify.not.isValidBraceCompletionAtPostion('('); +verify.not.isValidBraceCompletionAtPosition('('); goTo.marker('4'); -verify.not.isValidBraceCompletionAtPostion('('); +verify.not.isValidBraceCompletionAtPosition('('); diff --git a/tests/cases/fourslash/validBraceCompletionPosition.ts b/tests/cases/fourslash/validBraceCompletionPosition.ts index 57c30c27c21..1d281be705d 100644 --- a/tests/cases/fourslash/validBraceCompletionPosition.ts +++ b/tests/cases/fourslash/validBraceCompletionPosition.ts @@ -8,16 +8,16 @@ //// var x = /*5*/{ a:true } goTo.marker('1'); -verify.isValidBraceCompletionAtPostion('('); +verify.isValidBraceCompletionAtPosition('('); goTo.marker('2'); -verify.isValidBraceCompletionAtPostion('('); +verify.isValidBraceCompletionAtPosition('('); goTo.marker('3'); -verify.isValidBraceCompletionAtPostion('('); +verify.isValidBraceCompletionAtPosition('('); goTo.marker('4'); -verify.isValidBraceCompletionAtPostion('('); +verify.isValidBraceCompletionAtPosition('('); goTo.marker('5'); -verify.isValidBraceCompletionAtPostion('('); \ No newline at end of file +verify.isValidBraceCompletionAtPosition('('); \ No newline at end of file diff --git a/tests/cases/project/emitDecoratorMetadataCommonJSISolatedModules.json b/tests/cases/project/emitDecoratorMetadataCommonJSISolatedModules.json new file mode 100644 index 00000000000..27b2e09172b --- /dev/null +++ b/tests/cases/project/emitDecoratorMetadataCommonJSISolatedModules.json @@ -0,0 +1,6 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModule", + "baselineCheck": true, + "runTest": true +} \ No newline at end of file diff --git a/tests/cases/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.json b/tests/cases/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.json new file mode 100644 index 00000000000..8930951b9a4 --- /dev/null +++ b/tests/cases/project/emitDecoratorMetadataCommonJSISolatedModulesNoResolve.json @@ -0,0 +1,6 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModuleNoResolve", + "baselineCheck": true, + "runTest": true +} \ No newline at end of file diff --git a/tests/cases/project/emitDecoratorMetadataSystemJS.json b/tests/cases/project/emitDecoratorMetadataSystemJS.json new file mode 100644 index 00000000000..1ed6b13dcb3 --- /dev/null +++ b/tests/cases/project/emitDecoratorMetadataSystemJS.json @@ -0,0 +1,6 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJS", + "baselineCheck": true, + "runTest": true +} \ No newline at end of file diff --git a/tests/cases/project/emitDecoratorMetadataSystemJSISolatedModules.json b/tests/cases/project/emitDecoratorMetadataSystemJSISolatedModules.json new file mode 100644 index 00000000000..da18f2602af --- /dev/null +++ b/tests/cases/project/emitDecoratorMetadataSystemJSISolatedModules.json @@ -0,0 +1,6 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModule", + "baselineCheck": true, + "runTest": true +} \ No newline at end of file diff --git a/tests/cases/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.json b/tests/cases/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.json new file mode 100644 index 00000000000..d87a1361cdd --- /dev/null +++ b/tests/cases/project/emitDecoratorMetadataSystemJSISolatedModulesNoResolve.json @@ -0,0 +1,6 @@ +{ + "scenario": "Emit decorator metadata when commonJS and isolatedModules are on", + "projectRoot": "tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModuleNoResolve", + "baselineCheck": true, + "runTest": true +} \ No newline at end of file diff --git a/tests/cases/project/nodeModulesImportHigher.json b/tests/cases/project/nodeModulesImportHigher.json new file mode 100644 index 00000000000..2cca8c03f00 --- /dev/null +++ b/tests/cases/project/nodeModulesImportHigher.json @@ -0,0 +1,8 @@ +{ + "scenario": "Verify that a higher import loads a module that was previously skipped", + "projectRoot": "tests/cases/projects/NodeModulesSearch", + "baselineCheck": true, + "declaration": false, + "moduleResolution": "node", + "project": "importHigher" +} diff --git a/tests/cases/project/nodeModulesMaxDepthExceeded.json b/tests/cases/project/nodeModulesMaxDepthExceeded.json new file mode 100644 index 00000000000..45e1210aa8c --- /dev/null +++ b/tests/cases/project/nodeModulesMaxDepthExceeded.json @@ -0,0 +1,8 @@ +{ + "scenario": "Verify that JavaScript modules are not resolved if too many hops", + "projectRoot": "tests/cases/projects/NodeModulesSearch", + "baselineCheck": true, + "declaration": false, + "moduleResolution": "node", + "project": "maxDepthExceeded" +} diff --git a/tests/cases/project/nodeModulesMaxDepthIncreased.json b/tests/cases/project/nodeModulesMaxDepthIncreased.json new file mode 100644 index 00000000000..0973ae4bd5b --- /dev/null +++ b/tests/cases/project/nodeModulesMaxDepthIncreased.json @@ -0,0 +1,8 @@ +{ + "scenario": "Verify that the setting to search node_modules deeper takes effect", + "projectRoot": "tests/cases/projects/NodeModulesSearch", + "baselineCheck": true, + "declaration": false, + "moduleResolution": "node", + "project": "maxDepthIncreased" +} diff --git a/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m1/index.js b/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m1/index.js new file mode 100644 index 00000000000..7ff454a2402 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m1/index.js @@ -0,0 +1,10 @@ +var m2 = require('m2'); + +/** + * @param {string} p1 The first param + */ +exports.f1 = function(p1) { + return 42; +}; + +exports.f2 = m2; diff --git a/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m2/entry.js b/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m2/entry.js new file mode 100644 index 00000000000..ce3eee6d895 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m2/entry.js @@ -0,0 +1,7 @@ +var m3 = require("m3"); + +module.exports = { + "a": 42, + "b": "hello, world", + "person": m3.person +}; diff --git a/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m2/node_modules/m3/index.js b/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m2/node_modules/m3/index.js new file mode 100644 index 00000000000..aeec6707697 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m2/node_modules/m3/index.js @@ -0,0 +1,4 @@ +exports.person = { + "name": "John Doe", + "age": 42 +} diff --git a/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m2/package.json b/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m2/package.json new file mode 100644 index 00000000000..33534249d41 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/importHigher/node_modules/m2/package.json @@ -0,0 +1,3 @@ +{ + "main": "entry.js" +} diff --git a/tests/cases/projects/NodeModulesSearch/importHigher/root.ts b/tests/cases/projects/NodeModulesSearch/importHigher/root.ts new file mode 100644 index 00000000000..9bf5b1f82c3 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/importHigher/root.ts @@ -0,0 +1,6 @@ +import * as m1 from "m1"; +import * as m2 from "m2"; + +m1.f1("test"); +m1.f2.a = 10; +m1.f2.person.age = "10"; // Error: Should be number (if direct import of m2 made the m3 module visible). diff --git a/tests/cases/projects/NodeModulesSearch/importHigher/tsconfig.json b/tests/cases/projects/NodeModulesSearch/importHigher/tsconfig.json new file mode 100644 index 00000000000..c7b95984b42 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/importHigher/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "allowJs": true, + "declaration": false, + "moduleResolution": "node" + } +} diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js new file mode 100644 index 00000000000..0433199ffd5 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js @@ -0,0 +1,13 @@ +var m2 = require('m2'); +var rel = require('./relative'); + +/** + * @param {string} p1 The first param + */ +exports.f1 = function(p1) { + return 42; +}; + +exports.f2 = m2; + +exports.rel = rel.relativeProp; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js new file mode 100644 index 00000000000..8b051584b85 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js @@ -0,0 +1 @@ +exports.relativeProp = true; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m2/entry.js b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m2/entry.js new file mode 100644 index 00000000000..ce3eee6d895 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m2/entry.js @@ -0,0 +1,7 @@ +var m3 = require("m3"); + +module.exports = { + "a": 42, + "b": "hello, world", + "person": m3.person +}; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m2/node_modules/m3/index.js b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m2/node_modules/m3/index.js new file mode 100644 index 00000000000..aeec6707697 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m2/node_modules/m3/index.js @@ -0,0 +1,4 @@ +exports.person = { + "name": "John Doe", + "age": 42 +} diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m2/package.json b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m2/package.json new file mode 100644 index 00000000000..33534249d41 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m2/package.json @@ -0,0 +1,3 @@ +{ + "main": "entry.js" +} diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts new file mode 100644 index 00000000000..f847ea6048a --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts @@ -0,0 +1,6 @@ +import * as m1 from "m1"; +m1.f1("test"); +m1.f2.a = "10"; // Error: Should be number +m1.rel = 42; // Error: Should be boolean + +m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json new file mode 100644 index 00000000000..52633bb5a98 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "allowJs": true, + "maxNodeModuleJsDepth": 1, // Note: Module m1 is already included as a root file + "outDir": "built" + }, + "include": ["**/*"], + "exclude": ["node_modules/m2/**/*"] +} diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@types/m4/entry.d.ts b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@types/m4/entry.d.ts new file mode 100644 index 00000000000..f0fc245910a --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@types/m4/entry.d.ts @@ -0,0 +1 @@ +export declare var foo: number; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@types/m4/package.json b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@types/m4/package.json new file mode 100644 index 00000000000..53ac1558a23 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/@types/m4/package.json @@ -0,0 +1,5 @@ +{ + "types": "entry.d.ts", + "name": "m4", + "version": "1.0.0" +} \ No newline at end of file diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m1/index.js b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m1/index.js new file mode 100644 index 00000000000..7ff454a2402 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m1/index.js @@ -0,0 +1,10 @@ +var m2 = require('m2'); + +/** + * @param {string} p1 The first param + */ +exports.f1 = function(p1) { + return 42; +}; + +exports.f2 = m2; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m2/entry.js b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m2/entry.js new file mode 100644 index 00000000000..ce3eee6d895 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m2/entry.js @@ -0,0 +1,7 @@ +var m3 = require("m3"); + +module.exports = { + "a": 42, + "b": "hello, world", + "person": m3.person +}; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m2/node_modules/m3/index.js b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m2/node_modules/m3/index.js new file mode 100644 index 00000000000..aeec6707697 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m2/node_modules/m3/index.js @@ -0,0 +1,4 @@ +exports.person = { + "name": "John Doe", + "age": 42 +} diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m2/package.json b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m2/package.json new file mode 100644 index 00000000000..33534249d41 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m2/package.json @@ -0,0 +1,3 @@ +{ + "main": "entry.js" +} diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m4/entry.js b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m4/entry.js new file mode 100644 index 00000000000..a1cb557b18d --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m4/entry.js @@ -0,0 +1 @@ +exports.test = "hello, world"; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m4/package.json b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m4/package.json new file mode 100644 index 00000000000..4ae99f312fc --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/node_modules/m4/package.json @@ -0,0 +1,5 @@ +{ + "name": "m4", + "version": "1.0.0", + "main": "entry.js" +} \ No newline at end of file diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/root.ts b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/root.ts new file mode 100644 index 00000000000..2b80564ae26 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/root.ts @@ -0,0 +1,9 @@ +import * as m1 from "m1"; +import * as m4 from "m4"; + +m1.f1("test"); +m1.f2.a = 10; + +m1.f2.person.age = "10"; // Should error if loaded the .js files correctly + +let r2 = 3 + m4.foo; // Should be OK if correctly using the @types .d.ts file diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/tsconfig.json b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/tsconfig.json new file mode 100644 index 00000000000..5388cc5d39f --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthIncreased/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "allowJs": true, + "maxNodeModuleJsDepth": 3 + } +} diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModule/main.ts b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModule/main.ts new file mode 100644 index 00000000000..f75e8a4d9d6 --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModule/main.ts @@ -0,0 +1,8 @@ +import * as ng from "angular2/core"; + +declare function foo(...args: any[]); + +@foo +export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} +} \ No newline at end of file diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModule/tsconfig.json b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModule/tsconfig.json new file mode 100644 index 00000000000..27d98c7f2c9 --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModule/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "isolatedModules": true + }, + "files": [ + "main.ts" + ] +} \ No newline at end of file diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModuleNoResolve/main.ts b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModuleNoResolve/main.ts new file mode 100644 index 00000000000..f75e8a4d9d6 --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModuleNoResolve/main.ts @@ -0,0 +1,8 @@ +import * as ng from "angular2/core"; + +declare function foo(...args: any[]); + +@foo +export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} +} \ No newline at end of file diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModuleNoResolve/tsconfig.json b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModuleNoResolve/tsconfig.json new file mode 100644 index 00000000000..a34d38cb68e --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataCommonJSIsolatedModuleNoResolve/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "isolatedModules": true, + "noResolve": true + }, + "files": [ + "main.ts" + ] +} \ No newline at end of file diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJS/main.ts b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJS/main.ts new file mode 100644 index 00000000000..f75e8a4d9d6 --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJS/main.ts @@ -0,0 +1,8 @@ +import * as ng from "angular2/core"; + +declare function foo(...args: any[]); + +@foo +export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} +} \ No newline at end of file diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJS/tsconfig.json b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJS/tsconfig.json new file mode 100644 index 00000000000..6c78695c505 --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJS/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "target": "es5", + "module": "system", + "emitDecoratorMetadata": true, + "experimentalDecorators": true + }, + "files": [ + "main.ts" + ] +} \ No newline at end of file diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModule/main.ts b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModule/main.ts new file mode 100644 index 00000000000..f75e8a4d9d6 --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModule/main.ts @@ -0,0 +1,8 @@ +import * as ng from "angular2/core"; + +declare function foo(...args: any[]); + +@foo +export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} +} \ No newline at end of file diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModule/tsconfig.json b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModule/tsconfig.json new file mode 100644 index 00000000000..2a8dcffba74 --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModule/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "target": "es5", + "module": "system", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "isolatedModules": true + }, + "files": [ + "main.ts" + ] +} \ No newline at end of file diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModuleNoResolve/main.ts b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModuleNoResolve/main.ts new file mode 100644 index 00000000000..f75e8a4d9d6 --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModuleNoResolve/main.ts @@ -0,0 +1,8 @@ +import * as ng from "angular2/core"; + +declare function foo(...args: any[]); + +@foo +export class MyClass1 { + constructor(private _elementRef: ng.ElementRef){} +} \ No newline at end of file diff --git a/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModuleNoResolve/tsconfig.json b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModuleNoResolve/tsconfig.json new file mode 100644 index 00000000000..b76669d9329 --- /dev/null +++ b/tests/cases/projects/decoratorMetadata/emitDecoratorMetadataSystemJSIsolatedModuleNoResolve/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "target": "es5", + "module": "system", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "isolatedModules": true, + "noResolve": true + }, + "files": [ + "main.ts" + ] +} \ No newline at end of file diff --git a/tests/cases/unittests/cachingInServerLSHost.ts b/tests/cases/unittests/cachingInServerLSHost.ts index 08cd5366f11..35b2e277ecf 100644 --- a/tests/cases/unittests/cachingInServerLSHost.ts +++ b/tests/cases/unittests/cachingInServerLSHost.ts @@ -48,7 +48,7 @@ namespace ts { }, getDirectories: (path: string) => [], getEnvironmentVariable: (name: string) => "", - readDirectory: (path: string, extension?: string, exclude?: string[]): string[] => { + readDirectory: (path: string, extension?: string[], exclude?: string[], include?: string[]): string[] => { throw new Error("NYI"); }, exit: (exitCode?: number) => { @@ -83,7 +83,7 @@ namespace ts { const projectService = new server.ProjectService(serverHost, logger); const rootScriptInfo = projectService.openFile(rootFile, /* openedByClient */true); const project = projectService.createInferredProject(rootScriptInfo); - project.setProjectOptions( {files: [rootScriptInfo.fileName], compilerOptions: {module: ts.ModuleKind.AMD} } ); + project.setProjectOptions( { files: [rootScriptInfo.fileName], compilerOptions: { module: ts.ModuleKind.AMD } } ); return { project, rootScriptInfo @@ -109,6 +109,8 @@ namespace ts { let diags = project.compilerService.languageService.getSemanticDiagnostics(imported.name); assert.equal(diags.length, 1); + let content = rootScriptInfo.getText(); + const originalFileExists = serverHost.fileExists; { // patch fileExists to make sure that disk is not touched @@ -119,7 +121,8 @@ namespace ts { const newContent = `import {x} from "f1" var x: string = 1;`; - rootScriptInfo.editContent(0, rootScriptInfo.content.length, newContent); + rootScriptInfo.editContent(0, content.length, newContent); + content = newContent; // trigger synchronization to make sure that import will be fetched from the cache diags = project.compilerService.languageService.getSemanticDiagnostics(imported.name); // ensure file has correct number of errors after edit @@ -136,7 +139,8 @@ namespace ts { return originalFileExists.call(serverHost, fileName); }; const newContent = `import {x} from "f2"`; - rootScriptInfo.editContent(0, rootScriptInfo.content.length, newContent); + rootScriptInfo.editContent(0, content.length, newContent); + content = newContent; try { // trigger synchronization to make sure that LSHost will try to find 'f2' module on disk @@ -146,6 +150,7 @@ namespace ts { catch (e) { assert.isTrue(e.message.indexOf(`Could not find file: '${imported.name}'.`) === 0); } + assert.isTrue(fileExistsIsCalled); } { @@ -160,7 +165,8 @@ namespace ts { }; const newContent = `import {x} from "f1"`; - rootScriptInfo.editContent(0, rootScriptInfo.content.length, newContent); + rootScriptInfo.editContent(0, content.length, newContent); + content = newContent; project.compilerService.languageService.getSemanticDiagnostics(imported.name); assert.isTrue(fileExistsCalled); @@ -205,7 +211,7 @@ namespace ts { }; const { project, rootScriptInfo } = createProject(root.name, serverHost); - + const content = rootScriptInfo.getText(); let diags = project.compilerService.languageService.getSemanticDiagnostics(root.name); assert.isTrue(fileExistsCalledForBar, "'fileExists' should be called"); assert.isTrue(diags.length === 1, "one diagnostic expected"); @@ -214,11 +220,11 @@ namespace ts { // 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, 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/incrementalParser.ts b/tests/cases/unittests/incrementalParser.ts index 0988d51e11b..741c9e54cad 100644 --- a/tests/cases/unittests/incrementalParser.ts +++ b/tests/cases/unittests/incrementalParser.ts @@ -647,7 +647,7 @@ module m3 { }\ const oldText = ScriptSnapshot.fromString(source); const newTextAndChange = withInsert(oldText, 0, ""); - compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 8); + compareTrees(oldText, newTextAndChange.text, newTextAndChange.textChangeRange, 7); }); it("Class to interface", () => { diff --git a/tests/cases/unittests/jsDocParsing.ts b/tests/cases/unittests/jsDocParsing.ts index f87b20f804f..fa737630cb1 100644 --- a/tests/cases/unittests/jsDocParsing.ts +++ b/tests/cases/unittests/jsDocParsing.ts @@ -280,6 +280,13 @@ namespace ts { parsesCorrectly("paramWithoutType", `/** * @param foo + */`); + parsesCorrectly("typedefTagWithChildrenTags", +`/** + * @typedef People + * @type {Object} + * @property {number} age + * @property {string} name */`); }); }); diff --git a/tests/cases/unittests/matchFiles.ts b/tests/cases/unittests/matchFiles.ts new file mode 100644 index 00000000000..91be2de8747 --- /dev/null +++ b/tests/cases/unittests/matchFiles.ts @@ -0,0 +1,1152 @@ +/// +/// +/// + +namespace ts { + const caseInsensitiveBasePath = "c:/dev/"; + const caseInsensitiveHost = new Utils.MockParseConfigHost(caseInsensitiveBasePath, /*useCaseSensitiveFileNames*/ false, [ + "c:/dev/a.ts", + "c:/dev/a.d.ts", + "c:/dev/a.js", + "c:/dev/b.ts", + "c:/dev/b.js", + "c:/dev/c.d.ts", + "c:/dev/z/a.ts", + "c:/dev/z/abz.ts", + "c:/dev/z/aba.ts", + "c:/dev/z/b.ts", + "c:/dev/z/bbz.ts", + "c:/dev/z/bba.ts", + "c:/dev/x/a.ts", + "c:/dev/x/aa.ts", + "c:/dev/x/b.ts", + "c:/dev/x/y/a.ts", + "c:/dev/x/y/b.ts", + "c:/dev/js/a.js", + "c:/dev/js/b.js", + "c:/ext/ext.ts", + "c:/ext/b/a..b.ts" + ]); + + const caseSensitiveBasePath = "/dev/"; + const caseSensitiveHost = new Utils.MockParseConfigHost(caseSensitiveBasePath, /*useCaseSensitiveFileNames*/ true, [ + "/dev/a.ts", + "/dev/a.d.ts", + "/dev/a.js", + "/dev/b.ts", + "/dev/b.js", + "/dev/A.ts", + "/dev/B.ts", + "/dev/c.d.ts", + "/dev/z/a.ts", + "/dev/z/abz.ts", + "/dev/z/aba.ts", + "/dev/z/b.ts", + "/dev/z/bbz.ts", + "/dev/z/bba.ts", + "/dev/x/a.ts", + "/dev/x/b.ts", + "/dev/x/y/a.ts", + "/dev/x/y/b.ts", + "/dev/js/a.js", + "/dev/js/b.js", + ]); + + const caseInsensitiveMixedExtensionHost = new Utils.MockParseConfigHost(caseInsensitiveBasePath, /*useCaseSensitiveFileNames*/ false, [ + "c:/dev/a.ts", + "c:/dev/a.d.ts", + "c:/dev/a.js", + "c:/dev/b.tsx", + "c:/dev/b.d.ts", + "c:/dev/b.jsx", + "c:/dev/c.tsx", + "c:/dev/c.js", + "c:/dev/d.js", + "c:/dev/e.jsx", + "c:/dev/f.other" + ]); + + const caseInsensitiveCommonFoldersHost = new Utils.MockParseConfigHost(caseInsensitiveBasePath, /*useCaseSensitiveFileNames*/ false, [ + "c:/dev/a.ts", + "c:/dev/a.d.ts", + "c:/dev/a.js", + "c:/dev/b.ts", + "c:/dev/node_modules/a.ts", + "c:/dev/bower_components/a.ts", + "c:/dev/jspm_packages/a.ts" + ]); + + describe("matchFiles", () => { + describe("with literal file list", () => { + it("without exclusions", () => { + const json = { + files: [ + "a.ts", + "b.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("missing files are still present", () => { + const json = { + files: [ + "z.ts", + "x.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/z.ts", + "c:/dev/x.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("are not removed due to excludes", () => { + const json = { + files: [ + "a.ts", + "b.ts" + ], + exclude: [ + "b.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + }); + + describe("with literal include list", () => { + it("without exclusions", () => { + const json = { + include: [ + "a.ts", + "b.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with non .ts file extensions are excluded", () => { + const json = { + include: [ + "a.js", + "b.js" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with missing files are excluded", () => { + const json = { + include: [ + "z.ts", + "x.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with literal excludes", () => { + const json = { + include: [ + "a.ts", + "b.ts" + ], + exclude: [ + "b.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with wildcard excludes", () => { + const json = { + include: [ + "a.ts", + "b.ts", + "z/a.ts", + "z/abz.ts", + "z/aba.ts", + "x/b.ts" + ], + exclude: [ + "*.ts", + "z/??z.ts", + "*/b.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/z/a.ts", + "c:/dev/z/aba.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with recursive excludes", () => { + const json = { + include: [ + "a.ts", + "b.ts", + "x/a.ts", + "x/b.ts", + "x/y/a.ts", + "x/y/b.ts" + ], + exclude: [ + "**/b.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/x/a.ts", + "c:/dev/x/y/a.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with case sensitive exclude", () => { + const json = { + include: [ + "B.ts" + ], + exclude: [ + "**/b.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "/dev/B.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseSensitiveHost, caseSensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with common package folders and no exclusions", () => { + const json = { + include: [ + "a.ts", + "b.ts", + "node_modules/a.ts", + "bower_components/a.ts", + "jspm_packages/a.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveCommonFoldersHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with common package folders and exclusions", () => { + const json = { + include: [ + "a.ts", + "b.ts", + "node_modules/a.ts", + "bower_components/a.ts", + "jspm_packages/a.ts" + ], + exclude: [ + "a.ts", + "b.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/bower_components/a.ts", + "c:/dev/jspm_packages/a.ts", + "c:/dev/node_modules/a.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveCommonFoldersHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with common package folders and empty exclude", () => { + const json = { + include: [ + "a.ts", + "b.ts", + "node_modules/a.ts", + "bower_components/a.ts", + "jspm_packages/a.ts" + ], + exclude: [] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.ts", + "c:/dev/bower_components/a.ts", + "c:/dev/jspm_packages/a.ts", + "c:/dev/node_modules/a.ts" + ], + wildcardDirectories: {}, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveCommonFoldersHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + }); + + describe("with wildcard include list", () => { + it("same named declarations are excluded", () => { + const json = { + include: [ + "*.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.ts", + "c:/dev/c.d.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.None + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("`*` matches only ts files", () => { + const json = { + include: [ + "*" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.ts", + "c:/dev/c.d.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.None + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("`?` matches only a single character", () => { + const json = { + include: [ + "x/?.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/x/a.ts", + "c:/dev/x/b.ts" + ], + wildcardDirectories: { + "c:/dev/x": ts.WatchDirectoryFlags.None + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with recursive directory", () => { + const json = { + include: [ + "**/a.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/x/a.ts", + "c:/dev/x/y/a.ts", + "c:/dev/z/a.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with multiple recursive directories", () => { + const json = { + include: [ + "x/y/**/a.ts", + "x/**/a.ts", + "z/**/a.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/x/a.ts", + "c:/dev/x/y/a.ts", + "c:/dev/z/a.ts" + ], + wildcardDirectories: { + "c:/dev/x": ts.WatchDirectoryFlags.Recursive, + "c:/dev/z": ts.WatchDirectoryFlags.Recursive + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("case sensitive", () => { + const json = { + include: [ + "**/A.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "/dev/A.ts" + ], + wildcardDirectories: { + "/dev": ts.WatchDirectoryFlags.Recursive + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseSensitiveHost, caseSensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with missing files are excluded", () => { + const json = { + include: [ + "*/z.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("always include literal files", () => { + const json = { + files: [ + "a.ts" + ], + include: [ + "*/z.ts" + ], + exclude: [ + "**/a.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("exclude folders", () => { + const json = { + include: [ + "**/*" + ], + exclude: [ + "z", + "x" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.ts", + "c:/dev/c.d.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with common package folders and no exclusions", () => { + const json = { + include: [ + "**/a.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveCommonFoldersHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with common package folders and exclusions", () => { + const json = { + include: [ + "**/a.ts" + ], + exclude: [ + "a.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/bower_components/a.ts", + "c:/dev/jspm_packages/a.ts", + "c:/dev/node_modules/a.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveCommonFoldersHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with common package folders and empty exclude", () => { + const json = { + include: [ + "**/a.ts" + ], + exclude: [] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/bower_components/a.ts", + "c:/dev/jspm_packages/a.ts", + "c:/dev/node_modules/a.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + }, + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveCommonFoldersHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("exclude .js files when allowJs=false", () => { + const json = { + compilerOptions: { + allowJs: false + }, + include: [ + "js/*" + ] + }; + const expected: ts.ParsedCommandLine = { + options: { + allowJs: false + }, + errors: [], + fileNames: [], + wildcardDirectories: { + "c:/dev/js": ts.WatchDirectoryFlags.None + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("include .js files when allowJs=true", () => { + const json = { + compilerOptions: { + allowJs: true + }, + include: [ + "js/*" + ] + }; + const expected: ts.ParsedCommandLine = { + options: { + allowJs: true + }, + errors: [], + fileNames: [ + "c:/dev/js/a.js", + "c:/dev/js/b.js" + ], + wildcardDirectories: { + "c:/dev/js": ts.WatchDirectoryFlags.None + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("include paths outside of the project", () => { + const json = { + include: [ + "*", + "c:/ext/*" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.ts", + "c:/dev/c.d.ts", + "c:/ext/ext.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.None, + "c:/ext": ts.WatchDirectoryFlags.None + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + + it("include paths outside of the project using relative paths", () => { + const json = { + include: [ + "*", + "../ext/*" + ], + exclude: [ + "**" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/ext/ext.ts" + ], + wildcardDirectories: { + "c:/ext": ts.WatchDirectoryFlags.None + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("exclude paths outside of the project using relative paths", () => { + const json = { + include: [ + "c:/**/*" + ], + exclude: [ + "../**" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [], + wildcardDirectories: {} + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("include files with .. in their name", () => { + const json = { + include: [ + "c:/ext/b/a..b.ts" + ], + exclude: [ + "**" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/ext/b/a..b.ts" + ], + wildcardDirectories: {} + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("exclude files with .. in their name", () => { + const json = { + include: [ + "c:/ext/**/*" + ], + exclude: [ + "c:/ext/b/a..b.ts" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [ + "c:/ext/ext.ts", + ], + wildcardDirectories: { + "c:/ext": ts.WatchDirectoryFlags.Recursive + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + + it("with jsx=none, allowJs=false", () => { + const json = { + compilerOptions: { + allowJs: false + } + }; + const expected: ts.ParsedCommandLine = { + options: { + allowJs: false + }, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.tsx", + "c:/dev/c.tsx", + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveMixedExtensionHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with jsx=preserve, allowJs=false", () => { + const json = { + compilerOptions: { + jsx: "preserve", + allowJs: false + } + }; + const expected: ts.ParsedCommandLine = { + options: { + jsx: ts.JsxEmit.Preserve, + allowJs: false + }, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.tsx", + "c:/dev/c.tsx", + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveMixedExtensionHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with jsx=none, allowJs=true", () => { + const json = { + compilerOptions: { + allowJs: true + } + }; + const expected: ts.ParsedCommandLine = { + options: { + allowJs: true + }, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.tsx", + "c:/dev/c.tsx", + "c:/dev/d.js", + "c:/dev/e.jsx", + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveMixedExtensionHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("with jsx=preserve, allowJs=true", () => { + const json = { + compilerOptions: { + jsx: "preserve", + allowJs: true + } + }; + const expected: ts.ParsedCommandLine = { + options: { + jsx: ts.JsxEmit.Preserve, + allowJs: true + }, + errors: [], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/b.tsx", + "c:/dev/c.tsx", + "c:/dev/d.js", + "c:/dev/e.jsx", + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveMixedExtensionHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + describe("with trailing recursive directory", () => { + it("in includes", () => { + const json = { + include: [ + "**" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [ + ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, "**") + ], + fileNames: [], + wildcardDirectories: {} + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("in excludes", () => { + const json = { + include: [ + "**/*" + ], + exclude: [ + "**" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [], + fileNames: [], + wildcardDirectories: {} + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + }); + describe("with multiple recursive directory patterns", () => { + it("in includes", () => { + const json = { + include: [ + "**/x/**/*" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [ + ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0, "**/x/**/*") + ], + fileNames: [], + wildcardDirectories: {} + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + it("in excludes", () => { + const json = { + include: [ + "**/a.ts" + ], + exclude: [ + "**/x/**" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [ + ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0, "**/x/**") + ], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/x/a.ts", + "c:/dev/x/y/a.ts", + "c:/dev/z/a.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + }); + + describe("with parent directory symbols after a recursive directory pattern", () => { + it("in includes immediately after", () => { + const json = { + include: [ + "**/../*" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [ + ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, "**/../*") + ], + fileNames: [], + wildcardDirectories: {} + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + + it("in includes after a subdirectory", () => { + const json = { + include: [ + "**/y/../*" + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [ + ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, "**/y/../*") + ], + fileNames: [], + wildcardDirectories: {} + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + + it("in excludes immediately after", () => { + const json = { + include: [ + "**/a.ts" + ], + exclude: [ + "**/.." + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [ + ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, "**/..") + ], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/x/a.ts", + "c:/dev/x/y/a.ts", + "c:/dev/z/a.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + + it("in excludes after a subdirectory", () => { + const json = { + include: [ + "**/a.ts" + ], + exclude: [ + "**/y/.." + ] + }; + const expected: ts.ParsedCommandLine = { + options: {}, + errors: [ + ts.createCompilerDiagnostic(ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, "**/y/..") + ], + fileNames: [ + "c:/dev/a.ts", + "c:/dev/x/a.ts", + "c:/dev/x/y/a.ts", + "c:/dev/z/a.ts" + ], + wildcardDirectories: { + "c:/dev": ts.WatchDirectoryFlags.Recursive + } + }; + const actual = ts.parseJsonConfigFileContent(json, caseInsensitiveHost, caseInsensitiveBasePath); + assert.deepEqual(actual.fileNames, expected.fileNames); + assert.deepEqual(actual.wildcardDirectories, expected.wildcardDirectories); + assert.deepEqual(actual.errors, expected.errors); + }); + }); + }); + }); +} \ No newline at end of file diff --git a/tests/cases/unittests/moduleResolution.ts b/tests/cases/unittests/moduleResolution.ts index 16fc7df8d70..70cb4715c48 100644 --- a/tests/cases/unittests/moduleResolution.ts +++ b/tests/cases/unittests/moduleResolution.ts @@ -589,7 +589,7 @@ import b = require("./moduleB.ts"); const file1: File = { name: "/root/folder1/file1.ts" }; const file2: File = { name: "/root/generated/folder1/file2.ts" }; // load remapped file as module const file3: File = { name: "/root/generated/folder2/file3/index.d.ts" }; // load folder a module - const file4Typings: File = { name: "/root/generated/folder2/file4/package.json", content: JSON.stringify({ typings: "dist/types.d.ts" })}; + const file4Typings: File = { name: "/root/generated/folder2/file4/package.json", content: JSON.stringify({ typings: "dist/types.d.ts" }) }; const file4: File = { name: "/root/generated/folder2/file4/dist/types.d.ts" }; // load file pointed by typings const file5: File = { name: "/root/someanotherfolder/file5/index.d.ts" }; // load remapped module from folder const file6: File = { name: "/root/node_modules/file6.ts" }; // fallback to node @@ -957,7 +957,7 @@ import b = require("./moduleB.ts"); describe("Type reference directive resolution: ", () => { function test(typesRoot: string, typeDirective: string, primary: boolean, initialFile: File, targetFile: File, ...otherFiles: File[]) { const host = createModuleResolutionHost(/*hasDirectoryExists*/ false, ...[initialFile, targetFile].concat(...otherFiles)); - const result = resolveTypeReferenceDirective(typeDirective, initialFile.name, {typeRoots: [typesRoot]}, host); + const result = resolveTypeReferenceDirective(typeDirective, initialFile.name, { typeRoots: [typesRoot] }, host); assert(result.resolvedTypeReferenceDirective.resolvedFileName !== undefined, "expected type directive to be resolved"); assert.equal(result.resolvedTypeReferenceDirective.resolvedFileName, targetFile.name, "unexpected result of type reference resolution"); assert.equal(result.resolvedTypeReferenceDirective.primary, primary, "unexpected 'primary' value"); @@ -972,7 +972,7 @@ import b = require("./moduleB.ts"); { const f1 = { name: "/root/src/app.ts" }; const f2 = { name: "/root/src/types/lib/typings/lib.d.ts" }; - const package = { name: "/root/src/types/lib/package.json", content: JSON.stringify({types: "typings/lib.d.ts"}) }; + const package = { name: "/root/src/types/lib/package.json", content: JSON.stringify({ types: "typings/lib.d.ts" }) }; test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ true, f1, f2, package); } { @@ -983,7 +983,7 @@ import b = require("./moduleB.ts"); { const f1 = { name: "/root/src/app.ts" }; const f2 = { name: "/root/src/node_modules/lib/typings/lib.d.ts" }; - const package = { name: "/root/src/node_modules/lib/package.json", content: JSON.stringify({types: "typings/lib.d.ts"}) }; + const package = { name: "/root/src/node_modules/lib/package.json", content: JSON.stringify({ types: "typings/lib.d.ts" }) }; test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2, package); } { @@ -994,7 +994,7 @@ import b = require("./moduleB.ts"); { const f1 = { name: "/root/src/app.ts" }; const f2 = { name: "/root/src/node_modules/@types/lib/typings/lib.d.ts" }; - const package = { name: "/root/src/node_modules/@types/lib/package.json", content: JSON.stringify({types: "typings/lib.d.ts"}) }; + const package = { name: "/root/src/node_modules/@types/lib/package.json", content: JSON.stringify({ types: "typings/lib.d.ts" }) }; test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2, package); } }); @@ -1012,7 +1012,7 @@ import b = require("./moduleB.ts"); { const f1 = { name: "/root/src/app.ts" }; const f2 = { name: "/root/node_modules/lib/typings/lib.d.ts" }; - const package = { name: "/root/node_modules/lib/package.json", content: JSON.stringify({typings: "typings/lib.d.ts"}) }; + const package = { name: "/root/node_modules/lib/package.json", content: JSON.stringify({ typings: "typings/lib.d.ts" }) }; test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2, package); } { @@ -1023,7 +1023,7 @@ import b = require("./moduleB.ts"); { const f1 = { name: "/root/src/app.ts" }; const f2 = { name: "/root/node_modules/@types/lib/typings/lib.d.ts" }; - const package = { name: "/root/node_modules/@types/lib/package.json", content: JSON.stringify({typings: "typings/lib.d.ts"}) }; + const package = { name: "/root/node_modules/@types/lib/package.json", content: JSON.stringify({ typings: "typings/lib.d.ts" }) }; test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2, package); } }); diff --git a/tests/cases/unittests/session.ts b/tests/cases/unittests/session.ts index 9a5172ed78e..6ec3f49ccb0 100644 --- a/tests/cases/unittests/session.ts +++ b/tests/cases/unittests/session.ts @@ -171,7 +171,7 @@ namespace ts.server { describe("send", () => { it("is an overrideable handle which sends protocol messages over the wire", () => { - const msg = {seq: 0, type: "none"}; + const msg = { seq: 0, type: "none" }; const strmsg = JSON.stringify(msg); const len = 1 + Utils.byteLength(strmsg, "utf8"); const resultMsg = `Content-Length: ${len}\r\n\r\n${strmsg}\n`; @@ -267,7 +267,7 @@ namespace ts.server { constructor() { super(mockHost, Utils.byteLength, process.hrtime, mockLogger); this.addProtocolHandler(this.customHandler, () => { - return {response: undefined, responseRequired: true}; + return { response: undefined, responseRequired: true }; }); } send(msg: protocol.Message) { @@ -341,7 +341,7 @@ namespace ts.server { handleRequest(msg: protocol.Request) { let response: protocol.Response; try { - ({response} = this.executeCommand(msg)); + ({ response } = this.executeCommand(msg)); } catch (e) { this.output(undefined, msg.command, msg.seq, e.toString()); diff --git a/tests/cases/unittests/transpile.ts b/tests/cases/unittests/transpile.ts index 72172254482..24db2cbf16a 100644 --- a/tests/cases/unittests/transpile.ts +++ b/tests/cases/unittests/transpile.ts @@ -118,8 +118,8 @@ namespace ts { transpilesCorrectly("Generates no diagnostics for missing file references", `/// var x = 0;`, { - options: { compilerOptions: { module: ModuleKind.CommonJS } } - }); + options: { compilerOptions: { module: ModuleKind.CommonJS } } + }); transpilesCorrectly("Generates no diagnostics for missing module imports", `import {a} from "module2";`, { options: { compilerOptions: { module: ModuleKind.CommonJS } } @@ -153,22 +153,22 @@ var x = 0;`, { `import {foo} from "SomeName";\n` + `declare function use(a: any);\n` + `use(foo);`, { - options: { compilerOptions: { module: ModuleKind.System, newLine: NewLineKind.LineFeed }, renamedDependencies: { "SomeName": "SomeOtherName" } } - }); + options: { compilerOptions: { module: ModuleKind.System, newLine: NewLineKind.LineFeed }, renamedDependencies: { "SomeName": "SomeOtherName" } } + }); transpilesCorrectly("Rename dependencies - AMD", `import {foo} from "SomeName";\n` + `declare function use(a: any);\n` + `use(foo);`, { - options: { compilerOptions: { module: ModuleKind.AMD, newLine: NewLineKind.LineFeed }, renamedDependencies: { "SomeName": "SomeOtherName" } } - }); + options: { compilerOptions: { module: ModuleKind.AMD, newLine: NewLineKind.LineFeed }, renamedDependencies: { "SomeName": "SomeOtherName" } } + }); transpilesCorrectly("Rename dependencies - UMD", `import {foo} from "SomeName";\n` + `declare function use(a: any);\n` + `use(foo);`, { - options: { compilerOptions: { module: ModuleKind.UMD, newLine: NewLineKind.LineFeed }, renamedDependencies: { "SomeName": "SomeOtherName" } } - }); + options: { compilerOptions: { module: ModuleKind.UMD, newLine: NewLineKind.LineFeed }, renamedDependencies: { "SomeName": "SomeOtherName" } } + }); transpilesCorrectly("Transpile with emit decorators and emit metadata", `import {db} from './db';\n` + @@ -184,17 +184,17 @@ var x = 0;`, { ` }\n` + `}\n` + `export {MyClass}; \n`, { - options: { - compilerOptions: { - module: ModuleKind.CommonJS, - newLine: NewLineKind.LineFeed, - noEmitHelpers: true, - emitDecoratorMetadata: true, - experimentalDecorators: true, - target: ScriptTarget.ES5, + options: { + compilerOptions: { + module: ModuleKind.CommonJS, + newLine: NewLineKind.LineFeed, + noEmitHelpers: true, + emitDecoratorMetadata: true, + experimentalDecorators: true, + target: ScriptTarget.ES5, + } } - } - }); + }); transpilesCorrectly("Supports backslashes in file name", "var x", { options: { fileName: "a\\b.ts" } @@ -213,19 +213,21 @@ var x = 0;`, { }); transpilesCorrectly("Accepts string as enum values for compile-options", "export const x = 0", { - options: { compilerOptions: { - module: "es6", - // Capitalization and spaces ignored - target: " Es6 " - }} + options: { + compilerOptions: { + module: "es6", + // Capitalization and spaces ignored + target: " Es6 " + } + } }); transpilesCorrectly("Report an error when compiler-options module-kind is out-of-range", "", { - options: { compilerOptions: { module: 123 }} + options: { compilerOptions: { module: 123 } } }); transpilesCorrectly("Report an error when compiler-options target-script is out-of-range", "", { - options: { compilerOptions: { module: 123 }} + options: { compilerOptions: { module: 123 } } }); transpilesCorrectly("Report an error when compiler-options input is empty object", "", { @@ -235,5 +237,243 @@ var x = 0;`, { transpilesCorrectly("Report an error when compiler-options input is empty string", "", { options: { compilerOptions: { module: "" }} }); - }); + + transpilesCorrectly("Support options with lib values", "const a = 10;", { + options: { compilerOptions: { lib: ["es6", "dom"], module: ModuleKind.CommonJS }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Support options with types values", "const a = 10;", { + options: { compilerOptions: { types: ["jquery", "typescript"], module: ModuleKind.CommonJS }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'allowJs'", "x;", { + options: { compilerOptions: { allowJs: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'allowSyntheticDefaultImports'", "x;", { + options: { compilerOptions: { allowSyntheticDefaultImports: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'allowUnreachableCode'", "x;", { + options: { compilerOptions: { allowUnreachableCode: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'allowUnusedLabels'", "x;", { + options: { compilerOptions: { allowUnusedLabels: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'baseUrl'", "x;", { + options: { compilerOptions: { baseUrl: "./folder/baseUrl" }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'charset'", "x;", { + options: { compilerOptions: { charset: "en-us" }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'declaration'", "x;", { + options: { compilerOptions: { declaration: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'declarationDir'", "x;", { + options: { compilerOptions: { declarationDir: "out/declarations" }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'emitBOM'", "x;", { + options: { compilerOptions: { emitBOM: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'emitDecoratorMetadata'", "x;", { + options: { compilerOptions: { emitDecoratorMetadata: true, experimentalDecorators: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'experimentalDecorators'", "x;", { + options: { compilerOptions: { experimentalDecorators: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'forceConsistentCasingInFileNames'", "x;", { + options: { compilerOptions: { forceConsistentCasingInFileNames: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'isolatedModules'", "x;", { + options: { compilerOptions: { isolatedModules: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'jsx'", "x;", { + options: { compilerOptions: { jsx: 1 }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'lib'", "x;", { + options: { compilerOptions: { lib: ["es2015", "dom"] }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'locale'", "x;", { + options: { compilerOptions: { locale: "en-us" }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'module'", "x;", { + options: { compilerOptions: { module: ModuleKind.CommonJS }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'moduleResolution'", "x;", { + options: { compilerOptions: { moduleResolution: ModuleResolutionKind.NodeJs }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'newLine'", "x;", { + options: { compilerOptions: { newLine: NewLineKind.CarriageReturnLineFeed }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noEmit'", "x;", { + options: { compilerOptions: { noEmit: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noEmitHelpers'", "x;", { + options: { compilerOptions: { noEmitHelpers: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noEmitOnError'", "x;", { + options: { compilerOptions: { noEmitOnError: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noErrorTruncation'", "x;", { + options: { compilerOptions: { noErrorTruncation: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noFallthroughCasesInSwitch'", "x;", { + options: { compilerOptions: { noFallthroughCasesInSwitch: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noImplicitAny'", "x;", { + options: { compilerOptions: { noImplicitAny: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noImplicitReturns'", "x;", { + options: { compilerOptions: { noImplicitReturns: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noImplicitThis'", "x;", { + options: { compilerOptions: { noImplicitThis: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noImplicitUseStrict'", "x;", { + options: { compilerOptions: { noImplicitUseStrict: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noLib'", "x;", { + options: { compilerOptions: { noLib: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'noResolve'", "x;", { + options: { compilerOptions: { noResolve: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'out'", "x;", { + options: { compilerOptions: { out: "./out" }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'outDir'", "x;", { + options: { compilerOptions: { outDir: "./outDir" }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'outFile'", "x;", { + options: { compilerOptions: { outFile: "./outFile" }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'paths'", "x;", { + options: { compilerOptions: { paths: { "*": ["./generated*"] } }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'preserveConstEnums'", "x;", { + options: { compilerOptions: { preserveConstEnums: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'reactNamespace'", "x;", { + options: { compilerOptions: { reactNamespace: "react" }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'removeComments'", "x;", { + options: { compilerOptions: { removeComments: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'rootDir'", "x;", { + options: { compilerOptions: { rootDir: "./rootDir" }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'rootDirs'", "x;", { + options: { compilerOptions: { rootDirs: ["./a", "./b"] }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'skipLibCheck'", "x;", { + options: { compilerOptions: { skipLibCheck: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'skipDefaultLibCheck'", "x;", { + options: { compilerOptions: { skipDefaultLibCheck: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'strictNullChecks'", "x;", { + options: { compilerOptions: { strictNullChecks: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'stripInternal'", "x;", { + options: { compilerOptions: { stripInternal: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'suppressExcessPropertyErrors'", "x;", { + options: { compilerOptions: { suppressExcessPropertyErrors: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'suppressImplicitAnyIndexErrors'", "x;", { + options: { compilerOptions: { suppressImplicitAnyIndexErrors: true }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'target'", "x;", { + options: { compilerOptions: { target: 2 }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'types'", "x;", { + options: { compilerOptions: { types: ["jquery", "jasmine"] }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Supports setting 'typeRoots'", "x;", { + options: { compilerOptions: { typeRoots: ["./folder"] }, fileName: "input.js", reportDiagnostics: true } + }); + + transpilesCorrectly("Correctly serialize metadata when transpile with CommonJS option", + `import * as ng from "angular2/core";` + + `declare function foo(...args: any[]);` + + `@foo` + + `export class MyClass1 {` + + ` constructor(private _elementRef: ng.ElementRef){}` + + `}`, { + options: { + compilerOptions: { + target: ScriptTarget.ES5, + module: ModuleKind.CommonJS, + moduleResolution: ModuleResolutionKind.NodeJs, + emitDecoratorMetadata: true, + experimentalDecorators: true, + isolatedModules: true, + } + } + }); + + transpilesCorrectly("Correctly serialize metadata when transpile with System option", + `import * as ng from "angular2/core";` + + `declare function foo(...args: any[]);` + + `@foo` + + `export class MyClass1 {` + + ` constructor(private _elementRef: ng.ElementRef){}` + + `}`, { + options: { + compilerOptions: { + target: ScriptTarget.ES5, + module: ModuleKind.System, + moduleResolution: ModuleResolutionKind.NodeJs, + emitDecoratorMetadata: true, + experimentalDecorators: true, + isolatedModules: true, + } + } + }); + }) } diff --git a/tests/cases/unittests/tsconfigParsing.ts b/tests/cases/unittests/tsconfigParsing.ts index 31600a38e51..17ccf6bff89 100644 --- a/tests/cases/unittests/tsconfigParsing.ts +++ b/tests/cases/unittests/tsconfigParsing.ts @@ -16,36 +16,16 @@ namespace ts { function assertParseErrorWithExcludesKeyword(jsonText: string) { const parsed = ts.parseConfigFileTextToJson("/apath/tsconfig.json", jsonText); - const parsedCommand = ts.parseJsonConfigFileContent(parsed, ts.sys, "tests/cases/unittests"); - assert.isTrue(undefined !== parsedCommand.errors); + const parsedCommand = ts.parseJsonConfigFileContent(parsed.config, ts.sys, "tests/cases/unittests"); + assert.isTrue(parsedCommand.errors && parsedCommand.errors.length === 1 && + parsedCommand.errors[0].code === ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude.code); } function assertParseFileList(jsonText: string, configFileName: string, basePath: string, allFileList: string[], expectedFileList: string[]) { const json = JSON.parse(jsonText); - const host: ParseConfigHost = { readDirectory: mockReadDirectory }; + const host: ParseConfigHost = new Utils.MockParseConfigHost(basePath, true, allFileList); const parsed = ts.parseJsonConfigFileContent(json, host, basePath, /*existingOptions*/ undefined, configFileName); assert.isTrue(arrayIsEqualTo(parsed.fileNames.sort(), expectedFileList.sort())); - - function mockReadDirectory(rootDir: string, extension: string, exclude: string[]): string[] { - const result: string[] = []; - const fullExcludeDirectories = ts.map(exclude, directory => combinePaths(rootDir, directory)); - for (const file of allFileList) { - let shouldExclude = false; - for (const fullExcludeDirectorie of fullExcludeDirectories) { - if (file.indexOf(fullExcludeDirectorie) >= 0) { - shouldExclude = true; - break; - } - } - if (shouldExclude) { - continue; - } - if (fileExtensionIs(file, extension)) { - result.push(file); - } - } - return result; - } } it("returns empty config for file with only whitespaces", () => { @@ -121,19 +101,19 @@ namespace ts { assertParseResult( `{ "compilerOptions": { - "lib": "es5" + "lib": ["es5"] } }`, { - config: { compilerOptions: { lib: "es5" } } + config: { compilerOptions: { lib: ["es5"] } } }); assertParseResult( `{ "compilerOptions": { - "lib": "es5,es6" + "lib": ["es5", "es6"] } }`, { - config: { compilerOptions: { lib: "es5,es6" } } + config: { compilerOptions: { lib: ["es5", "es6"] } } }); }); @@ -141,7 +121,7 @@ namespace ts { assertParseErrorWithExcludesKeyword( `{ "compilerOptions": { - "lib": "es5" + "lib": ["es5"] }, "excludes": [ "foge.ts" diff --git a/tests/cases/unittests/tsserverProjectSystem.ts b/tests/cases/unittests/tsserverProjectSystem.ts index 7af5c2c80a0..7e40b2d1719 100644 --- a/tests/cases/unittests/tsserverProjectSystem.ts +++ b/tests/cases/unittests/tsserverProjectSystem.ts @@ -25,6 +25,7 @@ namespace ts { interface FileOrFolder { path: string; content?: string; + fileSize?: number; } interface FSEntry { @@ -34,6 +35,7 @@ namespace ts { interface File extends FSEntry { content: string; + fileSize?: number; } interface Folder extends FSEntry { @@ -90,23 +92,6 @@ namespace ts { } } - function readDirectory(folder: FSEntry, ext: string, excludes: Path[], result: string[]): void { - if (!folder || !isFolder(folder) || contains(excludes, folder.path)) { - return; - } - for (const entry of folder.entries) { - if (contains(excludes, entry.path)) { - continue; - } - if (isFolder(entry)) { - readDirectory(entry, ext, excludes, result); - } - else if (fileExtensionIs(entry.path, ext)) { - result.push(entry.fullPath); - } - } - } - function checkNumberOfConfiguredProjects(projectService: server.ProjectService, expected: number) { assert.equal(projectService.configuredProjects.length, expected, `expected ${expected} configured project(s)`); } @@ -157,7 +142,7 @@ namespace ts { const path = this.toPath(fileOrFolder.path); const fullPath = getNormalizedAbsolutePath(fileOrFolder.path, this.currentDirectory); if (typeof fileOrFolder.content === "string") { - const entry = { path, content: fileOrFolder.content, fullPath }; + const entry = { path, content: fileOrFolder.content, fullPath, fileSize: fileOrFolder.fileSize }; this.fs.set(path, entry); addFolder(getDirectoryPath(fullPath), this.toPath, this.fs).entries.push(entry); } @@ -172,6 +157,17 @@ namespace ts { return this.fs.contains(path) && isFile(this.fs.get(path)); }; + getFileSize(s: string) { + const path = this.toPath(s); + if (this.fs.contains(path)) { + const entry = this.fs.get(path); + if (isFile(entry)) { + return entry.fileSize ? entry.fileSize : entry.content.length; + } + } + return undefined; + } + directoryExists(s: string) { const path = this.toPath(s); return this.fs.contains(path) && isFolder(this.fs.get(path)); @@ -188,10 +184,26 @@ namespace ts { } } - readDirectory(path: string, ext: string, excludes: string[]): string[] { - const result: string[] = []; - readDirectory(this.fs.get(this.toPath(path)), ext, map(excludes, e => toPath(e, path, this.getCanonicalFileName)), result); - return result; + readDirectory(path: string, extensions?: string[], exclude?: string[], include?: string[]): string[] { + const that = this; + return ts.matchFiles(path, extensions, exclude, include, this.useCaseSensitiveFileNames, this.getCurrentDirectory(), (dir) => { + const result: FileSystemEntries = { + directories: [], + files : [] + }; + const dirEntry = that.fs.get(that.toPath(dir)); + if (isFolder(dirEntry)) { + dirEntry.entries.forEach((entry) => { + if (isFolder(entry)) { + result.directories.push(entry.fullPath); + } + else if (isFile(entry)) { + result.files.push(entry.fullPath); + } + }); + } + return result; + }); } watchDirectory(directoryName: string, callback: DirectoryWatcherCallback, recursive: boolean): DirectoryWatcher { @@ -569,5 +581,59 @@ namespace ts { checkConfiguredProjectActualFiles(project, [file1.path, classicModuleFile.path]); checkNumberOfInferredProjects(projectService, 1); }); + + it("should keep the configured project when the opened file is referenced by the project but not its root", () => { + const file1: FileOrFolder = { + path: "/a/b/main.ts", + content: "import { objA } from './obj-a';" + }; + const file2: FileOrFolder = { + path: "/a/b/obj-a.ts", + content: `export const objA = Object.assign({foo: "bar"}, {bar: "baz"});` + }; + const configFile: FileOrFolder = { + path: "/a/b/tsconfig.json", + content: `{ + "compilerOptions": { + "target": "es6" + }, + "files": [ "main.ts" ] + }` + }; + const host = new TestServerHost(/*useCaseSensitiveFileNames*/ false, getExecutingFilePathFromLibFile(libFile), "/", [file1, file2, configFile]); + const projectService = new server.ProjectService(host, nullLogger); + projectService.openClientFile(file1.path); + projectService.closeClientFile(file1.path); + projectService.openClientFile(file2.path); + checkNumberOfConfiguredProjects(projectService, 1); + checkNumberOfInferredProjects(projectService, 0); + }); + + it("should keep the configured project when the opened file is referenced by the project but not its root", () => { + const file1: FileOrFolder = { + path: "/a/b/main.ts", + content: "import { objA } from './obj-a';" + }; + const file2: FileOrFolder = { + path: "/a/b/obj-a.ts", + content: `export const objA = Object.assign({foo: "bar"}, {bar: "baz"});` + }; + const configFile: FileOrFolder = { + path: "/a/b/tsconfig.json", + content: `{ + "compilerOptions": { + "target": "es6" + }, + "files": [ "main.ts" ] + }` + }; + const host = new TestServerHost(/*useCaseSensitiveFileNames*/ false, getExecutingFilePathFromLibFile(libFile), "/", [file1, file2, configFile]); + const projectService = new server.ProjectService(host, nullLogger); + projectService.openClientFile(file1.path); + projectService.closeClientFile(file1.path); + projectService.openClientFile(file2.path); + checkNumberOfConfiguredProjects(projectService, 1); + checkNumberOfInferredProjects(projectService, 0); + }); }); } \ No newline at end of file diff --git a/tslint.json b/tslint.json index f789af46cea..ee116c6fcb0 100644 --- a/tslint.json +++ b/tslint.json @@ -44,6 +44,7 @@ "type-operator-spacing": true, "prefer-const": true, "no-in-operator": true, - "no-increment-decrement": true + "no-increment-decrement": true, + "object-literal-surrounding-space": true } }