import BaseEntityChangesGenerator from '../base-entity-changes/index.ts';
import type { BaseChangelog } from '../base-entity-changes/types.ts';
import type { Application as LiquibaseApplication, Config as LiquibaseConfig, Entity as LiquibaseEntity, Features as LiquibaseFeatures, Field as LiquibaseField, Options as LiquibaseOptions, Source as LiquibaseSource } from './types.ts';
export default class LiquibaseGenerator<Entity extends LiquibaseEntity = LiquibaseEntity<LiquibaseField>, Application extends LiquibaseApplication<Entity> = LiquibaseApplication<Entity>> extends BaseEntityChangesGenerator<Entity, Application, LiquibaseConfig, LiquibaseOptions, LiquibaseSource, LiquibaseFeatures> {
    [BaseEntityChangesGenerator.PREPARING]: Record<"preparing" | "addNeedles" | "liquibaseNeo4j" | "checkDatabaseCompatibility", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        source: LiquibaseSource;
    } & {
        application: Application;
    } & import("../base-simple-application/tasks.js").ApplicationDefaultsTaskParam<Application>>>;
    [BaseEntityChangesGenerator.PREPARING_EACH_ENTITY_FIELD]: Record<"prepareEntityField" | "validateConsistencyOfField", import("../base-core/types.js").GenericTask<any, import("../base-application/tasks.js").PreparingEachEntityFieldTaskParam<Entity, Application>>>;
    [BaseEntityChangesGenerator.PREPARING_EACH_ENTITY_RELATIONSHIP]: Record<"prepareEntityRelationship", import("../base-core/types.js").GenericTask<any, import("../base-application/tasks.js").PreparingEachEntityRelationshipTaskParam<Entity, Application>>>;
    [BaseEntityChangesGenerator.POST_PREPARING_EACH_ENTITY]: Record<"postPrepareEntity", import("../base-core/types.js").GenericTask<any, import("../base-application/tasks.js").PreparingEachEntityTaskParam<Entity, Application>>>;
    [BaseEntityChangesGenerator.DEFAULT]: Record<"calculateChangelogs", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: Application;
    } & {
        entities: Entity[];
    } & {
        entityChanges?: BaseChangelog<Entity>[] | undefined;
    }>>;
    [BaseEntityChangesGenerator.WRITING]: Record<"writing", import("../base-core/types.js").GenericTask<any, import("../base-simple-application/tasks.js").TaskParamWithApplication<Application>>>;
    [BaseEntityChangesGenerator.WRITING_ENTITIES]: Record<"writeChangelogs", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: Application;
    } & {
        entities: Entity[];
    } & {
        entityChanges?: BaseChangelog<Entity>[] | undefined;
    }>>;
    [BaseEntityChangesGenerator.POST_WRITING]: Record<"customizeMaven" | "customizeSpringLogs" | "injectGradle", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        source: LiquibaseSource;
    } & {
        application: Application;
    }>>;
    [BaseEntityChangesGenerator.POST_WRITING_ENTITIES]: Record<"postWriteChangelogs", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: Application;
    } & {
        entities: Entity[];
    } & {
        source: LiquibaseSource;
    } & {
        entityChanges?: BaseChangelog<Entity>[] | undefined;
    }>>;
    numberOfRows: number;
    databaseChangelogs: BaseChangelog<Entity>[];
    injectBuildTool: boolean;
    injectLogs: boolean;
    beforeQueue(): Promise<void>;
    get preparing(): Record<"preparing" | "addNeedles" | "liquibaseNeo4j" | "checkDatabaseCompatibility", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        source: LiquibaseSource;
    } & {
        application: Application;
    } & import("../base-simple-application/tasks.js").ApplicationDefaultsTaskParam<Application>>>;
    get preparingEachEntityField(): Record<"prepareEntityField" | "validateConsistencyOfField", import("../base-core/types.js").GenericTask<any, import("../base-application/tasks.js").PreparingEachEntityFieldTaskParam<Entity, Application>>>;
    get preparingEachEntityRelationship(): Record<"prepareEntityRelationship", import("../base-core/types.js").GenericTask<any, import("../base-application/tasks.js").PreparingEachEntityRelationshipTaskParam<Entity, Application>>>;
    get postPreparingEachEntity(): Record<"postPrepareEntity", import("../base-core/types.js").GenericTask<any, import("../base-application/tasks.js").PreparingEachEntityTaskParam<Entity, Application>>>;
    get default(): Record<"calculateChangelogs", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: Application;
    } & {
        entities: Entity[];
    } & {
        entityChanges?: BaseChangelog<Entity>[] | undefined;
    }>>;
    get writing(): Record<"writing", import("../base-core/types.js").GenericTask<any, import("../base-simple-application/tasks.js").TaskParamWithApplication<Application>>>;
    get writingEntities(): Record<"writeChangelogs", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: Application;
    } & {
        entities: Entity[];
    } & {
        entityChanges?: BaseChangelog<Entity>[] | undefined;
    }>>;
    get postWriting(): Record<"customizeMaven" | "customizeSpringLogs" | "injectGradle", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        source: LiquibaseSource;
    } & {
        application: Application;
    }>>;
    get postWritingEntities(): Record<"postWriteChangelogs", import("../base-core/types.js").GenericTask<any, import("../base/tasks.js").TaskParamWithControl & {
        application: Application;
    } & {
        entities: Entity[];
    } & {
        source: LiquibaseSource;
    } & {
        entityChanges?: BaseChangelog<Entity>[] | undefined;
    }>>;
    isChangelogNew({ entityName, changelogDate }: {
        entityName: string;
        changelogDate: string;
    }): boolean;
    /**
     * Write files for new entities.
     */
    _writeLiquibaseFiles({ context: writeContext, changelogData }: {
        context: any;
        changelogData: any;
    }): Promise<any[]>;
    /**
     * Write files for new entities.
     */
    _addLiquibaseFilesReferences({ entity, databaseChangelog, source, }: {
        entity: Entity;
        databaseChangelog: BaseChangelog<Entity>;
        source: LiquibaseSource;
    }): void;
    /**
     * Write files for updated entities.
     */
    _writeUpdateFiles({ context: writeContext, changelogData }: {
        context: any;
        changelogData: any;
    }): Promise<any[]>;
    private _requiresConstraintUpdates;
    private _isBasicEntityUpdate;
    private _requiresWritingFakeData;
    /**
     * Write files for updated entities.
     */
    _addUpdateFilesReferences({ entity, databaseChangelog, changelogData, source, }: {
        entity: Entity;
        databaseChangelog: BaseChangelog<Entity>;
        changelogData: any;
        source: LiquibaseSource;
    }): void;
    /**
     * @private
     * Format As Liquibase Remarks
     *
     * @param {string} text - text to format
     * @param {boolean} addRemarksTag - add remarks tag
     * @returns formatted liquibase remarks
     */
    formatAsLiquibaseRemarks(text: string, addRemarksTag?: boolean): string;
    /**
     * @private
     * Create the fitting liquibase default value attribute for a field.
     * @param field
     * @param leadingWhitespace
     * @returns
     */
    createDefaultValueLiquibaseAttribute(field: LiquibaseField, leadingWhitespace?: boolean): string;
    prepareChangelog({ databaseChangelog, application }: {
        databaseChangelog: BaseChangelog<Entity>;
        application: Application;
    }): BaseChangelog<Entity> | undefined;
    writeChangelog({ databaseChangelog }: {
        databaseChangelog: BaseChangelog<Entity>;
    }): Promise<any[]> | undefined;
    /**
     * @private
     * get a foreign key constraint name for tables in JHipster preferred style.
     *
     * @param {string} entityName - name of the entity
     * @param {string} relationshipName - name of the related entity
     * @param {string} prodDatabaseType - database type
     * @param {boolean} noSnakeCase - do not convert names to snakecase
     */
    getFKConstraintName(entityName: string, relationshipName: string, prodDatabaseType: string, noSnakeCase: boolean): string;
    /**
     * @private
     * get a unique constraint name for tables in JHipster preferred style.
     *
     * @param {string} entityName - name of the entity
     * @param {string} columnName - name of the column
     * @param {string} prodDatabaseType - database type
     * @param {boolean} noSnakeCase - do not convert names to snakecase
     */
    getUXConstraintName(entityName: string, columnName: string, prodDatabaseType: string, noSnakeCase: boolean): string;
}
