import BaseApplicationGenerator from '../base-application/index.ts';
import { PRIORITY_NAMES } from '../base-application/priorities.ts';
import type { TaskTypes as ApplicationTaskTypes } from '../base-application/tasks.ts';
import type { TaskParamWithApplication } from '../base-simple-application/tasks.ts';
import type { Application as BaseEntityChangesApplication, BaseChangelog as BaseEntityChangesChangelog, Config as BaseEntityChangesConfig, Entity as BaseEntityChangesEntity, Features as BaseEntityChangesFeatures, Options as BaseEntityChangesOptions, Source as BaseEntityChangesSource } from './types.ts';
type BaseEntityChangesTaskTypes<E extends BaseEntityChangesEntity, B extends BaseEntityChangesChangelog<E>, A extends BaseEntityChangesApplication<E>, S extends BaseEntityChangesSource> = ApplicationTaskTypes<E, A, S> & {
    DefaultTaskParam: {
        entityChanges?: B[];
    };
    WritingEntitiesTaskParam: {
        entityChanges?: B[];
    };
    PostWritingEntitiesTaskParam: {
        entityChanges?: B[];
    };
};
/**
 * This is the base class for a generator for every generator.
 */
export default abstract class BaseEntityChangesGenerator<Entity extends BaseEntityChangesEntity = BaseEntityChangesEntity, Application extends BaseEntityChangesApplication<Entity> = BaseEntityChangesApplication<Entity>, Config extends BaseEntityChangesConfig = BaseEntityChangesConfig, Options extends BaseEntityChangesOptions = BaseEntityChangesOptions, Source extends BaseEntityChangesSource = BaseEntityChangesSource, Features extends BaseEntityChangesFeatures = BaseEntityChangesFeatures, Tasks extends BaseEntityChangesTaskTypes<Entity, BaseEntityChangesChangelog<Entity>, Application, Source> = BaseEntityChangesTaskTypes<Entity, BaseEntityChangesChangelog<Entity>, Application, Source>> extends BaseApplicationGenerator<Entity, Application, Config, Options, Source, Features, Tasks> {
    recreateInitialChangelog: boolean;
    private entityChanges;
    abstract isChangelogNew({ entityName, changelogDate }: {
        entityName: string;
        changelogDate: string;
    }): boolean;
    protected getTaskFirstArgForPriority(priorityName: (typeof PRIORITY_NAMES)[keyof typeof PRIORITY_NAMES]): TaskParamWithApplication<Application>;
    /**
     * Generate changelog from differences between the liquibase entity and current entity.
     */
    protected generateIncrementalChanges({ application, entities: paramEntities, }: Pick<Tasks['DefaultTaskParam'], 'application' | 'entities'>): BaseEntityChangesChangelog<Entity>[];
    private hasAnyDefaultValue;
    private doDefaultValuesDiffer;
}
export {};
