@junkawasaki/kawadb-orm
Version:
TypeScript ORM for KawaDB with KSQL support - works in Web and Electron environments
75 lines (74 loc) • 1.72 kB
TypeScript
/**
* エンティティ関連の型定義
*/
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>;
}