// 只记录入队、不执行的假引擎(处理器由测试直接调服务函数)。 import { randomUUID } from "node:crypto"; import type { TaskEngine } from "@umt/tasks"; export interface Enqueued { task: string; input: unknown; key: string; } /** * dedupe:同一幂等键只记一次并返回 deduplicated(贴近真实引擎);缺省每次都记,runId 为 run-1、run-2… */ export function fakeEngine(opts: { dedupe?: boolean } = {}): TaskEngine & { enqueued: Enqueued[] } { const enqueued: Enqueued[] = []; const keys = new Set(); let n = 0; return { enqueued, async enqueue(task, input, o) { if (opts.dedupe) { const dup = keys.has(o.idempotencyKey); if (!dup) { keys.add(o.idempotencyKey); enqueued.push({ task, input, key: o.idempotencyKey }); } return { runId: randomUUID(), deduplicated: dup }; } enqueued.push({ task, input, key: o.idempotencyKey }); n++; return { runId: `run-${n}`, deduplicated: false }; }, async signal() { return { delivered: 0 }; }, async cancel() { return false; }, async get() { return null; }, async list() { return []; }, async startWorker() {}, async stop() {}, }; }