UNPKG

@funztic/db

Version:

TypeScript기반 파일 데이터베이스, zod를 지원합니다.

72 lines (71 loc) 2.67 kB
import { Worker } from 'worker_threads'; export type CollectionEvents<T> = { 'loaded': (count: number, validatedCount?: number) => void; 'saved': () => void; 'created': (item: T) => void; 'updated': (item: T) => void; 'deleted': (item: T) => void; 'cleared': () => void; 'error': (error: Error) => void; 'validationError': (id: string, error: Error) => void; }; export declare class TypedEventEmitter<T extends Record<string | symbol, (...args: any[]) => any>> { private emitter; on<K extends keyof T>(event: K, listener: T[K]): this; once<K extends keyof T>(event: K, listener: T[K]): this; emit<K extends keyof T>(event: K, ...args: Parameters<T[K]>): boolean; removeAll<K extends keyof T>(event?: K): this; eventNames(): (string | symbol)[]; } export declare class Collection<T extends { id: string; }> extends TypedEventEmitter<CollectionEvents<T>> { protected data: Record<string, T>; protected filePath: string; protected autoSave: boolean; protected saveDelay: number; protected saveTimeout: NodeJS.Timeout | null; protected worker: Worker | null; protected isSaving: boolean; protected pendingChanges: boolean; protected isInitialized: boolean; protected initPromise: Promise<void>; constructor(collectionName: string, options: { dir: string; autoSave?: boolean; saveDelay?: number; }); protected initWorker(): void; protected init(): Promise<void>; protected ensureInitialized(): Promise<void>; protected performSave(): Promise<void>; protected saveToDisk(dataString: string): Promise<void>; save(force?: boolean): Promise<void>; protected triggerSave(): void; create(itemData: Omit<T, 'id'> & { id?: string; }): Promise<T>; get(id: string): Promise<T | undefined>; getAll(): Promise<T[]>; find(filterFn: (item: T) => boolean): Promise<T[]>; update(id: string, updates: Partial<Omit<T, 'id'>>): Promise<T | undefined>; delete(id: string): Promise<boolean>; clear(): Promise<void>; query<R>(queryFn: (data: Readonly<Record<string, T>>) => R): Promise<R>; close(): Promise<void>; } export interface CollectionOptions { autoSave?: boolean; saveDelay?: number; } export declare class Database { protected collections: Record<string, Collection<any>>; protected options: CollectionOptions; protected dbDir: string; constructor(dbDir: string, options?: CollectionOptions); collection<T extends { id: string; }>(name: string, schema?: any): Collection<T>; syncAll(): Promise<void>; close(): Promise<void>; }