UNPKG

@codingame/monaco-vscode-extensions-service-override

Version:

VSCode public API plugged on the monaco editor - extensions service-override

182 lines (178 loc) 6.95 kB
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6'; import { Barrier } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async'; import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event'; import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle'; import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation'; import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service'; import { RemoteAuthorityResolverErrorCode } from '@codingame/monaco-vscode-api/vscode/vs/platform/remote/common/remoteAuthorityResolver'; import { friendlyExtHostName, ExtensionHostManager } from './extensionHostManager.js'; import { ActivationKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions'; let LazyCreateExtensionHostManager = class LazyCreateExtensionHostManager extends Disposable { get pid() { if (this._actual) { return this._actual.pid; } return null; } get kind() { return this._extensionHost.runningLocation.kind; } get startup() { return this._extensionHost.startup; } get friendyName() { return friendlyExtHostName(this.kind, this.pid); } constructor( extensionHost, _initialActivationEvents, _internalExtensionService, _instantiationService, _logService ) { super(); this._initialActivationEvents = _initialActivationEvents; this._internalExtensionService = _internalExtensionService; this._instantiationService = _instantiationService; this._logService = _logService; this._onDidChangeResponsiveState = this._register(( new Emitter())); this.onDidChangeResponsiveState = this._onDidChangeResponsiveState.event; this._extensionHost = extensionHost; this.onDidExit = extensionHost.onExit; this._startCalled = ( new Barrier()); this._actual = null; } dispose() { if (!this._actual) { this._extensionHost.dispose(); } super.dispose(); } _createActual(reason) { this._logService.info(`Creating lazy extension host (${this.friendyName}). Reason: ${reason}`); this._actual = this._register(this._instantiationService.createInstance( ExtensionHostManager, this._extensionHost, this._initialActivationEvents, this._internalExtensionService )); this._register( this._actual.onDidChangeResponsiveState(e => this._onDidChangeResponsiveState.fire(e)) ); return this._actual; } async _getOrCreateActualAndStart(reason) { if (this._actual) { return this._actual; } const actual = this._createActual(reason); await actual.ready(); return actual; } get isReady() { return this._startCalled.isOpen() && (this._actual?.isReady ?? false); } async ready() { await this._startCalled.wait(); if (this._actual) { await this._actual.ready(); } } async disconnect() { await this._actual?.disconnect(); } representsRunningLocation(runningLocation) { return this._extensionHost.runningLocation.equals(runningLocation); } async deltaExtensions(extensionsDelta) { await this._startCalled.wait(); if (this._actual) { return this._actual.deltaExtensions(extensionsDelta); } if (extensionsDelta.myToAdd.length > 0) { const actual = this._createActual( `contains ${extensionsDelta.myToAdd.length} new extension(s) (installed or enabled): ${( extensionsDelta.myToAdd.map(extId => extId.value))}` ); await actual.ready(); return; } } containsExtension(extensionId) { return this._extensionHost.extensions?.containsExtension(extensionId) ?? false; } async activate(extension, reason) { await this._startCalled.wait(); if (this._actual) { return this._actual.activate(extension, reason); } return false; } async activateByEvent(activationEvent, activationKind) { if (activationKind === ActivationKind.Immediate) { if (this._actual) { return this._actual.activateByEvent(activationEvent, activationKind); } return; } await this._startCalled.wait(); if (this._actual) { return this._actual.activateByEvent(activationEvent, activationKind); } } activationEventIsDone(activationEvent) { if (!this._startCalled.isOpen()) { return false; } if (this._actual) { return this._actual.activationEventIsDone(activationEvent); } return true; } async getInspectPort(tryEnableInspector) { await this._startCalled.wait(); return this._actual?.getInspectPort(tryEnableInspector); } async resolveAuthority(remoteAuthority, resolveAttempt) { await this._startCalled.wait(); if (this._actual) { return this._actual.resolveAuthority(remoteAuthority, resolveAttempt); } return { type: "error", error: { message: `Cannot resolve authority`, code: RemoteAuthorityResolverErrorCode.Unknown, detail: undefined } }; } async getCanonicalURI(remoteAuthority, uri) { await this._startCalled.wait(); if (this._actual) { return this._actual.getCanonicalURI(remoteAuthority, uri); } throw ( new Error(`Cannot resolve canonical URI`)); } async start(extensionRegistryVersionId, allExtensions, myExtensions) { if (myExtensions.length > 0) { const actual = this._createActual(`contains ${myExtensions.length} extension(s): ${( myExtensions.map(extId => extId.value))}.`); const result = actual.ready(); this._startCalled.open(); return result; } this._startCalled.open(); } async extensionTestsExecute() { await this._startCalled.wait(); const actual = await this._getOrCreateActualAndStart(`execute tests.`); return actual.extensionTestsExecute(); } async setRemoteEnvironment(env) { await this._startCalled.wait(); if (this._actual) { return this._actual.setRemoteEnvironment(env); } } }; LazyCreateExtensionHostManager = ( __decorate([( __param(3, IInstantiationService)), ( __param(4, ILogService))], LazyCreateExtensionHostManager)); export { LazyCreateExtensionHostManager };