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