Path: blob/main/src/vs/platform/extensionManagement/common/extensionGalleryManifest.ts
5311 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 { createDecorator } from '../../instantiation/common/instantiation.js';78export const enum ExtensionGalleryResourceType {9ExtensionQueryService = 'ExtensionQueryService',10ExtensionLatestVersionUri = 'ExtensionLatestVersionUriTemplate',11ExtensionStatisticsUri = 'ExtensionStatisticsUriTemplate',12PublisherViewUri = 'PublisherViewUriTemplate',13ExtensionDetailsViewUri = 'ExtensionDetailsViewUriTemplate',14ExtensionRatingViewUri = 'ExtensionRatingViewUriTemplate',15ExtensionResourceUri = 'ExtensionResourceUriTemplate',16ContactSupportUri = 'ContactSupportUri',17}1819export const enum Flag {20None = 'None',21IncludeVersions = 'IncludeVersions',22IncludeFiles = 'IncludeFiles',23IncludeCategoryAndTags = 'IncludeCategoryAndTags',24IncludeSharedAccounts = 'IncludeSharedAccounts',25IncludeVersionProperties = 'IncludeVersionProperties',26ExcludeNonValidated = 'ExcludeNonValidated',27IncludeInstallationTargets = 'IncludeInstallationTargets',28IncludeAssetUri = 'IncludeAssetUri',29IncludeStatistics = 'IncludeStatistics',30IncludeLatestVersionOnly = 'IncludeLatestVersionOnly',31Unpublished = 'Unpublished',32IncludeNameConflictInfo = 'IncludeNameConflictInfo',33IncludeLatestPrereleaseAndStableVersionOnly = 'IncludeLatestPrereleaseAndStableVersionOnly',34}3536export type ExtensionGalleryManifestResource = {37readonly id: string;38readonly type: string;39};4041export type ExtensionQueryCapabilityValue = {42readonly name: string;43readonly value: number;44};4546export interface IExtensionGalleryManifest {47readonly version: string;48readonly resources: readonly ExtensionGalleryManifestResource[];49readonly capabilities: {50readonly extensionQuery: {51readonly filtering?: readonly ExtensionQueryCapabilityValue[];52readonly sorting?: readonly ExtensionQueryCapabilityValue[];53readonly flags?: readonly ExtensionQueryCapabilityValue[];54};55readonly signing?: {56readonly allPublicRepositorySigned: boolean;57readonly allPrivateRepositorySigned?: boolean;58};59readonly extensions?: {60readonly includePublicExtensions?: boolean;61readonly includePrivateExtensions?: boolean;62};63};64}6566export const enum ExtensionGalleryManifestStatus {67Available = 'available',68RequiresSignIn = 'requiresSignIn',69AccessDenied = 'accessDenied',70Unavailable = 'unavailable'71}7273export const IExtensionGalleryManifestService = createDecorator<IExtensionGalleryManifestService>('IExtensionGalleryManifestService');7475export interface IExtensionGalleryManifestService {76readonly _serviceBrand: undefined;7778readonly extensionGalleryManifestStatus: ExtensionGalleryManifestStatus;79readonly onDidChangeExtensionGalleryManifestStatus: Event<ExtensionGalleryManifestStatus>;80readonly onDidChangeExtensionGalleryManifest: Event<IExtensionGalleryManifest | null>;81getExtensionGalleryManifest(): Promise<IExtensionGalleryManifest | null>;82}8384export function getExtensionGalleryManifestResourceUri(manifest: IExtensionGalleryManifest, type: string): string | undefined {85const [name, version] = type.split('/');86for (const resource of manifest.resources) {87const [r, v] = resource.type.split('/');88if (r !== name) {89continue;90}91if (!version || v === version) {92return resource.id;93}94break;95}96return undefined;97}9899export const ExtensionGalleryServiceUrlConfigKey = 'extensions.gallery.serviceUrl';100101102