90 lines
2.1 KiB
TypeScript
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) };
|
|
}
|