77 lines
1.8 KiB
TypeScript
77 lines
1.8 KiB
TypeScript
import { StepExecutionResult } from "./types";
|
|
import * as E from "./worker-errors";
|
|
|
|
/** Types of requests the worker handles */
|
|
export type WorkerRequestData =
|
|
| {
|
|
type: "Init";
|
|
params?: null;
|
|
}
|
|
| {
|
|
type: "Reset";
|
|
params?: null;
|
|
}
|
|
| {
|
|
type: "Prepare";
|
|
params: { code: string; input: string };
|
|
}
|
|
| {
|
|
type: "UpdateBreakpoints";
|
|
params: { points: number[] };
|
|
}
|
|
| {
|
|
type: "ValidateCode";
|
|
params: { code: string };
|
|
}
|
|
| {
|
|
type: "Execute";
|
|
params: { interval: number };
|
|
}
|
|
| {
|
|
type: "ExecuteStep";
|
|
params?: null;
|
|
}
|
|
| {
|
|
type: "Pause";
|
|
params?: null;
|
|
};
|
|
|
|
/** Kinds of acknowledgement responses the worker can send */
|
|
export type WorkerAckType =
|
|
| "init" // on initialization
|
|
| "reset" // on state reset
|
|
| "bp-update" // on updating breakpoints
|
|
| "prepare" // on preparing for execution
|
|
| "pause"; // on pausing execution
|
|
|
|
/** Errors associated with each response ack type */
|
|
export type WorkerAckError = {
|
|
init: undefined;
|
|
reset: undefined;
|
|
"bp-update": undefined;
|
|
prepare: E.WorkerParseError;
|
|
pause: undefined;
|
|
};
|
|
|
|
/** Types of responses the worker can send */
|
|
export type WorkerResponseData<RS, A extends WorkerAckType> =
|
|
/** Ack for one-off requests, optionally containing error occured (if any) */
|
|
| {
|
|
type: "ack";
|
|
data: A;
|
|
error?: WorkerAckError[A];
|
|
}
|
|
/** Result of code validation, containing parsing error (if any) */
|
|
| {
|
|
type: "validate";
|
|
error?: E.WorkerParseError;
|
|
}
|
|
/** Response containing step execution result, and runtime error (if any) */
|
|
| {
|
|
type: "result";
|
|
data: StepExecutionResult<RS>;
|
|
error?: E.WorkerRuntimeError;
|
|
}
|
|
/** Response indicating a bug in worker/engine logic */
|
|
| { type: "error"; error: E.WorkerError };
|