import { CodeMaker } from "codemaker";
import { ConstructsMakerTarget, ProviderSchema } from "@cdktn/commons";
import { FQPN } from "@cdktn/provider-schema";
import { ResourceModel } from "./models";
export interface TerraformProviderGeneratorOptions {
    /**
     * File extension to write on emitted relative imports.
     * Defaults to "" (CommonJS).
     */
    readonly importExtension?: string;
}
interface ProviderData {
    name: string;
    source: string;
    version: string;
}
export interface ProviderConstraints {
    [fqn: string]: ProviderData;
}
export declare class TerraformProviderGenerator {
    private readonly code;
    private readonly schema;
    private resourceParser;
    private resourceEmitter;
    private structEmitter;
    private readonly importExtension;
    versions: {
        [fqpn: string]: string | undefined;
    };
    constructor(code: CodeMaker, schema: ProviderSchema, options?: TerraformProviderGeneratorOptions);
    private getProviderByConstraint;
    generate(providerConstraint: ConstructsMakerTarget): void;
    generateAll(): void;
    save(outdir: string): Promise<void>;
    buildResourceModels(fqpn: FQPN, constraint?: ConstructsMakerTarget): ResourceModel[];
    getClassNameForResource(terraformType: string): string;
    getNamespaceNameForResource(terraformType: string): string;
    private emitProvider;
    private emitResourceReadme;
    private emitIndexFile;
    private emitLazyIndexFile;
    private emitResource;
    private emitResourceWithComplexStruct;
    private emitFileHeader;
}
export {};
//# sourceMappingURL=provider-generator.d.ts.map