aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/sync/push.test.ts
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-12-31 15:46:41 +0900
committernsfisis <nsfisis@gmail.com>2025-12-31 15:46:41 +0900
commit3810450c20326998aef17c0acfcd5893e7b3ca20 (patch)
treeadf5434c2afe3b24ddada7066c697070be0d5950 /src/client/sync/push.test.ts
parentf3952a509b2d98a25cbb80c9ad091b3b471be52e (diff)
downloadkioku-3810450c20326998aef17c0acfcd5893e7b3ca20.tar.gz
kioku-3810450c20326998aef17c0acfcd5893e7b3ca20.tar.zst
kioku-3810450c20326998aef17c0acfcd5893e7b3ca20.zip
feat(crdt): replace LWW conflict resolution with Automerge merge
The ConflictResolver now defaults to CRDT strategy which uses Automerge to merge local and server documents during sync conflicts. This provides conflict-free resolution that preserves changes from both sides. Key changes: - Add CRDT merge methods for all entity types (deck, card, note, etc.) - Update resolve methods to accept optional CRDT binary data - Fall back to server_wins when CRDT data is unavailable or invalid - Add comprehensive tests for CRDT conflict resolution scenarios 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/client/sync/push.test.ts')
-rw-r--r--src/client/sync/push.test.ts5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/client/sync/push.test.ts b/src/client/sync/push.test.ts
index bce4652..19b39da 100644
--- a/src/client/sync/push.test.ts
+++ b/src/client/sync/push.test.ts
@@ -1140,7 +1140,10 @@ describe("generateCrdtChanges", () => {
expect(crdtChanges[0]?.documentId).toBe("deck:deck-1");
expect(crdtChanges[0]?.binary).toBeDefined();
// Verify it's valid base64
- expect(() => base64ToBinary(crdtChanges[0]!.binary)).not.toThrow();
+ const binary = crdtChanges[0]?.binary;
+ if (binary) {
+ expect(() => base64ToBinary(binary)).not.toThrow();
+ }
});
it("should generate CRDT changes for cards", () => {