@vuer-ai/vuer-rtc 0.0.1
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.
- package/dist/client/EditBuffer.d.ts +43 -0
- package/dist/client/EditBuffer.d.ts.map +1 -0
- package/dist/client/EditBuffer.js +96 -0
- package/dist/client/EditBuffer.js.map +1 -0
- package/dist/client/actions.d.ts +66 -0
- package/dist/client/actions.d.ts.map +1 -0
- package/dist/client/actions.js +345 -0
- package/dist/client/actions.js.map +1 -0
- package/dist/client/createGraph.d.ts +30 -0
- package/dist/client/createGraph.d.ts.map +1 -0
- package/dist/client/createGraph.js +91 -0
- package/dist/client/createGraph.js.map +1 -0
- package/dist/client/hooks.d.ts +81 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +161 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/index.d.ts +8 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +10 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +74 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +11 -0
- package/dist/client/types.js.map +1 -0
- package/dist/hooks.d.ts +8 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +7 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/operations/OperationTypes.d.ts +239 -0
- package/dist/operations/OperationTypes.d.ts.map +1 -0
- package/dist/operations/OperationTypes.js +10 -0
- package/dist/operations/OperationTypes.js.map +1 -0
- package/dist/operations/OperationValidator.d.ts +32 -0
- package/dist/operations/OperationValidator.d.ts.map +1 -0
- package/dist/operations/OperationValidator.js +208 -0
- package/dist/operations/OperationValidator.js.map +1 -0
- package/dist/operations/apply/array.d.ts +22 -0
- package/dist/operations/apply/array.d.ts.map +1 -0
- package/dist/operations/apply/array.js +64 -0
- package/dist/operations/apply/array.js.map +1 -0
- package/dist/operations/apply/boolean.d.ts +18 -0
- package/dist/operations/apply/boolean.d.ts.map +1 -0
- package/dist/operations/apply/boolean.js +34 -0
- package/dist/operations/apply/boolean.js.map +1 -0
- package/dist/operations/apply/color.d.ts +14 -0
- package/dist/operations/apply/color.d.ts.map +1 -0
- package/dist/operations/apply/color.js +46 -0
- package/dist/operations/apply/color.js.map +1 -0
- package/dist/operations/apply/index.d.ts +18 -0
- package/dist/operations/apply/index.d.ts.map +1 -0
- package/dist/operations/apply/index.js +26 -0
- package/dist/operations/apply/index.js.map +1 -0
- package/dist/operations/apply/node.d.ts +24 -0
- package/dist/operations/apply/node.d.ts.map +1 -0
- package/dist/operations/apply/node.js +77 -0
- package/dist/operations/apply/node.js.map +1 -0
- package/dist/operations/apply/number.d.ts +26 -0
- package/dist/operations/apply/number.d.ts.map +1 -0
- package/dist/operations/apply/number.js +54 -0
- package/dist/operations/apply/number.js.map +1 -0
- package/dist/operations/apply/object.d.ts +14 -0
- package/dist/operations/apply/object.d.ts.map +1 -0
- package/dist/operations/apply/object.js +47 -0
- package/dist/operations/apply/object.js.map +1 -0
- package/dist/operations/apply/quaternion.d.ts +15 -0
- package/dist/operations/apply/quaternion.d.ts.map +1 -0
- package/dist/operations/apply/quaternion.js +33 -0
- package/dist/operations/apply/quaternion.js.map +1 -0
- package/dist/operations/apply/string.d.ts +14 -0
- package/dist/operations/apply/string.d.ts.map +1 -0
- package/dist/operations/apply/string.js +26 -0
- package/dist/operations/apply/string.js.map +1 -0
- package/dist/operations/apply/types.d.ts +34 -0
- package/dist/operations/apply/types.d.ts.map +1 -0
- package/dist/operations/apply/types.js +32 -0
- package/dist/operations/apply/types.js.map +1 -0
- package/dist/operations/apply/vector3.d.ts +18 -0
- package/dist/operations/apply/vector3.d.ts.map +1 -0
- package/dist/operations/apply/vector3.js +44 -0
- package/dist/operations/apply/vector3.js.map +1 -0
- package/dist/operations/dispatcher.d.ts +35 -0
- package/dist/operations/dispatcher.d.ts.map +1 -0
- package/dist/operations/dispatcher.js +107 -0
- package/dist/operations/dispatcher.js.map +1 -0
- package/dist/operations/index.d.ts +10 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/index.js +17 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/state/ConflictResolver.d.ts +36 -0
- package/dist/state/ConflictResolver.d.ts.map +1 -0
- package/dist/state/ConflictResolver.js +167 -0
- package/dist/state/ConflictResolver.js.map +1 -0
- package/dist/state/DType.d.ts +160 -0
- package/dist/state/DType.d.ts.map +1 -0
- package/dist/state/DType.js +282 -0
- package/dist/state/DType.js.map +1 -0
- package/dist/state/Schema.d.ts +32 -0
- package/dist/state/Schema.d.ts.map +1 -0
- package/dist/state/Schema.js +175 -0
- package/dist/state/Schema.js.map +1 -0
- package/dist/state/VectorClock.d.ts +42 -0
- package/dist/state/VectorClock.d.ts.map +1 -0
- package/dist/state/VectorClock.js +84 -0
- package/dist/state/VectorClock.js.map +1 -0
- package/dist/state/index.d.ts +11 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +13 -0
- package/dist/state/index.js.map +1 -0
- package/docs/OPERATION_HINTS.md +222 -0
- package/docs/SCENE_GRAPH.md +373 -0
- package/docs/TYPE_BEHAVIORS.md +348 -0
- package/examples/01-basic-usage.ts +139 -0
- package/examples/02-concurrent-edits.ts +208 -0
- package/examples/03-scene-building.ts +258 -0
- package/examples/04-conflict-resolution.ts +339 -0
- package/examples/README.md +86 -0
- package/jest.config.js +19 -0
- package/package.json +57 -0
- package/src/client/EditBuffer.ts +105 -0
- package/src/client/actions.ts +397 -0
- package/src/client/createGraph.ts +132 -0
- package/src/client/hooks.tsx +249 -0
- package/src/client/index.ts +35 -0
- package/src/client/types.ts +94 -0
- package/src/hooks.ts +20 -0
- package/src/index.ts +14 -0
- package/src/operations/OperationTypes.ts +340 -0
- package/src/operations/OperationValidator.ts +260 -0
- package/src/operations/apply/array.ts +84 -0
- package/src/operations/apply/boolean.ts +48 -0
- package/src/operations/apply/color.ts +65 -0
- package/src/operations/apply/index.ts +37 -0
- package/src/operations/apply/node.ts +98 -0
- package/src/operations/apply/number.ts +76 -0
- package/src/operations/apply/object.ts +63 -0
- package/src/operations/apply/quaternion.ts +47 -0
- package/src/operations/apply/string.ts +36 -0
- package/src/operations/apply/types.ts +66 -0
- package/src/operations/apply/vector3.ts +60 -0
- package/src/operations/dispatcher.ts +127 -0
- package/src/operations/index.ts +80 -0
- package/src/state/ConflictResolver.ts +205 -0
- package/src/state/DType.ts +333 -0
- package/src/state/Schema.ts +236 -0
- package/src/state/VectorClock.ts +98 -0
- package/src/state/index.ts +14 -0
- package/tests/client/actions.test.ts +371 -0
- package/tests/client/edit-buffer.test.ts +117 -0
- package/tests/fixtures/array-ops.jsonl +6 -0
- package/tests/fixtures/boolean-ops.jsonl +6 -0
- package/tests/fixtures/color-ops.jsonl +4 -0
- package/tests/fixtures/edit-buffer.jsonl +3 -0
- package/tests/fixtures/node-ops.jsonl +6 -0
- package/tests/fixtures/number-ops.jsonl +7 -0
- package/tests/fixtures/object-ops.jsonl +4 -0
- package/tests/fixtures/operations.jsonl +7 -0
- package/tests/fixtures/string-ops.jsonl +4 -0
- package/tests/fixtures/undo-redo.jsonl +3 -0
- package/tests/fixtures/vector-ops.jsonl +9 -0
- package/tests/operations/collections.test.ts +193 -0
- package/tests/operations/nodes.test.ts +228 -0
- package/tests/operations/primitives.test.ts +222 -0
- package/tests/operations/vectors.test.ts +150 -0
- package/tsconfig.json +21 -0
- package/tsconfig.test.json +9 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edit Buffer
|
|
3
|
+
*
|
|
4
|
+
* Accumulates uncommitted operations during gestures (e.g., dragging).
|
|
5
|
+
* Merges additive operations to reduce message size.
|
|
6
|
+
*/
|
|
7
|
+
import type { Operation } from '../operations/OperationTypes.js';
|
|
8
|
+
/**
|
|
9
|
+
* Check if an operation type is additive (can be merged)
|
|
10
|
+
*/
|
|
11
|
+
export declare function isAdditiveOp(otype: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Merge two values for additive operations
|
|
14
|
+
*/
|
|
15
|
+
export declare function mergeValues(otype: string, a: unknown, b: unknown): unknown;
|
|
16
|
+
/**
|
|
17
|
+
* Edit buffer class
|
|
18
|
+
*/
|
|
19
|
+
export declare class EditBufferImpl {
|
|
20
|
+
private opsMap;
|
|
21
|
+
private opOrder;
|
|
22
|
+
/**
|
|
23
|
+
* Add or merge an operation
|
|
24
|
+
*/
|
|
25
|
+
add(op: Operation): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get ops in order (for committing)
|
|
28
|
+
*/
|
|
29
|
+
getOps(): Operation[];
|
|
30
|
+
/**
|
|
31
|
+
* Clear buffer
|
|
32
|
+
*/
|
|
33
|
+
clear(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Check if empty
|
|
36
|
+
*/
|
|
37
|
+
isEmpty(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Get count
|
|
40
|
+
*/
|
|
41
|
+
size(): number;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=EditBuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditBuffer.d.ts","sourceRoot":"","sources":["../../src/client/EditBuffer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAyB1E;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,OAAO,CAAgB;IAE/B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAiBxB;;OAEG;IACH,MAAM,IAAI,SAAS,EAAE;IAIrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edit Buffer
|
|
3
|
+
*
|
|
4
|
+
* Accumulates uncommitted operations during gestures (e.g., dragging).
|
|
5
|
+
* Merges additive operations to reduce message size.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check if an operation type is additive (can be merged)
|
|
9
|
+
*/
|
|
10
|
+
export function isAdditiveOp(otype) {
|
|
11
|
+
return otype === 'vector3.add' ||
|
|
12
|
+
otype === 'number.add' ||
|
|
13
|
+
otype === 'number.multiply' ||
|
|
14
|
+
otype === 'quaternion.multiply';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Merge two values for additive operations
|
|
18
|
+
*/
|
|
19
|
+
export function mergeValues(otype, a, b) {
|
|
20
|
+
switch (otype) {
|
|
21
|
+
case 'vector3.add': {
|
|
22
|
+
const va = a;
|
|
23
|
+
const vb = b;
|
|
24
|
+
return [va[0] + vb[0], va[1] + vb[1], va[2] + vb[2]];
|
|
25
|
+
}
|
|
26
|
+
case 'number.add':
|
|
27
|
+
return a + b;
|
|
28
|
+
case 'number.multiply':
|
|
29
|
+
return a * b;
|
|
30
|
+
case 'quaternion.multiply': {
|
|
31
|
+
// Quaternion multiplication: q1 * q2
|
|
32
|
+
const q1 = a;
|
|
33
|
+
const q2 = b;
|
|
34
|
+
return [
|
|
35
|
+
q1[3] * q2[0] + q1[0] * q2[3] + q1[1] * q2[2] - q1[2] * q2[1],
|
|
36
|
+
q1[3] * q2[1] - q1[0] * q2[2] + q1[1] * q2[3] + q1[2] * q2[0],
|
|
37
|
+
q1[3] * q2[2] + q1[0] * q2[1] - q1[1] * q2[0] + q1[2] * q2[3],
|
|
38
|
+
q1[3] * q2[3] - q1[0] * q2[0] - q1[1] * q2[1] - q1[2] * q2[2],
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
default:
|
|
42
|
+
return b; // For LWW, later value wins
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Edit buffer class
|
|
47
|
+
*/
|
|
48
|
+
export class EditBufferImpl {
|
|
49
|
+
opsMap = new Map();
|
|
50
|
+
opOrder = [];
|
|
51
|
+
/**
|
|
52
|
+
* Add or merge an operation
|
|
53
|
+
*/
|
|
54
|
+
add(op) {
|
|
55
|
+
const key = `${op.key}:${op.path}`;
|
|
56
|
+
const existing = this.opsMap.get(key);
|
|
57
|
+
if (existing && existing.otype === op.otype && isAdditiveOp(op.otype)) {
|
|
58
|
+
// Merge additive ops
|
|
59
|
+
const mergedValue = mergeValues(op.otype, existing.value, op.value);
|
|
60
|
+
this.opsMap.set(key, { ...existing, value: mergedValue });
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// New op or LWW replacement
|
|
64
|
+
if (!this.opsMap.has(key)) {
|
|
65
|
+
this.opOrder.push(key);
|
|
66
|
+
}
|
|
67
|
+
this.opsMap.set(key, op);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get ops in order (for committing)
|
|
72
|
+
*/
|
|
73
|
+
getOps() {
|
|
74
|
+
return this.opOrder.map(k => this.opsMap.get(k));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Clear buffer
|
|
78
|
+
*/
|
|
79
|
+
clear() {
|
|
80
|
+
this.opsMap.clear();
|
|
81
|
+
this.opOrder = [];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if empty
|
|
85
|
+
*/
|
|
86
|
+
isEmpty() {
|
|
87
|
+
return this.opsMap.size === 0;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get count
|
|
91
|
+
*/
|
|
92
|
+
size() {
|
|
93
|
+
return this.opsMap.size;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=EditBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditBuffer.js","sourceRoot":"","sources":["../../src/client/EditBuffer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client State Actions
|
|
3
|
+
*
|
|
4
|
+
* Pure functions that transform ClientState.
|
|
5
|
+
* Used by createGraph and React hooks.
|
|
6
|
+
*/
|
|
7
|
+
import type { CRDTMessage, Operation, SceneGraph } from '../operations/OperationTypes.js';
|
|
8
|
+
import type { ClientState, JournalEntry, Snapshot } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generate a UUID
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateUUID(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Create initial client state
|
|
15
|
+
*/
|
|
16
|
+
export declare function createInitialState(sessionId: string, initialSnapshot?: Snapshot): ClientState;
|
|
17
|
+
/**
|
|
18
|
+
* Rebuild graph from snapshot + journal + edits
|
|
19
|
+
*/
|
|
20
|
+
export declare function rebuildGraph(snapshot: Snapshot, journal: JournalEntry[], pendingOps: Operation[]): SceneGraph;
|
|
21
|
+
/**
|
|
22
|
+
* Action: Edit (uncommitted)
|
|
23
|
+
*/
|
|
24
|
+
export declare function onEdit(state: ClientState, op: Operation): ClientState;
|
|
25
|
+
/**
|
|
26
|
+
* Action: Commit edits
|
|
27
|
+
*/
|
|
28
|
+
export declare function commitEdits(state: ClientState, _description?: string): {
|
|
29
|
+
state: ClientState;
|
|
30
|
+
msg: CRDTMessage | null;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Action: Cancel edits (revert to start graph)
|
|
34
|
+
*/
|
|
35
|
+
export declare function cancelEdits(state: ClientState): ClientState;
|
|
36
|
+
/**
|
|
37
|
+
* Action: Server acknowledgement
|
|
38
|
+
*/
|
|
39
|
+
export declare function onServerAck(state: ClientState, msgId: string): ClientState;
|
|
40
|
+
/**
|
|
41
|
+
* Action: Receive remote message
|
|
42
|
+
*/
|
|
43
|
+
export declare function onRemoteMessage(state: ClientState, msg: CRDTMessage): ClientState;
|
|
44
|
+
/**
|
|
45
|
+
* Action: Undo
|
|
46
|
+
*/
|
|
47
|
+
export declare function undo(state: ClientState): {
|
|
48
|
+
state: ClientState;
|
|
49
|
+
msg: CRDTMessage | null;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Action: Redo
|
|
53
|
+
*/
|
|
54
|
+
export declare function redo(state: ClientState): {
|
|
55
|
+
state: ClientState;
|
|
56
|
+
msg: CRDTMessage | null;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Action: Compact (create snapshot from acked entries)
|
|
60
|
+
*/
|
|
61
|
+
export declare function compact(state: ClientState): ClientState;
|
|
62
|
+
/**
|
|
63
|
+
* Initialize from server snapshot + journal
|
|
64
|
+
*/
|
|
65
|
+
export declare function initFromServer(sessionId: string, snapshot: Snapshot, journal: CRDTMessage[]): ClientState;
|
|
66
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +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,CAiDxF;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAqCxF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CA0BvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,EAAE,GACrB,WAAW,CAqCb"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client State Actions
|
|
3
|
+
*
|
|
4
|
+
* Pure functions that transform ClientState.
|
|
5
|
+
* Used by createGraph and React hooks.
|
|
6
|
+
*/
|
|
7
|
+
import { produce } from 'immer';
|
|
8
|
+
import { applyMessage, applyOperation, createEmptyGraph } from '../operations/dispatcher.js';
|
|
9
|
+
import { VectorClockManager } from '../state/VectorClock.js';
|
|
10
|
+
import { isAdditiveOp, mergeValues } from './EditBuffer.js';
|
|
11
|
+
const clockManager = new VectorClockManager();
|
|
12
|
+
/**
|
|
13
|
+
* Generate a UUID
|
|
14
|
+
*/
|
|
15
|
+
export function generateUUID() {
|
|
16
|
+
return crypto.randomUUID();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create initial client state
|
|
20
|
+
*/
|
|
21
|
+
export function createInitialState(sessionId, initialSnapshot) {
|
|
22
|
+
const emptyGraph = createEmptyGraph();
|
|
23
|
+
const snapshot = initialSnapshot ?? {
|
|
24
|
+
graph: emptyGraph,
|
|
25
|
+
vectorClock: {},
|
|
26
|
+
journalIndex: 0,
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
graph: snapshot.graph,
|
|
30
|
+
journal: [],
|
|
31
|
+
edits: { ops: [], startGraph: null },
|
|
32
|
+
snapshot,
|
|
33
|
+
lamportTime: 0,
|
|
34
|
+
vectorClock: clockManager.create(sessionId),
|
|
35
|
+
sessionId,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Rebuild graph from snapshot + journal + edits
|
|
40
|
+
*/
|
|
41
|
+
export function rebuildGraph(snapshot, journal, pendingOps) {
|
|
42
|
+
let graph = snapshot.graph;
|
|
43
|
+
// Apply journal (skip deleted entries and meta ops)
|
|
44
|
+
for (const entry of journal) {
|
|
45
|
+
if (entry.deletedAt)
|
|
46
|
+
continue;
|
|
47
|
+
const realOps = entry.msg.ops.filter(op => !op.otype.startsWith('meta.'));
|
|
48
|
+
if (realOps.length > 0) {
|
|
49
|
+
graph = applyMessage(graph, { ...entry.msg, ops: realOps });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Apply pending edits
|
|
53
|
+
if (pendingOps.length > 0) {
|
|
54
|
+
graph = produce(graph, draft => {
|
|
55
|
+
for (const op of pendingOps) {
|
|
56
|
+
applyOperation(draft, op, {
|
|
57
|
+
sessionId: 'local',
|
|
58
|
+
clock: {},
|
|
59
|
+
lamportTime: 0,
|
|
60
|
+
timestamp: Date.now(),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return graph;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Action: Edit (uncommitted)
|
|
69
|
+
*/
|
|
70
|
+
export function onEdit(state, op) {
|
|
71
|
+
return produce(state, draft => {
|
|
72
|
+
// Save start graph for cancel (first edit only)
|
|
73
|
+
// Use state.graph (immutable original), not draft.graph (mutable proxy)
|
|
74
|
+
if (draft.edits.ops.length === 0) {
|
|
75
|
+
draft.edits.startGraph = state.graph;
|
|
76
|
+
}
|
|
77
|
+
// Merge into edit buffer
|
|
78
|
+
const key = `${op.key}:${op.path}`;
|
|
79
|
+
const existingIdx = draft.edits.ops.findIndex(o => `${o.key}:${o.path}` === key);
|
|
80
|
+
if (existingIdx >= 0) {
|
|
81
|
+
const existing = draft.edits.ops[existingIdx];
|
|
82
|
+
if (existing.otype === op.otype && isAdditiveOp(op.otype)) {
|
|
83
|
+
// Merge additive ops
|
|
84
|
+
const mergedValue = mergeValues(op.otype, existing.value, op.value);
|
|
85
|
+
draft.edits.ops[existingIdx] = { ...existing, value: mergedValue };
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Replace
|
|
89
|
+
draft.edits.ops[existingIdx] = op;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
draft.edits.ops.push(op);
|
|
94
|
+
}
|
|
95
|
+
// Apply to graph immediately (optimistic)
|
|
96
|
+
// Note: applyOperation mutates draft.graph in place
|
|
97
|
+
applyOperation(draft.graph, op, {
|
|
98
|
+
sessionId: draft.sessionId,
|
|
99
|
+
clock: draft.vectorClock,
|
|
100
|
+
lamportTime: draft.lamportTime,
|
|
101
|
+
timestamp: Date.now(),
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Action: Commit edits
|
|
107
|
+
*/
|
|
108
|
+
export function commitEdits(state, _description) {
|
|
109
|
+
if (state.edits.ops.length === 0) {
|
|
110
|
+
return { state, msg: null };
|
|
111
|
+
}
|
|
112
|
+
const newClock = clockManager.increment(state.vectorClock, state.sessionId);
|
|
113
|
+
const msg = {
|
|
114
|
+
id: generateUUID(),
|
|
115
|
+
sessionId: state.sessionId,
|
|
116
|
+
clock: newClock,
|
|
117
|
+
lamportTime: state.lamportTime + 1,
|
|
118
|
+
timestamp: Date.now(),
|
|
119
|
+
ops: [...state.edits.ops],
|
|
120
|
+
};
|
|
121
|
+
const newState = produce(state, draft => {
|
|
122
|
+
// Add to journal (unacknowledged)
|
|
123
|
+
draft.journal.push({ msg, ack: false });
|
|
124
|
+
// Clear edit buffer
|
|
125
|
+
draft.edits = { ops: [], startGraph: null };
|
|
126
|
+
// Update clocks
|
|
127
|
+
draft.lamportTime = msg.lamportTime;
|
|
128
|
+
draft.vectorClock = newClock;
|
|
129
|
+
});
|
|
130
|
+
return { state: newState, msg };
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Action: Cancel edits (revert to start graph)
|
|
134
|
+
*/
|
|
135
|
+
export function cancelEdits(state) {
|
|
136
|
+
if (state.edits.ops.length === 0) {
|
|
137
|
+
return state;
|
|
138
|
+
}
|
|
139
|
+
return produce(state, draft => {
|
|
140
|
+
// Revert to start graph
|
|
141
|
+
if (draft.edits.startGraph) {
|
|
142
|
+
draft.graph = draft.edits.startGraph;
|
|
143
|
+
}
|
|
144
|
+
// Clear edit buffer
|
|
145
|
+
draft.edits = { ops: [], startGraph: null };
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Action: Server acknowledgement
|
|
150
|
+
*/
|
|
151
|
+
export function onServerAck(state, msgId) {
|
|
152
|
+
return produce(state, draft => {
|
|
153
|
+
const entry = draft.journal.find(e => e.msg.id === msgId);
|
|
154
|
+
if (entry) {
|
|
155
|
+
entry.ack = true;
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Action: Receive remote message
|
|
161
|
+
*/
|
|
162
|
+
export function onRemoteMessage(state, msg) {
|
|
163
|
+
// Skip duplicates
|
|
164
|
+
if (state.journal.some(e => e.msg.id === msg.id)) {
|
|
165
|
+
return state;
|
|
166
|
+
}
|
|
167
|
+
return produce(state, draft => {
|
|
168
|
+
// Add to journal (already acked - came from server)
|
|
169
|
+
draft.journal.push({ msg, ack: true });
|
|
170
|
+
// Process meta ops (undo/redo)
|
|
171
|
+
for (const op of msg.ops) {
|
|
172
|
+
if (op.otype === 'meta.undo') {
|
|
173
|
+
const targetMsgId = op.targetMsgId;
|
|
174
|
+
const target = draft.journal.find(e => e.msg.id === targetMsgId);
|
|
175
|
+
if (target)
|
|
176
|
+
target.deletedAt = msg.timestamp;
|
|
177
|
+
}
|
|
178
|
+
else if (op.otype === 'meta.redo') {
|
|
179
|
+
const targetMsgId = op.targetMsgId;
|
|
180
|
+
const target = draft.journal.find(e => e.msg.id === targetMsgId);
|
|
181
|
+
if (target)
|
|
182
|
+
delete target.deletedAt;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Merge clocks
|
|
186
|
+
draft.vectorClock = clockManager.merge(draft.vectorClock, msg.clock);
|
|
187
|
+
draft.lamportTime = Math.max(draft.lamportTime, msg.lamportTime);
|
|
188
|
+
// Rebuild graph
|
|
189
|
+
draft.graph = rebuildGraph(draft.snapshot, draft.journal, draft.edits.ops);
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Action: Undo
|
|
194
|
+
*/
|
|
195
|
+
export function undo(state) {
|
|
196
|
+
let currentState = state;
|
|
197
|
+
let targetMsgId;
|
|
198
|
+
// If edit buffer not empty, commit first then mark as deleted
|
|
199
|
+
if (state.edits.ops.length > 0) {
|
|
200
|
+
const { state: committed, msg } = commitEdits(state);
|
|
201
|
+
if (!msg)
|
|
202
|
+
return { state, msg: null };
|
|
203
|
+
currentState = committed;
|
|
204
|
+
targetMsgId = msg.id;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Find last non-deleted message from this session
|
|
208
|
+
const lastActive = [...currentState.journal]
|
|
209
|
+
.reverse()
|
|
210
|
+
.find(e => !e.deletedAt && e.msg.sessionId === currentState.sessionId);
|
|
211
|
+
if (!lastActive)
|
|
212
|
+
return { state: currentState, msg: null };
|
|
213
|
+
targetMsgId = lastActive.msg.id;
|
|
214
|
+
}
|
|
215
|
+
// Create undo message
|
|
216
|
+
const newClock = clockManager.increment(currentState.vectorClock, currentState.sessionId);
|
|
217
|
+
const undoMsg = {
|
|
218
|
+
id: generateUUID(),
|
|
219
|
+
sessionId: currentState.sessionId,
|
|
220
|
+
clock: newClock,
|
|
221
|
+
lamportTime: currentState.lamportTime + 1,
|
|
222
|
+
timestamp: Date.now(),
|
|
223
|
+
ops: [{ otype: 'meta.undo', key: '_meta', path: '_meta', targetMsgId }],
|
|
224
|
+
};
|
|
225
|
+
// Apply locally
|
|
226
|
+
const newState = produce(currentState, draft => {
|
|
227
|
+
// Add undo message to journal
|
|
228
|
+
draft.journal.push({ msg: undoMsg, ack: false });
|
|
229
|
+
// Mark target as deleted
|
|
230
|
+
const target = draft.journal.find(e => e.msg.id === targetMsgId);
|
|
231
|
+
if (target)
|
|
232
|
+
target.deletedAt = undoMsg.timestamp;
|
|
233
|
+
// Update clocks
|
|
234
|
+
draft.lamportTime = undoMsg.lamportTime;
|
|
235
|
+
draft.vectorClock = newClock;
|
|
236
|
+
// Rebuild graph
|
|
237
|
+
draft.graph = rebuildGraph(draft.snapshot, draft.journal, draft.edits.ops);
|
|
238
|
+
});
|
|
239
|
+
return { state: newState, msg: undoMsg };
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Action: Redo
|
|
243
|
+
*/
|
|
244
|
+
export function redo(state) {
|
|
245
|
+
// Find last deleted message from this session
|
|
246
|
+
const lastDeleted = [...state.journal]
|
|
247
|
+
.reverse()
|
|
248
|
+
.find(e => e.deletedAt && e.msg.sessionId === state.sessionId);
|
|
249
|
+
if (!lastDeleted)
|
|
250
|
+
return { state, msg: null };
|
|
251
|
+
// Create redo message
|
|
252
|
+
const newClock = clockManager.increment(state.vectorClock, state.sessionId);
|
|
253
|
+
const redoMsg = {
|
|
254
|
+
id: generateUUID(),
|
|
255
|
+
sessionId: state.sessionId,
|
|
256
|
+
clock: newClock,
|
|
257
|
+
lamportTime: state.lamportTime + 1,
|
|
258
|
+
timestamp: Date.now(),
|
|
259
|
+
ops: [{ otype: 'meta.redo', key: '_meta', path: '_meta', targetMsgId: lastDeleted.msg.id }],
|
|
260
|
+
};
|
|
261
|
+
// Apply locally
|
|
262
|
+
const newState = produce(state, draft => {
|
|
263
|
+
// Add redo message to journal
|
|
264
|
+
draft.journal.push({ msg: redoMsg, ack: false });
|
|
265
|
+
// Clear deletedAt on target
|
|
266
|
+
const target = draft.journal.find(e => e.msg.id === lastDeleted.msg.id);
|
|
267
|
+
if (target)
|
|
268
|
+
delete target.deletedAt;
|
|
269
|
+
// Update clocks
|
|
270
|
+
draft.lamportTime = redoMsg.lamportTime;
|
|
271
|
+
draft.vectorClock = newClock;
|
|
272
|
+
// Rebuild graph
|
|
273
|
+
draft.graph = rebuildGraph(draft.snapshot, draft.journal, draft.edits.ops);
|
|
274
|
+
});
|
|
275
|
+
return { state: newState, msg: redoMsg };
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Action: Compact (create snapshot from acked entries)
|
|
279
|
+
*/
|
|
280
|
+
export function compact(state) {
|
|
281
|
+
const lastAckedIdx = state.journal.findLastIndex(e => e.ack);
|
|
282
|
+
if (lastAckedIdx < 0)
|
|
283
|
+
return state;
|
|
284
|
+
return produce(state, draft => {
|
|
285
|
+
// Build new snapshot (skip deleted entries and meta ops)
|
|
286
|
+
let snapshotGraph = draft.snapshot.graph;
|
|
287
|
+
for (let i = 0; i <= lastAckedIdx; i++) {
|
|
288
|
+
const entry = draft.journal[i];
|
|
289
|
+
if (entry.deletedAt)
|
|
290
|
+
continue;
|
|
291
|
+
const realOps = entry.msg.ops.filter(op => !op.otype.startsWith('meta.'));
|
|
292
|
+
if (realOps.length > 0) {
|
|
293
|
+
snapshotGraph = applyMessage(snapshotGraph, { ...entry.msg, ops: realOps });
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
draft.snapshot = {
|
|
297
|
+
graph: snapshotGraph,
|
|
298
|
+
vectorClock: draft.journal[lastAckedIdx].msg.clock,
|
|
299
|
+
journalIndex: draft.snapshot.journalIndex + lastAckedIdx + 1,
|
|
300
|
+
};
|
|
301
|
+
// Remove compacted entries
|
|
302
|
+
draft.journal = draft.journal.slice(lastAckedIdx + 1);
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Initialize from server snapshot + journal
|
|
307
|
+
*/
|
|
308
|
+
export function initFromServer(sessionId, snapshot, journal) {
|
|
309
|
+
let graph = snapshot.graph;
|
|
310
|
+
const journalEntries = [];
|
|
311
|
+
let maxLamport = 0;
|
|
312
|
+
let mergedClock = snapshot.vectorClock;
|
|
313
|
+
for (const msg of journal) {
|
|
314
|
+
// Process meta ops
|
|
315
|
+
for (const op of msg.ops) {
|
|
316
|
+
if (op.otype === 'meta.undo') {
|
|
317
|
+
const targetMsgId = op.targetMsgId;
|
|
318
|
+
const target = journalEntries.find(e => e.msg.id === targetMsgId);
|
|
319
|
+
if (target)
|
|
320
|
+
target.deletedAt = msg.timestamp;
|
|
321
|
+
}
|
|
322
|
+
else if (op.otype === 'meta.redo') {
|
|
323
|
+
const targetMsgId = op.targetMsgId;
|
|
324
|
+
const target = journalEntries.find(e => e.msg.id === targetMsgId);
|
|
325
|
+
if (target)
|
|
326
|
+
delete target.deletedAt;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
journalEntries.push({ msg, ack: true });
|
|
330
|
+
maxLamport = Math.max(maxLamport, msg.lamportTime);
|
|
331
|
+
mergedClock = clockManager.merge(mergedClock, msg.clock);
|
|
332
|
+
}
|
|
333
|
+
// Rebuild graph
|
|
334
|
+
graph = rebuildGraph(snapshot, journalEntries, []);
|
|
335
|
+
return {
|
|
336
|
+
graph,
|
|
337
|
+
journal: journalEntries,
|
|
338
|
+
edits: { ops: [], startGraph: null },
|
|
339
|
+
snapshot,
|
|
340
|
+
lamportTime: maxLamport,
|
|
341
|
+
vectorClock: clockManager.increment(mergedClock, sessionId),
|
|
342
|
+
sessionId,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/client/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createGraph - Factory function for creating a graph store
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ```typescript
|
|
6
|
+
* const store = createGraph({
|
|
7
|
+
* sessionId: 'my-session',
|
|
8
|
+
* onSend: (msg) => websocket.send(msg),
|
|
9
|
+
* });
|
|
10
|
+
*
|
|
11
|
+
* store.edit({ otype: 'vector3.add', key: 'cube', path: 'position', value: [1, 0, 0] });
|
|
12
|
+
* store.commit('Move cube');
|
|
13
|
+
* store.undo();
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
import type { CRDTMessage } from '../operations/OperationTypes.js';
|
|
17
|
+
import type { CreateGraphOptions, GraphStore, Snapshot } from './types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Create a graph store
|
|
20
|
+
*/
|
|
21
|
+
export declare function createGraph(options: CreateGraphOptions): GraphStore;
|
|
22
|
+
/**
|
|
23
|
+
* Create a graph store initialized from server state
|
|
24
|
+
*/
|
|
25
|
+
export declare function createGraphFromServer(options: CreateGraphOptions & {
|
|
26
|
+
snapshot: Snapshot;
|
|
27
|
+
journal: CRDTMessage[];
|
|
28
|
+
}): GraphStore;
|
|
29
|
+
export type { ClientState, CreateGraphOptions, GraphStore, Snapshot, JournalEntry, EditBuffer } from './types.js';
|
|
30
|
+
//# sourceMappingURL=createGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createGraph.d.ts","sourceRoot":"","sources":["../../src/client/createGraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EAAe,kBAAkB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAiBxF;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU,CAkEnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,kBAAkB,GAAG;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,GACA,UAAU,CAcZ;AAGD,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|