@codingame/monaco-vscode-extensions-service-override 4.4.1 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/extensions.d.ts +21 -21
- package/extensions.js +29 -27
- package/localExtensionHost.d.ts +8 -8
- package/override/vs/workbench/browser/parts/editor/textEditor.weak.js +4 -1
- package/package.json +11 -3
- package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +2 -1
- package/vscode/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.js +7 -6
- package/vscode/src/vs/platform/remote/common/managedSocket.js +1 -1
- package/vscode/src/vs/platform/remote/common/remoteExtensionsScanner.service.d.ts +13 -0
- package/vscode/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +9 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +8 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadChat.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +5 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadChatVariables.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadClipboard.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadCodeInsets.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadCommands.js +4 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +5 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadConfiguration.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadConsole.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +14 -15
- package/vscode/src/vs/workbench/api/browser/mainThreadDebugService.js +4 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadDecorations.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadDiagnostics.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadDialogs.js +1 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadDocuments.js +7 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js +11 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadDownloadService.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditor.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js +7 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadEditors.js +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +9 -9
- package/vscode/src/vs/workbench/api/browser/mainThreadFileSystem.js +3 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +10 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadInlineChat.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadInteractive.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadIssueReporter.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadLabelService.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +9 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguages.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadLocalization.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadLogService.js +4 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadManagedSockets.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +4 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebook.js +5 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocuments.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookKernels.js +6 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookRenderers.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +3 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadSearch.js +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadSecretState.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadShare.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadSpeech.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadStatusBar.js +1 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadStorage.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadTelemetry.js +5 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js +9 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadTesting.js +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadTheming.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadTimeline.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadTreeViews.js +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +14 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +9 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadUrls.js +3 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.js +9 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewViews.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadWindow.js +4 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +14 -13
- package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +1 -1
- package/vscode/src/vs/workbench/contrib/externalUriOpener/common/contributedOpeners.js +2 -2
- package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +399 -0
- package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagement.d.ts +53 -0
- package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagement.service.d.ts +106 -0
- package/vscode/src/vs/workbench/services/extensions/browser/extensionService.d.ts +45 -0
- package/vscode/src/vs/workbench/services/extensions/browser/extensionService.js +20 -20
- package/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.d.ts +10 -0
- package/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js +10 -10
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.d.ts +162 -0
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +25 -23
- package/vscode/src/vs/workbench/services/extensions/common/extensionDescriptionRegistry.d.ts +18 -0
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +5 -5
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManagers.d.ts +39 -0
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostProxy.d.ts +17 -0
- package/vscode/src/vs/workbench/services/extensions/common/extensionManifestPropertiesService.service.d.ts +20 -0
- package/vscode/src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.d.ts +45 -0
- package/vscode/src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.js +4 -4
- package/vscode/src/vs/workbench/services/extensions/common/extensionStorageMigration.js +9 -8
- package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.d.ts +17 -0
- package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +3 -3
- package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.js +1 -1
- package/vscode/src/vs/workbench/services/extensions/common/remoteExtensionHost.js +10 -10
- package/vscode/src/vs/workbench/services/extensions/common/rpcProtocol.d.ts +6 -0
- package/vscode/src/vs/workbench/services/remote/common/remoteExplorerService.d.ts +49 -0
- package/vscode/src/vs/workbench/services/remote/common/remoteExplorerService.service.d.ts +40 -0
- package/vscode/src/vs/workbench/services/remote/common/tunnelModel.d.ts +185 -0
- package/vscode/src/vs/workbench/services/userData/browser/userDataInit.d.ts +11 -0
- package/vscode/src/vs/workbench/services/userData/browser/userDataInit.service.d.ts +9 -0
- package/override/vs/platform/dialogs/common/dialogs.js +0 -10
|
@@ -4,8 +4,8 @@ import { Disposable, DisposableMap } from 'vscode/vscode/vs/base/common/lifecycl
|
|
|
4
4
|
import { generateUuid } from 'vscode/vscode/vs/base/common/uuid';
|
|
5
5
|
import { reviveWebviewExtension } from './mainThreadWebviews.js';
|
|
6
6
|
import { ExtHostContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
|
|
7
|
-
import { IWebviewViewService } from 'vscode/vscode/vs/workbench/contrib/webviewView/browser/webviewViewService';
|
|
8
|
-
import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry';
|
|
7
|
+
import { IWebviewViewService } from 'vscode/vscode/vs/workbench/contrib/webviewView/browser/webviewViewService.service';
|
|
8
|
+
import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
9
9
|
|
|
10
10
|
let MainThreadWebviewsViews = class MainThreadWebviewsViews extends Disposable {
|
|
11
11
|
constructor(context, mainThreadWebviews, _telemetryService, _webviewViewService) {
|
|
@@ -5,8 +5,8 @@ import { isWeb } from 'vscode/vscode/vs/base/common/platform';
|
|
|
5
5
|
import { escape } from 'vscode/vscode/vs/base/common/strings';
|
|
6
6
|
import { URI } from 'vscode/vscode/vs/base/common/uri';
|
|
7
7
|
import { localizeWithPath } from 'vscode/vscode/vs/nls';
|
|
8
|
-
import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener';
|
|
9
|
-
import { IProductService } from 'vscode/vscode/vs/platform/product/common/productService';
|
|
8
|
+
import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener.service';
|
|
9
|
+
import { IProductService } from 'vscode/vscode/vs/platform/product/common/productService.service';
|
|
10
10
|
import { ExtHostContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
|
|
11
11
|
import { deserializeWebviewMessage, serializeWebviewMessage } from 'vscode/vscode/vs/workbench/api/common/extHostWebviewMessaging';
|
|
12
12
|
import { SerializableObjectWithBuffers } from 'vscode/vscode/vs/workbench/services/extensions/common/proxyIdentifier';
|
|
@@ -2,11 +2,11 @@ import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
|
|
|
2
2
|
import { Event } from 'vscode/vscode/vs/base/common/event';
|
|
3
3
|
import { DisposableStore } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
4
4
|
import { URI } from 'vscode/vscode/vs/base/common/uri';
|
|
5
|
-
import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener';
|
|
5
|
+
import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener.service';
|
|
6
6
|
import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
|
|
7
|
-
import {
|
|
8
|
-
import { IHostService } from 'vscode/vscode/vs/workbench/services/host/browser/host';
|
|
9
|
-
import { IUserActivityService } from 'vscode/vscode/vs/workbench/services/userActivity/common/userActivityService';
|
|
7
|
+
import { ExtHostContext, MainContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
|
|
8
|
+
import { IHostService } from 'vscode/vscode/vs/workbench/services/host/browser/host.service';
|
|
9
|
+
import { IUserActivityService } from 'vscode/vscode/vs/workbench/services/userActivity/common/userActivityService.service';
|
|
10
10
|
|
|
11
11
|
let MainThreadWindow = class MainThreadWindow {
|
|
12
12
|
constructor(extHostContext, hostService, openerService, userActivityService) {
|
|
@@ -4,25 +4,26 @@ import { DisposableStore } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
|
4
4
|
import { isNative } from 'vscode/vscode/vs/base/common/platform';
|
|
5
5
|
import { URI } from 'vscode/vscode/vs/base/common/uri';
|
|
6
6
|
import { localizeWithPath } from 'vscode/vscode/vs/nls';
|
|
7
|
-
import { IEnvironmentService } from 'vscode/vscode/vs/platform/environment/common/environment';
|
|
8
|
-
import { IFileService } from 'vscode/vscode/vs/platform/files/common/files';
|
|
7
|
+
import { IEnvironmentService } from 'vscode/vscode/vs/platform/environment/common/environment.service';
|
|
8
|
+
import { IFileService } from 'vscode/vscode/vs/platform/files/common/files.service';
|
|
9
9
|
import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
|
|
10
|
-
import { ILabelService } from 'vscode/vscode/vs/platform/label/common/label';
|
|
11
|
-
import { INotificationService } from 'vscode/vscode/vs/platform/notification/common/notification';
|
|
12
|
-
import { IRequestService } from 'vscode/vscode/vs/platform/request/common/request';
|
|
13
|
-
import { IWorkspaceTrustManagementService, IWorkspaceTrustRequestService } from 'vscode/vscode/vs/platform/workspace/common/workspaceTrust';
|
|
14
|
-
import {
|
|
10
|
+
import { ILabelService } from 'vscode/vscode/vs/platform/label/common/label.service';
|
|
11
|
+
import { INotificationService } from 'vscode/vscode/vs/platform/notification/common/notification.service';
|
|
12
|
+
import { IRequestService } from 'vscode/vscode/vs/platform/request/common/request.service';
|
|
13
|
+
import { IWorkspaceTrustManagementService, IWorkspaceTrustRequestService } from 'vscode/vscode/vs/platform/workspace/common/workspaceTrust.service';
|
|
14
|
+
import { isUntitledWorkspace } from 'vscode/vscode/vs/platform/workspace/common/workspace';
|
|
15
|
+
import { IWorkspaceContextService } from 'vscode/vscode/vs/platform/workspace/common/workspace.service';
|
|
15
16
|
import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
|
|
16
17
|
import { checkGlobFileExists } from 'vscode/vscode/vs/workbench/services/extensions/common/workspaceContains';
|
|
17
18
|
import { QueryBuilder } from 'vscode/vscode/vs/workbench/services/search/common/queryBuilder';
|
|
18
|
-
import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
|
|
19
|
-
import { ISearchService } from 'vscode/vscode/vs/workbench/services/search/common/search';
|
|
20
|
-
import { IWorkspaceEditingService } from 'vscode/vscode/vs/workbench/services/workspaces/common/workspaceEditing';
|
|
21
|
-
import {
|
|
22
|
-
import { IEditSessionIdentityService } from 'vscode/vscode/vs/platform/workspace/common/editSessions';
|
|
19
|
+
import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService.service';
|
|
20
|
+
import { ISearchService } from 'vscode/vscode/vs/workbench/services/search/common/search.service';
|
|
21
|
+
import { IWorkspaceEditingService } from 'vscode/vscode/vs/workbench/services/workspaces/common/workspaceEditing.service';
|
|
22
|
+
import { ExtHostContext, MainContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
|
|
23
|
+
import { IEditSessionIdentityService } from 'vscode/vscode/vs/platform/workspace/common/editSessions.service';
|
|
23
24
|
import { SideBySideEditor, EditorResourceAccessor } from 'vscode/vscode/vs/workbench/common/editor';
|
|
24
25
|
import { firstOrDefault, coalesce } from 'vscode/vscode/vs/base/common/arrays';
|
|
25
|
-
import { ICanonicalUriService } from 'vscode/vscode/vs/platform/workspace/common/canonicalUri';
|
|
26
|
+
import { ICanonicalUriService } from 'vscode/vscode/vs/platform/workspace/common/canonicalUri.service';
|
|
26
27
|
|
|
27
28
|
let MainThreadWorkspace = class MainThreadWorkspace {
|
|
28
29
|
constructor(extHostContext, _searchService, _contextService, _editSessionIdentityService, _canonicalUriService, _editorService, _workspaceEditingService, _notificationService, _requestService, _instantiationService, _labelService, _environmentService, fileService, _workspaceTrustManagementService, _workspaceTrustRequestService) {
|
|
@@ -3,7 +3,7 @@ import { Emitter } from 'vscode/vscode/vs/base/common/event';
|
|
|
3
3
|
import { Disposable } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
4
4
|
import { isEqual } from 'vscode/vscode/vs/base/common/resources';
|
|
5
5
|
import { ITextModelService } from 'vscode/vscode/vs/editor/common/services/resolverService';
|
|
6
|
-
import { ITextFileService } from 'vscode/vscode/vs/workbench/services/textfile/common/textfiles';
|
|
6
|
+
import { ITextFileService } from 'vscode/vscode/vs/workbench/services/textfile/common/textfiles.service';
|
|
7
7
|
|
|
8
8
|
var CustomTextEditorModel_1;
|
|
9
9
|
let CustomTextEditorModel = CustomTextEditorModel_1 = class CustomTextEditorModel extends Disposable {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
|
|
2
2
|
import { Disposable } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
3
|
-
import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage';
|
|
3
|
+
import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage.service';
|
|
4
4
|
import { Memento } from 'vscode/vscode/vs/workbench/common/memento';
|
|
5
5
|
import { updateContributedOpeners } from 'vscode/vscode/vs/workbench/contrib/externalUriOpener/common/configuration';
|
|
6
|
-
import { IExtensionService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions';
|
|
6
|
+
import { IExtensionService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions.service';
|
|
7
7
|
|
|
8
8
|
var ContributedExternalUriOpenersStore_1;
|
|
9
9
|
let ContributedExternalUriOpenersStore = class ContributedExternalUriOpenersStore extends Disposable {
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
|
|
2
|
+
import { localizeWithPath, localize2WithPath } from 'vscode/vscode/vs/nls';
|
|
3
|
+
import { IExtensionManagementService, IGlobalExtensionEnablementService } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement.service';
|
|
4
|
+
import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage.service';
|
|
5
|
+
import { isResolverExtension } from 'vscode/vscode/vs/platform/extensions/common/extensions';
|
|
6
|
+
import { NotificationPriority } from 'vscode/vscode/vs/platform/notification/common/notification';
|
|
7
|
+
import { INotificationService } from 'vscode/vscode/vs/platform/notification/common/notification.service';
|
|
8
|
+
import { IHostService } from 'vscode/vscode/vs/workbench/services/host/browser/host.service';
|
|
9
|
+
import { registerAction2, Action2, MenuId } from 'vscode/vscode/vs/platform/actions/common/actions';
|
|
10
|
+
import { RawContextKey, ContextKeyExpr } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
|
|
11
|
+
import { IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/contextkey.service';
|
|
12
|
+
import { IDialogService } from 'vscode/vscode/vs/platform/dialogs/common/dialogs.service';
|
|
13
|
+
import { Registry } from 'vscode/vscode/vs/platform/registry/common/platform';
|
|
14
|
+
import { Extensions } from 'vscode/vscode/vs/workbench/common/contributions';
|
|
15
|
+
import { ICommandService } from 'vscode/vscode/vs/platform/commands/common/commands.service';
|
|
16
|
+
import { ILogService } from 'vscode/vscode/vs/platform/log/common/log.service';
|
|
17
|
+
import { IProductService } from 'vscode/vscode/vs/platform/product/common/productService.service';
|
|
18
|
+
import { IWorkbenchIssueService } from 'vscode/vscode/vs/workbench/services/issue/common/issue.service';
|
|
19
|
+
import { IWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/common/environmentService.service';
|
|
20
|
+
import { areSameExtensions } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagementUtil';
|
|
21
|
+
import { Categories } from 'vscode/vscode/vs/platform/action/common/actionCommonCategories';
|
|
22
|
+
import { IWorkbenchExtensionEnablementService } from 'vscode/vscode/vs/workbench/services/extensionManagement/common/extensionManagement.service';
|
|
23
|
+
import { IExtensionBisectService } from 'vscode/vscode/vs/workbench/services/extensionManagement/browser/extensionBisect.service';
|
|
24
|
+
import Severity$1 from 'vscode/vscode/vs/base/common/severity';
|
|
25
|
+
|
|
26
|
+
var ExtensionBisectService_1, ExtensionBisectUi_1;
|
|
27
|
+
class BisectState {
|
|
28
|
+
static fromJSON(raw) {
|
|
29
|
+
if (!raw) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const data = JSON.parse(raw);
|
|
34
|
+
return ( new BisectState(data.extensions, data.low, data.high, data.mid));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
constructor(extensions, low, high, mid = ((low + high) / 2) | 0) {
|
|
41
|
+
this.extensions = extensions;
|
|
42
|
+
this.low = low;
|
|
43
|
+
this.high = high;
|
|
44
|
+
this.mid = mid;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
let ExtensionBisectService = class ExtensionBisectService {
|
|
48
|
+
static { ExtensionBisectService_1 = this; }
|
|
49
|
+
static { this._storageKey = 'extensionBisectState'; }
|
|
50
|
+
constructor(logService, _storageService, _envService) {
|
|
51
|
+
this._storageService = _storageService;
|
|
52
|
+
this._envService = _envService;
|
|
53
|
+
this._disabled = ( new Map());
|
|
54
|
+
const raw = _storageService.get(ExtensionBisectService_1._storageKey, -1 );
|
|
55
|
+
this._state = BisectState.fromJSON(raw);
|
|
56
|
+
if (this._state) {
|
|
57
|
+
const { mid, high } = this._state;
|
|
58
|
+
for (let i = 0; i < this._state.extensions.length; i++) {
|
|
59
|
+
const isDisabled = i >= mid && i < high;
|
|
60
|
+
this._disabled.set(this._state.extensions[i], isDisabled);
|
|
61
|
+
}
|
|
62
|
+
logService.warn('extension BISECT active', [...this._disabled]);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
get isActive() {
|
|
66
|
+
return !!this._state;
|
|
67
|
+
}
|
|
68
|
+
get disabledCount() {
|
|
69
|
+
return this._state ? this._state.high - this._state.mid : -1;
|
|
70
|
+
}
|
|
71
|
+
isDisabledByBisect(extension) {
|
|
72
|
+
if (!this._state) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
if (isResolverExtension(extension.manifest, this._envService.remoteAuthority)) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
if (this._isEnabledInEnv(extension)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const disabled = this._disabled.get(extension.identifier.id);
|
|
82
|
+
return disabled ?? false;
|
|
83
|
+
}
|
|
84
|
+
_isEnabledInEnv(extension) {
|
|
85
|
+
return Array.isArray(this._envService.enableExtensions) && ( this._envService.enableExtensions.some(id => areSameExtensions({ id }, extension.identifier)));
|
|
86
|
+
}
|
|
87
|
+
async start(extensions) {
|
|
88
|
+
if (this._state) {
|
|
89
|
+
throw new Error('invalid state');
|
|
90
|
+
}
|
|
91
|
+
const extensionIds = ( extensions.map(ext => ext.identifier.id));
|
|
92
|
+
const newState = ( new BisectState(extensionIds, 0, extensionIds.length, 0));
|
|
93
|
+
this._storageService.store(ExtensionBisectService_1._storageKey, JSON.stringify(newState), -1 , 1 );
|
|
94
|
+
await this._storageService.flush();
|
|
95
|
+
}
|
|
96
|
+
async next(seeingBad) {
|
|
97
|
+
if (!this._state) {
|
|
98
|
+
throw new Error('invalid state');
|
|
99
|
+
}
|
|
100
|
+
if (seeingBad && this._state.mid === 0 && this._state.high === this._state.extensions.length) {
|
|
101
|
+
return { bad: true, id: '' };
|
|
102
|
+
}
|
|
103
|
+
if (this._state.low === this._state.high - 1) {
|
|
104
|
+
await this.reset();
|
|
105
|
+
return { id: this._state.extensions[this._state.low], bad: seeingBad };
|
|
106
|
+
}
|
|
107
|
+
const nextState = ( new BisectState(
|
|
108
|
+
this._state.extensions,
|
|
109
|
+
seeingBad ? this._state.low : this._state.mid,
|
|
110
|
+
seeingBad ? this._state.mid : this._state.high
|
|
111
|
+
));
|
|
112
|
+
this._storageService.store(ExtensionBisectService_1._storageKey, JSON.stringify(nextState), -1 , 1 );
|
|
113
|
+
await this._storageService.flush();
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
async reset() {
|
|
117
|
+
this._storageService.remove(ExtensionBisectService_1._storageKey, -1 );
|
|
118
|
+
await this._storageService.flush();
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
ExtensionBisectService = ExtensionBisectService_1 = ( __decorate([
|
|
122
|
+
( __param(0, ILogService)),
|
|
123
|
+
( __param(1, IStorageService)),
|
|
124
|
+
( __param(2, IWorkbenchEnvironmentService))
|
|
125
|
+
], ExtensionBisectService));
|
|
126
|
+
let ExtensionBisectUi = class ExtensionBisectUi {
|
|
127
|
+
static { ExtensionBisectUi_1 = this; }
|
|
128
|
+
static { this.ctxIsBisectActive = ( new RawContextKey('isExtensionBisectActive', false)); }
|
|
129
|
+
constructor(contextKeyService, _extensionBisectService, _notificationService, _commandService) {
|
|
130
|
+
this._extensionBisectService = _extensionBisectService;
|
|
131
|
+
this._notificationService = _notificationService;
|
|
132
|
+
this._commandService = _commandService;
|
|
133
|
+
if (_extensionBisectService.isActive) {
|
|
134
|
+
ExtensionBisectUi_1.ctxIsBisectActive.bindTo(contextKeyService).set(true);
|
|
135
|
+
this._showBisectPrompt();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
_showBisectPrompt() {
|
|
139
|
+
const goodPrompt = {
|
|
140
|
+
label: ( localizeWithPath(
|
|
141
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
142
|
+
'I cannot reproduce',
|
|
143
|
+
"I can't reproduce"
|
|
144
|
+
)),
|
|
145
|
+
run: () => this._commandService.executeCommand('extension.bisect.next', false)
|
|
146
|
+
};
|
|
147
|
+
const badPrompt = {
|
|
148
|
+
label: ( localizeWithPath(
|
|
149
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
150
|
+
'This is Bad',
|
|
151
|
+
"I can reproduce"
|
|
152
|
+
)),
|
|
153
|
+
run: () => this._commandService.executeCommand('extension.bisect.next', true)
|
|
154
|
+
};
|
|
155
|
+
const stop = {
|
|
156
|
+
label: 'Stop Bisect',
|
|
157
|
+
run: () => this._commandService.executeCommand('extension.bisect.stop')
|
|
158
|
+
};
|
|
159
|
+
const message = this._extensionBisectService.disabledCount === 1
|
|
160
|
+
? ( localizeWithPath(
|
|
161
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
162
|
+
'bisect.singular',
|
|
163
|
+
"Extension Bisect is active and has disabled 1 extension. Check if you can still reproduce the problem and proceed by selecting from these options."
|
|
164
|
+
))
|
|
165
|
+
: ( localizeWithPath(
|
|
166
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
167
|
+
'bisect.plural',
|
|
168
|
+
"Extension Bisect is active and has disabled {0} extensions. Check if you can still reproduce the problem and proceed by selecting from these options.",
|
|
169
|
+
this._extensionBisectService.disabledCount
|
|
170
|
+
));
|
|
171
|
+
this._notificationService.prompt(Severity$1.Info, message, [goodPrompt, badPrompt, stop], { sticky: true, priority: NotificationPriority.URGENT });
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
ExtensionBisectUi = ExtensionBisectUi_1 = ( __decorate([
|
|
175
|
+
( __param(0, IContextKeyService)),
|
|
176
|
+
( __param(1, IExtensionBisectService)),
|
|
177
|
+
( __param(2, INotificationService)),
|
|
178
|
+
( __param(3, ICommandService))
|
|
179
|
+
], ExtensionBisectUi));
|
|
180
|
+
( Registry.as(Extensions.Workbench)).registerWorkbenchContribution(ExtensionBisectUi, 3 );
|
|
181
|
+
registerAction2(class extends Action2 {
|
|
182
|
+
constructor() {
|
|
183
|
+
super({
|
|
184
|
+
id: 'extension.bisect.start',
|
|
185
|
+
title: ( localize2WithPath(
|
|
186
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
187
|
+
'title.start',
|
|
188
|
+
'Start Extension Bisect'
|
|
189
|
+
)),
|
|
190
|
+
category: Categories.Help,
|
|
191
|
+
f1: true,
|
|
192
|
+
precondition: ( ExtensionBisectUi.ctxIsBisectActive.negate()),
|
|
193
|
+
menu: {
|
|
194
|
+
id: MenuId.ViewContainerTitle,
|
|
195
|
+
when: ( ContextKeyExpr.equals('viewContainer', 'workbench.view.extensions')),
|
|
196
|
+
group: '2_enablement',
|
|
197
|
+
order: 4
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
async run(accessor) {
|
|
202
|
+
const dialogService = accessor.get(IDialogService);
|
|
203
|
+
const hostService = accessor.get(IHostService);
|
|
204
|
+
const extensionManagement = accessor.get(IExtensionManagementService);
|
|
205
|
+
const extensionEnablementService = accessor.get(IWorkbenchExtensionEnablementService);
|
|
206
|
+
const extensionsBisect = accessor.get(IExtensionBisectService);
|
|
207
|
+
const extensions = (await extensionManagement.getInstalled(1 )).filter(ext => extensionEnablementService.isEnabled(ext));
|
|
208
|
+
const res = await dialogService.confirm({
|
|
209
|
+
message: ( localizeWithPath(
|
|
210
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
211
|
+
'msg.start',
|
|
212
|
+
"Extension Bisect"
|
|
213
|
+
)),
|
|
214
|
+
detail: ( localizeWithPath(
|
|
215
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
216
|
+
'detail.start',
|
|
217
|
+
"Extension Bisect will use binary search to find an extension that causes a problem. During the process the window reloads repeatedly (~{0} times). Each time you must confirm if you are still seeing problems.",
|
|
218
|
+
2 + Math.log2(extensions.length) | 0
|
|
219
|
+
)),
|
|
220
|
+
primaryButton: ( localizeWithPath(
|
|
221
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
222
|
+
{ key: 'msg2', comment: ['&& denotes a mnemonic'] },
|
|
223
|
+
"&&Start Extension Bisect"
|
|
224
|
+
))
|
|
225
|
+
});
|
|
226
|
+
if (res.confirmed) {
|
|
227
|
+
await extensionsBisect.start(extensions);
|
|
228
|
+
hostService.reload();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
registerAction2(class extends Action2 {
|
|
233
|
+
constructor() {
|
|
234
|
+
super({
|
|
235
|
+
id: 'extension.bisect.next',
|
|
236
|
+
title: ( localize2WithPath(
|
|
237
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
238
|
+
'title.isBad',
|
|
239
|
+
'Continue Extension Bisect'
|
|
240
|
+
)),
|
|
241
|
+
category: Categories.Help,
|
|
242
|
+
f1: true,
|
|
243
|
+
precondition: ExtensionBisectUi.ctxIsBisectActive
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
async run(accessor, seeingBad) {
|
|
247
|
+
const dialogService = accessor.get(IDialogService);
|
|
248
|
+
const hostService = accessor.get(IHostService);
|
|
249
|
+
const bisectService = accessor.get(IExtensionBisectService);
|
|
250
|
+
const productService = accessor.get(IProductService);
|
|
251
|
+
const extensionEnablementService = accessor.get(IGlobalExtensionEnablementService);
|
|
252
|
+
const issueService = accessor.get(IWorkbenchIssueService);
|
|
253
|
+
if (!bisectService.isActive) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
if (seeingBad === undefined) {
|
|
257
|
+
const goodBadStopCancel = await this._checkForBad(dialogService, bisectService);
|
|
258
|
+
if (goodBadStopCancel === null) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
seeingBad = goodBadStopCancel;
|
|
262
|
+
}
|
|
263
|
+
if (seeingBad === undefined) {
|
|
264
|
+
await bisectService.reset();
|
|
265
|
+
hostService.reload();
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const done = await bisectService.next(seeingBad);
|
|
269
|
+
if (!done) {
|
|
270
|
+
hostService.reload();
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
if (done.bad) {
|
|
274
|
+
await dialogService.info(( localizeWithPath(
|
|
275
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
276
|
+
'done.msg',
|
|
277
|
+
"Extension Bisect"
|
|
278
|
+
)), ( localizeWithPath(
|
|
279
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
280
|
+
'done.detail2',
|
|
281
|
+
"Extension Bisect is done but no extension has been identified. This might be a problem with {0}.",
|
|
282
|
+
productService.nameShort
|
|
283
|
+
)));
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
const res = await dialogService.confirm({
|
|
287
|
+
type: Severity$1.Info,
|
|
288
|
+
message: ( localizeWithPath(
|
|
289
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
290
|
+
'done.msg',
|
|
291
|
+
"Extension Bisect"
|
|
292
|
+
)),
|
|
293
|
+
primaryButton: ( localizeWithPath(
|
|
294
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
295
|
+
{ key: 'report', comment: ['&& denotes a mnemonic'] },
|
|
296
|
+
"&&Report Issue & Continue"
|
|
297
|
+
)),
|
|
298
|
+
cancelButton: ( localizeWithPath(
|
|
299
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
300
|
+
'continue',
|
|
301
|
+
"Continue"
|
|
302
|
+
)),
|
|
303
|
+
detail: ( localizeWithPath(
|
|
304
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
305
|
+
'done.detail',
|
|
306
|
+
"Extension Bisect is done and has identified {0} as the extension causing the problem.",
|
|
307
|
+
done.id
|
|
308
|
+
)),
|
|
309
|
+
checkbox: { label: ( localizeWithPath(
|
|
310
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
311
|
+
'done.disbale',
|
|
312
|
+
"Keep this extension disabled"
|
|
313
|
+
)), checked: true }
|
|
314
|
+
});
|
|
315
|
+
if (res.checkboxChecked) {
|
|
316
|
+
await extensionEnablementService.disableExtension({ id: done.id }, undefined);
|
|
317
|
+
}
|
|
318
|
+
if (res.confirmed) {
|
|
319
|
+
await issueService.openReporter({ extensionId: done.id });
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
await bisectService.reset();
|
|
323
|
+
hostService.reload();
|
|
324
|
+
}
|
|
325
|
+
async _checkForBad(dialogService, bisectService) {
|
|
326
|
+
const { result } = await dialogService.prompt({
|
|
327
|
+
type: Severity$1.Info,
|
|
328
|
+
message: ( localizeWithPath(
|
|
329
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
330
|
+
'msg.next',
|
|
331
|
+
"Extension Bisect"
|
|
332
|
+
)),
|
|
333
|
+
detail: ( localizeWithPath(
|
|
334
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
335
|
+
'bisect',
|
|
336
|
+
"Extension Bisect is active and has disabled {0} extensions. Check if you can still reproduce the problem and proceed by selecting from these options.",
|
|
337
|
+
bisectService.disabledCount
|
|
338
|
+
)),
|
|
339
|
+
buttons: [
|
|
340
|
+
{
|
|
341
|
+
label: ( localizeWithPath(
|
|
342
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
343
|
+
{ key: 'next.good', comment: ['&& denotes a mnemonic'] },
|
|
344
|
+
"I ca&&n't reproduce"
|
|
345
|
+
)),
|
|
346
|
+
run: () => false
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
label: ( localizeWithPath(
|
|
350
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
351
|
+
{ key: 'next.bad', comment: ['&& denotes a mnemonic'] },
|
|
352
|
+
"I can &&reproduce"
|
|
353
|
+
)),
|
|
354
|
+
run: () => true
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
label: ( localizeWithPath(
|
|
358
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
359
|
+
{ key: 'next.stop', comment: ['&& denotes a mnemonic'] },
|
|
360
|
+
"&&Stop Bisect"
|
|
361
|
+
)),
|
|
362
|
+
run: () => undefined
|
|
363
|
+
}
|
|
364
|
+
],
|
|
365
|
+
cancelButton: {
|
|
366
|
+
label: ( localizeWithPath(
|
|
367
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
368
|
+
{ key: 'next.cancel', comment: ['&& denotes a mnemonic'] },
|
|
369
|
+
"&&Cancel Bisect"
|
|
370
|
+
)),
|
|
371
|
+
run: () => null
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
return result;
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
registerAction2(class extends Action2 {
|
|
378
|
+
constructor() {
|
|
379
|
+
super({
|
|
380
|
+
id: 'extension.bisect.stop',
|
|
381
|
+
title: ( localize2WithPath(
|
|
382
|
+
'vs/workbench/services/extensionManagement/browser/extensionBisect',
|
|
383
|
+
'title.stop',
|
|
384
|
+
'Stop Extension Bisect'
|
|
385
|
+
)),
|
|
386
|
+
category: Categories.Help,
|
|
387
|
+
f1: true,
|
|
388
|
+
precondition: ExtensionBisectUi.ctxIsBisectActive
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
async run(accessor) {
|
|
392
|
+
const extensionsBisect = accessor.get(IExtensionBisectService);
|
|
393
|
+
const hostService = accessor.get(IHostService);
|
|
394
|
+
await extensionsBisect.reset();
|
|
395
|
+
hostService.reload();
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
export { ExtensionBisectService };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { IExtensionIdentifier, IExtensionManifest, IExtension } from 'vscode/vscode/vs/platform/extensions/common/extensions';
|
|
2
|
+
import { InstallExtensionEvent, UninstallExtensionEvent, DidUninstallExtensionEvent, Metadata, ILocalExtension } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement';
|
|
3
|
+
import { URI } from 'vscode/vscode/vs/base/common/uri';
|
|
4
|
+
import { IProfileAwareExtensionManagementService } from './extensionManagement.service.js';
|
|
5
|
+
|
|
6
|
+
type DidChangeProfileEvent = {
|
|
7
|
+
readonly added: ILocalExtension[];
|
|
8
|
+
readonly removed: ILocalExtension[];
|
|
9
|
+
};
|
|
10
|
+
interface IExtensionManagementServer {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly label: string;
|
|
13
|
+
readonly extensionManagementService: IProfileAwareExtensionManagementService;
|
|
14
|
+
}
|
|
15
|
+
interface IResourceExtension {
|
|
16
|
+
readonly identifier: IExtensionIdentifier;
|
|
17
|
+
readonly location: URI;
|
|
18
|
+
readonly manifest: IExtensionManifest;
|
|
19
|
+
readonly readmeUri?: URI;
|
|
20
|
+
readonly changelogUri?: URI;
|
|
21
|
+
}
|
|
22
|
+
type InstallExtensionOnServerEvent = InstallExtensionEvent & {
|
|
23
|
+
server: IExtensionManagementServer;
|
|
24
|
+
};
|
|
25
|
+
type UninstallExtensionOnServerEvent = UninstallExtensionEvent & {
|
|
26
|
+
server: IExtensionManagementServer;
|
|
27
|
+
};
|
|
28
|
+
type DidUninstallExtensionOnServerEvent = DidUninstallExtensionEvent & {
|
|
29
|
+
server: IExtensionManagementServer;
|
|
30
|
+
};
|
|
31
|
+
type DidChangeProfileForServerEvent = DidChangeProfileEvent & {
|
|
32
|
+
server: IExtensionManagementServer;
|
|
33
|
+
};
|
|
34
|
+
declare const enum EnablementState {
|
|
35
|
+
DisabledByTrustRequirement = 0,
|
|
36
|
+
DisabledByExtensionKind = 1,
|
|
37
|
+
DisabledByEnvironment = 2,
|
|
38
|
+
EnabledByEnvironment = 3,
|
|
39
|
+
DisabledByVirtualWorkspace = 4,
|
|
40
|
+
DisabledByExtensionDependency = 5,
|
|
41
|
+
DisabledGlobally = 6,
|
|
42
|
+
DisabledWorkspace = 7,
|
|
43
|
+
EnabledGlobally = 8,
|
|
44
|
+
EnabledWorkspace = 9
|
|
45
|
+
}
|
|
46
|
+
interface IScannedExtension extends IExtension {
|
|
47
|
+
readonly metadata?: Metadata;
|
|
48
|
+
}
|
|
49
|
+
type ScanOptions = {
|
|
50
|
+
readonly skipInvalidExtensions?: boolean;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export { type DidChangeProfileEvent, type DidChangeProfileForServerEvent, type DidUninstallExtensionOnServerEvent, EnablementState, type IExtensionManagementServer, type IResourceExtension, type IScannedExtension, type InstallExtensionOnServerEvent, type ScanOptions, type UninstallExtensionOnServerEvent };
|