diff --git a/.quixos-subtree-source.json b/.quixos-subtree-source.json index 835d3f9..9eb6135 100644 --- a/.quixos-subtree-source.json +++ b/.quixos-subtree-source.json @@ -1,7 +1,7 @@ { "version": 1, "sourceRepo": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos.git", - "sourceCommit": "3a81f75f5da1be812d8bbc4dec9180c8d2b9fd0e", + "sourceCommit": "1ed3d2fd04afba64ffda2125175704a6fdb4f2ad", "sourcePath": "quixos-instance/packages/camino-datatypes", "exportName": "camino-datatypes", "mirrorRemote": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/camino-datatypes.git" diff --git a/dist/src/crdt-automerge.js b/dist/src/crdt-automerge.js index 57557a9..51fa578 100644 --- a/dist/src/crdt-automerge.js +++ b/dist/src/crdt-automerge.js @@ -65,7 +65,7 @@ export const encodeAutomergeFieldWrite = (value, type) => { if (isAutomergeFieldDoc(value)) { return saveAutomergeFieldDoc(value, type); } - return createAutomergeFieldValue(value, type); + throw new Error("CRDT field writes must use an Automerge document or Camino CRDT envelope"); }; export const normalizeAutomergeFieldValue = (value, type) => encodeAutomergeFieldWrite(value, type); export const materializeAutomergeFieldValue = (value, type) => loadAutomergeFieldDoc(value, type).value; @@ -80,4 +80,4 @@ export const mergeAutomergeFieldValues = ({ existing, incoming, type, }) => { materialized: mergedDoc.value, }; }; -//# sourceMappingURL=crdt-automerge.js.map \ No newline at end of file +//# sourceMappingURL=crdt-automerge.js.map diff --git a/src/crdt-automerge.ts b/src/crdt-automerge.ts index 00ca01b..d89071d 100644 --- a/src/crdt-automerge.ts +++ b/src/crdt-automerge.ts @@ -111,7 +111,9 @@ export const encodeAutomergeFieldWrite = ( if (isAutomergeFieldDoc(value)) { return saveAutomergeFieldDoc(value, type); } - return createAutomergeFieldValue(value, type); + throw new Error( + "CRDT field writes must use an Automerge document or Camino CRDT envelope", + ); }; export const normalizeAutomergeFieldValue = ( diff --git a/test/crdt-automerge.test.ts b/test/crdt-automerge.test.ts index 43bc4dc..95cfc0c 100644 --- a/test/crdt-automerge.test.ts +++ b/test/crdt-automerge.test.ts @@ -13,7 +13,7 @@ import { const type = "camino.CrdtJson"; -test("Automerge CRDT fields lift plain values into stored envelopes", () => { +test("Automerge CRDT fields explicitly create stored envelopes", () => { const stored = createAutomergeFieldValue({ title: "draft" }, type); assert.equal(stored.$caminoCrdtType, type); @@ -23,6 +23,13 @@ test("Automerge CRDT fields lift plain values into stored envelopes", () => { }); }); +test("Automerge CRDT field writes reject plain values", () => { + assert.throws( + () => encodeAutomergeFieldWrite({ title: "draft" }, type), + /CRDT field writes must use an Automerge document/, + ); +}); + test("Automerge CRDT fields encode rehydrated docs for writes", () => { const base = loadAutomergeFieldDoc( createAutomergeFieldValue({ title: "draft" }, type),