import { HotStaq } from "./HotStaq";
import { HotSite } from "./HotSite";
import { HotLog } from "./HotLog";
/**
 * The options for building a NPM module that utilizes HotStaq.
 */
export interface ModuleBuildOptions {
    /**
     * The type of install to do. Can be:
     * * install
     * * link
     *
     * Default value is "install".
     */
    installType?: string;
    /**
     * The type of build to do. Can be:
     * * build
     *
     * Default value is "build".
     */
    buildType?: string;
    /**
     * The name of the NPM module to install.
     */
    name: string;
    /**
     * The associated processor.
     */
    processor: HotStaq;
    /**
     * The associated HotSite to parse.
     */
    hotsite: HotSite;
    /**
     * The path to the HotSite to parse.
     */
    hotsitePath: string;
    /**
     * The path to the module to install/build.
     */
    modulePath: string;
    /**
     * The path to the module's HotSite to install/build from.
     */
    moduleHotsite: string;
    /**
     * The output directory to place all built files.
     *
     * Default value is ${cwd}/public/hotstaq_modules/${name}/
     */
    outDir?: string;
    /**
     * The base url used to access the files on the web.
     *
     * Default value is ./hotstaq_modules/${name}/
     */
    baseUrl?: string;
    /**
     * The current working directory to work out of.
     *
     * Default value is the current working directory.
     */
    cwd?: string;
}
/**
 * Builds stuff for the CLI like docker images and Kubernetes Helm charts.
 */
export declare class HotBuilder {
    /**
     * The HotSites to build from.
     */
    hotsites: HotSite[];
    /**
     * Will generate JSON from TypeScript interfaces.
     * @default false
     */
    interfaces: boolean;
    /**
     * Will build the web api.
     * @default true
     */
    api: boolean;
    /**
     * The version of HotStaq to use.
     */
    hotstaqVersion: string;
    /**
     * The namespace to use when building the dockerfiles.
     */
    dockerNamespace: string;
    /**
     * Will build the Dockerfiles.
     */
    dockerFiles: boolean;
    /**
     * Will append the docker documentation to the existing README.md.
     */
    appendReadMe: boolean;
    /**
     * Will build a Kubernetes Helm Chart.
     */
    helmChart: boolean;
    /**
     * The logger.
     */
    logger: HotLog;
    /**
     * The configuration for interface generation.
     */
    interfaceConfig: {
        /**
         * The list of interfaces to generate. This is used to generate IHotParameter JSON
         * files that can be consumed by TypeScript.
         * @default []
         */
        filesToGenerate: string[];
        /**
         * The location of the tsconfig to use for the TypeScript conversion.
         * @default ""
         */
        tsconfigPath: string;
        /**
         * The directory to output all generated route parameters to.
         * @default "./json/"
         */
        outputDir: string;
    };
    /**
     * The output directory.
     */
    outputDir: string;
    constructor(logger: HotLog);
    /**
     * Install a NPM module that utilizes HotStaq.
     */
    static installModule(options: ModuleBuildOptions): Promise<void>;
    /**
     * Build a NPM module that utilizes HotStaq.
     */
    static buildModule(options: ModuleBuildOptions): Promise<void>;
    /**
     * Get the correct NPM name from the given name. This will remove the version.
     */
    static getNameFromNPMName(name: string): string;
    /**
     * Prepare a HotSite for building. This will return the replace keys to use for
     * every file that will be generated. Additionally, this will ensure the HotSite
     * is named properly, and check if the target output directory already exists.
     * Also, this will normalize the output directory.
     *
     * @param generatorType The type of generator to use. Can be:
     * * docker
     * * helm
     */
    protected prepareHotsiteBuild(hotsite: HotSite, generatorType: "docker" | "helm"): Promise<any>;
    /**
     * During install, copy files to their correct locations. All copying will
     * stop if stopAfterFirstIsFound is set to true, and the first file is found.
     *
     * @param type The type of file to copy (e.g. "js", "css")
     */
    protected static copyFilesFromImport(processor: HotStaq, type: string, modulePath: string, outDir: string, fileExts: string[], searchDirs: string[], outFiles: string[], baseUrl: string, stopAfterFirstIsFound?: boolean): Promise<void>;
    /**
     * Build everything and output to outputDir.
     *
     * @fixme Needs tests!
     */
    build(): Promise<void>;
    /**
     * Replace keys in a file.
     */
    protected replaceKeysInFile(filepath: string, keys: {
        [name: string]: string;
    }): Promise<void>;
}
//# sourceMappingURL=HotBuilder.d.ts.map