import test from "node:test"; import assert from "node:assert/strict"; import { relationshipMap, relationshipList, relationshipSet } from "../dist/index.js"; import { referenceFromWire } from "../dist/references.js"; test("relationship helpers preserve handles and require explicit collection revisions", async () => { let current = { revision: 0n, entries: [] }, serial = 0; const port = { collection: async () => ({ revision: current.revision, entries: current.entries.map((entry) => ({ ...entry })) }), replace: async (entries, revision) => { assert.equal(revision, current.revision); current = { revision: revision + 1n, entries: entries.map((entry) => ({ ...entry, edgeId: entry.edgeId ?? `edge:${++serial}` })), }; return port.collection(); }, }; const a = referenceFromWire("obj:a"), b = referenceFromWire("obj:b"); const map = relationshipMap(port); await map.set("a1", a, 0n); assert.equal((await map.get("a1")).value.equals(a), true); await assert.rejects(() => map.set("b1", b, 0n), /STALE_COLLECTION/); await map.delete("a1", 1n); const list = relationshipList(port); const inserted = await list.insert(0, a, 2n); await list.insert(1, b, 3n); const moved = await list.move(inserted.entries[0].edgeId, 1, 4n); assert.equal(moved.entries[1].target.equals(a), true); const set = relationshipSet(port); const unchanged = await set.add(referenceFromWire("obj:a"), 5n); assert.equal(unchanged.revision, 5n); });