@firfi/quint-connect
Version:
Model-based testing framework connecting Quint specifications to TypeScript implementations
19 lines • 1.18 kB
JavaScript
import { Effect } from "effect";
import { buildPicksDecoder } from "./replay-actions.js";
import { traceReplayError, unknownActionMessage, withTraceReplayError } from "./replay-errors.js";
const shouldSkipMissingAction = (action) => action === "step";
export const dispatchReplayAction = (actions, action, nondetPicks, context, picksDecoders) => Effect.gen(function* () {
const actionDef = actions[action];
if (actionDef === undefined) {
// Rust backend emits "step" when the spec's step action body is a direct no-op.
if (shouldSkipMissingAction(action)) {
return "skipped";
}
return yield* traceReplayError(context, unknownActionMessage(action));
}
const decode = picksDecoders?.get(action) ?? buildPicksDecoder(actionDef.picks);
const decodedPicks = yield* Effect.mapError(decode(Object.fromEntries(nondetPicks)), (cause) => traceReplayError(context, `Failed to decode action picks: ${String(cause)}`, cause));
yield* withTraceReplayError(actionDef.handler(decodedPicks), context, (cause) => `Action handler failed: ${String(cause)}`);
return "dispatched";
});
//# sourceMappingURL=replay-dispatch.js.map