@funztic/db
Version:
TypeScript기반 파일 데이터베이스, zod를 지원합니다.
72 lines (71 loc) • 2.67 kB
TypeScript
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>;
}