@codingame/monaco-vscode-extension-gallery-service-override 3.2.2 → 4.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 (39) hide show
  1. package/extensionGallery.js +7 -1
  2. package/override/vs/platform/dialogs/common/dialogs.js +2 -0
  3. package/package.json +9 -9
  4. package/vscode/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.js +18 -16
  5. package/vscode/src/vs/platform/extensionManagement/common/extensionGalleryService.js +24 -23
  6. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementIpc.js +5 -2
  7. package/vscode/src/vs/platform/extensionManagement/common/extensionTipsService.js +10 -0
  8. package/vscode/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.js +33 -19
  9. package/vscode/src/vs/workbench/contrib/extensions/browser/configBasedRecommendations.js +1 -1
  10. package/vscode/src/vs/workbench/contrib/extensions/browser/deprecatedExtensionsChecker.js +8 -5
  11. package/vscode/src/vs/workbench/contrib/extensions/browser/exeBasedRecommendations.js +1 -1
  12. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEditor.js +109 -40
  13. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionFeaturesTab.js +11 -8
  14. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.js +31 -11
  15. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationsService.js +35 -21
  16. package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.js +54 -29
  17. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsList.js +6 -6
  18. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewer.js +11 -1
  19. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.js +18 -17
  20. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViews.js +71 -31
  21. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWidgets.js +63 -20
  22. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.js +551 -134
  23. package/vscode/src/vs/workbench/contrib/extensions/browser/fileBasedRecommendations.js +3 -3
  24. package/vscode/src/vs/workbench/contrib/extensions/browser/keymapRecommendations.js +1 -1
  25. package/vscode/src/vs/workbench/contrib/extensions/browser/languageRecommendations.js +1 -1
  26. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extension.css.js +1 -1
  27. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionEditor.css.js +1 -1
  28. package/vscode/src/vs/workbench/contrib/extensions/browser/remoteRecommendations.js +1 -1
  29. package/vscode/src/vs/workbench/contrib/extensions/browser/webRecommendations.js +1 -1
  30. package/vscode/src/vs/workbench/contrib/extensions/browser/workspaceRecommendations.js +78 -4
  31. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.js +7 -1
  32. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionsProfileScannerService.js +24 -0
  33. package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +15 -8
  34. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementChannelClient.js +2 -2
  35. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementServerService.js +3 -2
  36. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementService.js +469 -57
  37. package/vscode/src/vs/workbench/services/extensionManagement/common/webExtensionManagementService.js +5 -2
  38. package/vscode/src/vs/workbench/services/extensionRecommendations/common/extensionIgnoredRecommendationsService.js +1 -0
  39. package/vscode/src/vs/workbench/services/extensions/browser/extensionsScannerService.js +33 -0
@@ -40,7 +40,7 @@ let FileBasedRecommendations = class FileBasedRecommendations extends ExtensionR
40
40
  })
