Files
regex-tools/src/regex/execution/worker-protocol.ts

90 lines
2.1 KiB
TypeScript

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<T> {
readonly protocolVersion: typeof WORKER_PROTOCOL_VERSION;
readonly requestId: number;
readonly generation: number;
readonly payload: T;
}
export type WorkerResponse<T> =
| {
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) };
}