import { type Dictionary, EntityMetadata, type EntityName } from '../typings.js';
import type { EntityManager } from '../EntityManager.js';
/** Registry that stores and provides access to entity metadata by class, name, or id. */
export declare class MetadataStorage {
    #private;
    static readonly PATH_SYMBOL: unique symbol;
    constructor(metadata?: Dictionary<EntityMetadata>);
    /** Returns the global metadata dictionary, or a specific entry by entity name and path. */
    static getMetadata(): Dictionary<EntityMetadata>;
    static getMetadata<T = any>(entity: string, path: string): EntityMetadata<T>;
    /** Checks whether an entity with the given class name exists in the global metadata. */
    static isKnownEntity(name: string): boolean;
    /** Clears all entries from the global metadata registry. */
    static clear(): void;
    /** Returns the map of all registered entity metadata. */
    getAll(): Map<EntityName, EntityMetadata>;
    /** Returns metadata for the given entity, optionally initializing it if not found. */
    get<T = any>(entityName: EntityName<T>, init?: boolean): EntityMetadata<T>;
    /** Finds metadata for the given entity, returning undefined if not registered. */
    find<T = any>(entityName: EntityName<T>): EntityMetadata<T> | undefined;
    /** Checks whether metadata exists for the given entity. */
    has<T>(entityName: EntityName<T>): boolean;
    /** Registers metadata for the given entity. */
    set<T>(entityName: EntityName<T>, meta: EntityMetadata): EntityMetadata;
    /** Removes metadata for the given entity from all internal maps. */
    reset<T>(entityName: EntityName<T>): void;
    /** Decorates all entity prototypes with helper methods (e.g. init, toJSON). */
    decorate(em: EntityManager): void;
    [Symbol.iterator](): IterableIterator<EntityMetadata>;
    /** Returns metadata by its internal numeric id. */
    getById<T>(id: number): EntityMetadata<T>;
    /** Returns metadata by class name, optionally throwing if not found. */
    getByClassName<T = any, V extends boolean = true>(className: string, validate?: V): V extends true ? EntityMetadata<T> : EntityMetadata<T> | undefined;
    /** Returns metadata by unique name, optionally throwing if not found. */
    getByUniqueName<T = any, V extends boolean = true>(uniqueName: string, validate?: V): V extends true ? EntityMetadata<T> : EntityMetadata<T> | undefined;
    private validate;
}
