cider-di
Version:
Minimal Dependency Injection Framework for javascript
42 lines (41 loc) • 1.4 kB
TypeScript
export interface Mapping {
[name: string]: any;
}
export interface Binding<T extends Mapping, R> {
(dependencies: Dependencies<T>, providers: Providers<T>, context: Context): R;
tags?: string[];
}
export interface Provider<R> {
(): R;
tags: string[];
}
export declare type Module<T extends Mapping> = {
[P in keyof T]: Binding<T, T[P]>;
};
export interface Context {
[key: string]: any;
}
export declare type Dependencies<T extends Mapping> = {
[P in keyof T]: T[P];
};
export declare type Providers<T extends Mapping> = {
[P in keyof T]: Provider<T[P]>;
};
export interface Injector<T extends Mapping> {
dependencies: Dependencies<T>;
providers: Providers<T>;
context: Context;
}
export declare function createInjector<T extends Mapping>(mod: Module<T>): Injector<T>;
export declare function singleton<T extends Mapping, R>(binding: Binding<T, R>): Binding<T, R>;
export declare function instance<V>(v: V): Binding<Mapping, V>;
export declare function tagged<T extends Mapping, R>(tags: string[], binding: Binding<T, R>): Binding<T, R>;
export declare function alias<T extends Mapping, K extends keyof T>(name: K): Binding<T, T[K]>;
declare const _default: {
createInjector: typeof createInjector;
singleton: typeof singleton;
instance: typeof instance;
tagged: typeof tagged;
alias: typeof alias;
};
export default _default;