39 lines · 1.4 KB · TypeScript
RawDownload
import { Effect } from "effect"; import {  workflowRunnerConformance,  type WorkflowConformanceHarness,} from "../seams/workflow-runner.conformance";import { makeSqliteWorkflowRunner } from "./sqlite-workflow-runner";import { makeQuickjsWorkflowDriver } from "./quickjs-workflow-driver";import { makeInMemoryArtifactStore } from "../testing/index";import type { WorkflowBindings } from "../seams/workflow-runner"; // A synthetic monotonic clock so sleep-based suspension is deterministic. The// runner drives the author body inside the QuickJS sandbox via the real driver,// over an in-memory artifact store the harness publishes workflow sources into.workflowRunnerConformance(  "sqlite (in-memory) + quickjs driver",  (bindings: WorkflowBindings): WorkflowConformanceHarness => {    let t = 1_000_000;    const artifactStore = makeInMemoryArtifactStore();    const driver = makeQuickjsWorkflowDriver({ artifactStore });    const runner = makeSqliteWorkflowRunner({      path: ":memory:",      driver,      clock: () => (t += 1),    });    void bindings;    return {      runner,      publish: async (name, source) => {        const entryPath = `workflows/${name}.ts`;        const store = await Effect.runPromise(artifactStore.forScope("s"));        const meta = await Effect.runPromise(          store.commit(new Map([[entryPath, source]]), `publish ${name}`),        );        return { snapshotId: meta.id, entryPath };      },    };  },);