Path: blob/main/src/vs/platform/extensionManagement/common/extensionGalleryManifestService.ts
3296 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{57id: `${extensionsGallery.serviceUrl}/itemName/{publisher}.{name}/version/{version}/statType/{statTypeValue}/vscodewebextension`,58type: ExtensionGalleryResourceType.WebExtensionStatisticsUri59},60];6162if (extensionsGallery.publisherUrl) {63resources.push({64id: `${extensionsGallery.publisherUrl}/{publisher}`,65type: ExtensionGalleryResourceType.PublisherViewUri66});67}6869if (extensionsGallery.itemUrl) {70resources.push({71id: `${extensionsGallery.itemUrl}?itemName={publisher}.{name}`,72type: ExtensionGalleryResourceType.ExtensionDetailsViewUri73});74resources.push({75id: `${extensionsGallery.itemUrl}?itemName={publisher}.{name}&ssr=false#review-details`,76type: ExtensionGalleryResourceType.ExtensionRatingViewUri77});78}7980if (extensionsGallery.resourceUrlTemplate) {81resources.push({82id: extensionsGallery.resourceUrlTemplate,83type: ExtensionGalleryResourceType.ExtensionResourceUri84});85}8687const filtering = [88{89name: FilterType.Tag,90value: 1,91},92{93name: FilterType.ExtensionId,94value: 4,95},96{97name: FilterType.Category,98value: 5,99},100{101name: FilterType.ExtensionName,102value: 7,103},104{105name: FilterType.Target,106value: 8,107},108{109name: FilterType.Featured,110value: 9,111},112{113name: FilterType.SearchText,114value: 10,115},116{117name: FilterType.ExcludeWithFlags,118value: 12,119},120];121122const sorting = [123{124name: SortBy.NoneOrRelevance,125value: 0,126},127{128name: SortBy.LastUpdatedDate,129value: 1,130},131{132name: SortBy.Title,133value: 2,134},135{136name: SortBy.PublisherName,137value: 3,138},139{140name: SortBy.InstallCount,141value: 4,142},143{144name: SortBy.AverageRating,145value: 6,146},147{148name: SortBy.PublishedDate,149value: 10,150},151{152name: SortBy.WeightedRating,153value: 12,154},155];156157const flags = [158{159name: Flag.None,160value: 0x0,161},162{163name: Flag.IncludeVersions,164value: 0x1,165},166{167name: Flag.IncludeFiles,168value: 0x2,169},170{171name: Flag.IncludeCategoryAndTags,172value: 0x4,173},174{175name: Flag.IncludeSharedAccounts,176value: 0x8,177},178{179name: Flag.IncludeVersionProperties,180value: 0x10,181},182{183name: Flag.ExcludeNonValidated,184value: 0x20,185},186{187name: Flag.IncludeInstallationTargets,188value: 0x40,189},190{191name: Flag.IncludeAssetUri,192value: 0x80,193},194{195name: Flag.IncludeStatistics,196value: 0x100,197},198{199name: Flag.IncludeLatestVersionOnly,200value: 0x200,201},202{203name: Flag.Unpublished,204value: 0x1000,205},206{207name: Flag.IncludeNameConflictInfo,208value: 0x8000,209},210{211name: Flag.IncludeLatestPrereleaseAndStableVersionOnly,212value: 0x10000,213},214];215216return {217version: '',218resources,219capabilities: {220extensionQuery: {221filtering,222sorting,223flags,224},225signing: {226allPublicRepositorySigned: true,227}228}229};230}231}232233234