import { DependencyLifecycle, KosDependencyParams } from '../types/kos-dependency';
import { IKosDataModel, IKosModel } from '../core/kosModel';
import { IKosModelContainer } from '../core/kos-container-model';

export interface ModelPromise {
    promise?: Promise<void>;
    modelId?: string;
    model?: IKosModel;
    type?: string;
    status?: string;
}
export type ModelPromiseResolver = (model: IKosModel) => Promise<void>;
export declare const transitionToActive: (model: IKosModel) => Promise<void>;
export declare const transitionToReady: (model: IKosModel) => Promise<void>;
export declare const transitionToLoad: (model: IKosModel) => Promise<void>;
export declare const transitionToUnload: (model: IKosModel) => Promise<void>;
export declare const transitionToInit: (model: IKosModel) => Promise<void>;
export declare enum Transitions {
    ACTIVE = "active",
    READY = "ready",
    LOAD = "load",
    UNLOAD = "unload",
    INIT = "init"
}
export declare const TransitionMap: {
    active: (model: IKosModel) => Promise<void>;
    ready: (model: IKosModel) => Promise<void>;
    load: (model: IKosModel) => Promise<void>;
    init: (model: IKosModel) => Promise<void>;
};
export declare const createModelDependency: (model: IKosModel, dependency: KosDependencyParams<any>) => {
    dependentModel: import('../core/types/kos-model-manager-types').IKosCreateInstanceResponse<IKosDataModel>;
    dataModelId: string;
};
export declare const getDependenciesByLifecycle: (model: IKosModel, lifecycle?: DependencyLifecycle) => Promise<void>[];
export declare const executeListLifecycle: (sourceModel: IKosModel, models: (IKosModel | undefined)[], target: Transitions, sourceLifecycle: DependencyLifecycle) => Promise<void>;
export declare const executeChildrenModelLifecycle: (model: IKosModel, target: Transitions, sourceLifecycle: DependencyLifecycle) => Promise<void>;
export declare const executeDependentModelLifecycle: (model: IKosModel, lifecycle: DependencyLifecycle) => Promise<void>;
export declare const isPrintable: (model: any) => model is {
    toJSON: () => object;
};
export declare const isKosDataModel: (model: any) => model is IKosDataModel;
export declare const isKosModelContainer: (model: any) => model is IKosModelContainer<any>;
export declare const resolveChild: (attribute: any) => any[] | IKosDataModel | undefined;
//# sourceMappingURL=model-utils.d.ts.map