UNPKG

@sussudio/platform

Version:

Internal APIs for VS Code's service injection the base services.

63 lines (62 loc) 2.49 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { coalesce } from '@sussudio/base/common/arrays.mjs'; import { toDisposable } from '@sussudio/base/common/lifecycle.mjs'; import { Registry } from '../../registry/common/platform.mjs'; export var DefaultQuickAccessFilterValue; (function (DefaultQuickAccessFilterValue) { /** * Keep the value as it is given to quick access. */ DefaultQuickAccessFilterValue[(DefaultQuickAccessFilterValue['PRESERVE'] = 0)] = 'PRESERVE'; /** * Use the value that was used last time something was accepted from the picker. */ DefaultQuickAccessFilterValue[(DefaultQuickAccessFilterValue['LAST'] = 1)] = 'LAST'; })(DefaultQuickAccessFilterValue || (DefaultQuickAccessFilterValue = {})); export const Extensions = { Quickaccess: 'workbench.contributions.quickaccess', }; export class QuickAccessRegistry { providers = []; defaultProvider = undefined; registerQuickAccessProvider(provider) { // Extract the default provider when no prefix is present if (provider.prefix.length === 0) { this.defaultProvider = provider; } else { this.providers.push(provider); } // sort the providers by decreasing prefix length, such that longer // prefixes take priority: 'ext' vs 'ext install' - the latter should win this.providers.sort((providerA, providerB) => providerB.prefix.length - providerA.prefix.length); return toDisposable(() => { this.providers.splice(this.providers.indexOf(provider), 1); if (this.defaultProvider === provider) { this.defaultProvider = undefined; } }); } getQuickAccessProviders() { return coalesce([this.defaultProvider, ...this.providers]); } getQuickAccessProvider(prefix) { const result = prefix ? this.providers.find((provider) => prefix.startsWith(provider.prefix)) || undefined : undefined; return result || this.defaultProvider; } clear() { const providers = [...this.providers]; const defaultProvider = this.defaultProvider; this.providers = []; this.defaultProvider = undefined; return () => { this.providers = providers; this.defaultProvider = defaultProvider; }; } } Registry.add(Extensions.Quickaccess, new QuickAccessRegistry());