// Message protocol shared between the main thread (searchIndexWorkerClient) and // the FlexSearch web worker (searchIndex.worker). Types only — safe to import // from both sides. // `track`: a cue from one of the record's alternate English tracks // (lib/captionTracks.ts) — absent for the transcript's own. export type IndexHit = { slug: string; start?: number; text: string; track?: string }; // Main thread → worker. export type WorkerRequest = | { type: "build"; reqId: number; slug: string } | { type: "search"; reqId: number; slug: string; term: string; limit: number } | { type: "status"; reqId: number; slug: string } | { type: "drop"; reqId: number; slug: string }; // Worker → main thread. export type WorkerResponse = | { type: "progress"; reqId: number; slug: string; done: number; total: number } | { type: "built"; reqId: number; slug: string; docCount: number } | { type: "result"; reqId: number; slug: string; hits: IndexHit[] } | { type: "status"; reqId: number; slug: string; ready: boolean; docCount: number } | { type: "dropped"; reqId: number; slug: string } | { type: "error"; reqId: number; slug: string; message: string };