import type { RegexExecutionRequest, RegexExecutionResult, RegexReplacementRequest, RegexReplacementResult, } from "../model/match"; import type { RegexSyntaxRequest, RegexSyntaxResult, ReplacementSyntaxResult, } from "../model/syntax"; import type { ReplacementSyntaxRequest } from "../syntax/SyntaxProvider"; export const WORKER_PROTOCOL_VERSION = 1; export type SyntaxWorkerOperation = | { readonly kind: "parse-pattern"; readonly request: RegexSyntaxRequest; } | { readonly kind: "parse-replacement"; readonly request: ReplacementSyntaxRequest; }; export type SyntaxWorkerResult = | { readonly kind: "parse-pattern"; readonly result: RegexSyntaxResult; } | { readonly kind: "parse-replacement"; readonly result: ReplacementSyntaxResult; }; export type EngineWorkerOperation = | { readonly kind: "execute"; readonly request: RegexExecutionRequest; } | { readonly kind: "replace"; readonly request: RegexReplacementRequest; }; export type EngineWorkerResult = | { readonly kind: "execute"; readonly result: RegexExecutionResult; } | { readonly kind: "replace"; readonly result: RegexReplacementResult; }; export interface WorkerRequest { readonly protocolVersion: typeof WORKER_PROTOCOL_VERSION; readonly requestId: number; readonly generation: number; readonly payload: T; } export type WorkerResponse = | { readonly protocolVersion: typeof WORKER_PROTOCOL_VERSION; readonly requestId: number; readonly generation: number; readonly ok: true; readonly payload: T; } | { readonly protocolVersion: typeof WORKER_PROTOCOL_VERSION; readonly requestId: number; readonly generation: number; readonly ok: false; readonly error: { readonly name: string; readonly message: string; }; }; export function workerError(error: unknown): { readonly name: string; readonly message: string; } { return error instanceof Error ? { name: error.name, message: error.message } : { name: "Error", message: String(error) }; }