UNPKG

graphql-modules

Version:

Create reusable, maintainable, testable and extendable GraphQL modules

58 lines (57 loc) 2.31 kB
export declare const Type: FunctionConstructor; export declare class InjectionToken<T> { private readonly _desc; constructor(desc: string); toString(): string; } export declare function isToken(v: any): v is InjectionToken<any>; export declare function isType(v: any): v is Type<any>; export interface AbstractType<T> extends Function { prototype: T; } export interface Type<T> extends Function { new (...args: any[]): T; } export interface ValueProvider<T> extends BaseProvider<T> { useValue: T; } export interface ClassProvider<T> extends BaseProvider<T> { useClass: Type<T>; } export type Factory<T> = (...args: any[]) => T; export interface FactoryProvider<T> extends BaseProvider<T> { useFactory: Factory<T>; deps?: any[]; } export interface BaseProvider<T> extends ProviderOptions { provide: Type<T> | InjectionToken<T> | AbstractType<T>; } export interface TypeProvider<T> extends Type<T> { } export type Provider<T = any> = TypeProvider<T> | ValueProvider<T> | ClassProvider<T> | FactoryProvider<T>; type TokenValue<TToken> = TToken extends InjectionToken<infer TValue> | Type<infer TValue> | AbstractType<infer TValue> ? TValue : never; type ValidateValueProvider<TProvider> = TProvider extends { provide: infer TToken; useValue: infer TValue; } ? [TValue] extends [TokenValue<TToken>] ? TProvider : never : TProvider; export type ValidatedProviders<TProviders extends readonly Provider[]> = TProviders & { [TIndex in keyof TProviders]: ValidateValueProvider<TProviders[TIndex]>; }; /** * Preserves provider inference for separately declared provider arrays. */ export declare function defineProviders<const TProviders extends Provider[]>(providers: ValidatedProviders<TProviders>): TProviders; export interface ProviderOptions { scope?: Scope; executionContextIn?: Array<string | symbol>; global?: boolean; } export declare enum Scope { Singleton = 0, Operation = 1 } export declare function onlySingletonProviders(providers?: Provider[]): Provider[]; export declare function onlyOperationProviders(providers?: Provider[]): Provider[]; export declare function isClassProvider(provider: any): provider is ClassProvider<any>; export declare function isFactoryProvider(provider: any): provider is FactoryProvider<any>; export {};