import { CoreModel, CoreModelDefinition } from "../models/coremodel.js";
import { Service } from "../services/service.js";
export interface Mapper {
    modelAttribute: string;
    model: CoreModelDefinition<CoreModel>;
    attributes: string[];
    attribute: string;
}
interface ModelMapperInfo {
    modelAttribute: string;
    model: CoreModelDefinition<CoreModel>;
    attributes: string[];
    attribute: string;
    type: "LINK" | "LINKS_MAP" | "LINKS_ARRAY" | "LINKS_SIMPLE_ARRAY";
}
/**
 * Mapper service
 *
 * Ensure each ModelMapped properties is in-sync with their respective model
 */
export declare class ModelMapper extends Service {
    mappers: {
        [key: string]: ModelMapperInfo[];
    };
    resolve(): this;
    /**
     * Get uuids from a ModelLinker
     * @param object
     * @param mapper
     * @returns
     */
    getUuidsFromMapper(object: CoreModel, mapper: ModelMapperInfo): any[];
    /**
     * Handle event
     * @param modelName
     * @param evt
     * @param type
     * @returns
     */
    handleEvent(modelName: string, evt: any, type: "Store.Saved" | "Store.Deleted" | "Store.Updated" | "Store.PatchUpdated" | "Store.PartialUpdated"): Promise<any[]>;
    /**
     * Handle partial event to update a mapper
     *
     * @param modelName
     * @param evt
     * @param type
     * @returns
     */
    handlePartialEvent(modelName: string, evt: any, type: "Store.Saved" | "Store.Deleted" | "Store.Updated" | "Store.PatchUpdated" | "Store.PartialUpdated"): Promise<any[]>;
    /**
     * Get a mapped object based on Mapper
     *
     * Copy attributes that are supposed to be copied
     *
     * @param model
     * @param mapper
     * @returns
     */
    getMapped(model: any, mapper: Mapper): any;
}
export {};
