diff options
author | Alexandru Dima <alexdima@microsoft.com> | 2022-11-10 23:52:42 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-10 23:52:42 +0300 |
commit | 96bf637c101b8832e44a97a27a26305d8c2cf22e (patch) | |
tree | 61e0ab105bf8c7fbb314b7303b5d7cb37cfc5e5c | |
parent | 8fd500ed74c0fcec7f416a3614516bfce0fcb3ab (diff) | |
parent | f46738bc477ad71db379c8efa09c8ea22110cefc (diff) |
Merge pull request #165831 from microsoft/alexd/inclined-panda
Always use app root for resource URIs (avoid usage of `require`)
53 files changed, 176 insertions, 137 deletions
diff --git a/src/typings/require.d.ts b/src/typings/require.d.ts index 5b0fcf921f7..671692c88da 100644 --- a/src/typings/require.d.ts +++ b/src/typings/require.d.ts @@ -49,8 +49,8 @@ interface NodeRequire { config(data: any): any; onError: Function; __$__nodeRequire<T>(moduleName: string): T; - getStats(): ReadonlyArray<LoaderEvent>; - hasDependencyCycle(): boolean; + getStats?(): ReadonlyArray<LoaderEvent>; + hasDependencyCycle?(): boolean; define(amdModuleId: string, dependencies: string[], callback: (...args: any[]) => any): any; } diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 1abef9c8d49..6f690ebf36f 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -1199,7 +1199,7 @@ export function asCSSUrl(uri: URI | null | undefined): string { if (!uri) { return `url('')`; } - return `url('${FileAccess.asBrowserUri(uri).toString(true).replace(/'/g, '%27')}')`; + return `url('${FileAccess.uriToBrowserUri(uri).toString(true).replace(/'/g, '%27')}')`; } export function asCSSPropertyValue(value: string) { diff --git a/src/vs/base/browser/markdownRenderer.ts b/src/vs/base/browser/markdownRenderer.ts index e4b9dcf4ecd..aadf5d2c87a 100644 --- a/src/vs/base/browser/markdownRenderer.ts +++ b/src/vs/base/browser/markdownRenderer.ts @@ -126,7 +126,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: MarkdownRende // and because of that special rewriting needs to be done // so that the URI uses a protocol that's understood by // browsers (like http or https) - return FileAccess.asBrowserUri(uri).toString(true); + return FileAccess.uriToBrowserUri(uri).toString(true); } if (!uri) { return href; diff --git a/src/vs/base/common/amd.ts b/src/vs/base/common/amd.ts index 7f788bf4629..fdbdb2e1030 100644 --- a/src/vs/base/common/amd.ts +++ b/src/vs/base/common/amd.ts @@ -40,7 +40,10 @@ export abstract class LoaderStats { map.set(stat.detail, duration + stat.timestamp); } - const stats = require.getStats().slice(0).sort((a, b) => a.timestamp - b.timestamp); + let stats: readonly LoaderEvent[] = []; + if (typeof require.getStats === 'function') { + stats = require.getStats().slice(0).sort((a, b) => a.timestamp - b.timestamp); + } for (const stat of stats) { switch (stat.type) { diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts index 648a6391131..3c706e3d277 100644 --- a/src/vs/base/common/network.ts +++ b/src/vs/base/common/network.ts @@ -170,6 +170,22 @@ class RemoteAuthoritiesImpl { export const RemoteAuthorities = new RemoteAuthoritiesImpl(); +/** + * A string pointing to a path inside the app. It should not begin with ./ or ../ + */ +export type AppResourcePath = ( + `a${string}` | `b${string}` | `c${string}` | `d${string}` | `e${string}` | `f${string}` + | `g${string}` | `h${string}` | `i${string}` | `j${string}` | `k${string}` | `l${string}` + | `m${string}` | `n${string}` | `o${string}` | `p${string}` | `q${string}` | `r${string}` + | `s${string}` | `t${string}` | `u${string}` | `v${string}` | `w${string}` | `x${string}` + | `y${string}` | `z${string}` +); + +export const builtinExtensionsPath: AppResourcePath = 'vs/../../extensions'; +export const nodeModulesPath: AppResourcePath = 'vs/../../node_modules'; +export const nodeModulesAsarPath: AppResourcePath = 'vs/../../node_modules.asar'; +export const nodeModulesAsarUnpackedPath: AppResourcePath = 'vs/../../node_modules.asar.unpacked'; + class FileAccessImpl { private static readonly FALLBACK_AUTHORITY = 'vscode-app'; @@ -180,11 +196,18 @@ class FileAccessImpl { * * **Note:** use `dom.ts#asCSSUrl` whenever the URL is to be used in CSS context. */ - 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); + asBrowserUri(resourcePath: AppResourcePath | ''): URI { + const uri = this.toUri(resourcePath, require); + return this.uriToBrowserUri(uri); + } + /** + * Returns a URI to use in contexts where the browser is responsible + * for loading (e.g. fetch()) or when used within the DOM. + * + * **Note:** use `dom.ts#asCSSUrl` whenever the URL is to be used in CSS context. + */ + uriToBrowserUri(uri: URI): URI { // Handle remote URIs via `RemoteAuthorities` if (uri.scheme === Schemas.vscodeRemote) { return RemoteAuthorities.rewrite(uri); @@ -220,11 +243,16 @@ class FileAccessImpl { * 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); + asFileUri(resourcePath: AppResourcePath | ''): URI { + const uri = this.toUri(resourcePath, require); + return this.uriToFileUri(uri); + } + /** + * Returns the `file` URI to use in contexts where node.js + * is responsible for loading. + */ + uriToFileUri(uri: URI): URI { // Only convert the URI if it is `vscode-file:` scheme if (uri.scheme === Schemas.vscodeFileResource) { return uri.with({ @@ -241,12 +269,12 @@ class FileAccessImpl { return uri; } - private toUri(uriOrModule: URI | string, moduleIdToUrl?: { toUrl(moduleId: string): string }): URI { + private toUri(uriOrModule: URI | string, moduleIdToUrl: { toUrl(moduleId: string): string }): URI { if (URI.isUri(uriOrModule)) { return uriOrModule; } - return URI.parse(moduleIdToUrl!.toUrl(uriOrModule)); + return URI.parse(moduleIdToUrl.toUrl(uriOrModule)); } } diff --git a/src/vs/base/node/ps.ts b/src/vs/base/node/ps.ts index 8498145bed2..0bcbce4a8d4 100644 --- a/src/vs/base/node/ps.ts +++ b/src/vs/base/node/ps.ts @@ -198,7 +198,7 @@ export function listProcesses(rootPid: number): Promise<ProcessItem> { // The cpu usage value reported on Linux is the average over the process lifetime, // recalculate the usage over a one second interval // JSON.stringify is needed to escape spaces, https://github.com/nodejs/node/issues/6803 - let cmd = JSON.stringify(FileAccess.asFileUri('vs/base/node/cpuUsage.sh', require).fsPath); + let cmd = JSON.stringify(FileAccess.asFileUri('vs/base/node/cpuUsage.sh').fsPath); cmd += ' ' + pids.join(' '); exec(cmd, {}, (err, stdout, stderr) => { @@ -226,7 +226,7 @@ export function listProcesses(rootPid: number): Promise<ProcessItem> { if (process.platform !== 'linux') { reject(err || new Error(stderr.toString())); } else { - const cmd = JSON.stringify(FileAccess.asFileUri('vs/base/node/ps.sh', require).fsPath); + const cmd = JSON.stringify(FileAccess.asFileUri('vs/base/node/ps.sh').fsPath); exec(cmd, {}, (err, stdout, stderr) => { if (err || stderr) { reject(err || new Error(stderr.toString())); diff --git a/src/vs/base/test/common/network.test.ts b/src/vs/base/test/common/network.test.ts index 8916eb1c868..9c6938967d9 100644 --- a/src/vs/base/test/common/network.test.ts +++ b/src/vs/base/test/common/network.test.ts @@ -15,55 +15,55 @@ suite('network', () => { // asCodeUri() & asFileUri(): simple, without authority let originalFileUri = URI.file('network.test.ts'); - let browserUri = FileAccess.asBrowserUri(originalFileUri); + let browserUri = FileAccess.uriToBrowserUri(originalFileUri); assert.ok(browserUri.authority.length > 0); - let fileUri = FileAccess.asFileUri(browserUri); + let fileUri = FileAccess.uriToFileUri(browserUri); assert.strictEqual(fileUri.authority.length, 0); assert(isEqual(originalFileUri, fileUri)); // asCodeUri() & asFileUri(): with authority originalFileUri = URI.file('network.test.ts').with({ authority: 'test-authority' }); - browserUri = FileAccess.asBrowserUri(originalFileUri); + browserUri = FileAccess.uriToBrowserUri(originalFileUri); assert.strictEqual(browserUri.authority, originalFileUri.authority); - fileUri = FileAccess.asFileUri(browserUri); + fileUri = FileAccess.uriToFileUri(browserUri); assert(isEqual(originalFileUri, fileUri)); }); (isWeb ? test.skip : test)('FileAccess: moduleId (native)', () => { - const browserUri = FileAccess.asBrowserUri('vs/base/test/node/network.test', require); + const browserUri = FileAccess.asBrowserUri('vs/base/test/node/network.test'); assert.strictEqual(browserUri.scheme, Schemas.vscodeFileResource); - const fileUri = FileAccess.asFileUri('vs/base/test/node/network.test', require); + const fileUri = FileAccess.asFileUri('vs/base/test/node/network.test'); assert.strictEqual(fileUri.scheme, Schemas.file); }); (isWeb ? test.skip : test)('FileAccess: query and fragment is dropped (native)', () => { const originalFileUri = URI.file('network.test.ts').with({ query: 'foo=bar', fragment: 'something' }); - const browserUri = FileAccess.asBrowserUri(originalFileUri); + const browserUri = FileAccess.uriToBrowserUri(originalFileUri); assert.strictEqual(browserUri.query, ''); assert.strictEqual(browserUri.fragment, ''); }); (isWeb ? test.skip : test)('FileAccess: query and fragment is kept if URI is already of same scheme (native)', () => { const originalFileUri = URI.file('network.test.ts').with({ query: 'foo=bar', fragment: 'something' }); - const browserUri = FileAccess.asBrowserUri(originalFileUri.with({ scheme: Schemas.vscodeFileResource })); + const browserUri = FileAccess.uriToBrowserUri(originalFileUri.with({ scheme: Schemas.vscodeFileResource })); assert.strictEqual(browserUri.query, 'foo=bar'); assert.strictEqual(browserUri.fragment, 'something'); - const fileUri = FileAccess.asFileUri(originalFileUri); + const fileUri = FileAccess.uriToFileUri(originalFileUri); assert.strictEqual(fileUri.query, 'foo=bar'); assert.strictEqual(fileUri.fragment, 'something'); }); (isWeb ? test.skip : test)('FileAccess: web', () => { const originalHttpsUri = URI.file('network.test.ts').with({ scheme: 'https' }); - const browserUri = FileAccess.asBrowserUri(originalHttpsUri); + const browserUri = FileAccess.uriToBrowserUri(originalHttpsUri); assert.strictEqual(originalHttpsUri.toString(), browserUri.toString()); }); test('FileAccess: remote URIs', () => { const originalRemoteUri = URI.file('network.test.ts').with({ scheme: Schemas.vscodeRemote }); - const browserUri = FileAccess.asBrowserUri(originalRemoteUri); + const browserUri = FileAccess.uriToBrowserUri(originalRemoteUri); assert.notStrictEqual(originalRemoteUri.scheme, browserUri.scheme); }); }); diff --git a/src/vs/code/node/cli.ts b/src/vs/code/node/cli.ts index bd7acdf794c..bcefa8782e3 100644 --- a/src/vs/code/node/cli.ts +++ b/src/vs/code/node/cli.ts @@ -496,7 +496,7 @@ export async function main(argv: string[]): Promise<any> { } function getAppRoot() { - return dirname(FileAccess.asFileUri('', require).fsPath); + return dirname(FileAccess.asFileUri('').fsPath); } function eventuallyExit(code: number): void { diff --git a/src/vs/platform/environment/common/environmentService.ts b/src/vs/platform/environment/common/environmentService.ts index cfbba68219b..1745ed81462 100644 --- a/src/vs/platform/environment/common/environmentService.ts +++ b/src/vs/platform/environment/common/environmentService.ts @@ -44,7 +44,7 @@ export abstract class AbstractNativeEnvironmentService implements INativeEnviron declare readonly _serviceBrand: undefined; @memoize - get appRoot(): string { return dirname(FileAccess.asFileUri('', require).fsPath); } + get appRoot(): string { return dirname(FileAccess.asFileUri('').fsPath); } @memoize get userHome(): URI { return URI.file(this.paths.homeDir); } @@ -129,7 +129,7 @@ export abstract class AbstractNativeEnvironmentService implements INativeEnviron return resolve(cliBuiltinExtensionsDir); } - return normalize(join(FileAccess.asFileUri('', require).fsPath, '..', 'extensions')); + return normalize(join(FileAccess.asFileUri('').fsPath, '..', 'extensions')); } get extensionsDownloadLocation(): URI { diff --git a/src/vs/platform/extensionManagement/common/extensionsScannerService.ts b/src/vs/platform/extensionManagement/common/extensionsScannerService.ts index 2a763089d41..13dfbaa1a07 100644 --- a/src/vs/platform/extensionManagement/common/extensionsScannerService.ts +++ b/src/vs/platform/extensionManagement/common/extensionsScannerService.ts @@ -355,7 +355,7 @@ export abstract class AbstractExtensionsScannerService extends Disposable implem this.logService.trace('Started scanning dev system extensions'); const builtinExtensionControl = checkControlFile ? await this.getBuiltInExtensionControl() : {}; const devSystemExtensionsLocations: URI[] = []; - const devSystemExtensionsLocation = URI.file(path.normalize(path.join(FileAccess.asFileUri('', require).fsPath, '..', '.build', 'builtInExtensions'))); + const devSystemExtensionsLocation = URI.file(path.normalize(path.join(FileAccess.asFileUri('').fsPath, '..', '.build', 'builtInExtensions'))); for (const extension of devSystemExtensionsList) { const controlState = builtinExtensionControl[extension.name] || 'marketplace'; switch (controlState) { diff --git a/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts b/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts index e2bc58ae980..c766318f30f 100644 --- a/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts +++ b/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts @@ -30,7 +30,7 @@ class ExtensionResourceLoaderService extends AbstractExtensionResourceLoaderServ } async readExtensionResource(uri: URI): Promise<string> { - uri = FileAccess.asBrowserUri(uri); + uri = FileAccess.uriToBrowserUri(uri); if (uri.scheme !== Schemas.http && uri.scheme !== Schemas.https) { const result = await this._fileService.readFile(uri); diff --git a/src/vs/platform/extensions/electron-main/extensionHostStarter.ts b/src/vs/platform/extensions/electron-main/extensionHostStarter.ts index 8a2c0a87780..da9e7b5a70d 100644 --- a/src/vs/platform/extensions/electron-main/extensionHostStarter.ts +++ b/src/vs/platform/extensions/electron-main/extensionHostStarter.ts @@ -309,7 +309,7 @@ class ExtensionHostProcess extends Disposable { } const sw = StopWatch.create(false); this._process = fork( - FileAccess.asFileUri('bootstrap-fork', require).fsPath, + FileAccess.asFileUri('bootstrap-fork').fsPath, ['--type=extensionHost', '--skipWorkspaceStorageLock'], mixin({ cwd: cwd() }, opts), ); @@ -434,7 +434,7 @@ class UtilityExtensionHostProcess extends Disposable { } const serviceName = `extensionHost${this.id}`; - const modulePath = FileAccess.asFileUri('bootstrap-fork.js', require).fsPath; + const modulePath = FileAccess.asFileUri('bootstrap-fork.js').fsPath; const args: string[] = ['--type=extensionHost', '--skipWorkspaceStorageLock']; const execArgv: string[] = opts.execArgv || []; const env: { [key: string]: any } = { ...opts.env }; diff --git a/src/vs/platform/externalTerminal/node/externalTerminalService.ts b/src/vs/platform/externalTerminal/node/externalTerminalService.ts index dc00f2f647d..c378445f6f5 100644 --- a/src/vs/platform/externalTerminal/node/externalTerminalService.ts +++ b/src/vs/platform/externalTerminal/node/externalTerminalService.ts @@ -133,7 +133,7 @@ export class MacExternalTerminalService extends ExternalTerminalService implemen // and then launches the program inside that window. const script = terminalApp === DEFAULT_TERMINAL_OSX ? 'TerminalHelper' : 'iTermHelper'; - const scriptpath = FileAccess.asFileUri(`vs/workbench/contrib/externalTerminal/node/${script}.scpt`, require).fsPath; + const scriptpath = FileAccess.asFileUri(`vs/workbench/contrib/externalTerminal/node/${script}.scpt`).fsPath; const osaArgs = [ scriptpath, diff --git a/src/vs/platform/files/node/watcher/watcherClient.ts b/src/vs/platform/files/node/watcher/watcherClient.ts index 465f8421d06..221f7629496 100644 --- a/src/vs/platform/files/node/watcher/watcherClient.ts +++ b/src/vs/platform/files/node/watcher/watcherClient.ts @@ -26,7 +26,7 @@ export class UniversalWatcherClient extends AbstractUniversalWatcherClient { // Fork the universal file watcher and build a client around // its server for passing over requests and receiving events. const client = disposables.add(new Client( - FileAccess.asFileUri('bootstrap-fork', require).fsPath, + FileAccess.asFileUri('bootstrap-fork').fsPath, { serverName: 'File Watcher', args: ['--type=fileWatcher'], diff --git a/src/vs/platform/issue/electron-main/issueMainService.ts b/src/vs/platform/issue/electron-main/issueMainService.ts index a26823ec79c..c1967961955 100644 --- a/src/vs/platform/issue/electron-main/issueMainService.ts +++ b/src/vs/platform/issue/electron-main/issueMainService.ts @@ -228,7 +228,7 @@ export class IssueMainService implements IIssueMainService { }); this.issueReporterWindow.loadURL( - FileAccess.asBrowserUri(`vs/code/electron-sandbox/issue/issueReporter${this.environmentMainService.isBuilt ? '' : '-dev'}.html`, require).toString(true) + FileAccess.asBrowserUri(`vs/code/electron-sandbox/issue/issueReporter${this.environmentMainService.isBuilt ? '' : '-dev'}.html`).toString(true) ); this.issueReporterWindow.on('close', () => { @@ -279,7 +279,7 @@ export class IssueMainService implements IIssueMainService { }); this.processExplorerWindow.loadURL( - FileAccess.asBrowserUri(`vs/code/electron-sandbox/processExplorer/processExplorer${this.environmentMainService.isBuilt ? '' : '-dev'}.html`, require).toString(true) + FileAccess.asBrowserUri(`vs/code/electron-sandbox/processExplorer/processExplorer${this.environmentMainService.isBuilt ? '' : '-dev'}.html`).toString(true) ); this.processExplorerWindow.on('close', () => { @@ -325,7 +325,7 @@ export class IssueMainService implements IIssueMainService { title: options.title, backgroundColor: options.backgroundColor || IssueMainService.DEFAULT_BACKGROUND_COLOR, webPreferences: { - preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js', require).fsPath, + preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js').fsPath, additionalArguments: [`--vscode-window-config=${ipcObjectUrl.resource.toString()}`, `--vscode-window-kind=${windowKind}`], v8CacheOptions: this.environmentMainService.useCodeCache ? 'bypassHeatCheck' : 'none', enableWebSQL: false, diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts index bceda016f20..3f50bef5ca2 100644 --- a/src/vs/platform/product/common/product.ts +++ b/src/vs/platform/product/common/product.ts @@ -29,7 +29,7 @@ if (typeof globals.vscode !== 'undefined' && typeof globals.vscode.context !== ' else if (typeof require?.__$__nodeRequire === 'function') { // Obtain values from product.json and package.json - const rootPath = dirname(FileAccess.asFileUri('', require)); + const rootPath = dirname(FileAccess.asFileUri('')); product = require.__$__nodeRequire(joinPath(rootPath, 'product.json').fsPath); diff --git a/src/vs/platform/protocol/electron-main/protocolMainService.ts b/src/vs/platform/protocol/electron-main/protocolMainService.ts index b66fd1c1c0f..79d431b275c 100644 --- a/src/vs/platform/protocol/electron-main/protocolMainService.ts +++ b/src/vs/platform/protocol/electron-main/protocolMainService.ts @@ -127,7 +127,7 @@ export class ProtocolMainService extends Disposable implements IProtocolMainServ // 2.) Use `FileAccess.asFileUri` to convert back from a // `vscode-file:` URI to a `file:` URI. - const unnormalizedFileUri = FileAccess.asFileUri(requestUri); + const unnormalizedFileUri = FileAccess.uriToFileUri(requestUri); // 3.) Strip anything from the URI that could result in // relative paths (such as "..") by using `normalize` diff --git a/src/vs/platform/sharedProcess/electron-browser/sharedProcessWorkerService.ts b/src/vs/platform/sharedProcess/electron-browser/sharedProcessWorkerService.ts index 15eba30ae44..e02ea92731b 100644 --- a/src/vs/platform/sharedProcess/electron-browser/sharedProcessWorkerService.ts +++ b/src/vs/platform/sharedProcess/electron-browser/sharedProcessWorkerService.ts @@ -281,7 +281,7 @@ class SharedProcessWebWorker extends Disposable { id: SharedProcessWorkerMessages.Spawn, configuration, environment: { - bootstrapPath: FileAccess.asFileUri('bootstrap-fork', require).fsPath + bootstrapPath: FileAccess.asFileUri('bootstrap-fork').fsPath } }; diff --git a/src/vs/platform/sharedProcess/electron-main/sharedProcess.ts b/src/vs/platform/sharedProcess/electron-main/sharedProcess.ts index 5b3e3936011..43b70a639b5 100644 --- a/src/vs/platform/sharedProcess/electron-main/sharedProcess.ts +++ b/src/vs/platform/sharedProcess/electron-main/sharedProcess.ts @@ -222,7 +222,7 @@ export class SharedProcess extends Disposable implements ISharedProcess { show: false, backgroundColor: this.themeMainService.getBackgroundColor(), webPreferences: { - preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js', require).fsPath, + preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js').fsPath, additionalArguments: [`--vscode-window-config=${configObjectUrl.resource.toString()}`, '--vscode-window-kind=shared-process'], v8CacheOptions: this.environmentMainService.useCodeCache ? 'bypassHeatCheck' : 'none', nodeIntegration: true, @@ -250,7 +250,7 @@ export class SharedProcess extends Disposable implements ISharedProcess { }); // Load with config - this.window.loadURL(FileAccess.asBrowserUri(`vs/code/electron-browser/sharedProcess/sharedProcess${this.environmentMainService.isBuilt ? '' : '-dev'}.html`, require).toString(true)); + this.window.loadURL(FileAccess.asBrowserUri(`vs/code/electron-browser/sharedProcess/sharedProcess${this.environmentMainService.isBuilt ? '' : '-dev'}.html`).toString(true)); } private registerWindowListeners(): void { diff --git a/src/vs/platform/telemetry/node/customEndpointTelemetryService.ts b/src/vs/platform/telemetry/node/customEndpointTelemetryService.ts index 2b7a2228a4a..255f26d5217 100644 --- a/src/vs/platform/telemetry/node/customEndpointTelemetryService.ts +++ b/src/vs/platform/telemetry/node/customEndpointTelemetryService.ts @@ -34,7 +34,7 @@ export class CustomEndpointTelemetryService implements ICustomEndpointTelemetryS telemetryInfo['common.vscodesessionid'] = sessionId; const args = [endpoint.id, JSON.stringify(telemetryInfo), endpoint.aiKey]; const client = new TelemetryClient( - FileAccess.asFileUri('bootstrap-fork', require).fsPath, + FileAccess.asFileUri('bootstrap-fork').fsPath, { serverName: 'Debug Telemetry', timeout: 1000 * 60 * 5, diff --git a/src/vs/platform/terminal/node/ptyHostService.ts b/src/vs/platform/terminal/node/ptyHostService.ts index 98bc9f4180e..ac1e390de91 100644 --- a/src/vs/platform/terminal/node/ptyHostService.ts +++ b/src/vs/platform/terminal/node/ptyHostService.ts @@ -155,7 +155,7 @@ export class PtyHostService extends Disposable implements IPtyService { } } - const client = new Client(FileAccess.asFileUri('bootstrap-fork', require).fsPath, opts); + const client = new Client(FileAccess.asFileUri('bootstrap-fork').fsPath, opts); this._onPtyHostStart.fire(); // Setup heartbeat service and trigger a heartbeat immediately to reset the timeouts diff --git a/src/vs/platform/terminal/node/terminalEnvironment.ts b/src/vs/platform/terminal/node/terminalEnvironment.ts index 9ff09c4322e..774973104d6 100644 --- a/src/vs/platform/terminal/node/terminalEnvironment.ts +++ b/src/vs/platform/terminal/node/terminalEnvironment.ts @@ -119,7 +119,7 @@ export function getShellIntegrationInjection( const originalArgs = shellLaunchConfig.args; const shell = process.platform === 'win32' ? path.basename(shellLaunchConfig.executable).toLowerCase() : path.basename(shellLaunchConfig.executable); - const appRoot = path.dirname(FileAccess.asFileUri('', require).fsPath); + const appRoot = path.dirname(FileAccess.asFileUri('').fsPath); let newArgs: string[] | undefined; const envMixin: IProcessEnvironment = { 'VSCODE_INJECTION': '1' diff --git a/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts b/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts index 8c8be165bc0..7697c49c8cc 100644 --- a/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts +++ b/src/vs/platform/webview/electron-main/webviewProtocolProvider.ts @@ -5,7 +5,7 @@ import { protocol } from 'electron'; import { Disposable } from 'vs/base/common/lifecycle'; -import { COI, FileAccess, Schemas } from 'vs/base/common/network'; +import { AppResourcePath, COI, FileAccess, Schemas } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; @@ -33,8 +33,8 @@ export class WebviewProtocolProvider extends Disposable { const uri = URI.parse(request.url); const entry = WebviewProtocolProvider.validWebviewFilePaths.get(uri.path); if (typeof entry === 'string') { - const relativeResourcePath = `vs/workbench/contrib/webview/browser/pre/${entry}`; - const url = FileAccess.asFileUri(relativeResourcePath, require); + const relativeResourcePath: AppResourcePath = `vs/workbench/contrib/webview/browser/pre/${entry}`; + const url = FileAccess.asFileUri(relativeResourcePath); return callback({ path: decodeURIComponent(url.fsPath), headers: { diff --git a/src/vs/platform/windows/electron-main/windowImpl.ts b/src/vs/platform/windows/electron-main/windowImpl.ts index 25eb72719b2..8efb68d9130 100644 --- a/src/vs/platform/windows/electron-main/windowImpl.ts +++ b/src/vs/platform/windows/electron-main/windowImpl.ts @@ -215,7 +215,7 @@ export class CodeWindow extends Disposable implements ICodeWindow { show: !isFullscreenOrMaximized, // reduce flicker by showing later title: this.productService.nameLong, webPreferences: { - preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js', require).fsPath, + preload: FileAccess.asFileUri('vs/base/parts/sandbox/electron-browser/preload.js').fsPath, additionalArguments: [`--vscode-window-config=${this.configObjectUrl.resource.toString()}`], v8CacheOptions: this.environmentMainService.useCodeCache ? 'bypassHeatCheck' : 'none', enableWebSQL: false, @@ -878,7 +878,7 @@ export class CodeWindow extends Disposable implements ICodeWindow { this.readyState = ReadyState.NAVIGATING; // Load URL - this._win.loadURL(FileAccess.asBrowserUri(`vs/code/electron-sandbox/workbench/workbench${this.environmentMainService.isBuilt ? '' : '-dev'}.html`, require).toString(true)); + this._win.loadURL(FileAccess.asBrowserUri(`vs/code/electron-sandbox/workbench/workbench${this.environmentMainService.isBuilt ? '' : '-dev'}.html`).toString(true)); // Remember that we did load const wasLoaded = this.wasLoaded; diff --git a/src/vs/server/node/extensionHostConnection.ts b/src/vs/server/node/extensionHostConnection.ts index 00e2e2a1305..3336c1ec2ce 100644 --- a/src/vs/server/node/extensionHostConnection.ts +++ b/src/vs/server/node/extensionHostConnection.ts @@ -257,7 +257,7 @@ export class ExtensionHostConnection { const args = ['--type=extensionHost', `--transformURIs`]; const useHostProxy = this._environmentService.args['use-host-proxy']; args.push(`--useHostProxy=${useHostProxy ? 'true' : 'false'}`); - this._extensionHostProcess = cp.fork(FileAccess.asFileUri('bootstrap-fork', require).fsPath, args, opts); + this._extensionHostProcess = cp.fork(FileAccess.asFileUri('bootstrap-fork').fsPath, args, opts); const pid = this._extensionHostProcess.pid; this._log(`<${pid}> Launched Extension Host Process.`); diff --git a/src/vs/server/node/remoteExtensionHostAgentServer.ts b/src/vs/server/node/remoteExtensionHostAgentServer.ts index 31c0864d5fb..efc591aab18 100644 --- a/src/vs/server/node/remoteExtensionHostAgentServer.ts +++ b/src/vs/server/node/remoteExtensionHostAgentServer.ts @@ -724,7 +724,7 @@ export async function createServer(address: string | net.AddressInfo | null, arg const vsdaMod = instantiationService.invokeFunction((accessor) => { const logService = accessor.get(ILogService); - const hasVSDA = fs.existsSync(join(FileAccess.asFileUri('', require).fsPath, '../node_modules/vsda')); + const hasVSDA = fs.existsSync(join(FileAccess.asFileUri('').fsPath, '../node_modules/vsda')); if (hasVSDA) { try { return <typeof vsda>require.__$__nodeRequire('vsda'); @@ -735,7 +735,7 @@ export async function createServer(address: string | net.AddressInfo | null, arg return null; }); - const hasWebClient = fs.existsSync(FileAccess.asFileUri('vs/code/browser/workbench/workbench.html', require).fsPath); + const hasWebClient = fs.existsSync(FileAccess.asFileUri('vs/code/browser/workbench/workbench.html').fsPath); if (hasWebClient && address && typeof address !== 'string') { // ships the web ui! diff --git a/src/vs/server/node/remoteLanguagePacks.ts b/src/vs/server/node/remoteLanguagePacks.ts index 1da6011a1cc..e0218f836ab 100644 --- a/src/vs/server/node/remoteLanguagePacks.ts +++ b/src/vs/server/node/remoteLanguagePacks.ts @@ -10,7 +10,7 @@ import * as path from 'vs/base/common/path'; import * as lp from 'vs/base/node/languagePacks'; import product from 'vs/platform/product/common/product'; -const metaData = path.join(FileAccess.asFileUri('', require).fsPath, 'nls.metadata.json'); +const metaData = path.join(FileAccess.asFileUri('').fsPath, 'nls.metadata.json'); const _cache: Map<string, Promise<lp.NLSConfiguration>> = new Map(); function exists(file: string) { diff --git a/src/vs/server/node/server.main.ts b/src/vs/server/node/server.main.ts index 183b614e2bc..469671e5745 100644 --- a/src/vs/server/node/server.main.ts +++ b/src/vs/server/node/server.main.ts @@ -43,7 +43,7 @@ const GLOBAL_STORAGE_HOME = join(APP_SETTINGS_HOME, 'globalStorage'); const LOCAL_HISTORY_HOME = join(APP_SETTINGS_HOME, 'History'); const MACHINE_SETTINGS_HOME = join(USER_DATA_PATH, 'Machine'); args['user-data-dir'] = USER_DATA_PATH; -const APP_ROOT = dirname(FileAccess.asFileUri('', require).fsPath); +const APP_ROOT = dirname(FileAccess.asFileUri('').fsPath); const BUILTIN_EXTENSIONS_FOLDER_PATH = join(APP_ROOT, 'extensions'); args['builtin-extensions-dir'] = BUILTIN_EXTENSIONS_FOLDER_PATH; args['extensions-dir'] = args['extensions-dir'] || join(REMOTE_DATA_FOLDER, 'extensions'); diff --git a/src/vs/server/node/webClientServer.ts b/src/vs/server/node/webClientServer.ts index 35cdf1e9590..82d88edf26f 100644 --- a/src/vs/server/node/webClientServer.ts +++ b/src/vs/server/node/webClientServer.ts @@ -90,7 +90,7 @@ export async function serveFile(filePath: string, cacheControl: CacheControl, lo } } -const APP_ROOT = dirname(FileAccess.asFileUri('', require).fsPath); +const APP_ROOT = dirname(FileAccess.asFileUri('').fsPath); export class WebClientServer { @@ -290,7 +290,7 @@ export class WebClientServer { const resolveWorkspaceURI = (defaultLocation?: string) => defaultLocation && URI.file(path.resolve(defaultLocation)).with({ scheme: Schemas.vscodeRemote, authority: remoteAuthority }); - const filePath = FileAccess.asFileUri(this._environmentService.isBuilt ? 'vs/code/browser/workbench/workbench.html' : 'vs/code/browser/workbench/workbench-dev.html', require).fsPath; + const filePath = FileAccess.asFileUri(this._environmentService.isBuilt ? 'vs/code/browser/workbench/workbench.html' : 'vs/code/browser/workbench/workbench-dev.html').fsPath; const authSessionInfo = !this._environmentService.isBuilt && this._environmentService.args['github-auth'] ? { id: generateUuid(), providerId: 'github', @@ -398,7 +398,7 @@ export class WebClientServer { * Handle HTTP requests for /callback */ private async _handleCallback(res: http.ServerResponse): Promise<void> { - const filePath = FileAccess.asFileUri('vs/code/browser/workbench/callback.html', require).fsPath; + const filePath = FileAccess.asFileUri('vs/code/browser/workbench/callback.html').fsPath; const data = (await fsp.readFile(filePath)).toString(); const cspDirectives = [ 'default-src \'self\';', diff --git a/src/vs/workbench/api/browser/mainThreadExtensionService.ts b/src/vs/workbench/api/browser/mainThreadExtensionService.ts index 85891b4bd7f..f0b222d8b6a 100644 --- a/src/vs/workbench/api/browser/mainThreadExtensionService.ts +++ b/src/vs/workbench/api/browser/mainThreadExtensionService.ts @@ -189,7 +189,7 @@ export class MainThreadExtensionService implements MainThreadExtensionServiceSha } async $asBrowserUri(uri: UriComponents): Promise<UriComponents> { - return FileAccess.asBrowserUri(URI.revive(uri)); + return FileAccess.uriToBrowserUri(URI.revive(uri)); } } diff --git a/src/vs/workbench/api/worker/extensionHostWorker.ts b/src/vs/workbench/api/worker/extensionHostWorker.ts index 872f077cbb1..998b53a64ce 100644 --- a/src/vs/workbench/api/worker/extensionHostWorker.ts +++ b/src/vs/workbench/api/worker/extensionHostWorker.ts @@ -95,7 +95,7 @@ if ((<any>self).Worker) { const _Worker = (<any>self).Worker; Worker = <any>function (stringUrl: string | URL, options?: WorkerOptions) { if (/^file:/i.test(stringUrl.toString())) { - stringUrl = FileAccess.asBrowserUri(URI.parse(stringUrl.toString())).toString(true); + stringUrl = FileAccess.uriToBrowserUri(URI.parse(stringUrl.toString())).toString(true); } else if (/^vscode-remote:/i.test(stringUrl.toString())) { // Supporting transformation of vscode-remote URIs requires an async call to the main thread, // but we cannot do this call from within the embedded Worker, and the only way out would be diff --git a/src/vs/workbench/browser/dnd.ts b/src/vs/workbench/browser/dnd.ts index 93d9de7b0f6..253dc7371b8 100644 --- a/src/vs/workbench/browser/dnd.ts +++ b/src/vs/workbench/browser/dnd.ts @@ -236,7 +236,7 @@ export function fillEditorsDragData(accessor: ServicesAccessor, resourcesOrEdito // - only file:/ resources are supported const firstFile = fileSystemResources.find(({ isDirectory }) => !isDirectory); if (firstFile) { - const firstFileUri = FileAccess.asFileUri(firstFile.resource); // enforce `file:` URIs + const firstFileUri = FileAccess.uriToFileUri(firstFile.resource); // enforce `file:` URIs if (firstFileUri.scheme === Schemas.file) { event.dataTransfer.setData(DataTransfers.DOWNLOAD_URL, [Mimes.binary, basename(firstFile.resource), firstFileUri.toString()].join(':')); } diff --git a/src/vs/workbench/browser/parts/editor/editor.contribution.ts b/src/vs/workbench/browser/parts/editor/editor.contribution.ts index 82ca36f22a6..fbe1d5a8853 100644 --- a/src/vs/workbench/browser/parts/editor/editor.contribution.ts +++ b/src/vs/workbench/browser/parts/editor/editor.contribution.ts @@ -304,13 +304,13 @@ registerEditorCommands(); // macOS: Touchbar if (isMacintosh) { MenuRegistry.appendMenuItem(MenuId.TouchBarContext, { - command: { id: NavigateBackwardsAction.ID, title: NavigateBackwardsAction.LABEL, icon: { dark: FileAccess.asFileUri('vs/workbench/browser/parts/editor/media/back-tb.png', require) } }, + command: { id: NavigateBackwardsAction.ID, title: NavigateBackwardsAction.LABEL, icon: { dark: FileAccess.asFileUri('vs/workbench/browser/parts/editor/media/back-tb.png') } }, group: 'navigation', order: 0 }); MenuRegistry.appendMenuItem(MenuId.TouchBarContext, { - command: { id: NavigateForwardAction.ID, title: NavigateForwardAction.LABEL, icon: { dark: FileAccess.asFileUri('vs/workbench/browser/parts/editor/media/forward-tb.png', require) } }, + command: { id: NavigateForwardAction.ID, title: NavigateForwardAction.LABEL, icon: { dark: FileAccess.asFileUri('vs/workbench/browser/parts/editor/media/forward-tb.png') } }, group: 'navigation', order: 1 }); diff --git a/src/vs/workbench/browser/parts/editor/editorGroupView.ts b/src/vs/workbench/browser/parts/editor/editorGroupView.ts index 086e0d0d9bf..0c2c8f23796 100644 --- a/src/vs/workbench/browser/parts/editor/editorGroupView.ts +++ b/src/vs/workbench/browser/parts/editor/editorGroupView.ts @@ -43,7 +43,7 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic import { hash } from 'vs/base/common/hash'; import { getMimeTypes } from 'vs/editor/common/services/languagesAssociations'; import { extname, isEqual } from 'vs/base/common/resources'; -import { FileAccess, Schemas } from 'vs/base/common/network'; +import { AppResourcePath, FileAccess, Schemas } from 'vs/base/common/network'; import { EditorActivation, IEditorOptions } from 'vs/platform/editor/common/editor'; import { IFileDialogService, ConfirmResult } from 'vs/platform/dialogs/common/dialogs'; import { IFilesConfigurationService, AutoSaveMode } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; @@ -1939,10 +1939,10 @@ export interface EditorReplacement extends IEditorReplacement { registerThemingParticipant((theme, collector) => { // Letterpress - const letterpress = `./media/letterpress-${theme.type}.svg`; + const letterpress: AppResourcePath = `vs/workbench/browser/parts/editor/media/letterpress-${theme.type}.svg`; collector.addRule(` .monaco-workbench .part.editor > .content .editor-group-container.empty .editor-group-letterpress { - background-image: ${asCSSUrl(FileAccess.asBrowserUri(letterpress, require))} + background-image: ${asCSSUrl(FileAccess.asBrowserUri(letterpress))} } `); diff --git a/src/vs/workbench/contrib/audioCues/browser/audioCueService.ts b/src/vs/workbench/contrib/audioCues/browser/audioCueService.ts index b2ab0e3d458..6aeb6d66f25 100644 --- a/src/vs/workbench/contrib/audioCues/browser/audioCueService.ts +++ b/src/vs/workbench/contrib/audioCues/browser/audioCueService.ts @@ -70,8 +70,7 @@ export class AudioCueService extends Disposable implements IAudioCueService { this.playingSounds.add(sound); const url = FileAccess.asBrowserUri( - `vs/workbench/contrib/audioCues/browser/media/${sound.fileName}`, - require + `vs/workbench/contrib/audioCues/browser/media/${sound.fileName}` ).toString(); const audio = new Audio(url); audio.volume = this.getVolumeInPercent() / 100; diff --git a/src/vs/workbench/contrib/debug/browser/debug.contribution.ts b/src/vs/workbench/contrib/debug/browser/debug.contribution.ts index 77bda0eb967..95473c975cf 100644 --- a/src/vs/workbench/contrib/debug/browser/debug.contribution.ts +++ b/src/vs/workbench/contrib/debug/browser/debug.contribution.ts @@ -200,15 +200,15 @@ if (isMacintosh) { }); }; - registerTouchBarEntry(DEBUG_RUN_COMMAND_ID, DEBUG_RUN_LABEL, 0, CONTEXT_IN_DEBUG_MODE.toNegated(), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/continue-tb.png', require)); - registerTouchBarEntry(DEBUG_START_COMMAND_ID, DEBUG_START_LABEL, 1, CONTEXT_IN_DEBUG_MODE.toNegated(), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/run-with-debugging-tb.png', require)); - 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')), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/pause-tb.png', require)); - 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, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/stepinto-tb.png', require)); - 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, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/restart-tb.png', require)); - registerTouchBarEntry(STOP_ID, STOP_LABEL, 6, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/stop-tb.png', require)); + registerTouchBarEntry(DEBUG_RUN_COMMAND_ID, DEBUG_RUN_LABEL, 0, CONTEXT_IN_DEBUG_MODE.toNegated(), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/continue-tb.png')); + registerTouchBarEntry(DEBUG_START_COMMAND_ID, DEBUG_START_LABEL, 1, CONTEXT_IN_DEBUG_MODE.toNegated(), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/run-with-debugging-tb.png')); + registerTouchBarEntry(CONTINUE_ID, CONTINUE_LABEL, 0, CONTEXT_DEBUG_STATE.isEqualTo('stopped'), FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/continue-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')); + registerTouchBarEntry(STEP_OVER_ID, STEP_OVER_LABEL, 2, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/stepover-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')); + registerTouchBarEntry(STEP_OUT_ID, STEP_OUT_LABEL, 4, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/stepout-tb.png')); + registerTouchBarEntry(RESTART_SESSION_ID, RESTART_LABEL, 5, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/restart-tb.png')); + registerTouchBarEntry(STOP_ID, STOP_LABEL, 6, CONTEXT_IN_DEBUG_MODE, FileAccess.asFileUri('vs/workbench/contrib/debug/browser/media/stop-tb.png')); } // Editor Title Menu's "Run/Debug" dropdown item diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts index adc6daaa487..6a7d8cbd13f 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts @@ -174,7 +174,7 @@ export class Extension implements IExtension { private get localIconUrl(): string | null { if (this.local && this.local.manifest.icon) { - return FileAccess.asBrowserUri(resources.joinPath(this.local.location, this.local.manifest.icon)).toString(true); + return FileAccess.uriToBrowserUri(resources.joinPath(this.local.location, this.local.manifest.icon)).toString(true); } return null; } @@ -191,10 +191,10 @@ export class Extension implements IExtension { if (this.type === ExtensionType.System && this.local) { if (this.local.manifest && this.local.manifest.contributes) { if (Array.isArray(this.local.manifest.contributes.themes) && this.local.manifest.contributes.themes.length) { - return FileAccess.asBrowserUri('./media/theme-icon.png', require).toString(true); + return FileAccess.asBrowserUri('vs/workbench/contrib/extensions/browser/media/theme-icon.png').toString(true); } if (Array.isArray(this.local.manifest.contributes.grammars) && this.local.manifest.contributes.grammars.length) { - return FileAccess.asBrowserUri('./media/language-icon.svg', require).toString(true); + return FileAccess.asBrowserUri('vs/workbench/contrib/extensions/browser/media/language-icon.svg').toString(true); } } } diff --git a/src/vs/workbench/contrib/files/browser/fileImportExport.ts b/src/vs/workbench/contrib/files/browser/fileImportExport.ts index bb2297d08c7..fe66a30e5a5 100644 --- a/src/vs/workbench/contrib/files/browser/fileImportExport.ts +++ b/src/vs/workbench/contrib/files/browser/fileImportExport.ts @@ -672,7 +672,7 @@ export class FileDownload { try { bufferOrUri = (await this.fileService.readFile(stat.resource, { limits: { size: maxBlobDownloadSize } }, cts.token)).value.buffer; } catch (error) { - bufferOrUri = FileAccess.asBrowserUri(stat.resource); + bufferOrUri = FileAccess.uriToBrowserUri(stat.resource); } if (!cts.token.isCancellationRequested) { diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts index 6803f396bcf..9fc80f70589 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts @@ -479,7 +479,7 @@ export class BackLayerWebView<T extends ICommonCellInfo> extends Disposable { this._webviewPreloadInitialized = new DeferredPromise(); if (!isWeb) { - const loaderUri = FileAccess.asFileUri('vs/loader.js', require); + const loaderUri = FileAccess.asFileUri('vs/loader.js'); const loader = this.asWebviewUri(loaderUri, undefined); coreDependencies = `<script src="${loader}"></script><script> @@ -491,7 +491,7 @@ export class BackLayerWebView<T extends ICommonCellInfo> extends Disposable { this._initialize(htmlContent); this._initialized.complete(); } else { - const loaderUri = FileAccess.asBrowserUri('vs/loader.js', require); + const loaderUri = FileAccess.asBrowserUri('vs/loader.js'); fetch(loaderUri.toString(true)).then(async response => { if (response.status !== 200) { @@ -553,7 +553,7 @@ var requirejs = (function() { } return [ - dirname(FileAccess.asFileUri('vs/loader.js', require)), + dirname(FileAccess.asFileUri('vs/loader.js')), ]; } diff --git a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts index 3d1ddf27618..1f9d20449ef 100644 --- a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts +++ b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts @@ -256,9 +256,11 @@ class PerfModelContentProvider implements ITextModelContentProvider { map.set(LoaderEventType.CachedDataFound, []); map.set(LoaderEventType.CachedDataMissed, []); map.set(LoaderEventType.CachedDataRejected, []); - for (const stat of require.getStats()) { - if (map.has(stat.type)) { - map.get(stat.type)!.push(stat.detail); + if (typeof require.getStats === 'function') { + for (const stat of require.getStats()) { + if (map.has(stat.type)) { + map.get(stat.type)!.push(stat.detail); + } } } diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.ts index 6e58d3390ea..c186be0ba4d 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedService.ts @@ -216,8 +216,8 @@ export class WalkthroughsService extends Disposable implements IWalkthroughsServ : { type: 'markdown', path: convertInternalMediaPathToFileURI(step.media.path).with({ query: JSON.stringify({ moduleId: 'vs/workbench/contrib/welcomeGettingStarted/common/media/' + step.media.path }) }), - base: FileAccess.asFileUri('vs/workbench/contrib/welcomeGettingStarted/common/media/', require), - root: FileAccess.asFileUri('vs/workbench/contrib/welcomeGettingStarted/common/media/', require), + base: FileAccess.asFileUri('vs/workbench/contrib/welcomeGettingStarted/common/media/'), + root: FileAccess.asFileUri('vs/workbench/contrib/welcomeGettingStarted/common/media/'), }, }); }) @@ -281,12 +281,12 @@ export class WalkthroughsService extends Disposable implements IWalkthroughsServ private async registerExtensionWalkthroughContributions(extension: IExtensionDescription) { const convertExtensionPathToFileURI = (path: string) => path.startsWith('https://') ? URI.parse(path, true) - : FileAccess.asFileUri(joinPath(extension.extensionLocation, path)); + : FileAccess.uriToFileUri(joinPath(extension.extensionLocation, path)); const convertExtensionRelativePathsToBrowserURIs = (path: string | { hc: string; hcLight?: string; dark: string; light: string }): { hcDark: URI; hcLight: URI; dark: URI; light: URI } => { const convertPath = (path: string) => path.startsWith('https://') ? URI.parse(path, true) - : FileAccess.asBrowserUri(joinPath(extension.extensionLocation, path)); + : FileAccess.uriToBrowserUri(joinPath(extension.extensionLocation, path)); if (typeof path === 'string') { const converted = convertPath(path); @@ -353,7 +353,7 @@ export class WalkthroughsService extends Disposable implements IWalkthroughsServ type: 'markdown', path: convertExtensionPathToFileURI(step.media.markdown), base: convertExtensionPathToFileURI(dirname(step.media.markdown)), - root: FileAccess.asFileUri(extension.extensionLocation), + root: FileAccess.uriToFileUri(extension.extensionLocation), }; } else if (step.media.svg) { @@ -401,7 +401,7 @@ export class WalkthroughsService extends Disposable implements IWalkthroughsServ icon: { type: 'image', path: iconStr - ? FileAccess.asBrowserUri(joinPath(extension.extensionLocation, iconStr)).toString(true) + ? FileAccess.uriToBrowserUri(joinPath(extension.extensionLocation, iconStr)).toString(true) : DefaultIconPath }, when: ContextKeyExpr.deserialize(override ?? walkthrough.when) ?? ContextKeyExpr.true(), @@ -657,11 +657,11 @@ const parseDescription = (desc: string): LinkedText[] => desc.split('\n').filter export const convertInternalMediaPathToFileURI = (path: string) => path.startsWith('https://') ? URI.parse(path, true) - : FileAccess.asFileUri('vs/workbench/contrib/welcomeGettingStarted/common/media/' + path, require); + : FileAccess.asFileUri(`vs/workbench/contrib/welcomeGettingStarted/common/media/${path}`); const convertInternalMediaPathToBrowserURI = (path: string) => path.startsWith('https://') ? URI.parse(path, true) - : FileAccess.asBrowserUri('vs/workbench/contrib/welcomeGettingStarted/common/media/' + path, require); + : FileAccess.asBrowserUri(`vs/workbench/contrib/welcomeGettingStarted/common/media/${path}`); const convertInternalMediaPathsToBrowserURIs = (path: string | { hc: string; hcLight?: string; dark: string; light: string }): { hcDark: URI; hcLight: URI; dark: URI; light: URI } => { if (typeof path === 'string') { const converted = convertInternalMediaPathToBrowserURI(path); diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/test/browser/gettingStartedMarkdownRenderer.test.ts b/src/vs/workbench/contrib/welcomeGettingStarted/test/browser/gettingStartedMarkdownRenderer.test.ts index 43a52649d81..773842399ae 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/test/browser/gettingStartedMarkdownRenderer.test.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/test/browser/gettingStartedMarkdownRenderer.test.ts @@ -19,7 +19,7 @@ suite('Getting Started Markdown Renderer', () => { const languageService = new LanguageService(); const renderer = new GettingStartedDetailsRenderer(fileService, new TestNotificationService(), new TestExtensionService(), languageService); const mdPath = convertInternalMediaPathToFileURI('theme_picker').with({ query: JSON.stringify({ moduleId: 'vs/workbench/contrib/welcomeGettingStarted/common/media/theme_picker' }) }); - const mdBase = FileAccess.asFileUri('vs/workbench/contrib/welcomeGettingStarted/common/media/', require); + const mdBase = FileAccess.asFileUri('vs/workbench/contrib/welcomeGettingStarted/common/media/'); const rendered = await renderer.renderMarkdown(mdPath, mdBase); const imageSrcs = [...rendered.matchAll(/img src="[^"]*"/g)].map(match => match[0]); for (const src of imageSrcs) { diff --git a/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/editorWalkThrough.ts b/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/editorWalkThrough.ts index 906d5a4d76c..46030249ab8 100644 --- a/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/editorWalkThrough.ts +++ b/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/editorWalkThrough.ts @@ -18,7 +18,7 @@ const typeId = 'workbench.editors.walkThroughInput'; const inputOptions: WalkThroughInputOptions = { typeId, name: localize('editorWalkThrough.title', "Editor Playground"), - resource: FileAccess.asBrowserUri('./vs_code_editor_walkthrough.md', require) + resource: FileAccess.asBrowserUri('vs/workbench/contrib/welcomeWalkthrough/browser/editor/vs_code_editor_walkthrough.md') .with({ scheme: Schemas.walkThrough, query: JSON.stringify({ moduleId: 'vs/workbench/contrib/welcomeWalkthrough/browser/editor/vs_code_editor_walkthrough' }) diff --git a/src/vs/workbench/electron-sandbox/window.ts b/src/vs/workbench/electron-sandbox/window.ts index dbaa1204d74..e020a5eec2c 100644 --- a/src/vs/workbench/electron-sandbox/window.ts +++ b/src/vs/workbench/electron-sandbox/window.ts @@ -647,7 +647,7 @@ export class NativeWindow extends Disposable { private async handleWarnings(): Promise<void> { // Check for cyclic dependencies - if (require.hasDependencyCycle()) { + if (typeof require.hasDependencyCycle === 'function' && require.hasDependencyCycle()) { if (isCI) { this.logService.error('Error: There is a dependency cycle in the AMD modules that needs to be resolved!'); this.nativeHostService.exit(37); // running on a build machine, just exit without showing a dialog diff --git a/src/vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.ts b/src/vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.ts index 41a586dc3f1..7e797a7bc1d 100644 --- a/src/vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.ts +++ b/src/vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.ts @@ -9,7 +9,7 @@ import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/ import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { getGalleryExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { FileAccess } from 'vs/base/common/network'; +import { builtinExtensionsPath, FileAccess } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; import { IExtensionResourceLoaderService } from 'vs/platform/extensionResourceLoader/common/extensionResourceLoader'; import { IProductService } from 'vs/platform/product/common/productService'; @@ -47,7 +47,7 @@ export class BuiltinExtensionsScannerService implements IBuiltinExtensionsScanne this.nlsUrl = URI.joinPath(URI.parse(nlsBaseUrl), productService.commit, productService.version, Language.value()); } - const builtinExtensionsServiceUrl = FileAccess.asBrowserUri('../../../../../../extensions', require); + const builtinExtensionsServiceUrl = FileAccess.asBrowserUri(builtinExtensionsPath); if (builtinExtensionsServiceUrl) { let bundledExtensions: IBundledExtension[] = []; diff --git a/src/vs/workbench/services/extensionManagement/common/extensionManagement.ts b/src/vs/workbench/services/extensionManagement/common/extensionManagement.ts index aecd0f677db..4063bccefe7 100644 --- a/src/vs/workbench/services/extensionManagement/common/extensionManagement.ts +++ b/src/vs/workbench/services/extensionManagement/common/extensionManagement.ts @@ -43,7 +43,7 @@ export interface IExtensionManagementServerService { getExtensionInstallLocation(extension: IExtension): ExtensionInstallLocation | null; } -export const DefaultIconPath = FileAccess.asBrowserUri('./media/defaultIcon.png', require).toString(true); +export const DefaultIconPath = FileAccess.asBrowserUri('vs/workbench/services/extensionManagement/common/media/defaultIcon.png').toString(true); export type InstallExtensionOnServerEvent = InstallExtensionEvent & { server: IExtensionManagementServer }; export type UninstallExtensionOnServerEvent = UninstallExtensionEvent & { server: IExtensionManagementServer }; diff --git a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts index b78a21d763e..dcc84bf6d18 100644 --- a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts +++ b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts @@ -120,7 +120,7 @@ export class WebWorkerExtensionHost extends Disposable implements IExtensionHost console.warn(`The web worker extension host is started in a same-origin iframe!`); } - const relativeExtensionHostIframeSrc = FileAccess.asBrowserUri(iframeModulePath, require); + const relativeExtensionHostIframeSrc = FileAccess.asBrowserUri(iframeModulePath); return `${relativeExtensionHostIframeSrc.toString(true)}${suffix}`; } diff --git a/src/vs/workbench/services/integrity/electron-sandbox/integrityService.ts b/src/vs/workbench/services/integrity/electron-sandbox/integrityService.ts index ad51e6ef946..ff9b70bbb6a 100644 --- a/src/vs/workbench/services/integrity/electron-sandbox/integrityService.ts +++ b/src/vs/workbench/services/integrity/electron-sandbox/integrityService.ts @@ -13,7 +13,7 @@ import { INotificationService } from 'vs/platform/notification/common/notificati import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { FileAccess } from 'vs/base/common/network'; +import { FileAccess, AppResourcePath } from 'vs/base/common/network'; import { IChecksumService } from 'vs/platform/checksum/common/checksumService'; interface IStorageData { @@ -125,7 +125,7 @@ export class IntegrityService implements IIntegrityService { await this.lifecycleService.when(LifecyclePhase.Eventually); - const allResults = await Promise.all(Object.keys(expectedChecksums).map(filename => this._resolve(filename, expectedChecksums[filename]))); + const allResults = await Promise.all(Object.keys(expectedChecksums).map(filename => this._resolve(<AppResourcePath>filename, expectedChecksums[filename]))); let isPure = true; for (let i = 0, len = allResults.length; i < len; i++) { @@ -141,8 +141,8 @@ export class IntegrityService implements IIntegrityService { }; } - private async _resolve(filename: string, expected: string): Promise<ChecksumPair> { - const fileUri = FileAccess.asFileUri(filename, require); + private async _resolve(filename: AppResourcePath, expected: string): Promise<ChecksumPair> { + const fileUri = FileAccess.asFileUri(filename); try { const checksum = await this.checksumService.checksum(fileUri); diff --git a/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.ts b/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.ts index 1b3db8dbbfd..ee459b1eaf6 100644 --- a/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.ts +++ b/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.ts @@ -5,7 +5,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { ILanguageDetectionService, ILanguageDetectionStats, LanguageDetectionStatsClassification, LanguageDetectionStatsId } from 'vs/workbench/services/languageDetection/common/languageDetectionWorkerService'; -import { FileAccess, Schemas } from 'vs/base/common/network'; +import { AppResourcePath, FileAccess, nodeModulesAsarPath, nodeModulesPath, Schemas } from 'vs/base/common/network'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ILanguageService } from 'vs/editor/common/languages/language'; @@ -27,10 +27,10 @@ import { ILogService } from 'vs/platform/log/common/log'; const TOP_LANG_COUNTS = 12; -const regexpModuleLocation = '../../../../../../node_modules/vscode-regexp-languagedetection'; -const regexpModuleLocationAsar = '../../../../../../node_modules.asar/vscode-regexp-languagedetection'; -const moduleLocation = '../../../../../../node_modules/@vscode/vscode-languagedetection'; -const moduleLocationAsar = '../../../../../../node_modules.asar/@vscode/vscode-languagedetection'; +const regexpModuleLocation: AppResourcePath = `${nodeModulesPath}/vscode-regexp-languagedetection`; +const regexpModuleLocationAsar: AppResourcePath = `${nodeModulesAsarPath}/vscode-regexp-languagedetection`; +const moduleLocation: AppResourcePath = `${nodeModulesPath}/@vscode/vscode-languagedetection`; +const moduleLocationAsar: AppResourcePath = `${nodeModulesAsarPath}/@vscode/vscode-languagedetection`; export class LanguageDetectionService extends Disposable implements ILanguageDetectionService { static readonly enablementSettingKey = 'workbench.editor.languageDetection'; @@ -72,17 +72,17 @@ export class LanguageDetectionService extends Disposable implements ILanguageDet telemetryService, // TODO: See if it's possible to bundle vscode-languagedetection this._environmentService.isBuilt && !isWeb - ? FileAccess.asBrowserUri(`${moduleLocationAsar}/dist/lib/index.js`, require).toString(true) - : FileAccess.asBrowserUri(`${moduleLocation}/dist/lib/index.js`, require).toString(true), + ? FileAccess.asBrowserUri(`${moduleLocationAsar}/dist/lib/index.js`).toString(true) + : FileAccess.asBrowserUri(`${moduleLocation}/dist/lib/index.js`).toString(true), this._environmentService.isBuilt && !isWeb - ? FileAccess.asBrowserUri(`${moduleLocationAsar}/model/model.json`, require).toString(true) - : FileAccess.asBrowserUri(`${moduleLocation}/model/model.json`, require).toString(true), + ? FileAccess.asBrowserUri(`${moduleLocationAsar}/model/model.json`).toString(true) + : FileAccess.asBrowserUri(`${moduleLocation}/model/model.json`).toString(true), this._environmentService.isBuilt && !isWeb - ? FileAccess.asBrowserUri(`${moduleLocationAsar}/model/group1-shard1of1.bin`, require).toString(true) - : FileAccess.asBrowserUri(`${moduleLocation}/model/group1-shard1of1.bin`, require).toString(true), + ? FileAccess.asBrowserUri(`${moduleLocationAsar}/model/group1-shard1of1.bin`).toString(true) + : FileAccess.asBrowserUri(`${moduleLocation}/model/group1-shard1of1.bin`).toString(true), this._environmentService.isBuilt && !isWeb - ? FileAccess.asBrowserUri(`${regexpModuleLocationAsar}/dist/index.js`, require).toString(true) - : FileAccess.asBrowserUri(`${regexpModuleLocation}/dist/index.js`, require).toString(true), + ? FileAccess.asBrowserUri(`${regexpModuleLocationAsar}/dist/index.js`).toString(true) + : FileAccess.asBrowserUri(`${regexpModuleLocation}/dist/index.js`).toString(true), languageConfigurationService ); diff --git a/src/vs/workbench/services/textMate/browser/browserTextMateService.ts b/src/vs/workbench/services/textMate/browser/browserTextMateService.ts index 44397b4825c..0cfc9e90156 100644 --- a/src/vs/workbench/services/textMate/browser/browserTextMateService.ts +++ b/src/vs/workbench/services/textMate/browser/browserTextMateService.ts @@ -10,7 +10,7 @@ import { FileAccess } from 'vs/base/common/network'; export class TextMateService extends AbstractTextMateService { protected async _loadVSCodeOnigurumWASM(): Promise<Response | ArrayBuffer> { - const response = await fetch(FileAccess.asBrowserUri('vscode-oniguruma/../onig.wasm', require).toString(true)); + const response = await fetch(FileAccess.asBrowserUri('vscode-oniguruma/../onig.wasm').toString(true)); // 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. // We therefore use the non-streaming compiler :(. diff --git a/src/vs/workbench/services/textMate/browser/nativeTextMateService.ts b/src/vs/workbench/services/textMate/browser/nativeTextMateService.ts index 6bccb3bd252..9206d7b6c33 100644 --- a/src/vs/workbench/services/textMate/browser/nativeTextMateService.ts +++ b/src/vs/workbench/services/textMate/browser/nativeTextMateService.ts @@ -25,7 +25,7 @@ import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; import { IExtensionResourceLoaderService } from 'vs/platform/extensionResourceLoader/common/extensionResourceLoader'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IProgressService } from 'vs/platform/progress/common/progress'; -import { FileAccess } from 'vs/base/common/network'; +import { FileAccess, nodeModulesAsarUnpackedPath, nodeModulesPath } from 'vs/base/common/network'; import { ILanguageIdCodec } from 'vs/editor/common/languages'; import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry'; @@ -192,8 +192,8 @@ export class TextMateService extends AbstractTextMateService { protected async _loadVSCodeOnigurumWASM(): Promise<Response | ArrayBuffer> { const response = await fetch(this._environmentService.isBuilt - ? FileAccess.asBrowserUri('../../../../../../node_modules.asar.unpacked/vscode-oniguruma/release/onig.wasm', require).toString(true) - : FileAccess.asBrowserUri('../../../../../../node_modules/vscode-oniguruma/release/onig.wasm', require).toString(true)); + ? FileAccess.asBrowserUri(`${nodeModulesAsarUnpackedPath}/vscode-oniguruma/release/onig.wasm`).toString(true) + : FileAccess.asBrowserUri(`${nodeModulesPath}/vscode-oniguruma/release/onig.wasm`).toString(true)); return response; } diff --git a/src/vs/workbench/services/textMate/browser/textMateWorker.ts b/src/vs/workbench/services/textMate/browser/textMateWorker.ts index 9c4339175eb..ff7f393d33a 100644 --- a/src/vs/workbench/services/textMate/browser/textMateWorker.ts +++ b/src/vs/workbench/services/textMate/browser/textMateWorker.ts @@ -15,9 +15,14 @@ import type { IRawTheme, IOnigLib } from 'vscode-textmate'; import { ContiguousMultilineTokensBuilder } from 'vs/editor/common/tokens/contiguousMultilineTokensBuilder'; import { countEOL } from 'vs/editor/common/core/eolCounter'; import { LineTokens } from 'vs/editor/common/tokens/lineTokens'; -import { FileAccess } from 'vs/base/common/network'; +import { AppResourcePath, FileAccess, nodeModulesAsarPath, nodeModulesPath } from 'vs/base/common/network'; import { TMTokenization } from 'vs/workbench/services/textMate/common/TMTokenization'; +const textmateModuleLocation: AppResourcePath = `${nodeModulesPath}/vscode-textmate`; +const textmateModuleLocationAsar: AppResourcePath = `${nodeModulesAsarPath}/vscode-textmate`; +const onigurumaModuleLocation: AppResourcePath = `${nodeModulesPath}/vscode-oniguruma`; +const onigurumaModuleLocationAsar: AppResourcePath = `${nodeModulesAsarPath}/vscode-oniguruma`; + export interface IValidGrammarDefinitionDTO { location: UriComponents; language?: string; @@ -153,15 +158,17 @@ export class TextMateWorker { } private async _loadTMGrammarFactory(grammarDefinitions: IValidGrammarDefinition[]): Promise<TMGrammarFactory> { - require.config({ - paths: { - 'vscode-textmate': '../node_modules/vscode-textmate/release/main', - 'vscode-oniguruma': '../node_modules/vscode-oniguruma/release/main', - } - }); - const vscodeTextmate = await import('vscode-textmate'); - const vscodeOniguruma = await import('vscode-oniguruma'); - const response = await fetch(FileAccess.asBrowserUri('vscode-oniguruma/../onig.wasm', require).toString(true)); + // TODO: asar support + const useAsar = false; // this._environmentService.isBuilt && !isWeb + + const textmateLocation: AppResourcePath = useAsar ? textmateModuleLocation : textmateModuleLocationAsar; + const onigurumaLocation: AppResourcePath = useAsar ? onigurumaModuleLocation : onigurumaModuleLocationAsar; + const textmateMain: AppResourcePath = `${textmateLocation}/release/main.js`; + const onigurumaMain: AppResourcePath = `${onigurumaLocation}/release/main.js`; + const onigurumaWASM: AppResourcePath = `${onigurumaLocation}/release/onig.wasm`; + const vscodeTextmate = await import(FileAccess.asBrowserUri(textmateMain).toString(true)); + const vscodeOniguruma = await import(FileAccess.asBrowserUri(onigurumaMain).toString(true)); + const response = await fetch(FileAccess.asBrowserUri(onigurumaWASM).toString(true)); // 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. // We therefore use the non-streaming compiler :(. diff --git a/src/vs/workbench/services/themes/test/electron-browser/tokenStyleResolving.test.ts b/src/vs/workbench/services/themes/test/electron-browser/tokenStyleResolving.test.ts index d93a77294b0..c52a3ad504d 100644 --- a/src/vs/workbench/services/themes/test/electron-browser/tokenStyleResolving.test.ts +++ b/src/vs/workbench/services/themes/test/electron-browser/tokenStyleResolving.test.ts @@ -99,7 +99,7 @@ suite('Themes - TokenStyleResolving', () => { test('color defaults', async () => { const themeData = ColorThemeData.createUnloadedTheme('foo'); - themeData.location = FileAccess.asFileUri('./color-theme.json', require); + themeData.location = FileAccess.asFileUri('vs/workbench/services/themes/test/electron-browser/color-theme.json'); await themeData.ensureLoaded(extensionResourceLoaderService); assert.strictEqual(themeData.isLoaded, true); |