@triviality/core
Version:
Purely typed service container
18 lines (17 loc) • 1.77 kB
TypeScript
import { ServiceFactoryByTag, ServiceKeysOfType, SF } from '../../ServiceFactory';
import { ImmutableRegistryMap, REGISTER_MAP_ARGUMENTS } from './ImmutableRegistryMap';
import { ServiceFunctionReferenceContainerInterface } from '../../Container/ServiceFunctionReferenceContainerInterface';
export declare type RegisterMapArgument<Services, TType, TKey> = [TKey, ServiceKeysOfType<Services, TType> | SF<TType>] | (TKey extends string | symbol | number ? Record<TKey, SF<TType> | ServiceKeysOfType<Services, TType>> : never);
export declare type RegisterMapArguments<Services, TType, TKey> = RegisterMapArgument<Services, TType, TKey>[];
export interface RegistryMapContext<Services> {
registerMap<TType, TKey = string>(...items: RegisterMapArguments<Services, TType, TKey>): SF<ImmutableRegistryMap<TType, TKey>>;
}
export declare const createFeatureFactoryRegistryMapContext: <Services>(container: ServiceFunctionReferenceContainerInterface<any>) => RegistryMapContext<Services>;
export declare type registerWithMapArguments<Services, TType, TKey> = (...items: RegisterMapArguments<Services, TType, TKey>) => {};
export declare type InferMapArgumentsRegisters<T> = {
[K in keyof T]: T[K] extends {
[REGISTER_MAP_ARGUMENTS]: [infer TType, infer TKey];
} ? registerWithMapArguments<T, TType, TKey> : unknown;
};
export declare const registerMap: <Services>(getService: ServiceFactoryByTag<any>) => <TType, TKey>(...args: RegisterMapArguments<Services, TType, TKey>) => import("../../ServiceFactory").ServiceFactory<ImmutableRegistryMap<TType, TKey>>;
export declare const registerToMap: <Services, TType, TKey>(container: ServiceFunctionReferenceContainerInterface<any>, registry: string, ...items: RegisterMapArguments<Services, TType, TKey>) => void;