UNPKG

containor

Version:

Simple DI container for Javascript with Typescript support

36 lines (35 loc) 1.44 kB
import { RawArgument } from "./raw"; import { Token } from "./token"; import { Container } from "./container"; export declare type Argument<T = unknown> = Token<T> | RawArgument<T>; export declare type Constructor<T = unknown> = new (...args: any[]) => T; export declare type Func<T = unknown> = (...args: any[]) => T; export declare type Creator<T = unknown> = Constructor<T> | Func<T>; export declare type Creates<T extends Creator> = T extends Constructor ? InstanceType<T> : T extends Func ? ReturnType<T> : never; export declare type CreatorParameters<T extends Creator> = T extends Constructor ? ConstructorParameters<T> : T extends Func ? Parameters<T> : never; export declare type Arguments<T extends Creator> = ToArguments<CreatorParameters<T>>; export declare type ToArguments<T extends unknown[]> = { [K in keyof T]: Argument<T[K]>; }; export declare type Request = { token: Token; callback: () => void; }; export declare type Dependency<T = unknown> = { token: Token<T>; creator: Creator<T>; args: Argument[]; shared: boolean; instance?: any; }; export declare type ProviderCallback = (container: Container) => void; export declare type Provider = { tokens: Token[]; called?: boolean; callback: () => void; }; export declare type GetCallback<T> = (instance: T) => void; export interface Module { provides: Token[]; register: ProviderCallback; }