/**
 * エンティティ関連の型定義
 */
export type EntityConstructor<T = any> = new (...args: any[]) => T;
export type EntityProperty<T> = {
    [K in keyof T]: T[K];
};
export interface ColumnMetadata {
    name: string;
    type: DataType;
    nullable: boolean;
    primaryKey: boolean;
    autoIncrement: boolean;
    defaultValue?: any;
    unique?: boolean;
    index?: boolean;
}
export interface TableMetadata {
    name: string;
    columns: ColumnMetadata[];
    primaryKey: string[];
    indexes: IndexMetadata[];
}
export interface IndexMetadata {
    name: string;
    columns: string[];
    unique: boolean;
}
export declare enum DataType {
    STRING = "string",
    NUMBER = "number",
    BOOLEAN = "boolean",
    DATE = "date",
    JSON = "json",
    ARRAY = "array",
    OBJECT = "object"
}
export interface EntityMetadata {
    target: EntityConstructor;
    name: string;
    tableName: string;
    columns: ColumnMetadata[];
    primaryKey: string[];
    relations: RelationMetadata[];
}
export interface RelationMetadata {
    type: 'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many';
    target: EntityConstructor;
    joinColumn?: string;
    inverseJoinColumn?: string;
    propertyName: string;
}
export type EntityId = string | number;
export interface BaseEntity {
    id?: EntityId;
    createdAt?: Date;
    updatedAt?: Date;
}
export interface FindOptions<T> {
    where?: Partial<T> | Partial<T>[];
    order?: {
        [P in keyof T]?: 'ASC' | 'DESC';
    };
    skip?: number;
    take?: number;
    relations?: string[];
}
export interface UpdateOptions<T> {
    where: Partial<T>;
    data: Partial<T>;
}
export interface DeleteOptions<T> {
    where: Partial<T>;
}
