@codingame/monaco-vscode-extension-gallery-service-override 1.83.9

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.
Files changed (66) hide show
  1. package/extensionGallery.d.ts +12 -0
  2. package/extensionGallery.js +76 -0
  3. package/external/rollup-plugin-styles/dist/runtime/inject-css.js +3 -0
  4. package/external/tslib/tslib.es6.js +11 -0
  5. package/index.d.ts +1 -0
  6. package/index.js +1 -0
  7. package/override/vs/platform/dialogs/common/dialogs.js +8 -0
  8. package/package.json +30 -0
  9. package/vscode/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.js +784 -0
  10. package/vscode/src/vs/platform/extensionManagement/common/extensionEnablementService.js +142 -0
  11. package/vscode/src/vs/platform/extensionManagement/common/extensionGalleryService.js +855 -0
  12. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementIpc.js +119 -0
  13. package/vscode/src/vs/platform/extensionManagement/common/extensionTipsService.js +57 -0
  14. package/vscode/src/vs/platform/extensionManagement/common/unsupportedExtensionsMigration.js +58 -0
  15. package/vscode/src/vs/platform/externalServices/common/marketplace.js +17 -0
  16. package/vscode/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.js +492 -0
  17. package/vscode/src/vs/workbench/contrib/extensions/browser/browserRuntimeExtensionsEditor.js +28 -0
  18. package/vscode/src/vs/workbench/contrib/extensions/browser/configBasedRecommendations.js +78 -0
  19. package/vscode/src/vs/workbench/contrib/extensions/browser/deprecatedExtensionsChecker.js +87 -0
  20. package/vscode/src/vs/workbench/contrib/extensions/browser/exeBasedRecommendations.js +60 -0
  21. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEditor.js +1868 -0
  22. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEnablementWorkspaceTrustTransitionParticipant.js +52 -0
  23. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.js +437 -0
  24. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendations.js +17 -0
  25. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationsService.js +221 -0
  26. package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.js +2063 -0
  27. package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.web.contribution.js +13 -0
  28. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActivationProgress.js +46 -0
  29. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.js +65 -0
  30. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsDependencyChecker.js +98 -0
  31. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsList.js +224 -0
  32. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsQuickAccess.js +121 -0
  33. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewer.js +285 -0
  34. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.js +912 -0
  35. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViews.js +1270 -0
  36. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWidgets.js +824 -0
  37. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.js +1730 -0
  38. package/vscode/src/vs/workbench/contrib/extensions/browser/fileBasedRecommendations.js +324 -0
  39. package/vscode/src/vs/workbench/contrib/extensions/browser/keymapRecommendations.js +28 -0
  40. package/vscode/src/vs/workbench/contrib/extensions/browser/languageRecommendations.js +28 -0
  41. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extension.css.js +6 -0
  42. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionEditor.css.js +6 -0
  43. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionsViewlet.css.js +6 -0
  44. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionsWidgets.css.js +6 -0
  45. package/vscode/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css.js +6 -0
  46. package/vscode/src/vs/workbench/contrib/extensions/browser/remoteRecommendations.js +29 -0
  47. package/vscode/src/vs/workbench/contrib/extensions/browser/unsupportedExtensionsMigrationContribution.js +26 -0
  48. package/vscode/src/vs/workbench/contrib/extensions/browser/webRecommendations.js +38 -0
  49. package/vscode/src/vs/workbench/contrib/extensions/browser/workspaceRecommendations.js +88 -0
  50. package/vscode/src/vs/workbench/contrib/extensions/common/extensionQuery.js +67 -0
  51. package/vscode/src/vs/workbench/contrib/extensions/common/extensionsInput.js +43 -0
  52. package/vscode/src/vs/workbench/contrib/extensions/common/extensionsUtils.js +104 -0
  53. package/vscode/src/vs/workbench/contrib/extensions/common/reportExtensionIssueAction.js +31 -0
  54. package/vscode/src/vs/workbench/contrib/extensions/common/runtimeExtensionsInput.js +41 -0
  55. package/vscode/src/vs/workbench/contrib/markdown/browser/markdownDocumentRenderer.js +207 -0
  56. package/vscode/src/vs/workbench/contrib/update/common/update.js +3 -0
  57. package/vscode/src/vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.js +84 -0
  58. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.js +634 -0
  59. package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +883 -0
  60. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementChannelClient.js +109 -0
  61. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementServerService.js +62 -0
  62. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementService.js +633 -0
  63. package/vscode/src/vs/workbench/services/extensionManagement/common/remoteExtensionManagementService.js +58 -0
  64. package/vscode/src/vs/workbench/services/extensionManagement/common/webExtensionManagementService.js +269 -0
  65. package/vscode/src/vs/workbench/services/extensionRecommendations/common/extensionIgnoredRecommendationsService.js +83 -0
  66. package/vscode/src/vs/workbench/services/remote/common/remoteExtensionsScanner.js +73 -0
