refine remoteAuthority-api, #74188

This commit is contained in:
Johannes Rieken 2019-05-28 17:59:52 +02:00
parent 8c35807271
commit a429fd1356
2 changed files with 27 additions and 9 deletions

18
src/vs/vscode.d.ts vendored
View file

@ -6042,15 +6042,19 @@ declare module 'vscode' {
export function openExternal(target: Uri): Thenable<boolean>;
/**
* The [authority](#Uri.authority)-component. When `undefined`, extensions are
* executed in the same context (e.g. operating system or machine) in which the UI
* of the editor is executed. If defined, extensions are running in a different
* context, for instance a remote machine.
* Information about running remotely. When `undefined`, extensions are executed in the same
* context (e.g. operating system or machine) in which the UI of the editor is executed.
* If defined, extensions are running in a different context, for instance a remote machine.
*
* *Note* that no assumptions about the actual value should be made as it is defined
* by extensions and not by the editor.
* A remote [uri](#Uri) adheres to this format: `remote_scheme://auth_prefix+auth_rest/path` where
* the `remote_scheme` is defined by the editor, `auth_prefix` and `auth_rest` are defined by extensions,
* and `path` is defined by the user.
*
* Extensions contributing a remote are encouraged to use a stable `auth_prefix`-value,
* e.g `remote_scheme://ssh+23/` and `remote_scheme://ssh+42`. Such prefix is exposed
* in the `prefix`-property of the returned object.
*/
export const remoteAuthority: string | undefined;
export const remoteAuthority: { prefix: string } | undefined;
}
/**

View file

@ -236,7 +236,7 @@ export function createApiFactory(
};
// namespace: env
const env: typeof vscode.env = Object.freeze({
const env: typeof vscode.env = Object.freeze<typeof vscode.env>({
get machineId() { return initData.telemetryInfo.machineId; },
get sessionId() { return initData.telemetryInfo.sessionId; },
get language() { return initData.environment.appLanguage; },
@ -257,7 +257,21 @@ export function createApiFactory(
openExternal(uri: URI) {
return extHostWindow.openUri(uri, { allowTunneling: !!initData.remoteAuthority });
},
get remoteAuthority() { return initData.remoteAuthority || undefined; }
get remoteAuthority() {
const { remoteAuthority } = initData;
if (!remoteAuthority) {
return undefined;
}
const idx = remoteAuthority.indexOf('+');
if (idx < 0) {
console.warn(`INVALID remote authority: ${remoteAuthority}`);
return undefined;
}
return {
prefix: remoteAuthority.substring(0, idx),
toString() { return remoteAuthority; } // compatiblity
};
}
});
// namespace: extensions