import { Context, Event, IndexTypes, RemoteQueryFunction, Subscriber } from "@medusajs/framework/types";
import { MikroOrmBaseRepository as BaseRepository, ContainerRegistrationKeys } from "@medusajs/framework/utils";
import { EntityManager, SqlEntityManager } from "@medusajs/framework/mikro-orm/postgresql";
type InjectedDependencies = {
    manager: EntityManager;
    [ContainerRegistrationKeys.QUERY]: RemoteQueryFunction;
    baseRepository: BaseRepository;
};
export declare class PostgresProvider implements IndexTypes.StorageProvider {
    #private;
    protected readonly eventActionToMethodMap_: {
        created: string;
        updated: string;
        deleted: string;
        attached: string;
        detached: string;
    };
    protected container_: InjectedDependencies;
    protected readonly schemaObjectRepresentation_: IndexTypes.SchemaObjectRepresentation;
    protected readonly schemaEntitiesMap_: Record<string, any>;
    protected readonly moduleOptions_: IndexTypes.IndexModuleOptions;
    protected readonly manager_: SqlEntityManager;
    protected readonly query_: RemoteQueryFunction;
    protected baseRepository_: BaseRepository;
    constructor(container: InjectedDependencies, options: {
        schemaObjectRepresentation: IndexTypes.SchemaObjectRepresentation;
        entityMap: Record<string, any>;
    }, moduleOptions: IndexTypes.IndexModuleOptions);
    onApplicationStart(): Promise<void>;
    protected static parseData<TData extends {
        id: string;
        [key: string]: unknown;
    }>(data: TData | TData[], schemaEntityObjectRepresentation: IndexTypes.SchemaObjectEntityRepresentation): {
        data: TData[];
        entityProperties: string[];
        parentsProperties: {
            [entity: string]: string[];
        };
    };
    protected static parseMessageData<TData extends {
        id: string | string[];
    }>(message?: Event): {
        action: string;
        data: TData[];
        ids: string[];
    } | void;
    consumeEvent(schemaEntityObjectRepresentation: IndexTypes.SchemaObjectEntityRepresentation): Subscriber<{
        id: string | string[];
    }>;
    query<const TEntry extends string>(config: IndexTypes.IndexQueryConfig<TEntry>, sharedContext?: Context): Promise<IndexTypes.QueryResultSet<TEntry>>;
    /**
     * Create the index entry and the index relation entry when this event is emitted.
     * @param entity
     * @param data
     * @param schemaEntityObjectRepresentation
     * @param sharedContext
     * @protected
     */
    onCreate<TData extends {
        id: string;
        [key: string]: unknown;
    }>({ entity, data, schemaEntityObjectRepresentation, }: {
        entity: string;
        data: TData | TData[];
        schemaEntityObjectRepresentation: IndexTypes.SchemaObjectEntityRepresentation;
    }, sharedContext?: Context<SqlEntityManager>): Promise<void>;
    /**
     * Update the index entry when this event is emitted.
     * @param entity
     * @param data
     * @param schemaEntityObjectRepresentation
     * @param sharedContext
     * @protected
     */
    onUpdate<TData extends {
        id: string;
        [key: string]: unknown;
    }>({ entity, data, schemaEntityObjectRepresentation, }: {
        entity: string;
        data: TData | TData[];
        schemaEntityObjectRepresentation: IndexTypes.SchemaObjectEntityRepresentation;
    }, sharedContext?: Context<SqlEntityManager>): Promise<void>;
    /**
     * Delete the index entry when this event is emitted.
     * @param entity
     * @param data
     * @param schemaEntityObjectRepresentation
     * @param sharedContext
     * @protected
     */
    onDelete<TData extends {
        id: string;
        [key: string]: unknown;
    }>({ entity, data, schemaEntityObjectRepresentation, }: {
        entity: string;
        data: TData | TData[];
        schemaEntityObjectRepresentation: IndexTypes.SchemaObjectEntityRepresentation;
    }, sharedContext?: Context<SqlEntityManager>): Promise<void>;
    /**
     * event emitted from the link modules to attach a link entity to its parent and child entities from the linked modules.
     * @param entity
     * @param data
     * @param schemaEntityObjectRepresentation
     * @protected
     */
    onAttach<TData extends {
        id: string;
        [key: string]: unknown;
    }>({ entity, data, schemaEntityObjectRepresentation, }: {
        entity: string;
        data: TData | TData[];
        schemaEntityObjectRepresentation: IndexTypes.SchemaObjectEntityRepresentation;
    }, sharedContext?: Context<SqlEntityManager>): Promise<void>;
    /**
     * Event emitted from the link modules to detach a link entity from its parent and child entities from the linked modules.
     * @param entity
     * @param data
     * @param schemaEntityObjectRepresentation
     * @param sharedContext
     * @protected
     */
    onDetach<TData extends {
        id: string;
        [key: string]: unknown;
    }>({ entity, data, schemaEntityObjectRepresentation, }: {
        entity: string;
        data: TData | TData[];
        schemaEntityObjectRepresentation: IndexTypes.SchemaObjectEntityRepresentation;
    }, sharedContext?: Context<SqlEntityManager>): Promise<void>;
}
export {};
//# sourceMappingURL=postgres-provider.d.ts.map