@@ -50,10 +50,10 @@ index 7a2320d828..5768890636 100644
5050 yarnInstallBuildDependencies(); // node modules for watching, specific to host node version, not electron
5151diff --git a/coder.js b/coder.js
5252new file mode 100644
53- index 0000000000..6aee0e46bc
53+ index 0000000000..d0a8f37714
5454--- /dev/null
5555+++ b/coder.js
56- @@ -0,0 +1,70 @@
56+ @@ -0,0 +1,69 @@
5757+ // This must be ran from VS Code's root.
5858+ const gulp = require("gulp");
5959+ const path = require("path");
@@ -77,7 +77,6 @@ index 0000000000..6aee0e46bc
7777+
7878+ const vscodeResources = [
7979+ "out-build/vs/server/fork.js",
80- + "out-build/vs/server/node/uriTransformer.js",
8180+ "!out-build/vs/server/doc/**",
8281+ "out-build/vs/workbench/services/extensions/worker/extensionHostWorkerMain.js",
8382+ "out-build/bootstrap.js",
@@ -212,6 +211,72 @@ index c52f7b3774..08a87fa970 100644
212211 ];
213212 const envKeys = Object.keys(env);
214213 envKeys
214+ diff --git a/src/vs/base/common/uriIpc.ts b/src/vs/base/common/uriIpc.ts
215+ index ef2291d49b..29b2f9dfc2 100644
216+ --- a/src/vs/base/common/uriIpc.ts
217+ +++ b/src/vs/base/common/uriIpc.ts
218+ @@ -5,6 +5,7 @@
219+
220+ import { URI, UriComponents } from 'vs/base/common/uri';
221+ import { MarshalledObject } from 'vs/base/common/marshalling';
222+ + import { Schemas } from './network';
223+
224+ export interface IURITransformer {
225+ transformIncoming(uri: UriComponents): UriComponents;
226+ @@ -31,29 +32,35 @@ function toJSON(uri: URI): UriComponents {
227+
228+ export class URITransformer implements IURITransformer {
229+
230+ - private readonly _uriTransformer: IRawURITransformer;
231+ -
232+ - constructor(uriTransformer: IRawURITransformer) {
233+ - this._uriTransformer = uriTransformer;
234+ + constructor(private readonly remoteAuthority: string) {
235+ }
236+
237+ + // NOTE@coder: Coming in from the browser it'll be vscode-remote so it needs
238+ + // to be transformed into file.
239+ public transformIncoming(uri: UriComponents): UriComponents {
240+ - const result = this._uriTransformer.transformIncoming(uri);
241+ - return (result === uri ? uri : toJSON(URI.from(result)));
242+ + return uri.scheme === Schemas.vscodeRemote
243+ + ? toJSON(URI.file(uri.path))
244+ + : uri;
245+ }
246+
247+ + // NOTE@coder: Going out to the browser it'll be file so it needs to be
248+ + // transformed into vscode-remote.
249+ public transformOutgoing(uri: UriComponents): UriComponents {
250+ - const result = this._uriTransformer.transformOutgoing(uri);
251+ - return (result === uri ? uri : toJSON(URI.from(result)));
252+ + return uri.scheme === Schemas.file
253+ + ? toJSON(URI.from({ authority: this.remoteAuthority, scheme: Schemas.vscodeRemote, path: uri.path }))
254+ + : uri;
255+ }
256+
257+ public transformOutgoingURI(uri: URI): URI {
258+ - const result = this._uriTransformer.transformOutgoing(uri);
259+ - return (result === uri ? uri : URI.from(result));
260+ + return uri.scheme === Schemas.file
261+ + ? URI.from({ authority: this.remoteAuthority, scheme: Schemas.vscodeRemote, path:uri.path })
262+ + : uri;
263+ }
264+
265+ public transformOutgoingScheme(scheme: string): string {
266+ - return this._uriTransformer.transformOutgoingScheme(scheme);
267+ + return scheme === Schemas.file
268+ + ? Schemas.vscodeRemote
269+ + : scheme;
270+ }
271+ }
272+
273+ @@ -152,4 +159,4 @@ export function transformAndReviveIncomingURIs<T>(obj: T, transformer: IURITrans
274+ return obj;
275+ }
276+ return result;
277+ - }
278+ \ No newline at end of file
279+ + }
215280diff --git a/src/vs/base/node/languagePacks.js b/src/vs/base/node/languagePacks.js
216281index 2c64061da7..c0ef8faedd 100644
217282--- a/src/vs/base/node/languagePacks.js
@@ -1604,10 +1669,10 @@ index 0000000000..1729ec2fa8
16041669+ }
16051670diff --git a/src/vs/server/node/connection.ts b/src/vs/server/node/connection.ts
16061671new file mode 100644
1607- index 0000000000..e37ffb747a
1672+ index 0000000000..8f52462797
16081673--- /dev/null
16091674+++ b/src/vs/server/node/connection.ts
1610- @@ -0,0 +1,158 @@
1675+ @@ -0,0 +1,157 @@
16111676+ import * as cp from 'child_process';
16121677+ import { getPathFromAmdModule } from 'vs/base/common/amd';
16131678+ import { VSBuffer } from 'vs/base/common/buffer';
@@ -1618,7 +1683,6 @@ index 0000000000..e37ffb747a
16181683+ import { ILogService } from 'vs/platform/log/common/log';
16191684+ import { getNlsConfiguration } from 'vs/server/node/nls';
16201685+ import { Protocol } from 'vs/server/node/protocol';
1621- + import { uriTransformerPath } from 'vs/server/node/util';
16221686+ import { IExtHostReadyMessage } from 'vs/workbench/services/extensions/common/extensionHostProtocol';
16231687+
16241688+ export abstract class Connection {
@@ -1723,7 +1787,7 @@ index 0000000000..e37ffb747a
17231787+ const config = await getNlsConfiguration(locale, this.environment.userDataPath);
17241788+ const proc = cp.fork(
17251789+ getPathFromAmdModule(require, 'bootstrap-fork'),
1726- + [ '--type=extensionHost', `--uriTransformerPath=${uriTransformerPath}` ],
1790+ + [ '--type=extensionHost' ],
17271791+ {
17281792+ env: {
17291793+ ...process.env,
@@ -2602,50 +2666,16 @@ index 0000000000..d1f14654cf
26022666+ return undefined;
26032667+ }
26042668+ }
2605- diff --git a/src/vs/server/node/uriTransformer.js b/src/vs/server/node/uriTransformer.js
2606- new file mode 100644
2607- index 0000000000..fc69441cf0
2608- --- /dev/null
2609- +++ b/src/vs/server/node/uriTransformer.js
2610- @@ -0,0 +1,24 @@
2611- + // This file is included via a regular Node require. I'm not sure how (or if)
2612- + // we can write this in Typescript and have it compile to non-AMD syntax.
2613- + module.exports = (remoteAuthority) => {
2614- + return {
2615- + transformIncoming: (uri) => {
2616- + switch (uri.scheme) {
2617- + case "vscode-remote": return { scheme: "file", path: uri.path };
2618- + default: return uri;
2619- + }
2620- + },
2621- + transformOutgoing: (uri) => {
2622- + switch (uri.scheme) {
2623- + case "file": return { scheme: "vscode-remote", authority: remoteAuthority, path: uri.path };
2624- + default: return uri;
2625- + }
2626- + },
2627- + transformOutgoingScheme: (scheme) => {
2628- + switch (scheme) {
2629- + case "file": return "vscode-remote";
2630- + default: return scheme;
2631- + }
2632- + },
2633- + };
2634- + };
26352669diff --git a/src/vs/server/node/util.ts b/src/vs/server/node/util.ts
26362670new file mode 100644
2637- index 0000000000..dd7fdf7b58
2671+ index 0000000000..fa47e993b4
26382672--- /dev/null
26392673+++ b/src/vs/server/node/util.ts
2640- @@ -0,0 +1,17 @@
2641- + import { getPathFromAmdModule } from 'vs/base/common/amd';
2642- + import { URITransformer, IRawURITransformer } from 'vs/base/common/uriIpc';
2674+ @@ -0,0 +1,13 @@
2675+ + import { URITransformer } from 'vs/base/common/uriIpc';
26432676+
2644- + export const uriTransformerPath = getPathFromAmdModule(require, 'vs/server/node/uriTransformer');
26452677+ export const getUriTransformer = (remoteAuthority: string): URITransformer => {
2646- + const rawURITransformerFactory = <any>require.__$__nodeRequire(uriTransformerPath);
2647- + const rawURITransformer = <IRawURITransformer>rawURITransformerFactory(remoteAuthority);
2648- + return new URITransformer(rawURITransformer);
2678+ + return new URITransformer(remoteAuthority);
26492679+ };
26502680+
26512681+ /**
@@ -3102,9 +3132,27 @@ index cfac383e8a..c535d38296 100644
31023132 return false;
31033133 }
31043134diff --git a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts
3105- index 9f8c6ac6f5..34cbaf087c 100644
3135+ index 9f8c6ac6f5..69b5f36203 100644
31063136--- a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts
31073137+++ b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts
3138+ @@ -5,7 +5,7 @@
3139+
3140+ import { Event, EventMultiplexer } from 'vs/base/common/event';
3141+ import {
3142+ - IExtensionManagementService, ILocalExtension, IGalleryExtension, InstallExtensionEvent, DidInstallExtensionEvent, IExtensionIdentifier, DidUninstallExtensionEvent, IReportedExtension, IGalleryMetadata, IExtensionGalleryService, INSTALL_ERROR_NOT_SUPPORTED
3143+ + IExtensionManagementService, ILocalExtension, IGalleryExtension, InstallExtensionEvent, DidInstallExtensionEvent, IExtensionIdentifier, DidUninstallExtensionEvent, IReportedExtension, IGalleryMetadata, IExtensionGalleryService
3144+ } from 'vs/platform/extensionManagement/common/extensionManagement';
3145+ import { IExtensionManagementServer, IExtensionManagementServerService } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
3146+ import { ExtensionType, isLanguagePackExtension, IExtensionManifest } from 'vs/platform/extensions/common/extensions';
3147+ @@ -15,7 +15,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
3148+ import { CancellationToken } from 'vs/base/common/cancellation';
3149+ import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
3150+ import { localize } from 'vs/nls';
3151+ - import { prefersExecuteOnUI, canExecuteOnWorkspace } from 'vs/workbench/services/extensions/common/extensionsUtil';
3152+ + import { prefersExecuteOnUI } from 'vs/workbench/services/extensions/common/extensionsUtil';
3153+ import { IProductService } from 'vs/platform/product/common/productService';
3154+ import { Schemas } from 'vs/base/common/network';
3155+ import { IDownloadService } from 'vs/platform/download/common/download';
31083156@@ -208,11 +208,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
31093157 if (!manifest) {
31103158 return Promise.reject(localize('Manifest is not found', "Installing Extension {0} failed: Manifest is not found.", gallery.displayName || gallery.name));
@@ -3158,9 +3206,18 @@ index 9e8352ac88..22a2d296f9 100644
31583206
31593207 export function getExtensionKind(manifest: IExtensionManifest, productService: IProductService, configurationService: IConfigurationService): ExtensionKind[] {
31603208diff --git a/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts b/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts
3161- index 79dd77aeb2..f8b58b034a 100644
3209+ index 79dd77aeb2..1d93c0f922 100644
31623210--- a/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts
31633211+++ b/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts
3212+ @@ -16,7 +16,7 @@ import { IInitData } from 'vs/workbench/api/common/extHost.protocol';
3213+ import { MessageType, createMessageOfType, isMessageOfType, IExtHostSocketMessage, IExtHostReadyMessage, IExtHostReduceGraceTimeMessage } from 'vs/workbench/services/extensions/common/extensionHostProtocol';
3214+ import { ExtensionHostMain, IExitFn } from 'vs/workbench/services/extensions/common/extensionHostMain';
3215+ import { VSBuffer } from 'vs/base/common/buffer';
3216+ - import { IURITransformer, URITransformer, IRawURITransformer } from 'vs/base/common/uriIpc';
3217+ + import { IURITransformer, URITransformer } from 'vs/base/common/uriIpc';
3218+ import { exists } from 'vs/base/node/pfs';
3219+ import { realpath } from 'vs/base/node/extpath';
3220+ import { IHostUtils } from 'vs/workbench/api/common/extHostExtensionService';
31643221@@ -55,12 +55,13 @@ const args = minimist(process.argv.slice(2), {
31653222 const Module = require.__$__nodeRequire('module') as any;
31663223 const originalLoad = Module._load;
@@ -3191,6 +3248,20 @@ index 79dd77aeb2..f8b58b034a 100644
31913248 });
31923249 }
31933250 }
3251+ @@ -307,11 +311,9 @@ export async function startExtensionHostProcess(): Promise<void> {
3252+
3253+ // Attempt to load uri transformer
3254+ let uriTransformer: IURITransformer | null = null;
3255+ - if (initData.remote.authority && args.uriTransformerPath) {
3256+ + if (initData.remote.authority) {
3257+ try {
3258+ - const rawURITransformerFactory = <any>require.__$__nodeRequire(args.uriTransformerPath);
3259+ - const rawURITransformer = <IRawURITransformer>rawURITransformerFactory(initData.remote.authority);
3260+ - uriTransformer = new URITransformer(rawURITransformer);
3261+ + uriTransformer = new URITransformer(initData.remote.authority);
3262+ } catch (e) {
3263+ console.error(e);
3264+ }
31943265diff --git a/src/vs/workbench/services/extensions/worker/extHost.services.ts b/src/vs/workbench/services/extensions/worker/extHost.services.ts
31953266index 9056862945..0785d3391d 100644
31963267--- a/src/vs/workbench/services/extensions/worker/extHost.services.ts
0 commit comments