import * as AWS from 'aws-sdk';
import { ISDK } from './aws-auth';
import { NestedStackNames } from './nested-stack-helpers';
export interface ListStackResources {
    listStackResources(): Promise<AWS.CloudFormation.StackResourceSummary[]>;
}
export declare class LazyListStackResources implements ListStackResources {
    private readonly sdk;
    private readonly stackName;
    private stackResources;
    constructor(sdk: ISDK, stackName: string);
    listStackResources(): Promise<AWS.CloudFormation.StackResourceSummary[]>;
    private getStackResources;
}
export interface LookupExport {
    lookupExport(name: string): Promise<AWS.CloudFormation.Export | undefined>;
}
export declare class LookupExportError extends Error {
}
export declare class LazyLookupExport implements LookupExport {
    private readonly sdk;
    private cachedExports;
    constructor(sdk: ISDK);
    lookupExport(name: string): Promise<AWS.CloudFormation.Export | undefined>;
    private listExports;
}
export declare class CfnEvaluationException extends Error {
}
export interface ResourceDefinition {
    readonly LogicalId: string;
    readonly Type: string;
    readonly Properties: {
        [p: string]: any;
    };
}
export interface EvaluateCloudFormationTemplateProps {
    readonly stackName: string;
    readonly template: Template;
    readonly parameters: {
        [parameterName: string]: string;
    };
    readonly account: string;
    readonly region: string;
    readonly partition: string;
    readonly urlSuffix: (region: string) => string;
    readonly sdk: ISDK;
    readonly nestedStackNames?: {
        [nestedStackLogicalId: string]: NestedStackNames;
    };
}
export declare class EvaluateCloudFormationTemplate {
    private readonly stackName;
    private readonly template;
    private readonly context;
    private readonly account;
    private readonly region;
    private readonly partition;
    private readonly urlSuffix;
    private readonly sdk;
    private readonly nestedStackNames;
    private readonly stackResources;
    private readonly lookupExport;
    private cachedUrlSuffix;
    constructor(props: EvaluateCloudFormationTemplateProps);
    createNestedEvaluateCloudFormationTemplate(stackName: string, nestedTemplate: Template, nestedStackParameters: {
        [parameterName: string]: any;
    }): Promise<EvaluateCloudFormationTemplate>;
    establishResourcePhysicalName(logicalId: string, physicalNameInCfnTemplate: any): Promise<string | undefined>;
    findPhysicalNameFor(logicalId: string): Promise<string | undefined>;
    findLogicalIdForPhysicalName(physicalName: string): Promise<string | undefined>;
    findReferencesTo(logicalId: string): Array<ResourceDefinition>;
    evaluateCfnExpression(cfnExpression: any): Promise<any>;
    private references;
    private parseIntrinsic;
    private findRefTarget;
    private findGetAttTarget;
    private findNestedStack;
    private formatResourceAttribute;
    private getServiceOfResource;
    private getResourceTypeArnPartOfResource;
}
export type Template = {
    [section: string]: {
        [headings: string]: any;
    };
};
