import type { NamingStrategy } from './NamingStrategy.js';
import { type ReferenceKind } from '../enums.js';
/** Base class for naming strategies, providing default implementations for common naming conventions. */
export declare abstract class AbstractNamingStrategy implements NamingStrategy {
  getClassName(file: string, separator?: string): string;
  classToMigrationName(timestamp: string, customMigrationName?: string): string;
  indexName(
    tableName: string,
    columns: string[],
    type: 'primary' | 'foreign' | 'unique' | 'index' | 'sequence' | 'check' | 'default',
  ): string;
  /**
   * @inheritDoc
   */
  getEntityName(tableName: string, schemaName?: string): string;
  columnNameToProperty(columnName: string): string;
  /**
   * @inheritDoc
   */
  getEnumClassName(columnName: string, tableName: string | undefined, schemaName?: string): string;
  /**
   * @inheritDoc
   */
  getEnumTypeName(columnName: string, tableName: string | undefined, schemaName?: string): string;
  /**
   * @inheritDoc
   */
  enumValueToEnumProperty(enumValue: string, columnName: string, tableName: string, schemaName?: string): string;
  aliasName(entityName: string, index: number): string;
  /**
   * @inheritDoc
   */
  inverseSideName(entityName: string, propertyName: string, kind: ReferenceKind): string;
  /**
   * @inheritDoc
   */
  manyToManyPropertyName(
    ownerEntityName: string,
    targetEntityName: string,
    pivotTableName: string,
    ownerTableName: string,
    schemaName?: string,
  ): string;
  /**
   * @inheritDoc
   */
  discriminatorColumnName(baseName: string): string;
  abstract classToTableName(entityName: string, tableName?: string): string;
  abstract joinColumnName(propertyName: string): string;
  abstract joinKeyColumnName(
    entityName: string,
    referencedColumnName?: string,
    composite?: boolean,
    tableName?: string,
  ): string;
  abstract joinTableName(sourceEntity: string, targetEntity: string, propertyName?: string, tableName?: string): string;
  abstract propertyToColumnName(propertyName: string, object?: boolean): string;
  abstract referenceColumnName(): string;
}
