/**
 * Copyright 2013-2026 the original author or authors from the JHipster project.
 *
 * This file is part of the JHipster project, see https://www.jhipster.tech/
 * for more information.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import type { Options as ExecaOptions } from 'execa';
import BaseApplicationGenerator from '../base-application/index.ts';
import type { Application as HerokuApplication, Config as HerokuConfig, Entity as HerokuEntity, Options as HerokuOptions } from './types.ts';
type StreamLike = {
    on(event: 'data', listener: (chunk: any) => void): any;
};
export default class HerokuGenerator extends BaseApplicationGenerator<HerokuEntity, HerokuApplication, HerokuConfig, HerokuOptions> {
    [BaseApplicationGenerator.INITIALIZING]: Record<"initializing" | "checkInstallation" | "herokuLogin", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl>>;
    [BaseApplicationGenerator.PROMPTING]: Record<"askForApp" | "askForHerokuDeployType" | "askForHerokuJavaVersion", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl>>;
    [BaseApplicationGenerator.LOADING]: Record<"saveConfig", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: HerokuApplication;
    } & import("../base-simple-application/tasks.js").ApplicationDefaultsTaskParam<HerokuApplication>>>;
    [BaseApplicationGenerator.PREPARING]: Record<"properties", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        source: import("./types.ts").Source;
    } & {
        application: HerokuApplication;
    } & import("../base-simple-application/tasks.js").ApplicationDefaultsTaskParam<HerokuApplication>>>;
    [BaseApplicationGenerator.DEFAULT]: Record<"gitInit" | "installHerokuDeployPlugin" | "herokuCreate" | "herokuAddonsCreate" | "configureJHipsterRegistry", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: HerokuApplication;
    } & {
        entities: HerokuEntity<import("../base-application/entity.ts").Field, import("../base-application/entity.ts").Relationship>[];
    }>>;
    [BaseApplicationGenerator.WRITING]: Record<"copyHerokuFiles" | "addHerokuBuildPlugin" | "addHerokuMavenProfile", import("../base-core/types.js").GenericTask<any, import("../base-simple-application/tasks.js").TaskParamWithApplication<HerokuApplication>>>;
    [BaseApplicationGenerator.END]: Record<"productionBuild" | "productionDeploy", import("../base-core/types.js").GenericTask<any, import("../base-simple-application/tasks.js").TaskParamWithApplication<HerokuApplication>>>;
    hasHerokuCli: boolean;
    herokuAppName?: string;
    herokuDeployType: string;
    herokuJavaVersion: string;
    herokuRegion: string;
    herokuAppExists: boolean;
    herokuSkipDeploy: boolean;
    herokuSkipBuild: boolean;
    dynoSize: string;
    beforeQueue(): Promise<void>;
    get initializing(): Record<"initializing" | "checkInstallation" | "herokuLogin", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl>>;
    get prompting(): Record<"askForApp" | "askForHerokuDeployType" | "askForHerokuJavaVersion", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl>>;
    get loading(): Record<"saveConfig", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: HerokuApplication;
    } & import("../base-simple-application/tasks.js").ApplicationDefaultsTaskParam<HerokuApplication>>>;
    get preparing(): Record<"properties", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        source: import("./types.ts").Source;
    } & {
        application: HerokuApplication;
    } & import("../base-simple-application/tasks.js").ApplicationDefaultsTaskParam<HerokuApplication>>>;
    get default(): Record<"gitInit" | "installHerokuDeployPlugin" | "herokuCreate" | "herokuAddonsCreate" | "configureJHipsterRegistry", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: HerokuApplication;
    } & {
        entities: HerokuEntity<import("../base-application/entity.ts").Field, import("../base-application/entity.ts").Relationship>[];
    }>>;
    get writing(): Record<"copyHerokuFiles" | "addHerokuBuildPlugin" | "addHerokuMavenProfile", import("../base-core/types.js").GenericTask<any, import("../base-simple-application/tasks.js").TaskParamWithApplication<HerokuApplication>>>;
    get end(): Record<"productionBuild" | "productionDeploy", import("../base-core/types.js").GenericTask<any, import("../base-simple-application/tasks.js").TaskParamWithApplication<HerokuApplication>>>;
    /**
     * TODO drop when dropped from gae, azure-spring-cloud and heroku generators
     * @private
     * Add a new Maven profile.
     *
     * @param {string} profileId - profile ID
     * @param {string} other - explicit other thing: build, dependencies...
     */
    addMavenProfile(profileId: string, other: string): void;
    spawnHerokuCommand(command: string, opt?: ExecaOptions & {
        verboseInfo?: boolean;
    }): Promise<{
        stdout: string;
        stderr: string;
        exitCode: number;
    }>;
    spawnHeroku(args: string[], opt?: ExecaOptions & {
        verboseInfo?: boolean;
    }): Promise<{
        stdout: string;
        stderr: string;
        exitCode: number;
    }>;
    printChildOutput<const T extends {
        stdout?: StreamLike | null;
        stderr?: StreamLike | null;
    }>(child: T, log?: (data: any) => import("@yeoman/types").Logger): T;
    checkAddOnReturn({ addOn, stdout, stderr }: {
        addOn: string;
        stdout: string;
        stderr: string;
    }): void;
}
export {};
