UNPKG

fluxject

Version:

A strongly-typed dependency injection library.

14 lines (13 loc) 1.45 kB
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";