import type { AnyEntity, EntityMetadata } from '../typings.js';
/** @internal Stores managed entity instances keyed by their primary key hash, ensuring each row is loaded once. */
export declare class IdentityMap {
    #private;
    constructor(defaultSchema?: string);
    /** Stores an entity in the identity map under its primary key hash. */
    store<T>(item: T): void;
    /**
     * Stores an entity under an alternate key (non-PK property).
     * This allows looking up entities by unique properties that are not the primary key.
     */
    storeByKey<T>(item: T, key: string, value: string, schema?: string): void;
    /** Removes an entity and its alternate key entries from the identity map. */
    delete<T>(item: T): void;
    /** Retrieves an entity by its hash key from the identity map. */
    getByHash<T>(meta: EntityMetadata<T>, hash: string): T | undefined;
    /** Returns (or creates) the per-entity-class store within the identity map. */
    getStore<T>(meta: EntityMetadata<T>): Map<string, T>;
    clear(): void;
    /** Returns all entities currently in the identity map. */
    values(): AnyEntity[];
    [Symbol.iterator](): IterableIterator<AnyEntity>;
    /** Returns all hash keys currently in the identity map. */
    keys(): string[];
    /**
     * For back compatibility only.
     */
    get<T>(hash: string): T | undefined;
    private getPkHash;
    /**
     * Creates a hash for an alternate key lookup.
     * Format: `[key]value` or `schema:[key]value`
     */
    getKeyHash(key: string, value: string, schema?: string): string;
}
