import { CreationPolicy, DeletionPolicy, DependsOn, Metadata, UpdatePolicy, UpdateReplacePolicy } from './cfn';
import { Resolvable } from './dataTypes';
export { Resolvable };
export declare class CfnResource<TProps extends CfnResourceProps> implements ICfnResource<TProps> {
    Type: string;
    Properties?: TProps;
    DependsOn?: DependsOn;
    Metadata?: Metadata;
    CreationPolicy?: CreationPolicy;
    DeletionPolicy?: DeletionPolicy;
    UpdatePolicy?: UpdatePolicy;
    UpdateReplacePolicy?: UpdateReplacePolicy;
    Condition?: Resolvable<string>;
    constructor(Type: string, Properties?: TProps);
    dependsOn(dependencies: DependsOn): this;
    setDependsOn(dependencies: DependsOn): this;
    metadata(metadata: {
        [key: string]: unknown;
    }): this;
    setMetadata(metadata: {
        [key: string]: unknown;
    }): this;
    creationPolicy(policy: CreationPolicy): this;
    deletionPolicy(policy: DeletionPolicy): this;
    updatePolicy(policy: UpdatePolicy): this;
    updateReplacePolicy(policy: UpdateReplacePolicy): this;
    condition(condition: Resolvable<string>): this;
    with(apply: (resource: CfnResource<TProps>) => void): this;
}
export interface ICfnResource<TProps extends CfnResourceProps> {
    Type: string;
    Properties?: TProps;
    DependsOn?: DependsOn;
    Metadata?: Metadata;
    CreationPolicy?: CreationPolicy;
    DeletionPolicy?: DeletionPolicy;
    UpdatePolicy?: UpdatePolicy;
    UpdateReplacePolicy?: UpdateReplacePolicy;
    Condition?: Resolvable<string>;
}
export declare type CfnResourceProps = {
    [k: string]: unknown;
};
