@codingame/monaco-vscode-extensions-service-override
Version:
VSCode public API plugged on the monaco editor - extensions service-override
275 lines (272 loc) • 19.8 kB
JavaScript
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
import { IFileService } from 'vscode/vscode/vs/platform/files/common/files.service';
import { ILifecycleService } from 'vscode/vscode/vs/workbench/services/lifecycle/common/lifecycle.service';
import { IExtensionService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions.service';
import { ILogService, ILoggerService } from 'vscode/vscode/vs/platform/log/common/log.service';
import { IWorkspaceContextService } from 'vscode/vscode/vs/platform/workspace/common/workspace.service';
import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
import { INotificationService } from 'vscode/vscode/vs/platform/notification/common/notification.service';
import { DeltaExtensionsQueueItem } from './vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js';
import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry.service';
import { IDialogService } from 'vscode/vscode/vs/platform/dialogs/common/dialogs.service';
import { IRemoteAuthorityResolverService } from 'vscode/vscode/vs/platform/remote/common/remoteAuthorityResolver.service';
import { IRemoteExtensionsScannerService } from 'vscode/vscode/vs/platform/remote/common/remoteExtensionsScanner.service';
import { IRemoteAgentService } from 'vscode/vscode/vs/workbench/services/remote/common/remoteAgentService.service';
import { IWorkbenchExtensionEnablementService, IWorkbenchExtensionManagementService, IWebExtensionsScannerService } from 'vscode/vscode/vs/workbench/services/extensionManagement/common/extensionManagement.service';
import { ExtensionManifestPropertiesService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService';
import { IExtensionManifestPropertiesService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService.service';
import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration.service';
import { IProductService } from 'vscode/vscode/vs/platform/product/common/productService.service';
import { IBrowserWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/browser/environmentService.service';
import { SyncDescriptor } from 'vscode/vscode/vs/platform/instantiation/common/descriptors';
import { IUserDataInitializationService } from 'vscode/vscode/vs/workbench/services/userData/browser/userDataInit.service';
import { ExtensionsProposedApi } from './vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js';
import { BrowserExtensionHostFactory, BrowserExtensionHostKindPicker, ExtensionService } from './vscode/src/vs/workbench/services/extensions/browser/extensionService.js';
export { ExtensionHostKind } from 'vscode/vscode/vs/workbench/services/extensions/common/extensionHostKind';
import { WebWorkerExtensionHost } from './vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js';
import { IUserDataProfilesService } from 'vscode/vscode/vs/platform/userDataProfile/common/userDataProfile.service';
import { ILayoutService } from 'vscode/vscode/vs/platform/layout/browser/layoutService.service';
import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage.service';
import { ILabelService } from 'vscode/vscode/vs/platform/label/common/label.service';
import { IUserDataProfileService } from 'vscode/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
import { IWorkspaceTrustManagementService } from 'vscode/vscode/vs/platform/workspace/common/workspaceTrust.service';
import { IRemoteExplorerService } from 'vscode/vscode/vs/workbench/services/remote/common/remoteExplorerService.service';
import { ExtensionResourceLoaderService } from './vscode/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.js';
import { IExtensionResourceLoaderService } from 'vscode/vscode/vs/platform/extensionResourceLoader/common/extensionResourceLoader.service';
import { ExtensionBisectService } from './vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js';
import { IExtensionBisectService } from 'vscode/vscode/vs/workbench/services/extensionManagement/browser/extensionBisect.service';
import { changeUrlDomain } from './tools/url.js';
import { CustomSchemas } from '@codingame/monaco-vscode-files-service-override';
import { registerAssets } from 'vscode/assets';
import { getForcedExtensionHostKind } from 'vscode/extensions';
import './vscode/src/vs/workbench/api/browser/mainThreadLocalization.js';
import './vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.js';
import './vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js';
import './vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js';
import './vscode/src/vs/workbench/api/browser/mainThreadChatVariables.js';
import './vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js';
import './vscode/src/vs/workbench/api/browser/mainThreadEmbeddings.js';
import './vscode/src/vs/workbench/api/browser/mainThreadCodeInsets.js';
import './vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js';
import './vscode/src/vs/workbench/api/browser/mainThreadClipboard.js';
import './vscode/src/vs/workbench/api/browser/mainThreadCommands.js';
import './vscode/src/vs/workbench/api/browser/mainThreadConfiguration.js';
import './vscode/src/vs/workbench/api/browser/mainThreadConsole.js';
import './vscode/src/vs/workbench/api/browser/mainThreadDebugService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadDecorations.js';
import './vscode/src/vs/workbench/api/browser/mainThreadDiagnostics.js';
import './vscode/src/vs/workbench/api/browser/mainThreadDialogs.js';
import './vscode/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.js';
import './vscode/src/vs/workbench/api/browser/mainThreadDocuments.js';
import './vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js';
import 'vscode/vscode/vs/base/common/event';
import 'vscode/vscode/vs/base/common/lifecycle';
import 'vscode/vscode/vs/editor/common/config/editorOptions';
import 'vscode/vscode/vs/editor/common/core/selection';
import 'vscode/vscode/vs/editor/common/editorCommon';
import 'vscode/vscode/vs/editor/contrib/snippet/browser/snippetController2';
import 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
import 'vscode/vscode/vs/base/common/arrays';
import 'vscode/vscode/vs/editor/contrib/editorState/browser/editorState';
import 'vscode/vscode/vs/editor/contrib/snippet/browser/snippetParser';
import './vscode/src/vs/workbench/api/browser/mainThreadEditors.js';
import './vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js';
import './vscode/src/vs/workbench/api/browser/mainThreadErrors.js';
import './vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadFileSystem.js';
import './vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js';
import './vscode/src/vs/workbench/api/browser/mainThreadLanguages.js';
import './vscode/src/vs/workbench/api/browser/mainThreadLogService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadMessageService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadManagedSockets.js';
import './vscode/src/vs/workbench/api/browser/mainThreadOutputService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadProgress.js';
import './vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.js';
import './vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.js';
import './vscode/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.js';
import './vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js';
import './vscode/src/vs/workbench/api/browser/mainThreadSpeech.js';
import './vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js';
import './vscode/src/vs/workbench/api/browser/mainThreadSCM.js';
import './vscode/src/vs/workbench/api/browser/mainThreadSearch.js';
import './vscode/src/vs/workbench/api/browser/mainThreadStatusBar.js';
import './vscode/src/vs/workbench/api/browser/mainThreadStorage.js';
import './vscode/src/vs/workbench/api/browser/mainThreadTelemetry.js';
import './vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.js';
import './vscode/src/vs/workbench/api/browser/mainThreadTheming.js';
import './vscode/src/vs/workbench/api/browser/mainThreadTreeViews.js';
import './vscode/src/vs/workbench/api/browser/mainThreadDownloadService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadUrls.js';
import './vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js';
import './vscode/src/vs/workbench/api/browser/mainThreadWindow.js';
import './vscode/src/vs/workbench/api/browser/mainThreadWebviewManager.js';
import './vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js';
import './vscode/src/vs/workbench/api/browser/mainThreadComments.js';
import './vscode/src/vs/workbench/api/browser/mainThreadNotebook.js';
import './vscode/src/vs/workbench/api/browser/mainThreadNotebookKernels.js';
import './vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js';
import './vscode/src/vs/workbench/api/browser/mainThreadNotebookRenderers.js';
import './vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js';
import './vscode/src/vs/workbench/api/browser/mainThreadInteractive.js';
import './vscode/src/vs/workbench/api/browser/mainThreadTask.js';
import './vscode/src/vs/workbench/api/browser/mainThreadLabelService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js';
import './vscode/src/vs/workbench/api/browser/mainThreadTimeline.js';
import './vscode/src/vs/workbench/api/browser/mainThreadTesting.js';
import './vscode/src/vs/workbench/api/browser/mainThreadSecretState.js';
import './vscode/src/vs/workbench/api/browser/mainThreadShare.js';
import './vscode/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.js';
import './vscode/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.js';
import './vscode/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.js';
let EsmWebWorkerExtensionHost = class EsmWebWorkerExtensionHost extends WebWorkerExtensionHost {
constructor(workerConfig, runningLocation, startup, _initDataProvider, _telemetryService, _contextService, _labelService, _logService, _loggerService, _environmentService, _userDataProfilesService, _productService, _layoutService, _storageService) {
super(runningLocation, startup, _initDataProvider, _telemetryService, _contextService, _labelService, _logService, _loggerService, _environmentService, _userDataProfilesService, _productService, _layoutService, _storageService);
this.workerConfig = workerConfig;
}
async _getWebWorkerExtensionHostIframeSrc() {
const url = new URL(await super._getWebWorkerExtensionHostIframeSrc(), window.location.href);
url.searchParams.set('vscodeExtHostWorkerSrc', this.workerConfig.url);
if (this.workerConfig.options != null) {
url.searchParams.set('vscodeExtHostWorkerOptions', JSON.stringify(this.workerConfig.options));
}
url.searchParams.set('parentOrigin', window.origin);
return ( url.toString());
}
};
EsmWebWorkerExtensionHost = __decorate([
( __param(4, ITelemetryService)),
( __param(5, IWorkspaceContextService)),
( __param(6, ILabelService)),
( __param(7, ILogService)),
( __param(8, ILoggerService)),
( __param(9, IBrowserWorkbenchEnvironmentService)),
( __param(10, IUserDataProfilesService)),
( __param(11, IProductService)),
( __param(12, ILayoutService)),
( __param(13, IStorageService))
], EsmWebWorkerExtensionHost);
let localExtensionHost;
function setLocalExtensionHost(_localExtensionHost) {
localExtensionHost = _localExtensionHost;
}
let BrowserExtensionHostFactoryOverride = class BrowserExtensionHostFactoryOverride extends BrowserExtensionHostFactory {
constructor(workerConfig, _extensionsProposedApi, _scanWebExtensions, _getExtensionRegistrySnapshotWhenReady, _instantiationService, _remoteAgentService, _remoteAuthorityResolverService, _extensionEnablementService, _logService) {
super(_extensionsProposedApi, _scanWebExtensions, _getExtensionRegistrySnapshotWhenReady, _instantiationService, _remoteAgentService, _remoteAuthorityResolverService, _extensionEnablementService, _logService);
this.workerConfig = workerConfig;
}
createExtensionHost(runningLocations, runningLocation, isInitialStart) {
switch (runningLocation.kind) {
case 1 : {
if (localExtensionHost == null) {
return null;
}
return this._instantiationService.createInstance(localExtensionHost, runningLocation, 1 , this._createLocalExtensionHostDataProvider(runningLocations, runningLocation, isInitialStart));
}
case 2 : {
if (this.workerConfig == null) {
return null;
}
const startup = ((isInitialStart ? 2 : 1) );
return this._instantiationService.createInstance(EsmWebWorkerExtensionHost, this.workerConfig, runningLocation, startup, this._createLocalExtensionHostDataProvider(runningLocations, runningLocation, isInitialStart));
}
case 3 : {
return super.createExtensionHost(runningLocations, runningLocation, isInitialStart);
}
}
}
};
BrowserExtensionHostFactoryOverride = __decorate([
( __param(4, IInstantiationService)),
( __param(5, IRemoteAgentService)),
( __param(6, IRemoteAuthorityResolverService)),
( __param(7, IWorkbenchExtensionEnablementService)),
( __param(8, ILogService))
], BrowserExtensionHostFactoryOverride);
let LocalBrowserExtensionHostKindPicker = class LocalBrowserExtensionHostKindPicker extends BrowserExtensionHostKindPicker {
constructor(allowedExtHostKinds, _logService) {
super(_logService);
this.allowedExtHostKinds = allowedExtHostKinds;
}
pickExtensionHostKind(extensionId, extensionKinds, isInstalledLocally, isInstalledRemotely, preference) {
const forcedKind = getForcedExtensionHostKind(extensionId.value);
if (forcedKind != null) {
return forcedKind;
}
const detectedKind = super.pickExtensionHostKind(extensionId, extensionKinds, isInstalledLocally, isInstalledRemotely, preference);
if (detectedKind != null && !this.allowedExtHostKinds.includes(detectedKind)) {
return this.allowedExtHostKinds[0] ?? null;
}
return detectedKind;
}
};
LocalBrowserExtensionHostKindPicker = __decorate([
( __param(1, ILogService))
], LocalBrowserExtensionHostKindPicker);
let ExtensionServiceOverride = class ExtensionServiceOverride extends ExtensionService {
constructor(workerConfig, instantiationService, notificationService, browserEnvironmentService, telemetryService, extensionEnablementService, fileService, productService, extensionManagementService, contextService, configurationService, extensionManifestPropertiesService, webExtensionsScannerService, logService, remoteAgentService, remoteExtensionsScannerService, lifecycleService, remoteAuthorityResolverService, userDataInitializationService, userDataProfileService, workspaceTrustManagementService, remoteExplorerService, dialogService) {
const extensionsProposedApi = instantiationService.createInstance(ExtensionsProposedApi);
const extensionHostFactory = new BrowserExtensionHostFactoryOverride(workerConfig, extensionsProposedApi, async () => this._scanWebExtensions(), () => this._getExtensionRegistrySnapshotWhenReady(), instantiationService, remoteAgentService, remoteAuthorityResolverService, extensionEnablementService, logService);
super(extensionsProposedApi, extensionHostFactory, new LocalBrowserExtensionHostKindPicker(workerConfig != null ? [2 , 1 , 3 ] : [1 , 3 ], logService), instantiationService, notificationService, browserEnvironmentService, telemetryService, extensionEnablementService, fileService, productService, extensionManagementService, contextService, configurationService, extensionManifestPropertiesService, webExtensionsScannerService, logService, remoteAgentService, remoteExtensionsScannerService, lifecycleService, remoteAuthorityResolverService, userDataInitializationService, userDataProfileService, workspaceTrustManagementService, remoteExplorerService, dialogService);
}
async deltaExtensions(toAdd, toRemove) {
await this._handleDeltaExtensions(new DeltaExtensionsQueueItem(toAdd, toRemove));
}
};
ExtensionServiceOverride = __decorate([
( __param(1, IInstantiationService)),
( __param(2, INotificationService)),
( __param(3, IBrowserWorkbenchEnvironmentService)),
( __param(4, ITelemetryService)),
( __param(5, IWorkbenchExtensionEnablementService)),
( __param(6, IFileService)),
( __param(7, IProductService)),
( __param(8, IWorkbenchExtensionManagementService)),
( __param(9, IWorkspaceContextService)),
( __param(10, IConfigurationService)),
( __param(11, IExtensionManifestPropertiesService)),
( __param(12, IWebExtensionsScannerService)),
( __param(13, ILogService)),
( __param(14, IRemoteAgentService)),
( __param(15, IRemoteExtensionsScannerService)),
( __param(16, ILifecycleService)),
( __param(17, IRemoteAuthorityResolverService)),
( __param(18, IUserDataInitializationService)),
( __param(19, IUserDataProfileService)),
( __param(20, IWorkspaceTrustManagementService)),
( __param(21, IRemoteExplorerService)),
( __param(22, IDialogService))
], ExtensionServiceOverride);
class ExtensionResourceLoaderServiceOverride extends ExtensionResourceLoaderService {
async readExtensionResource(uri) {
if (uri.scheme === CustomSchemas.extensionFile) {
const result = await this._fileService.readFile(uri);
return ( result.value.toString());
}
return super.readExtensionResource(uri);
}
}
let iframeAlternateDomains;
registerAssets({
'vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html': () => changeUrlDomain(new URL('./assets/webWorkerExtensionHostIframe.html', import.meta.url).href, iframeAlternateDomains)
});
function getServiceOverride(workerConfig, _iframeAlternateDomains) {
if (_iframeAlternateDomains != null) {
iframeAlternateDomains = _iframeAlternateDomains;
}
const _workerConfig = workerConfig != null
? {
...workerConfig,
url: changeUrlDomain(workerConfig.url, iframeAlternateDomains)
}
: undefined;
return {
[( IExtensionService.toString())]: new SyncDescriptor(ExtensionServiceOverride, [_workerConfig], false),
[( IExtensionManifestPropertiesService.toString())]: new SyncDescriptor(ExtensionManifestPropertiesService, [], true),
[( IExtensionResourceLoaderService.toString())]: new SyncDescriptor(ExtensionResourceLoaderServiceOverride, [], true),
[( IExtensionBisectService.toString())]: new SyncDescriptor(ExtensionBisectService, [], true)
};
}
export { ExtensionServiceOverride, getServiceOverride as default, setLocalExtensionHost };