diff --git a/package.json b/package.json index f886301d14d5acc3eaa2c7c941bb465d9bf24f5e..2ed9882f44270aa1f0d1ecd09fc0c186c216a4e5 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": { "name": "Microsoft Corporation" }, - "main": "./out/vs/workbench/electron-main/bootstrap", + "main": "./out/main", "private": true, "engines": { "node": ">= 0.10.0 < 0.11.0" diff --git a/src/vs/workbench/electron-main/bootstrap.js b/src/bootstrap-amd.js similarity index 50% rename from src/vs/workbench/electron-main/bootstrap.js rename to src/bootstrap-amd.js index a018cfedd818cc2a02fa892608341173dcc46116..bcbb467b4365570fc70781bbb51a003879011d80 100644 --- a/src/vs/workbench/electron-main/bootstrap.js +++ b/src/bootstrap-amd.js @@ -3,52 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -/* global __filename, __dirname, global, process */ - -// Perf measurements -global.vscodeStart = Date.now(); - -var app = require('electron').app; var path = require('path'); -var fs = require('fs'); - -// Change cwd if given via env variable -try { - process.env.VSCODE_CWD && process.chdir(process.env.VSCODE_CWD); -} catch (err) { - // noop -} - -// Set path according to being built or not -if (!!process.env.VSCODE_DEV) { - var appData = app.getPath('appData'); - app.setPath('userData', path.join(appData, 'Code-Development')); -} - -// Mac: when someone drops a file to the not-yet running VSCode, the open-file event fires even before -// the app-ready event. We listen very early for open-file and remember this upon startup as path to open. -global.macOpenFiles = []; -app.on('open-file', function(event, path) { - global.macOpenFiles.push(path); -}); - -// TODO: Duplicated in: -// * src\bootstrap.js -// * src\vs\workbench\electron-main\bootstrap.js -// * src\vs\platform\plugins\common\nativePluginService.ts -function uriFromPath(_path) { - var pathName = path.resolve(_path).replace(/\\/g, '/'); - - if (pathName.length > 0 && pathName.charAt(0) !== '/') { - pathName = '/' + pathName; - } - - return encodeURI('file://' + pathName); -} - +var loader = require('./vs/loader'); // Duplicated in ../index.html for the renderes. function getNLSConfiguration() { + if (process.env['VSCODE_NLS_CONFIG']) { + return JSON.parse(process.env['VSCODE_NLS_CONFIG']); + } + var locale = undefined; var localeOpts = '--locale'; for (var i = 0; i < process.argv.length; i++) { @@ -82,29 +45,38 @@ function getNLSConfiguration() { } } } + return { availableLanguages: {} }; } -// Load our code once ready -app.once('ready', function() { - var nlsConfig = getNLSConfiguration(); - process.env['VSCODE_NLS_CONFIG'] = JSON.stringify(nlsConfig); - - var loader = require('../../loader'); - loader.config({ - nodeRequire: require, - nodeMain: __filename, - baseUrl: uriFromPath(path.dirname(path.dirname(path.dirname((__dirname))))), - 'vs/nls': nlsConfig - }); +function uriFromPath(_path) { + var pathName = path.resolve(_path).replace(/\\/g, '/'); - if (nlsConfig.pseudo) { - loader(['vs/nls'], function(nlsPlugin) { - nlsPlugin.setPseudoTranslation(nlsConfig.pseudo); - }); + if (pathName.length > 0 && pathName.charAt(0) !== '/') { + pathName = '/' + pathName; } - loader(['vs/workbench/electron-main/main'], function(main) { - // Loading done - }, function (err) { console.error(err); }); -}); \ No newline at end of file + return encodeURI('file://' + pathName); +} + +var nlsConfig = getNLSConfiguration(); +process.env['VSCODE_NLS_CONFIG'] = JSON.stringify(nlsConfig); + +loader.config({ + baseUrl: uriFromPath(path.join(__dirname)), + catchError: true, + nodeRequire: require, + nodeMain: __filename, + 'vs/nls': nlsConfig +}); + +if (nlsConfig.pseudo) { + loader(['vs/nls'], function(nlsPlugin) { + nlsPlugin.setPseudoTranslation(nlsConfig.pseudo); + }); +} + +var entrypoint = process.env['AMD_ENTRYPOINT']; +if (entrypoint) { + loader([entrypoint], function () { }, function (err) { console.error(err); }); +} diff --git a/src/bootstrap.js b/src/bootstrap.js index 42bd6f6e5e9d01a3153cae635c625046cca13b0a..8744528c1ac345335894a158dbfd1b896a82dcf9 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -86,18 +86,19 @@ if (!!process.send && process.env.PIPE_LOGGING === 'true') { } console.error = function () { safeSend({ type: '__$console', severity: 'error', arguments: safeStringify(arguments) }); }; - - // Let stdout, stderr and stdin be no-op streams. This prevents an issue where we would get an EBADF - // error when we are inside a forked process and this process tries to access those channels. - var stream = require('stream'); - var writable = new stream.Writable({ - write: function (chunk, encoding, next) { /* No OP */ } - }); - process.__defineGetter__('stdout', function() { return writable; }); - process.__defineGetter__('stderr', function() { return writable; }); - process.__defineGetter__('stdin', function() { return writable; }); } +// Let stdout, stderr and stdin be no-op streams. This prevents an issue where we would get an EBADF +// error when we are inside a forked process and this process tries to access those channels. +var stream = require('stream'); +var writable = new stream.Writable({ + write: function (chunk, encoding, next) { /* No OP */ } +}); + +process.__defineGetter__('stdout', function() { return writable; }); +process.__defineGetter__('stderr', function() { return writable; }); +process.__defineGetter__('stdin', function() { return writable; }); + // Handle uncaught exceptions process.on('uncaughtException', function (err) { console.error('Uncaught Exception: ', err.toString()); @@ -106,42 +107,4 @@ process.on('uncaughtException', function (err) { } }); -var path = require('path'); -var loader = require('./vs/loader'); - -// TODO: Duplicated in: -// * src\bootstrap.js -// * src\vs\workbench\electron-main\bootstrap.js -// * src\vs\platform\plugins\common\nativePluginService.ts -function uriFromPath(_path) { - var pathName = path.resolve(_path).replace(/\\/g, '/'); - - if (pathName.length > 0 && pathName.charAt(0) !== '/') { - pathName = '/' + pathName; - } - - return encodeURI('file://' + pathName); -} - -var nlsConfig = undefined; -if (process.env.VSCODE_NLS_CONFIG) { - nlsConfig = JSON.parse(process.env.VSCODE_NLS_CONFIG); -} - -loader.config({ - baseUrl: uriFromPath(path.join(__dirname)), - catchError: true, - nodeRequire: require, - nodeMain: __filename, - 'vs/nls': nlsConfig || { availableLanguages: {} } -}); -if (nlsConfig && nlsConfig.pseudo) { - loader(['vs/nls'], function(nlsPlugin) { - nlsPlugin.setPseudoTranslation(nlsConfig.pseudo); - }); -} - -var entrypoint = process.env.AMD_ENTRYPOINT; -if (entrypoint) { - loader([entrypoint], function () { }, function (err) { console.error(err); }); -} +require('./bootstrap-amd'); \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000000000000000000000000000000000000..0a438771d46d270029d3ec2841ac1b51c24e4d38 --- /dev/null +++ b/src/main.js @@ -0,0 +1,38 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// Perf measurements +global.vscodeStart = Date.now(); + +var app = require('electron').app; +var path = require('path'); + +// Change cwd if given via env variable +try { + if (process.env.VSCODE_CWD) { + process.chdir(process.env.VSCODE_CWD); + } +} catch (err) { + // noop +} + +// Set path according to being built or not +if (process.env.VSCODE_DEV) { + var appData = app.getPath('appData'); + app.setPath('userData', path.join(appData, 'Code-Development')); +} + +// Mac: when someone drops a file to the not-yet running VSCode, the open-file event fires even before +// the app-ready event. We listen very early for open-file and remember this upon startup as path to open. +global.macOpenFiles = []; +app.on('open-file', function(event, path) { + global.macOpenFiles.push(path); +}); + +// Load our code once ready +app.once('ready', function() { + process.env['AMD_ENTRYPOINT'] = 'vs/workbench/electron-main/main'; + require('./bootstrap-amd'); +});