@vuer-ai/vuer-rtc 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/client/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtE;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,GAAG,WAAW,CAiB7F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,SAAS,EAAE,GACtB,UAAU,CA4BZ;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,GAAG,WAAW,CAqCrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CA4BjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAa3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAO1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,WAAW,CA8BjF;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAoDxF;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAwCxF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CA0BvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,EAAE,CAIpE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,EAAE,GACrB,WAAW,CAqCb"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/client/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtE;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,GAAG,WAAW,CAkB7F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,SAAS,EAAE,GACtB,UAAU,CA4BZ;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,GAAG,WAAW,CAqCrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CA6BjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAa3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAO1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,WAAW,CA8BjF;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAqDxF;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAyCxF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CA2BvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,EAAE,CAIpE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,EAAE,GACrB,WAAW,CAqCb"}
@@ -23,6 +23,7 @@ export function createInitialState(sessionId, initialSnapshot) {
23
23
  const snapshot = initialSnapshot ?? {
24
24
  graph: emptyGraph,
25
25
  vectorClock: {},
26
+ lamportTime: 0,
26
27
  journalIndex: 0,
27
28
  };
28
29
  return {
@@ -30,7 +31,7 @@ export function createInitialState(sessionId, initialSnapshot) {
30
31
  journal: [],
31
32
  edits: { ops: [], startGraph: null },
32
33
  snapshot,
33
- lamportTime: 0,
34
+ lamportTime: snapshot.lamportTime ?? 0,
34
35
  vectorClock: clockManager.create(sessionId),
35
36
  sessionId,
36
37
  };
@@ -110,11 +111,12 @@ export function commitEdits(state, _description) {
110
111
  return { state, msg: null };
111
112
  }
112
113
  const newClock = clockManager.increment(state.vectorClock, state.sessionId);
114
+ const newLamport = state.lamportTime + 1;
113
115
  const msg = {
114
- id: generateUUID(),
116
+ id: `${state.sessionId}:${newLamport}`,
115
117
  sessionId: state.sessionId,
116
118
  clock: newClock,
117
- lamportTime: state.lamportTime + 1,
119
+ lamportTime: newLamport,
118
120
  timestamp: Date.now(),
119
121
  ops: [...state.edits.ops],
120
122
  };
@@ -214,11 +216,12 @@ export function undo(state) {
214
216
  }
215
217
  // Create undo message
216
218
  const newClock = clockManager.increment(currentState.vectorClock, currentState.sessionId);
219
+ const newLamport = currentState.lamportTime + 1;
217
220
  const undoMsg = {
218
- id: generateUUID(),
221
+ id: `${currentState.sessionId}:${newLamport}`,
219
222
  sessionId: currentState.sessionId,
220
223
  clock: newClock,
221
- lamportTime: currentState.lamportTime + 1,
224
+ lamportTime: newLamport,
222
225
  timestamp: Date.now(),
223
226
  ops: [{ otype: 'meta.undo', key: '_meta', path: '_meta', targetMsgId }],
224
227
  };
@@ -252,11 +255,12 @@ export function redo(state) {
252
255
  return { state, msg: null };
253
256
  // Create redo message
254
257
  const newClock = clockManager.increment(state.vectorClock, state.sessionId);
258
+ const newLamport = state.lamportTime + 1;
255
259
  const redoMsg = {
256
- id: generateUUID(),
260
+ id: `${state.sessionId}:${newLamport}`,
257
261
  sessionId: state.sessionId,
258
262
  clock: newClock,
259
- lamportTime: state.lamportTime + 1,
263
+ lamportTime: newLamport,
260
264
  timestamp: Date.now(),
261
265
  ops: [{ otype: 'meta.redo', key: '_meta', path: '_meta', targetMsgId: lastDeleted.msg.id }],
262
266
  };
@@ -300,6 +304,7 @@ export function compact(state) {
300
304
  draft.snapshot = {
301
305
  graph: snapshotGraph,
302
306
  vectorClock: draft.journal[lastAckedIdx].msg.clock,
307
+ lamportTime: draft.journal[lastAckedIdx].msg.lamportTime,
303
308
  journalIndex: draft.snapshot.journalIndex + lastAckedIdx + 1,
304
309
  };
305
310
  // Remove compacted entries
@@ -344,7 +349,7 @@ export function getPendingCount(state) {
344
349
  export function initFromServer(sessionId, snapshot, journal) {
345
350
  let graph = snapshot.graph;
346
351
  const journalEntries = [];
347
- let maxLamport = 0;
352
+ let maxLamport = snapshot.lamportTime ?? 0;
348
353
  let mergedClock = snapshot.vectorClock;
349
354
  for (const msg of journal) {
350
355
  // Process meta ops
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/client/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/client/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAoB,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,eAA0B;IAC9E,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,eAAe,IAAI;QAClC,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;KAChB,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACpC,QAAQ;QACR,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,CAAC;QACtC,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC;QAC3C,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,OAAuB,EACvB,UAAuB;IAEvB,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE3B,oDAAoD;IACpD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,SAAS;YAAE,SAAS;QAE9B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YAC7B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE;oBACxB,SAAS,EAAE,OAAO;oBAClB,KAAK,EAAE,EAAE;oBACT,WAAW,EAAE,CAAC;oBACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB,EAAE,EAAa;IACtD,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;QAC5B,gDAAgD;QAChD,wEAAwE;QACxE,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QACvC,CAAC;QAED,yBAAyB;QACzB,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAC3C,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,CAClC,CAAC;QAEF,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,IAAI,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1D,qBAAqB;gBACrB,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAG,QAAgB,CAAC,KAAK,EAAG,EAAU,CAAC,KAAK,CAAC,CAAC;gBACtF,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAe,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACN,UAAU;gBACV,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QAED,0CAA0C;QAC1C,oDAAoD;QACpD,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,WAAW;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAkB,EAClB,YAAqB;IAErB,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;IACzC,MAAM,GAAG,GAAgB;QACvB,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,UAAU,EAAE;QACtC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;KAC1B,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;QACtC,kCAAkC;QAClC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAExC,oBAAoB;QACpB,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAE5C,gBAAgB;QAChB,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QACpC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;QAC5B,wBAAwB;QACxB,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC3B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;QACvC,CAAC;QACD,oBAAoB;QACpB,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB,EAAE,KAAa;IAC3D,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;QAC1D,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkB,EAAE,GAAgB;IAClE,kBAAkB;IAClB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;QAC5B,oDAAoD;QACpD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvC,+BAA+B;QAC/B,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,EAAE,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAI,EAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;gBACjE,IAAI,MAAM;oBAAE,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;YAC/C,CAAC;iBAAM,IAAI,EAAE,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAI,EAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;gBACjE,IAAI,MAAM;oBAAE,OAAO,MAAM,CAAC,SAAS,CAAC;YACtC,CAAC;QACH,CAAC;QAED,eAAe;QACf,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACrE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAEjE,gBAAgB;QAChB,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,KAAkB;IACrC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,WAAmB,CAAC;IAExB,8DAA8D;IAC9D,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACtC,YAAY,GAAG,SAAS,CAAC;QACzB,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC;aACzC,OAAO,EAAE;aACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,YAAY,CAAC,SAAS,CAAC,CAAC;QAEzE,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAC3D,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,CAAC;IAED,sBAAsB;IACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC;IAChD,MAAM,OAAO,GAAgB;QAC3B,EAAE,EAAE,GAAG,YAAY,CAAC,SAAS,IAAI,UAAU,EAAE;QAC7C,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;KACxE,CAAC;IAEF,gBAAgB;IAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;QAC7C,8BAA8B;QAC9B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjD,iDAAiD;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QACjE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACrC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAE,mDAAmD;QAC1E,CAAC;QAED,gBAAgB;QAChB,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;QAE7B,gBAAgB;QAChB,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,KAAkB;IACrC,8CAA8C;IAC9C,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;SACnC,OAAO,EAAE;SACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAEjE,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAE9C,sBAAsB;IACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;IACzC,MAAM,OAAO,GAAgB;QAC3B,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,UAAU,EAAE;QACtC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;KAC5F,CAAC;IAEF,gBAAgB;IAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;QACtC,8BAA8B;QAC9B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjD,oDAAoD;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxE,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,SAAS,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAE,mDAAmD;QAC1E,CAAC;QAED,gBAAgB;QAChB,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;QAE7B,gBAAgB;QAChB,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAkB;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnC,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;QAC5B,yDAAyD;QACzD,IAAI,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,SAAS;gBAAE,SAAS;YAE9B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,aAAa,GAAG,YAAY,CAAC,aAAa,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,KAAK,CAAC,QAAQ,GAAG;YACf,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,KAAK;YAClD,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,WAAW;YACxD,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,YAAY,GAAG,CAAC;SAC7D,CAAC;QAEF,2BAA2B;QAC3B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,OAAO,KAAK,CAAC,OAAO;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,QAAkB,EAClB,OAAsB;IAEtB,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC3B,MAAM,cAAc,GAAmB,EAAE,CAAC;IAC1C,IAAI,UAAU,GAAG,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC;IAC3C,IAAI,WAAW,GAAgB,QAAQ,CAAC,WAAW,CAAC;IAEpD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,mBAAmB;QACnB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,EAAE,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAI,EAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;gBAClE,IAAI,MAAM;oBAAE,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;YAC/C,CAAC;iBAAM,IAAI,EAAE,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAI,EAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;gBAClE,IAAI,MAAM;oBAAE,OAAO,MAAM,CAAC,SAAS,CAAC;YACtC,CAAC;QACH,CAAC;QAED,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACnD,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,gBAAgB;IAChB,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;IAEnD,OAAO;QACL,KAAK;QACL,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACpC,QAAQ;QACR,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC;QAC3D,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -30,6 +30,7 @@ export interface EditBuffer {
30
30
  export interface Snapshot {
31
31
  graph: SceneGraph;
32
32
  vectorClock: VectorClock;
33
+ lamportTime: number;
33
34
  journalIndex: number;
34
35
  }
35
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,WAAW,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,SAAS,EAAE,CAAC;IACjB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAE1B,KAAK,EAAE,UAAU,CAAC;IAGlB,OAAO,EAAE,YAAY,EAAE,CAAC;IAGxB,KAAK,EAAE,UAAU,CAAC;IAGlB,QAAQ,EAAE,QAAQ,CAAC;IAGnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAEzB,QAAQ,EAAE,MAAM,WAAW,CAAC;IAC5B,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAGhD,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9B,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,CAAC;IAGrD,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAG7B,IAAI,EAAE,MAAM;QAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE,CAAC;IACxC,IAAI,EAAE,MAAM;QAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE,CAAC;IAGxC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,WAAW,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,SAAS,EAAE,CAAC;IACjB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAE1B,KAAK,EAAE,UAAU,CAAC;IAGlB,OAAO,EAAE,YAAY,EAAE,CAAC;IAGxB,KAAK,EAAE,UAAU,CAAC;IAGlB,QAAQ,EAAE,QAAQ,CAAC;IAGnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAEzB,QAAQ,EAAE,MAAM,WAAW,CAAC;IAC5B,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAGhD,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9B,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,CAAC;IAGrD,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAG7B,IAAI,EAAE,MAAM;QAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE,CAAC;IACxC,IAAI,EAAE,MAAM;QAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE,CAAC;IAGxC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB"}
@@ -1,30 +1,42 @@
1
1
  /**
2
- * ConflictResolver - Schema-based property conflict resolution
2
+ * ConflictResolver - Operation-based property conflict resolution
3
3
  *
4
4
  * Merges concurrent property updates based on:
5
- * - Property schema (dtype + operation)
5
+ * - Operation type (otype) which encodes dtype.operation
6
6
  * - DType merge functions
7
+ *
8
+ * Schema-less: dtype and operation are derived from otype.
7
9
  */
8
10
  import { type ValueWithMeta } from './DType.js';
11
+ /**
12
+ * Parse otype string into dtype and operation
13
+ *
14
+ * @example
15
+ * parseOtype('vector3.add') // { dtype: 'vector3', operation: 'add' }
16
+ * parseOtype('number.set') // { dtype: 'number', operation: 'set' }
17
+ */
18
+ export declare function parseOtype(otype: string): {
19
+ dtype: string;
20
+ operation: string;
21
+ };
9
22
  export declare class ConflictResolver {
10
23
  /**
11
24
  * Merge a single property from multiple concurrent updates
12
25
  *
13
- * @param propertyName - Name of the property being merged
26
+ * @param otype - Operation type (e.g., 'vector3.add', 'number.set')
14
27
  * @param values - Array of values with metadata
15
- * @param operationHint - Optional operation override from UPDATE operation
16
28
  * @returns Merged value
17
29
  */
18
- mergeProperty<T = any>(propertyName: string, values: ValueWithMeta<T>[], operationHint?: string): T;
30
+ mergeProperty<T = any>(otype: string, values: ValueWithMeta<T>[]): T;
19
31
  /**
20
32
  * Merge multiple properties from concurrent updates
21
33
  *
22
- * @param updates - Array of property updates with metadata and operation hints
34
+ * @param updates - Array of property updates with metadata
23
35
  * @returns Merged properties
24
36
  */
25
37
  mergeProperties(updates: Array<{
26
38
  properties: Record<string, any>;
27
- operations?: Record<string, string>;
39
+ otypes: Record<string, string>;
28
40
  lamportTime: number;
29
41
  sessionId: string;
30
42
  }>): Record<string, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"ConflictResolver.d.ts","sourceRoot":"","sources":["../../src/state/ConflictResolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAS,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAGvD,qBAAa,gBAAgB;IAC3B;;;;;;;OAOG;IACH,aAAa,CAAC,CAAC,GAAG,GAAG,EACnB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAC1B,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC;IAkCJ;;;;;OAKG;IACH,eAAe,CACb,OAAO,EAAE,KAAK,CAAC;QACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,GACD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAqCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CA6FzB"}
1
+ {"version":3,"file":"ConflictResolver.d.ts","sourceRoot":"","sources":["../../src/state/ConflictResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAS,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAS9E;AAED,qBAAa,gBAAgB;IAC3B;;;;;;OAMG;IACH,aAAa,CAAC,CAAC,GAAG,GAAG,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GACzB,CAAC;IAwBJ;;;;;OAKG;IACH,eAAe,CACb,OAAO,EAAE,KAAK,CAAC;QACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,GACD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAkGzB"}
@@ -1,41 +1,50 @@
1
1
  /**
2
- * ConflictResolver - Schema-based property conflict resolution
2
+ * ConflictResolver - Operation-based property conflict resolution
3
3
  *
4
4
  * Merges concurrent property updates based on:
5
- * - Property schema (dtype + operation)
5
+ * - Operation type (otype) which encodes dtype.operation
6
6
  * - DType merge functions
7
+ *
8
+ * Schema-less: dtype and operation are derived from otype.
7
9
  */
8
10
  import { DType } from './DType.js';
9
- import { getPropertySchema, isImmutable } from './Schema.js';
11
+ /**
12
+ * Parse otype string into dtype and operation
13
+ *
14
+ * @example
15
+ * parseOtype('vector3.add') // { dtype: 'vector3', operation: 'add' }
16
+ * parseOtype('number.set') // { dtype: 'number', operation: 'set' }
17
+ */
18
+ export function parseOtype(otype) {
19
+ const dotIndex = otype.indexOf('.');
20
+ if (dotIndex === -1) {
21
+ return { dtype: otype, operation: 'set' };
22
+ }
23
+ return {
24
+ dtype: otype.slice(0, dotIndex),
25
+ operation: otype.slice(dotIndex + 1),
26
+ };
27
+ }
10
28
  export class ConflictResolver {
11
29
  /**
12
30
  * Merge a single property from multiple concurrent updates
13
31
  *
14
- * @param propertyName - Name of the property being merged
32
+ * @param otype - Operation type (e.g., 'vector3.add', 'number.set')
15
33
  * @param values - Array of values with metadata
16
- * @param operationHint - Optional operation override from UPDATE operation
17
34
  * @returns Merged value
18
35
  */
19
- mergeProperty(propertyName, values, operationHint) {
36
+ mergeProperty(otype, values) {
20
37
  if (values.length === 0) {
21
- throw new Error(`Cannot merge empty values for property: ${propertyName}`);
38
+ throw new Error(`Cannot merge empty values for otype: ${otype}`);
22
39
  }
23
40
  if (values.length === 1) {
24
41
  return values[0].value;
25
42
  }
26
- // Get schema for this property
27
- const schema = getPropertySchema(propertyName);
28
- // Immutable properties: return earliest value
29
- if (isImmutable(propertyName)) {
30
- const sorted = [...values].sort((a, b) => a.lamportTime - b.lamportTime);
31
- return sorted[0].value;
32
- }
33
- // Use operation hint if provided, otherwise use schema
34
- const operation = operationHint || schema.operation;
43
+ const { dtype, operation } = parseOtype(otype);
35
44
  // Get merge function based on dtype and operation
36
- const mergeFn = this.getMergeFunction(schema.dtype, operation);
45
+ const mergeFn = this.getMergeFunction(dtype, operation);
37
46
  if (!mergeFn) {
38
- console.warn(`No merge function for dtype=${schema.dtype} operation=${operation}, defaulting to LWW`);
47
+ console.warn(`No merge function for dtype=${dtype} operation=${operation}, defaulting to LWW`);
39
48
  return DType.string.set(values);
40
49
  }
41
50
  return mergeFn(values);
@@ -43,17 +52,15 @@ export class ConflictResolver {
43
52
  /**
44
53
  * Merge multiple properties from concurrent updates
45
54
  *
46
- * @param updates - Array of property updates with metadata and operation hints
55
+ * @param updates - Array of property updates with metadata
47
56
  * @returns Merged properties
48
57
  */
49
58
  mergeProperties(updates) {
50
59
  // Group values by property name
51
60
  const valuesByProperty = new Map();
52
- const operationHints = new Map();
61
+ const otypeByProperty = new Map();
53
62
  for (const update of updates) {
54
63
  for (const [key, value] of Object.entries(update.properties)) {
55
- if (key === 'operations')
56
- continue; // Skip operations field
57
64
  if (!valuesByProperty.has(key)) {
58
65
  valuesByProperty.set(key, []);
59
66
  }
@@ -62,17 +69,17 @@ export class ConflictResolver {
62
69
  lamportTime: update.lamportTime,
63
70
  sessionId: update.sessionId,
64
71
  });
65
- // Store operation hint if provided
66
- if (update.operations?.[key]) {
67
- operationHints.set(key, update.operations[key]);
72
+ // Store otype for this property
73
+ if (update.otypes?.[key]) {
74
+ otypeByProperty.set(key, update.otypes[key]);
68
75
  }
69
76
  }
70
77
  }
71
78
  // Merge each property
72
79
  const result = {};
73
80
  for (const [propertyName, values] of valuesByProperty.entries()) {
74
- const operationHint = operationHints.get(propertyName);
75
- result[propertyName] = this.mergeProperty(propertyName, values, operationHint);
81
+ const otype = otypeByProperty.get(propertyName) || 'any.set';
82
+ result[propertyName] = this.mergeProperty(otype, values);
76
83
  }
77
84
  return result;
78
85
  }
@@ -154,9 +161,13 @@ export class ConflictResolver {
154
161
  case 'set':
155
162
  return DType.object.set;
156
163
  case 'lww-per-key':
164
+ case 'merge':
157
165
  return DType.object.lwwPerKey;
158
166
  }
159
167
  break;
168
+ case 'ref':
169
+ // References use LWW semantics
170
+ return DType.string.set;
160
171
  case 'any':
161
172
  // Default to LWW for 'any' type
162
173
  return DType.string.set;
@@ -1 +1 @@
1
- {"version":3,"file":"ConflictResolver.js","sourceRoot":"","sources":["../../src/state/ConflictResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConflictResolver.js","sourceRoot":"","sources":["../../src/state/ConflictResolver.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@
2
2
  * State module exports
3
3
  *
4
4
  * - VectorClock: Used by client for causal ordering
5
- * - DType, Schema, ConflictResolver: Server-side conflict resolution for concurrent updates
5
+ * - DType, ConflictResolver: Server-side conflict resolution for concurrent updates
6
+ *
7
+ * Schema-less design: dtype and operation are derived from otype (e.g., 'vector3.add').
6
8
  */
7
9
  export { VectorClockManager, type VectorClock } from './VectorClock.js';
8
10
  export { DType, type ValueWithMeta, type MergeFn } from './DType.js';
9
- export { sceneNodeSchema, getPropertySchema, isImmutable, type PropertySchema } from './Schema.js';
10
- export { ConflictResolver } from './ConflictResolver.js';
11
+ export { ConflictResolver, parseOtype } from './ConflictResolver.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EAAE,KAAK,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGxE,OAAO,EAAE,KAAK,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
@@ -2,12 +2,13 @@
2
2
  * State module exports
3
3
  *
4
4
  * - VectorClock: Used by client for causal ordering
5
- * - DType, Schema, ConflictResolver: Server-side conflict resolution for concurrent updates
5
+ * - DType, ConflictResolver: Server-side conflict resolution for concurrent updates
6
+ *
7
+ * Schema-less design: dtype and operation are derived from otype (e.g., 'vector3.add').
6
8
  */
7
9
  // Vector clock (used by client and server)
8
10
  export { VectorClockManager } from './VectorClock.js';
9
11
  // Server-side conflict resolution utilities
10
12
  export { DType } from './DType.js';
11
- export { sceneNodeSchema, getPropertySchema, isImmutable } from './Schema.js';
12
- export { ConflictResolver } from './ConflictResolver.js';
13
+ export { ConflictResolver, parseOtype } from './ConflictResolver.js';
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,2CAA2C;AAC3C,OAAO,EAAE,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AAExE,4CAA4C;AAC5C,OAAO,EAAE,KAAK,EAAoC,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAuB,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,2CAA2C;AAC3C,OAAO,EAAE,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AAExE,4CAA4C;AAC5C,OAAO,EAAE,KAAK,EAAoC,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vuer-ai/vuer-rtc",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "description": "CRDT-based real-time collaborative data structures",
6
6
  "main": "dist/index.js",
@@ -29,6 +29,7 @@ export function createInitialState(sessionId: string, initialSnapshot?: Snapshot
29
29
  const snapshot = initialSnapshot ?? {
30
30
  graph: emptyGraph,
31
31
  vectorClock: {},
32
+ lamportTime: 0,
32
33
  journalIndex: 0,
33
34
  };
34
35
 
@@ -37,7 +38,7 @@ export function createInitialState(sessionId: string, initialSnapshot?: Snapshot
37
38
  journal: [],
38
39
  edits: { ops: [], startGraph: null },
39
40
  snapshot,
40
- lamportTime: 0,
41
+ lamportTime: snapshot.lamportTime ?? 0,
41
42
  vectorClock: clockManager.create(sessionId),
42
43
  sessionId,
43
44
  };
@@ -134,11 +135,12 @@ export function commitEdits(
134
135
  }
135
136
 
136
137
  const newClock = clockManager.increment(state.vectorClock, state.sessionId);
138
+ const newLamport = state.lamportTime + 1;
137
139
  const msg: CRDTMessage = {
138
- id: generateUUID(),
140
+ id: `${state.sessionId}:${newLamport}`,
139
141
  sessionId: state.sessionId,
140
142
  clock: newClock,
141
- lamportTime: state.lamportTime + 1,
143
+ lamportTime: newLamport,
142
144
  timestamp: Date.now(),
143
145
  ops: [...state.edits.ops],
144
146
  };
@@ -248,11 +250,12 @@ export function undo(state: ClientState): { state: ClientState; msg: CRDTMessage
248
250
 
249
251
  // Create undo message
250
252
  const newClock = clockManager.increment(currentState.vectorClock, currentState.sessionId);
253
+ const newLamport = currentState.lamportTime + 1;
251
254
  const undoMsg: CRDTMessage = {
252
- id: generateUUID(),
255
+ id: `${currentState.sessionId}:${newLamport}`,
253
256
  sessionId: currentState.sessionId,
254
257
  clock: newClock,
255
- lamportTime: currentState.lamportTime + 1,
258
+ lamportTime: newLamport,
256
259
  timestamp: Date.now(),
257
260
  ops: [{ otype: 'meta.undo', key: '_meta', path: '_meta', targetMsgId }],
258
261
  };
@@ -293,11 +296,12 @@ export function redo(state: ClientState): { state: ClientState; msg: CRDTMessage
293
296
 
294
297
  // Create redo message
295
298
  const newClock = clockManager.increment(state.vectorClock, state.sessionId);
299
+ const newLamport = state.lamportTime + 1;
296
300
  const redoMsg: CRDTMessage = {
297
- id: generateUUID(),
301
+ id: `${state.sessionId}:${newLamport}`,
298
302
  sessionId: state.sessionId,
299
303
  clock: newClock,
300
- lamportTime: state.lamportTime + 1,
304
+ lamportTime: newLamport,
301
305
  timestamp: Date.now(),
302
306
  ops: [{ otype: 'meta.redo', key: '_meta', path: '_meta', targetMsgId: lastDeleted.msg.id }],
303
307
  };
@@ -348,6 +352,7 @@ export function compact(state: ClientState): ClientState {
348
352
  draft.snapshot = {
349
353
  graph: snapshotGraph,
350
354
  vectorClock: draft.journal[lastAckedIdx].msg.clock,
355
+ lamportTime: draft.journal[lastAckedIdx].msg.lamportTime,
351
356
  journalIndex: draft.snapshot.journalIndex + lastAckedIdx + 1,
352
357
  };
353
358
 
@@ -401,7 +406,7 @@ export function initFromServer(
401
406
  ): ClientState {
402
407
  let graph = snapshot.graph;
403
408
  const journalEntries: JournalEntry[] = [];
404
- let maxLamport = 0;
409
+ let maxLamport = snapshot.lamportTime ?? 0;
405
410
  let mergedClock: VectorClock = snapshot.vectorClock;
406
411
 
407
412
  for (const msg of journal) {
@@ -34,6 +34,7 @@ export interface EditBuffer {
34
34
  export interface Snapshot {
35
35
  graph: SceneGraph;
36
36
  vectorClock: VectorClock;
37
+ lamportTime: number; // Max lamport time baked in
37
38
  journalIndex: number; // How many entries are baked in
38
39
  }
39
40
 
@@ -1,54 +1,61 @@
1
1
  /**
2
- * ConflictResolver - Schema-based property conflict resolution
2
+ * ConflictResolver - Operation-based property conflict resolution
3
3
  *
4
4
  * Merges concurrent property updates based on:
5
- * - Property schema (dtype + operation)
5
+ * - Operation type (otype) which encodes dtype.operation
6
6
  * - DType merge functions
7
+ *
8
+ * Schema-less: dtype and operation are derived from otype.
7
9
  */
8
10
 
9
11
  import { DType, type ValueWithMeta } from './DType.js';
10
- import { getPropertySchema, isImmutable } from './Schema.js';
12
+
13
+ /**
14
+ * Parse otype string into dtype and operation
15
+ *
16
+ * @example
17
+ * parseOtype('vector3.add') // { dtype: 'vector3', operation: 'add' }
18
+ * parseOtype('number.set') // { dtype: 'number', operation: 'set' }
19
+ */
20
+ export function parseOtype(otype: string): { dtype: string; operation: string } {
21
+ const dotIndex = otype.indexOf('.');
22
+ if (dotIndex === -1) {
23
+ return { dtype: otype, operation: 'set' };
24
+ }
25
+ return {
26
+ dtype: otype.slice(0, dotIndex),
27
+ operation: otype.slice(dotIndex + 1),
28
+ };
29
+ }
11
30
 
12
31
  export class ConflictResolver {
13
32
  /**
14
33
  * Merge a single property from multiple concurrent updates
15
34
  *
16
- * @param propertyName - Name of the property being merged
35
+ * @param otype - Operation type (e.g., 'vector3.add', 'number.set')
17
36
  * @param values - Array of values with metadata
18
- * @param operationHint - Optional operation override from UPDATE operation
19
37
  * @returns Merged value
20
38
  */
21
39
  mergeProperty<T = any>(
22
- propertyName: string,
23
- values: ValueWithMeta<T>[],
24
- operationHint?: string
40
+ otype: string,
41
+ values: ValueWithMeta<T>[]
25
42
  ): T {
26
43
  if (values.length === 0) {
27
- throw new Error(`Cannot merge empty values for property: ${propertyName}`);
44
+ throw new Error(`Cannot merge empty values for otype: ${otype}`);
28
45
  }
29
46
 
30
47
  if (values.length === 1) {
31
48
  return values[0].value;
32
49
  }
33
50
 
34
- // Get schema for this property
35
- const schema = getPropertySchema(propertyName);
36
-
37
- // Immutable properties: return earliest value
38
- if (isImmutable(propertyName)) {
39
- const sorted = [...values].sort((a, b) => a.lamportTime - b.lamportTime);
40
- return sorted[0].value;
41
- }
42
-
43
- // Use operation hint if provided, otherwise use schema
44
- const operation = operationHint || schema.operation;
51
+ const { dtype, operation } = parseOtype(otype);
45
52
 
46
53
  // Get merge function based on dtype and operation
47
- const mergeFn = this.getMergeFunction(schema.dtype, operation);
54
+ const mergeFn = this.getMergeFunction(dtype, operation);
48
55
 
49
56
  if (!mergeFn) {
50
57
  console.warn(
51
- `No merge function for dtype=${schema.dtype} operation=${operation}, defaulting to LWW`
58
+ `No merge function for dtype=${dtype} operation=${operation}, defaulting to LWW`
52
59
  );
53
60
  return DType.string.set(values as any) as any;
54
61
  }
@@ -59,25 +66,23 @@ export class ConflictResolver {
59
66
  /**
60
67
  * Merge multiple properties from concurrent updates
61
68
  *
62
- * @param updates - Array of property updates with metadata and operation hints
69
+ * @param updates - Array of property updates with metadata
63
70
  * @returns Merged properties
64
71
  */
65
72
  mergeProperties(
66
73
  updates: Array<{
67
74
  properties: Record<string, any>;
68
- operations?: Record<string, string>; // Operation hints per property
75
+ otypes: Record<string, string>; // otype per property
69
76
  lamportTime: number;
70
77
  sessionId: string;
71
78
  }>
72
79
  ): Record<string, any> {
73
80
  // Group values by property name
74
81
  const valuesByProperty = new Map<string, ValueWithMeta[]>();
75
- const operationHints = new Map<string, string>();
82
+ const otypeByProperty = new Map<string, string>();
76
83
 
77
84
  for (const update of updates) {
78
85
  for (const [key, value] of Object.entries(update.properties)) {
79
- if (key === 'operations') continue; // Skip operations field
80
-
81
86
  if (!valuesByProperty.has(key)) {
82
87
  valuesByProperty.set(key, []);
83
88
  }
@@ -88,9 +93,9 @@ export class ConflictResolver {
88
93
  sessionId: update.sessionId,
89
94
  });
90
95
 
91
- // Store operation hint if provided
92
- if (update.operations?.[key]) {
93
- operationHints.set(key, update.operations[key]);
96
+ // Store otype for this property
97
+ if (update.otypes?.[key]) {
98
+ otypeByProperty.set(key, update.otypes[key]);
94
99
  }
95
100
  }
96
101
  }
@@ -99,8 +104,8 @@ export class ConflictResolver {
99
104
  const result: Record<string, any> = {};
100
105
 
101
106
  for (const [propertyName, values] of valuesByProperty.entries()) {
102
- const operationHint = operationHints.get(propertyName);
103
- result[propertyName] = this.mergeProperty(propertyName, values, operationHint);
107
+ const otype = otypeByProperty.get(propertyName) || 'any.set';
108
+ result[propertyName] = this.mergeProperty(otype, values);
104
109
  }
105
110
 
106
111
  return result;
@@ -191,10 +196,15 @@ export class ConflictResolver {
191
196
  case 'set':
192
197
  return DType.object.set;
193
198
  case 'lww-per-key':
199
+ case 'merge':
194
200
  return DType.object.lwwPerKey;
195
201
  }
196
202
  break;
197
203
 
204
+ case 'ref':
205
+ // References use LWW semantics
206
+ return DType.string.set;
207
+
198
208
  case 'any':
199
209
  // Default to LWW for 'any' type
200
210
  return DType.string.set as any;
@@ -2,7 +2,9 @@
2
2
  * State module exports
3
3
  *
4
4
  * - VectorClock: Used by client for causal ordering
5
- * - DType, Schema, ConflictResolver: Server-side conflict resolution for concurrent updates
5
+ * - DType, ConflictResolver: Server-side conflict resolution for concurrent updates
6
+ *
7
+ * Schema-less design: dtype and operation are derived from otype (e.g., 'vector3.add').
6
8
  */
7
9
 
8
10
  // Vector clock (used by client and server)
@@ -10,5 +12,4 @@ export { VectorClockManager, type VectorClock } from './VectorClock.js';
10
12
 
11
13
  // Server-side conflict resolution utilities
12
14
  export { DType, type ValueWithMeta, type MergeFn } from './DType.js';
13
- export { sceneNodeSchema, getPropertySchema, isImmutable, type PropertySchema } from './Schema.js';
14
- export { ConflictResolver } from './ConflictResolver.js';
15
+ export { ConflictResolver, parseOtype } from './ConflictResolver.js';
@@ -1,236 +0,0 @@
1
- /**
2
- * Schema - Property schema definitions
3
- *
4
- * Defines dtype and operation for each property,
5
- * determining how concurrent updates are merged.
6
- *
7
- * Based on test-data/schema-example.ts
8
- */
9
-
10
- /**
11
- * Property Schema Definition
12
- */
13
- export interface PropertySchema {
14
- dtype:
15
- | 'string'
16
- | 'number'
17
- | 'boolean'
18
- | 'vector3'
19
- | 'quaternion'
20
- | 'color'
21
- | 'array'
22
- | 'object'
23
- | 'any';
24
-
25
- operation:
26
- | 'set' // LWW
27
- | 'add' // Additive
28
- | 'multiply' // Multiplicative
29
- | 'min' // Minimum
30
- | 'max' // Maximum
31
- | 'or' // Logical OR
32
- | 'and' // Logical AND
33
- | 'union' // Set union
34
- | 'append' // Append (ordered)
35
- | 'rga' // Replicated Growable Array
36
- | 'lww-per-key' // LWW per object key
37
- | 'lww-per-component' // LWW per component
38
- | 'blend' // Blend/average
39
- | 'immutable'; // Cannot change
40
-
41
- default?: any;
42
- }
43
-
44
- /**
45
- * Scene Node Schema
46
- *
47
- * Defines merge behavior for all scene node properties.
48
- */
49
- export const sceneNodeSchema: Record<string, PropertySchema> = {
50
- // ========================================
51
- // Identity (immutable)
52
- // ========================================
53
- id: {
54
- dtype: 'string',
55
- operation: 'immutable',
56
- },
57
-
58
- tag: {
59
- dtype: 'string',
60
- operation: 'immutable',
61
- },
62
-
63
- key: {
64
- dtype: 'string',
65
- operation: 'set',
66
- default: '',
67
- },
68
-
69
- name: {
70
- dtype: 'string',
71
- operation: 'set',
72
- default: '',
73
- },
74
-
75
- // ========================================
76
- // Tree Structure
77
- // ========================================
78
- children: {
79
- dtype: 'array',
80
- operation: 'set', // Phase 2: Simple LWW
81
- default: [],
82
- },
83
-
84
- // ========================================
85
- // Transform (LWW)
86
- // ========================================
87
- 'transform.position': {
88
- dtype: 'vector3',
89
- operation: 'set',
90
- default: [0, 0, 0],
91
- },
92
-
93
- 'transform.rotation': {
94
- dtype: 'quaternion',
95
- operation: 'set',
96
- default: [0, 0, 0, 1],
97
- },
98
-
99
- 'transform.scale': {
100
- dtype: 'vector3',
101
- operation: 'set',
102
- default: [1, 1, 1],
103
- },
104
-
105
- // ========================================
106
- // Common Properties (LWW)
107
- // ========================================
108
- visible: {
109
- dtype: 'boolean',
110
- operation: 'set',
111
- default: true,
112
- },
113
-
114
- color: {
115
- dtype: 'color',
116
- operation: 'set',
117
- default: '#ffffff',
118
- },
119
-
120
- opacity: {
121
- dtype: 'number',
122
- operation: 'set',
123
- default: 1.0,
124
- },
125
-
126
- // ========================================
127
- // Material Properties (LWW)
128
- // ========================================
129
- material: {
130
- dtype: 'string',
131
- operation: 'set',
132
- default: '',
133
- },
134
-
135
- geometry: {
136
- dtype: 'string',
137
- operation: 'set',
138
- default: '',
139
- },
140
-
141
- metalness: {
142
- dtype: 'number',
143
- operation: 'set',
144
- default: 0,
145
- },
146
-
147
- roughness: {
148
- dtype: 'number',
149
- operation: 'set',
150
- default: 1,
151
- },
152
-
153
- // ========================================
154
- // Additive Properties
155
- // ========================================
156
- score: {
157
- dtype: 'number',
158
- operation: 'add',
159
- default: 0,
160
- },
161
-
162
- damage: {
163
- dtype: 'number',
164
- operation: 'add',
165
- default: 0,
166
- },
167
-
168
- // ========================================
169
- // Collection Properties
170
- // ========================================
171
- tags: {
172
- dtype: 'array',
173
- operation: 'union',
174
- default: [],
175
- },
176
-
177
- // ========================================
178
- // Object Properties (LWW per key)
179
- // ========================================
180
- properties: {
181
- dtype: 'object',
182
- operation: 'lww-per-key',
183
- default: {},
184
- },
185
-
186
- // ========================================
187
- // CRDT Metadata
188
- // ========================================
189
- clock: {
190
- dtype: 'object',
191
- operation: 'lww-per-key',
192
- default: {},
193
- },
194
-
195
- lamportTime: {
196
- dtype: 'number',
197
- operation: 'set',
198
- default: 0,
199
- },
200
-
201
- createdAt: {
202
- dtype: 'number',
203
- operation: 'immutable',
204
- },
205
-
206
- updatedAt: {
207
- dtype: 'number',
208
- operation: 'set',
209
- },
210
-
211
- deletedAt: {
212
- dtype: 'number',
213
- operation: 'set',
214
- },
215
- };
216
-
217
- /**
218
- * Get schema for a property
219
- * Returns default schema if not found
220
- */
221
- export function getPropertySchema(propertyName: string): PropertySchema {
222
- return (
223
- sceneNodeSchema[propertyName] || {
224
- dtype: 'any',
225
- operation: 'set', // Default to LWW
226
- }
227
- );
228
- }
229
-
230
- /**
231
- * Check if a property is immutable
232
- */
233
- export function isImmutable(propertyName: string): boolean {
234
- const schema = getPropertySchema(propertyName);
235
- return schema.operation === 'immutable';
236
- }