import type { CloudFormationStackArtifact } from '@aws-cdk/cloud-assembly-api';
import type { Export, StackResourceSummary } from '@aws-sdk/client-cloudformation';
import type { NestedStackTemplates } from './nested-stack-helpers';
import type { Template } from './stack-helpers';
import type { SDK } from '../aws-auth/private';
import type { ResourceMetadata } from '../resource-metadata';
export interface ListStackResources {
    listStackResources(): Promise<StackResourceSummary[]>;
}
export declare class LazyListStackResources implements ListStackResources {
    private readonly sdk;
    private readonly stackName;
    private stackResources;
    constructor(sdk: SDK, stackName: string);
    listStackResources(): Promise<StackResourceSummary[]>;
}
export interface LookupExport {
    lookupExport(name: string): Promise<Export | undefined>;
}
export declare class LookupExportError extends Error {
}
export declare class LazyLookupExport implements LookupExport {
    private readonly sdk;
    private cachedExports;
    constructor(sdk: SDK);
    lookupExport(name: string): Promise<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 stackArtifact: CloudFormationStackArtifact;
    readonly stackName?: string;
    readonly template?: Template;
    readonly parameters: {
        [parameterName: string]: string;
    };
    readonly account: string;
    readonly region: string;
    readonly partition: string;
    readonly sdk: SDK;
    readonly nestedStacks?: {
        [nestedStackLogicalId: string]: NestedStackTemplates;
    };
}
export declare class EvaluateCloudFormationTemplate {
    readonly stackArtifact: CloudFormationStackArtifact;
    private readonly stackName;
    private readonly template;
    private readonly context;
    private readonly account;
    private readonly region;
    private readonly partition;
    private readonly sdk;
    private readonly nestedStacks;
    private readonly stackResources;
    private readonly lookupExport;
    private cachedUrlSuffix;
    private _cloudControl;
    constructor(props: EvaluateCloudFormationTemplateProps);
    private get cloudControl();
    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>;
    /**
     * Best-effort attempt to construct the Cloud Control API primary identifier for a resource.
     *
     * Cloud Control compound identifiers are pipe-delimited, ordered by the `primaryIdentifier`
     * array in the resource type schema (e.g. `DatabaseName|TableName` for `AWS::Glue::Table`).
     *
     * CloudFormation's `PhysicalResourceId` (the `physicalId` parameter here) is the `Ref` return
     * value for the resource, which is resource-type-specific and may not correspond to the Cloud
     * Control Primary Identifier.
     *
     * For properties present in the template, we resolve them directly. For properties NOT in the
     * template (e.g. service-generated read-only values), we fall back to `physicalId`. This is
     * only correct when:
     *
     * - Exactly one property in the identifier is missing from the template, AND
     * - That property happens to be the one that `Ref` returns for this resource type.
     *
     * If multiple properties are missing, `physicalId` is reused for all of them.
     */
    evaluateCloudControlIdentifier(logicalId: string, resourceType: string, physicalId: string): Promise<string>;
    getResourceProperty(logicalId: string, propertyName: string): any;
    metadataFor(logicalId: string): ResourceMetadata | undefined;
    private references;
    private parseIntrinsic;
    private findRefTarget;
    private findGetAttTarget;
    private findNestedStack;
    private formatResourceAttribute;
    private getServiceOfResource;
    private getResourceTypeArnPartOfResource;
}
/**
 * Resources where the CloudFormation physical resource ID ({ Ref }) disagrees
 * with the Cloud Control API primary identifier.
 *
 * Maps resource type to the CC primary identifier property names.
 * For resources NOT in this map, the physical resource ID can be used
 * directly as the CC primary identifier.
 */
export declare const RESOURCE_TYPE_PRIMARY_IDENTIFIERS: {
    [type: string]: string[];
};
//# sourceMappingURL=evaluate-cloudformation-template.d.ts.map