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>;
}
