UNPKG

@firfi/quint-connect

Version:

Model-based testing framework connecting Quint specifications to TypeScript implementations

19 lines 1.18 kB
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