Send incremental CRDT changes from package runtimes

This commit is contained in:
Timothy J. Aveni
2026-09-03 09:41:08 -07:00
parent 8fc1060b65
commit 013d4cf3c8
7 changed files with 21 additions and 10 deletions
+6 -2
View File
@@ -4,7 +4,7 @@ import { randomUUID } from "node:crypto";
import { create } from "@bufbuild/protobuf";
import { createClient, } from "@connectrpc/connect";
import * as Automerge from "@automerge/automerge";
import { createAutomergeFieldValue, encodeAutomergeFieldWrite, loadAutomergeFieldDoc, } from "@quixos/camino-datatypes/crdt-automerge";
import { createAutomergeFieldChanges, createAutomergeFieldValue, encodeAutomergeFieldWrite, loadAutomergeFieldDoc, } from "@quixos/camino-datatypes/crdt-automerge";
import { connectNodeAdapter, createConnectTransport, } from "@connectrpc/connect-node";
import { CaminoService, CrdtValueSchema, FieldValueSourceSchema, ListValueSchema, NullValueSchema, ObjectValueSchema, RefValueSchema, ValueSchema, ValueSourceSchema, } from "./camino/api_pb.js";
import { DerivedDependencySchema, HandshakeResponseSchema, InvokeResponseSchema, PackageRuntime, WatchEventSchema, WatchRequestSchema, } from "./quixos/runtime_pb.js";
@@ -537,7 +537,11 @@ export const createCrdtField = (camino, objectId, fieldName, fieldType) => {
const next = Automerge.change(current, (doc) => {
fn(doc);
});
await field.set(next);
await camino.setField({
objectId,
fieldName,
value: jsToProtoValue(createAutomergeFieldChanges(current, next, fieldType)),
});
return next;
},
async replaceFromJson(value) {