UNPKG

awilix-manager

Version:

Wrapper over awilix to support more complex use-cases, such as async init and eager injection

52 lines (51 loc) 2.51 kB
import { type AwilixContainer, type BuildResolver, type BuildResolverOptions, type DisposableResolver } from 'awilix'; import type { FunctionReturning } from 'awilix/lib/container'; import type { Resolver } from 'awilix/lib/resolvers'; type AsyncInitFunction<T> = <U extends T>(instance: U, diContainer: AwilixContainer<any>) => Promise<unknown>; type AsyncInitMethod<T> = boolean | string | AsyncInitFunction<T>; type AsyncInitConfig<T> = { method?: AsyncInitMethod<T>; nonBlocking?: boolean; }; declare module 'awilix' { interface ResolverOptions<T> { asyncInit?: AsyncInitMethod<T> | AsyncInitConfig<T>; asyncInitPriority?: number; asyncDispose?: boolean | string | (<U extends T>(instance: U) => Promise<unknown>); asyncDisposePriority?: number; eagerInject?: boolean | string; tags?: string[]; enabled?: boolean; } } export type Logger = (message: string) => void; export type AwilixManagerConfig = { diContainer: AwilixContainer; asyncInit?: boolean; asyncDispose?: boolean; eagerInject?: boolean; strictBooleanEnforced?: boolean; enableDebugLogging?: boolean; loggerFn?: Logger; }; export declare function asMockClass<T = object>(Type: unknown, opts?: BuildResolverOptions<T>): BuildResolver<T> & DisposableResolver<T>; export declare function asMockValue<T = object>(value: unknown): Resolver<T>; export declare function asMockFunction<T = object>(fn: FunctionReturning<unknown>, opts?: BuildResolverOptions<T>): BuildResolver<T> & DisposableResolver<T>; export declare class AwilixManager { readonly config: AwilixManagerConfig; constructor(config: AwilixManagerConfig); executeInit(): Promise<void>; executeDispose(): Promise<void>; getWithTags(tags: string[]): Record<string, any>; getByPredicate(predicate: (entity: any) => boolean): Record<string, any>; } export type AsyncInitOptions = { enableDebugLogging?: boolean; loggerFn?: Logger; }; export declare function asyncInit(diContainer: AwilixContainer, options?: AsyncInitOptions): Promise<void>; export declare function eagerInject(diContainer: AwilixContainer<any>): void; export declare function getWithTags(diContainer: AwilixContainer<any>, tags: string[]): Record<string, any>; export declare function getByPredicate(diContainer: AwilixContainer<any>, predicate: (entity: any) => boolean): Record<string, any>; export declare function asyncDispose(diContainer: AwilixContainer<any>): Promise<void>; export {};