41
41
  .forEach(extensionId => {
42
42
  recommendations.push({
43
- extensionId,
43
+ extension: extensionId,
44
44
  reason: {
45
45
  reasonId: 1 ,
46
46
  reasonText: ( localizeWithPath(
@@ -54,10 +54,10 @@ let FileBasedRecommendations = class FileBasedRecommendations extends ExtensionR
54
54
  return recommendations;
55
55
  }
56
56
  get importantRecommendations() {
57
- return this.recommendations.filter(e => ( this.fileBasedImportantRecommendations.has(e.extensionId)));
57
+ return this.recommendations.filter(e => ( this.fileBasedImportantRecommendations.has(e.extension)));
58
58
  }
59
59
  get otherRecommendations() {
60
- return this.recommendations.filter(e => !( this.fileBasedImportantRecommendations.has(e.extensionId)));
60
+ return this.recommendations.filter(e => !( this.fileBasedImportantRecommendations.has(e.extension)));
61
61
  }
62
62
  constructor(extensionsWorkbenchService, modelService, languageService, productService, storageService, extensionRecommendationNotificationService, extensionIgnoredRecommendationsService, workspaceContextService) {
63
63
  super();
@@ -12,7 +12,7 @@ let KeymapRecommendations = class KeymapRecommendations extends ExtensionRecomme
12
12
  async doActivate() {
13
13
  if (this.productService.keymapExtensionTips) {
14
14
  this._recommendations = ( this.productService.keymapExtensionTips.map(extensionId => ({
15
- extensionId: extensionId.toLowerCase(),
15
+ extension: extensionId.toLowerCase(),
16
16
  reason: {
17
17
  reasonId: 6 ,
18
18
  reasonText: ''
@@ -12,7 +12,7 @@ let LanguageRecommendations = class LanguageRecommendations extends ExtensionRec
12
12
  async doActivate() {
13
13
  if (this.productService.languageExtensionTips) {
14
14
  this._recommendations = ( this.productService.languageExtensionTips.map(extensionId => ({
15
- extensionId: extensionId.toLowerCase(),
15
+ extension: extensionId.toLowerCase(),
16
16
  reason: {
17
17
  reasonId: 6 ,
18
18
  reasonText: ''
@@ -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{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}";
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 .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 };
@@ -1,6 +1,6 @@
1
1
  import n from '../../../../../../../../external/rollup-plugin-styles/dist/runtime/inject-css.js';
2
2
 
3
- var css = ".extension-editor{display:flex;flex-direction:column;height:100%;margin:0 auto;max-width:80%;overflow:hidden}.extension-editor .clickable{cursor:pointer}.extension-editor>.header{display:flex;font-size:14px;overflow:hidden;padding:20px 20px 14px}.extension-editor>.header>.icon-container{position:relative}.extension-editor>.header>.icon-container .icon{height:128px;object-fit:contain;width:128px}.extension-editor>.header>.icon-container .extension-remote-badge{align-items:center;border-radius:20px;display:flex;height:38px;justify-content:center;line-height:38px;position:absolute;right:0;text-align:center;top:88px;width:38px}.extension-editor>.header>.icon-container .extension-remote-badge .codicon{color:currentColor;font-size:28px}.extension-editor>.header>.details{overflow:hidden;padding-left:20px;user-select:text;-webkit-user-select:text}.extension-editor>.header>.details>.title{align-items:center;display:flex}.extension-editor>.header>.details>.title>.name{flex:0;font-size:26px;font-weight:600;line-height:30px;white-space:nowrap}.extension-editor>.header>.details>.title>.name.deprecated{text-decoration:line-through}.extension-editor>.header>.details>.title>.version{margin-left:10px;user-select:text;-webkit-user-select:text;white-space:nowrap}.extension-editor>.header>.details>.title>.builtin{font-size:10px;font-style:italic;margin-left:10px}.extension-editor>.header>.details>.title>.pre-release{align-items:center;background-color:var(--vscode-extensionIcon-preReleaseForeground);border-radius:4px;color:#fff;display:flex;margin-left:10px;padding:0 4px}.extension-editor>.header>.details>.title>.pre-release>.codicon.codicon-extensions-pre-release{color:#fff;font-size:14px}.extension-editor>.header>.details>.title>.pre-release>.pre-release-text{font-size:10px;padding-left:3px}.monaco-workbench.vs .extension-editor>.header>.details>.title>.preview{color:#fff}.extension-editor>.header>.details>.title>.preview{background:#d63f26;border-radius:4px;font-size:10px;font-style:italic;margin-left:10px;padding:0 4px;user-select:none;-webkit-user-select:none}.extension-editor>.header>.details>.subtitle{height:20px;line-height:20px;padding-top:6px;white-space:nowrap}.extension-editor>.header>.details>.subtitle .hide{display:none}.extension-editor>.header>.details>.subtitle .publisher{align-items:center;display:flex}.extension-editor>.header>.details>.subtitle .publisher .verified-publisher:not(:empty){margin-left:4px}.extension-editor>.header>.details>.subtitle,.extension-editor>.header>.details>.subtitle .install,.extension-editor>.header>.details>.subtitle .rating,.extension-editor>.header>.details>.subtitle .sponsor{align-items:center;display:flex}.extension-editor>.header>.details>.subtitle .sponsor .codicon{padding-right:3px}.extension-editor>.header>.details>.subtitle .install>.count{margin-left:6px}.extension-editor>.header>.details>.subtitle>div:not(:first-child):not(:empty){border-left:1px solid hsla(0,0%,50%,.7);margin-left:14px;padding-left:14px}.extension-editor>.header>.details>.description{margin-top:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.extension-editor>.header>.details>.actions-status-container{display:flex;margin-top:10px}.extension-editor>.header>.details>.actions-status-container.list-layout{display:inherit}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar{text-align:initial}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item{flex-shrink:0;margin-right:0;overflow:hidden}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.disabled{min-width:0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item .extension-action{margin-bottom:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.extension-action:not(.icon){margin-left:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.monaco-dropdown .extension-action.action-dropdown{margin-right:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item:not(.checkbox-action-item) .extension-action:not(.icon){border-radius:0;padding-bottom:0;padding-top:0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.monaco-dropdown .extension-action.action-dropdown,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.extension-action{line-height:22px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.checkbox-action-item,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item:not(.action-dropdown-item):not(.checkbox-action-item)>.extension-action{margin-right:6px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.checkbox-action-item>.extension-action{height:18px;margin-top:2px;width:18px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item .extension-action.label,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.extension-action.label{font-weight:600;max-width:300px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.extension-action.label{border-right-width:0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.action-dropdown-item-separator{height:22px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.action-dropdown-item-separator>div{height:16px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item.empty>.extension-action.label{margin-right:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item.empty>.action-dropdown-item-separator{display:none}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item.empty>.extension-action.label,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.extension-action.label{border-radius:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item:not(.empty)>.extension-action.label{border-radius:2px 0 0 2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item:not(.empty)>.monaco-dropdown .extension-action.label{border-left-width:0;border-radius:0 2px 2px 0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.action-label.extension-status{margin-right:0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar .action-item .action-label.disable-status,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar .action-item .action-label.extension-status-label{font-weight:400}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar .action-item .action-label.disable-status:hover,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar .action-item .action-label.extension-status-label:hover{opacity:.9}.extension-editor>.header>.details>.actions-status-container>.status{font-size:90%;line-height:22px;margin-top:3px}.extension-editor>.header>.details>.actions-status-container.list-layout>.status{margin-top:5px}.extension-editor>.header>.details>.actions-status-container>.status .codicon{vertical-align:text-bottom}.extension-editor>.header>.details>.actions-status-container>.status p,.extension-editor>.header>.details>.pre-release-text p{margin-bottom:0;margin-top:0}.extension-editor>.header>.details>.actions-status-container>.status a,.extension-editor>.header>.details>.pre-release-text a{color:var(--vscode-textLink-foreground)}.extension-editor>.header>.details>.actions-status-container>.status a:hover,.extension-editor>.header>.details>.pre-release-text a:hover{color:var(--vscode-textLink-activeForeground);text-decoration:underline}.extension-editor>.header>.details>.actions-status-container>.status a:active,.extension-editor>.header>.details>.pre-release-text a:active{color:var(--vscode-textLink-activeForeground)}.extension-editor>.header>.details>.pre-release-text:not(:empty){display:flex;font-size:90%;margin-top:5px}.extension-editor>.header>.details>.recommendation{display:flex;margin-top:5px}.extension-editor>.header>.details>.recommendation .codicon{font-size:inherit;margin-right:5px}.extension-editor>.header>.details>.recommendation .recommendation-text{font-size:90%;vertical-align:text-bottom}.extension-editor>.body{flex:1;overflow:hidden}.extension-editor>.body>.navbar{border-bottom:1px solid var(--vscode-panelSection-border);font-size:14px;font-weight:700;height:36px;line-height:36px;padding-left:20px}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container{justify-content:normal}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container>.action-item{height:100%}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container>.action-item>.action-label{background:none!important;border-radius:0!important;color:var(--vscode-panelTitle-inactiveForeground);font-size:11px;font-weight:400;padding:0 10px;text-transform:uppercase}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container>.action-item>.action-label.checked{border-bottom:1px solid var(--vscode-panelTitle-activeBorder);color:var(--vscode-panelTitle-activeForeground)}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container>.action-item>.action-label:hover{color:var(--vscode-panelTitle-activeForeground)}.extension-editor>.body>.content{height:calc(100% - 36px);overflow:hidden;position:relative;user-select:text;-webkit-user-select:text}.extension-editor>.body>.content.loading{background:url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCI+PHN0eWxlPmNpcmNsZXthbmltYXRpb246YmFsbCAuNnMgbGluZWFyIGluZmluaXRlfWNpcmNsZTpudGgtY2hpbGQoMil7YW5pbWF0aW9uLWRlbGF5Oi4wNzVzfWNpcmNsZTpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi4xNXN9Y2lyY2xlOm50aC1jaGlsZCg0KXthbmltYXRpb24tZGVsYXk6LjIyNXN9Y2lyY2xlOm50aC1jaGlsZCg1KXthbmltYXRpb24tZGVsYXk6LjNzfWNpcmNsZTpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi4zNzVzfWNpcmNsZTpudGgtY2hpbGQoNyl7YW5pbWF0aW9uLWRlbGF5Oi40NXN9Y2lyY2xlOm50aC1jaGlsZCg4KXthbmltYXRpb24tZGVsYXk6LjUyNXN9PC9zdHlsZT48Y2lyY2xlIGN4PSI1IiBjeT0iMSIgcj0iMSIgc3R5bGU9Im9wYWNpdHk6LjMiLz48Y2lyY2xlIGN4PSI3LjgyOCIgY3k9IjIuMTcyIiByPSIxIiBzdHlsZT0ib3BhY2l0eTouMyIvPjxjaXJjbGUgY3g9IjkiIGN5PSI1IiByPSIxIiBzdHlsZT0ib3BhY2l0eTouMyIvPjxjaXJjbGUgY3g9IjcuODI4IiBjeT0iNy44MjgiIHI9IjEiIHN0eWxlPSJvcGFjaXR5Oi4zIi8+PGNpcmNsZSBjeD0iNSIgY3k9IjkiIHI9IjEiIHN0eWxlPSJvcGFjaXR5Oi4zIi8+PGNpcmNsZSBjeD0iMi4xNzIiIGN5PSI3LjgyOCIgcj0iMSIgc3R5bGU9Im9wYWNpdHk6LjMiLz48Y2lyY2xlIGN4PSIxIiBjeT0iNSIgcj0iMSIgc3R5bGU9Im9wYWNpdHk6LjMiLz48Y2lyY2xlIGN4PSIyLjE3MiIgY3k9IjIuMTcyIiByPSIxIiBzdHlsZT0ib3BhY2l0eTouMyIvPjwvc3ZnPg==\") 50% no-repeat}.extension-editor>.body>.content>.monaco-scrollable-element{height:100%}.extension-editor>.body>.content>.nocontent{margin-left:20px}.extension-editor>.body>.content>.details{display:flex;height:100%}.extension-editor>.body>.content>.details>.readme-container{flex:1;height:100%;margin:0 auto;max-width:75%}.extension-editor>.body>.content>.details.narrow>.readme-container{margin:inherit;max-width:inherit}.extension-editor>.body>.content>.details>.additional-details-container{height:100%;min-width:175px;width:25%}.extension-editor>.body>.content>.details.narrow>.additional-details-container{display:none}.extension-editor>.body>.content>.details>.additional-details-container>.monaco-scrollable-element{height:100%}.extension-editor>.body>.content>.details>.additional-details-container>.monaco-scrollable-element>.additional-details-content{box-sizing:border-box;height:100%;overflow-y:scroll;padding:20px}.extension-editor>.body>.content>.details>.additional-details-container .additional-details-element:not(:first-child){padding-top:15px}.extension-editor>.body>.content>.details>.additional-details-container .additional-details-element{padding-bottom:15px}.extension-editor>.body>.content>.details>.additional-details-container .additional-details-element:not(:last-child){border-bottom:1px solid hsla(0,0%,50%,.22)}.extension-editor>.body>.content>.details>.additional-details-container .additional-details-element>.additional-details-title{font-size:120%;padding-bottom:15px}.extension-editor>.body>.content>.details>.additional-details-container .categories-container>.categories>.category,.extension-editor>.body>.content>.details>.additional-details-container .tags-container>.tags>.tag{border:1px solid hsla(0,0%,53%,.45);border-radius:2px;cursor:pointer;display:inline-block;font-size:90%;margin:0 6px 3px 0;padding:2px 4px}.extension-editor>.body>.content>.details>.additional-details-container .resources-container>.resources>.resource{cursor:pointer;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.extension-editor>.body>.content>.details>.additional-details-container .resources-container>.resources>.resource:hover{text-decoration:underline}.extension-editor>.body>.content>.details>.additional-details-container .more-info-container>.more-info>.more-info-entry{display:grid;font-size:90%;gap:6px;grid-template-columns:40% 60%;padding:2px 4px}.extension-editor>.body>.content>.details>.additional-details-container .more-info-container>.more-info>.more-info-entry:nth-child(odd){background-color:hsla(0,0%,51%,.04)}.extension-editor>.body>.content>.details>.additional-details-container .more-info-container>.more-info>.more-info-entry code{background-color:transparent;padding:0}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme{height:100%}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack{height:224px;padding-left:20px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.one-row>.extension-pack{height:142px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.two-rows>.extension-pack{height:224px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.three-rows>.extension-pack{height:306px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.more-rows>.extension-pack{height:326px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.one-row>.readme-content{height:calc(100% - 142px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.two-rows>.readme-content{height:calc(100% - 224px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.three-rows>.readme-content{height:calc(100% - 306px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.more-rows>.readme-content{height:calc(100% - 326px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.footer,.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.header{border-bottom:1px solid hsla(0,0%,50%,.22);font-size:120%;font-weight:700;line-height:22px;margin-bottom:10px;margin-right:30px;padding:4px 6px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.extension-pack-content{height:calc(100% - 60px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.extension-pack-content>.monaco-scrollable-element{height:100%}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.extension-pack-content>.monaco-scrollable-element>.subcontent{box-sizing:border-box;height:100%;overflow-y:scroll}.extension-editor>.body>.content>.monaco-scrollable-element>.subcontent{box-sizing:border-box;height:100%;overflow-y:scroll;padding:20px}.extension-editor>.body>.content table{border-collapse:separate;border-spacing:0;width:100%}.extension-editor>.body>.content details:not(:first-child){margin-top:20px}.extension-editor>.body>.content details>summary{border-bottom:1px solid hsla(0,0%,50%,.22);cursor:pointer;font-size:120%;font-weight:700;line-height:22px;margin-bottom:10px;padding:3px 6px}.extension-editor>.body>.content table tr:nth-child(odd){background-color:hsla(0,0%,51%,.04)}.extension-editor>.body>.content table tr:not(:first-child):hover{background-color:hsla(0,0%,50%,.15)}.extension-editor>.body>.content table td,.extension-editor>.body>.content table th{padding:2px 16px 2px 4px}.extension-editor>.body>.content table td{vertical-align:top}.extension-editor>.body>.content table td:last-child,.extension-editor>.body>.content table th:last-child{padding:2px 4px}.extension-editor>.body>.content table th{text-align:left;word-break:keep-all}.extension-editor>.body>.content table td>div,.extension-editor>.body>.content table td>div>p{margin:0;padding:0}.extension-editor code:not(:empty){background-color:hsla(0,0%,50%,.17);border-radius:4px;font-family:var(--monaco-monospace-font);font-size:90%;padding:1px 4px}.extension-editor>.body>.content table .colorBox{border:.1em solid #000;box-sizing:border-box;display:inline-block;height:.8em;margin:0 .2em;vertical-align:middle;width:.8em}.monaco-workbench.hc-black .extension-editor>.body>.content table .colorBox,.monaco-workbench.vs-dark .extension-editor>.body>.content table .colorBox{border-color:#eee}.extension-editor .subcontent .monaco-list-row .content .unknown-extension{line-height:62px}.extension-editor .subcontent .monaco-list-row .content .unknown-extension>.error-marker{background-color:#be1100;color:#ccc;font-size:11px;font-weight:700;padding:2px 4px}.extension-editor .subcontent .monaco-list-row .unknown-extension>.message{font-size:14px;font-weight:700;padding-left:10px}.extension-editor .subcontent .monaco-list-row .extension{align-items:center;display:flex}.extension-editor .subcontent .monaco-list-row .extension>.details{flex:1;overflow:hidden;padding-left:10px}.extension-editor .subcontent .monaco-list-row .extension>.details>.header{align-items:center;display:flex;line-height:19px;overflow:hidden}.extension-editor .subcontent .monaco-list-row .extension>.icon{height:40px;object-fit:contain;width:40px}.extension-editor .subcontent .monaco-list-row .extension>.details>.header>.name{font-size:16px;font-weight:700}.extension-editor .subcontent .monaco-list-row .extension>.details>.header>.name:hover{text-decoration:underline}.extension-editor .subcontent .monaco-list-row .extension>.details>.header>.identifier{background:hsla(0,0%,68%,.31);border-radius:4px;font-size:90%;margin-left:10px;opacity:.6;padding:0 4px}.extension-editor .subcontent .monaco-list-row .extension>.details>.footer{display:flex;line-height:19px;overflow:hidden;padding-top:5px}.extension-editor .subcontent .monaco-list-row .extension>.details>.footer>.author{font-size:90%;font-weight:600;opacity:.6}.extension-editor .extensions-grid-view{display:flex;flex-wrap:wrap}.extension-editor .extensions-grid-view>.extension-container{margin:0 10px 20px 0;width:350px}.extension-editor .extensions-grid-view .extension-list-item{cursor:default}.extension-editor .extensions-grid-view .extension-list-item>.details .header>.name{cursor:pointer}.extension-editor .extensions-grid-view .extension-list-item>.details>.header-container>.header>.install-count,.extension-editor .extensions-grid-view .extension-list-item>.details>.header-container>.header>.ratings,.extension-editor .extensions-grid-view .extension-list-item>.details>.header-container>.header>.version{display:none}.extension-editor .extensions-grid-view>.extension-container:focus>.extension-list-item>.details .header>.name,.extension-editor .extensions-grid-view>.extension-container:hover>.extension-list-item>.details .header>.name{text-decoration:underline}.monaco-workbench.vs .extension-editor .extensions-grid-view>.extension-container.disabled>.extension-list-item>.details>.header-container .codicon,.monaco-workbench.vs .extension-editor .extensions-grid-view>.extension-container.disabled>.extension-list-item>.icon-container>.icon,.monaco-workbench.vs-dark .extension-editor .extensions-grid-view>.extension-container.disabled>.extension-list-item>.details>.header-container .codicon,.monaco-workbench.vs-dark .extension-editor .extensions-grid-view>.extension-container.disabled>.extension-list-item>.icon-container>.icon{opacity:.5}.extension-editor>.body>.content .runtime-status .activation-details>.activation-element-entry>.activation-message-title{padding-right:10px}.extension-editor>.body>.content .runtime-status .message-entry{align-items:center;display:flex;margin:5px}.extension-editor>.body>.content .runtime-status .message-entry .codicon{padding-right:2px}.monaco-workbench .extension-editor>.header>.details>.recommendation .codicon{color:var(--vscode-extensionButton-prominentBackground)}.extension-editor .subcontent.feature-contributions{margin-top:14px}.extension-editor .subcontent.feature-contributions .features-list-container{height:100%}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper{height:100%;padding-left:24px}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper .monaco-list-row.extension-feature-list-item{align-items:center;display:flex;padding-left:10px;padding-right:10px}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper .monaco-list-row.extension-feature-list-item .extension-feature-label{flex:1}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper .monaco-list-row.extension-feature-list-item .extension-feature-disabled-label{font-size:12px;opacity:.8}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper .monaco-list-row.extension-feature-list-item .extension-feature-status{padding-left:5px}.extension-editor .subcontent.feature-contributions .feature-view-container{height:100%}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-body-content .feature-description{margin-bottom:10px}.extension-editor .subcontent.feature-contributions .extension-feature-content{box-sizing:border-box;height:100%;padding-left:24px}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-header{align-items:center;display:flex;line-height:20px;margin:0 10px 10px 0}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-header>.feature-title{box-sizing:border-box;display:inline-block;flex:1;font-size:26px;font-weight:600;height:100%;margin:0;overflow:hidden;padding:10px 10px 10px 0;position:relative;text-overflow:ellipsis}.extension-editor .subcontent.feature-contributions .feature-view-container .extension-feature-content .feature-body{height:calc(100% - 50px)}.extension-editor .subcontent.feature-contributions .feature-view-container .extension-feature-content .monaco-scrollable-element{height:100%}.extension-editor .subcontent.feature-contributions .feature-view-container .extension-feature-content .feature-body .feature-body-content{box-sizing:border-box;height:100%;overflow-y:scroll}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-body .feature-body-content .feature-status{align-items:center;display:flex}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-body .feature-body-content .feature-content.markdown .codicon{vertical-align:sub}";
3
+ var css = ".extension-editor{display:flex;flex-direction:column;height:100%;margin:0 auto;max-width:80%;overflow:hidden}.extension-editor .clickable{cursor:pointer}.extension-editor>.header{display:flex;font-size:14px;overflow:hidden;padding:20px 20px 14px}.extension-editor>.header>.icon-container{position:relative}.extension-editor>.header>.icon-container .icon{height:128px;object-fit:contain;width:128px}.extension-editor>.header>.icon-container .extension-remote-badge{align-items:center;border-radius:20px;display:flex;height:38px;justify-content:center;line-height:38px;position:absolute;right:0;text-align:center;top:88px;width:38px}.extension-editor>.header>.icon-container .extension-remote-badge .codicon{color:currentColor;font-size:28px}.extension-editor>.header>.details{overflow:hidden;padding-left:20px;user-select:text;-webkit-user-select:text}.extension-editor>.header>.details>.title{align-items:center;display:flex}.extension-editor>.header>.details>.title>.name{flex:0;font-size:26px;font-weight:600;line-height:30px;white-space:nowrap}.extension-editor>.header>.details>.title>.name.deprecated{text-decoration:line-through}.extension-editor>.header>.details>.title>.version{margin-left:10px;user-select:text;-webkit-user-select:text;white-space:nowrap}.extension-editor>.header>.details>.title>.builtin{font-size:10px;font-style:italic;margin-left:10px}.extension-editor>.header>.details>.title>.pre-release{align-items:center;background-color:var(--vscode-extensionIcon-preReleaseForeground);border-radius:4px;color:#fff;display:flex;margin-left:10px;padding:0 4px}.extension-editor>.header>.details>.title>.pre-release>.codicon.codicon-extensions-pre-release{color:#fff;font-size:14px}.extension-editor>.header>.details>.title>.pre-release>.pre-release-text{font-size:10px;padding-left:3px}.monaco-workbench.vs .extension-editor>.header>.details>.title>.preview{color:#fff}.extension-editor>.header>.details>.title>.preview{background:#d63f26;border-radius:4px;font-size:10px;font-style:italic;margin-left:10px;padding:0 4px;user-select:none;-webkit-user-select:none}.extension-editor>.header>.details>.subtitle{height:20px;line-height:20px;padding-top:6px;white-space:nowrap}.extension-editor>.header>.details>.subtitle .hide{display:none}.extension-editor>.header>.details>.subtitle .publisher{align-items:center;display:flex}.extension-editor>.header>.details>.subtitle .publisher .verified-publisher:not(:empty){margin-left:4px}.extension-editor>.header>.details>.subtitle,.extension-editor>.header>.details>.subtitle .install,.extension-editor>.header>.details>.subtitle .rating,.extension-editor>.header>.details>.subtitle .sponsor{align-items:center;display:flex}.extension-editor>.header>.details>.subtitle .sponsor .codicon{padding-right:3px}.extension-editor>.header>.details>.subtitle .install>.count{margin-left:6px}.extension-editor>.header>.details>.subtitle>div:not(:first-child):not(:empty):not(.resource){border-left:1px solid hsla(0,0%,50%,.7);margin-left:14px;padding-left:14px}.extension-editor>.header>.details>.description{margin-top:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.extension-editor>.header>.details>.actions-status-container{display:flex;margin-top:10px}.extension-editor>.header>.details>.actions-status-container.list-layout{display:inherit}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar{text-align:initial}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item{flex-shrink:0;margin-right:0;overflow:hidden}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.disabled{min-width:0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item .extension-action{margin-bottom:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.extension-action:not(.icon){margin-left:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.monaco-dropdown .extension-action.action-dropdown{margin-right:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item:not(.checkbox-action-item) .extension-action:not(.icon){border-radius:0;padding-bottom:0;padding-top:0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.monaco-dropdown .extension-action.action-dropdown,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.extension-action{line-height:22px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.checkbox-action-item,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item:not(.action-dropdown-item):not(.checkbox-action-item)>.extension-action{margin-right:6px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.checkbox-action-item>.extension-action{height:18px;margin-top:2px;width:18px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item .extension-action.label,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.extension-action.label{font-weight:600;max-width:300px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.extension-action.label{border-right-width:0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.action-dropdown-item-separator{height:22px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item>.action-dropdown-item-separator>div{height:16px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item.empty>.extension-action.label{margin-right:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item.empty>.action-dropdown-item-separator{display:none}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item.empty>.extension-action.label,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.extension-action.label{border-radius:2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item:not(.empty)>.extension-action.label{border-radius:2px 0 0 2px}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item.action-dropdown-item:not(.empty)>.monaco-dropdown .extension-action.label{border-left-width:0;border-radius:0 2px 2px 0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar>.actions-container>.action-item>.action-label.extension-status{margin-right:0}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar .action-item .action-label.disable-status,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar .action-item .action-label.extension-status-label{font-weight:400}.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar .action-item .action-label.disable-status:hover,.extension-editor>.header>.details>.actions-status-container>.monaco-action-bar .action-item .action-label.extension-status-label:hover{opacity:.9}.extension-editor>.header>.details>.actions-status-container>.status{font-size:90%;line-height:22px;margin-top:3px}.extension-editor>.header>.details>.actions-status-container.list-layout>.status{margin-top:5px}.extension-editor>.header>.details>.actions-status-container>.status .codicon{vertical-align:text-bottom}.extension-editor>.header>.details>.actions-status-container>.status p,.extension-editor>.header>.details>.pre-release-text p{margin-bottom:0;margin-top:0}.extension-editor>.header>.details>.actions-status-container>.status a,.extension-editor>.header>.details>.pre-release-text a{color:var(--vscode-textLink-foreground)}.extension-editor>.header>.details>.actions-status-container>.status a:hover,.extension-editor>.header>.details>.pre-release-text a:hover{color:var(--vscode-textLink-activeForeground);text-decoration:underline}.extension-editor>.header>.details>.actions-status-container>.status a:active,.extension-editor>.header>.details>.pre-release-text a:active{color:var(--vscode-textLink-activeForeground)}.extension-editor>.header>.details>.pre-release-text:not(:empty){display:flex;font-size:90%;margin-top:5px}.extension-editor>.header>.details>.recommendation{display:flex;margin-top:5px}.extension-editor>.header>.details>.recommendation .codicon{font-size:inherit;margin-right:5px}.extension-editor>.header>.details>.recommendation .recommendation-text{font-size:90%;vertical-align:text-bottom}.extension-editor>.body{flex:1;overflow:hidden}.extension-editor>.body>.navbar{border-bottom:1px solid var(--vscode-panelSection-border);font-size:14px;font-weight:700;height:36px;line-height:36px;padding-left:20px}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container{justify-content:normal}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container>.action-item{height:100%}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container>.action-item>.action-label{background:none!important;border-radius:0!important;color:var(--vscode-panelTitle-inactiveForeground);font-size:11px;font-weight:400;padding:0 10px;text-transform:uppercase}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container>.action-item>.action-label.checked{border-bottom:1px solid var(--vscode-panelTitle-activeBorder);color:var(--vscode-panelTitle-activeForeground)}.extension-editor>.body>.navbar>.monaco-action-bar>.actions-container>.action-item>.action-label:hover{color:var(--vscode-panelTitle-activeForeground)}.extension-editor>.body>.content{height:calc(100% - 36px);overflow:hidden;position:relative;user-select:text;-webkit-user-select:text}.extension-editor>.body>.content.loading{background:url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCI+PHN0eWxlPmNpcmNsZXthbmltYXRpb246YmFsbCAuNnMgbGluZWFyIGluZmluaXRlfWNpcmNsZTpudGgtY2hpbGQoMil7YW5pbWF0aW9uLWRlbGF5Oi4wNzVzfWNpcmNsZTpudGgtY2hpbGQoMyl7YW5pbWF0aW9uLWRlbGF5Oi4xNXN9Y2lyY2xlOm50aC1jaGlsZCg0KXthbmltYXRpb24tZGVsYXk6LjIyNXN9Y2lyY2xlOm50aC1jaGlsZCg1KXthbmltYXRpb24tZGVsYXk6LjNzfWNpcmNsZTpudGgtY2hpbGQoNil7YW5pbWF0aW9uLWRlbGF5Oi4zNzVzfWNpcmNsZTpudGgtY2hpbGQoNyl7YW5pbWF0aW9uLWRlbGF5Oi40NXN9Y2lyY2xlOm50aC1jaGlsZCg4KXthbmltYXRpb24tZGVsYXk6LjUyNXN9PC9zdHlsZT48Y2lyY2xlIGN4PSI1IiBjeT0iMSIgcj0iMSIgc3R5bGU9Im9wYWNpdHk6LjMiLz48Y2lyY2xlIGN4PSI3LjgyOCIgY3k9IjIuMTcyIiByPSIxIiBzdHlsZT0ib3BhY2l0eTouMyIvPjxjaXJjbGUgY3g9IjkiIGN5PSI1IiByPSIxIiBzdHlsZT0ib3BhY2l0eTouMyIvPjxjaXJjbGUgY3g9IjcuODI4IiBjeT0iNy44MjgiIHI9IjEiIHN0eWxlPSJvcGFjaXR5Oi4zIi8+PGNpcmNsZSBjeD0iNSIgY3k9IjkiIHI9IjEiIHN0eWxlPSJvcGFjaXR5Oi4zIi8+PGNpcmNsZSBjeD0iMi4xNzIiIGN5PSI3LjgyOCIgcj0iMSIgc3R5bGU9Im9wYWNpdHk6LjMiLz48Y2lyY2xlIGN4PSIxIiBjeT0iNSIgcj0iMSIgc3R5bGU9Im9wYWNpdHk6LjMiLz48Y2lyY2xlIGN4PSIyLjE3MiIgY3k9IjIuMTcyIiByPSIxIiBzdHlsZT0ib3BhY2l0eTouMyIvPjwvc3ZnPg==\") 50% no-repeat}.extension-editor>.body>.content>.monaco-scrollable-element{height:100%}.extension-editor>.body>.content>.nocontent{margin-left:20px}.extension-editor>.body>.content>.details{display:flex;height:100%}.extension-editor>.body>.content>.details>.readme-container{flex:1;height:100%;margin:0 auto;max-width:75%}.extension-editor>.body>.content>.details.narrow>.readme-container{margin:inherit;max-width:inherit}.extension-editor>.body>.content>.details>.additional-details-container{height:100%;min-width:175px;width:25%}.extension-editor>.body>.content>.details.narrow>.additional-details-container{display:none}.extension-editor>.body>.content>.details>.additional-details-container>.monaco-scrollable-element{height:100%}.extension-editor>.body>.content>.details>.additional-details-container>.monaco-scrollable-element>.additional-details-content{box-sizing:border-box;height:100%;overflow-y:scroll;padding:20px}.extension-editor>.body>.content>.details>.additional-details-container .additional-details-element:not(:first-child){padding-top:15px}.extension-editor>.body>.content>.details>.additional-details-container .additional-details-element{padding-bottom:15px}.extension-editor>.body>.content>.details>.additional-details-container .additional-details-element:not(:last-child){border-bottom:1px solid hsla(0,0%,50%,.22)}.extension-editor>.body>.content>.details>.additional-details-container .additional-details-element>.additional-details-title{font-size:120%;padding-bottom:15px}.extension-editor>.body>.content>.details>.additional-details-container .categories-container>.categories>.category,.extension-editor>.body>.content>.details>.additional-details-container .tags-container>.tags>.tag{border:1px solid hsla(0,0%,53%,.45);border-radius:2px;cursor:pointer;display:inline-block;font-size:90%;margin:0 6px 3px 0;padding:2px 4px}.extension-editor>.body>.content>.details>.additional-details-container .resources-container>.resources>.resource{cursor:pointer;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.extension-editor>.body>.content>.details>.additional-details-container .resources-container>.resources>.resource:hover{text-decoration:underline}.extension-editor>.body>.content>.details>.additional-details-container .more-info-container>.more-info>.more-info-entry{display:grid;font-size:90%;gap:6px;grid-template-columns:40% 60%;padding:2px 4px}.extension-editor>.body>.content>.details>.additional-details-container .more-info-container>.more-info>.more-info-entry:nth-child(odd){background-color:hsla(0,0%,51%,.04)}.extension-editor>.body>.content>.details>.additional-details-container .more-info-container>.more-info>.more-info-entry code{background-color:transparent;padding:0}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme{height:100%}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack{height:224px;padding-left:20px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.one-row>.extension-pack{height:142px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.two-rows>.extension-pack{height:224px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.three-rows>.extension-pack{height:306px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.more-rows>.extension-pack{height:326px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.one-row>.readme-content{height:calc(100% - 142px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.two-rows>.readme-content{height:calc(100% - 224px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.three-rows>.readme-content{height:calc(100% - 306px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme.more-rows>.readme-content{height:calc(100% - 326px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.footer,.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.header{border-bottom:1px solid hsla(0,0%,50%,.22);font-size:120%;font-weight:700;line-height:22px;margin-bottom:10px;margin-right:30px;padding:4px 6px}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.extension-pack-content{height:calc(100% - 60px)}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.extension-pack-content>.monaco-scrollable-element{height:100%}.extension-editor>.body>.content>.details>.readme-container>.extension-pack-readme>.extension-pack>.extension-pack-content>.monaco-scrollable-element>.subcontent{box-sizing:border-box;height:100%;overflow-y:scroll}.extension-editor>.body>.content>.monaco-scrollable-element>.subcontent{box-sizing:border-box;height:100%;overflow-y:scroll;padding:20px}.extension-editor>.body>.content table{border-collapse:separate;border-spacing:0;width:100%}.extension-editor>.body>.content details:not(:first-child){margin-top:20px}.extension-editor>.body>.content details>summary{border-bottom:1px solid hsla(0,0%,50%,.22);cursor:pointer;font-size:120%;font-weight:700;line-height:22px;margin-bottom:10px;padding:3px 6px}.extension-editor>.body>.content table tr:nth-child(odd){background-color:hsla(0,0%,51%,.04)}.extension-editor>.body>.content table tr:not(:first-child):hover{background-color:hsla(0,0%,50%,.15)}.extension-editor>.body>.content table td,.extension-editor>.body>.content table th{padding:2px 16px 2px 4px}.extension-editor>.body>.content table td{vertical-align:top}.extension-editor>.body>.content table td:last-child,.extension-editor>.body>.content table th:last-child{padding:2px 4px}.extension-editor>.body>.content table th{text-align:left;word-break:keep-all}.extension-editor>.body>.content table td>div,.extension-editor>.body>.content table td>div>p{margin:0;padding:0}.extension-editor code:not(:empty){background-color:hsla(0,0%,50%,.17);border-radius:4px;font-family:var(--monaco-monospace-font);font-size:90%;padding:1px 4px}.extension-editor>.body>.content table .colorBox{border:.1em solid #000;box-sizing:border-box;display:inline-block;height:.8em;margin:0 .2em;vertical-align:middle;width:.8em}.monaco-workbench.hc-black .extension-editor>.body>.content table .colorBox,.monaco-workbench.vs-dark .extension-editor>.body>.content table .colorBox{border-color:#eee}.extension-editor .subcontent .monaco-list-row .content .unknown-extension{line-height:62px}.extension-editor .subcontent .monaco-list-row .content .unknown-extension>.error-marker{background-color:#be1100;color:#ccc;font-size:11px;font-weight:700;padding:2px 4px}.extension-editor .subcontent .monaco-list-row .unknown-extension>.message{font-size:14px;font-weight:700;padding-left:10px}.extension-editor .subcontent .monaco-list-row .extension{align-items:center;display:flex}.extension-editor .subcontent .monaco-list-row .extension>.details{flex:1;overflow:hidden;padding-left:10px}.extension-editor .subcontent .monaco-list-row .extension>.details>.header{align-items:center;display:flex;line-height:19px;overflow:hidden}.extension-editor .subcontent .monaco-list-row .extension>.icon{height:40px;object-fit:contain;width:40px}.extension-editor .subcontent .monaco-list-row .extension>.details>.header>.name{font-size:16px;font-weight:700}.extension-editor .subcontent .monaco-list-row .extension>.details>.header>.name:hover{text-decoration:underline}.extension-editor .subcontent .monaco-list-row .extension>.details>.header>.identifier{background:hsla(0,0%,68%,.31);border-radius:4px;font-size:90%;margin-left:10px;opacity:.6;padding:0 4px}.extension-editor .subcontent .monaco-list-row .extension>.details>.footer{display:flex;line-height:19px;overflow:hidden;padding-top:5px}.extension-editor .subcontent .monaco-list-row .extension>.details>.footer>.author{font-size:90%;font-weight:600;opacity:.6}.extension-editor .extensions-grid-view{display:flex;flex-wrap:wrap}.extension-editor .extensions-grid-view>.extension-container{margin:0 10px 20px 0;width:350px}.extension-editor .extensions-grid-view .extension-list-item{cursor:default}.extension-editor .extensions-grid-view .extension-list-item>.details .header>.name{cursor:pointer}.extension-editor .extensions-grid-view .extension-list-item>.details>.header-container>.header>.install-count,.extension-editor .extensions-grid-view .extension-list-item>.details>.header-container>.header>.ratings,.extension-editor .extensions-grid-view .extension-list-item>.details>.header-container>.header>.version{display:none}.extension-editor .extensions-grid-view>.extension-container:focus>.extension-list-item>.details .header>.name,.extension-editor .extensions-grid-view>.extension-container:hover>.extension-list-item>.details .header>.name{text-decoration:underline}.monaco-workbench.vs .extension-editor .extensions-grid-view>.extension-container.disabled>.extension-list-item>.details>.header-container .codicon,.monaco-workbench.vs .extension-editor .extensions-grid-view>.extension-container.disabled>.extension-list-item>.icon-container>.icon,.monaco-workbench.vs-dark .extension-editor .extensions-grid-view>.extension-container.disabled>.extension-list-item>.details>.header-container .codicon,.monaco-workbench.vs-dark .extension-editor .extensions-grid-view>.extension-container.disabled>.extension-list-item>.icon-container>.icon{opacity:.5}.extension-editor>.body>.content .runtime-status .activation-details>.activation-element-entry>.activation-message-title{padding-right:10px}.extension-editor>.body>.content .runtime-status .message-entry{align-items:center;display:flex;margin:5px}.extension-editor>.body>.content .runtime-status .message-entry .codicon{padding-right:2px}.monaco-workbench .extension-editor>.header>.details>.recommendation .codicon{color:var(--vscode-extensionButton-prominentBackground)}.extension-editor .subcontent.feature-contributions{margin-top:14px}.extension-editor .subcontent.feature-contributions .features-list-container{height:100%}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper{height:100%;padding-left:24px}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper .monaco-list-row.extension-feature-list-item{align-items:center;display:flex;padding-left:10px;padding-right:10px}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper .monaco-list-row.extension-feature-list-item .extension-feature-label{flex:1}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper .monaco-list-row.extension-feature-list-item .extension-feature-disabled-label{font-size:12px;opacity:.8}.extension-editor .subcontent.feature-contributions .features-list-container>.features-list-wrapper .monaco-list-row.extension-feature-list-item .extension-feature-status{padding-left:5px}.extension-editor .subcontent.feature-contributions .feature-view-container{height:100%}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-body-content .feature-description{margin-bottom:10px}.extension-editor .subcontent.feature-contributions .extension-feature-content{box-sizing:border-box;height:100%;padding-left:24px}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-header{align-items:center;display:flex;line-height:20px;margin:0 10px 10px 0}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-header>.feature-title{box-sizing:border-box;display:inline-block;flex:1;font-size:26px;font-weight:600;height:100%;margin:0;overflow:hidden;padding:10px 10px 10px 0;position:relative;text-overflow:ellipsis}.extension-editor .subcontent.feature-contributions .feature-view-container .extension-feature-content .feature-body{height:calc(100% - 50px)}.extension-editor .subcontent.feature-contributions .feature-view-container .extension-feature-content .monaco-scrollable-element{height:100%}.extension-editor .subcontent.feature-contributions .feature-view-container .extension-feature-content .feature-body .feature-body-content{box-sizing:border-box;height:100%;overflow-y:scroll}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-body .feature-body-content .feature-status{align-items:center;display:flex}.extension-editor .subcontent.feature-contributions .extension-feature-content .feature-body .feature-body-content .feature-content.markdown .codicon{vertical-align:sub}";
4
4
  n(css,{});
5
5
 
6
6
  export { css, css as default };
@@ -14,7 +14,7 @@ let RemoteRecommendations = class RemoteRecommendations extends ExtensionRecomme
14
14
  const extensionTips = { ...this.productService.remoteExtensionTips, ...this.productService.virtualWorkspaceExtensionTips };
15
15
  const currentPlatform = PlatformToString(platform);
16
16
  this._recommendations = ( ( Object.values(extensionTips)).filter(({ supportedPlatforms }) => !supportedPlatforms || supportedPlatforms.includes(currentPlatform)).map(extension => ({
17
- extensionId: extension.extensionId.toLowerCase(),
17
+ extension: extension.extensionId.toLowerCase(),
18
18
  reason: {
19
19
  reasonId: 6 ,
20
20
  reasonText: ''
@@ -16,7 +16,7 @@ let WebRecommendations = class WebRecommendations extends ExtensionRecommendatio
16
16
  const isOnlyWeb = this.extensionManagementServerService.webExtensionManagementServer && !this.extensionManagementServerService.localExtensionManagementServer && !this.extensionManagementServerService.remoteExtensionManagementServer;
17
17
  if (isOnlyWeb && Array.isArray(this.productService.webExtensionTips)) {
18
18
  this._recommendations = ( this.productService.webExtensionTips.map(extensionId => ({
19
- extensionId: extensionId.toLowerCase(),
19
+ extension: extensionId.toLowerCase(),
20
20
  reason: {
21
21
  reasonId: 6 ,
22
22
  reasonText: ( localizeWithPath(
@@ -1,27 +1,84 @@
1
1
  import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
2
  import { EXTENSION_IDENTIFIER_PATTERN } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement';
3
- import { distinct, flatten } from 'vscode/vscode/vs/base/common/arrays';
3
+ import { equals, distinct, flatten } from 'vscode/vscode/vs/base/common/arrays';
4
4
  import { ExtensionRecommendations } from './extensionRecommendations.js';
5
5
  import { INotificationService } from 'vscode/vscode/vs/platform/notification/common/notification';
6
6
  import { localizeWithPath } from 'vscode/vscode/vs/nls';
7
7
  import { Emitter } from 'vscode/vscode/vs/base/common/event';
8
8
  import { IWorkspaceExtensionsConfigService } from 'vscode/vscode/vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig';
9
+ import { IWorkspaceContextService } from 'vscode/vscode/vs/platform/workspace/common/workspace';
10
+ import { IUriIdentityService } from 'vscode/vscode/vs/platform/uriIdentity/common/uriIdentity';
11
+ import { IFileService } from 'vscode/vscode/vs/platform/files/common/files';
12
+ import { RunOnceScheduler } from 'vscode/vscode/vs/base/common/async';
13
+ import { IWorkbenchExtensionManagementService } from 'vscode/vscode/vs/workbench/services/extensionManagement/common/extensionManagement';
9
14
 
15
+ const WORKSPACE_EXTENSIONS_FOLDER = '.vscode/extensions';
10
16
  let WorkspaceRecommendations = class WorkspaceRecommendations extends ExtensionRecommendations {
11
17
  get recommendations() { return this._recommendations; }
12
18
  get ignoredRecommendations() { return this._ignoredRecommendations; }
13
- constructor(workspaceExtensionsConfigService, notificationService) {
19
+ constructor(workspaceExtensionsConfigService, contextService, uriIdentityService, fileService, workbenchExtensionManagementService, notificationService) {
14
20
  super();
15
21
  this.workspaceExtensionsConfigService = workspaceExtensionsConfigService;
22
+ this.contextService = contextService;
23
+ this.uriIdentityService = uriIdentityService;
24
+ this.fileService = fileService;
25
+ this.workbenchExtensionManagementService = workbenchExtensionManagementService;
16
26
  this.notificationService = notificationService;
17
27
  this._recommendations = [];
18
28
  this._onDidChangeRecommendations = this._register(( new Emitter()));
19
29
  this.onDidChangeRecommendations = this._onDidChangeRecommendations.event;
20
30
  this._ignoredRecommendations = [];
31
+ this.workspaceExtensions = [];
32
+ this.onDidChangeWorkspaceExtensionsScheduler = this._register(( new RunOnceScheduler(() => this.onDidChangeWorkspaceExtensionsFolders(), 1000)));
21
33
  }
22
34
  async doActivate() {
35
+ this.workspaceExtensions = await this.fetchWorkspaceExtensions();
23
36
  await this.fetch();
24
37
  this._register(this.workspaceExtensionsConfigService.onDidChangeExtensionsConfigs(() => this.onDidChangeExtensionsConfigs()));
38
+ for (const folder of this.contextService.getWorkspace().folders) {
39
+ this._register(this.fileService.watch(this.uriIdentityService.extUri.joinPath(folder.uri, WORKSPACE_EXTENSIONS_FOLDER)));
40
+ }
41
+ if (this.workbenchExtensionManagementService.isWorkspaceExtensionsSupported()) {
42
+ this._register(this.fileService.onDidFilesChange(e => {
43
+ if (( this.contextService.getWorkspace().folders.some(
44
+ folder => e.affects(this.uriIdentityService.extUri.joinPath(folder.uri, WORKSPACE_EXTENSIONS_FOLDER), 1 , 2 )
45
+ ))) {
46
+ this.onDidChangeWorkspaceExtensionsScheduler.schedule();
47
+ }
48
+ }));
49
+ }
50
+ }
51
+ async onDidChangeWorkspaceExtensionsFolders() {
52
+ const existing = this.workspaceExtensions;
53
+ this.workspaceExtensions = await this.fetchWorkspaceExtensions();
54
+ if (!equals(existing, this.workspaceExtensions, (a, b) => this.uriIdentityService.extUri.isEqual(a, b))) {
55
+ this.onDidChangeExtensionsConfigs();
56
+ }
57
+ }
58
+ async fetchWorkspaceExtensions() {
59
+ if (!this.workbenchExtensionManagementService.isWorkspaceExtensionsSupported()) {
60
+ return [];
61
+ }
62
+ const workspaceExtensions = [];
63
+ for (const workspaceFolder of this.contextService.getWorkspace().folders) {
64
+ const extensionsLocaiton = this.uriIdentityService.extUri.joinPath(workspaceFolder.uri, WORKSPACE_EXTENSIONS_FOLDER);
65
+ try {
66
+ const stat = await this.fileService.resolve(extensionsLocaiton);
67
+ for (const extension of stat.children ?? []) {
68
+ if (!extension.isDirectory) {
69
+ continue;
70
+ }
71
+ workspaceExtensions.push(extension.resource);
72
+ }
73
+ }
74
+ catch (error) {
75
+ }
76
+ }
77
+ if (workspaceExtensions.length) {
78
+ const resourceExtensions = await this.workbenchExtensionManagementService.getExtensions(workspaceExtensions);
79
+ return ( resourceExtensions.map(extension => extension.location));
80
+ }
81
+ return [];
25
82
  }
26
83
  async fetch() {
27
84
  const extensionsConfigs = await this.workspaceExtensionsConfigService.getExtensionsConfigs();
@@ -43,7 +100,7 @@ let WorkspaceRecommendations = class WorkspaceRecommendations extends ExtensionR
43
100
  for (const extensionId of extensionsConfig.recommendations) {
44
101
  if (invalidRecommendations.indexOf(extensionId) === -1) {
45
102
  this._recommendations.push({
46
- extensionId,
103
+ extension: extensionId,
47
104
  reason: {
48
105
  reasonId: 0 ,
49
106
  reasonText: ( localizeWithPath(
@@ -57,6 +114,19 @@ let WorkspaceRecommendations = class WorkspaceRecommendations extends ExtensionR
57
114
  }
58
115
  }
59
116
  }
117
+ for (const extension of this.workspaceExtensions) {
118
+ this._recommendations.push({
119
+ extension,
120
+ reason: {
121
+ reasonId: 0 ,
122
+ reasonText: ( localizeWithPath(
123
+ 'vs/workbench/contrib/extensions/browser/workspaceRecommendations',
124
+ 'workspaceRecommendation',
125
+ "This extension is recommended by users of the current workspace."
126
+ ))
127
+ }
128
+ });
129
+ }
60
130
  }
61
131
  async validateExtensions(contents) {
62
132
  const validExtensions = [];
@@ -82,7 +152,11 @@ let WorkspaceRecommendations = class WorkspaceRecommendations extends ExtensionR
82
152
  };
83
153
  WorkspaceRecommendations = ( __decorate([
84
154
  ( __param(0, IWorkspaceExtensionsConfigService)),
85
- ( __param(1, INotificationService))
155
+ ( __param(1, IWorkspaceContextService)),
156
+ ( __param(2, IUriIdentityService)),
157
+ ( __param(3, IFileService)),
158
+ ( __param(4, IWorkbenchExtensionManagementService)),
159
+ ( __param(5, INotificationService))
86
160
  ], WorkspaceRecommendations));
87
161
 
88
162
  export { WorkspaceRecommendations };
@@ -370,6 +370,9 @@ let ExtensionEnablementService = class ExtensionEnablementService extends Dispos
370
370
  if (workspaceType.trusted) {
371
371
  return false;
372
372
  }
373
+ if (this.contextService.isInsideWorkspace(extension.location)) {
374
+ return true;
375
+ }
373
376
  return this.extensionManifestPropertiesService.getExtensionUntrustedWorkspaceSupportType(extension.manifest) === false;
374
377
  }
375
378
  _isDisabledByExtensionDependency(extension, extensions, workspaceType, computedEnablementStates) {
@@ -589,7 +592,10 @@ let ExtensionsManager = class ExtensionsManager extends Disposable {
589
592
  }
590
593
  async initialize() {
591
594
  try {
592
- this._extensions = await this.extensionManagementService.getInstalled();
595
+ this._extensions = [
596
+ ...(await this.extensionManagementService.getInstalled()),
597
+ ...(await this.extensionManagementService.getInstalledWorkspaceExtensions(true))
598
+ ];
593
599
  if (this.disposed) {
594
600
  return;
595
601
  }
@@ -0,0 +1,24 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import { ILogService } from 'vscode/vscode/vs/platform/log/common/log';
3
+ import { IUserDataProfilesService } from 'vscode/vscode/vs/platform/userDataProfile/common/userDataProfile';
4
+ import { IUriIdentityService } from 'vscode/vscode/vs/platform/uriIdentity/common/uriIdentity';
5
+ import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry';
6
+ import { AbstractExtensionsProfileScannerService } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionsProfileScannerService';
7
+ import { IFileService } from 'vscode/vscode/vs/platform/files/common/files';
8
+ import { IWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/common/environmentService';
9
+
10
+ let ExtensionsProfileScannerService = class ExtensionsProfileScannerService extends AbstractExtensionsProfileScannerService {
11
+ constructor(environmentService, fileService, userDataProfilesService, uriIdentityService, telemetryService, logService) {
12
+ super(environmentService.userRoamingDataHome, fileService, userDataProfilesService, uriIdentityService, telemetryService, logService);
13
+ }
14
+ };
15
+ ExtensionsProfileScannerService = ( __decorate([
16
+ ( __param(0, IWorkbenchEnvironmentService)),
17
+ ( __param(1, IFileService)),
18
+ ( __param(2, IUserDataProfilesService)),
19
+ ( __param(3, IUriIdentityService)),
20
+ ( __param(4, ITelemetryService)),
21
+ ( __param(5, ILogService))
22
+ ], ExtensionsProfileScannerService));
23
+
24
+ export { ExtensionsProfileScannerService };
@@ -1,6 +1,10 @@
1
1
  import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
2
  import { IBuiltinExtensionsScannerService } from 'vscode/vscode/vs/platform/extensions/common/extensions';
3
3
  import { IBrowserWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/browser/environmentService';
4
+ import 'vscode/vscode/vs/platform/instantiation/common/instantiation';
5
+ import { IExtensionGalleryService } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement';
6
+ import 'vscode/vscode/vs/base/common/network';
7
+ import { localize2WithPath, localizeWithPath } from 'vscode/vscode/vs/nls';
4
8
  import { isWeb, Language } from 'vscode/vscode/vs/base/common/platform';
5
9
  import { joinPath } from 'vscode/vscode/vs/base/common/resources';
6
10
  import { URI } from 'vscode/vscode/vs/base/common/uri';
@@ -9,11 +13,9 @@ import { Queue } from 'vscode/vscode/vs/base/common/async';
9
13
  import { VSBuffer } from 'vscode/vscode/vs/base/common/buffer';
10
14
  import { ILogService } from 'vscode/vscode/vs/platform/log/common/log';
11
15
  import { CancellationToken } from 'vscode/vscode/vs/base/common/cancellation';
12
- import { IExtensionGalleryService } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement';
13
16
  import { areSameExtensions, getExtensionId, getGalleryExtensionId } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagementUtil';
14
17
  import { Disposable } from 'vscode/vscode/vs/base/common/lifecycle';
15
18
  import { localizeManifest } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionNls';
16
- import { localize2WithPath, localizeWithPath } from 'vscode/vscode/vs/nls';
17
19
  import { semverExports } from '../../../../../../../external/vscode-semver/semver.js';
18
20
  import { isString, isUndefined } from 'vscode/vscode/vs/base/common/types';
19
21
  import { getErrorMessage } from 'vscode/vscode/vs/base/common/errors';
@@ -31,7 +33,7 @@ import { ILifecycleService } from 'vscode/vscode/vs/workbench/services/lifecycle
31
33
  import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage';
32
34
  import { IProductService } from 'vscode/vscode/vs/platform/product/common/productService';
33
35
  import { validateExtensionManifest } from 'vscode/vscode/vs/platform/extensions/common/extensionValidator';
34
- import Severity from 'vscode/vscode/vs/base/common/severity';
36
+ import Severity$1 from 'vscode/vscode/vs/base/common/severity';
35
37
  import { IUserDataProfileService } from 'vscode/vscode/vs/workbench/services/userDataProfile/common/userDataProfile';
36
38
  import { IUserDataProfilesService } from 'vscode/vscode/vs/platform/userDataProfile/common/userDataProfile';
37
39
  import { IUriIdentityService } from 'vscode/vscode/vs/platform/uriIdentity/common/uriIdentity';
@@ -311,9 +313,14 @@ let WebExtensionsScannerService = class WebExtensionsScannerService extends Disp
311
313
  const result = ( new Map());
312
314
  const extensionInfos = [];
313
315
  await Promise.all(( extensionGalleryResources.map(async (extensionGalleryResource) => {
314
- const webExtension = await this.toWebExtensionFromExtensionGalleryResource(extensionGalleryResource);
315
- result.set(webExtension.identifier.id.toLowerCase(), webExtension);
316
- extensionInfos.push({ id: webExtension.identifier.id, version: webExtension.version });
316
+ try {
317
+ const webExtension = await this.toWebExtensionFromExtensionGalleryResource(extensionGalleryResource);
318
+ result.set(webExtension.identifier.id.toLowerCase(), webExtension);
319
+ extensionInfos.push({ id: webExtension.identifier.id, version: webExtension.version });
320
+ }
321
+ catch (error) {
322
+ this.logService.info(`Ignoring additional builtin extension from gallery resource ${( extensionGalleryResource.toString())} because there is an error while converting it into web extension`, getErrorMessage(error));
323
+ }
317
324
  })));
318
325
  const galleryExtensions = await this.galleryService.getExtensions(extensionInfos, CancellationToken.None);
319
326
  for (const galleryExtension of galleryExtensions) {
@@ -623,7 +630,7 @@ let WebExtensionsScannerService = class WebExtensionsScannerService extends Disp
623
630
  manifest = await this.getExtensionManifest(webExtension.location);
624
631
  }
625
632
  catch (error) {
626
- validations.push([Severity.Error, `Error while fetching manifest from the location '${webExtension.location}'. ${getErrorMessage(error)}`]);
633
+ validations.push([Severity$1.Error, `Error while fetching manifest from the location '${webExtension.location}'. ${getErrorMessage(error)}`]);
627
634
  }
628
635
  }
629
636
  if (!manifest) {
@@ -647,7 +654,7 @@ let WebExtensionsScannerService = class WebExtensionsScannerService extends Disp
647
654
  validations.push(...validateExtensionManifest(this.productService.version, this.productService.date, webExtension.location, manifest, false));
648
655
  let isValid = true;
649
656
  for (const [severity, message] of validations) {
650
- if (severity === Severity.Error) {
657
+ if (severity === Severity$1.Error) {
651
658
  isValid = false;
652
659
  this.logService.error(message);
653
660
  }
@@ -63,8 +63,8 @@ class ProfileAwareExtensionManagementChannelClient extends ExtensionManagementCh
63
63
  options = { ...options, profileLocation: await this.getProfileLocation(options?.profileLocation) };
64
64
  return super.uninstall(extension, options);
65
65
  }
66
- async getInstalled(type = null, extensionsProfileResource) {
67
- return super.getInstalled(type, await this.getProfileLocation(extensionsProfileResource));
66
+ async getInstalled(type = null, extensionsProfileResource, productVersion) {
67
+ return super.getInstalled(type, await this.getProfileLocation(extensionsProfileResource), productVersion);
68
68
  }
69
69
  async updateMetadata(local, metadata, extensionsProfileResource) {
70
70
  return super.updateMetadata(local, metadata, await this.getProfileLocation(extensionsProfileResource));
@@ -1,10 +1,11 @@
1
1
  import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
2
  import { localizeWithPath } from 'vscode/vscode/vs/nls';
3
- import { IRemoteAgentService } from 'vscode/vscode/vs/workbench/services/remote/common/remoteAgentService';
3
+ import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
4
+ import 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement';
4
5
  import { Schemas } from 'vscode/vscode/vs/base/common/network';
6
+ import { IRemoteAgentService } from 'vscode/vscode/vs/workbench/services/remote/common/remoteAgentService';
5
7
  import { ILabelService } from 'vscode/vscode/vs/platform/label/common/label';
6
8
  import { isWeb } from 'vscode/vscode/vs/base/common/platform';
7
- import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
8
9
  import { WebExtensionManagementService } from './webExtensionManagementService.js';
9
10
  import { RemoteExtensionManagementService } from './remoteExtensionManagementService.js';
10
11