@@ -50,10 +50,10 @@ index 7a2320d828..5768890636 100644
50
50
yarnInstallBuildDependencies(); // node modules for watching, specific to host node version, not electron
51
51
diff --git a/coder.js b/coder.js
52
52
new file mode 100644
53
- index 0000000000..6aee0e46bc
53
+ index 0000000000..d0a8f37714
54
54
--- /dev/null
55
55
+++ b/coder.js
56
- @@ -0,0 +1,70 @@
56
+ @@ -0,0 +1,69 @@
57
57
+ // This must be ran from VS Code's root.
58
58
+ const gulp = require("gulp");
59
59
+ const path = require("path");
@@ -77,7 +77,6 @@ index 0000000000..6aee0e46bc
77
77
+
78
78
+ const vscodeResources = [
79
79
+ "out-build/vs/server/fork.js",
80
- + "out-build/vs/server/node/uriTransformer.js",
81
80
+ "!out-build/vs/server/doc/**",
82
81
+ "out-build/vs/workbench/services/extensions/worker/extensionHostWorkerMain.js",
83
82
+ "out-build/bootstrap.js",
@@ -212,6 +211,72 @@ index c52f7b3774..08a87fa970 100644
212
211
];
213
212
const envKeys = Object.keys(env);
214
213
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
+ + }
215
280
diff --git a/src/vs/base/node/languagePacks.js b/src/vs/base/node/languagePacks.js
216
281
index 2c64061da7..c0ef8faedd 100644
217
282
--- a/src/vs/base/node/languagePacks.js
@@ -1604,10 +1669,10 @@ index 0000000000..1729ec2fa8
1604
1669
+ }
1605
1670
diff --git a/src/vs/server/node/connection.ts b/src/vs/server/node/connection.ts
1606
1671
new file mode 100644
1607
- index 0000000000..e37ffb747a
1672
+ index 0000000000..8f52462797
1608
1673
--- /dev/null
1609
1674
+++ b/src/vs/server/node/connection.ts
1610
- @@ -0,0 +1,158 @@
1675
+ @@ -0,0 +1,157 @@
1611
1676
+ import * as cp from 'child_process';
1612
1677
+ import { getPathFromAmdModule } from 'vs/base/common/amd';
1613
1678
+ import { VSBuffer } from 'vs/base/common/buffer';
@@ -1618,7 +1683,6 @@ index 0000000000..e37ffb747a
1618
1683
+ import { ILogService } from 'vs/platform/log/common/log';
1619
1684
+ import { getNlsConfiguration } from 'vs/server/node/nls';
1620
1685
+ import { Protocol } from 'vs/server/node/protocol';
1621
- + import { uriTransformerPath } from 'vs/server/node/util';
1622
1686
+ import { IExtHostReadyMessage } from 'vs/workbench/services/extensions/common/extensionHostProtocol';
1623
1687
+
1624
1688
+ export abstract class Connection {
@@ -1723,7 +1787,7 @@ index 0000000000..e37ffb747a
1723
1787
+ const config = await getNlsConfiguration(locale, this.environment.userDataPath);
1724
1788
+ const proc = cp.fork(
1725
1789
+ getPathFromAmdModule(require, 'bootstrap-fork'),
1726
- + [ '--type=extensionHost', `--uriTransformerPath=${uriTransformerPath}` ],
1790
+ + [ '--type=extensionHost' ],
1727
1791
+ {
1728
1792
+ env: {
1729
1793
+ ...process.env,
@@ -2602,50 +2666,16 @@ index 0000000000..d1f14654cf
2602
2666
+ return undefined;
2603
2667
+ }
2604
2668
+ }
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
- + };
2635
2669
diff --git a/src/vs/server/node/util.ts b/src/vs/server/node/util.ts
2636
2670
new file mode 100644
2637
- index 0000000000..dd7fdf7b58
2671
+ index 0000000000..fa47e993b4
2638
2672
--- /dev/null
2639
2673
+++ 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';
2643
2676
+
2644
- + export const uriTransformerPath = getPathFromAmdModule(require, 'vs/server/node/uriTransformer');
2645
2677
+ 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);
2649
2679
+ };
2650
2680
+
2651
2681
+ /**
@@ -3102,9 +3132,27 @@ index cfac383e8a..c535d38296 100644
3102
3132
return false;
3103
3133
}
3104
3134
diff --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
3106
3136
--- a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts
3107
3137
+++ 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';
3108
3156
@@ -208,11 +208,7 @@ export class ExtensionManagementService extends Disposable implements IExtension
3109
3157
if (!manifest) {
3110
3158
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
3158
3206
3159
3207
export function getExtensionKind(manifest: IExtensionManifest, productService: IProductService, configurationService: IConfigurationService): ExtensionKind[] {
3160
3208
diff --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
3162
3210
--- a/src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts
3163
3211
+++ 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';
3164
3221
@@ -55,12 +55,13 @@ const args = minimist(process.argv.slice(2), {
3165
3222
const Module = require.__$__nodeRequire('module') as any;
3166
3223
const originalLoad = Module._load;
@@ -3191,6 +3248,20 @@ index 79dd77aeb2..f8b58b034a 100644
3191
3248
});
3192
3249
}
3193
3250
}
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
+ }
3194
3265
diff --git a/src/vs/workbench/services/extensions/worker/extHost.services.ts b/src/vs/workbench/services/extensions/worker/extHost.services.ts
3195
3266
index 9056862945..0785d3391d 100644
3196
3267
--- a/src/vs/workbench/services/extensions/worker/extHost.services.ts
0 commit comments