import type { ChainMetadata } from '@hyperlane-xyz/sdk/metadata/chainMetadataTypes';
import { type NormalizedScale, type ScaleInput } from '@hyperlane-xyz/sdk/utils/decimals';
/**
 * Returns the SDK's canonical {numerator, denominator} bigint form, or null
 * when scale is absent. The null distinguishes "scale not set" from "scale set
 * to identity {1,1}", which the SDK's normalizeScale collapses together.
 */
export declare function normalizeScale(scale: ScaleInput | null | undefined): NormalizedScale | null;
export declare function toYamlString(data: any, prefix?: string): string;
export declare function stripLeadingSlash(path: string): string;
export declare function concurrentMap<A, B>(concurrency: number, xs: A[], mapFn: (val: A, idx: number) => Promise<B>): Promise<B[]>;
export declare function isObject(item: any): any;
export declare function objMerge(a: Record<string, any>, b: Record<string, any>, max_depth?: number): any;
export declare function isAbacusWorksChain(metadata: ChainMetadata): boolean;
export declare function parseGitHubPath(uri: string): {
    repoOwner: string;
    repoName: string;
    repoBranch: string | undefined;
};
