import type { ChainMetadata } from '@hyperlane-xyz/sdk/metadata/chainMetadataTypes';
import type { WarpRouteDeployConfig } from '@hyperlane-xyz/sdk/token/types';
import type { ChainMap, ChainName } from '@hyperlane-xyz/sdk/types';
import type { WarpCoreConfig } from '@hyperlane-xyz/sdk/warp/types';
import type { Logger } from 'pino';
import { AddWarpRouteConfigOptions, ChainAddresses, DeepPartial, WarpRouteId } from '../types.js';
import { IRegistry, RegistryContent, RegistryType } from './IRegistry.js';
import { SynchronousRegistry } from './SynchronousRegistry.js';
/**
 * A registry that accepts partial data, such as incomplete chain metadata or addresses.
 * Useful for merging with other registries force overrides of subsets of data.
 */
export interface PartialRegistryOptions {
    chainMetadata?: ChainMap<DeepPartial<ChainMetadata>>;
    chainAddresses?: ChainMap<DeepPartial<ChainAddresses>>;
    warpRoutes?: Array<DeepPartial<WarpCoreConfig>>;
    warpDeployConfigs?: Array<DeepPartial<WarpRouteDeployConfig>>;
    logger?: Logger;
}
export declare class PartialRegistry extends SynchronousRegistry implements IRegistry {
    readonly type = RegistryType.Partial;
    chainMetadata: ChainMap<DeepPartial<ChainMetadata>>;
    chainAddresses: ChainMap<DeepPartial<ChainAddresses>>;
    warpRoutes: Array<DeepPartial<WarpCoreConfig>>;
    warpDeployConfigs: Array<DeepPartial<WarpRouteDeployConfig>>;
    constructor({ chainMetadata, chainAddresses, warpRoutes, warpDeployConfigs, logger, }: PartialRegistryOptions);
    listRegistryContent(): RegistryContent;
    getMetadata(): ChainMap<ChainMetadata>;
    getAddresses(): ChainMap<ChainAddresses>;
    removeChain(chainName: ChainName): void;
    addWarpRoute(_config: WarpCoreConfig): void;
    addWarpRouteConfig(_config: WarpRouteDeployConfig, _options: AddWarpRouteConfigOptions): void;
    protected getWarpRoutesForIds(ids: WarpRouteId[]): WarpCoreConfig[];
    protected getWarpDeployConfigForIds(_ids: WarpRouteId[]): WarpRouteDeployConfig[];
    protected createOrUpdateChain(chain: {
        chainName: ChainName;
        metadata?: ChainMetadata;
        addresses?: ChainAddresses;
    }): void;
}
