diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 9a63fcec936..4f3e388057b 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -30,7 +30,7 @@ const product = require('../product.json'); const crypto = require('crypto'); const i18n = require('./lib/i18n'); const deps = require('./dependencies'); -const getElectronVersion = require('./lib/electron').getElectronVersion; +const { getElectron, config } = require('./lib/electron'); const createAsar = require('./lib/asar').createAsar; const minimist = require('minimist'); const { compileBuildTask } = require('./gulpfile.compile'); @@ -115,91 +115,6 @@ gulp.task(minifyVSCodeTask); // Package -// @ts-ignore JSON checking: darwinCredits is optional -const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8')); - -function darwinBundleDocumentType(extensions, icon) { - return { - name: product.nameLong + ' document', - role: 'Editor', - ostypes: ["TEXT", "utxt", "TUTX", "****"], - extensions: extensions, - iconFile: icon - }; -} - -const config = { - version: getElectronVersion(), - productAppName: product.nameLong, - companyName: 'Microsoft Corporation', - copyright: 'Copyright (C) 2019 Microsoft. All rights reserved', - darwinIcon: 'resources/darwin/code.icns', - darwinBundleIdentifier: product.darwinBundleIdentifier, - darwinApplicationCategoryType: 'public.app-category.developer-tools', - darwinHelpBookFolder: 'VS Code HelpBook', - darwinHelpBookName: 'VS Code HelpBook', - darwinBundleDocumentTypes: [ - darwinBundleDocumentType(["bat", "cmd"], 'resources/darwin/bat.icns'), - darwinBundleDocumentType(["bowerrc"], 'resources/darwin/bower.icns'), - darwinBundleDocumentType(["c", "h"], 'resources/darwin/c.icns'), - darwinBundleDocumentType(["config", "editorconfig", "gitattributes", "gitconfig", "gitignore", "ini"], 'resources/darwin/config.icns'), - darwinBundleDocumentType(["cc", "cpp", "cxx", "hh", "hpp", "hxx"], 'resources/darwin/cpp.icns'), - darwinBundleDocumentType(["cs", "csx"], 'resources/darwin/csharp.icns'), - darwinBundleDocumentType(["css"], 'resources/darwin/css.icns'), - darwinBundleDocumentType(["go"], 'resources/darwin/go.icns'), - darwinBundleDocumentType(["asp", "aspx", "cshtml", "htm", "html", "jshtm", "jsp", "phtml", "shtml"], 'resources/darwin/html.icns'), - darwinBundleDocumentType(["jade"], 'resources/darwin/jade.icns'), - darwinBundleDocumentType(["jav", "java"], 'resources/darwin/java.icns'), - darwinBundleDocumentType(["js", "jscsrc", "jshintrc", "mjs"], 'resources/darwin/javascript.icns'), - darwinBundleDocumentType(["json"], 'resources/darwin/json.icns'), - darwinBundleDocumentType(["less"], 'resources/darwin/less.icns'), - darwinBundleDocumentType(["markdown", "md", "mdoc", "mdown", "mdtext", "mdtxt", "mdwn", "mkd", "mkdn"], 'resources/darwin/markdown.icns'), - darwinBundleDocumentType(["php"], 'resources/darwin/php.icns'), - darwinBundleDocumentType(["ps1", "psd1", "psm1"], 'resources/darwin/powershell.icns'), - darwinBundleDocumentType(["py"], 'resources/darwin/python.icns'), - darwinBundleDocumentType(["gemspec", "rb"], 'resources/darwin/ruby.icns'), - darwinBundleDocumentType(["scss"], 'resources/darwin/sass.icns'), - darwinBundleDocumentType(["bash", "bash_login", "bash_logout", "bash_profile", "bashrc", "profile", "rhistory", "rprofile", "sh", "zlogin", "zlogout", "zprofile", "zsh", "zshenv", "zshrc"], 'resources/darwin/shell.icns'), - darwinBundleDocumentType(["sql"], 'resources/darwin/sql.icns'), - darwinBundleDocumentType(["ts"], 'resources/darwin/typescript.icns'), - darwinBundleDocumentType(["tsx", "jsx"], 'resources/darwin/react.icns'), - darwinBundleDocumentType(["vue"], 'resources/darwin/vue.icns'), - darwinBundleDocumentType(["ascx", "csproj", "dtd", "wxi", "wxl", "wxs", "xml", "xaml"], 'resources/darwin/xml.icns'), - darwinBundleDocumentType(["eyaml", "eyml", "yaml", "yml"], 'resources/darwin/yaml.icns'), - darwinBundleDocumentType(["clj", "cljs", "cljx", "clojure", "code-workspace", "coffee", "ctp", "dockerfile", "dot", "edn", "fs", "fsi", "fsscript", "fsx", "handlebars", "hbs", "lua", "m", "makefile", "ml", "mli", "pl", "pl6", "pm", "pm6", "pod", "pp", "properties", "psgi", "pug", "r", "rs", "rt", "svg", "svgz", "t", "txt", "vb", "xcodeproj", "xcworkspace"], 'resources/darwin/default.icns') - ], - darwinBundleURLTypes: [{ - role: 'Viewer', - name: product.nameLong, - urlSchemes: [product.urlProtocol] - }], - darwinForceDarkModeSupport: true, - darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined, - linuxExecutableName: product.applicationName, - winIcon: 'resources/win32/code.ico', - token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined, - - // @ts-ignore JSON checking: electronRepository is optional - repo: product.electronRepository || undefined -}; - -function getElectron(arch) { - return () => { - const electronOpts = _.extend({}, config, { - platform: process.platform, - arch, - ffmpegChromium: true, - keepDefaultApp: true - }); - - return gulp.src('package.json') - .pipe(json({ name: product.nameShort })) - .pipe(electron(electronOpts)) - .pipe(filter(['**', '!**/app/package.json'])) - .pipe(vfs.dest('.build/electron')); - }; -} - gulp.task(task.define('electron', task.series(util.rimraf('.build/electron'), getElectron(process.arch)))); gulp.task(task.define('electron-ia32', task.series(util.rimraf('.build/electron'), getElectron('ia32')))); gulp.task(task.define('electron-x64', task.series(util.rimraf('.build/electron'), getElectron('x64')))); diff --git a/build/lib/electron.js b/build/lib/electron.js index 63e867a98fe..79833f8e343 100644 --- a/build/lib/electron.js +++ b/build/lib/electron.js @@ -2,29 +2,116 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - 'use strict'; - -const fs = require('fs'); -const path = require('path'); +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +const path = require("path"); +const vfs = require("vinyl-fs"); +const filter = require("gulp-filter"); +const json = require("gulp-json-editor"); +const _ = require("underscore"); +const util = require("./util"); +const electron = require('gulp-atom-electron'); const root = path.dirname(path.dirname(__dirname)); - +const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8')); +const commit = util.getVersion(root); function getElectronVersion() { - const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8'); - // @ts-ignore - const target = /^target "(.*)"$/m.exec(yarnrc)[1]; - - return target; + const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8'); + const target = /^target "(.*)"$/m.exec(yarnrc)[1]; + return target; +} +exports.getElectronVersion = getElectronVersion; +const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8')); +function darwinBundleDocumentType(extensions, icon) { + return { + name: product.nameLong + ' document', + role: 'Editor', + ostypes: ["TEXT", "utxt", "TUTX", "****"], + extensions: extensions, + iconFile: icon + }; +} +exports.config = { + version: getElectronVersion(), + productAppName: product.nameLong, + companyName: 'Microsoft Corporation', + copyright: 'Copyright (C) 2019 Microsoft. All rights reserved', + darwinIcon: 'resources/darwin/code.icns', + darwinBundleIdentifier: product.darwinBundleIdentifier, + darwinApplicationCategoryType: 'public.app-category.developer-tools', + darwinHelpBookFolder: 'VS Code HelpBook', + darwinHelpBookName: 'VS Code HelpBook', + darwinBundleDocumentTypes: [ + darwinBundleDocumentType(["bat", "cmd"], 'resources/darwin/bat.icns'), + darwinBundleDocumentType(["bowerrc"], 'resources/darwin/bower.icns'), + darwinBundleDocumentType(["c", "h"], 'resources/darwin/c.icns'), + darwinBundleDocumentType(["config", "editorconfig", "gitattributes", "gitconfig", "gitignore", "ini"], 'resources/darwin/config.icns'), + darwinBundleDocumentType(["cc", "cpp", "cxx", "hh", "hpp", "hxx"], 'resources/darwin/cpp.icns'), + darwinBundleDocumentType(["cs", "csx"], 'resources/darwin/csharp.icns'), + darwinBundleDocumentType(["css"], 'resources/darwin/css.icns'), + darwinBundleDocumentType(["go"], 'resources/darwin/go.icns'), + darwinBundleDocumentType(["asp", "aspx", "cshtml", "htm", "html", "jshtm", "jsp", "phtml", "shtml"], 'resources/darwin/html.icns'), + darwinBundleDocumentType(["jade"], 'resources/darwin/jade.icns'), + darwinBundleDocumentType(["jav", "java"], 'resources/darwin/java.icns'), + darwinBundleDocumentType(["js", "jscsrc", "jshintrc", "mjs"], 'resources/darwin/javascript.icns'), + darwinBundleDocumentType(["json"], 'resources/darwin/json.icns'), + darwinBundleDocumentType(["less"], 'resources/darwin/less.icns'), + darwinBundleDocumentType(["markdown", "md", "mdoc", "mdown", "mdtext", "mdtxt", "mdwn", "mkd", "mkdn"], 'resources/darwin/markdown.icns'), + darwinBundleDocumentType(["php"], 'resources/darwin/php.icns'), + darwinBundleDocumentType(["ps1", "psd1", "psm1"], 'resources/darwin/powershell.icns'), + darwinBundleDocumentType(["py"], 'resources/darwin/python.icns'), + darwinBundleDocumentType(["gemspec", "rb"], 'resources/darwin/ruby.icns'), + darwinBundleDocumentType(["scss"], 'resources/darwin/sass.icns'), + darwinBundleDocumentType(["bash", "bash_login", "bash_logout", "bash_profile", "bashrc", "profile", "rhistory", "rprofile", "sh", "zlogin", "zlogout", "zprofile", "zsh", "zshenv", "zshrc"], 'resources/darwin/shell.icns'), + darwinBundleDocumentType(["sql"], 'resources/darwin/sql.icns'), + darwinBundleDocumentType(["ts"], 'resources/darwin/typescript.icns'), + darwinBundleDocumentType(["tsx", "jsx"], 'resources/darwin/react.icns'), + darwinBundleDocumentType(["vue"], 'resources/darwin/vue.icns'), + darwinBundleDocumentType(["ascx", "csproj", "dtd", "wxi", "wxl", "wxs", "xml", "xaml"], 'resources/darwin/xml.icns'), + darwinBundleDocumentType(["eyaml", "eyml", "yaml", "yml"], 'resources/darwin/yaml.icns'), + darwinBundleDocumentType(["clj", "cljs", "cljx", "clojure", "code-workspace", "coffee", "ctp", "dockerfile", "dot", "edn", "fs", "fsi", "fsscript", "fsx", "handlebars", "hbs", "lua", "m", "makefile", "ml", "mli", "pl", "pl6", "pm", "pm6", "pod", "pp", "properties", "psgi", "pug", "r", "rs", "rt", "svg", "svgz", "t", "txt", "vb", "xcodeproj", "xcworkspace"], 'resources/darwin/default.icns') + ], + darwinBundleURLTypes: [{ + role: 'Viewer', + name: product.nameLong, + urlSchemes: [product.urlProtocol] + }], + darwinForceDarkModeSupport: true, + darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined, + linuxExecutableName: product.applicationName, + winIcon: 'resources/win32/code.ico', + token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined, + repo: product.electronRepository || undefined +}; +function getElectron(arch) { + return () => { + const electronOpts = _.extend({}, exports.config, { + platform: process.platform, + arch, + ffmpegChromium: true, + keepDefaultApp: true + }); + return vfs.src('package.json') + .pipe(json({ name: product.nameShort })) + .pipe(electron(electronOpts)) + .pipe(filter(['**', '!**/app/package.json'])) + .pipe(vfs.dest('.build/electron')); + }; +} +exports.getElectron = getElectron; +async function main() { + const version = getElectronVersion(); + const electronPath = path.join(root, '.build', 'electron'); + const versionFile = path.join(electronPath, 'version'); + const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`; + if (!isUpToDate) { + await util.rimraf(electronPath)(); + await util.streamToPromise(getElectron(process.arch)()); + } } - -module.exports.getElectronVersion = getElectronVersion; - -// returns 0 if the right version of electron is in .build/electron -// @ts-ignore if (require.main === module) { - const version = getElectronVersion(); - const versionFile = path.join(root, '.build', 'electron', 'version'); - const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`; - - process.exit(isUpToDate ? 0 : 1); + main().catch(err => { + console.error(err); + process.exit(1); + }); } diff --git a/build/lib/electron.ts b/build/lib/electron.ts new file mode 100644 index 00000000000..34ca951df8c --- /dev/null +++ b/build/lib/electron.ts @@ -0,0 +1,127 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import * as fs from 'fs'; +import * as path from 'path'; +import * as vfs from 'vinyl-fs'; +import * as filter from 'gulp-filter'; +import * as json from 'gulp-json-editor'; +import * as _ from 'underscore'; +import * as util from './util'; + +const electron = require('gulp-atom-electron'); + +const root = path.dirname(path.dirname(__dirname)); +const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8')); +const commit = util.getVersion(root); + +export function getElectronVersion(): string { + const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8'); + const target = /^target "(.*)"$/m.exec(yarnrc)![1]; + return target; +} + +const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8')); + +function darwinBundleDocumentType(extensions: string[], icon: string) { + return { + name: product.nameLong + ' document', + role: 'Editor', + ostypes: ["TEXT", "utxt", "TUTX", "****"], + extensions: extensions, + iconFile: icon + }; +} + +export const config = { + version: getElectronVersion(), + productAppName: product.nameLong, + companyName: 'Microsoft Corporation', + copyright: 'Copyright (C) 2019 Microsoft. All rights reserved', + darwinIcon: 'resources/darwin/code.icns', + darwinBundleIdentifier: product.darwinBundleIdentifier, + darwinApplicationCategoryType: 'public.app-category.developer-tools', + darwinHelpBookFolder: 'VS Code HelpBook', + darwinHelpBookName: 'VS Code HelpBook', + darwinBundleDocumentTypes: [ + darwinBundleDocumentType(["bat", "cmd"], 'resources/darwin/bat.icns'), + darwinBundleDocumentType(["bowerrc"], 'resources/darwin/bower.icns'), + darwinBundleDocumentType(["c", "h"], 'resources/darwin/c.icns'), + darwinBundleDocumentType(["config", "editorconfig", "gitattributes", "gitconfig", "gitignore", "ini"], 'resources/darwin/config.icns'), + darwinBundleDocumentType(["cc", "cpp", "cxx", "hh", "hpp", "hxx"], 'resources/darwin/cpp.icns'), + darwinBundleDocumentType(["cs", "csx"], 'resources/darwin/csharp.icns'), + darwinBundleDocumentType(["css"], 'resources/darwin/css.icns'), + darwinBundleDocumentType(["go"], 'resources/darwin/go.icns'), + darwinBundleDocumentType(["asp", "aspx", "cshtml", "htm", "html", "jshtm", "jsp", "phtml", "shtml"], 'resources/darwin/html.icns'), + darwinBundleDocumentType(["jade"], 'resources/darwin/jade.icns'), + darwinBundleDocumentType(["jav", "java"], 'resources/darwin/java.icns'), + darwinBundleDocumentType(["js", "jscsrc", "jshintrc", "mjs"], 'resources/darwin/javascript.icns'), + darwinBundleDocumentType(["json"], 'resources/darwin/json.icns'), + darwinBundleDocumentType(["less"], 'resources/darwin/less.icns'), + darwinBundleDocumentType(["markdown", "md", "mdoc", "mdown", "mdtext", "mdtxt", "mdwn", "mkd", "mkdn"], 'resources/darwin/markdown.icns'), + darwinBundleDocumentType(["php"], 'resources/darwin/php.icns'), + darwinBundleDocumentType(["ps1", "psd1", "psm1"], 'resources/darwin/powershell.icns'), + darwinBundleDocumentType(["py"], 'resources/darwin/python.icns'), + darwinBundleDocumentType(["gemspec", "rb"], 'resources/darwin/ruby.icns'), + darwinBundleDocumentType(["scss"], 'resources/darwin/sass.icns'), + darwinBundleDocumentType(["bash", "bash_login", "bash_logout", "bash_profile", "bashrc", "profile", "rhistory", "rprofile", "sh", "zlogin", "zlogout", "zprofile", "zsh", "zshenv", "zshrc"], 'resources/darwin/shell.icns'), + darwinBundleDocumentType(["sql"], 'resources/darwin/sql.icns'), + darwinBundleDocumentType(["ts"], 'resources/darwin/typescript.icns'), + darwinBundleDocumentType(["tsx", "jsx"], 'resources/darwin/react.icns'), + darwinBundleDocumentType(["vue"], 'resources/darwin/vue.icns'), + darwinBundleDocumentType(["ascx", "csproj", "dtd", "wxi", "wxl", "wxs", "xml", "xaml"], 'resources/darwin/xml.icns'), + darwinBundleDocumentType(["eyaml", "eyml", "yaml", "yml"], 'resources/darwin/yaml.icns'), + darwinBundleDocumentType(["clj", "cljs", "cljx", "clojure", "code-workspace", "coffee", "ctp", "dockerfile", "dot", "edn", "fs", "fsi", "fsscript", "fsx", "handlebars", "hbs", "lua", "m", "makefile", "ml", "mli", "pl", "pl6", "pm", "pm6", "pod", "pp", "properties", "psgi", "pug", "r", "rs", "rt", "svg", "svgz", "t", "txt", "vb", "xcodeproj", "xcworkspace"], 'resources/darwin/default.icns') + ], + darwinBundleURLTypes: [{ + role: 'Viewer', + name: product.nameLong, + urlSchemes: [product.urlProtocol] + }], + darwinForceDarkModeSupport: true, + darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined, + linuxExecutableName: product.applicationName, + winIcon: 'resources/win32/code.ico', + token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined, + repo: product.electronRepository || undefined +}; + +export function getElectron(arch: string): () => NodeJS.ReadWriteStream { + return () => { + const electronOpts = _.extend({}, config, { + platform: process.platform, + arch, + ffmpegChromium: true, + keepDefaultApp: true + }); + + return vfs.src('package.json') + .pipe(json({ name: product.nameShort })) + .pipe(electron(electronOpts)) + .pipe(filter(['**', '!**/app/package.json'])) + .pipe(vfs.dest('.build/electron')); + }; +} + +async function main(): Promise { + const version = getElectronVersion(); + const electronPath = path.join(root, '.build', 'electron'); + const versionFile = path.join(electronPath, 'version'); + const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`; + + if (!isUpToDate) { + await util.rimraf(electronPath)(); + await util.streamToPromise(getElectron(process.arch)()); + } +} + +if (require.main === module) { + main().catch(err => { + console.error(err); + process.exit(1); + }); +} diff --git a/build/lib/util.js b/build/lib/util.js index 6acb7ab574f..1888bfed2e4 100644 --- a/build/lib/util.js +++ b/build/lib/util.js @@ -166,20 +166,23 @@ function stripSourceMappingURL() { } exports.stripSourceMappingURL = stripSourceMappingURL; function rimraf(dir) { - let retries = 0; - const retry = (cb) => { - _rimraf(dir, { maxBusyTries: 1 }, (err) => { - if (!err) { - return cb(); - } - if (err.code === 'ENOTEMPTY' && ++retries < 5) { - return setTimeout(() => retry(cb), 10); - } - return cb(err); - }); - }; - retry.taskName = `clean-${path.basename(dir).toLowerCase()}`; - return retry; + const result = () => new Promise((c, e) => { + let retries = 0; + const retry = () => { + _rimraf(dir, { maxBusyTries: 1 }, (err) => { + if (!err) { + return c(); + } + if (err.code === 'ENOTEMPTY' && ++retries < 5) { + return setTimeout(() => retry(), 10); + } + return e(err); + }); + }; + retry(); + }); + result.taskName = `clean-${path.basename(dir).toLowerCase()}`; + return result; } exports.rimraf = rimraf; function getVersion(root) { @@ -219,3 +222,10 @@ function versionStringToNumber(versionStr) { return parseInt(match[1], 10) * 1e4 + parseInt(match[2], 10) * 1e2 + parseInt(match[3], 10); } exports.versionStringToNumber = versionStringToNumber; +function streamToPromise(stream) { + return new Promise((c, e) => { + stream.on('error', err => e(err)); + stream.on('end', () => c()); + }); +} +exports.streamToPromise = streamToPromise; diff --git a/build/lib/util.ts b/build/lib/util.ts index 6a82295ae26..ae598d5f2cf 100644 --- a/build/lib/util.ts +++ b/build/lib/util.ts @@ -218,24 +218,29 @@ export function stripSourceMappingURL(): NodeJS.ReadWriteStream { return es.duplex(input, output); } -export function rimraf(dir: string): (cb: any) => void { - let retries = 0; +export function rimraf(dir: string): () => Promise { + const result = () => new Promise((c, e) => { + let retries = 0; - const retry = (cb: (err?: any) => void) => { - _rimraf(dir, { maxBusyTries: 1 }, (err: any) => { - if (!err) { - return cb(); - } + const retry = () => { + _rimraf(dir, { maxBusyTries: 1 }, (err: any) => { + if (!err) { + return c(); + } - if (err.code === 'ENOTEMPTY' && ++retries < 5) { - return setTimeout(() => retry(cb), 10); - } + if (err.code === 'ENOTEMPTY' && ++retries < 5) { + return setTimeout(() => retry(), 10); + } - return cb(err); - }); - }; - retry.taskName = `clean-${path.basename(dir).toLowerCase()}`; - return retry; + return e(err); + }); + }; + + retry(); + }); + + result.taskName = `clean-${path.basename(dir).toLowerCase()}`; + return result; } export function getVersion(root: string): string | undefined { @@ -281,3 +286,10 @@ export function versionStringToNumber(versionStr: string) { return parseInt(match[1], 10) * 1e4 + parseInt(match[2], 10) * 1e2 + parseInt(match[3], 10); } + +export function streamToPromise(stream: NodeJS.ReadWriteStream): Promise { + return new Promise((c, e) => { + stream.on('error', err => e(err)); + stream.on('end', () => c()); + }); +} diff --git a/package.json b/package.json index 40e8caab369..884ae16870a 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "monaco-editor-test": "mocha --only-monaco-editor", "precommit": "node build/gulpfile.hygiene.js", "gulp": "gulp --max_old_space_size=8192", + "electron": "node build/lib/electron", "7z": "7z", "update-grammars": "node build/npm/update-all-grammars.js", "update-localization-extension": "node build/npm/update-localization-extension.js", diff --git a/scripts/code-cli.sh b/scripts/code-cli.sh index e42beeed5bf..e4fa552e642 100755 --- a/scripts/code-cli.sh +++ b/scripts/code-cli.sh @@ -22,8 +22,7 @@ function code() { test -d node_modules || yarn # Get electron - node build/lib/electron.js || ./node_modules/.bin/gulp electron - + yarn electron # Manage built-in extensions if [[ "$1" == "--builtin" ]]; then diff --git a/scripts/code.sh b/scripts/code.sh index 0440e49e71a..4ba1a00b9f7 100755 --- a/scripts/code.sh +++ b/scripts/code.sh @@ -27,7 +27,7 @@ function code() { test -d node_modules || yarn # Get electron - node build/lib/electron.js || ./node_modules/.bin/gulp electron + yarn electron # Manage built-in extensions if [[ "$1" == "--builtin" ]]; then diff --git a/scripts/node-electron.sh b/scripts/node-electron.sh index 7216e92a6c6..1c3d894a1d1 100755 --- a/scripts/node-electron.sh +++ b/scripts/node-electron.sh @@ -18,7 +18,7 @@ else fi # Get electron -node build/lib/electron.js || ./node_modules/.bin/gulp electron +yarn electron popd diff --git a/scripts/test.sh b/scripts/test.sh index 630af4e53e5..28298993295 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -22,7 +22,7 @@ fi test -d node_modules || yarn # Get electron -node build/lib/electron.js || ./node_modules/.bin/gulp electron +yarn electron # Unit Tests if [[ "$OSTYPE" == "darwin"* ]]; then