import type { EntityMetadata } from '../typings.js';
import type { Logger } from '../logging/Logger.js';
import type { SyncCacheAdapter } from '../cache/CacheAdapter.js';
import type { Platform } from '../platforms/Platform.js';
export interface IConfiguration {
  get(key: string, defaultValue?: any): any;
  getLogger(): Logger;
  getMetadataCacheAdapter(): SyncCacheAdapter;
  getPlatform(): Platform;
}
/** Base metadata provider that resolves entity type information and manages metadata caching. */
export declare class MetadataProvider {
  protected readonly config: IConfiguration;
  constructor(config: IConfiguration);
  /** Resolves entity references and type information for all properties in the given metadata. */
  loadEntityMetadata(meta: EntityMetadata): void;
  /** Merges cached metadata into the given entity metadata, preserving function expressions. */
  loadFromCache(meta: EntityMetadata, cache: EntityMetadata): void;
  /** Whether this provider class uses metadata caching by default. */
  static useCache(): boolean;
  /** Whether metadata caching is enabled for this instance. */
  useCache(): boolean;
  saveToCache(meta: EntityMetadata): void;
  /** Attempts to load metadata from cache, returning undefined if not available. */
  getCachedMetadata<T>(
    meta: Pick<EntityMetadata<T>, 'className' | 'path' | 'root'>,
    root: EntityMetadata<T>,
  ): EntityMetadata<T> | undefined;
  /** Combines individual metadata cache entries into a single file. */
  combineCache(): void;
  /** Returns the cache key for the given entity metadata. */
  getCacheKey(meta: Pick<EntityMetadata, 'className' | 'path'>): string;
}
