@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
63 lines (62 loc) • 2.49 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* 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());