import type { Tuple } from '../../../codec.js'; import type { ScanOptions, CountOptions } from '../../../types.js'; import { SQLiteKVStoreOptions } from '../../utils/sqlite.js'; export type WorkerOperation = 'init' | 'get' | 'set' | 'delete' | 'scanStart' | 'scanNext' | 'scanDispose' | 'scanValuesStart' | 'scanValuesNext' | 'scanValuesDispose' | 'count' | 'clear' | 'applyEdits' | 'close'; export type InitPayload = { databasePath: string; options?: SQLiteKVStoreOptions; }; export type GetPayload = { key: Tuple; scope?: Tuple; }; export type SetPayload = { key: Tuple; value: any; scope?: Tuple; }; export type DeletePayload = { key: Tuple; scope?: Tuple; }; export type ScanStartPayload = { options: ScanOptions; scope?: Tuple; }; export type ScanValuesStartPayload = { options: ScanOptions; scope?: Tuple; }; export type CountPayload = { options: CountOptions; scope?: Tuple; }; export type ClearPayload = { scope?: Tuple; }; export type ApplyEditsPayload = { sets: [Tuple, any][]; deletes: Tuple[]; scope?: Tuple; }; export type WorkerRequestPayload = InitPayload | GetPayload | SetPayload | DeletePayload | ScanStartPayload | ScanValuesStartPayload | CountPayload | ClearPayload | ApplyEditsPayload | { iteratorId: number; } | null; export interface WorkerRequest { id: number; operation: WorkerOperation; payload: WorkerRequestPayload; } export type WorkerResponseType = 'initSuccess' | 'result' | 'scanIteratorId' | 'scanValuesIteratorId' | 'scanData' | 'scanValuesData' | 'scanComplete' | 'scanValuesComplete' | 'error'; export interface WorkerResponse { id: number; type: WorkerResponseType; payload?: any; iteratorId?: number; } export type PendingRequest = { resolve: (value: any) => void; reject: (reason?: any) => void; }; export type ActiveScan = { id: number; iteratorId: number; buffer: any[]; isComplete: boolean; error: any | null; waiter: { resolve: () => void; promise: Promise; } | null; onDispose: () => void; };