@codingame/monaco-vscode-extension-gallery-service-override 2.2.2 → 3.0.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.
Files changed (17) hide show
  1. package/extensionGallery.js +23 -8
  2. package/package.json +9 -9
  3. package/vscode/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.js +123 -163
  4. package/vscode/src/vs/platform/extensionManagement/common/extensionGalleryService.js +1 -1
  5. package/vscode/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.js +42 -7
  6. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEditor.js +43 -827
  7. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionFeaturesTab.js +542 -0
  8. package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.js +63 -54
  9. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsList.js +0 -1
  10. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.js +10 -13
  11. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViews.js +36 -8
  12. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWidgets.js +2 -2
  13. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.js +1 -5
  14. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extension.css.js +1 -1
  15. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionEditor.css.js +1 -1
  16. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionFeaturesManagemetService.js +234 -0
  17. package/vscode/src/vs/workbench/services/extensionManagement/common/webExtensionManagementService.js +2 -2
@@ -359,24 +359,24 @@ import { IFileDialogService, IDialogService } from 'vscode/vscode/vs/platform/di
359
359
  });
360
360
  const jsonRegistry = ( Registry.as(Extensions$3.JSONContribution));
361
361
  jsonRegistry.registerSchema(ExtensionsConfigurationSchemaId, ExtensionsConfigurationSchema);
