import type { Items, MutableRunData, NodeId, NodeIdRef, NodeOutputs, OutputPortKey, Item } from "../types"; export class InMemoryRunData implements MutableRunData { private readonly byNode = new Map(); constructor(initial?: Record) { if (initial) { for (const [nodeId, outputs] of Object.entries(initial)) this.byNode.set(nodeId, outputs); } } setOutputs(nodeId: NodeId, outputs: NodeOutputs): void { this.byNode.set(nodeId, outputs); } getOutputs(nodeId: NodeId): NodeOutputs | undefined { return this.byNode.get(nodeId); } getOutputItems(nodeId: NodeId | NodeIdRef, output: OutputPortKey = "main"): Items { return (this.byNode.get(nodeId)?.[output] ?? []) as Items; } getOutputItem( nodeId: NodeId | NodeIdRef, itemIndex: number, output: OutputPortKey = "main", ): Item | undefined { return this.getOutputItems(nodeId, output)[itemIndex]; } dump(): Record { const out: Record = {}; for (const [nodeId, outputs] of this.byNode.entries()) out[nodeId] = outputs; return out; } }