sussudio
Version:
An unofficial VS Code Internal API
60 lines (59 loc) • 2.69 kB
text/typescript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as descriptors from './descriptors';
import { ServiceCollection } from './serviceCollection';
export declare namespace _util {
const serviceIds: Map<string, ServiceIdentifier<any>>;
const DI_TARGET = "$di$target";
const DI_DEPENDENCIES = "$di$dependencies";
function getServiceDependencies(ctor: any): {
id: ServiceIdentifier<any>;
index: number;
}[];
}
export type BrandedService = {
_serviceBrand: undefined;
};
export interface IConstructorSignature<T, Args extends any[] = []> {
new <Services extends BrandedService[]>(...args: [...Args, ...Services]): T;
}
export interface ServicesAccessor {
get<T>(id: ServiceIdentifier<T>): T;
}
export declare const IInstantiationService: ServiceIdentifier<IInstantiationService>;
/**
* Given a list of arguments as a tuple, attempt to extract the leading, non-service arguments
* to their own tuple.
*/
export type GetLeadingNonServiceArgs<Args> = Args extends [...BrandedService[]] ? [] : Args extends [infer A, ...BrandedService[]] ? [A] : Args extends [infer A, ...infer R] ? [A, ...GetLeadingNonServiceArgs<R>] : never;
export interface IInstantiationService {
readonly _serviceBrand: undefined;
/**
* Synchronously creates an instance that is denoted by the descriptor
*/
createInstance<T>(descriptor: descriptors.SyncDescriptor0<T>): T;
createInstance<Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(ctor: Ctor, ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>): R;
/**
* Calls a function with a service accessor.
*/
invokeFunction<R, TS extends any[] = []>(fn: (accessor: ServicesAccessor, ...args: TS) => R, ...args: TS): R;
/**
* Creates a child of this service which inherits all current services
* and adds/overwrites the given services.
*/
createChild(services: ServiceCollection): IInstantiationService;
}
/**
* Identifies a service of type `T`.
*/
export interface ServiceIdentifier<T> {
(...args: any[]): void;
type: T;
}
/**
* The *only* valid way to create a {{ServiceIdentifier}}.
*/
export declare function createDecorator<T>(serviceId: string): ServiceIdentifier<T>;
export declare function refineServiceDecorator<T1, T extends T1>(serviceIdentifier: ServiceIdentifier<T1>): ServiceIdentifier<T>;