362
- CommandsRegistry.registerCommand('_extensions.manage', (accessor, extensionId, tab, preserveFocus) => {
362
+ CommandsRegistry.registerCommand('_extensions.manage', (accessor, extensionId, tab, preserveFocus, feature) => {
363
363
  const extensionService = accessor.get(IExtensionsWorkbenchService);
364
364
  const extension = extensionService.local.find(e => areSameExtensions(e.identifier, { id: extensionId }));
365
365
  if (extension) {
366
- extensionService.open(extension, { tab, preserveFocus });
366
+ extensionService.open(extension, { tab, preserveFocus, feature });
367
367
  }
368
368
  else {
369
369
  throw new Error(localizeWithPath('vs/workbench/contrib/extensions/browser/extensions.contribution', 'notFound', "Extension '{0}' not found.", extensionId));
370
370
  }
371
371
  });
372
- CommandsRegistry.registerCommand('extension.open', async (accessor, extensionId, tab, preserveFocus) => {
372
+ CommandsRegistry.registerCommand('extension.open', async (accessor, extensionId, tab, preserveFocus, feature) => {
373
373
  const extensionService = accessor.get(IExtensionsWorkbenchService);
374
374
  const commandService = accessor.get(ICommandService);
375
375
  const [extension] = await extensionService.getExtensions([{ id: extensionId }], CancellationToken.None);
376
376
  if (extension) {
377
- return extensionService.open(extension, { tab, preserveFocus });
377
+ return extensionService.open(extension, { tab, preserveFocus, feature });
378
378
  }
379
- return commandService.executeCommand('_extensions.manage', extensionId, tab, preserveFocus);
379
+ return commandService.executeCommand('_extensions.manage', extensionId, tab, preserveFocus, feature);
380
380
  });
381
381
  CommandsRegistry.registerCommand({
382
382
  id: 'workbench.extensions.installExtension',
@@ -1107,34 +1107,43 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1107
1107
  run: async (accessor) => {
1108
1108
  const extensionManagementService = accessor.get(IWorkbenchExtensionManagementService);
1109
1109
  if (isWeb) {
1110
- const quickInputService = accessor.get(IQuickInputService);
1111
- const disposables = ( new DisposableStore());
1112
- const quickPick = disposables.add(quickInputService.createQuickPick());
1113
- quickPick.title = ( localizeWithPath(
1114
- 'vs/workbench/contrib/extensions/browser/extensions.contribution',
1115
- 'installFromLocation',
1116
- "Install Extension from Location"
1117
- ));
1118
- quickPick.customButton = true;
1119
- quickPick.customLabel = ( localizeWithPath(
1120
- 'vs/workbench/contrib/extensions/browser/extensions.contribution',
1121
- 'install button',
1122
- "Install"
1123
- ));
1124
- quickPick.placeholder = ( localizeWithPath(
1125
- 'vs/workbench/contrib/extensions/browser/extensions.contribution',
1126
- 'installFromLocationPlaceHolder',
1127
- "Location of the web extension"
1128
- ));
1129
- quickPick.ignoreFocusOut = true;
1130
- disposables.add(Event.any(quickPick.onDidAccept, quickPick.onDidCustom)(() => {
1131
- quickPick.hide();
1132
- if (quickPick.value) {
1133
- extensionManagementService.installFromLocation(( URI.parse(quickPick.value)));
1134
- }
1110
+ return ( new Promise((c, e) => {
1111
+ const quickInputService = accessor.get(IQuickInputService);
1112
+ const disposables = ( new DisposableStore());
1113
+ const quickPick = disposables.add(quickInputService.createQuickPick());
1114
+ quickPick.title = ( localizeWithPath(
1115
+ 'vs/workbench/contrib/extensions/browser/extensions.contribution',
1116
+ 'installFromLocation',
1117
+ "Install Extension from Location"
1118
+ ));
1119
+ quickPick.customButton = true;
1120
+ quickPick.customLabel = ( localizeWithPath(
1121
+ 'vs/workbench/contrib/extensions/browser/extensions.contribution',
1122
+ 'install button',
1123
+ "Install"
1124
+ ));
1125
+ quickPick.placeholder = ( localizeWithPath(
1126
+ 'vs/workbench/contrib/extensions/browser/extensions.contribution',
1127
+ 'installFromLocationPlaceHolder',
1128
+ "Location of the web extension"
1129
+ ));
1130
+ quickPick.ignoreFocusOut = true;
1131
+ disposables.add(Event.any(quickPick.onDidAccept, quickPick.onDidCustom)(async () => {
1132
+ quickPick.hide();
1133
+ if (quickPick.value) {
1134
+ try {
1135
+ await extensionManagementService.installFromLocation(( URI.parse(quickPick.value)));
1136
+ }
1137
+ catch (error) {
1138
+ e(error);
1139
+ return;
1140
+ }
1141
+ }
1142
+ c();
1143
+ }));
1144
+ disposables.add(quickPick.onDidHide(() => disposables.dispose()));
1145
+ quickPick.show();
1135
1146
  }));
1136
- disposables.add(quickPick.onDidHide(() => disposables.dispose()));
1137
- quickPick.show();
1138
1147
  }
1139
1148
  else {
1140
1149
  const fileDialogService = accessor.get(IFileDialogService);
@@ -1149,7 +1158,7 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1149
1158
  )),
1150
1159
  });
1151
1160
  if (extensionLocation?.[0]) {
1152
- extensionManagementService.installFromLocation(extensionLocation[0]);
1161
+ await extensionManagementService.installFromLocation(extensionLocation[0]);
1153
1162
  }
1154
1163
  }
1155
1164
  }
@@ -1653,7 +1662,7 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1653
1662
  });
1654
1663
  this.registerExtensionAction({
1655
1664
  id: ToggleAutoUpdateForExtensionAction.ID,
1656
- title: { value: ToggleAutoUpdateForExtensionAction.LABEL, original: 'Auto Update' },
1665
+ title: ToggleAutoUpdateForExtensionAction.LABEL,
1657
1666
  category: ExtensionsLocalizedLabel,
1658
1667
  menu: {
1659
1668
  id: MenuId.ExtensionContext,
@@ -1863,11 +1872,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1863
1872
  });
1864
1873
  this.registerExtensionAction({
1865
1874
  id: 'workbench.extensions.action.toggleApplyToAllProfiles',
1866
- title: { value: ( localizeWithPath(
1875
+ title: ( localize2WithPath(
1867
1876
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
1868
1877
  'workbench.extensions.action.toggleApplyToAllProfiles',
1869
1878
  "Apply Extension to all Profiles"
1870
- )), original: `Apply Extension to all Profiles` },
1879
+ )),
1871
1880
  toggled: ( ContextKeyExpr.has('isApplicationScopedExtension')),
1872
1881
  menu: {
1873
1882
  id: MenuId.ExtensionContext,
@@ -1884,11 +1893,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1884
1893
  });
1885
1894
  this.registerExtensionAction({
1886
1895
  id: TOGGLE_IGNORE_EXTENSION_ACTION_ID,
1887
- title: { value: ( localizeWithPath(
1896
+ title: ( localize2WithPath(
1888
1897
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
1889
1898
  'workbench.extensions.action.toggleIgnoreExtension',
1890
1899
  "Sync This Extension"
1891
- )), original: `Sync This Extension` },
1900
+ )),
1892
1901
  menu: {
1893
1902
  id: MenuId.ExtensionContext,
1894
1903
  group: '2_configure',
@@ -1904,11 +1913,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1904
1913
  });
1905
1914
  this.registerExtensionAction({
1906
1915
  id: 'workbench.extensions.action.ignoreRecommendation',
1907
- title: { value: ( localizeWithPath(
1916
+ title: ( localize2WithPath(
1908
1917
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
1909
1918
  'workbench.extensions.action.ignoreRecommendation',
1910
1919
  "Ignore Recommendation"
1911
- )), original: `Ignore Recommendation` },
1920
+ )),
1912
1921
  menu: {
1913
1922
  id: MenuId.ExtensionContext,
1914
1923
  group: '3_recommendations',
@@ -1919,11 +1928,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1919
1928
  });
1920
1929
  this.registerExtensionAction({
1921
1930
  id: 'workbench.extensions.action.undoIgnoredRecommendation',
1922
- title: { value: ( localizeWithPath(
1931
+ title: ( localize2WithPath(
1923
1932
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
1924
1933
  'workbench.extensions.action.undoIgnoredRecommendation',
1925
1934
  "Undo Ignored Recommendation"
1926
- )), original: `Undo Ignored Recommendation` },
1935
+ )),
1927
1936
  menu: {
1928
1937
  id: MenuId.ExtensionContext,
1929
1938
  group: '3_recommendations',
@@ -1934,11 +1943,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1934
1943
  });
1935
1944
  this.registerExtensionAction({
1936
1945
  id: 'workbench.extensions.action.addExtensionToWorkspaceRecommendations',
1937
- title: { value: ( localizeWithPath(
1946
+ title: ( localize2WithPath(
1938
1947
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
1939
1948
  'workbench.extensions.action.addExtensionToWorkspaceRecommendations',
1940
1949
  "Add to Workspace Recommendations"
1941
- )), original: `Add to Workspace Recommendations` },
1950
+ )),
1942
1951
  menu: {
1943
1952
  id: MenuId.ExtensionContext,
1944
1953
  group: '3_recommendations',
@@ -1949,11 +1958,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1949
1958
  });
1950
1959
  this.registerExtensionAction({
1951
1960
  id: 'workbench.extensions.action.removeExtensionFromWorkspaceRecommendations',
1952
- title: { value: ( localizeWithPath(
1961
+ title: ( localize2WithPath(
1953
1962
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
1954
1963
  'workbench.extensions.action.removeExtensionFromWorkspaceRecommendations',
1955
1964
  "Remove from Workspace Recommendations"
1956
- )), original: `Remove from Workspace Recommendations` },
1965
+ )),
1957
1966
  menu: {
1958
1967
  id: MenuId.ExtensionContext,
1959
1968
  group: '3_recommendations',
@@ -1964,11 +1973,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1964
1973
  });
1965
1974
  this.registerExtensionAction({
1966
1975
  id: 'workbench.extensions.action.addToWorkspaceRecommendations',
1967
- title: { value: ( localizeWithPath(
1976
+ title: ( localize2WithPath(
1968
1977
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
1969
1978
  'workbench.extensions.action.addToWorkspaceRecommendations',
1970
1979
  "Add Extension to Workspace Recommendations"
1971
- )), original: `Add Extension to Workspace Recommendations` },
1980
+ )),
1972
1981
  category: ( localizeWithPath(
1973
1982
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
1974
1983
  'extensions',
@@ -1994,11 +2003,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
1994
2003
  });
1995
2004
  this.registerExtensionAction({
1996
2005
  id: 'workbench.extensions.action.addToWorkspaceFolderRecommendations',
1997
- title: { value: ( localizeWithPath(
2006
+ title: ( localize2WithPath(
1998
2007
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
1999
2008
  'workbench.extensions.action.addToWorkspaceFolderRecommendations',
2000
2009
  "Add Extension to Workspace Folder Recommendations"
2001
- )), original: `Add Extension to Workspace Folder Recommendations` },
2010
+ )),
2002
2011
  category: ( localizeWithPath(
2003
2012
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
2004
2013
  'extensions',
@@ -2012,11 +2021,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
2012
2021
  });
2013
2022
  this.registerExtensionAction({
2014
2023
  id: 'workbench.extensions.action.addToWorkspaceIgnoredRecommendations',
2015
- title: { value: ( localizeWithPath(
2024
+ title: ( localize2WithPath(
2016
2025
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
2017
2026
  'workbench.extensions.action.addToWorkspaceIgnoredRecommendations',
2018
2027
  "Add Extension to Workspace Ignored Recommendations"
2019
- )), original: `Add Extension to Workspace Ignored Recommendations` },
2028
+ )),
2020
2029
  category: ( localizeWithPath(
2021
2030
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
2022
2031
  'extensions',
@@ -2042,11 +2051,11 @@ let ExtensionsContributions = class ExtensionsContributions extends Disposable {
2042
2051
  });
2043
2052
  this.registerExtensionAction({
2044
2053
  id: 'workbench.extensions.action.addToWorkspaceFolderIgnoredRecommendations',
2045
- title: { value: ( localizeWithPath(
2054
+ title: ( localize2WithPath(
2046
2055
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
2047
2056
  'workbench.extensions.action.addToWorkspaceFolderIgnoredRecommendations',
2048
2057
  "Add Extension to Workspace Folder Ignored Recommendations"
2049
- )), original: `Add Extension to Workspace Folder Ignored Recommendations` },
2058
+ )),
2050
2059
  category: ( localizeWithPath(
2051
2060
  'vs/workbench/contrib/extensions/browser/extensions.contribution',
2052
2061
  'extensions',
@@ -59,7 +59,6 @@ let Renderer = class Renderer {
59
59
  const verifiedPublisherWidget = this.instantiationService.createInstance(VerifiedPublisherWidget, append(publisher, $(`.verified-publisher`)), true);
60
60
  const publisherDisplayName = append(publisher, $('.publisher-name.ellipsis'));
61
61
  const actionbar = ( new ActionBar(footer, {
62
- animated: false,
63
62
  actionViewItemProvider: (action) => {
64
63
  if (action instanceof ActionWithDropDownAction) {
65
64
  return ( new ExtensionActionWithDropdownActionViewItem(
@@ -1,6 +1,6 @@
1
1
  import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
2
  import './media/extensionsViewlet.css.js';
3
- import { localizeWithPath, localize2WithPath } from 'vscode/vscode/vs/nls';
3
+ import { localize2WithPath, localizeWithPath } from 'vscode/vscode/vs/nls';
4
4
  import { Delayer, timeout, Promises } from 'vscode/vscode/vs/base/common/async';
5
5
  import { isCancellationError } from 'vscode/vscode/vs/base/common/errors';
6
6
  import { createErrorWithActions } from 'vscode/vscode/vs/base/common/errorMessage';
@@ -74,11 +74,11 @@ const SearchUnsupportedWorkspaceExtensionsContext = ( new RawContextKey('searchU
74
74
  const SearchDeprecatedExtensionsContext = ( new RawContextKey('searchDeprecatedExtensions', false));
75
75
  const RecommendedExtensionsContext = ( new RawContextKey('recommendedExtensions', false));
76
76
  const SortByUpdateDateContext = ( new RawContextKey('sortByUpdateDate', false));
77
- const REMOTE_CATEGORY = { value: ( localizeWithPath(
77
+ const REMOTE_CATEGORY = ( localize2WithPath(
78
78
  'vs/workbench/contrib/extensions/browser/extensionsViewlet',
79
79
  { key: 'remote', comment: ['Remote as in remote machine'] },
80
80
  "Remote"
81
- )), original: 'Remote' };
81
+ ));
82
82
  let ExtensionsViewletViewsContribution = class ExtensionsViewletViewsContribution {
83
83
  constructor(extensionManagementServerService, labelService, viewDescriptorService, contextKeyService) {
84
84
  this.extensionManagementServerService = extensionManagementServerService;
@@ -150,15 +150,12 @@ let ExtensionsViewletViewsContribution = class ExtensionsViewletViewsContributio
150
150
  super({
151
151
  id: 'workbench.extensions.installLocalExtensions',
152
152
  get title() {
153
- return {
154
- value: ( localizeWithPath(
155
- 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
156
- 'select and install local extensions',
157
- "Install Local Extensions in '{0}'...",
158
- server.label
159
- )),
160
- original: `Install Local Extensions in '${server.label}'...`,
161
- };
153
+ return ( localize2WithPath(
154
+ 'vs/workbench/contrib/extensions/browser/extensionsViewlet',
155
+ 'select and install local extensions',
156
+ "Install Local Extensions in '{0}'...",
157
+ server.label
158
+ ));
162
159
  },
163
160
  category: REMOTE_CATEGORY,
164
161
  icon: installLocalInRemoteIcon,
@@ -562,7 +559,7 @@ let ExtensionsViewPaneContainer = class ExtensionsViewPaneContainer extends View
562
559
  toolbarOptions: {
563
560
  primaryGroup: () => true,
564
561
  },
565
- actionViewItemProvider: action => createActionViewItem(this.instantiationService, action)
562
+ actionViewItemProvider: (action, options) => createActionViewItem(this.instantiationService, action, options)
566
563
  }));
567
564
  this._register(( new DragAndDropObserver(this.root, {
568
565
  onDragEnter: (e) => {
@@ -29,7 +29,7 @@ import { coalesce, distinct, flatten } from 'vscode/vscode/vs/base/common/arrays
29
29
  import { alert } from 'vscode/vscode/vs/base/browser/ui/aria/aria';
30
30
  import { CancellationToken } from 'vscode/vscode/vs/base/common/cancellation';
31
31
  import { ActionRunner, Separator, Action } from 'vscode/vscode/vs/base/common/actions';
32
- import { ExtensionIdentifierMap, isLanguagePackExtension } from 'vscode/vscode/vs/platform/extensions/common/extensions';
32
+ import { ExtensionIdentifierMap, ExtensionIdentifier, isLanguagePackExtension } from 'vscode/vscode/vs/platform/extensions/common/extensions';
33
33
  import { createCancelablePromise, ThrottledDelayer } from 'vscode/vscode/vs/base/common/async';
34
34
  import { IProductService } from 'vscode/vscode/vs/platform/product/common/productService';
35
35
  import { SeverityIcon } from 'vscode/vscode/vs/platform/severityIcon/browser/severityIcon';
@@ -46,6 +46,8 @@ import { IWorkbenchLayoutService } from 'vscode/vscode/vs/workbench/services/lay
46
46
  import { ILogService } from 'vscode/vscode/vs/platform/log/common/log';
47
47
  import { isOfflineError } from 'vscode/vscode/vs/base/parts/request/common/request';
48
48
  import { defaultCountBadgeStyles } from 'vscode/vscode/vs/platform/theme/browser/defaultStyles';
49
+ import { Registry } from 'vscode/vscode/vs/platform/registry/common/platform';
50
+ import { Extensions, IExtensionFeaturesManagementService } from 'vscode/vscode/vs/workbench/services/extensionManagement/common/extensionFeatures';
49
51
 
50
52
  var ExtensionsListView_1;
51
53
  const NONE_CATEGORY = 'none';
@@ -72,7 +74,7 @@ function isLocalSortBy(value) {
72
74
  let ExtensionsListView = class ExtensionsListView extends ViewPane {
73
75
  static { ExtensionsListView_1 = this; }
74
76
  static { this.RECENT_UPDATE_DURATION = 7 * 24 * 60 * 60 * 1000; }
75
- constructor(options, viewletViewOptions, notificationService, keybindingService, contextMenuService, instantiationService, themeService, extensionService, extensionsWorkbenchService, extensionRecommendationsService, telemetryService, configurationService, contextService, extensionManagementServerService, extensionManifestPropertiesService, extensionManagementService, workspaceService, productService, contextKeyService, viewDescriptorService, openerService, preferencesService, storageService, workspaceTrustManagementService, extensionEnablementService, layoutService, logService) {
77
+ constructor(options, viewletViewOptions, notificationService, keybindingService, contextMenuService, instantiationService, themeService, extensionService, extensionsWorkbenchService, extensionRecommendationsService, telemetryService, configurationService, contextService, extensionManagementServerService, extensionManifestPropertiesService, extensionManagementService, workspaceService, productService, contextKeyService, viewDescriptorService, openerService, preferencesService, storageService, workspaceTrustManagementService, extensionEnablementService, layoutService, extensionFeaturesManagementService, logService) {
76
78
  super({
77
79
  ...viewletViewOptions,
78
80
  showActions: ViewPaneShowActions.Always,
@@ -94,6 +96,7 @@ let ExtensionsListView = class ExtensionsListView extends ViewPane {
94
96
  this.workspaceTrustManagementService = workspaceTrustManagementService;
95
97
  this.extensionEnablementService = extensionEnablementService;
96
98
  this.layoutService = layoutService;
99
+ this.extensionFeaturesManagementService = extensionFeaturesManagementService;
97
100
  this.logService = logService;
98
101
  this.list = null;
99
102
  this.queryRequest = null;
@@ -360,6 +363,9 @@ let ExtensionsListView = class ExtensionsListView extends ViewPane {
360
363
  else if (/@recentlyUpdated/i.test(query.value)) {
361
364
  extensions = this.filterRecentlyUpdatedExtensions(local, query, options);
362
365
  }
366
+ else if (/@feature:/i.test(query.value)) {
367
+ extensions = this.filterExtensionsByFeature(local, query, options);
368
+ }
363
369
  return { extensions, canIncludeInstalledExtensions };
364
370
  }
365
371
  filterBuiltinExtensions(local, query, options) {
@@ -556,6 +562,22 @@ let ExtensionsListView = class ExtensionsListView extends ViewPane {
556
562
  options.sortBy = options.sortBy ?? "UpdateDate" ;
557
563
  return this.sortExtensions(result, options);
558
564
  }
565
+ filterExtensionsByFeature(local, query, options) {
566
+ const value = query.value.replace(/@feature:/g, '').trim().toLowerCase();
567
+ const featureId = value.split(' ')[0];
568
+ const feature = ( Registry.as(Extensions.ExtensionFeaturesRegistry)).getExtensionFeature(featureId);
569
+ if (!feature) {
570
+ return [];
571
+ }
572
+ const renderer = feature.renderer ? this.instantiationService.createInstance(feature.renderer) : undefined;
573
+ const result = local.filter(e => {
574
+ if (!e.local) {
575
+ return false;
576
+ }
577
+ return renderer?.shouldRender(e.local.manifest) || this.extensionFeaturesManagementService.getAccessData(( new ExtensionIdentifier(e.identifier.id)), featureId);
578
+ });
579
+ return this.sortExtensions(result, options);
580
+ }
559
581
  mergeAddedExtensions(extensions, newExtensions) {
560
582
  const oldExtensions = [...extensions];
561
583
  const findPreviousExtensionIndex = (from) => {
@@ -918,7 +940,8 @@ let ExtensionsListView = class ExtensionsListView extends ViewPane {
918
940
  || this.isSearchWorkspaceUnsupportedExtensionsQuery(query)
919
941
  || this.isSearchRecentlyUpdatedQuery(query)
920
942
  || this.isSearchExtensionUpdatesQuery(query)
921
- || this.isSortInstalledExtensionsQuery(query, sortBy);
943
+ || this.isSortInstalledExtensionsQuery(query, sortBy)
944
+ || this.isFeatureExtensionsQuery(query);
922
945
  }
923
946
  static isSearchBuiltInExtensionsQuery(query) {
924
947
  return /@builtin\s.+/i.test(query);
@@ -936,7 +959,7 @@ let ExtensionsListView = class ExtensionsListView extends ViewPane {
936
959
  return /@installed$/i.test(query);
937
960
  }
938
961
  static isSearchInstalledExtensionsQuery(query) {
939
- return /@installed\s./i.test(query);
962
+ return /@installed\s./i.test(query) || this.isFeatureExtensionsQuery(query);
940
963
  }
941
964
  static isOutdatedExtensionsQuery(query) {
942
965
  return /@outdated/i.test(query);
@@ -989,6 +1012,9 @@ let ExtensionsListView = class ExtensionsListView extends ViewPane {
989
1012
  static isSortUpdateDateQuery(query) {
990
1013
  return /@sort:updateDate/i.test(query);
991
1014
  }
1015
+ static isFeatureExtensionsQuery(query) {
1016
+ return /@feature:/i.test(query);
1017
+ }
992
1018
  focus() {
993
1019
  super.focus();
994
1020
  if (!this.list) {
@@ -1025,7 +1051,8 @@ ExtensionsListView = ExtensionsListView_1 = ( __decorate([
1025
1051
  ( __param(23, IWorkspaceTrustManagementService)),
1026
1052
  ( __param(24, IWorkbenchExtensionEnablementService)),
1027
1053
  ( __param(25, IWorkbenchLayoutService)),
1028
- ( __param(26, ILogService))
1054
+ ( __param(26, IExtensionFeaturesManagementService)),
1055
+ ( __param(27, ILogService))
1029
1056
  ], ExtensionsListView));
1030
1057
  class DefaultPopularExtensionsView extends ExtensionsListView {
1031
1058
  async show() {
@@ -1079,8 +1106,8 @@ class RecentlyUpdatedExtensionsView extends ExtensionsListView {
1079
1106
  }
1080
1107
  }
1081
1108
  let StaticQueryExtensionsView = class StaticQueryExtensionsView extends ExtensionsListView {
1082
- constructor(options, viewletViewOptions, notificationService, keybindingService, contextMenuService, instantiationService, themeService, extensionService, extensionsWorkbenchService, extensionRecommendationsService, telemetryService, configurationService, contextService, extensionManagementServerService, extensionManifestPropertiesService, extensionManagementService, workspaceService, productService, contextKeyService, viewDescriptorService, openerService, preferencesService, storageService, workspaceTrustManagementService, extensionEnablementService, layoutService, logService) {
1083
- super(options, viewletViewOptions, notificationService, keybindingService, contextMenuService, instantiationService, themeService, extensionService, extensionsWorkbenchService, extensionRecommendationsService, telemetryService, configurationService, contextService, extensionManagementServerService, extensionManifestPropertiesService, extensionManagementService, workspaceService, productService, contextKeyService, viewDescriptorService, openerService, preferencesService, storageService, workspaceTrustManagementService, extensionEnablementService, layoutService, logService);
1109
+ constructor(options, viewletViewOptions, notificationService, keybindingService, contextMenuService, instantiationService, themeService, extensionService, extensionsWorkbenchService, extensionRecommendationsService, telemetryService, configurationService, contextService, extensionManagementServerService, extensionManifestPropertiesService, extensionManagementService, workspaceService, productService, contextKeyService, viewDescriptorService, openerService, preferencesService, storageService, workspaceTrustManagementService, extensionEnablementService, layoutService, extensionFeaturesManagementService, logService) {
1110
+ super(options, viewletViewOptions, notificationService, keybindingService, contextMenuService, instantiationService, themeService, extensionService, extensionsWorkbenchService, extensionRecommendationsService, telemetryService, configurationService, contextService, extensionManagementServerService, extensionManifestPropertiesService, extensionManagementService, workspaceService, productService, contextKeyService, viewDescriptorService, openerService, preferencesService, storageService, workspaceTrustManagementService, extensionEnablementService, layoutService, extensionFeaturesManagementService, logService);
1084
1111
  this.options = options;
1085
1112
  }
1086
1113
  show() {
@@ -1112,7 +1139,8 @@ StaticQueryExtensionsView = ( __decorate([
1112
1139
  ( __param(23, IWorkspaceTrustManagementService)),
1113
1140
  ( __param(24, IWorkbenchExtensionEnablementService)),
1114
1141
  ( __param(25, IWorkbenchLayoutService)),
1115
- ( __param(26, ILogService))
1142
+ ( __param(26, IExtensionFeaturesManagementService)),
1143
+ ( __param(27, ILogService))
1116
1144
  ], StaticQueryExtensionsView));
1117
1145
  function toSpecificWorkspaceUnsupportedQuery(query, qualifier) {
1118
1146
  if (!query) {
@@ -585,7 +585,7 @@ let ExtensionHoverWidget = ExtensionHoverWidget_1 = class ExtensionHoverWidget e
585
585
  '{0} uncaught errors',
586
586
  extensionRuntimeStatus.runtimeErrors.length
587
587
  ))}](${( URI.parse(
588
- `command:extension.open?${encodeURIComponent(JSON.stringify([this.extension.identifier.id, "runtimeStatus" ]))}`
588
+ `command:extension.open?${encodeURIComponent(JSON.stringify([this.extension.identifier.id, "features" ]))}`
589
589
  ))})` : undefined;
590
590
  const messageLink = extensionRuntimeStatus.messages.length ? `[${extensionRuntimeStatus.messages.length === 1 ? ( localizeWithPath(
591
591
  'vs/workbench/contrib/extensions/browser/extensionsWidgets',
@@ -597,7 +597,7 @@ let ExtensionHoverWidget = ExtensionHoverWidget_1 = class ExtensionHoverWidget e
597
597
  '{0} messages',
598
598
  extensionRuntimeStatus.messages.length
599
599
  ))}](${( URI.parse(
600
- `command:extension.open?${encodeURIComponent(JSON.stringify([this.extension.identifier.id, "runtimeStatus" ]))}`
600
+ `command:extension.open?${encodeURIComponent(JSON.stringify([this.extension.identifier.id, "features" ]))}`
601
601
  ))})` : undefined;
602
602
  markdown.appendMarkdown(`$(${hasErrors ? errorIcon.id : hasWarnings ? warningIcon.id : infoIcon.id}) This extension has reported `);
603
603
  if (errorsLink && messageLink) {
@@ -36,7 +36,6 @@ import { IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/
36
36
  import { isUndefined, isBoolean, isString } from 'vscode/vscode/vs/base/common/types';
37
37
  import { IExtensionManifestPropertiesService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService';
38
38
  import { toExtension, toExtensionDescription, IExtensionService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions';
39
- import { ExtensionEditor } from './extensionEditor.js';
40
39
  import { isWeb, language } from 'vscode/vscode/vs/base/common/platform';
41
40
  import { getLocale } from 'vscode/vscode/vs/platform/languagePacks/common/languagePacks';
42
41
  import { ILocaleService } from 'vscode/vscode/vs/workbench/services/localization/common/locale';
@@ -915,10 +914,7 @@ let ExtensionsWorkbenchService = class ExtensionsWorkbenchService extends Dispos
915
914
  if (!extension) {
916
915
  throw new Error(`Extension not found. ${extension}`);
917
916
  }
918
- const editor = await this.editorService.openEditor(this.instantiationService.createInstance(ExtensionsInput, extension), options, options?.sideByside ? SIDE_GROUP : ACTIVE_GROUP);
919
- if (options?.tab && editor instanceof ExtensionEditor) {
920
- await editor.openTab(options.tab);
921
- }
917
+ await this.editorService.openEditor(this.instantiationService.createInstance(ExtensionsInput, extension), options, options?.sideByside ? SIDE_GROUP : ACTIVE_GROUP);
922
918
  }
923
919
  getExtensionStatus(extension) {
924
920
  const extensionsStatus = this.extensionService.getExtensionsStatus();
@@ -1,6 +1,6 @@
1
1
  import n from '../../../../../../../../external/rollup-plugin-styles/dist/runtime/inject-css.js';
2
2
 
3
- var css = ".extension-bookmark-container{position:relative}.extension-bookmark-container>.extension-bookmark{position:absolute}.extension-list-item{box-sizing:border-box;display:flex;height:100%;overflow:hidden;padding:0 0 0 16px;width:100%}.extension-list-item>.icon-container{align-items:center;display:flex;position:relative}.extension-list-item>.icon-container>.icon{flex-shrink:0;height:42px;object-fit:contain;padding-right:14px;width:42px}.extension-list-item>.icon-container .extension-badge{bottom:5px;position:absolute}.extension-list-item>.icon-container .extension-badge.extension-remote-badge{align-items:center;border-radius:20px;display:flex;height:22px;justify-content:center;line-height:22px;right:5px;width:22px}.extension-list-item>.icon-container .extension-remote-badge .codicon{color:currentColor}.extension-list-item>.details{display:flex;flex:1;flex-direction:column;justify-content:center;overflow:hidden}.extension-list-item>.details>.header-container{display:flex;height:19px;overflow:hidden;padding-right:11px}.extension-list-item>.details>.header-container>.header{align-items:center;display:flex;flex:1;flex-wrap:nowrap;min-width:0;overflow:hidden}.extension-list-item>.details>.header-container>.header>.name{flex:1;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.extension-list-item.deprecated>.details>.header-container>.header>.name{text-decoration:line-through}.extension-list-item>.details>.header-container>.header>.activation-status,.extension-list-item>.details>.header-container>.header>.install-count,.extension-list-item>.details>.header-container>.header>.ratings{align-items:center;display:flex}.extension-list-item>.details>.header-container>.header>.install-count:not(:empty){font-size:80%;margin:0 6px}.extension-list-item>.details>.header-container>.header>.activation-status:not(:empty){font-size:80%;margin-left:2px}.extension-list-item>.details>.header-container>.header>.activation-status .activationTime,.extension-list-item>.details>.header-container>.header>.activation-status:not(:empty) .codicon{margin-right:2px}.extension-list-item>.details>.header-container>.header .codicon{font-size:120%;margin-right:3px;-webkit-mask:inherit}.extension-list-item>.details>.header-container>.header>.ratings{text-align:right}.extension-list-item>.details>.header-container>.header>.extension-remote-badge-container{display:none;margin-left:6px}.extension-list-item>.details>.header-container>.header .extension-remote-badge .codicon{margin-right:0}.extension-list-item>.details>.header-container>.header .extension-remote-badge{align-items:center;border-radius:20px;display:flex;height:14px;justify-content:center;line-height:14px;text-align:center;width:14px}.extension-list-item>.details>.header-container>.header .extension-remote-badge>.codicon{color:currentColor;font-size:12px}.extension-list-item>.details>.header-container>.header .sync-ignored{display:flex}.extension-list-item>.details>.header-container>.header .sync-ignored>.codicon{font-size:100%}.extension-list-item>.details>.description{color:var(--vscode-descriptionForeground);line-height:normal;padding-right:11px}.hc-black .extension-list-item>.details>.description,.hc-light .extension-list-item>.details>.description,.monaco-list-row.selected .extension-list-item>.details>.description{color:unset}.extension-list-item>.details>.footer{display:flex;height:18px;justify-content:flex-end;overflow:hidden;padding-right:7px}.extension-list-item>.details>.footer>.author{align-items:center;display:flex;flex:1}.extension-list-item>.details>.footer>.author>.publisher-name{color:var(--vscode-descriptionForeground);font-size:90%;font-weight:600}.monaco-list-row.disabled .extension-list-item>.details>.footer>.author>.publisher-name{color:var(--vscode-disabledForeground)}.monaco-list-row.disabled.selected .extension-list-item>.details>.footer>.author>.publisher-name,.monaco-list-row.selected .extension-list-item>.details>.footer>.author>.publisher-name{color:unset}.extension-list-item>.details>.footer>.author>.publisher-name:not(:first-child){padding-left:1px}.extension-list-item .ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.extension-list-item>.details>.footer>.monaco-action-bar>.actions-container{flex-wrap:wrap-reverse}.extension-list-item>.details>.footer>.monaco-action-bar>.actions-container .action-label:not(.icon){border-radius:2px}.extension-list-item>.details>.footer>.monaco-action-bar>.actions-container .extension-action.label{line-height:16px;max-width:150px}.extension-list-item .footer .monaco-action-bar .action-item.action-dropdown-item.empty>.action-label{margin-right:4px}.extension-list-item .footer .monaco-action-bar .action-item.action-dropdown-item.empty>.action-dropdown-item-separator{display:none}.extension-list-item .monaco-action-bar>.actions-container>.action-item.disabled{min-width:0}.monaco-list-row.disabled .extension-list-item{color:var(--vscode-disabledForeground)}.monaco-list-row.disabled.selected .extension-list-item .details .description,.monaco-list-row.disabled.selected .extension-list-item .details .header .name{color:unset}.extension-list-item .monaco-action-bar .action-label.icon{padding:1px 2px}.hc-black .extension-list-item .monaco-action-bar .action-label.icon,.hc-light .extension-list-item .monaco-action-bar .action-label.icon{padding:0 2px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item,.extension-list-item .monaco-action-bar>.actions-container>.action-item:not(.action-dropdown-item)>.extension-action{margin-left:6px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item:not(.empty)>.extension-action.label{border-right-width:0}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.action-dropdown-item-separator{height:16px;margin-top:2px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.action-dropdown-item-separator>div{height:10px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.monaco-dropdown .extension-action.label{border-left-width:0}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item.empty>.extension-action{border-radius:2px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item:not(.empty)>.extension-action.label:not(.dropdown){border-radius:2px 0 0 2px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.monaco-dropdown .extension-action{border-radius:0 2px 2px 0}";
3
+ var css = ".extension-bookmark-container{position:relative}.extension-bookmark-container>.extension-bookmark{position:absolute}.extension-list-item{box-sizing:border-box;display:flex;height:100%;overflow:hidden;padding:0 0 0 16px;width:100%}.extension-list-item>.icon-container{align-items:center;display:flex;position:relative}.extension-list-item>.icon-container>.icon{flex-shrink:0;height:42px;object-fit:contain;padding-right:14px;width:42px}.extension-list-item>.icon-container .extension-badge{bottom:5px;position:absolute}.extension-list-item>.icon-container .extension-badge.extension-remote-badge{align-items:center;border-radius:20px;display:flex;height:22px;justify-content:center;line-height:22px;right:5px;width:22px}.extension-list-item>.icon-container .extension-remote-badge .codicon{color:currentColor}.extension-list-item>.details{display:flex;flex:1;flex-direction:column;justify-content:center;overflow:hidden}.extension-list-item>.details>.header-container{display:flex;height:19px;overflow:hidden;padding-right:11px}.extension-list-item>.details>.header-container>.header{align-items:center;display:flex;flex:1;flex-wrap:nowrap;min-width:0;overflow:hidden}.extension-list-item>.details>.header-container>.header>.name{flex:1;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.extension-list-item.deprecated>.details>.header-container>.header>.name{text-decoration:line-through}.extension-list-item>.details>.header-container>.header>.activation-status,.extension-list-item>.details>.header-container>.header>.install-count,.extension-list-item>.details>.header-container>.header>.ratings{align-items:center;display:flex}.extension-list-item>.details>.header-container>.header>.install-count:not(:empty){font-size:80%;margin:0 6px}.extension-list-item>.details>.header-container>.header>.activation-status:not(:empty){font-size:80%;margin-left:2px}.extension-list-item>.details>.header-container>.header>.activation-status .activationTime,.extension-list-item>.details>.header-container>.header>.activation-status:not(:empty) .codicon{margin-right:2px}.extension-list-item>.details>.header-container>.header .codicon{font-size:120%;margin-right:3px;-webkit-mask:inherit}.extension-list-item>.details>.header-container>.header>.ratings{text-align:right}.extension-list-item>.details>.header-container>.header>.extension-remote-badge-container{display:none;margin-left:6px}.extension-list-item>.details>.header-container>.header .extension-remote-badge .codicon{margin-right:0}.extension-list-item>.details>.header-container>.header .extension-remote-badge{align-items:center;border-radius:20px;display:flex;height:14px;justify-content:center;line-height:14px;text-align:center;width:14px}.extension-list-item>.details>.header-container>.header .extension-remote-badge>.codicon{color:currentColor;font-size:12px}.extension-list-item>.details>.header-container>.header .sync-ignored{display:flex}.extension-list-item>.details>.header-container>.header .sync-ignored>.codicon{font-size:100%}.extension-list-item>.details>.description{color:var(--vscode-descriptionForeground);line-height:normal;padding-right:11px}.hc-black .extension-list-item>.details>.description,.hc-light .extension-list-item>.details>.description,.monaco-list-row.selected .extension-list-item>.details>.description{color:unset}.extension-list-item>.details>.footer{align-items:center;display:flex;height:24px;justify-content:flex-end;overflow:hidden;padding-right:7px}.extension-list-item>.details>.footer>.author{align-items:center;display:flex;flex:1;line-height:24px}.extension-list-item>.details>.footer>.author>.publisher-name{color:var(--vscode-descriptionForeground);font-size:90%;font-weight:600}.monaco-list-row.disabled .extension-list-item>.details>.footer>.author>.publisher-name{color:var(--vscode-disabledForeground)}.monaco-list-row.disabled.selected .extension-list-item>.details>.footer>.author>.publisher-name,.monaco-list-row.selected .extension-list-item>.details>.footer>.author>.publisher-name{color:unset}.extension-list-item>.details>.footer>.author>.publisher-name:not(:first-child){padding-left:1px}.extension-list-item .ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.extension-list-item>.details>.footer>.monaco-action-bar>.actions-container{flex-wrap:wrap-reverse}.extension-list-item>.details>.footer>.monaco-action-bar>.actions-container .action-label:not(.icon){border-radius:2px}.extension-list-item>.details>.footer>.monaco-action-bar>.actions-container .extension-action.label{line-height:16px;max-width:150px}.extension-list-item .footer .monaco-action-bar .action-item.action-dropdown-item.empty>.action-label{margin-right:4px}.extension-list-item .footer .monaco-action-bar .action-item.action-dropdown-item.empty>.action-dropdown-item-separator{display:none}.extension-list-item .monaco-action-bar>.actions-container>.action-item.disabled{min-width:0}.monaco-list-row.disabled .extension-list-item{color:var(--vscode-disabledForeground)}.monaco-list-row.disabled.selected .extension-list-item .details .description,.monaco-list-row.disabled.selected .extension-list-item .details .header .name{color:unset}.extension-list-item .monaco-action-bar .action-label.icon{padding:1px 2px}.hc-black .extension-list-item .monaco-action-bar .action-label.icon,.hc-light .extension-list-item .monaco-action-bar .action-label.icon{padding:0 2px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item,.extension-list-item .monaco-action-bar>.actions-container>.action-item:not(.action-dropdown-item)>.extension-action{margin-left:6px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item:not(.empty)>.extension-action.label{border-right-width:0}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.action-dropdown-item-separator{height:16px;margin-top:2px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.action-dropdown-item-separator>div{height:10px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.monaco-dropdown .extension-action.label{border-left-width:0}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item.empty>.extension-action{border-radius:2px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item:not(.empty)>.extension-action.label:not(.dropdown){border-radius:2px 0 0 2px}.extension-list-item .monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.monaco-dropdown .extension-action{border-radius:0 2px 2px 0}";
4
4
  n(css,{});
5
5
 
6
6
  export { css, css as default };