import { KosSingletonModelClassRegistration, SingletonFactory } from '../types';
import { IKosDataModel, KosCreationContext } from './kosModel';
type Reg<T extends IKosDataModel, O extends object = Record<string, any>> = KosSingletonModelClassRegistration<T, O> & {
    factory: SingletonFactory<T, O>;
};
interface Singleton<T extends IKosDataModel, O extends object = Record<string, any>> {
    [k: string]: Reg<T, O>;
}
interface RegistrationProps<T extends IKosDataModel, O extends object = Record<string, any>> {
    type: string;
    model: new (modelId: string, options: O, context: KosCreationContext) => T;
    childRegistration?: any;
}
export declare class KosSingletonRegistration<T extends IKosDataModel, O extends object = Record<string, any>> {
    type: string;
    model: new (modelId: string, options: O, context: KosCreationContext) => T;
    childRegistration?: any;
    constructor({ type, model, childRegistration }: RegistrationProps<T, O>);
    get factory(): (options?: O | undefined, parentId?: string) => T;
    get registration(): Singleton<T, O>;
    get predicate(): (model: any) => model is T;
}
export {};
//# sourceMappingURL=kos-singleton-registration.d.ts.map