containor
Version:
Simple DI container for Javascript with Typescript support
36 lines (35 loc) • 1.44 kB
TypeScript
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;
}