UNPKG

@tdi2/di-core

Version:

TypeScript Dependency Injection 2 - Core DI framework

48 lines (44 loc) 1.81 kB
import * as react_jsx_runtime from 'react/jsx-runtime'; import { ReactNode } from 'react'; type Constructor<T = object> = new (...args: any[]) => T; interface DIContainer { register<T>(token: string | symbol, implementation: Constructor<T>, scope?: "singleton" | "transient" | "scoped"): void; resolve<T>(token: string | symbol): T; has(token: string | symbol): boolean; createScope(): DIContainer; registerByInterface<T>(interfaceName: string, implementation: () => T, scope?: "singleton" | "transient" | "scoped"): void; resolveByInterface<T>(interfaceName: string): T; hasInterface(interfaceName: string): boolean; } interface DIProviderProps { container?: DIContainer; children: ReactNode; } declare function DIProvider({ container, children }: DIProviderProps): react_jsx_runtime.JSX.Element; declare function useDI(): DIContainer; /** * Hook to resolve a service from the DI container */ declare function useService(token: string | symbol): () => never; /** * Hook to optionally resolve a service from the DI container * Returns undefined if the service is not registered */ declare function useOptionalService<T>(token: string | symbol): T | undefined; /** * Hook to resolve multiple services at once * Useful for functional components with many dependencies */ declare function useServices<T extends Record<string, any>>(serviceMap: { [K in keyof T]: string | symbol; }): T; /** * Hook for functional DI pattern * This would be generated by the transformer for functions with marker interfaces */ declare function useFunctionalDI<T extends Record<string, any>>(dependencies: Array<{ key: keyof T; token: string | symbol; optional?: boolean; }>): T; export { DIProvider, useDI, useFunctionalDI, useOptionalService, useService, useServices };