From cf446b92337b2dca065bd9a95ecfb4314c4b8a9f Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 30 Aug 2019 18:42:02 -0700 Subject: [PATCH] Build VS Code using TS 3.6 Fixes #80079 Updates our build to use TS 3.6. Fixes a few changes to dom apis and adds a monkey patch for the node typings break in 3.6 --- build/lib/extensions.js | 2 +- build/lib/i18n.js | 2 +- build/npm/postinstall.js | 13 +++++++++++++ build/package.json | 2 +- build/yarn.lock | 8 ++++---- package.json | 2 +- src/vs/base/browser/ui/menu/menubar.ts | 2 +- src/vs/base/worker/workerMain.ts | 4 ++-- src/vs/editor/browser/controller/textAreaInput.ts | 5 +++++ src/vs/editor/editor.worker.ts | 4 ++-- .../browser/parts/titlebar/titlebarPart.ts | 2 +- .../contrib/experiments/common/experimentService.ts | 2 +- .../node/externalTerminalService.ts | 2 +- .../contrib/search/browser/openAnythingHandler.ts | 6 +++--- .../contrib/terminal/common/terminalService.ts | 2 +- yarn.lock | 8 ++++---- 16 files changed, 42 insertions(+), 24 deletions(-) diff --git a/build/lib/extensions.js b/build/lib/extensions.js index a98f3b890cf..c4385655eb9 100644 --- a/build/lib/extensions.js +++ b/build/lib/extensions.js @@ -101,7 +101,7 @@ function fromLocalWebpack(extensionPath) { result.emit('error', compilation.warnings.join('\n')); } }; - const webpackConfig = Object.assign({}, require(webpackConfigPath), { mode: 'production' }); + const webpackConfig = Object.assign(Object.assign({}, require(webpackConfigPath)), { mode: 'production' }); const relativeOutputPath = path.relative(extensionPath, webpackConfig.output.path); return webpackGulp(webpackConfig, webpack, webpackDone) .pipe(es.through(function (data) { diff --git a/build/lib/i18n.js b/build/lib/i18n.js index c40b2988e28..067e1e66889 100644 --- a/build/lib/i18n.js +++ b/build/lib/i18n.js @@ -176,6 +176,7 @@ class XLF { this.buffer.push(line.toString()); } } +exports.XLF = XLF; XLF.parsePseudo = function (xlfString) { return new Promise((resolve) => { let parser = new xml2js.Parser(); @@ -248,7 +249,6 @@ XLF.parse = function (xlfString) { }); }); }; -exports.XLF = XLF; class Limiter { constructor(maxDegreeOfParalellism) { this.maxDegreeOfParalellism = maxDegreeOfParalellism; diff --git a/build/npm/postinstall.js b/build/npm/postinstall.js index 6b1159bc65c..e0d43786621 100644 --- a/build/npm/postinstall.js +++ b/build/npm/postinstall.js @@ -80,6 +80,19 @@ if (fs.existsSync(processTreeDts)) { fs.unlinkSync(processTreeDts); } +// Rewrite the @types/node typings avoid a conflict with es2018 typings. +// This is caused by our build not understanding `typesVersions` in the package.json +// +// TODO: Fix this +{ + console.log('Rewriting node_modules/@types/node to workaround lack of typesVersions support'); + const indexPath = path.join('node_modules', '@types', 'node', 'index.d.ts'); + + const contents = fs.readFileSync(indexPath).toString() + .replace(/interface IteratorResult \{ \}/, '// VSCODE EDIT — remove IteratorResult\n// interface IteratorResult { }'); + fs.writeFileSync(indexPath, contents); +} + function getInstalledVersion(packageName, cwd) { const opts = {}; if (cwd) { diff --git a/build/package.json b/build/package.json index b283c542e75..a48af3c1d8f 100644 --- a/build/package.json +++ b/build/package.json @@ -42,7 +42,7 @@ "request": "^2.85.0", "terser": "^4.2.1", "tslint": "^5.9.1", - "typescript": "3.5.2", + "typescript": "3.6.2", "vsce": "1.48.0", "vscode-telemetry-extractor": "^1.5.4", "xml2js": "^0.4.17" diff --git a/build/yarn.lock b/build/yarn.lock index c8fac443483..223ecd968ef 100644 --- a/build/yarn.lock +++ b/build/yarn.lock @@ -2288,10 +2288,10 @@ typed-rest-client@^0.9.0: tunnel "0.0.4" underscore "1.8.3" -typescript@3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c" - integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA== +typescript@3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.2.tgz#105b0f1934119dde543ac8eb71af3a91009efe54" + integrity sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw== typescript@^3.0.1: version "3.5.3" diff --git a/package.json b/package.json index 91bb19c128b..c98a93da4cb 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "source-map": "^0.4.4", "ts-loader": "^4.4.2", "tslint": "^5.16.0", - "typescript": "3.5.2", + "typescript": "3.6", "typescript-formatter": "7.1.0", "underscore": "^1.8.2", "vinyl": "^2.0.0", diff --git a/src/vs/base/browser/ui/menu/menubar.ts b/src/vs/base/browser/ui/menu/menubar.ts index c6644247b2b..960dc57e267 100644 --- a/src/vs/base/browser/ui/menu/menubar.ts +++ b/src/vs/base/browser/ui/menu/menubar.ts @@ -758,7 +758,7 @@ export class MenuBar extends Disposable { if (menuBarMenu.titleElement.children.length) { let child = menuBarMenu.titleElement.children.item(0) as HTMLElement; if (child) { - child.style.textDecoration = (this.options.alwaysOnMnemonics || visible) ? 'underline' : null; + child.style.textDecoration = (this.options.alwaysOnMnemonics || visible) ? 'underline' : ''; } } }); diff --git a/src/vs/base/worker/workerMain.ts b/src/vs/base/worker/workerMain.ts index 8d51252951a..22bc88f1c00 100644 --- a/src/vs/base/worker/workerMain.ts +++ b/src/vs/base/worker/workerMain.ts @@ -24,7 +24,7 @@ (self).postMessage(msg, transfer); }, null); - self.onmessage = (e) => messageHandler.onmessage(e.data); + self.onmessage = (e: MessageEvent) => messageHandler.onmessage(e.data); while (beforeReadyMessages.length > 0) { self.onmessage(beforeReadyMessages.shift()!); } @@ -34,7 +34,7 @@ let isFirstMessage = true; let beforeReadyMessages: MessageEvent[] = []; - self.onmessage = (message) => { + self.onmessage = (message: MessageEvent) => { if (!isFirstMessage) { beforeReadyMessages.push(message); return; diff --git a/src/vs/editor/browser/controller/textAreaInput.ts b/src/vs/editor/browser/controller/textAreaInput.ts index 86e226d86c9..bfb885aa6b5 100644 --- a/src/vs/editor/browser/controller/textAreaInput.ts +++ b/src/vs/editor/browser/controller/textAreaInput.ts @@ -54,6 +54,11 @@ const enum TextAreaInputEventType { blur } +interface CompositionEvent extends UIEvent { + readonly data: string; + readonly locale: string; +} + /** * Writes screen reader content to the textarea and is able to analyze its input events to generate: * - onCut diff --git a/src/vs/editor/editor.worker.ts b/src/vs/editor/editor.worker.ts index 4586cafab31..3d42a6b4d95 100644 --- a/src/vs/editor/editor.worker.ts +++ b/src/vs/editor/editor.worker.ts @@ -19,12 +19,12 @@ export function initialize(foreignModule: any) { (self).postMessage(msg); }, (host: EditorWorkerHost) => new EditorSimpleWorker(host, foreignModule)); - self.onmessage = (e) => { + self.onmessage = (e: MessageEvent) => { simpleWorker.onmessage(e.data); }; } -self.onmessage = (e) => { +self.onmessage = (e: MessageEvent) => { // Ignore first message in this case and initialize if not yet initialized if (!initialized) { initialize(null); diff --git a/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts b/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts index 27c9c36e168..a934e456352 100644 --- a/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts +++ b/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts @@ -554,7 +554,7 @@ export class TitlebarPart extends Part implements ITitleService { rightMarker < (this.element.clientWidth + this.title.clientWidth) / 2) { this.title.style.position = null; this.title.style.left = null; - this.title.style.transform = null; + this.title.style.transform = ''; return; } } diff --git a/src/vs/workbench/contrib/experiments/common/experimentService.ts b/src/vs/workbench/contrib/experiments/common/experimentService.ts index 67c0d71a7f1..f6d7e7e7536 100644 --- a/src/vs/workbench/contrib/experiments/common/experimentService.ts +++ b/src/vs/workbench/contrib/experiments/common/experimentService.ts @@ -169,7 +169,7 @@ export class ExperimentService extends Disposable implements IExperimentService this.storageService.store(storageKey, JSON.stringify(experimentState), StorageScope.GLOBAL); } - protected getExperiments(): Promise { + protected getExperiments(): Promise { if (!this.productService.experimentsUrl || this.configurationService.getValue('workbench.enableExperiments') === false) { return Promise.resolve([]); } diff --git a/src/vs/workbench/contrib/externalTerminal/node/externalTerminalService.ts b/src/vs/workbench/contrib/externalTerminal/node/externalTerminalService.ts index 9b57b17f958..e641bc748ee 100644 --- a/src/vs/workbench/contrib/externalTerminal/node/externalTerminalService.ts +++ b/src/vs/workbench/contrib/externalTerminal/node/externalTerminalService.ts @@ -305,7 +305,7 @@ export class LinuxExternalTerminalService implements IExternalTerminalService { if (!LinuxExternalTerminalService._DEFAULT_TERMINAL_LINUX_READY) { LinuxExternalTerminalService._DEFAULT_TERMINAL_LINUX_READY = new Promise(c => { if (env.isLinux) { - Promise.all([pfs.exists('/etc/debian_version'), process.lazyEnv || Promise.resolve(undefined)]).then(([isDebian]) => { + Promise.all([pfs.exists('/etc/debian_version'), Promise.resolve(process.lazyEnv) || Promise.resolve(undefined)]).then(([isDebian]) => { if (isDebian) { c('x-terminal-emulator'); } else if (process.env.DESKTOP_SESSION === 'gnome' || process.env.DESKTOP_SESSION === 'gnome-classic') { diff --git a/src/vs/workbench/contrib/search/browser/openAnythingHandler.ts b/src/vs/workbench/contrib/search/browser/openAnythingHandler.ts index 85a0ce55040..8e73d112ac7 100644 --- a/src/vs/workbench/contrib/search/browser/openAnythingHandler.ts +++ b/src/vs/workbench/contrib/search/browser/openAnythingHandler.ts @@ -40,7 +40,7 @@ export class OpenAnythingHandler extends QuickOpenHandler { private openSymbolHandler: OpenSymbolHandler; private openFileHandler: OpenFileHandler; - private searchDelayer: ThrottledDelayer; + private searchDelayer: ThrottledDelayer; private isClosed: boolean; private scorerCache: ScorerCache; private includeSymbols: boolean; @@ -83,7 +83,7 @@ export class OpenAnythingHandler extends QuickOpenHandler { }); } - getResults(searchValue: string, token: CancellationToken): Promise { + getResults(searchValue: string, token: CancellationToken): Promise { this.isClosed = false; // Treat this call as the handler being in use // Find a suitable range from the pattern looking for ":" and "#" @@ -99,7 +99,7 @@ export class OpenAnythingHandler extends QuickOpenHandler { } // The throttler needs a factory for its promises - const resultsPromise = () => { + const resultsPromise = (): Promise => { const resultPromises: Promise[] = []; // File Results diff --git a/src/vs/workbench/contrib/terminal/common/terminalService.ts b/src/vs/workbench/contrib/terminal/common/terminalService.ts index 97a1158107e..3303cd18301 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalService.ts @@ -568,7 +568,7 @@ export abstract class TerminalService implements ITerminalService { const options: IPickOptions = { placeHolder: nls.localize('terminal.integrated.chooseWindowsShell', "Select your preferred terminal shell, you can change this later in your settings") }; - const quickPickItems = shells.map(s => { + const quickPickItems = shells.map((s): IQuickPickItem => { return { label: s.label, description: s.path }; }); return this._quickInputService.pick(quickPickItems, options).then(async value => { diff --git a/yarn.lock b/yarn.lock index 710df720037..0df989bc760 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9036,10 +9036,10 @@ typescript-formatter@7.1.0: commandpost "^1.0.0" editorconfig "^0.15.0" -typescript@3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c" - integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA== +typescript@3.6: + version "3.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.2.tgz#105b0f1934119dde543ac8eb71af3a91009efe54" + integrity sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw== typescript@^2.6.2: version "2.6.2" -- GitLab