import { CloudFormationTemplate } from './cloudformation-template';
import { Outputs } from './outputs';
import { Parameter } from './parameter';
import { BuilderWith } from './template-creator';
export declare function keepCase<T>(item: T): T;
export declare class TemplateBuilder<AWS, P extends {
    [param: string]: Parameter;
}, C extends string = string> {
    private readonly aws;
    outputFileName: string;
    parameterFileName: string;
    private parameters;
    private outputDir;
    private conditions;
    private _templateTransform;
    private transforms;
    constructor(aws: AWS, outputFileName: string, parameterFileName?: string);
    withCondition<S extends string>(name: S, condition: any): TemplateBuilder<AWS, P, C | S>;
    withTransform(transform: string): TemplateBuilder<AWS, P, C>;
    params<P2 extends {
        [param: string]: Parameter;
    }>(params: P2): TemplateBuilder<AWS, P & P2, C>;
    envParams<P2 extends {
        [params: string]: string;
    }>(params: P2): TemplateBuilder<AWS, P & {
        [K in keyof P2]: {
            type: 'Future';
            environmentName: P2[K];
        };
    }, C>;
    outputTo(directory: string): this;
    transformTemplate(_templateTransform?: (template: CloudFormationTemplate) => string): this;
    private pathTo;
    build(builder: BuilderWith<AWS, P, C>): {
        template: CloudFormationTemplate;
        outputs?: Outputs;
    };
    static create<AWS, C extends string = string>(aws: AWS, outputFileName?: string, parametersFileName?: string): TemplateBuilder<AWS, {}, C>;
}
