File size: 2,353 Bytes
4e23b01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import type { GlobalSearchErrorReason } from '../contract.ts';
import type {
CoreLifecycleReport,
CoreSearchParams,
CoreSearchResult,
CoreStatus,
CoreSyncOutcome,
SyncSessionInput,
} from '../indexCore.ts';
export const SEARCH_WORKER_PROTOCOL_VERSION = 1;
export interface SearchWorkerData {
readonly dir: string;
readonly bootSalt: string;
readonly textBuildWorkerPath?: string;
}
export type SearchWorkerCall =
| { readonly id: number; readonly v: number; readonly type: 'open' }
| { readonly id: number; readonly v: number; readonly type: 'search'; readonly params: CoreSearchParams }
| { readonly id: number; readonly v: number; readonly type: 'sync'; readonly params: { readonly sessions: readonly SyncSessionInput[] } }
| { readonly id: number; readonly v: number; readonly type: 'refresh' }
| { readonly id: number; readonly v: number; readonly type: 'reindex' }
| { readonly id: number; readonly v: number; readonly type: 'status' }
| { readonly id: number; readonly v: number; readonly type: 'close' };
export type SearchWorkerCallType = SearchWorkerCall['type'];
export interface SearchWorkerControlMessage {
readonly v: number;
readonly type: 'beginClose';
}
export type SearchWorkerRequest = SearchWorkerCall | SearchWorkerControlMessage;
export interface SearchWorkerOpenResult {
readonly readOnly: boolean;
readonly lockToken?: string;
readonly lifecycle: CoreLifecycleReport;
}
export interface SearchWorkerResultMap {
readonly open: SearchWorkerOpenResult;
readonly search: CoreSearchResult;
readonly sync: CoreSyncOutcome;
readonly refresh: SearchWorkerOpenResult;
readonly reindex: SearchWorkerOpenResult;
readonly status: CoreStatus;
readonly close: null;
}
export interface SearchWorkerErrorPayload {
readonly message: string;
readonly reason?: GlobalSearchErrorReason;
}
export type SearchWorkerEvent =
| { readonly type: 'ready'; readonly v: number }
| {
readonly type: 'log';
readonly level: 'info' | 'warn';
readonly message: string;
readonly meta?: Record<string, unknown>;
}
| {
readonly type: 'lockToken';
readonly token: string;
}
| { readonly id: number; readonly type: 'result'; readonly result: unknown }
| { readonly id: number; readonly type: 'error'; readonly error: SearchWorkerErrorPayload };
|