@codingame/monaco-vscode-extensions-service-override
Version:
VSCode public API plugged on the monaco editor - extensions service-override
309 lines (305 loc) • 23.6 kB
JavaScript
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
import { ILifecycleService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle.service';
import { ExtensionHostStartup } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions';
import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
import '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
import { IWorkspaceContextService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service';
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
import { INotificationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/notification/common/notification.service';
import { DeltaExtensionsQueueItem } from './vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js';
import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
import { IDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
import { IRemoteAuthorityResolverService } from '@codingame/monaco-vscode-api/vscode/vs/platform/remote/common/remoteAuthorityResolver.service';
import { IRemoteExtensionsScannerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/remote/common/remoteExtensionsScanner.service';
import { IRemoteAgentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/remote/common/remoteAgentService.service';
import { IWorkbenchExtensionEnablementService, IWorkbenchExtensionManagementService, IWebExtensionsScannerService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensionManagement/common/extensionManagement.service';
import { ExtensionManifestPropertiesService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService';
import { IExtensionManifestPropertiesService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService.service';
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
import { IProductService } from '@codingame/monaco-vscode-api/vscode/vs/platform/product/common/productService.service';
import { IBrowserWorkbenchEnvironmentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/environment/browser/environmentService.service';
import { SyncDescriptor } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/descriptors';
import { IUserDataInitializationService } from '@codingame/monaco-vscode-api/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';
import { ExtensionHostKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionHostKind';
export { ExtensionHostKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionHostKind';
import './vscode/src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.js';
import '@codingame/monaco-vscode-api/vscode/vs/base/common/charCode';
import '@codingame/monaco-vscode-api/vscode/vs/base/common/marshallingIds';
import '@codingame/monaco-vscode-api/vscode/vs/base/common/path';
import { language } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
import { WebWorkerExtensionHost } from './vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js';
import { IUserDataProfileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
import { IWorkspaceTrustManagementService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspaceTrust.service';
import { IRemoteExplorerService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/remote/common/remoteExplorerService.service';
import '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensionDescriptionRegistry';
import { ExtensionResourceLoaderService } from './vscode/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.js';
import { IExtensionResourceLoaderService } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensionResourceLoader/common/extensionResourceLoader.service';
import { ExtensionBisectService } from './vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js';
import { IExtensionBisectService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensionManagement/browser/extensionBisect.service';
import { changeUrlDomain } from '@codingame/monaco-vscode-api/service-override/tools/url';
import { CustomSchemas } from '@codingame/monaco-vscode-files-service-override';
import { registerAssets } from '@codingame/monaco-vscode-api/assets';
import { getForcedExtensionHostKind, getBuiltinExtensions } from '@codingame/monaco-vscode-api/extensions';
import { WebExtensionsScannerService } from './vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js';
import { IBuiltinExtensionsScannerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions.service';
import { ExtensionManifestTranslator } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensionManagement/common/extensionsScannerService';
import { getBuiltInExtensionTranslationsUris } from '@codingame/monaco-vscode-api/l10n';
import '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/jsonValidationExtensionPoint';
import '@codingame/monaco-vscode-api/vscode/vs/workbench/services/themes/common/colorExtensionPoint';
import '@codingame/monaco-vscode-api/vscode/vs/workbench/services/themes/common/iconExtensionPoint';
import '@codingame/monaco-vscode-api/vscode/vs/workbench/services/themes/common/tokenClassificationExtensionPoint';
import '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/codeEditor/common/languageConfigurationExtensionPoint';
import '@codingame/monaco-vscode-api/vscode/vs/workbench/api/browser/statusBarExtensionPoint';
import './vscode/src/vs/workbench/services/themes/browser/cssExtensionPoint.js';
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/mainThreadChatCodeMapper.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 '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
import '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
import '@codingame/monaco-vscode-api/vscode/vs/editor/common/config/editorOptions';
import '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/selection';
import '@codingame/monaco-vscode-api/vscode/vs/editor/common/editorCommon';
import '@codingame/monaco-vscode-api/vscode/vs/editor/contrib/snippet/browser/snippetController2';
import '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
import '@codingame/monaco-vscode-api/vscode/vs/base/common/arrays';
import '@codingame/monaco-vscode-api/vscode/vs/editor/contrib/editorState/browser/editorState';
import '@codingame/monaco-vscode-api/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/mainThreadDocumentDiff.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/mainThreadPower.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';
import './vscode/src/vs/workbench/api/browser/mainThreadAiSettingsSearch.js';
import './vscode/src/vs/workbench/api/browser/mainThreadMcp.js';
import './vscode/src/vs/workbench/api/browser/mainThreadChatContext.js';
import './vscode/src/vs/workbench/api/browser/mainThreadChatDebug.js';
import './vscode/src/vs/workbench/api/browser/mainThreadChatStatus.js';
import './vscode/src/vs/workbench/api/browser/mainThreadChatInputNotification.js';
import './vscode/src/vs/workbench/api/browser/mainThreadChatOutputRenderer.js';
import './vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js';
import './vscode/src/vs/workbench/api/browser/mainThreadDataChannels.js';
import './vscode/src/vs/workbench/api/browser/mainThreadMeteredConnection.js';
import './vscode/src/vs/workbench/api/browser/mainThreadGitExtensionService.js';
import './vscode/src/vs/workbench/api/browser/mainThreadBrowsers.js';
let localExtensionHost;
function setLocalExtensionHost(_localExtensionHost) {
localExtensionHost = _localExtensionHost;
}
let BrowserExtensionHostFactoryOverride = class BrowserExtensionHostFactoryOverride extends BrowserExtensionHostFactory {
constructor(enableWorkerExtensionHost, _extensionsProposedApi, _scanWebExtensions, _getExtensionRegistrySnapshotWhenReady, _instantiationService, _remoteAgentService, _remoteAuthorityResolverService, _extensionEnablementService, _logService) {
super(_extensionsProposedApi, _scanWebExtensions, _getExtensionRegistrySnapshotWhenReady, _instantiationService, _remoteAgentService, _remoteAuthorityResolverService, _extensionEnablementService, _logService);
this.enableWorkerExtensionHost = enableWorkerExtensionHost;
}
createExtensionHost(runningLocations, runningLocation, isInitialStart) {
switch (runningLocation.kind) {
case ExtensionHostKind.LocalProcess: {
if (localExtensionHost == null) {
return null;
}
return this._instantiationService.createInstance(localExtensionHost, runningLocation, ExtensionHostStartup.EagerAutoStart, this._createLocalExtensionHostDataProvider(runningLocations, runningLocation, isInitialStart));
}
case ExtensionHostKind.LocalWebWorker: {
if (!this.enableWorkerExtensionHost) {
return null;
}
const startup = isInitialStart
? ExtensionHostStartup.EagerManualStart
: ExtensionHostStartup.EagerAutoStart;
return this._instantiationService.createInstance(WebWorkerExtensionHost, runningLocation, startup, this._createLocalExtensionHostDataProvider(runningLocations, runningLocation, isInitialStart));
}
case ExtensionHostKind.Remote: {
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(enableWorkerExtensionHost, 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(enableWorkerExtensionHost, extensionsProposedApi, async () => await this._scanWebExtensions(), () => this._getExtensionRegistrySnapshotWhenReady(), instantiationService, remoteAgentService, remoteAuthorityResolverService, extensionEnablementService, logService);
super({ hasLocalProcess: true, allowRemoteExtensionsInLocalWebWorker: true }, extensionsProposedApi, extensionHostFactory, new LocalBrowserExtensionHostKindPicker(enableWorkerExtensionHost
? [
ExtensionHostKind.LocalWebWorker,
ExtensionHostKind.LocalProcess,
ExtensionHostKind.Remote
]
: [ExtensionHostKind.LocalProcess, ExtensionHostKind.Remote], 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 await super.readExtensionResource(uri);
}
}
let CustomBuiltinExtensionsScannerService = class CustomBuiltinExtensionsScannerService extends ExtensionManifestTranslator {
constructor(fileService, extensionResourceLoaderService, logService) {
super(extensionResourceLoaderService, fileService, logService);
this.builtinExtensionsPromises = [];
const nlsConfiguration = {
devMode: false,
language: language,
pseudo: language === 'pseudo',
translations: getBuiltInExtensionTranslationsUris(language) ?? {}
};
this.builtinExtensionsPromises = getBuiltinExtensions().map(async (e) => {
return {
...e,
manifest: await this.translateManifest(e.location, e.manifest, nlsConfiguration)
};
});
}
async scanBuiltinExtensions() {
return [...(await Promise.all(this.builtinExtensionsPromises))];
}
};
CustomBuiltinExtensionsScannerService = __decorate([
__param(0, IFileService),
__param(1, IExtensionResourceLoaderService),
__param(2, ILogService)
], CustomBuiltinExtensionsScannerService);
let iframeAlternateDomain;
registerAssets({
'vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html': () => changeUrlDomain(new URL('./vscode/src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html', import.meta.url).href, iframeAlternateDomain)
});
function getServiceOverride({ enableWorkerExtensionHost, iframeAlternateDomain: _iframeAlternateDomain } = {}) {
if (_iframeAlternateDomain != null) {
iframeAlternateDomain = _iframeAlternateDomain;
}
return {
[IExtensionService.toString()]: new SyncDescriptor(ExtensionServiceOverride, [enableWorkerExtensionHost], false),
[IExtensionManifestPropertiesService.toString()]: new SyncDescriptor(ExtensionManifestPropertiesService, [], true),
[IExtensionResourceLoaderService.toString()]: new SyncDescriptor(ExtensionResourceLoaderServiceOverride, [], true),
[IExtensionBisectService.toString()]: new SyncDescriptor(ExtensionBisectService, [], true),
[IWebExtensionsScannerService.toString()]: new SyncDescriptor(WebExtensionsScannerService, [], true),
[IBuiltinExtensionsScannerService.toString()]: new SyncDescriptor(CustomBuiltinExtensionsScannerService, [], true)
};
}
export { CustomBuiltinExtensionsScannerService, ExtensionServiceOverride, getServiceOverride as default, setLocalExtensionHost };