Path: blob/main/src/vs/platform/extensionManagement/common/extensionGalleryManifestService.ts
5283 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Event } from '../../../base/common/event.js';6import { Disposable } from '../../../base/common/lifecycle.js';7import { IProductService } from '../../product/common/productService.js';8import { ExtensionGalleryResourceType, Flag, IExtensionGalleryManifest, IExtensionGalleryManifestService, ExtensionGalleryManifestStatus } from './extensionGalleryManifest.js';9import { FilterType, SortBy } from './extensionManagement.js';1011type ExtensionGalleryConfig = {12readonly serviceUrl: string;13readonly itemUrl: string;14readonly publisherUrl: string;15readonly resourceUrlTemplate: string;16readonly extensionUrlTemplate: string;17readonly controlUrl: string;18readonly nlsBaseUrl: string;19};2021export class ExtensionGalleryManifestService extends Disposable implements IExtensionGalleryManifestService {2223readonly _serviceBrand: undefined;24readonly onDidChangeExtensionGalleryManifest = Event.None;25readonly onDidChangeExtensionGalleryManifestStatus = Event.None;2627get extensionGalleryManifestStatus(): ExtensionGalleryManifestStatus {28return !!this.productService.extensionsGallery?.serviceUrl ? ExtensionGalleryManifestStatus.Available : ExtensionGalleryManifestStatus.Unavailable;29}3031constructor(32@IProductService protected readonly productService: IProductService,33) {34super();35}3637async getExtensionGalleryManifest(): Promise<IExtensionGalleryManifest | null> {38const extensionsGallery = this.productService.extensionsGallery as ExtensionGalleryConfig | undefined;39if (!extensionsGallery?.serviceUrl) {40return null;41}4243const resources = [44{45id: `${extensionsGallery.serviceUrl}/extensionquery`,46type: ExtensionGalleryResourceType.ExtensionQueryService47},48{49id: `${extensionsGallery.serviceUrl}/vscode/{publisher}/{name}/latest`,50type: ExtensionGalleryResourceType.ExtensionLatestVersionUri51},52{53id: `${extensionsGallery.serviceUrl}/publishers/{publisher}/extensions/{name}/{version}/stats?statType={statTypeName}`,54type: ExtensionGalleryResourceType.ExtensionStatisticsUri55},56];5758if (extensionsGallery.publisherUrl) {59resources.push({60id: `${extensionsGallery.publisherUrl}/{publisher}`,61type: ExtensionGalleryResourceType.PublisherViewUri62});63}6465if (extensionsGallery.itemUrl) {66resources.push({67id: `${extensionsGallery.itemUrl}?itemName={publisher}.{name}`,68type: ExtensionGalleryResourceType.ExtensionDetailsViewUri69});70resources.push({71id: `${extensionsGallery.itemUrl}?itemName={publisher}.{name}&ssr=false#review-details`,72type: ExtensionGalleryResourceType.ExtensionRatingViewUri73});74}7576if (extensionsGallery.resourceUrlTemplate) {77resources.push({78id: extensionsGallery.resourceUrlTemplate,79type: ExtensionGalleryResourceType.ExtensionResourceUri80});81}8283const filtering = [84{85name: FilterType.Tag,86value: 1,87},88{89name: FilterType.ExtensionId,90value: 4,91},92{93name: FilterType.Category,94value: 5,95},96{97name: FilterType.ExtensionName,98value: 7,99},100{101name: FilterType.Target,102value: 8,103},104{105name: FilterType.Featured,106value: 9,107},108{109name: FilterType.SearchText,110value: 10,111},112{113name: FilterType.ExcludeWithFlags,114value: 12,115},116];117118const sorting = [119{120name: SortBy.NoneOrRelevance,121value: 0,122},123{124name: SortBy.LastUpdatedDate,125value: 1,126},127{128name: SortBy.Title,129value: 2,130},131{132name: SortBy.PublisherName,133value: 3,134},135{136name: SortBy.InstallCount,137value: 4,138},139{140name: SortBy.AverageRating,141value: 6,142},143{144name: SortBy.PublishedDate,145value: 10,146},147{148name: SortBy.WeightedRating,149value: 12,150},151];152153const flags = [154{155name: Flag.None,156value: 0x0,157},158{159name: Flag.IncludeVersions,160value: 0x1,161},162{163name: Flag.IncludeFiles,164value: 0x2,165},166{167name: Flag.IncludeCategoryAndTags,168value: 0x4,169},170{171name: Flag.IncludeSharedAccounts,172value: 0x8,173},174{175name: Flag.IncludeVersionProperties,176value: 0x10,177},178{179name: Flag.ExcludeNonValidated,180value: 0x20,181},182{183name: Flag.IncludeInstallationTargets,184value: 0x40,185},186{187name: Flag.IncludeAssetUri,188value: 0x80,189},190{191name: Flag.IncludeStatistics,192value: 0x100,193},194{195name: Flag.IncludeLatestVersionOnly,196value: 0x200,197},198{199name: Flag.Unpublished,200value: 0x1000,201},202{203name: Flag.IncludeNameConflictInfo,204value: 0x8000,205},206{207name: Flag.IncludeLatestPrereleaseAndStableVersionOnly,208value: 0x10000,209},210];211212return {213version: '',214resources,215capabilities: {216extensionQuery: {217filtering,218sorting,219flags,220},221signing: {222allPublicRepositorySigned: true,223}224}225};226}227}228229230