import type { TypedMapping } from '@aws-cdk/cloudformation-diff';
import type { SdkProvider } from '../aws-auth/private';
import type { CloudFormationStack } from './cloudformation';
import { ResourceLocation, ResourceMapping } from './cloudformation';
import { type ExcludeList } from './exclude';
import type { MappingGroup } from '../../actions';
export * from './exclude';
/**
 * Represents a set of possible movements of a resource from one location
 * to another. In the ideal case, there is only one source and only one
 * destination.
 */
export type ResourceMovement = [ResourceLocation[], ResourceLocation[]];
export declare class AmbiguityError extends Error {
    readonly movements: ResourceMovement[];
    constructor(movements: ResourceMovement[]);
    paths(): [string[], string[]][];
}
export declare function usePrescribedMappings(mappingGroups: MappingGroup[], sdkProvider: SdkProvider): Promise<ResourceMapping[]>;
export declare function resourceMovements(before: CloudFormationStack[], after: CloudFormationStack[]): ResourceMovement[];
export declare function ambiguousMovements(movements: ResourceMovement[]): ResourceMovement[];
/**
 * Converts a list of unambiguous resource movements into a list of resource mappings.
 *
 */
export declare function resourceMappings(movements: ResourceMovement[], stacks?: CloudFormationStack[]): ResourceMapping[];
/**
 * Compares the deployed state to the cloud assembly state, and finds all resources
 * that were moved from one location (stack + logical ID) to another. The comparison
 * is done per environment.
 */
export declare function findResourceMovements(stacks: CloudFormationStack[], sdkProvider: SdkProvider, exclude?: ExcludeList): Promise<ResourceMovement[]>;
export declare function formatTypedMappings(mappings: TypedMapping[]): string;
export declare function formatAmbiguousMappings(paths: [string[], string[]][]): string;
