fluxject
Version:
A strongly-typed dependency injection library.
14 lines (13 loc) • 1.45 kB
TypeScript
declare const _default: {};
export default _default;
export type Instantiator<T> = ((...args: any) => T) | (new (...args: any) => T);
export type Registration<TInstanceType, TLifetime extends "scoped" | "transient" | "singleton"> = {
lifetime: TLifetime;
factory: Instantiator<TInstanceType>;
};
export type Widen<T> = T extends infer U ? { [K in keyof U]: U[K]; } : never;
export type Resolved<TInstantiator> = TInstantiator extends (new (...args: any) => any) ? InstanceType<TInstantiator> : TInstantiator extends ((...args: any) => any) ? ReturnType<TInstantiator> : never;
export type InferInstanceTypes<TRegistrations extends Record<string, Registration<any, any>>, TLifetime extends "scoped" | "transient" | "singleton" = "scoped" | "singleton" | "transient"> = { [K in keyof TRegistrations as TRegistrations[K] extends Registration<any, TLifetime> ? K : never]: TRegistrations[K] extends Registration<infer TInstantiator, any> ? Resolved<TInstantiator> : never; };
export type InferRegistrationsFromContainer<TContainer extends Container<any>> = TContainer extends Container<infer TRegistrations> ? TRegistrations : never;
export type InferUnionOfInstanceTypes<TRegistrations extends Record<string, Registration<any, any>>, TLifetime extends "scoped" | "transient" | "singleton"> = InferInstanceTypes<TRegistrations, TLifetime>[keyof InferInstanceTypes<TRegistrations, TLifetime>];
import type { Container } from "./container.js";