UNPKG

@triviality/core

Version:
18 lines (17 loc) 1.77 kB
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;