Skip to content

Commit 4b09746

Browse files
authored
Merge pull request #1574 from cdr/transformer
Remove transformer file
2 parents f3edb1c + 870cf4f commit 4b09746

File tree

2 files changed

+133
-279
lines changed

2 files changed

+133
-279
lines changed

ci/vscode.patch

Lines changed: 118 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ index 7a2320d828..5768890636 100644
5050
yarnInstallBuildDependencies(); // node modules for watching, specific to host node version, not electron
5151
diff --git a/coder.js b/coder.js
5252
new 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+
+}
215280
diff --git a/src/vs/base/node/languagePacks.js b/src/vs/base/node/languagePacks.js
216281
index 2c64061da7..c0ef8faedd 100644
217282
--- a/src/vs/base/node/languagePacks.js
@@ -1604,10 +1669,10 @@ index 0000000000..1729ec2fa8
16041669
+}
16051670
diff --git a/src/vs/server/node/connection.ts b/src/vs/server/node/connection.ts
16061671
new 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-
+};
26352669
diff --git a/src/vs/server/node/util.ts b/src/vs/server/node/util.ts
26362670
new 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
}
31043134
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
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[] {
31603208
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
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+
}
31943265
diff --git a/src/vs/workbench/services/extensions/worker/extHost.services.ts b/src/vs/workbench/services/extensions/worker/extHost.services.ts
31953266
index 9056862945..0785d3391d 100644
31963267
--- a/src/vs/workbench/services/extensions/worker/extHost.services.ts

0 commit comments

Comments
 (0)