mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-21 09:08:53 +01:00
* update to 3.0.0-beta.3
* update d.ts files; rename NodeBuffer => Buffer
* update to 3.0.0-beta.4
* undo invalid change
* remove some Electron 2.0.x specific workarounds
* pinch zoom is now disabled by default
* update vscode-nsfw
* change vscode-nsfw
* update smoke test electron version
* streams: use destroy() over close()
* workaround broken tests
* bump distro and OSS
* try to bump node version for build
* update macOS build to use node.js 10.8.0
* fix extension tests
* use node.js 10.2.1 for all builds
* remove nsfw from dev dependencies
* back to node 8.x for build
* Revert "back to node 8.x for build"
This reverts commit 90ea2b7af2.
* update distro
* disable test run on macOS prod build for now
* bump distro
* ensure proper nsfw dep
* fix more native dependencies
* temp disable failing test
* fix packages
* update deps
* fix deps
* update deps
* enable macOS unit tests again
* fix deprecated buffer use
* Electron 3.0.0.beta.5
* bump deps
* fix tree accidentally treating auxclick as click
* improve overlay cleanup scheduler (fixes flicker seen with Electron 3.0.x)
* update distro
* remove obsolete disableBlinkFeatures: 'Auxclick'
* update to Electron 3.0 beta 6
* fix compile
* workaround #56994
* do not use backgroundColor to find shared process (causes flicker)
* fix flicker on windows from shared process background color
* webview - bubble up keyboard events (workaround for #56988)
* bump electron to 3.0.0-beta.8
* webview - fix deprecation
* webview - fix another deprecation
* debt - handle SIGPIPE on more processes
* workaround more webview focus issues (for #56988)
* webview - use proper way to focus()
* debt - avoid window-focus/blur and use native focus events instead
* webview - restore previous focus method
* webview - improve focus tracking (do not rely on DOM events)
* bump to electron 3.0.0-beta.9
* update deps
* update electron@3.0.0-beta.10
* webview - do not rely on DOM focus for certain commands (for #56988)
* update to electron@3.0.0-beta.11
* electron@3.0.0-beta.12
* update to beta 13
* update to electron 3.0.0
* update to Electron 3.0.1
* electron@3.0.2
* revert build changes (node.js version)
* try with: enable mojave dark mode support
* fix types
* electron 3.0.3
* electron@3.0.4
* fix deps
* bump electron@3.0.6
* bump electron@3.0.9
* fix strict null issue
* reset format
* bump electron@3.0.10
* fix strict null issue
* webview - print error when revive fails
* electron 3.0.x - try to fix keybindings in webviews (#64417)
* bump @types/node => ^10.12.12
* 💄
* update distro
208 lines
6.0 KiB
JavaScript
208 lines
6.0 KiB
JavaScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
//@ts-check
|
|
'use strict';
|
|
|
|
const bootstrap = require('./bootstrap');
|
|
|
|
/**
|
|
* @param {object} destination
|
|
* @param {object} source
|
|
* @returns {object}
|
|
*/
|
|
exports.assign = function assign(destination, source) {
|
|
return Object.keys(source).reduce(function (r, key) { r[key] = source[key]; return r; }, destination);
|
|
};
|
|
|
|
/**
|
|
*
|
|
* @param {string[]} modulePaths
|
|
* @param {(result, configuration: object) => any} resultCallback
|
|
* @param {{ forceEnableDeveloperKeybindings?: boolean, removeDeveloperKeybindingsAfterLoad?: boolean, canModifyDOM?: (config: object) => void, beforeLoaderConfig?: (config: object, loaderConfig: object) => void, beforeRequire?: () => void }=} options
|
|
*/
|
|
exports.load = function (modulePaths, resultCallback, options) {
|
|
|
|
// @ts-ignore
|
|
const webFrame = require('electron').webFrame;
|
|
const path = require('path');
|
|
|
|
const args = parseURLQueryArgs();
|
|
const configuration = JSON.parse(args['config'] || '{}') || {};
|
|
|
|
// Error handler
|
|
// @ts-ignore
|
|
process.on('uncaughtException', function (error) {
|
|
onUnexpectedError(error, enableDeveloperTools);
|
|
});
|
|
|
|
// Developer tools
|
|
const enableDeveloperTools = (process.env['VSCODE_DEV'] || !!configuration.extensionDevelopmentPath) && !configuration.extensionTestsPath;
|
|
let developerToolsUnbind;
|
|
if (enableDeveloperTools || (options && options.forceEnableDeveloperKeybindings)) {
|
|
developerToolsUnbind = registerDeveloperKeybindings();
|
|
}
|
|
|
|
// Correctly inherit the parent's environment
|
|
exports.assign(process.env, configuration.userEnv);
|
|
|
|
// Enable ASAR support
|
|
bootstrap.enableASARSupport(path.join(configuration.appRoot, 'node_modules'));
|
|
|
|
// Apply zoom level early to avoid glitches
|
|
const zoomLevel = configuration.zoomLevel;
|
|
if (typeof zoomLevel === 'number' && zoomLevel !== 0) {
|
|
webFrame.setZoomLevel(zoomLevel);
|
|
}
|
|
|
|
if (options && typeof options.canModifyDOM === 'function') {
|
|
options.canModifyDOM(configuration);
|
|
}
|
|
|
|
// Get the nls configuration into the process.env as early as possible.
|
|
const nlsConfig = bootstrap.setupNLS();
|
|
|
|
let locale = nlsConfig.availableLanguages['*'] || 'en';
|
|
if (locale === 'zh-tw') {
|
|
locale = 'zh-Hant';
|
|
} else if (locale === 'zh-cn') {
|
|
locale = 'zh-Hans';
|
|
}
|
|
|
|
window.document.documentElement.setAttribute('lang', locale);
|
|
|
|
// Load the loader
|
|
const amdLoader = require(configuration.appRoot + '/out/vs/loader.js');
|
|
const amdRequire = amdLoader.require;
|
|
const amdDefine = amdLoader.require.define;
|
|
const nodeRequire = amdLoader.require.nodeRequire;
|
|
|
|
window['nodeRequire'] = nodeRequire;
|
|
window['require'] = amdRequire;
|
|
|
|
// replace the patched electron fs with the original node fs for all AMD code
|
|
amdDefine('fs', ['original-fs'], function (originalFS) { return originalFS; });
|
|
|
|
window['MonacoEnvironment'] = {};
|
|
|
|
const loaderConfig = {
|
|
baseUrl: bootstrap.uriFromPath(configuration.appRoot) + '/out',
|
|
'vs/nls': nlsConfig,
|
|
nodeModules: [/*BUILD->INSERT_NODE_MODULES*/]
|
|
};
|
|
|
|
// cached data config
|
|
if (configuration.nodeCachedDataDir) {
|
|
loaderConfig.nodeCachedData = {
|
|
path: configuration.nodeCachedDataDir,
|
|
seed: modulePaths.join('')
|
|
};
|
|
}
|
|
|
|
if (options && typeof options.beforeLoaderConfig === 'function') {
|
|
options.beforeLoaderConfig(configuration, loaderConfig);
|
|
}
|
|
|
|
amdRequire.config(loaderConfig);
|
|
|
|
if (nlsConfig.pseudo) {
|
|
amdRequire(['vs/nls'], function (nlsPlugin) {
|
|
nlsPlugin.setPseudoTranslation(nlsConfig.pseudo);
|
|
});
|
|
}
|
|
|
|
if (options && typeof options.beforeRequire === 'function') {
|
|
options.beforeRequire();
|
|
}
|
|
|
|
amdRequire(modulePaths, result => {
|
|
try {
|
|
const callbackResult = resultCallback(result, configuration);
|
|
if (callbackResult && typeof callbackResult.then === 'function') {
|
|
callbackResult.then(() => {
|
|
if (developerToolsUnbind && options && options.removeDeveloperKeybindingsAfterLoad) {
|
|
developerToolsUnbind();
|
|
}
|
|
}, error => {
|
|
onUnexpectedError(error, enableDeveloperTools);
|
|
});
|
|
}
|
|
} catch (error) {
|
|
onUnexpectedError(error, enableDeveloperTools);
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* @returns {{[param: string]: string }}
|
|
*/
|
|
function parseURLQueryArgs() {
|
|
const search = window.location.search || '';
|
|
|
|
return search.split(/[?&]/)
|
|
.filter(function (param) { return !!param; })
|
|
.map(function (param) { return param.split('='); })
|
|
.filter(function (param) { return param.length === 2; })
|
|
.reduce(function (r, param) { r[param[0]] = decodeURIComponent(param[1]); return r; }, {});
|
|
}
|
|
|
|
/**
|
|
* @returns {() => void}
|
|
*/
|
|
function registerDeveloperKeybindings() {
|
|
|
|
// @ts-ignore
|
|
const ipc = require('electron').ipcRenderer;
|
|
|
|
const extractKey = function (e) {
|
|
return [
|
|
e.ctrlKey ? 'ctrl-' : '',
|
|
e.metaKey ? 'meta-' : '',
|
|
e.altKey ? 'alt-' : '',
|
|
e.shiftKey ? 'shift-' : '',
|
|
e.keyCode
|
|
].join('');
|
|
};
|
|
|
|
// Devtools & reload support
|
|
const TOGGLE_DEV_TOOLS_KB = (process.platform === 'darwin' ? 'meta-alt-73' : 'ctrl-shift-73'); // mac: Cmd-Alt-I, rest: Ctrl-Shift-I
|
|
const TOGGLE_DEV_TOOLS_KB_ALT = '123'; // F12
|
|
const RELOAD_KB = (process.platform === 'darwin' ? 'meta-82' : 'ctrl-82'); // mac: Cmd-R, rest: Ctrl-R
|
|
|
|
let listener = function (e) {
|
|
const key = extractKey(e);
|
|
if (key === TOGGLE_DEV_TOOLS_KB || key === TOGGLE_DEV_TOOLS_KB_ALT) {
|
|
ipc.send('vscode:toggleDevTools');
|
|
} else if (key === RELOAD_KB) {
|
|
ipc.send('vscode:reloadWindow');
|
|
}
|
|
};
|
|
|
|
window.addEventListener('keydown', listener);
|
|
|
|
return function () {
|
|
if (listener) {
|
|
window.removeEventListener('keydown', listener);
|
|
listener = void 0;
|
|
}
|
|
};
|
|
}
|
|
|
|
function onUnexpectedError(error, enableDeveloperTools) {
|
|
|
|
// @ts-ignore
|
|
const ipc = require('electron').ipcRenderer;
|
|
|
|
if (enableDeveloperTools) {
|
|
ipc.send('vscode:openDevTools');
|
|
}
|
|
|
|
console.error('[uncaught exception]: ' + error);
|
|
|
|
if (error.stack) {
|
|
console.error(error.stack);
|
|
}
|
|
}
|