@@ -0,0 +1,912 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import './media/extensionsViewlet.css.js';
3
+ import { localizeWithPath } from 'monaco-editor/esm/vs/nls.js';
4
+ import { Delayer, timeout, Promises } from 'monaco-editor/esm/vs/base/common/async.js';
5
+ import { isCancellationError } from 'monaco-editor/esm/vs/base/common/errors.js';
6
+ import { createErrorWithActions } from 'monaco-editor/esm/vs/base/common/errorMessage.js';
7
+ import { Disposable, MutableDisposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
8
+ import { Event } from 'monaco-editor/esm/vs/base/common/event.js';
9
+ import { Action } from 'monaco-editor/esm/vs/base/common/actions.js';
10
+ import { append, $, hide, DragAndDropObserver, show, trackFocus, Dimension } from 'monaco-editor/esm/vs/base/browser/dom.js';
11
+ import { ITelemetryService } from 'monaco-editor/esm/vs/platform/telemetry/common/telemetry.js';
12
+ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
13
+ import { IExtensionService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions';
14
+ import { VIEWLET_ID, CONTEXT_HAS_GALLERY, OUTDATED_EXTENSIONS_VIEW_ID, WORKSPACE_RECOMMENDATIONS_VIEW_ID, INSTALL_EXTENSION_FROM_VSIX_COMMAND_ID, AutoCheckUpdatesConfigurationKey, CloseExtensionDetailsOnViewChangeKey, IExtensionsWorkbenchService } from 'vscode/vscode/vs/workbench/contrib/extensions/common/extensions';
15
+ import { InstallLocalExtensionsInRemoteAction, InstallRemoteExtensionsInLocalAction } from 'vscode/vscode/vs/workbench/contrib/extensions/browser/extensionsActions';
16
+ import { IExtensionManagementService } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement';
17
+ import { IExtensionManagementServerService, IWorkbenchExtensionEnablementService } from 'vscode/vscode/vs/workbench/services/extensionManagement/common/extensionManagement';
18
+ import { ExtensionsInput } from '../common/extensionsInput.js';
19
+ import { ServerInstalledExtensionsView, DefaultPopularExtensionsView, DefaultRecommendedExtensionsView, EnabledExtensionsView, DisabledExtensionsView, SearchMarketplaceExtensionsView, ExtensionsListView, RecentlyUpdatedExtensionsView, OutdatedExtensionsView, WorkspaceRecommendedExtensionsView, RecommendedExtensionsView, BuiltInFeatureExtensionsView, BuiltInThemesExtensionsView, BuiltInProgrammingLanguageExtensionsView, UntrustedWorkspaceUnsupportedExtensionsView, UntrustedWorkspacePartiallySupportedExtensionsView, VirtualWorkspaceUnsupportedExtensionsView, VirtualWorkspacePartiallySupportedExtensionsView, DeprecatedExtensionsView } from './extensionsViews.js';
20
+ import { IProgressService } from 'monaco-editor/esm/vs/platform/progress/common/progress.js';
21
+ import { IEditorGroupsService } from 'vscode/vscode/vs/workbench/services/editor/common/editorGroupsService';
22
+ import Severity from 'monaco-editor/esm/vs/base/common/severity.js';
23
+ import { NumberBadge, IActivityService } from 'vscode/vscode/vs/workbench/services/activity/common/activity';
24
+ import { IThemeService } from 'monaco-editor/esm/vs/platform/theme/common/themeService.js';
25
+ import { IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
26
+ import { Extensions, IViewDescriptorService } from 'vscode/vscode/vs/workbench/common/views';
27
+ import { IStorageService } from 'monaco-editor/esm/vs/platform/storage/common/storage.js';
28
+ import { IWorkspaceContextService } from 'monaco-editor/esm/vs/platform/workspace/common/workspace.js';
29
+ import { RawContextKey, ContextKeyExpr, IContextKeyService } from 'monaco-editor/esm/vs/platform/contextkey/common/contextkey.js';
30
+ import { IContextMenuService } from 'monaco-editor/esm/vs/platform/contextview/browser/contextView.js';
31
+ import { ILogService } from 'monaco-editor/esm/vs/platform/log/common/log.js';
32
+ import { NotificationPriority, INotificationService } from 'monaco-editor/esm/vs/platform/notification/common/notification.js';
33
+ import { IHostService } from 'vscode/vscode/vs/workbench/services/host/browser/host';
34
+ import { IWorkbenchLayoutService } from 'vscode/vscode/vs/workbench/services/layout/browser/layoutService';
35
+ import { ViewPaneContainer } from 'vscode/vscode/vs/workbench/browser/parts/views/viewPaneContainer';
36
+ import { Query } from '../common/extensionQuery.js';
37
+ import { SuggestEnabledInput } from 'vscode/vscode/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput';
38
+ import { alert } from 'monaco-editor/esm/vs/base/browser/ui/aria/aria.js';
39
+ import { Registry } from 'monaco-editor/esm/vs/platform/registry/common/platform.js';
40
+ import { ILabelService } from 'monaco-editor/esm/vs/platform/label/common/label.js';
41
+ import { SyncDescriptor } from 'monaco-editor/esm/vs/platform/instantiation/common/descriptors.js';
42
+ import { IPreferencesService } from 'vscode/vscode/vs/workbench/services/preferences/common/preferences';
43
+ import { SIDE_BAR_DRAG_AND_DROP_BACKGROUND } from 'vscode/vscode/vs/workbench/common/theme';
44
+ import { IWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/common/environmentService';
45
+ import { WorkbenchStateContext, VirtualWorkspaceContext } from 'vscode/vscode/vs/workbench/common/contextkeys';
46
+ import { ICommandService } from 'monaco-editor/esm/vs/platform/commands/common/commands.js';
47
+ import { installLocalInRemoteIcon } from 'vscode/vscode/vs/workbench/contrib/extensions/browser/extensionsIcons';
48
+ import { registerAction2, Action2, MenuId } from 'monaco-editor/esm/vs/platform/actions/common/actions.js';
49
+ import { IPaneCompositePartService } from 'vscode/vscode/vs/workbench/services/panecomposite/browser/panecomposite';
50
+ import { coalesce } from 'monaco-editor/esm/vs/base/common/arrays.js';
51
+ import { extractEditorsAndFilesDropData } from 'monaco-editor/esm/vs/platform/dnd/browser/dnd.js';
52
+ import { extname } from 'monaco-editor/esm/vs/base/common/resources.js';
53
+ import { areSameExtensions } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagementUtil';
54
+ import { registerNavigableContainer } from 'vscode/vscode/vs/workbench/browser/actions/widgetNavigationCommands';
55
+
56
+ const DefaultViewsContext = ( new RawContextKey('defaultExtensionViews', true));
57
+ const ExtensionsSortByContext = ( new RawContextKey('extensionsSortByValue', ''));
58
+ const SearchMarketplaceExtensionsContext = ( new RawContextKey('searchMarketplaceExtensions', false));
59
+ const SearchHasTextContext = ( new RawContextKey('extensionSearchHasText', false));
60
+ const SearchInstalledExtensionsContext = ( new RawContextKey('searchInstalledExtensions', false));
61
+ const SearchRecentlyUpdatedExtensionsContext = ( new RawContextKey('searchRecentlyUpdatedExtensions', false));
62
+ const SearchExtensionUpdatesContext = ( new RawContextKey('searchExtensionUpdates', false));
63
+ const SearchOutdatedExtensionsContext = ( new RawContextKey('searchOutdatedExtensions', false));
64
+ const SearchEnabledExtensionsContext = ( new RawContextKey('searchEnabledExtensions', false));
65
+ const SearchDisabledExtensionsContext = ( new RawContextKey('searchDisabledExtensions', false));
66
+ const HasInstalledExtensionsContext = ( new RawContextKey('hasInstalledExtensions', true));
67
+ const BuiltInExtensionsContext = ( new RawContextKey('builtInExtensions', false));
68
+ const SearchBuiltInExtensionsContext = ( new RawContextKey('searchBuiltInExtensions', false));
69
+ const SearchUnsupportedWorkspaceExtensionsContext = ( new RawContextKey('searchUnsupportedWorkspaceExtensions', false));
70
+ const SearchDeprecatedExtensionsContext = ( new RawContextKey('searchDeprecatedExtensions', false));
71
+ const RecommendedExtensionsContext = ( new RawContextKey('recommendedExtensions', false));
72
+ const SortByUpdateDateContext = ( new RawContextKey('sortByUpdateDate', false));
73
+ const REMOTE_CATEGORY = { value: ( localizeWithPath(
74
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
75
+ { key: 'remote', comment: ['Remote as in remote machine'] },
76
+ "Remote"
77
+ )), original: 'Remote' };
78
+ let ExtensionsViewletViewsContribution = class ExtensionsViewletViewsContribution {
79
+ constructor(extensionManagementServerService, labelService, viewDescriptorService, contextKeyService) {
80
+ this.extensionManagementServerService = extensionManagementServerService;
81
+ this.labelService = labelService;
82
+ this.contextKeyService = contextKeyService;
83
+ this.container = viewDescriptorService.getViewContainerById(VIEWLET_ID);
84
+ this.registerViews();
85
+ }
86
+ registerViews() {
87
+ const viewDescriptors = [];
88
+ viewDescriptors.push(...this.createDefaultExtensionsViewDescriptors());
89
+ viewDescriptors.push(...this.createSearchExtensionsViewDescriptors());
90
+ viewDescriptors.push(...this.createRecommendedExtensionsViewDescriptors());
91
+ viewDescriptors.push(...this.createBuiltinExtensionsViewDescriptors());
92
+ viewDescriptors.push(...this.createUnsupportedWorkspaceExtensionsViewDescriptors());
93
+ viewDescriptors.push(...this.createOtherLocalFilteredExtensionsViewDescriptors());
94
+ ( Registry.as(Extensions.ViewsRegistry)).registerViews(viewDescriptors, this.container);
95
+ }
96
+ createDefaultExtensionsViewDescriptors() {
97
+ const viewDescriptors = [];
98
+ const servers = [];
99
+ if (this.extensionManagementServerService.localExtensionManagementServer) {
100
+ servers.push(this.extensionManagementServerService.localExtensionManagementServer);
101
+ }
102
+ if (this.extensionManagementServerService.remoteExtensionManagementServer) {
103
+ servers.push(this.extensionManagementServerService.remoteExtensionManagementServer);
104
+ }
105
+ if (this.extensionManagementServerService.webExtensionManagementServer) {
106
+ servers.push(this.extensionManagementServerService.webExtensionManagementServer);
107
+ }
108
+ const getViewName = (viewTitle, server) => {
109
+ return servers.length > 1 ? `${server.label} - ${viewTitle}` : viewTitle;
110
+ };
111
+ let installedWebExtensionsContextChangeEvent = Event.None;
112
+ if (this.extensionManagementServerService.webExtensionManagementServer && this.extensionManagementServerService.remoteExtensionManagementServer) {
113
+ const interestingContextKeys = ( new Set());
114
+ interestingContextKeys.add('hasInstalledWebExtensions');
115
+ installedWebExtensionsContextChangeEvent = Event.filter(this.contextKeyService.onDidChangeContext, e => e.affectsSome(interestingContextKeys));
116
+ }
117
+ const serverLabelChangeEvent = Event.any(this.labelService.onDidChangeFormatters, installedWebExtensionsContextChangeEvent);
118
+ for (const server of servers) {
119
+ const getInstalledViewName = () => getViewName(( localizeWithPath(
120
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
121
+ 'installed',
122
+ "Installed"
123
+ )), server);
124
+ const onDidChangeTitle = ( Event.map(serverLabelChangeEvent, () => getInstalledViewName()));
125
+ const id = servers.length > 1 ? `workbench.views.extensions.${server.id}.installed` : `workbench.views.extensions.installed`;
126
+ viewDescriptors.push({
127
+ id,
128
+ get name() { return getInstalledViewName(); },
129
+ weight: 100,
130
+ order: 1,
131
+ when: ( ContextKeyExpr.and(DefaultViewsContext)),
132
+ ctorDescriptor: ( new SyncDescriptor(
133
+ ServerInstalledExtensionsView,
134
+ [{ server, flexibleHeight: true, onDidChangeTitle }]
135
+ )),
136
+ canToggleVisibility: servers.length === 1
137
+ });
138
+ if (server === this.extensionManagementServerService.remoteExtensionManagementServer && this.extensionManagementServerService.localExtensionManagementServer) {
139
+ registerAction2(class InstallLocalExtensionsInRemoteAction2 extends Action2 {
140
+ constructor() {
141
+ super({
142
+ id: 'workbench.extensions.installLocalExtensions',
143
+ get title() {
144
+ return {
145
+ value: ( localizeWithPath(
146
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
147
+ 'select and install local extensions',
148
+ "Install Local Extensions in '{0}'...",
149
+ server.label
150
+ )),
151
+ original: `Install Local Extensions in '${server.label}'...`,
152
+ };
153
+ },
154
+ category: REMOTE_CATEGORY,
155
+ icon: installLocalInRemoteIcon,
156
+ f1: true,
157
+ menu: {
158
+ id: MenuId.ViewTitle,
159
+ when: ( ContextKeyExpr.equals('view', id)),
160
+ group: 'navigation',
161
+ }
162
+ });
163
+ }
164
+ run(accessor) {
165
+ return accessor.get(IInstantiationService).createInstance(InstallLocalExtensionsInRemoteAction).run();
166
+ }
167
+ });
168
+ }
169
+ }
170
+ if (this.extensionManagementServerService.localExtensionManagementServer && this.extensionManagementServerService.remoteExtensionManagementServer) {
171
+ registerAction2(class InstallRemoteExtensionsInLocalAction2 extends Action2 {
172
+ constructor() {
173
+ super({
174
+ id: 'workbench.extensions.actions.installLocalExtensionsInRemote',
175
+ title: { value: ( localizeWithPath(
176
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
177
+ 'install remote in local',
178
+ "Install Remote Extensions Locally..."
179
+ )), original: 'Install Remote Extensions Locally...' },
180
+ category: REMOTE_CATEGORY,
181
+ f1: true
182
+ });
183
+ }
184
+ run(accessor) {
185
+ return accessor.get(IInstantiationService).createInstance(InstallRemoteExtensionsInLocalAction, 'workbench.extensions.actions.installLocalExtensionsInRemote').run();
186
+ }
187
+ });
188
+ }
189
+ viewDescriptors.push({
190
+ id: 'workbench.views.extensions.popular',
191
+ name: ( localizeWithPath(
192
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
193
+ 'popularExtensions',
194
+ "Popular"
195
+ )),
196
+ ctorDescriptor: ( new SyncDescriptor(DefaultPopularExtensionsView, [{ hideBadge: true }])),
197
+ when: ( ContextKeyExpr.and(
198
+ DefaultViewsContext,
199
+ ContextKeyExpr.not('hasInstalledExtensions'),
200
+ CONTEXT_HAS_GALLERY
201
+ )),
202
+ weight: 60,
203
+ order: 2,
204
+ canToggleVisibility: false
205
+ });
206
+ viewDescriptors.push({
207
+ id: 'extensions.recommendedList',
208
+ name: ( localizeWithPath(
209
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
210
+ 'recommendedExtensions',
211
+ "Recommended"
212
+ )),
213
+ ctorDescriptor: ( new SyncDescriptor(DefaultRecommendedExtensionsView, [{ flexibleHeight: true }])),
214
+ when: ( ContextKeyExpr.and(DefaultViewsContext, ( SortByUpdateDateContext.negate()), ContextKeyExpr.not('config.extensions.showRecommendationsOnlyOnDemand'), CONTEXT_HAS_GALLERY)),
215
+ weight: 40,
216
+ order: 3,
217
+ canToggleVisibility: true
218
+ });
219
+ if (servers.length === 1) {
220
+ viewDescriptors.push({
221
+ id: 'workbench.views.extensions.enabled',
222
+ name: ( localizeWithPath(
223
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
224
+ 'enabledExtensions',
225
+ "Enabled"
226
+ )),
227
+ ctorDescriptor: ( new SyncDescriptor(EnabledExtensionsView, [{}])),
228
+ when: ( ContextKeyExpr.and(DefaultViewsContext, ( ContextKeyExpr.has('hasInstalledExtensions')))),
229
+ hideByDefault: true,
230
+ weight: 40,
231
+ order: 4,
232
+ canToggleVisibility: true
233
+ });
234
+ viewDescriptors.push({
235
+ id: 'workbench.views.extensions.disabled',
236
+ name: ( localizeWithPath(
237
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
238
+ 'disabledExtensions',
239
+ "Disabled"
240
+ )),
241
+ ctorDescriptor: ( new SyncDescriptor(DisabledExtensionsView, [{}])),
242
+ when: ( ContextKeyExpr.and(DefaultViewsContext, ( ContextKeyExpr.has('hasInstalledExtensions')))),
243
+ hideByDefault: true,
244
+ weight: 10,
245
+ order: 5,
246
+ canToggleVisibility: true
247
+ });
248
+ }
249
+ return viewDescriptors;
250
+ }
251
+ createSearchExtensionsViewDescriptors() {
252
+ const viewDescriptors = [];
253
+ viewDescriptors.push({
254
+ id: 'workbench.views.extensions.marketplace',
255
+ name: ( localizeWithPath(
256
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
257
+ 'marketPlace',
258
+ "Marketplace"
259
+ )),
260
+ ctorDescriptor: ( new SyncDescriptor(SearchMarketplaceExtensionsView, [{}])),
261
+ when: ( ContextKeyExpr.and(( ContextKeyExpr.has('searchMarketplaceExtensions')))),
262
+ });
263
+ viewDescriptors.push({
264
+ id: 'workbench.views.extensions.searchInstalled',
265
+ name: ( localizeWithPath(
266
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
267
+ 'installed',
268
+ "Installed"
269
+ )),
270
+ ctorDescriptor: ( new SyncDescriptor(ExtensionsListView, [{}])),
271
+ when: ( ContextKeyExpr.and(( ContextKeyExpr.has('searchInstalledExtensions')))),
272
+ });
273
+ viewDescriptors.push({
274
+ id: 'workbench.views.extensions.searchRecentlyUpdated',
275
+ name: ( localizeWithPath(
276
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
277
+ 'recently updated',
278
+ "Recently Updated"
279
+ )),
280
+ ctorDescriptor: ( new SyncDescriptor(RecentlyUpdatedExtensionsView, [{}])),
281
+ when: ( ContextKeyExpr.or(SearchExtensionUpdatesContext, ( ContextKeyExpr.has('searchRecentlyUpdatedExtensions')))),
282
+ order: 2,
283
+ });
284
+ viewDescriptors.push({
285
+ id: 'workbench.views.extensions.searchEnabled',
286
+ name: ( localizeWithPath(
287
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
288
+ 'enabled',
289
+ "Enabled"
290
+ )),
291
+ ctorDescriptor: ( new SyncDescriptor(ExtensionsListView, [{}])),
292
+ when: ( ContextKeyExpr.and(( ContextKeyExpr.has('searchEnabledExtensions')))),
293
+ });
294
+ viewDescriptors.push({
295
+ id: 'workbench.views.extensions.searchDisabled',
296
+ name: ( localizeWithPath(
297
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
298
+ 'disabled',
299
+ "Disabled"
300
+ )),
301
+ ctorDescriptor: ( new SyncDescriptor(ExtensionsListView, [{}])),
302
+ when: ( ContextKeyExpr.and(( ContextKeyExpr.has('searchDisabledExtensions')))),
303
+ });
304
+ viewDescriptors.push({
305
+ id: OUTDATED_EXTENSIONS_VIEW_ID,
306
+ name: ( localizeWithPath(
307
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
308
+ 'availableUpdates',
309
+ "Available Updates"
310
+ )),
311
+ ctorDescriptor: ( new SyncDescriptor(OutdatedExtensionsView, [{}])),
312
+ when: ( ContextKeyExpr.or(SearchExtensionUpdatesContext, ( ContextKeyExpr.has('searchOutdatedExtensions')))),
313
+ order: 1,
314
+ });
315
+ viewDescriptors.push({
316
+ id: 'workbench.views.extensions.searchBuiltin',
317
+ name: ( localizeWithPath(
318
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
319
+ 'builtin',
320
+ "Builtin"
321
+ )),
322
+ ctorDescriptor: ( new SyncDescriptor(ExtensionsListView, [{}])),
323
+ when: ( ContextKeyExpr.and(( ContextKeyExpr.has('searchBuiltInExtensions')))),
324
+ });
325
+ viewDescriptors.push({
326
+ id: 'workbench.views.extensions.searchWorkspaceUnsupported',
327
+ name: ( localizeWithPath(
328
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
329
+ 'workspaceUnsupported',
330
+ "Workspace Unsupported"
331
+ )),
332
+ ctorDescriptor: ( new SyncDescriptor(ExtensionsListView, [{}])),
333
+ when: ( ContextKeyExpr.and(( ContextKeyExpr.has('searchWorkspaceUnsupportedExtensions')))),
334
+ });
335
+ return viewDescriptors;
336
+ }
337
+ createRecommendedExtensionsViewDescriptors() {
338
+ const viewDescriptors = [];
339
+ viewDescriptors.push({
340
+ id: WORKSPACE_RECOMMENDATIONS_VIEW_ID,
341
+ name: ( localizeWithPath(
342
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
343
+ 'workspaceRecommendedExtensions',
344
+ "Workspace Recommendations"
345
+ )),
346
+ ctorDescriptor: ( new SyncDescriptor(WorkspaceRecommendedExtensionsView, [{}])),
347
+ when: ( ContextKeyExpr.and(( ContextKeyExpr.has('recommendedExtensions')), ( WorkbenchStateContext.notEqualsTo('empty')))),
348
+ order: 1
349
+ });
350
+ viewDescriptors.push({
351
+ id: 'workbench.views.extensions.otherRecommendations',
352
+ name: ( localizeWithPath(
353
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
354
+ 'otherRecommendedExtensions',
355
+ "Other Recommendations"
356
+ )),
357
+ ctorDescriptor: ( new SyncDescriptor(RecommendedExtensionsView, [{}])),
358
+ when: ( ContextKeyExpr.has('recommendedExtensions')),
359
+ order: 2
360
+ });
361
+ return viewDescriptors;
362
+ }
363
+ createBuiltinExtensionsViewDescriptors() {
364
+ const viewDescriptors = [];
365
+ viewDescriptors.push({
366
+ id: 'workbench.views.extensions.builtinFeatureExtensions',
367
+ name: ( localizeWithPath(
368
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
369
+ 'builtinFeatureExtensions',
370
+ "Features"
371
+ )),
372
+ ctorDescriptor: ( new SyncDescriptor(BuiltInFeatureExtensionsView, [{}])),
373
+ when: ( ContextKeyExpr.has('builtInExtensions')),
374
+ });
375
+ viewDescriptors.push({
376
+ id: 'workbench.views.extensions.builtinThemeExtensions',
377
+ name: ( localizeWithPath(
378
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
379
+ 'builtInThemesExtensions',
380
+ "Themes"
381
+ )),
382
+ ctorDescriptor: ( new SyncDescriptor(BuiltInThemesExtensionsView, [{}])),
383
+ when: ( ContextKeyExpr.has('builtInExtensions')),
384
+ });
385
+ viewDescriptors.push({
386
+ id: 'workbench.views.extensions.builtinProgrammingLanguageExtensions',
387
+ name: ( localizeWithPath(
388
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
389
+ 'builtinProgrammingLanguageExtensions',
390
+ "Programming Languages"
391
+ )),
392
+ ctorDescriptor: ( new SyncDescriptor(BuiltInProgrammingLanguageExtensionsView, [{}])),
393
+ when: ( ContextKeyExpr.has('builtInExtensions')),
394
+ });
395
+ return viewDescriptors;
396
+ }
397
+ createUnsupportedWorkspaceExtensionsViewDescriptors() {
398
+ const viewDescriptors = [];
399
+ viewDescriptors.push({
400
+ id: 'workbench.views.extensions.untrustedUnsupportedExtensions',
401
+ name: ( localizeWithPath(
402
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
403
+ 'untrustedUnsupportedExtensions',
404
+ "Disabled in Restricted Mode"
405
+ )),
406
+ ctorDescriptor: ( new SyncDescriptor(UntrustedWorkspaceUnsupportedExtensionsView, [{}])),
407
+ when: ( ContextKeyExpr.and(SearchUnsupportedWorkspaceExtensionsContext)),
408
+ });
409
+ viewDescriptors.push({
410
+ id: 'workbench.views.extensions.untrustedPartiallySupportedExtensions',
411
+ name: ( localizeWithPath(
412
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
413
+ 'untrustedPartiallySupportedExtensions',
414
+ "Limited in Restricted Mode"
415
+ )),
416
+ ctorDescriptor: ( new SyncDescriptor(UntrustedWorkspacePartiallySupportedExtensionsView, [{}])),
417
+ when: ( ContextKeyExpr.and(SearchUnsupportedWorkspaceExtensionsContext)),
418
+ });
419
+ viewDescriptors.push({
420
+ id: 'workbench.views.extensions.virtualUnsupportedExtensions',
421
+ name: ( localizeWithPath(
422
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
423
+ 'virtualUnsupportedExtensions',
424
+ "Disabled in Virtual Workspaces"
425
+ )),
426
+ ctorDescriptor: ( new SyncDescriptor(VirtualWorkspaceUnsupportedExtensionsView, [{}])),
427
+ when: ( ContextKeyExpr.and(VirtualWorkspaceContext, SearchUnsupportedWorkspaceExtensionsContext)),
428
+ });
429
+ viewDescriptors.push({
430
+ id: 'workbench.views.extensions.virtualPartiallySupportedExtensions',
431
+ name: ( localizeWithPath(
432
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
433
+ 'virtualPartiallySupportedExtensions',
434
+ "Limited in Virtual Workspaces"
435
+ )),
436
+ ctorDescriptor: ( new SyncDescriptor(VirtualWorkspacePartiallySupportedExtensionsView, [{}])),
437
+ when: ( ContextKeyExpr.and(VirtualWorkspaceContext, SearchUnsupportedWorkspaceExtensionsContext)),
438
+ });
439
+ return viewDescriptors;
440
+ }
441
+ createOtherLocalFilteredExtensionsViewDescriptors() {
442
+ const viewDescriptors = [];
443
+ viewDescriptors.push({
444
+ id: 'workbench.views.extensions.deprecatedExtensions',
445
+ name: ( localizeWithPath(
446
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
447
+ 'deprecated',
448
+ "Deprecated"
449
+ )),
450
+ ctorDescriptor: ( new SyncDescriptor(DeprecatedExtensionsView, [{}])),
451
+ when: ( ContextKeyExpr.and(SearchDeprecatedExtensionsContext)),
452
+ });
453
+ return viewDescriptors;
454
+ }
455
+ };
456
+ ExtensionsViewletViewsContribution = ( __decorate([
457
+ ( __param(0, IExtensionManagementServerService)),
458
+ ( __param(1, ILabelService)),
459
+ ( __param(2, IViewDescriptorService)),
460
+ ( __param(3, IContextKeyService))
461
+ ], ExtensionsViewletViewsContribution));
462
+ let ExtensionsViewPaneContainer = class ExtensionsViewPaneContainer extends ViewPaneContainer {
463
+ constructor(layoutService, telemetryService, progressService, instantiationService, editorGroupService, extensionsWorkbenchService, extensionManagementServerService, notificationService, paneCompositeService, themeService, configurationService, storageService, contextService, contextKeyService, contextMenuService, extensionService, viewDescriptorService, preferencesService, commandService) {
464
+ super(VIEWLET_ID, { mergeViewWithContainerWhenSingleView: true }, instantiationService, configurationService, layoutService, contextMenuService, telemetryService, extensionService, themeService, storageService, contextService, viewDescriptorService);
465
+ this.progressService = progressService;
466
+ this.editorGroupService = editorGroupService;
467
+ this.extensionsWorkbenchService = extensionsWorkbenchService;
468
+ this.extensionManagementServerService = extensionManagementServerService;
469
+ this.notificationService = notificationService;
470
+ this.paneCompositeService = paneCompositeService;
471
+ this.contextKeyService = contextKeyService;
472
+ this.preferencesService = preferencesService;
473
+ this.commandService = commandService;
474
+ this.searchDelayer = ( new Delayer(500));
475
+ this.defaultViewsContextKey = DefaultViewsContext.bindTo(contextKeyService);
476
+ this.sortByContextKey = ExtensionsSortByContext.bindTo(contextKeyService);
477
+ this.searchMarketplaceExtensionsContextKey = SearchMarketplaceExtensionsContext.bindTo(contextKeyService);
478
+ this.searchHasTextContextKey = SearchHasTextContext.bindTo(contextKeyService);
479
+ this.sortByUpdateDateContextKey = SortByUpdateDateContext.bindTo(contextKeyService);
480
+ this.searchInstalledExtensionsContextKey = SearchInstalledExtensionsContext.bindTo(contextKeyService);
481
+ this.searchRecentlyUpdatedExtensionsContextKey = SearchRecentlyUpdatedExtensionsContext.bindTo(contextKeyService);
482
+ this.searchExtensionUpdatesContextKey = SearchExtensionUpdatesContext.bindTo(contextKeyService);
483
+ this.searchWorkspaceUnsupportedExtensionsContextKey = SearchUnsupportedWorkspaceExtensionsContext.bindTo(contextKeyService);
484
+ this.searchDeprecatedExtensionsContextKey = SearchDeprecatedExtensionsContext.bindTo(contextKeyService);
485
+ this.searchOutdatedExtensionsContextKey = SearchOutdatedExtensionsContext.bindTo(contextKeyService);
486
+ this.searchEnabledExtensionsContextKey = SearchEnabledExtensionsContext.bindTo(contextKeyService);
487
+ this.searchDisabledExtensionsContextKey = SearchDisabledExtensionsContext.bindTo(contextKeyService);
488
+ this.hasInstalledExtensionsContextKey = HasInstalledExtensionsContext.bindTo(contextKeyService);
489
+ this.builtInExtensionsContextKey = BuiltInExtensionsContext.bindTo(contextKeyService);
490
+ this.searchBuiltInExtensionsContextKey = SearchBuiltInExtensionsContext.bindTo(contextKeyService);
491
+ this.recommendedExtensionsContextKey = RecommendedExtensionsContext.bindTo(contextKeyService);
492
+ this._register(this.paneCompositeService.onDidPaneCompositeOpen(e => { if (e.viewContainerLocation === 0 ) {
493
+ this.onViewletOpen(e.composite);
494
+ } }, this));
495
+ this._register(extensionsWorkbenchService.onReset(() => this.refresh()));
496
+ this.searchViewletState = this.getMemento(1 , 1 );
497
+ }
498
+ get searchValue() {
499
+ return this.searchBox?.getValue();
500
+ }
501
+ create(parent) {
502
+ parent.classList.add('extensions-viewlet');
503
+ this.root = parent;
504
+ const overlay = append(this.root, $('.overlay'));
505
+ const overlayBackgroundColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? '';
506
+ overlay.style.backgroundColor = overlayBackgroundColor;
507
+ hide(overlay);
508
+ const header = append(this.root, $('.header'));
509
+ const placeholder = ( localizeWithPath(
510
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
511
+ 'searchExtensions',
512
+ "Search Extensions in Marketplace"
513
+ ));
514
+ const searchValue = this.searchViewletState['query.value'] ? this.searchViewletState['query.value'] : '';
515
+ this.searchBox = this._register(this.instantiationService.createInstance(SuggestEnabledInput, `${VIEWLET_ID}.searchbox`, header, {
516
+ triggerCharacters: ['@'],
517
+ sortKey: (item) => {
518
+ if (item.indexOf(':') === -1) {
519
+ return 'a';
520
+ }
521
+ else if (/ext:/.test(item) || /id:/.test(item) || /tag:/.test(item)) {
522
+ return 'b';
523
+ }
524
+ else if (/sort:/.test(item)) {
525
+ return 'c';
526
+ }
527
+ else {
528
+ return 'd';
529
+ }
530
+ },
531
+ provideResults: (query) => Query.suggestions(query)
532
+ }, placeholder, 'extensions:searchinput', { placeholderText: placeholder, value: searchValue }));
533
+ this.updateInstalledExtensionsContexts();
534
+ if (this.searchBox.getValue()) {
535
+ this.triggerSearch();
536
+ }
537
+ this._register(this.searchBox.onInputDidChange(() => {
538
+ this.sortByContextKey.set(Query.parse(this.searchBox.getValue() || '').sortBy);
539
+ this.triggerSearch();
540
+ }, this));
541
+ this._register(this.searchBox.onShouldFocusResults(() => this.focusListView(), this));
542
+ this._register(( new DragAndDropObserver(this.root, {
543
+ onDragEnd: (e) => undefined,
544
+ onDragEnter: (e) => {
545
+ if (this.isSupportedDragElement(e)) {
546
+ show(overlay);
547
+ }
548
+ },
549
+ onDragLeave: (e) => {
550
+ if (this.isSupportedDragElement(e)) {
551
+ hide(overlay);
552
+ }
553
+ },
554
+ onDragOver: (e) => {
555
+ if (this.isSupportedDragElement(e)) {
556
+ e.dataTransfer.dropEffect = 'copy';
557
+ }
558
+ },
559
+ onDrop: async (e) => {
560
+ if (this.isSupportedDragElement(e)) {
561
+ hide(overlay);
562
+ const vsixs = coalesce(( (await this.instantiationService.invokeFunction(accessor => extractEditorsAndFilesDropData(accessor, e)))
563
+ .map(
564
+ editor => editor.resource && extname(editor.resource) === '.vsix' ? editor.resource : undefined
565
+ )));
566
+ if (vsixs.length > 0) {
567
+ try {
568
+ await this.commandService.executeCommand(INSTALL_EXTENSION_FROM_VSIX_COMMAND_ID, vsixs);
569
+ }
570
+ catch (err) {
571
+ this.notificationService.error(err);
572
+ }
573
+ }
574
+ }
575
+ }
576
+ })));
577
+ super.create(append(this.root, $('.extensions')));
578
+ const focusTracker = this._register(trackFocus(this.root));
579
+ const isSearchBoxFocused = () => this.searchBox?.inputWidget.hasWidgetFocus();
580
+ this._register(registerNavigableContainer({
581
+ focusNotifiers: [focusTracker],
582
+ focusNextWidget: () => {
583
+ if (isSearchBoxFocused()) {
584
+ this.focusListView();
585
+ }
586
+ },
587
+ focusPreviousWidget: () => {
588
+ if (!isSearchBoxFocused()) {
589
+ this.searchBox?.focus();
590
+ }
591
+ }
592
+ }));
593
+ }
594
+ focus() {
595
+ this.searchBox?.focus();
596
+ }
597
+ layout(dimension) {
598
+ if (this.root) {
599
+ this.root.classList.toggle('narrow', dimension.width <= 250);
600
+ this.root.classList.toggle('mini', dimension.width <= 200);
601
+ }
602
+ this.searchBox?.layout(( new Dimension(dimension.width - 34 - 8, 20)));
603
+ super.layout(( new Dimension(dimension.width, dimension.height - 41)));
604
+ }
605
+ getOptimalWidth() {
606
+ return 400;
607
+ }
608
+ search(value) {
609
+ if (this.searchBox && this.searchBox.getValue() !== value) {
610
+ this.searchBox.setValue(value);
611
+ }
612
+ }
613
+ async refresh() {
614
+ await this.updateInstalledExtensionsContexts();
615
+ this.doSearch(true);
616
+ if (this.configurationService.getValue(AutoCheckUpdatesConfigurationKey)) {
617
+ this.extensionsWorkbenchService.checkForUpdates();
618
+ }
619
+ }
620
+ async updateInstalledExtensionsContexts() {
621
+ const result = await this.extensionsWorkbenchService.queryLocal();
622
+ this.hasInstalledExtensionsContextKey.set(( result.some(r => !r.isBuiltin)));
623
+ }
624
+ triggerSearch() {
625
+ this.searchDelayer.trigger(() => this.doSearch(), this.searchBox && this.searchBox.getValue() ? 500 : 0).then(undefined, err => this.onError(err));
626
+ }
627
+ normalizedQuery() {
628
+ return this.searchBox
629
+ ? this.searchBox.getValue()
630
+ .trim()
631
+ .replace(/@category/g, 'category')
632
+ .replace(/@tag:/g, 'tag:')
633
+ .replace(/@ext:/g, 'ext:')
634
+ .replace(/@featured/g, 'featured')
635
+ .replace(/@popular/g, this.extensionManagementServerService.webExtensionManagementServer && !this.extensionManagementServerService.localExtensionManagementServer && !this.extensionManagementServerService.remoteExtensionManagementServer ? '@web' : '@popular')
636
+ : '';
637
+ }
638
+ saveState() {
639
+ const value = this.searchBox ? this.searchBox.getValue() : '';
640
+ if (ExtensionsListView.isLocalExtensionsQuery(value)) {
641
+ this.searchViewletState['query.value'] = value;
642
+ }
643
+ else {
644
+ this.searchViewletState['query.value'] = '';
645
+ }
646
+ super.saveState();
647
+ }
648
+ doSearch(refresh) {
649
+ const value = this.normalizedQuery();
650
+ this.contextKeyService.bufferChangeEvents(() => {
651
+ const isRecommendedExtensionsQuery = ExtensionsListView.isRecommendedExtensionsQuery(value);
652
+ this.searchHasTextContextKey.set(value.trim() !== '');
653
+ this.searchInstalledExtensionsContextKey.set(ExtensionsListView.isInstalledExtensionsQuery(value));
654
+ this.searchRecentlyUpdatedExtensionsContextKey.set(ExtensionsListView.isSearchRecentlyUpdatedQuery(value) && !ExtensionsListView.isSearchExtensionUpdatesQuery(value));
655
+ this.searchOutdatedExtensionsContextKey.set(ExtensionsListView.isOutdatedExtensionsQuery(value) && !ExtensionsListView.isSearchExtensionUpdatesQuery(value));
656
+ this.searchExtensionUpdatesContextKey.set(ExtensionsListView.isSearchExtensionUpdatesQuery(value));
657
+ this.searchEnabledExtensionsContextKey.set(ExtensionsListView.isEnabledExtensionsQuery(value));
658
+ this.searchDisabledExtensionsContextKey.set(ExtensionsListView.isDisabledExtensionsQuery(value));
659
+ this.searchBuiltInExtensionsContextKey.set(ExtensionsListView.isSearchBuiltInExtensionsQuery(value));
660
+ this.searchWorkspaceUnsupportedExtensionsContextKey.set(ExtensionsListView.isSearchWorkspaceUnsupportedExtensionsQuery(value));
661
+ this.searchDeprecatedExtensionsContextKey.set(ExtensionsListView.isSearchDeprecatedExtensionsQuery(value));
662
+ this.builtInExtensionsContextKey.set(ExtensionsListView.isBuiltInExtensionsQuery(value));
663
+ this.recommendedExtensionsContextKey.set(isRecommendedExtensionsQuery);
664
+ this.searchMarketplaceExtensionsContextKey.set(!!value && !ExtensionsListView.isLocalExtensionsQuery(value) && !isRecommendedExtensionsQuery);
665
+ this.sortByUpdateDateContextKey.set(ExtensionsListView.isSortUpdateDateQuery(value));
666
+ this.defaultViewsContextKey.set(!value || ExtensionsListView.isSortInstalledExtensionsQuery(value));
667
+ });
668
+ return this.progress(Promise.all(( this.panes.map(view => view.show(this.normalizedQuery(), refresh)
669
+ .then(model => this.alertSearchResult(model.length, view.id)))))).then(() => undefined);
670
+ }
671
+ onDidAddViewDescriptors(added) {
672
+ const addedViews = super.onDidAddViewDescriptors(added);
673
+ this.progress(Promise.all(( addedViews.map(addedView => addedView.show(this.normalizedQuery())
674
+ .then(model => this.alertSearchResult(model.length, addedView.id))))));
675
+ return addedViews;
676
+ }
677
+ alertSearchResult(count, viewId) {
678
+ const view = this.viewContainerModel.visibleViewDescriptors.find(view => view.id === viewId);
679
+ switch (count) {
680
+ case 0:
681
+ break;
682
+ case 1:
683
+ if (view) {
684
+ alert(( localizeWithPath(
685
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
686
+ 'extensionFoundInSection',
687
+ "1 extension found in the {0} section.",
688
+ view.name
689
+ )));
690
+ }
691
+ else {
692
+ alert(( localizeWithPath(
693
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
694
+ 'extensionFound',
695
+ "1 extension found."
696
+ )));
697
+ }
698
+ break;
699
+ default:
700
+ if (view) {
701
+ alert(( localizeWithPath(
702
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
703
+ 'extensionsFoundInSection',
704
+ "{0} extensions found in the {1} section.",
705
+ count,
706
+ view.name
707
+ )));
708
+ }
709
+ else {
710
+ alert(( localizeWithPath(
711
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
712
+ 'extensionsFound',
713
+ "{0} extensions found.",
714
+ count
715
+ )));
716
+ }
717
+ break;
718
+ }
719
+ }
720
+ getFirstExpandedPane() {
721
+ for (const pane of this.panes) {
722
+ if (pane.isExpanded() && pane instanceof ExtensionsListView) {
723
+ return pane;
724
+ }
725
+ }
726
+ return undefined;
727
+ }
728
+ focusListView() {
729
+ const pane = this.getFirstExpandedPane();
730
+ if (pane && pane.count() > 0) {
731
+ pane.focus();
732
+ }
733
+ }
734
+ onViewletOpen(viewlet) {
735
+ if (!viewlet || viewlet.getId() === VIEWLET_ID) {
736
+ return;
737
+ }
738
+ if (this.configurationService.getValue(CloseExtensionDetailsOnViewChangeKey)) {
739
+ const promises = ( this.editorGroupService.groups.map(group => {
740
+ const editors = group.editors.filter(input => input instanceof ExtensionsInput);
741
+ return group.closeEditors(editors);
742
+ }));
743
+ Promise.all(promises);
744
+ }
745
+ }
746
+ progress(promise) {
747
+ return this.progressService.withProgress({ location: 5 }, () => promise);
748
+ }
749
+ onError(err) {
750
+ if (isCancellationError(err)) {
751
+ return;
752
+ }
753
+ const message = err && err.message || '';
754
+ if (/ECONNREFUSED/.test(message)) {
755
+ const error = createErrorWithActions(( localizeWithPath(
756
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
757
+ 'suggestProxyError',
758
+ "Marketplace returned 'ECONNREFUSED'. Please check the 'http.proxy' setting."
759
+ )), [
760
+ ( new Action('open user settings', ( localizeWithPath(
761
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
762
+ 'open user settings',
763
+ "Open User Settings"
764
+ )), undefined, true, () => this.preferencesService.openUserSettings()))
765
+ ]);
766
+ this.notificationService.error(error);
767
+ return;
768
+ }
769
+ this.notificationService.error(err);
770
+ }
771
+ isSupportedDragElement(e) {
772
+ if (e.dataTransfer) {
773
+ const typesLowerCase = ( e.dataTransfer.types.map(t => t.toLocaleLowerCase()));
774
+ return typesLowerCase.indexOf('files') !== -1;
775
+ }
776
+ return false;
777
+ }
778
+ };
779
+ ExtensionsViewPaneContainer = ( __decorate([
780
+ ( __param(0, IWorkbenchLayoutService)),
781
+ ( __param(1, ITelemetryService)),
782
+ ( __param(2, IProgressService)),
783
+ ( __param(3, IInstantiationService)),
784
+ ( __param(4, IEditorGroupsService)),
785
+ ( __param(5, IExtensionsWorkbenchService)),
786
+ ( __param(6, IExtensionManagementServerService)),
787
+ ( __param(7, INotificationService)),
788
+ ( __param(8, IPaneCompositePartService)),
789
+ ( __param(9, IThemeService)),
790
+ ( __param(10, IConfigurationService)),
791
+ ( __param(11, IStorageService)),
792
+ ( __param(12, IWorkspaceContextService)),
793
+ ( __param(13, IContextKeyService)),
794
+ ( __param(14, IContextMenuService)),
795
+ ( __param(15, IExtensionService)),
796
+ ( __param(16, IViewDescriptorService)),
797
+ ( __param(17, IPreferencesService)),
798
+ ( __param(18, ICommandService))
799
+ ], ExtensionsViewPaneContainer));
800
+ let StatusUpdater = class StatusUpdater extends Disposable {
801
+ constructor(activityService, extensionsWorkbenchService, extensionEnablementService) {
802
+ super();
803
+ this.activityService = activityService;
804
+ this.extensionsWorkbenchService = extensionsWorkbenchService;
805
+ this.extensionEnablementService = extensionEnablementService;
806
+ this.badgeHandle = this._register(( new MutableDisposable()));
807
+ this.onServiceChange();
808
+ this._register(Event.debounce(extensionsWorkbenchService.onChange, () => undefined, 100, undefined, undefined, undefined, this._store)(this.onServiceChange, this));
809
+ }
810
+ onServiceChange() {
811
+ this.badgeHandle.clear();
812
+ const extensionsReloadRequired = this.extensionsWorkbenchService.installed.filter(e => e.reloadRequiredStatus !== undefined);
813
+ const outdated = this.extensionsWorkbenchService.outdated.reduce((r, e) => r + (this.extensionEnablementService.isEnabled(e.local) && !e.pinned && !extensionsReloadRequired.includes(e) ? 1 : 0), 0);
814
+ const newBadgeNumber = outdated + extensionsReloadRequired.length;
815
+ if (newBadgeNumber > 0) {
816
+ let msg = '';
817
+ if (outdated) {
818
+ msg += outdated === 1 ? ( localizeWithPath(
819
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
820
+ 'extensionToUpdate',
821
+ '{0} requires update',
822
+ outdated
823
+ )) : ( localizeWithPath(
824
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
825
+ 'extensionsToUpdate',
826
+ '{0} require update',
827
+ outdated
828
+ ));
829
+ }
830
+ if (outdated > 0 && extensionsReloadRequired.length > 0) {
831
+ msg += ', ';
832
+ }
833
+ if (extensionsReloadRequired.length) {
834
+ msg += extensionsReloadRequired.length === 1 ? ( localizeWithPath(
835
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
836
+ 'extensionToReload',
837
+ '{0} requires reload',
838
+ extensionsReloadRequired.length
839
+ )) : ( localizeWithPath(
840
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
841
+ 'extensionsToReload',
842
+ '{0} require reload',
843
+ extensionsReloadRequired.length
844
+ ));
845
+ }
846
+ const badge = ( new NumberBadge(newBadgeNumber, () => msg));
847
+ this.badgeHandle.value = this.activityService.showViewContainerActivity(VIEWLET_ID, { badge, clazz: 'extensions-badge count-badge' });
848
+ }
849
+ }
850
+ };
851
+ StatusUpdater = ( __decorate([
852
+ ( __param(0, IActivityService)),
853
+ ( __param(1, IExtensionsWorkbenchService)),
854
+ ( __param(2, IWorkbenchExtensionEnablementService))
855
+ ], StatusUpdater));
856
+ let MaliciousExtensionChecker = class MaliciousExtensionChecker {
857
+ constructor(extensionsManagementService, hostService, logService, notificationService, environmentService) {
858
+ this.extensionsManagementService = extensionsManagementService;
859
+ this.hostService = hostService;
860
+ this.logService = logService;
861
+ this.notificationService = notificationService;
862
+ this.environmentService = environmentService;
863
+ if (!this.environmentService.disableExtensions) {
864
+ this.loopCheckForMaliciousExtensions();
865
+ }
866
+ }
867
+ loopCheckForMaliciousExtensions() {
868
+ this.checkForMaliciousExtensions()
869
+ .then(() => timeout(1000 * 60 * 5))
870
+ .then(() => this.loopCheckForMaliciousExtensions());
871
+ }
872
+ checkForMaliciousExtensions() {
873
+ return this.extensionsManagementService.getExtensionsControlManifest().then(extensionsControlManifest => {
874
+ return this.extensionsManagementService.getInstalled(1 ).then(installed => {
875
+ const maliciousExtensions = installed
876
+ .filter(e => ( extensionsControlManifest.malicious.some(identifier => areSameExtensions(e.identifier, identifier))));
877
+ if (maliciousExtensions.length) {
878
+ return Promises.settled(( maliciousExtensions.map(e => this.extensionsManagementService.uninstall(e).then(() => {
879
+ this.notificationService.prompt(Severity.Warning, ( localizeWithPath(
880
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
881
+ 'malicious warning',
882
+ "We have uninstalled '{0}' which was reported to be problematic.",
883
+ e.identifier.id
884
+ )), [{
885
+ label: ( localizeWithPath(
886
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
887
+ 'reloadNow',
888
+ "Reload Now"
889
+ )),
890
+ run: () => this.hostService.reload()
891
+ }], {
892
+ sticky: true,
893
+ priority: NotificationPriority.URGENT
894
+ });
895
+ }))));
896
+ }
897
+ else {
898
+ return Promise.resolve(undefined);
899
+ }
900
+ }).then(() => undefined);
901
+ }, err => this.logService.error(err));
902
+ }
903
+ };
904
+ MaliciousExtensionChecker = ( __decorate([
905
+ ( __param(0, IExtensionManagementService)),
906
+ ( __param(1, IHostService)),
907
+ ( __param(2, ILogService)),
908
+ ( __param(3, INotificationService)),
909
+ ( __param(4, IWorkbenchEnvironmentService))
910
+ ], MaliciousExtensionChecker));
911
+
912
+ export { BuiltInExtensionsContext, DefaultViewsContext, ExtensionsSortByContext, ExtensionsViewPaneContainer, ExtensionsViewletViewsContribution, MaliciousExtensionChecker, RecommendedExtensionsContext, SearchHasTextContext, SearchMarketplaceExtensionsContext, StatusUpdater };