debt - introduce and adopt FileAccess

deprecate amd.ts and require.toUrl methods
This commit is contained in:
Benjamin Pasero 2020-09-25 14:10:45 +02:00
parent 5d8c90cdb3
commit 7f035b4be7
39 changed files with 172 additions and 110 deletions

View file

@ -14,7 +14,7 @@ const nlsConfig = bootstrap.setupNLS();
// Bootstrap: Loader // Bootstrap: Loader
loader.config({ loader.config({
baseUrl: bootstrap.fileUriFromPath(__dirname, process.platform === 'win32'), baseUrl: bootstrap.fileUriFromPath(__dirname, { isWindows: process.platform === 'win32' }),
catchError: true, catchError: true,
nodeRequire: require, nodeRequire: require,
nodeMain: __filename, nodeMain: __filename,

View file

@ -103,7 +103,7 @@
window['MonacoEnvironment'] = {}; window['MonacoEnvironment'] = {};
const loaderConfig = { const loaderConfig = {
baseUrl: `${bootstrapLib.fileUriFromPath(configuration.appRoot, safeProcess.platform === 'win32')}/out`, baseUrl: `${bootstrapLib.fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32' })}/out`,
'vs/nls': nlsConfig 'vs/nls': nlsConfig
}; };
@ -241,7 +241,7 @@
} }
/** /**
* @return {{ fileUriFromPath: (path: string, isWindows: boolean) => string; }} * @return {{ fileUriFromPath: (path: string, config: { isWindows?: boolean, scheme?: string, fallbackAuthority?: string }) => string; }}
*/ */
function bootstrap() { function bootstrap() {
// @ts-ignore (defined in bootstrap.js) // @ts-ignore (defined in bootstrap.js)

22
src/bootstrap.js vendored
View file

@ -88,10 +88,13 @@
/** /**
* @param {string} path * @param {string} path
* @param {boolean} isWindows * @param {{ isWindows?: boolean, scheme?: string, fallbackAuthority?: string }} config
* @returns {string} * @returns {string}
*/ */
function fileUriFromPath(path, isWindows) { function fileUriFromPath(path, config) {
// Since we are building a URI, we normalize any backlsash
// to slashes and we ensure that the path begins with a '/'.
let pathName = path.replace(/\\/g, '/'); let pathName = path.replace(/\\/g, '/');
if (pathName.length > 0 && pathName.charAt(0) !== '/') { if (pathName.length > 0 && pathName.charAt(0) !== '/') {
pathName = `/${pathName}`; pathName = `/${pathName}`;
@ -99,10 +102,17 @@
/** @type {string} */ /** @type {string} */
let uri; let uri;
if (isWindows && pathName.startsWith('//')) { // specially handle Windows UNC paths
uri = encodeURI(`file:${pathName}`); // Windows: in order to support UNC paths (which start with '//')
} else { // that have their own authority, we do not use the provided authority
uri = encodeURI(`file://${pathName}`); // but rather preserve it.
if (config.isWindows && pathName.startsWith('//')) {
uri = encodeURI(`${config.scheme || 'file'}:${pathName}`);
}
// Otherwise we optionally add the provided authority if specified
else {
uri = encodeURI(`${config.scheme || 'file'}://${config.fallbackAuthority || ''}${pathName}`);
} }
return uri.replace(/#/g, '%23'); return uri.replace(/#/g, '%23');

View file

@ -41,6 +41,9 @@ declare const define: {
}; };
interface NodeRequire { interface NodeRequire {
/**
* @deprecated use `FileAccess.asFileUri()` for node.js contexts or `FileAccess.asBrowserUri` for browser contexts.
*/
toUrl(path: string): string; toUrl(path: string): string;
(dependencies: string[], callback: (...args: any[]) => any, errorback?: (err: any) => void): any; (dependencies: string[], callback: (...args: any[]) => any, errorback?: (err: any) => void): any;
config(data: any): any; config(data: any): any;

View file

@ -13,7 +13,7 @@ import { Emitter, Event } from 'vs/base/common/event';
import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
import * as platform from 'vs/base/common/platform'; import * as platform from 'vs/base/common/platform';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { Schemas, RemoteAuthorities } from 'vs/base/common/network'; import { Schemas, FileAccess, RemoteAuthorities } from 'vs/base/common/network';
import { BrowserFeatures } from 'vs/base/browser/canIUse'; import { BrowserFeatures } from 'vs/base/browser/canIUse';
export function clearNode(node: HTMLElement): void { export function clearNode(node: HTMLElement): void {
@ -1223,10 +1223,12 @@ export function asDomUri(uri: URI): URI {
if (!uri) { if (!uri) {
return uri; return uri;
} }
if (Schemas.vscodeRemote === uri.scheme) {
if (uri.scheme === Schemas.vscodeRemote) {
return RemoteAuthorities.rewrite(uri); return RemoteAuthorities.rewrite(uri);
} }
return uri;
return FileAccess.asBrowserUri(uri);
} }
/** /**

View file

@ -5,10 +5,16 @@
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
/**
* @deprecated use `FileAccess.asFileUri(relativePath, requireFn).fsPath`
*/
export function getPathFromAmdModule(requirefn: typeof require, relativePath: string): string { export function getPathFromAmdModule(requirefn: typeof require, relativePath: string): string {
return getUriFromAmdModule(requirefn, relativePath).fsPath; return getUriFromAmdModule(requirefn, relativePath).fsPath;
} }
/**
* @deprecated use `FileAccess.asFileUri()` for node.js contexts or `FileAccess.asBrowserUri` for browser contexts.
*/
export function getUriFromAmdModule(requirefn: typeof require, relativePath: string): URI { export function getUriFromAmdModule(requirefn: typeof require, relativePath: string): URI {
return URI.parse(requirefn.toUrl(relativePath)); return URI.parse(requirefn.toUrl(relativePath));
} }

View file

@ -129,3 +129,40 @@ class RemoteAuthoritiesImpl {
} }
export const RemoteAuthorities = new RemoteAuthoritiesImpl(); export const RemoteAuthorities = new RemoteAuthoritiesImpl();
class FileAccessImpl {
/**
* Returns a URI to use in contexts where the browser is responsible
* for loading (e.g. fetch()) or when used within the DOM.
*/
asBrowserUri(uri: URI): URI;
asBrowserUri(moduleId: string, moduleIdToUrl: { toUrl(moduleId: string): string }): URI;
asBrowserUri(uriOrModule: URI | string, moduleIdToUrl?: { toUrl(moduleId: string): string }): URI {
const uri = this.toUri(uriOrModule, moduleIdToUrl);
return uri;
}
/**
* Returns the `file` URI to use in contexts where node.js
* is responsible for loading.
*/
asFileUri(uri: URI): URI;
asFileUri(moduleId: string, moduleIdToUrl: { toUrl(moduleId: string): string }): URI;
asFileUri(uriOrModule: URI | string, moduleIdToUrl?: { toUrl(moduleId: string): string }): URI {
const uri = this.toUri(uriOrModule, moduleIdToUrl);
return uri;
}
private toUri(uriOrModule: URI | string, moduleIdToUrl?: { toUrl(moduleId: string): string }): URI {
if (URI.isUri(uriOrModule)) {
return uriOrModule;
}
return URI.parse(moduleIdToUrl!.toUrl(uriOrModule));
}
}
export const FileAccess = new FileAccessImpl();

View file

@ -3,14 +3,14 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
interface IPaths { interface IPaths {
getAppDataPath(platform: string): string; getAppDataPath(platform: string): string;
getDefaultUserDataPath(platform: string): string; getDefaultUserDataPath(platform: string): string;
} }
const pathsPath = getPathFromAmdModule(require, 'paths'); const pathsPath = FileAccess.asFileUri('paths', require).fsPath;
const paths = require.__$__nodeRequire<IPaths>(pathsPath); const paths = require.__$__nodeRequire<IPaths>(pathsPath);
export const getAppDataPath = paths.getAppDataPath; export const getAppDataPath = paths.getAppDataPath;
export const getDefaultUserDataPath = paths.getDefaultUserDataPath; export const getDefaultUserDataPath = paths.getDefaultUserDataPath;

View file

@ -15,7 +15,7 @@ import * as extpath from 'vs/base/common/extpath';
import * as Platform from 'vs/base/common/platform'; import * as Platform from 'vs/base/common/platform';
import { LineDecoder } from 'vs/base/node/decoder'; import { LineDecoder } from 'vs/base/node/decoder';
import { CommandOptions, ForkOptions, SuccessData, Source, TerminateResponse, TerminateResponseCode, Executable } from 'vs/base/common/processes'; import { CommandOptions, ForkOptions, SuccessData, Source, TerminateResponse, TerminateResponseCode, Executable } from 'vs/base/common/processes';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
export { CommandOptions, ForkOptions, SuccessData, Source, TerminateResponse, TerminateResponseCode }; export { CommandOptions, ForkOptions, SuccessData, Source, TerminateResponse, TerminateResponseCode };
export type ValueCallback<T> = (value: T | Promise<T>) => void; export type ValueCallback<T> = (value: T | Promise<T>) => void;
@ -67,7 +67,7 @@ function terminateProcess(process: cp.ChildProcess, cwd?: string): Promise<Termi
} }
} else if (Platform.isLinux || Platform.isMacintosh) { } else if (Platform.isLinux || Platform.isMacintosh) {
try { try {
const cmd = getPathFromAmdModule(require, 'vs/base/node/terminateProcess.sh'); const cmd = FileAccess.asFileUri('vs/base/node/terminateProcess.sh', require).fsPath;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
cp.execFile(cmd, [process.pid.toString()], { encoding: 'utf8', shell: true } as cp.ExecFileOptions, (err, stdout, stderr) => { cp.execFile(cmd, [process.pid.toString()], { encoding: 'utf8', shell: true } as cp.ExecFileOptions, (err, stdout, stderr) => {
if (err) { if (err) {

View file

@ -5,7 +5,7 @@
import { exec } from 'child_process'; import { exec } from 'child_process';
import { ProcessItem } from 'vs/base/common/processes'; import { ProcessItem } from 'vs/base/common/processes';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
export function listProcesses(rootPid: number): Promise<ProcessItem> { export function listProcesses(rootPid: number): Promise<ProcessItem> {
@ -180,7 +180,7 @@ export function listProcesses(rootPid: number): Promise<ProcessItem> {
// The cpu usage value reported on Linux is the average over the process lifetime, // The cpu usage value reported on Linux is the average over the process lifetime,
// recalculate the usage over a one second interval // recalculate the usage over a one second interval
// JSON.stringify is needed to escape spaces, https://github.com/nodejs/node/issues/6803 // JSON.stringify is needed to escape spaces, https://github.com/nodejs/node/issues/6803
let cmd = JSON.stringify(getPathFromAmdModule(require, 'vs/base/node/cpuUsage.sh')); let cmd = JSON.stringify(FileAccess.asFileUri('vs/base/node/cpuUsage.sh', require).fsPath);
cmd += ' ' + pids.join(' '); cmd += ' ' + pids.join(' ');
exec(cmd, {}, (err, stdout, stderr) => { exec(cmd, {}, (err, stdout, stderr) => {
@ -208,7 +208,7 @@ export function listProcesses(rootPid: number): Promise<ProcessItem> {
if (process.platform !== 'linux') { if (process.platform !== 'linux') {
reject(err || new Error(stderr.toString())); reject(err || new Error(stderr.toString()));
} else { } else {
const cmd = JSON.stringify(getPathFromAmdModule(require, 'vs/base/node/ps.sh')); const cmd = JSON.stringify(FileAccess.asFileUri('vs/base/node/ps.sh', require).fsPath);
exec(cmd, {}, (err, stdout, stderr) => { exec(cmd, {}, (err, stdout, stderr) => {
if (err || stderr) { if (err || stderr) {
reject(err || new Error(stderr.toString())); reject(err || new Error(stderr.toString()));

View file

@ -6,8 +6,8 @@
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { Disposable } from 'vs/base/common/lifecycle'; import { Disposable } from 'vs/base/common/lifecycle';
import { Event } from 'vs/base/common/event'; import { Event } from 'vs/base/common/event';
import { FileAccess } from 'vs/base/common/network';
import { BrowserWindow, BrowserWindowConstructorOptions, app, AuthInfo, WebContents, Event as ElectronEvent } from 'electron'; import { BrowserWindow, BrowserWindowConstructorOptions, app, AuthInfo, WebContents, Event as ElectronEvent } from 'electron';
import { getPathFromAmdModule } from 'vs/base/common/amd';
type LoginEvent = { type LoginEvent = {
event: ElectronEvent; event: ElectronEvent;
@ -59,7 +59,7 @@ export class ProxyAuthHandler extends Disposable {
show: true, show: true,
title: 'VS Code', title: 'VS Code',
webPreferences: { webPreferences: {
preload: getPathFromAmdModule(require, 'vs/base/parts/sandbox/electron-browser/preload.js'), preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js', require).fsPath,
sandbox: true, sandbox: true,
contextIsolation: true, contextIsolation: true,
enableWebSQL: false, enableWebSQL: false,
@ -76,7 +76,7 @@ export class ProxyAuthHandler extends Disposable {
} }
const win = new BrowserWindow(opts); const win = new BrowserWindow(opts);
const url = require.toUrl('vs/code/electron-sandbox/proxy/auth.html'); const windowUrl = FileAccess.asBrowserUri('vs/code/electron-sandbox/proxy/auth.html', require);
const proxyUrl = `${authInfo.host}:${authInfo.port}`; const proxyUrl = `${authInfo.host}:${authInfo.port}`;
const title = localize('authRequire', "Proxy Authentication Required"); const title = localize('authRequire', "Proxy Authentication Required");
const message = localize('proxyauth', "The proxy {0} requires authentication.", proxyUrl); const message = localize('proxyauth', "The proxy {0} requires authentication.", proxyUrl);
@ -97,6 +97,6 @@ export class ProxyAuthHandler extends Disposable {
win.close(); win.close();
} }
}); });
win.loadURL(url); win.loadURL(windowUrl.toString(true));
} }
} }

View file

@ -13,7 +13,7 @@ import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifec
import { IThemeMainService } from 'vs/platform/theme/electron-main/themeMainService'; import { IThemeMainService } from 'vs/platform/theme/electron-main/themeMainService';
import { toDisposable, DisposableStore } from 'vs/base/common/lifecycle'; import { toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
import { Event } from 'vs/base/common/event'; import { Event } from 'vs/base/common/event';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
export class SharedProcess implements ISharedProcess { export class SharedProcess implements ISharedProcess {
@ -41,7 +41,7 @@ export class SharedProcess implements ISharedProcess {
show: false, show: false,
backgroundColor: this.themeMainService.getBackgroundColor(), backgroundColor: this.themeMainService.getBackgroundColor(),
webPreferences: { webPreferences: {
preload: getPathFromAmdModule(require, 'vs/base/parts/sandbox/electron-browser/preload.js'), preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js', require).fsPath,
nodeIntegration: true, nodeIntegration: true,
enableWebSQL: false, enableWebSQL: false,
enableRemoteModule: false, enableRemoteModule: false,
@ -60,8 +60,10 @@ export class SharedProcess implements ISharedProcess {
windowId: this.window.id windowId: this.window.id
}; };
const url = `${require.toUrl('vs/code/electron-browser/sharedProcess/sharedProcess.html')}?config=${encodeURIComponent(JSON.stringify(config))}`; const windowUrl = FileAccess
this.window.loadURL(url); .asBrowserUri('vs/code/electron-browser/sharedProcess/sharedProcess.html', require)
.with({ query: `config=${encodeURIComponent(JSON.stringify(config))}` });
this.window.loadURL(windowUrl.toString(true));
// Prevent the window from dying // Prevent the window from dying
const onClose = (e: ElectronEvent) => { const onClose = (e: ElectronEvent) => {

View file

@ -34,9 +34,8 @@ import { ThemeIcon } from 'vs/platform/theme/common/themeService';
import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService'; import { ILifecycleMainService } from 'vs/platform/lifecycle/electron-main/lifecycleMainService';
import { IStorageMainService } from 'vs/platform/storage/node/storageMainService'; import { IStorageMainService } from 'vs/platform/storage/node/storageMainService';
import { IFileService } from 'vs/platform/files/common/files'; import { IFileService } from 'vs/platform/files/common/files';
import { FileAccess, Schemas } from 'vs/base/common/network';
import { ColorScheme } from 'vs/platform/theme/common/theme'; import { ColorScheme } from 'vs/platform/theme/common/theme';
import { getPathFromAmdModule } from 'vs/base/common/amd';
import { Schemas } from 'vs/base/common/network';
export interface IWindowCreationOptions { export interface IWindowCreationOptions {
state: IWindowState; state: IWindowState;
@ -168,7 +167,7 @@ export class CodeWindow extends Disposable implements ICodeWindow {
show: !isFullscreenOrMaximized, show: !isFullscreenOrMaximized,
title: product.nameLong, title: product.nameLong,
webPreferences: { webPreferences: {
preload: getPathFromAmdModule(require, 'vs/base/parts/sandbox/electron-browser/preload.js'), preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js', require).fsPath,
enableWebSQL: false, enableWebSQL: false,
enableRemoteModule: false, enableRemoteModule: false,
spellcheck: false, spellcheck: false,
@ -837,7 +836,10 @@ export class CodeWindow extends Disposable implements ICodeWindow {
workbench = 'vs/code/electron-browser/workbench/workbench.html'; workbench = 'vs/code/electron-browser/workbench/workbench.html';
} }
return `${require.toUrl(workbench)}?config=${encodeURIComponent(JSON.stringify(config))}`; return FileAccess
.asBrowserUri(workbench, require)
.with({ query: `config=${encodeURIComponent(JSON.stringify(config))}` })
.toString(true);
} }
serializeWindowState(): IWindowState { serializeWindowState(): IWindowState {

View file

@ -10,6 +10,7 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { CancellationToken } from 'vs/base/common/cancellation'; import { CancellationToken } from 'vs/base/common/cancellation';
import { IExtensionManifest, IExtension, ExtensionType } from 'vs/platform/extensions/common/extensions'; import { IExtensionManifest, IExtension, ExtensionType } from 'vs/platform/extensions/common/extensions';
import { FileAccess } from 'vs/base/common/network';
export const EXTENSION_IDENTIFIER_PATTERN = '^([a-z0-9A-Z][a-z0-9-A-Z]*)\\.([a-z0-9A-Z][a-z0-9-A-Z]*)$'; export const EXTENSION_IDENTIFIER_PATTERN = '^([a-z0-9A-Z][a-z0-9-A-Z]*)\\.([a-z0-9A-Z][a-z0-9-A-Z]*)$';
export const EXTENSION_IDENTIFIER_REGEX = new RegExp(EXTENSION_IDENTIFIER_PATTERN); export const EXTENSION_IDENTIFIER_REGEX = new RegExp(EXTENSION_IDENTIFIER_PATTERN);
@ -260,7 +261,7 @@ export interface IExtensionTipsService {
} }
export const DefaultIconPath = require.toUrl('./media/defaultIcon.png'); export const DefaultIconPath = FileAccess.asBrowserUri('./media/defaultIcon.png', require).toString(true);
export const ExtensionsLabel = localize('extensions', "Extensions"); export const ExtensionsLabel = localize('extensions', "Extensions");
export const ExtensionsLocalizedLabel = { value: ExtensionsLabel, original: 'Extensions' }; export const ExtensionsLocalizedLabel = { value: ExtensionsLabel, original: 'Extensions' };
export const ExtensionsChannelId = 'extensions'; export const ExtensionsChannelId = 'extensions';

View file

@ -14,7 +14,6 @@ import { areSameExtensions, ExtensionIdentifierWithVersion, groupByExtension, ge
import { Limiter, Queue } from 'vs/base/common/async'; import { Limiter, Queue } from 'vs/base/common/async';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { INativeEnvironmentService } from 'vs/platform/environment/common/environment'; import { INativeEnvironmentService } from 'vs/platform/environment/common/environment';
import { getPathFromAmdModule } from 'vs/base/common/amd';
import { localizeManifest } from 'vs/platform/extensionManagement/common/extensionNls'; import { localizeManifest } from 'vs/platform/extensionManagement/common/extensionNls';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { IProductService } from 'vs/platform/product/common/productService'; import { IProductService } from 'vs/platform/product/common/productService';
@ -23,6 +22,7 @@ import { extract, ExtractError } from 'vs/base/node/zip';
import { isWindows } from 'vs/base/common/platform'; import { isWindows } from 'vs/base/common/platform';
import { flatten } from 'vs/base/common/arrays'; import { flatten } from 'vs/base/common/arrays';
import { IStringDictionary } from 'vs/base/common/collections'; import { IStringDictionary } from 'vs/base/common/collections';
import { FileAccess } from 'vs/base/common/network';
const ERROR_SCANNING_SYS_EXTENSIONS = 'scanningSystem'; const ERROR_SCANNING_SYS_EXTENSIONS = 'scanningSystem';
const ERROR_SCANNING_USER_EXTENSIONS = 'scanningUser'; const ERROR_SCANNING_USER_EXTENSIONS = 'scanningUser';
@ -336,7 +336,7 @@ export class ExtensionsScanner extends Disposable {
private _devSystemExtensionsPath: string | null = null; private _devSystemExtensionsPath: string | null = null;
private get devSystemExtensionsPath(): string { private get devSystemExtensionsPath(): string {
if (!this._devSystemExtensionsPath) { if (!this._devSystemExtensionsPath) {
this._devSystemExtensionsPath = path.normalize(path.join(getPathFromAmdModule(require, ''), '..', '.build', 'builtInExtensions')); this._devSystemExtensionsPath = path.normalize(path.join(FileAccess.asFileUri('', require).fsPath, '..', '.build', 'builtInExtensions'));
} }
return this._devSystemExtensionsPath; return this._devSystemExtensionsPath;
} }

View file

@ -8,7 +8,7 @@ import { Client } from 'vs/base/parts/ipc/node/ipc.cp';
import { IDiskFileChange, ILogMessage } from 'vs/platform/files/node/watcher/watcher'; import { IDiskFileChange, ILogMessage } from 'vs/platform/files/node/watcher/watcher';
import { Disposable } from 'vs/base/common/lifecycle'; import { Disposable } from 'vs/base/common/lifecycle';
import { IWatcherRequest, IWatcherService } from 'vs/platform/files/node/watcher/nsfw/watcher'; import { IWatcherRequest, IWatcherService } from 'vs/platform/files/node/watcher/nsfw/watcher';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
export class FileWatcher extends Disposable { export class FileWatcher extends Disposable {
@ -34,7 +34,7 @@ export class FileWatcher extends Disposable {
private startWatching(): void { private startWatching(): void {
const client = this._register(new Client( const client = this._register(new Client(
getPathFromAmdModule(require, 'bootstrap-fork'), FileAccess.asFileUri('bootstrap-fork', require).fsPath,
{ {
serverName: 'File Watcher (nsfw)', serverName: 'File Watcher (nsfw)',
args: ['--type=watcherService'], args: ['--type=watcherService'],

View file

@ -8,7 +8,7 @@ import { Client } from 'vs/base/parts/ipc/node/ipc.cp';
import { IDiskFileChange, ILogMessage } from 'vs/platform/files/node/watcher/watcher'; import { IDiskFileChange, ILogMessage } from 'vs/platform/files/node/watcher/watcher';
import { Disposable } from 'vs/base/common/lifecycle'; import { Disposable } from 'vs/base/common/lifecycle';
import { IWatcherRequest, IWatcherOptions, IWatcherService } from 'vs/platform/files/node/watcher/unix/watcher'; import { IWatcherRequest, IWatcherOptions, IWatcherService } from 'vs/platform/files/node/watcher/unix/watcher';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
export class FileWatcher extends Disposable { export class FileWatcher extends Disposable {
@ -35,7 +35,7 @@ export class FileWatcher extends Disposable {
private startWatching(): void { private startWatching(): void {
const client = this._register(new Client( const client = this._register(new Client(
getPathFromAmdModule(require, 'bootstrap-fork'), FileAccess.asFileUri('bootstrap-fork', require).fsPath,
{ {
serverName: 'File Watcher (chokidar)', serverName: 'File Watcher (chokidar)',
args: ['--type=watcherService'], args: ['--type=watcherService'],

View file

@ -8,7 +8,7 @@ import { FileChangeType } from 'vs/platform/files/common/files';
import * as decoder from 'vs/base/node/decoder'; import * as decoder from 'vs/base/node/decoder';
import * as glob from 'vs/base/common/glob'; import * as glob from 'vs/base/common/glob';
import { IDiskFileChange, ILogMessage } from 'vs/platform/files/node/watcher/watcher'; import { IDiskFileChange, ILogMessage } from 'vs/platform/files/node/watcher/watcher';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
export class OutOfProcessWin32FolderWatcher { export class OutOfProcessWin32FolderWatcher {
@ -50,7 +50,7 @@ export class OutOfProcessWin32FolderWatcher {
args.push('-verbose'); args.push('-verbose');
} }
this.handle = cp.spawn(getPathFromAmdModule(require, 'vs/platform/files/node/watcher/win32/CodeHelper.exe'), args); this.handle = cp.spawn(FileAccess.asFileUri('vs/platform/files/node/watcher/win32/CodeHelper.exe', require).fsPath, args);
const stdoutLineDecoder = new decoder.LineDecoder(); const stdoutLineDecoder = new decoder.LineDecoder();

View file

@ -18,9 +18,9 @@ import { ILogService } from 'vs/platform/log/common/log';
import { IWindowState } from 'vs/platform/windows/electron-main/windows'; import { IWindowState } from 'vs/platform/windows/electron-main/windows';
import { listProcesses } from 'vs/base/node/ps'; import { listProcesses } from 'vs/base/node/ps';
import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogs'; import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogs';
import { getPathFromAmdModule } from 'vs/base/common/amd';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { zoomLevelToZoomFactor } from 'vs/platform/windows/common/windows'; import { zoomLevelToZoomFactor } from 'vs/platform/windows/common/windows';
import { FileAccess } from 'vs/base/common/network';
const DEFAULT_BACKGROUND_COLOR = '#1E1E1E'; const DEFAULT_BACKGROUND_COLOR = '#1E1E1E';
@ -195,7 +195,7 @@ export class IssueMainService implements ICommonIssueService {
title: localize('issueReporter', "Issue Reporter"), title: localize('issueReporter', "Issue Reporter"),
backgroundColor: data.styles.backgroundColor || DEFAULT_BACKGROUND_COLOR, backgroundColor: data.styles.backgroundColor || DEFAULT_BACKGROUND_COLOR,
webPreferences: { webPreferences: {
preload: getPathFromAmdModule(require, 'vs/base/parts/sandbox/electron-browser/preload.js'), preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js', require).fsPath,
enableWebSQL: false, enableWebSQL: false,
enableRemoteModule: false, enableRemoteModule: false,
spellcheck: false, spellcheck: false,
@ -261,7 +261,7 @@ export class IssueMainService implements ICommonIssueService {
backgroundColor: data.styles.backgroundColor, backgroundColor: data.styles.backgroundColor,
title: localize('processExplorer', "Process Explorer"), title: localize('processExplorer', "Process Explorer"),
webPreferences: { webPreferences: {
preload: getPathFromAmdModule(require, 'vs/base/parts/sandbox/electron-browser/preload.js'), preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js', require).fsPath,
enableWebSQL: false, enableWebSQL: false,
enableRemoteModule: false, enableRemoteModule: false,
spellcheck: false, spellcheck: false,
@ -294,7 +294,7 @@ export class IssueMainService implements ICommonIssueService {
}; };
this._processExplorerWindow.loadURL( this._processExplorerWindow.loadURL(
toLauchUrl('vs/code/electron-sandbox/processExplorer/processExplorer.html', windowConfiguration)); toWindowUrl('vs/code/electron-sandbox/processExplorer/processExplorer.html', windowConfiguration));
this._processExplorerWindow.on('close', () => this._processExplorerWindow = null); this._processExplorerWindow.on('close', () => this._processExplorerWindow = null);
@ -435,11 +435,11 @@ export class IssueMainService implements ICommonIssueService {
} }
}; };
return toLauchUrl('vs/code/electron-sandbox/issue/issueReporter.html', windowConfiguration); return toWindowUrl('vs/code/electron-sandbox/issue/issueReporter.html', windowConfiguration);
} }
} }
function toLauchUrl<T>(pathToHtml: string, windowConfiguration: T): string { function toWindowUrl<T>(modulePathToHtml: string, windowConfiguration: T): string {
const environment = parseArgs(process.argv, OPTIONS); const environment = parseArgs(process.argv, OPTIONS);
const config = Object.assign(environment, windowConfiguration); const config = Object.assign(environment, windowConfiguration);
for (const keyValue of Object.keys(config)) { for (const keyValue of Object.keys(config)) {
@ -449,5 +449,8 @@ function toLauchUrl<T>(pathToHtml: string, windowConfiguration: T): string {
} }
} }
return `${require.toUrl(pathToHtml)}?config=${encodeURIComponent(JSON.stringify(config))}`; return FileAccess
.asBrowserUri(modulePathToHtml, require)
.with({ query: `config=${encodeURIComponent(JSON.stringify(config))}` })
.toString(true);
} }

View file

@ -5,9 +5,9 @@
import { IProductConfiguration } from 'vs/platform/product/common/productService'; import { IProductConfiguration } from 'vs/platform/product/common/productService';
import { isWeb } from 'vs/base/common/platform'; import { isWeb } from 'vs/base/common/platform';
import * as path from 'vs/base/common/path';
import { getPathFromAmdModule } from 'vs/base/common/amd';
import { env } from 'vs/base/common/process'; import { env } from 'vs/base/common/process';
import { FileAccess } from 'vs/base/common/network';
import { dirname, joinPath } from 'vs/base/common/resources';
let product: IProductConfiguration; let product: IProductConfiguration;
@ -43,10 +43,10 @@ if (isWeb || typeof require === 'undefined' || typeof require.__$__nodeRequire !
else { else {
// Obtain values from product.json and package.json // Obtain values from product.json and package.json
const rootPath = path.dirname(getPathFromAmdModule(require, '')); const rootPath = dirname(FileAccess.asFileUri('', require));
product = require.__$__nodeRequire(path.join(rootPath, 'product.json')); product = require.__$__nodeRequire(joinPath(rootPath, 'product.json').fsPath);
const pkg = require.__$__nodeRequire(path.join(rootPath, 'package.json')) as { version: string; }; const pkg = require.__$__nodeRequire(joinPath(rootPath, 'package.json').fsPath) as { version: string; };
// Running out of sources // Running out of sources
if (env['VSCODE_DEV']) { if (env['VSCODE_DEV']) {

View file

@ -54,7 +54,7 @@ import { PLAINTEXT_MODE_ID } from 'vs/editor/common/modes/modesRegistry';
import { IQuickAccessRegistry, Extensions as QuickAccessExtensions } from 'vs/platform/quickinput/common/quickAccess'; import { IQuickAccessRegistry, Extensions as QuickAccessExtensions } from 'vs/platform/quickinput/common/quickAccess';
import { ActiveGroupEditorsByMostRecentlyUsedQuickAccess, AllEditorsByAppearanceQuickAccess, AllEditorsByMostRecentlyUsedQuickAccess } from 'vs/workbench/browser/parts/editor/editorQuickAccess'; import { ActiveGroupEditorsByMostRecentlyUsedQuickAccess, AllEditorsByAppearanceQuickAccess, AllEditorsByMostRecentlyUsedQuickAccess } from 'vs/workbench/browser/parts/editor/editorQuickAccess';
import { IPathService } from 'vs/workbench/services/path/common/pathService'; import { IPathService } from 'vs/workbench/services/path/common/pathService';
import { getUriFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
// Register String Editor // Register String Editor
Registry.as<IEditorRegistry>(EditorExtensions.Editors).registerEditor( Registry.as<IEditorRegistry>(EditorExtensions.Editors).registerEditor(
@ -423,13 +423,13 @@ editorCommands.setup();
// Touch Bar // Touch Bar
if (isMacintosh) { if (isMacintosh) {
MenuRegistry.appendMenuItem(MenuId.TouchBarContext, { MenuRegistry.appendMenuItem(MenuId.TouchBarContext, {
command: { id: NavigateBackwardsAction.ID, title: NavigateBackwardsAction.LABEL, icon: { dark: getUriFromAmdModule(require, 'vs/workbench/browser/parts/editor/media/back-tb.png') } }, command: { id: NavigateBackwardsAction.ID, title: NavigateBackwardsAction.LABEL, icon: { dark: FileAccess.asFileUri('vs/workbench/browser/parts/editor/media/back-tb.png', require) } },
group: 'navigation', group: 'navigation',
order: 0 order: 0
}); });
MenuRegistry.appendMenuItem(MenuId.TouchBarContext, { MenuRegistry.appendMenuItem(MenuId.TouchBarContext, {
command: { id: NavigateForwardAction.ID, title: NavigateForwardAction.LABEL, icon: { dark: getUriFromAmdModule(require, 'vs/workbench/browser/parts/editor/media/forward-tb.png') } }, command: { id: NavigateForwardAction.ID, title: NavigateForwardAction.LABEL, icon: { dark: FileAccess.asFileUri('vs/workbench/browser/parts/editor/media/forward-tb.png', require) } },
group: 'navigation', group: 'navigation',
order: 1 order: 1
}); });

View file

@ -46,13 +46,12 @@ import { withNullAsUndefined, withUndefinedAsNull } from 'vs/base/common/types';
import { hash } from 'vs/base/common/hash'; import { hash } from 'vs/base/common/hash';
import { guessMimeTypes } from 'vs/base/common/mime'; import { guessMimeTypes } from 'vs/base/common/mime';
import { extname } from 'vs/base/common/resources'; import { extname } from 'vs/base/common/resources';
import { Schemas } from 'vs/base/common/network'; import { FileAccess, Schemas } from 'vs/base/common/network';
import { EditorActivation, EditorOpenContext } from 'vs/platform/editor/common/editor'; import { EditorActivation, EditorOpenContext } from 'vs/platform/editor/common/editor';
import { IDialogService, IFileDialogService, ConfirmResult } from 'vs/platform/dialogs/common/dialogs'; import { IDialogService, IFileDialogService, ConfirmResult } from 'vs/platform/dialogs/common/dialogs';
import { ILogService } from 'vs/platform/log/common/log'; import { ILogService } from 'vs/platform/log/common/log';
import { Codicon } from 'vs/base/common/codicons'; import { Codicon } from 'vs/base/common/codicons';
import { IFilesConfigurationService, AutoSaveMode } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { IFilesConfigurationService, AutoSaveMode } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService';
import { getPathFromAmdModule } from 'vs/base/common/amd';
export class EditorGroupView extends Themable implements IEditorGroupView { export class EditorGroupView extends Themable implements IEditorGroupView {
@ -1781,7 +1780,7 @@ registerThemingParticipant((theme, collector, environment) => {
const letterpress = `./media/letterpress${theme.type === 'dark' ? '-dark' : theme.type === 'hc' ? '-hc' : ''}.svg`; const letterpress = `./media/letterpress${theme.type === 'dark' ? '-dark' : theme.type === 'hc' ? '-hc' : ''}.svg`;
collector.addRule(` collector.addRule(`
.monaco-workbench .part.editor > .content .editor-group-container.empty .editor-group-letterpress { .monaco-workbench .part.editor > .content .editor-group-container.empty .editor-group-letterpress {
background-image: url('${getPathFromAmdModule(require, letterpress)}') background-image: url('${FileAccess.asBrowserUri(letterpress, require).fsPath}')
} }
`); `);

View file

@ -19,7 +19,7 @@ import { INotificationService } from 'vs/platform/notification/common/notificati
import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';
import { ILogService } from 'vs/platform/log/common/log'; import { ILogService } from 'vs/platform/log/common/log';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
import { IProductService } from 'vs/platform/product/common/productService'; import { IProductService } from 'vs/platform/product/common/productService';
function ignore<T>(code: string, value: T): (err: any) => Promise<T> { function ignore<T>(code: string, value: T): (err: any) => Promise<T> {
@ -29,7 +29,7 @@ function ignore<T>(code: string, value: T): (err: any) => Promise<T> {
let _source: string | null = null; let _source: string | null = null;
function getSource(): string { function getSource(): string {
if (!_source) { if (!_source) {
const root = getPathFromAmdModule(require, ''); const root = FileAccess.asFileUri('', require).fsPath;
_source = path.resolve(root, '..', 'bin', 'code'); _source = path.resolve(root, '..', 'bin', 'code');
} }
return _source; return _source;

View file

@ -52,7 +52,7 @@ import { DebugTitleContribution } from 'vs/workbench/contrib/debug/browser/debug
import { Codicon } from 'vs/base/common/codicons'; import { Codicon } from 'vs/base/common/codicons';
import { registerColors } from 'vs/workbench/contrib/debug/browser/debugColors'; import { registerColors } from 'vs/workbench/contrib/debug/browser/debugColors';
import { DebugEditorContribution } from 'vs/workbench/contrib/debug/browser/debugEditorContribution'; import { DebugEditorContribution } from 'vs/workbench/contrib/debug/browser/debugEditorContribution';
import { getUriFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
const registry = Registry.as<IWorkbenchActionRegistry>(WorkbenchActionRegistryExtensions.WorkbenchActions); const registry = Registry.as<IWorkbenchActionRegistry>(WorkbenchActionRegistryExtensions.WorkbenchActions);
const debugCategory = nls.localize('debugCategory', "Debug"); const debugCategory = nls.localize('debugCategory', "Debug");
@ -210,15 +210,15 @@ function registerCommandsAndActions(): void {
}); });
}; };
registerTouchBarEntry(StartAction.ID, StartAction.LABEL, 0, CONTEXT_IN_DEBUG_MODE.toNegated(), getUriFromAmdModule(require, 'vs/workbench/contrib/debug/browser/media/continue-tb.png')); registerTouchBarEntry(StartAction.ID, StartAction.LABEL, 0, CONTEXT_IN_DEBUG_MODE.toNegated(), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/continue-tb.png', require));
registerTouchBarEntry(RunAction.ID, RunAction.LABEL, 1, CONTEXT_IN_DEBUG_MODE.toNegated(), getUriFromAmdModule(require, 'vs/workbench/contrib/debug/browser/media/continue-without-debugging-tb.png')); registerTouchBarEntry(RunAction.ID, RunAction.LABEL, 1, CONTEXT_IN_DEBUG_MODE.toNegated(), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/continue-without-debugging-tb.png', require));
registerTouchBarEntry(CONTINUE_ID, CONTINUE_LABEL, 0, CONTEXT_DEBUG_STATE.isEqualTo('stopped'), getUriFromAmdModule(require, 'vs/workbench/contrib/debug/browser/media/continue-tb.png')); registerTouchBarEntry(CONTINUE_ID, CONTINUE_LABEL, 0, CONTEXT_DEBUG_STATE.isEqualTo('stopped'), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/continue-tb.png', require));
registerTouchBarEntry(PAUSE_ID, PAUSE_LABEL, 1, ContextKeyExpr.and(CONTEXT_IN_DEBUG_MODE, ContextKeyExpr.notEquals('debugState', 'stopped')), getUriFromAmdModule(require, 'vs/workbench/contrib/debug/browser/media/pause-tb.png')); registerTouchBarEntry(PAUSE_ID, PAUSE_LABEL, 1, ContextKeyExpr.and(CONTEXT_IN_DEBUG_MODE, ContextKeyExpr.notEquals('debugState', 'stopped')), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/pause-tb.png', require));
registerTouchBarEntry(STEP_OVER_ID, STEP_OVER_LABEL, 2, CONTEXT_IN_DEBUG_MODE, getUriFromAmdModule(require, 'vs/workbench/contrib/debug/browser/media/stepover-tb.png')); registerTouchBarEntry(STEP_OVER_ID, STEP_OVER_LABEL, 2, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/stepover-tb.png', require));
registerTouchBarEntry(STEP_INTO_ID, STEP_INTO_LABEL, 3, CONTEXT_IN_DEBUG_MODE, getUriFromAmdModule(require, 'vs/workbench/contrib/debug/browser/media/stepinto-tb.png')); registerTouchBarEntry(STEP_INTO_ID, STEP_INTO_LABEL, 3, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/stepinto-tb.png', require));
registerTouchBarEntry(STEP_OUT_ID, STEP_OUT_LABEL, 4, CONTEXT_IN_DEBUG_MODE, getUriFromAmdModule(require, 'vs/workbench/contrib/debug/browser/media/stepout-tb.png')); registerTouchBarEntry(STEP_OUT_ID, STEP_OUT_LABEL, 4, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/stepout-tb.png', require));
registerTouchBarEntry(RESTART_SESSION_ID, RESTART_LABEL, 5, CONTEXT_IN_DEBUG_MODE, getUriFromAmdModule(require, 'vs/workbench/contrib/debug/browser/media/restart-tb.png')); registerTouchBarEntry(RESTART_SESSION_ID, RESTART_LABEL, 5, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/restart-tb.png', require));
registerTouchBarEntry(STOP_ID, STOP_LABEL, 6, CONTEXT_IN_DEBUG_MODE, getUriFromAmdModule(require, 'vs/workbench/contrib/debug/browser/media/stop-tb.png')); registerTouchBarEntry(STOP_ID, STOP_LABEL, 6, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/stop-tb.png', require));
} }
} }

View file

@ -6,7 +6,7 @@
import { IDebugHelperService } from 'vs/workbench/contrib/debug/common/debug'; import { IDebugHelperService } from 'vs/workbench/contrib/debug/common/debug';
import { Client as TelemetryClient } from 'vs/base/parts/ipc/node/ipc.cp'; import { Client as TelemetryClient } from 'vs/base/parts/ipc/node/ipc.cp';
import { TelemetryAppenderClient } from 'vs/platform/telemetry/node/telemetryIpc'; import { TelemetryAppenderClient } from 'vs/platform/telemetry/node/telemetryIpc';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService'; import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
@ -24,7 +24,7 @@ export class NodeDebugHelperService implements IDebugHelperService {
createTelemetryService(configurationService: IConfigurationService, args: string[]): TelemetryService | undefined { createTelemetryService(configurationService: IConfigurationService, args: string[]): TelemetryService | undefined {
const client = new TelemetryClient( const client = new TelemetryClient(
getPathFromAmdModule(require, 'bootstrap-fork'), FileAccess.asFileUri('bootstrap-fork', require).fsPath,
{ {
serverName: 'Debug Telemetry', serverName: 'Debug Telemetry',
timeout: 1000 * 60 * 5, timeout: 1000 * 60 * 5,

View file

@ -40,6 +40,7 @@ import { asDomUri } from 'vs/base/browser/dom';
import { getIgnoredExtensions } from 'vs/platform/userDataSync/common/extensionsMerge'; import { getIgnoredExtensions } from 'vs/platform/userDataSync/common/extensionsMerge';
import { isWeb } from 'vs/base/common/platform'; import { isWeb } from 'vs/base/common/platform';
import { getExtensionKind } from 'vs/workbench/services/extensions/common/extensionsUtil'; import { getExtensionKind } from 'vs/workbench/services/extensions/common/extensionsUtil';
import { FileAccess } from 'vs/base/common/network';
interface IExtensionStateProvider<T> { interface IExtensionStateProvider<T> {
(extension: Extension): T; (extension: Extension): T;
@ -151,10 +152,10 @@ class Extension implements IExtension {
if (this.type === ExtensionType.System && this.local) { if (this.type === ExtensionType.System && this.local) {
if (this.local.manifest && this.local.manifest.contributes) { if (this.local.manifest && this.local.manifest.contributes) {
if (Array.isArray(this.local.manifest.contributes.themes) && this.local.manifest.contributes.themes.length) { if (Array.isArray(this.local.manifest.contributes.themes) && this.local.manifest.contributes.themes.length) {
return require.toUrl('./media/theme-icon.png'); return FileAccess.asBrowserUri('./media/theme-icon.png', require).toString(true);
} }
if (Array.isArray(this.local.manifest.contributes.grammars) && this.local.manifest.contributes.grammars.length) { if (Array.isArray(this.local.manifest.contributes.grammars) && this.local.manifest.contributes.grammars.length) {
return require.toUrl('./media/language-icon.svg'); return FileAccess.asBrowserUri('./media/language-icon.svg', require).toString(true);
} }
} }
} }

View file

@ -11,9 +11,9 @@ import * as pfs from 'vs/base/node/pfs';
import * as env from 'vs/base/common/platform'; import * as env from 'vs/base/common/platform';
import { IExternalTerminalService, IExternalTerminalConfiguration, IExternalTerminalSettings } from 'vs/workbench/contrib/externalTerminal/common/externalTerminal'; import { IExternalTerminalService, IExternalTerminalConfiguration, IExternalTerminalSettings } from 'vs/workbench/contrib/externalTerminal/common/externalTerminal';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { getPathFromAmdModule } from 'vs/base/common/amd';
import { optional } from 'vs/platform/instantiation/common/instantiation'; import { optional } from 'vs/platform/instantiation/common/instantiation';
import { DEFAULT_TERMINAL_OSX } from 'vs/workbench/contrib/externalTerminal/node/externalTerminal'; import { DEFAULT_TERMINAL_OSX } from 'vs/workbench/contrib/externalTerminal/node/externalTerminal';
import { FileAccess } from 'vs/base/common/network';
const TERMINAL_TITLE = nls.localize('console.title', "VS Code Console"); const TERMINAL_TITLE = nls.localize('console.title', "VS Code Console");
@ -144,7 +144,7 @@ export class MacExternalTerminalService implements IExternalTerminalService {
// and then launches the program inside that window. // and then launches the program inside that window.
const script = terminalApp === DEFAULT_TERMINAL_OSX ? 'TerminalHelper' : 'iTermHelper'; const script = terminalApp === DEFAULT_TERMINAL_OSX ? 'TerminalHelper' : 'iTermHelper';
const scriptpath = getPathFromAmdModule(require, `vs/workbench/contrib/externalTerminal/node/${script}.scpt`); const scriptpath = FileAccess.asFileUri(`vs/workbench/contrib/externalTerminal/node/${script}.scpt`, require).fsPath;
const osaArgs = [ const osaArgs = [
scriptpath, scriptpath,

View file

@ -9,7 +9,7 @@ import { ThrottledDelayer } from 'vs/base/common/async';
import { Emitter, Event } from 'vs/base/common/event'; import { Emitter, Event } from 'vs/base/common/event';
import { once } from 'vs/base/common/functional'; import { once } from 'vs/base/common/functional';
import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
import { Schemas } from 'vs/base/common/network'; import { FileAccess, Schemas } from 'vs/base/common/network';
import { isMacintosh } from 'vs/base/common/platform'; import { isMacintosh } from 'vs/base/common/platform';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { createChannelSender } from 'vs/base/parts/ipc/common/ipc'; import { createChannelSender } from 'vs/base/parts/ipc/common/ipc';
@ -206,7 +206,10 @@ export class ElectronWebviewBasedWebview extends BaseWebview<WebviewTag> impleme
this.styledFindWidget(); this.styledFindWidget();
} }
this.element!.preload = require.toUrl('./pre/electron-index.js'); // We must ensure to put a `file:` URI as the preload attribute
// and not the `vscode-file` URI because preload scripts are loaded
// via node.js from the main side and only allow `file:` protocol
this.element!.preload = FileAccess.asFileUri('./pre/electron-index.js', require).toString(true);
this.element!.src = `${Schemas.vscodeWebview}://${this.id}/electron-browser/index.html?platform=electron`; this.element!.src = `${Schemas.vscodeWebview}://${this.id}/electron-browser/index.html?platform=electron`;
} }

View file

@ -19,7 +19,7 @@ import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configur
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { Action, WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification } from 'vs/base/common/actions'; import { Action, WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification } from 'vs/base/common/actions';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { Schemas } from 'vs/base/common/network'; import { FileAccess, Schemas } from 'vs/base/common/network';
import { IBackupFileService } from 'vs/workbench/services/backup/common/backup'; import { IBackupFileService } from 'vs/workbench/services/backup/common/backup';
import { getInstalledExtensions, IExtensionStatus, onExtensionChanged, isKeymapExtension } from 'vs/workbench/contrib/extensions/common/extensionsUtils'; import { getInstalledExtensions, IExtensionStatus, onExtensionChanged, isKeymapExtension } from 'vs/workbench/contrib/extensions/common/extensionsUtils';
import { IExtensionManagementService, IExtensionGalleryService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; import { IExtensionManagementService, IExtensionGalleryService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
@ -47,7 +47,6 @@ import { IProductService } from 'vs/platform/product/common/productService';
import { IEditorOptions } from 'vs/platform/editor/common/editor'; import { IEditorOptions } from 'vs/platform/editor/common/editor';
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { getUriFromAmdModule } from 'vs/base/common/amd';
const configurationKey = 'workbench.startupEditor'; const configurationKey = 'workbench.startupEditor';
const oldConfigurationKey = 'workbench.welcome.enabled'; const oldConfigurationKey = 'workbench.welcome.enabled';
@ -300,7 +299,7 @@ class WelcomePage extends Disposable {
const recentlyOpened = this.workspacesService.getRecentlyOpened(); const recentlyOpened = this.workspacesService.getRecentlyOpened();
const installedExtensions = this.instantiationService.invokeFunction(getInstalledExtensions); const installedExtensions = this.instantiationService.invokeFunction(getInstalledExtensions);
const resource = getUriFromAmdModule(require, './vs_code_welcome_page') const resource = FileAccess.asBrowserUri('./vs_code_welcome_page', require)
.with({ .with({
scheme: Schemas.walkThrough, scheme: Schemas.walkThrough,
query: JSON.stringify({ moduleId: 'vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page' }) query: JSON.stringify({ moduleId: 'vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page' })

View file

@ -8,16 +8,15 @@ import { localize } from 'vs/nls';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { Action } from 'vs/base/common/actions'; import { Action } from 'vs/base/common/actions';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { getUriFromAmdModule } from 'vs/base/common/amd';
import { WalkThroughInput, WalkThroughInputOptions } from 'vs/workbench/contrib/welcome/walkThrough/browser/walkThroughInput'; import { WalkThroughInput, WalkThroughInputOptions } from 'vs/workbench/contrib/welcome/walkThrough/browser/walkThroughInput';
import { Schemas } from 'vs/base/common/network'; import { FileAccess, Schemas } from 'vs/base/common/network';
import { IEditorInputFactory, EditorInput } from 'vs/workbench/common/editor'; import { IEditorInputFactory, EditorInput } from 'vs/workbench/common/editor';
const typeId = 'workbench.editors.walkThroughInput'; const typeId = 'workbench.editors.walkThroughInput';
const inputOptions: WalkThroughInputOptions = { const inputOptions: WalkThroughInputOptions = {
typeId, typeId,
name: localize('editorWalkThrough.title', "Interactive Playground"), name: localize('editorWalkThrough.title', "Interactive Playground"),
resource: getUriFromAmdModule(require, './vs_code_editor_walkthrough.md') resource: FileAccess.asBrowserUri('./vs_code_editor_walkthrough.md', require)
.with({ .with({
scheme: Schemas.walkThrough, scheme: Schemas.walkThrough,
query: JSON.stringify({ moduleId: 'vs/workbench/contrib/welcome/walkThrough/browser/editor/vs_code_editor_walkthrough' }) query: JSON.stringify({ moduleId: 'vs/workbench/contrib/welcome/walkThrough/browser/editor/vs_code_editor_walkthrough' })

View file

@ -29,6 +29,7 @@ import { generateUuid } from 'vs/base/common/uuid';
import { canceled, onUnexpectedError } from 'vs/base/common/errors'; import { canceled, onUnexpectedError } from 'vs/base/common/errors';
import { WEB_WORKER_IFRAME } from 'vs/workbench/services/extensions/common/webWorkerIframe'; import { WEB_WORKER_IFRAME } from 'vs/workbench/services/extensions/common/webWorkerIframe';
import { Barrier } from 'vs/base/common/async'; import { Barrier } from 'vs/base/common/async';
import { FileAccess } from 'vs/base/common/network';
export interface IWebWorkerExtensionHostInitData { export interface IWebWorkerExtensionHostInitData {
readonly autoStart: boolean; readonly autoStart: boolean;
@ -92,7 +93,7 @@ export class WebWorkerExtensionHost extends Disposable implements IExtensionHost
iframe.style.display = 'none'; iframe.style.display = 'none';
const vscodeWebWorkerExtHostId = generateUuid(); const vscodeWebWorkerExtHostId = generateUuid();
const workerUrl = require.toUrl('../worker/extensionHostWorkerMain.js'); const workerUrl = FileAccess.asBrowserUri('../worker/extensionHostWorkerMain.js', require).toString(true);
const workerSrc = getWorkerBootstrapUrl(workerUrl, 'WorkerExtensionHost', true); const workerSrc = getWorkerBootstrapUrl(workerUrl, 'WorkerExtensionHost', true);
const escapeAttribute = (value: string): string => { const escapeAttribute = (value: string): string => {
return value.replace(/"/g, '&quot;'); return value.replace(/"/g, '&quot;');
@ -173,7 +174,7 @@ export class WebWorkerExtensionHost extends Disposable implements IExtensionHost
private async _startOutsideIframe(): Promise<IMessagePassingProtocol> { private async _startOutsideIframe(): Promise<IMessagePassingProtocol> {
const emitter = new Emitter<VSBuffer>(); const emitter = new Emitter<VSBuffer>();
const url = getWorkerBootstrapUrl(require.toUrl('../worker/extensionHostWorkerMain.js'), 'WorkerExtensionHost'); const url = getWorkerBootstrapUrl(FileAccess.asBrowserUri('../worker/extensionHostWorkerMain.js', require).toString(true), 'WorkerExtensionHost');
const worker = new Worker(url, { name: 'WorkerExtensionHost' }); const worker = new Worker(url, { name: 'WorkerExtensionHost' });
const barrier = new Barrier(); const barrier = new Barrier();

View file

@ -5,9 +5,8 @@
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import * as path from 'vs/base/common/path'; import * as path from 'vs/base/common/path';
import { getPathFromAmdModule } from 'vs/base/common/amd';
import * as errors from 'vs/base/common/errors'; import * as errors from 'vs/base/common/errors';
import { Schemas } from 'vs/base/common/network'; import { FileAccess, Schemas } from 'vs/base/common/network';
import * as objects from 'vs/base/common/objects'; import * as objects from 'vs/base/common/objects';
import * as platform from 'vs/base/common/platform'; import * as platform from 'vs/base/common/platform';
import { joinPath, originalFSPath } from 'vs/base/common/resources'; import { joinPath, originalFSPath } from 'vs/base/common/resources';
@ -30,7 +29,7 @@ interface IExtensionCacheData {
let _SystemExtensionsRoot: string | null = null; let _SystemExtensionsRoot: string | null = null;
function getSystemExtensionsRoot(): string { function getSystemExtensionsRoot(): string {
if (!_SystemExtensionsRoot) { if (!_SystemExtensionsRoot) {
_SystemExtensionsRoot = path.normalize(path.join(getPathFromAmdModule(require, ''), '..', 'extensions')); _SystemExtensionsRoot = path.normalize(path.join(FileAccess.asFileUri('', require).fsPath, '..', 'extensions'));
} }
return _SystemExtensionsRoot; return _SystemExtensionsRoot;
} }
@ -38,7 +37,7 @@ function getSystemExtensionsRoot(): string {
let _ExtraDevSystemExtensionsRoot: string | null = null; let _ExtraDevSystemExtensionsRoot: string | null = null;
function getExtraDevSystemExtensionsRoot(): string { function getExtraDevSystemExtensionsRoot(): string {
if (!_ExtraDevSystemExtensionsRoot) { if (!_ExtraDevSystemExtensionsRoot) {
_ExtraDevSystemExtensionsRoot = path.normalize(path.join(getPathFromAmdModule(require, ''), '..', '.build', 'builtInExtensions')); _ExtraDevSystemExtensionsRoot = path.normalize(path.join(FileAccess.asFileUri('', require).fsPath, '..', '.build', 'builtInExtensions'));
} }
return _ExtraDevSystemExtensionsRoot; return _ExtraDevSystemExtensionsRoot;
} }

View file

@ -7,7 +7,7 @@ import * as nls from 'vs/nls';
import { ChildProcess, fork } from 'child_process'; import { ChildProcess, fork } from 'child_process';
import { Server, Socket, createServer } from 'net'; import { Server, Socket, createServer } from 'net';
import { CrashReporterStartOptions } from 'vs/base/parts/sandbox/electron-sandbox/electronTypes'; import { CrashReporterStartOptions } from 'vs/base/parts/sandbox/electron-sandbox/electronTypes';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
import { timeout } from 'vs/base/common/async'; import { timeout } from 'vs/base/common/async';
import { toErrorMessage } from 'vs/base/common/errorMessage'; import { toErrorMessage } from 'vs/base/common/errorMessage';
import { Emitter, Event } from 'vs/base/common/event'; import { Emitter, Event } from 'vs/base/common/event';
@ -215,7 +215,7 @@ export class LocalProcessExtensionHost implements IExtensionHost {
} }
// Run Extension Host as fork of current process // Run Extension Host as fork of current process
this._extensionHostProcess = fork(getPathFromAmdModule(require, 'bootstrap-fork'), ['--type=extensionHost'], opts); this._extensionHostProcess = fork(FileAccess.asFileUri('bootstrap-fork', require).fsPath, ['--type=extensionHost'], opts);
// Catch all output coming from the extension host process // Catch all output coming from the extension host process
type Output = { data: string, format: string[] }; type Output = { data: string, format: string[] };

View file

@ -15,7 +15,7 @@ import { INotificationService } from 'vs/platform/notification/common/notificati
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { IOpenerService } from 'vs/platform/opener/common/opener'; import { IOpenerService } from 'vs/platform/opener/common/opener';
import { getUriFromAmdModule } from 'vs/base/common/amd'; import { FileAccess } from 'vs/base/common/network';
interface IStorageData { interface IStorageData {
dontShowPrompt: boolean; dontShowPrompt: boolean;
@ -142,7 +142,7 @@ export class IntegrityServiceImpl implements IIntegrityService {
} }
private _resolve(filename: string, expected: string): Promise<ChecksumPair> { private _resolve(filename: string, expected: string): Promise<ChecksumPair> {
const fileUri = getUriFromAmdModule(require, filename); const fileUri = FileAccess.asFileUri(filename, require);
return new Promise<ChecksumPair>((resolve, reject) => { return new Promise<ChecksumPair>((resolve, reject) => {
fs.readFile(fileUri.fsPath, (err, buff) => { fs.readFile(fileUri.fsPath, (err, buff) => {
if (err) { if (err) {

View file

@ -3,7 +3,6 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { getPathFromAmdModule } from 'vs/base/common/amd';
import { CancellationToken } from 'vs/base/common/cancellation'; import { CancellationToken } from 'vs/base/common/cancellation';
import { canceled } from 'vs/base/common/errors'; import { canceled } from 'vs/base/common/errors';
import { Event } from 'vs/base/common/event'; import { Event } from 'vs/base/common/event';
@ -26,6 +25,7 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { FileAccess } from 'vs/base/common/network';
export class LocalSearchService extends SearchService { export class LocalSearchService extends SearchService {
constructor( constructor(
@ -82,10 +82,7 @@ export class DiskSearch implements ISearchResultProvider {
} }
} }
const client = new Client( const client = new Client(FileAccess.asFileUri('bootstrap-fork', require).fsPath, opts);
getPathFromAmdModule(require, 'bootstrap-fork'),
opts);
const channel = getNextTickChannel(client.getChannel('search')); const channel = getNextTickChannel(client.getChannel('search'));
this.raw = new SearchChannelClient(channel); this.raw = new SearchChannelClient(channel);
} }

View file

@ -14,6 +14,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
import { IStorageService } from 'vs/platform/storage/common/storage'; import { IStorageService } from 'vs/platform/storage/common/storage';
import { IExtensionResourceLoaderService } from 'vs/workbench/services/extensionResourceLoader/common/extensionResourceLoader'; import { IExtensionResourceLoaderService } from 'vs/workbench/services/extensionResourceLoader/common/extensionResourceLoader';
import { IProgressService } from 'vs/platform/progress/common/progress'; import { IProgressService } from 'vs/platform/progress/common/progress';
import { FileAccess } from 'vs/base/common/network';
export class TextMateService extends AbstractTextMateService { export class TextMateService extends AbstractTextMateService {
@ -31,8 +32,7 @@ export class TextMateService extends AbstractTextMateService {
} }
protected async _loadVSCodeOnigurumWASM(): Promise<Response | ArrayBuffer> { protected async _loadVSCodeOnigurumWASM(): Promise<Response | ArrayBuffer> {
const wasmPath = require.toUrl('vscode-oniguruma/../onig.wasm'); const response = await fetch(FileAccess.asBrowserUri('vscode-oniguruma/../onig.wasm', require).toString(true));
const response = await fetch(wasmPath);
// Using the response directly only works if the server sets the MIME type 'application/wasm'. // Using the response directly only works if the server sets the MIME type 'application/wasm'.
// Otherwise, a TypeError is thrown when using the streaming compiler. // Otherwise, a TypeError is thrown when using the streaming compiler.
// We therefore use the non-streaming compiler :(. // We therefore use the non-streaming compiler :(.

View file

@ -26,6 +26,7 @@ import { IStorageService } from 'vs/platform/storage/common/storage';
import { IExtensionResourceLoaderService } from 'vs/workbench/services/extensionResourceLoader/common/extensionResourceLoader'; import { IExtensionResourceLoaderService } from 'vs/workbench/services/extensionResourceLoader/common/extensionResourceLoader';
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { IProgressService } from 'vs/platform/progress/common/progress'; import { IProgressService } from 'vs/platform/progress/common/progress';
import { FileAccess } from 'vs/base/common/network';
const RUN_TEXTMATE_IN_WORKER = false; const RUN_TEXTMATE_IN_WORKER = false;
@ -182,12 +183,9 @@ export class TextMateService extends AbstractTextMateService {
} }
protected async _loadVSCodeOnigurumWASM(): Promise<Response | ArrayBuffer> { protected async _loadVSCodeOnigurumWASM(): Promise<Response | ArrayBuffer> {
const wasmPath = ( const response = await fetch(this._environmentService.isBuilt
this._environmentService.isBuilt ? FileAccess.asBrowserUri('../../../../../../node_modules.asar.unpacked/vscode-oniguruma/release/onig.wasm', require).toString(true)
? require.toUrl('../../../../../../node_modules.asar.unpacked/vscode-oniguruma/release/onig.wasm') : FileAccess.asBrowserUri('../../../../../../node_modules/vscode-oniguruma/release/onig.wasm', require).toString(true));
: require.toUrl('../../../../../../node_modules/vscode-oniguruma/release/onig.wasm')
);
const response = await fetch(wasmPath);
return response; return response;
} }

View file

@ -14,6 +14,7 @@ import { TokenizationStateStore } from 'vs/editor/common/model/textModelTokens';
import type { IGrammar, StackElement, IRawTheme, IOnigLib } from 'vscode-textmate'; import type { IGrammar, StackElement, IRawTheme, IOnigLib } from 'vscode-textmate';
import { MultilineTokensBuilder, countEOL } from 'vs/editor/common/model/tokensStore'; import { MultilineTokensBuilder, countEOL } from 'vs/editor/common/model/tokensStore';
import { LineTokens } from 'vs/editor/common/core/lineTokens'; import { LineTokens } from 'vs/editor/common/core/lineTokens';
import { FileAccess } from 'vs/base/common/network';
export interface IValidGrammarDefinitionDTO { export interface IValidGrammarDefinitionDTO {
location: UriComponents; location: UriComponents;
@ -146,8 +147,7 @@ export class TextMateWorker {
}); });
const vscodeTextmate = await import('vscode-textmate'); const vscodeTextmate = await import('vscode-textmate');
const vscodeOniguruma = await import('vscode-oniguruma'); const vscodeOniguruma = await import('vscode-oniguruma');
const wasmPath = require.toUrl('vscode-oniguruma/../onig.wasm'); const response = await fetch(FileAccess.asBrowserUri('vscode-oniguruma/../onig.wasm', require).toString(true));
const response = await fetch(wasmPath);
// Using the response directly only works if the server sets the MIME type 'application/wasm'. // Using the response directly only works if the server sets the MIME type 'application/wasm'.
// Otherwise, a TypeError is thrown when using the streaming compiler. // Otherwise, a TypeError is thrown when using the streaming compiler.
// We therefore use the non-streaming compiler :(. // We therefore use the non-streaming compiler :(.

View file

@ -32,7 +32,7 @@ function initLoader(opts) {
nodeRequire: require, nodeRequire: require,
nodeMain: __filename, nodeMain: __filename,
catchError: true, catchError: true,
baseUrl: bootstrap.fileUriFromPath(path.join(__dirname, '../../../src'), process.platform === 'win32'), baseUrl: bootstrap.fileUriFromPath(path.join(__dirname, '../../../src'), { isWindows: process.platform === 'win32' }),
paths: { paths: {
'vs': `../${outdir}/vs`, 'vs': `../${outdir}/vs`,
'lib': `../${outdir}/lib`, 'lib': `../${outdir}/lib`,