Skip to content

Commit d78f2ce

Browse files
committed
Fix issues surrounding IPC interfaces. Update names.
1 parent f0607e9 commit d78f2ce

File tree

9 files changed

+79
-98
lines changed

9 files changed

+79
-98
lines changed

src/vs/base/common/ipc.d.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Coder Technologies. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
16
/**
27
* External interfaces for integration into code-server over IPC.
3-
* This file exists in two locations:
4-
* - typings/ipc.d.ts
5-
* - lib/vscode/src/typings/ipc.d.ts
6-
* The second is a symlink to the first.
78
*/
8-
export interface Options {
9+
export interface CodeServerConfiguration {
910
authed: boolean
1011
base: string
1112
csStaticBase: string
@@ -16,7 +17,7 @@ export interface Options {
1617
export interface InitMessage {
1718
type: 'init'
1819
id: string
19-
options: VscodeOptions
20+
options: VscodeInitializationOptions
2021
}
2122

2223
export type Query = { [key: string]: string | string[] | undefined | Query | Query[] }
@@ -81,13 +82,13 @@ export interface Args {
8182
_: string[]
8283
}
8384

84-
export interface VscodeOptions {
85+
export interface VscodeInitializationOptions {
8586
readonly args: Args
8687
readonly remoteAuthority: string
8788
readonly startPath?: StartPath
8889
}
8990

90-
export interface VscodeOptionsMessage extends VscodeOptions {
91+
export interface VscodeInitializationOptionsMessage extends VscodeInitializationOptions {
9192
readonly id: string
9293
}
9394

src/vs/base/common/uriServer.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Coder Technologies. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { IRawURITransformer, UriParts, URITransformer } from 'vs/base/common/uriIpc';
7+
8+
class RawURITransformer implements IRawURITransformer {
9+
constructor(private readonly authority: string) { }
10+
11+
transformIncoming(uri: UriParts): UriParts {
12+
switch (uri.scheme) {
13+
case 'vscode-remote':
14+
return { scheme: 'file', path: uri.path };
15+
default:
16+
return uri;
17+
}
18+
}
19+
20+
transformOutgoing(uri: UriParts): UriParts {
21+
switch (uri.scheme) {
22+
case 'file':
23+
return { scheme: 'vscode-remote', authority: this.authority, path: uri.path };
24+
default:
25+
return uri;
26+
}
27+
}
28+
29+
transformOutgoingScheme(scheme: string): string {
30+
switch (scheme) {
31+
case 'file':
32+
return 'vscode-remote';
33+
default:
34+
return scheme;
35+
}
36+
}
37+
}
38+
39+
/**
40+
* Convenience function, given that a server's raw URI transformer is often wrapped
41+
* by VSCode's `URITransformer`.
42+
*/
43+
export function createServerURITransformer(authority: string) {
44+
return new URITransformer(new RawURITransformer(authority));
45+
}

src/vs/server/channel.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import { IRemoteAgentEnvironment, RemoteAgentConnectionContext } from 'vs/platfo
2626
import { ITelemetryData, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
2727
import { IShellLaunchConfig, ITerminalEnvironment } from 'vs/platform/terminal/common/terminal';
2828
import { getTranslations } from 'vs/server/nls';
29-
import { getUriTransformer } from 'vs/server/util';
3029
import { IFileChangeDto } from 'vs/workbench/api/common/extHost.protocol';
3130
import { IEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable';
3231
import { MergedEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariableCollection';
@@ -36,6 +35,7 @@ import * as terminalEnvironment from 'vs/workbench/contrib/terminal/common/termi
3635
import { AbstractVariableResolverService } from 'vs/workbench/services/configurationResolver/common/variableResolver';
3736
import { ExtensionScanner, ExtensionScannerInput } from 'vs/workbench/services/extensions/node/extensionPoints';
3837
import { PtyHostService } from 'vs/platform/terminal/node/ptyHostService';
38+
import { createServerURITransformer } from 'vs/base/common/uriServer';
3939

4040
const logger = new ConsoleLogger();
4141

@@ -86,7 +86,7 @@ export class FileProviderChannel implements IServerChannel<RemoteAgentConnection
8686
onFirstListenerAdd: () => {
8787
const provider = new Watcher(this.logService);
8888
this.watchers.set(session, provider);
89-
const transformer = getUriTransformer(context.remoteAuthority);
89+
const transformer = createServerURITransformer(context.remoteAuthority);
9090
provider.onDidChangeFile((events) => {
9191
emitter.fire(events.map((event) => ({
9292
...event,
@@ -238,12 +238,12 @@ export class ExtensionEnvironmentChannel implements IServerChannel {
238238
case 'getEnvironmentData':
239239
return transformOutgoingURIs(
240240
await this.getEnvironmentData(),
241-
getUriTransformer(context.remoteAuthority),
241+
createServerURITransformer(context.remoteAuthority),
242242
);
243243
case 'scanExtensions':
244244
return transformOutgoingURIs(
245245
await this.scanExtensions(args.language),
246-
getUriTransformer(context.remoteAuthority),
246+
createServerURITransformer(context.remoteAuthority),
247247
);
248248
case 'getDiagnosticInfo': return this.getDiagnosticInfo();
249249
case 'disableTelemetry': return this.disableTelemetry();
@@ -559,6 +559,6 @@ export class TerminalProviderChannel implements IServerChannel<RemoteAgentConnec
559559
}
560560

561561
function transformIncoming(remoteAuthority: string, uri: UriComponents | undefined): URI | undefined {
562-
const transformer = getUriTransformer(remoteAuthority);
562+
const transformer = createServerURITransformer(remoteAuthority);
563563
return uri ? URI.revive(transformer.transformIncoming(uri)) : uri;
564564
}

src/vs/server/entry.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { setUnexpectedErrorHandler } from 'vs/base/common/errors';
77
import * as proxyAgent from 'vs/base/node/proxy_agent';
88
import { CodeServerMessage, VscodeMessage } from 'vs/base/common/ipc';
99
import { enableCustomMarketplace } from 'vs/server/marketplace';
10-
import { Vscode } from 'vs/server/server';
10+
import { VscodeServer } from 'vs/server/server';
1111
import { ConsoleMainLogger } from 'vs/platform/log/common/log';
1212

1313
const logger = new ConsoleMainLogger();
@@ -41,7 +41,7 @@ if (typeof process.env.CODE_SERVER_PARENT_PID !== 'undefined') {
4141
exit(1);
4242
}
4343

44-
const vscode = new Vscode();
44+
const vscode = new VscodeServer();
4545
const send = (message: VscodeMessage): void => {
4646
if (!process.send) {
4747
throw new Error('not spawned with IPC');
@@ -57,8 +57,9 @@ process.on('message', async (message: CodeServerMessage, socket) => {
5757
switch (message.type) {
5858
case 'init':
5959
try {
60-
const options = await vscode.initialize(message.options);
61-
send({ type: 'options', id: message.id, options });
60+
const workbenchOptions = await vscode.initialize(message.options);
61+
62+
send({ type: 'options', id: message.id, options: workbenchOptions });
6263
} catch (error) {
6364
logger.error(error.message);
6465
logger.error(error.stack);

src/vs/server/server.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { URI } from 'vs/base/common/uri';
1313
import { getMachineId } from 'vs/base/node/id';
1414
import { ClientConnectionEvent, IPCServer, IServerChannel, ProxyChannel } from 'vs/base/parts/ipc/common/ipc';
1515
import { main } from 'vs/code/node/cliProcessMain';
16-
import { Query, VscodeOptions, WorkbenchOptions } from 'vs/base/common/ipc';
16+
import { Query, VscodeInitializationOptions, WorkbenchOptions } from 'vs/base/common/ipc';
1717
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1818
import { ConfigurationService } from 'vs/platform/configuration/common/configurationService';
1919
import { ExtensionHostDebugBroadcastChannel } from 'vs/platform/debug/common/extensionHostDebugIpc';
@@ -55,17 +55,20 @@ import { Connection, ExtensionHostConnection, ManagementConnection } from 'vs/se
5555
import { TelemetryClient } from 'vs/server/insights';
5656
import { getLocaleFromConfig, getNlsConfiguration } from 'vs/server/nls';
5757
import { Protocol } from 'vs/server/protocol';
58-
import { getUriTransformer } from 'vs/server/util';
5958
import { REMOTE_TERMINAL_CHANNEL_NAME } from 'vs/workbench/contrib/terminal/common/remoteTerminalChannel';
6059
import { REMOTE_FILE_SYSTEM_CHANNEL_NAME } from 'vs/workbench/services/remote/common/remoteAgentFileSystemChannel';
6160
import { RemoteExtensionLogFileName } from 'vs/workbench/services/remote/common/remoteAgentService';
6261
import { PtyHostService } from 'vs/platform/terminal/node/ptyHostService';
6362
import { LogsDataCleaner } from 'vs/code/electron-browser/sharedProcess/contrib/logsDataCleaner';
63+
import { createServerURITransformer } from 'vs/base/common/uriServer';
6464

6565
const commit = product.commit || 'development';
6666
const logger = new ConsoleMainLogger();
6767

68-
export class Vscode {
68+
/**
69+
* Handles client connections to a VSCode instance via IPC.
70+
*/
71+
export class VscodeServer {
6972
public readonly _onDidClientConnect = new Emitter<ClientConnectionEvent>();
7073
public readonly onDidClientConnect = this._onDidClientConnect.event;
7174
private readonly ipc = new IPCServer<RemoteAgentConnectionContext>(this.onDidClientConnect);
@@ -80,8 +83,8 @@ export class Vscode {
8083
return main(args);
8184
}
8285

83-
public async initialize(options: VscodeOptions): Promise<WorkbenchOptions> {
84-
const transformer = getUriTransformer(options.remoteAuthority);
86+
public async initialize(options: VscodeInitializationOptions): Promise<WorkbenchOptions> {
87+
const transformer = createServerURITransformer(options.remoteAuthority);
8588
if (!this.servicesPromise) {
8689
this.servicesPromise = this.initializeServices(options.args);
8790
}
@@ -299,7 +302,7 @@ export class Vscode {
299302

300303
this.ipc.registerChannel('extensions', new ExtensionManagementChannel(
301304
accessor.get(IExtensionManagementService),
302-
(context) => getUriTransformer(context.remoteAuthority),
305+
(context) => createServerURITransformer(context.remoteAuthority),
303306
));
304307
this.ipc.registerChannel('remoteextensionsenvironment', new ExtensionEnvironmentChannel(
305308
environmentService, logService, telemetryService, '',

src/vs/server/uriTransformer.ts

Lines changed: 0 additions & 58 deletions
This file was deleted.

src/vs/server/util.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/vs/workbench/browser/client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as path from 'vs/base/common/path';
7-
import { Options } from 'vs/base/common/ipc';
7+
import { CodeServerConfiguration } from 'vs/base/common/ipc';
88
import { localize } from 'vs/nls';
99
import { MenuId, MenuRegistry } from 'vs/platform/actions/common/actions';
1010
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
@@ -22,7 +22,7 @@ import 'vs/workbench/services/localizations/browser/localizationsService';
2222
* possible.
2323
*/
2424

25-
const options = getOptions<Options>();
25+
const options = getOptions<CodeServerConfiguration>();
2626

2727
/**
2828
* This is called by vs/workbench/browser/web.main.ts after the workbench has

src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import { IInitData } from 'vs/workbench/api/common/extHost.protocol';
1717
import { MessageType, createMessageOfType, isMessageOfType, IExtHostSocketMessage, IExtHostReadyMessage, IExtHostReduceGraceTimeMessage, ExtensionHostExitCode } from 'vs/workbench/services/extensions/common/extensionHostProtocol';
1818
import { ExtensionHostMain, IExitFn } from 'vs/workbench/services/extensions/common/extensionHostMain';
1919
import { VSBuffer } from 'vs/base/common/buffer';
20-
import { IURITransformer, URITransformer, IRawURITransformer } from 'vs/base/common/uriIpc';
20+
import { IURITransformer } from 'vs/base/common/uriIpc';
21+
import { createServerURITransformer } from 'vs/base/common/uriServer';
2122
import { exists } from 'vs/base/node/pfs';
2223
import { realpath } from 'vs/base/node/extpath';
2324
import { IHostUtils } from 'vs/workbench/api/common/extHostExtensionService';
@@ -339,11 +340,10 @@ export async function startExtensionHostProcess(): Promise<void> {
339340

340341
// Attempt to load uri transformer
341342
let uriTransformer: IURITransformer | null = null;
343+
342344
if (initData.remote.authority && args.uriTransformerPath) {
343345
try {
344-
const rawURITransformerFactory = <any>require.__$__nodeRequire(args.uriTransformerPath);
345-
const rawURITransformer = <IRawURITransformer>rawURITransformerFactory(initData.remote.authority);
346-
uriTransformer = new URITransformer(rawURITransformer);
346+
uriTransformer = createServerURITransformer(initData.remote.authority);
347347
} catch (e) {
348348
console.error(e);
349349
}

0 commit comments

Comments
 (0)