Skip to content

Commit 1fc60f8

Browse files
author
Eric Amodio
committed
Adds ExtensionContext.extensionRuntime - microsoft#104436
1 parent e429633 commit 1fc60f8

6 files changed

Lines changed: 42 additions & 1 deletion

File tree

src/vs/vscode.proposed.d.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2005,4 +2005,23 @@ declare module 'vscode' {
20052005
}
20062006

20072007
//#endregion
2008+
2009+
//#region https://github.com/microsoft/vscode/issues/104436
2010+
2011+
export enum ExtensionRuntime {
2012+
/**
2013+
* The extension is running in a NodeJS extension host. Runtime access to NodeJS APIs is available.
2014+
*/
2015+
Node = 1,
2016+
/**
2017+
* The extension is running in a Webworker extension host. Runtime access is limited to Webworker APIs.
2018+
*/
2019+
Webworker = 2
2020+
}
2021+
2022+
export interface ExtensionContext {
2023+
readonly extensionRuntime: ExtensionRuntime;
2024+
}
2025+
2026+
//#endregion
20082027
}

src/vs/workbench/api/common/extHost.api.impl.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
10361036
EventEmitter: Emitter,
10371037
ExtensionKind: extHostTypes.ExtensionKind,
10381038
ExtensionMode: extHostTypes.ExtensionMode,
1039+
ExtensionRuntime: extHostTypes.ExtensionRuntime,
10391040
CustomExecution: extHostTypes.CustomExecution,
10401041
CustomExecution2: extHostTypes.CustomExecution,
10411042
FileChangeType: extHostTypes.FileChangeType,

src/vs/workbench/api/common/extHostExtensionService.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensio
2525
import { Schemas } from 'vs/base/common/network';
2626
import { VSBuffer } from 'vs/base/common/buffer';
2727
import { ExtensionMemento } from 'vs/workbench/api/common/extHostMemento';
28-
import { RemoteAuthorityResolverError, ExtensionMode } from 'vs/workbench/api/common/extHostTypes';
28+
import { RemoteAuthorityResolverError, ExtensionMode, ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes';
2929
import { ResolvedAuthority, ResolvedOptions, RemoteAuthorityResolverErrorCode, IRemoteConnectionData } from 'vs/platform/remote/common/remoteAuthorityResolver';
3030
import { IInstantiationService, createDecorator } from 'vs/platform/instantiation/common/instantiation';
3131
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
@@ -71,6 +71,7 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
7171

7272
readonly _serviceBrand: undefined;
7373

74+
abstract readonly extensionRuntime: ExtensionRuntime;
7475

7576
private readonly _onDidChangeRemoteConnectionData = this._register(new Emitter<void>());
7677
public readonly onDidChangeRemoteConnectionData = this._onDidChangeRemoteConnectionData.event;
@@ -408,6 +409,10 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
408409
return that._storagePath.globalValue(extensionDescription);
409410
},
410411
get extensionMode() { return extensionMode; },
412+
get extensionRuntime() {
413+
checkProposedApiEnabled(extensionDescription);
414+
return that.extensionRuntime;
415+
},
411416
get environmentVariableCollection() { return that._extHostTerminalService.getEnvironmentVariableCollection(extensionDescription); }
412417
});
413418
});

src/vs/workbench/api/common/extHostTypes.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2777,6 +2777,17 @@ export enum ExtensionMode {
27772777
Test = 3,
27782778
}
27792779

2780+
export enum ExtensionRuntime {
2781+
/**
2782+
* The extension is running in a NodeJS extension host. Runtime access to NodeJS APIs is available.
2783+
*/
2784+
Node = 1,
2785+
/**
2786+
* The extension is running in a Webworker extension host. Runtime access is limited to Webworker APIs.
2787+
*/
2788+
Webworker = 2
2789+
}
2790+
27802791
//#endregion ExtensionContext
27812792

27822793
export enum StandardTokenType {

src/vs/workbench/api/node/extHostExtensionService.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { CLIServer } from 'vs/workbench/api/node/extHostCLIServer';
1414
import { URI } from 'vs/base/common/uri';
1515
import { Schemas } from 'vs/base/common/network';
1616
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
17+
import { ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes';
1718

1819
class NodeModuleRequireInterceptor extends RequireInterceptor {
1920

@@ -43,6 +44,8 @@ class NodeModuleRequireInterceptor extends RequireInterceptor {
4344

4445
export class ExtHostExtensionService extends AbstractExtHostExtensionService {
4546

47+
readonly extensionRuntime = ExtensionRuntime.Node;
48+
4649
protected async _beforeAlmostReadyToRunExtensions(): Promise<void> {
4750
// initialize API and register actors
4851
const extensionApiFactory = this._instaService.invokeFunction(createApiFactoryAndRegisterActors);

src/vs/workbench/api/worker/extHostExtensionService.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { AbstractExtHostExtensionService } from 'vs/workbench/api/common/extHost
99
import { URI } from 'vs/base/common/uri';
1010
import { RequireInterceptor } from 'vs/workbench/api/common/extHostRequireInterceptor';
1111
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
12+
import { ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes';
1213

1314
class WorkerRequireInterceptor extends RequireInterceptor {
1415

@@ -31,6 +32,7 @@ class WorkerRequireInterceptor extends RequireInterceptor {
3132
}
3233

3334
export class ExtHostExtensionService extends AbstractExtHostExtensionService {
35+
readonly extensionRuntime = ExtensionRuntime.Node;
3436

3537
private _fakeModules?: WorkerRequireInterceptor;
3638

0 commit comments

Comments
 (0)