@funztic/db
Version:
TypeScript기반 파일 데이터베이스, zod를 지원합니다.
60 lines (59 loc) • 2.25 kB
TypeScript
import { z } from 'zod';
import { Collection } from './file-db.js';
export declare function autoIncrement(start?: number): Generator<number, void, unknown>;
export interface RepositoryOptions<T extends {
id: string;
}> {
idGenerator: () => string;
beforeCreate?: (entity: Partial<T> & {
id?: string;
}) => (Partial<T> & {
id?: string;
}) | Promise<Partial<T> & {
id?: string;
}>;
beforeSave?: (entity: T) => T | Promise<T>;
beforeUpdate?: (entity: T, updates: Partial<Omit<T, 'id'>>) => Partial<Omit<T, 'id'>> | Promise<Partial<Omit<T, 'id'>>>;
afterSave?: (entity: T) => void | Promise<void>;
}
export declare class Repository<T extends {
id: string;
}> {
protected collection: Collection<T>;
protected options: RepositoryOptions<T>;
protected schema: z.ZodSchema<T>;
constructor(collection: Collection<T>, options: RepositoryOptions<T>);
getSchema(): z.ZodSchema<T>;
getType(): "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
save(entityData: Partial<T> & {
id?: string;
}): Promise<T>;
findById(id: string): Promise<T | null>;
findAll(): Promise<T[]>;
findBy(criteria: Partial<T>): Promise<T[]>;
findOne(criteria: Partial<T>): Promise<T | null>;
update(id: string, data: Partial<Omit<T, 'id'>>): Promise<T | null>;
delete(id: string): Promise<boolean>;
count(): Promise<number>;
exists(id: string): Promise<boolean>;
clear(): Promise<void>;
query<R>(queryFn: (entities: T[]) => R): Promise<R>;
paginate(page?: number, limit?: number): Promise<{
data: T[];
total: number;
page: number;
limit: number;
totalPages: number;
}>;
createPaginator<K extends keyof T>(limit: number | undefined, sortBy: K, order?: 'asc' | 'desc'): AsyncGenerator<{
data: T[];
total: number;
page: number;
isLast: boolean;
}>;
findAllSorted<K extends keyof T>(sortBy: K, order?: 'asc' | 'desc'): Promise<T[]>;
getRawCollection(): Collection<T>;
}
export declare function createRepository<T extends {
id: string;
}>(collection: Collection<T>, options?: RepositoryOptions<T>): Repository<T>;