@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,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operation Types - New design with CRDT wrapper and dtype operations
|
|
3
|
+
*
|
|
4
|
+
* Design:
|
|
5
|
+
* - CRDTMessage: Envelope with CRDT metadata + batch of operations
|
|
6
|
+
* - Operations: Explicit dtype operations (number.set, vector3.add, etc.)
|
|
7
|
+
* - Batching: One message can contain multiple operations on multiple nodes
|
|
8
|
+
*/
|
|
9
|
+
import type { VectorClock } from '../state/VectorClock.js';
|
|
10
|
+
/**
|
|
11
|
+
* CRDTMessage - Envelope containing CRDT metadata + batch of operations
|
|
12
|
+
*/
|
|
13
|
+
export interface CRDTMessage {
|
|
14
|
+
id: string;
|
|
15
|
+
sessionId: string;
|
|
16
|
+
clock: VectorClock;
|
|
17
|
+
lamportTime: number;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
ops: Operation[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Base Operation - All operations extend this
|
|
23
|
+
*/
|
|
24
|
+
export interface BaseOp {
|
|
25
|
+
key: string;
|
|
26
|
+
otype: string;
|
|
27
|
+
path: string;
|
|
28
|
+
}
|
|
29
|
+
export interface NumberSetOp extends BaseOp {
|
|
30
|
+
key: string;
|
|
31
|
+
otype: 'number.set';
|
|
32
|
+
path: string;
|
|
33
|
+
value: number;
|
|
34
|
+
}
|
|
35
|
+
export interface NumberAddOp extends BaseOp {
|
|
36
|
+
key: string;
|
|
37
|
+
otype: 'number.add';
|
|
38
|
+
path: string;
|
|
39
|
+
value: number;
|
|
40
|
+
}
|
|
41
|
+
export interface NumberMultiplyOp extends BaseOp {
|
|
42
|
+
key: string;
|
|
43
|
+
otype: 'number.multiply';
|
|
44
|
+
path: string;
|
|
45
|
+
value: number;
|
|
46
|
+
}
|
|
47
|
+
export interface NumberMinOp extends BaseOp {
|
|
48
|
+
key: string;
|
|
49
|
+
otype: 'number.min';
|
|
50
|
+
path: string;
|
|
51
|
+
value: number;
|
|
52
|
+
}
|
|
53
|
+
export interface NumberMaxOp extends BaseOp {
|
|
54
|
+
key: string;
|
|
55
|
+
otype: 'number.max';
|
|
56
|
+
path: string;
|
|
57
|
+
value: number;
|
|
58
|
+
}
|
|
59
|
+
export interface StringSetOp extends BaseOp {
|
|
60
|
+
key: string;
|
|
61
|
+
otype: 'string.set';
|
|
62
|
+
path: string;
|
|
63
|
+
value: string;
|
|
64
|
+
}
|
|
65
|
+
export interface StringConcatOp extends BaseOp {
|
|
66
|
+
key: string;
|
|
67
|
+
otype: 'string.concat';
|
|
68
|
+
path: string;
|
|
69
|
+
value: string;
|
|
70
|
+
separator?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface BooleanSetOp extends BaseOp {
|
|
73
|
+
key: string;
|
|
74
|
+
otype: 'boolean.set';
|
|
75
|
+
path: string;
|
|
76
|
+
value: boolean;
|
|
77
|
+
}
|
|
78
|
+
export interface BooleanOrOp extends BaseOp {
|
|
79
|
+
key: string;
|
|
80
|
+
otype: 'boolean.or';
|
|
81
|
+
path: string;
|
|
82
|
+
value: boolean;
|
|
83
|
+
}
|
|
84
|
+
export interface BooleanAndOp extends BaseOp {
|
|
85
|
+
key: string;
|
|
86
|
+
otype: 'boolean.and';
|
|
87
|
+
path: string;
|
|
88
|
+
value: boolean;
|
|
89
|
+
}
|
|
90
|
+
export interface Vector3SetOp extends BaseOp {
|
|
91
|
+
key: string;
|
|
92
|
+
otype: 'vector3.set';
|
|
93
|
+
path: string;
|
|
94
|
+
value: [number, number, number];
|
|
95
|
+
}
|
|
96
|
+
export interface Vector3AddOp extends BaseOp {
|
|
97
|
+
key: string;
|
|
98
|
+
otype: 'vector3.add';
|
|
99
|
+
path: string;
|
|
100
|
+
value: [number, number, number];
|
|
101
|
+
}
|
|
102
|
+
export interface Vector3MultiplyOp extends BaseOp {
|
|
103
|
+
key: string;
|
|
104
|
+
otype: 'vector3.multiply';
|
|
105
|
+
path: string;
|
|
106
|
+
value: [number, number, number];
|
|
107
|
+
}
|
|
108
|
+
export interface QuaternionSetOp extends BaseOp {
|
|
109
|
+
key: string;
|
|
110
|
+
otype: 'quaternion.set';
|
|
111
|
+
path: string;
|
|
112
|
+
value: [number, number, number, number];
|
|
113
|
+
}
|
|
114
|
+
export interface QuaternionMultiplyOp extends BaseOp {
|
|
115
|
+
key: string;
|
|
116
|
+
otype: 'quaternion.multiply';
|
|
117
|
+
path: string;
|
|
118
|
+
value: [number, number, number, number];
|
|
119
|
+
}
|
|
120
|
+
export interface ColorSetOp extends BaseOp {
|
|
121
|
+
key: string;
|
|
122
|
+
otype: 'color.set';
|
|
123
|
+
path: string;
|
|
124
|
+
value: string;
|
|
125
|
+
}
|
|
126
|
+
export interface ColorBlendOp extends BaseOp {
|
|
127
|
+
key: string;
|
|
128
|
+
otype: 'color.blend';
|
|
129
|
+
path: string;
|
|
130
|
+
value: string;
|
|
131
|
+
}
|
|
132
|
+
export interface ArraySetOp extends BaseOp {
|
|
133
|
+
key: string;
|
|
134
|
+
otype: 'array.set';
|
|
135
|
+
path: string;
|
|
136
|
+
value: any[];
|
|
137
|
+
}
|
|
138
|
+
export interface ArrayPushOp extends BaseOp {
|
|
139
|
+
key: string;
|
|
140
|
+
otype: 'array.push';
|
|
141
|
+
path: string;
|
|
142
|
+
value: any;
|
|
143
|
+
}
|
|
144
|
+
export interface ArrayUnionOp extends BaseOp {
|
|
145
|
+
key: string;
|
|
146
|
+
otype: 'array.union';
|
|
147
|
+
path: string;
|
|
148
|
+
value: any[];
|
|
149
|
+
}
|
|
150
|
+
export interface ArrayRemoveOp extends BaseOp {
|
|
151
|
+
key: string;
|
|
152
|
+
otype: 'array.remove';
|
|
153
|
+
path: string;
|
|
154
|
+
value: any;
|
|
155
|
+
}
|
|
156
|
+
export interface ObjectSetOp extends BaseOp {
|
|
157
|
+
key: string;
|
|
158
|
+
otype: 'object.set';
|
|
159
|
+
path: string;
|
|
160
|
+
value: Record<string, any>;
|
|
161
|
+
}
|
|
162
|
+
export interface ObjectMergeOp extends BaseOp {
|
|
163
|
+
key: string;
|
|
164
|
+
otype: 'object.merge';
|
|
165
|
+
path: string;
|
|
166
|
+
value: Record<string, any>;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* NODE.INSERT - Create new node as child of parent
|
|
170
|
+
*/
|
|
171
|
+
export interface NodeInsertOp extends BaseOp {
|
|
172
|
+
key: string;
|
|
173
|
+
otype: 'node.insert';
|
|
174
|
+
path: 'children';
|
|
175
|
+
value: {
|
|
176
|
+
key: string;
|
|
177
|
+
id: string;
|
|
178
|
+
tag: string;
|
|
179
|
+
name: string;
|
|
180
|
+
[key: string]: any;
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* NODE.REMOVE - Remove node from parent (tombstone)
|
|
185
|
+
*/
|
|
186
|
+
export interface NodeRemoveOp extends BaseOp {
|
|
187
|
+
key: string;
|
|
188
|
+
otype: 'node.remove';
|
|
189
|
+
path: 'children';
|
|
190
|
+
value: string;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* META.UNDO - Mark a message as undone
|
|
194
|
+
*/
|
|
195
|
+
export interface MetaUndoOp {
|
|
196
|
+
key: '_meta';
|
|
197
|
+
otype: 'meta.undo';
|
|
198
|
+
path: '_meta';
|
|
199
|
+
targetMsgId: string;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* META.REDO - Unmark a message as undone
|
|
203
|
+
*/
|
|
204
|
+
export interface MetaRedoOp {
|
|
205
|
+
key: '_meta';
|
|
206
|
+
otype: 'meta.redo';
|
|
207
|
+
path: '_meta';
|
|
208
|
+
targetMsgId: string;
|
|
209
|
+
}
|
|
210
|
+
export type Operation = NumberSetOp | NumberAddOp | NumberMultiplyOp | NumberMinOp | NumberMaxOp | StringSetOp | StringConcatOp | BooleanSetOp | BooleanOrOp | BooleanAndOp | Vector3SetOp | Vector3AddOp | Vector3MultiplyOp | QuaternionSetOp | QuaternionMultiplyOp | ColorSetOp | ColorBlendOp | ArraySetOp | ArrayPushOp | ArrayUnionOp | ArrayRemoveOp | ObjectSetOp | ObjectMergeOp | NodeInsertOp | NodeRemoveOp | MetaUndoOp | MetaRedoOp;
|
|
211
|
+
/**
|
|
212
|
+
* SceneNode - Node in the flattened scene graph
|
|
213
|
+
*
|
|
214
|
+
* Properties are stored directly on the node with dot-notation paths:
|
|
215
|
+
* - 'transform.position': [0, 0, 0]
|
|
216
|
+
* - 'color': '#ff0000'
|
|
217
|
+
* - 'opacity': 0.5
|
|
218
|
+
*/
|
|
219
|
+
export interface SceneNode {
|
|
220
|
+
id: string;
|
|
221
|
+
key: string;
|
|
222
|
+
tag: string;
|
|
223
|
+
name: string;
|
|
224
|
+
children: string[];
|
|
225
|
+
clock: VectorClock;
|
|
226
|
+
lamportTime: number;
|
|
227
|
+
createdAt: number;
|
|
228
|
+
updatedAt: number;
|
|
229
|
+
deletedAt?: number;
|
|
230
|
+
[path: string]: unknown;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* SceneGraph - Complete scene representation
|
|
234
|
+
*/
|
|
235
|
+
export interface SceneGraph {
|
|
236
|
+
nodes: Record<string, SceneNode>;
|
|
237
|
+
rootKey: string;
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=OperationTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OperationTypes.d.ts","sourceRoot":"","sources":["../../src/operations/OperationTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operation Types - New design with CRDT wrapper and dtype operations
|
|
3
|
+
*
|
|
4
|
+
* Design:
|
|
5
|
+
* - CRDTMessage: Envelope with CRDT metadata + batch of operations
|
|
6
|
+
* - Operations: Explicit dtype operations (number.set, vector3.add, etc.)
|
|
7
|
+
* - Batching: One message can contain multiple operations on multiple nodes
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=OperationTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OperationTypes.js","sourceRoot":"","sources":["../../src/operations/OperationTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operation Validator - Validates CRDTMessage and operations
|
|
3
|
+
*
|
|
4
|
+
* Validates:
|
|
5
|
+
* - CRDTMessage envelope (CRDT metadata)
|
|
6
|
+
* - Individual operations (dtype operations)
|
|
7
|
+
*/
|
|
8
|
+
export interface ValidationResult {
|
|
9
|
+
valid: boolean;
|
|
10
|
+
errors?: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare class OperationValidator {
|
|
13
|
+
/**
|
|
14
|
+
* Validate a CRDTMessage (envelope + operations)
|
|
15
|
+
*/
|
|
16
|
+
validateMessage(msg: any): ValidationResult;
|
|
17
|
+
/**
|
|
18
|
+
* Validate a single operation
|
|
19
|
+
*/
|
|
20
|
+
validateOperation(op: any): ValidationResult;
|
|
21
|
+
private validateNumberOp;
|
|
22
|
+
private validateStringOp;
|
|
23
|
+
private validateBooleanOp;
|
|
24
|
+
private validateVector3Op;
|
|
25
|
+
private validateQuaternionOp;
|
|
26
|
+
private validateColorOp;
|
|
27
|
+
private validateArrayOp;
|
|
28
|
+
private validateObjectOp;
|
|
29
|
+
private validateNodeOp;
|
|
30
|
+
private validateMetaOp;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=OperationValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OperationValidator.d.ts","sourceRoot":"","sources":["../../src/operations/OperationValidator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,gBAAgB;IA4C3C;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,GAAG,GAAG,gBAAgB;IA2D5C,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,cAAc;CAiBvB"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operation Validator - Validates CRDTMessage and operations
|
|
3
|
+
*
|
|
4
|
+
* Validates:
|
|
5
|
+
* - CRDTMessage envelope (CRDT metadata)
|
|
6
|
+
* - Individual operations (dtype operations)
|
|
7
|
+
*/
|
|
8
|
+
export class OperationValidator {
|
|
9
|
+
/**
|
|
10
|
+
* Validate a CRDTMessage (envelope + operations)
|
|
11
|
+
*/
|
|
12
|
+
validateMessage(msg) {
|
|
13
|
+
const errors = [];
|
|
14
|
+
// Validate envelope
|
|
15
|
+
if (!msg.id || typeof msg.id !== 'string') {
|
|
16
|
+
errors.push('id is required and must be a string');
|
|
17
|
+
}
|
|
18
|
+
if (!msg.sessionId || typeof msg.sessionId !== 'string') {
|
|
19
|
+
errors.push('sessionId is required and must be a string');
|
|
20
|
+
}
|
|
21
|
+
if (!msg.clock || typeof msg.clock !== 'object') {
|
|
22
|
+
errors.push('clock must be an object');
|
|
23
|
+
}
|
|
24
|
+
if (typeof msg.lamportTime !== 'number') {
|
|
25
|
+
errors.push('lamportTime must be a number');
|
|
26
|
+
}
|
|
27
|
+
if (typeof msg.timestamp !== 'number') {
|
|
28
|
+
errors.push('timestamp must be a number');
|
|
29
|
+
}
|
|
30
|
+
if (!Array.isArray(msg.ops)) {
|
|
31
|
+
errors.push('ops must be an array');
|
|
32
|
+
return { valid: false, errors };
|
|
33
|
+
}
|
|
34
|
+
if (msg.ops.length === 0) {
|
|
35
|
+
errors.push('ops array cannot be empty');
|
|
36
|
+
}
|
|
37
|
+
// Validate each operation
|
|
38
|
+
msg.ops.forEach((op, index) => {
|
|
39
|
+
const opErrors = this.validateOperation(op);
|
|
40
|
+
if (!opErrors.valid) {
|
|
41
|
+
errors.push(`op[${index}]: ${opErrors.errors?.join(', ')}`);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
return errors.length > 0 ? { valid: false, errors } : { valid: true };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validate a single operation
|
|
48
|
+
*/
|
|
49
|
+
validateOperation(op) {
|
|
50
|
+
const errors = [];
|
|
51
|
+
// Validate base fields
|
|
52
|
+
if (!op.key || typeof op.key !== 'string') {
|
|
53
|
+
errors.push('key is required and must be a string');
|
|
54
|
+
}
|
|
55
|
+
if (!op.otype || typeof op.otype !== 'string') {
|
|
56
|
+
errors.push('otype is required and must be a string');
|
|
57
|
+
}
|
|
58
|
+
if (!op.path || typeof op.path !== 'string') {
|
|
59
|
+
errors.push('path is required and must be a string');
|
|
60
|
+
}
|
|
61
|
+
// Validate based on otype
|
|
62
|
+
if (op.otype) {
|
|
63
|
+
const [dtype, operation] = op.otype.split('.');
|
|
64
|
+
switch (dtype) {
|
|
65
|
+
case 'number':
|
|
66
|
+
this.validateNumberOp(op, operation, errors);
|
|
67
|
+
break;
|
|
68
|
+
case 'string':
|
|
69
|
+
this.validateStringOp(op, operation, errors);
|
|
70
|
+
break;
|
|
71
|
+
case 'boolean':
|
|
72
|
+
this.validateBooleanOp(op, operation, errors);
|
|
73
|
+
break;
|
|
74
|
+
case 'vector3':
|
|
75
|
+
this.validateVector3Op(op, operation, errors);
|
|
76
|
+
break;
|
|
77
|
+
case 'quaternion':
|
|
78
|
+
this.validateQuaternionOp(op, operation, errors);
|
|
79
|
+
break;
|
|
80
|
+
case 'color':
|
|
81
|
+
this.validateColorOp(op, operation, errors);
|
|
82
|
+
break;
|
|
83
|
+
case 'array':
|
|
84
|
+
this.validateArrayOp(op, operation, errors);
|
|
85
|
+
break;
|
|
86
|
+
case 'object':
|
|
87
|
+
this.validateObjectOp(op, operation, errors);
|
|
88
|
+
break;
|
|
89
|
+
case 'node':
|
|
90
|
+
this.validateNodeOp(op, operation, errors);
|
|
91
|
+
break;
|
|
92
|
+
case 'meta':
|
|
93
|
+
this.validateMetaOp(op, operation, errors);
|
|
94
|
+
break;
|
|
95
|
+
default:
|
|
96
|
+
errors.push(`Unknown dtype: ${dtype}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return errors.length > 0 ? { valid: false, errors } : { valid: true };
|
|
100
|
+
}
|
|
101
|
+
validateNumberOp(op, operation, errors) {
|
|
102
|
+
if (!['set', 'add', 'multiply', 'min', 'max'].includes(operation)) {
|
|
103
|
+
errors.push(`Invalid number operation: ${operation}`);
|
|
104
|
+
}
|
|
105
|
+
if (typeof op.value !== 'number') {
|
|
106
|
+
errors.push('number operation requires value to be a number');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
validateStringOp(op, operation, errors) {
|
|
110
|
+
if (!['set', 'concat'].includes(operation)) {
|
|
111
|
+
errors.push(`Invalid string operation: ${operation}`);
|
|
112
|
+
}
|
|
113
|
+
if (typeof op.value !== 'string') {
|
|
114
|
+
errors.push('string operation requires value to be a string');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
validateBooleanOp(op, operation, errors) {
|
|
118
|
+
if (!['set', 'or', 'and'].includes(operation)) {
|
|
119
|
+
errors.push(`Invalid boolean operation: ${operation}`);
|
|
120
|
+
}
|
|
121
|
+
if (typeof op.value !== 'boolean') {
|
|
122
|
+
errors.push('boolean operation requires value to be a boolean');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
validateVector3Op(op, operation, errors) {
|
|
126
|
+
if (!['set', 'add', 'multiply'].includes(operation)) {
|
|
127
|
+
errors.push(`Invalid vector3 operation: ${operation}`);
|
|
128
|
+
}
|
|
129
|
+
if (!Array.isArray(op.value) ||
|
|
130
|
+
op.value.length !== 3 ||
|
|
131
|
+
!op.value.every((v) => typeof v === 'number')) {
|
|
132
|
+
errors.push('vector3 operation requires value to be [number, number, number]');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
validateQuaternionOp(op, operation, errors) {
|
|
136
|
+
if (!['set', 'multiply'].includes(operation)) {
|
|
137
|
+
errors.push(`Invalid quaternion operation: ${operation}`);
|
|
138
|
+
}
|
|
139
|
+
if (!Array.isArray(op.value) ||
|
|
140
|
+
op.value.length !== 4 ||
|
|
141
|
+
!op.value.every((v) => typeof v === 'number')) {
|
|
142
|
+
errors.push('quaternion operation requires value to be [number, number, number, number]');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
validateColorOp(op, operation, errors) {
|
|
146
|
+
if (!['set', 'blend'].includes(operation)) {
|
|
147
|
+
errors.push(`Invalid color operation: ${operation}`);
|
|
148
|
+
}
|
|
149
|
+
if (typeof op.value !== 'string') {
|
|
150
|
+
errors.push('color operation requires value to be a string');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
validateArrayOp(op, operation, errors) {
|
|
154
|
+
if (!['set', 'push', 'union', 'remove'].includes(operation)) {
|
|
155
|
+
errors.push(`Invalid array operation: ${operation}`);
|
|
156
|
+
}
|
|
157
|
+
if (operation === 'set' || operation === 'union') {
|
|
158
|
+
if (!Array.isArray(op.value)) {
|
|
159
|
+
errors.push(`array.${operation} requires value to be an array`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// push and remove can be any value
|
|
163
|
+
}
|
|
164
|
+
validateObjectOp(op, operation, errors) {
|
|
165
|
+
if (!['set', 'merge'].includes(operation)) {
|
|
166
|
+
errors.push(`Invalid object operation: ${operation}`);
|
|
167
|
+
}
|
|
168
|
+
if (typeof op.value !== 'object' || Array.isArray(op.value)) {
|
|
169
|
+
errors.push('object operation requires value to be an object');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
validateNodeOp(op, operation, errors) {
|
|
173
|
+
if (!['insert', 'remove'].includes(operation)) {
|
|
174
|
+
errors.push(`Invalid node operation: ${operation}`);
|
|
175
|
+
}
|
|
176
|
+
if (operation === 'insert') {
|
|
177
|
+
if (!op.value || typeof op.value !== 'object') {
|
|
178
|
+
errors.push('node.insert requires value to be an object');
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (!op.value.id || typeof op.value.id !== 'string') {
|
|
182
|
+
errors.push('node.insert requires value.id (string)');
|
|
183
|
+
}
|
|
184
|
+
if (!op.value.tag || typeof op.value.tag !== 'string') {
|
|
185
|
+
errors.push('node.insert requires value.tag (string)');
|
|
186
|
+
}
|
|
187
|
+
if (!op.value.name || typeof op.value.name !== 'string') {
|
|
188
|
+
errors.push('node.insert requires value.name (string)');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// node.remove doesn't have value
|
|
192
|
+
}
|
|
193
|
+
validateMetaOp(op, operation, errors) {
|
|
194
|
+
if (!['undo', 'redo'].includes(operation)) {
|
|
195
|
+
errors.push(`Invalid meta operation: ${operation}`);
|
|
196
|
+
}
|
|
197
|
+
if (op.key !== '_meta') {
|
|
198
|
+
errors.push('meta operation requires key to be "_meta"');
|
|
199
|
+
}
|
|
200
|
+
if (op.path !== '_meta') {
|
|
201
|
+
errors.push('meta operation requires path to be "_meta"');
|
|
202
|
+
}
|
|
203
|
+
if (!op.targetMsgId || typeof op.targetMsgId !== 'string') {
|
|
204
|
+
errors.push('meta operation requires targetMsgId (string)');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=OperationValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OperationValidator.js","sourceRoot":"","sources":["../../src/operations/OperationValidator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,eAAe,CAAC,GAAQ;QACtB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,oBAAoB;QACpB,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;QAED,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;QAED,0BAA0B;QAC1B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,KAAa,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,EAAO;QACvB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,uBAAuB;QACvB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;QAED,0BAA0B;QAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE/C,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,QAAQ;oBACX,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC7C,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC7C,MAAM;gBACR,KAAK,SAAS;oBACZ,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,SAAS;oBACZ,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,YAAY;oBACf,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBACjD,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC7C,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC3C,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC3C,MAAM;gBACR;oBACE,MAAM,CAAC,IAAI,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxE,CAAC;IAEO,gBAAgB,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QACnE,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QACnE,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QACpE,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QACpE,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YACrB,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAClD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QACvE,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YACrB,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAClD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QAClE,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QAClE,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,SAAS,SAAS,gCAAgC,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QACD,mCAAmC;IACrC,CAAC;IAEO,gBAAgB,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QACnE,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QACjE,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACxD,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACzD,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,iCAAiC;IACnC,CAAC;IAEO,cAAc,CAAC,EAAO,EAAE,SAAiB,EAAE,MAAgB;QACjE,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array operations: set, push, remove, union
|
|
3
|
+
*/
|
|
4
|
+
import type { SceneGraph, ArraySetOp, ArrayPushOp, ArrayRemoveOp, ArrayUnionOp } from '../OperationTypes.js';
|
|
5
|
+
import type { OpMeta } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* array.set - Last-Write-Wins (replace the entire array)
|
|
8
|
+
*/
|
|
9
|
+
export declare function ArraySet(draft: SceneGraph, op: ArraySetOp, meta: OpMeta): void;
|
|
10
|
+
/**
|
|
11
|
+
* array.push - Append item to an array
|
|
12
|
+
*/
|
|
13
|
+
export declare function ArrayPush(draft: SceneGraph, op: ArrayPushOp, meta: OpMeta): void;
|
|
14
|
+
/**
|
|
15
|
+
* array.remove - Remove item from array (by value equality)
|
|
16
|
+
*/
|
|
17
|
+
export declare function ArrayRemove(draft: SceneGraph, op: ArrayRemoveOp, meta: OpMeta): void;
|
|
18
|
+
/**
|
|
19
|
+
* array.union - Union of arrays (set-like, no duplicates)
|
|
20
|
+
*/
|
|
21
|
+
export declare function ArrayUnion(draft: SceneGraph, op: ArrayUnionOp, meta: OpMeta): void;
|
|
22
|
+
//# sourceMappingURL=array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/operations/apply/array.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC7G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC;;GAEG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,MAAM,GACX,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,MAAM,GACX,IAAI,CAKN;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,MAAM,GACX,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,MAAM,GACX,IAAI,CAoBN"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array operations: set, push, remove, union
|
|
3
|
+
*/
|
|
4
|
+
import { getNodeProperty, setNodeProperty, setNodePropertyLWW } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* array.set - Last-Write-Wins (replace the entire array)
|
|
7
|
+
*/
|
|
8
|
+
export function ArraySet(draft, op, meta) {
|
|
9
|
+
const node = draft.nodes[op.key];
|
|
10
|
+
if (!node || node.deletedAt)
|
|
11
|
+
return;
|
|
12
|
+
setNodePropertyLWW(node, op.path, [...op.value], meta);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* array.push - Append item to an array
|
|
16
|
+
*/
|
|
17
|
+
export function ArrayPush(draft, op, meta) {
|
|
18
|
+
const node = draft.nodes[op.key];
|
|
19
|
+
if (!node || node.deletedAt)
|
|
20
|
+
return;
|
|
21
|
+
const current = getNodeProperty(node, op.path, []);
|
|
22
|
+
setNodeProperty(node, op.path, [...current, op.value], meta);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* array.remove - Remove item from array (by value equality)
|
|
26
|
+
*/
|
|
27
|
+
export function ArrayRemove(draft, op, meta) {
|
|
28
|
+
const node = draft.nodes[op.key];
|
|
29
|
+
if (!node || node.deletedAt)
|
|
30
|
+
return;
|
|
31
|
+
const current = getNodeProperty(node, op.path, []);
|
|
32
|
+
const filtered = current.filter(item => {
|
|
33
|
+
// Handle primitive equality and object reference
|
|
34
|
+
if (typeof item === 'object' && typeof op.value === 'object') {
|
|
35
|
+
return JSON.stringify(item) !== JSON.stringify(op.value);
|
|
36
|
+
}
|
|
37
|
+
return item !== op.value;
|
|
38
|
+
});
|
|
39
|
+
setNodeProperty(node, op.path, filtered, meta);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* array.union - Union of arrays (set-like, no duplicates)
|
|
43
|
+
*/
|
|
44
|
+
export function ArrayUnion(draft, op, meta) {
|
|
45
|
+
const node = draft.nodes[op.key];
|
|
46
|
+
if (!node || node.deletedAt)
|
|
47
|
+
return;
|
|
48
|
+
const current = getNodeProperty(node, op.path, []);
|
|
49
|
+
// Use Set for primitives, manual check for objects
|
|
50
|
+
const result = [...current];
|
|
51
|
+
for (const item of op.value) {
|
|
52
|
+
const exists = result.some(existing => {
|
|
53
|
+
if (typeof existing === 'object' && typeof item === 'object') {
|
|
54
|
+
return JSON.stringify(existing) === JSON.stringify(item);
|
|
55
|
+
}
|
|
56
|
+
return existing === item;
|
|
57
|
+
});
|
|
58
|
+
if (!exists) {
|
|
59
|
+
result.push(item);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
setNodeProperty(node, op.path, result, meta);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../../src/operations/apply/array.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElF;;GAEG;AACH,MAAM,UAAU,QAAQ,CACtB,KAAiB,EACjB,EAAc,EACd,IAAY;IAEZ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO;IACpC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,KAAiB,EACjB,EAAe,EACf,IAAY;IAEZ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO;IACpC,MAAM,OAAO,GAAG,eAAe,CAAY,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9D,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAiB,EACjB,EAAiB,EACjB,IAAY;IAEZ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO;IACpC,MAAM,OAAO,GAAG,eAAe,CAAY,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACrC,iDAAiD;QACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,KAAiB,EACjB,EAAgB,EAChB,IAAY;IAEZ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO;IACpC,MAAM,OAAO,GAAG,eAAe,CAAY,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE9D,mDAAmD;IACnD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACpC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,QAAQ,KAAK,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boolean operations: set, or, and
|
|
3
|
+
*/
|
|
4
|
+
import type { SceneGraph, BooleanSetOp, BooleanOrOp, BooleanAndOp } from '../OperationTypes.js';
|
|
5
|
+
import type { OpMeta } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* boolean.set - Last-Write-Wins
|
|
8
|
+
*/
|
|
9
|
+
export declare function BooleanSet(draft: SceneGraph, op: BooleanSetOp, meta: OpMeta): void;
|
|
10
|
+
/**
|
|
11
|
+
* boolean.or - Logical OR (enable wins)
|
|
12
|
+
*/
|
|
13
|
+
export declare function BooleanOr(draft: SceneGraph, op: BooleanOrOp, meta: OpMeta): void;
|
|
14
|
+
/**
|
|
15
|
+
* boolean.and - Logical AND (disable wins)
|
|
16
|
+
*/
|
|
17
|
+
export declare function BooleanAnd(draft: SceneGraph, op: BooleanAndOp, meta: OpMeta): void;
|
|
18
|
+
//# sourceMappingURL=boolean.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../../src/operations/apply/boolean.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,MAAM,GACX,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,MAAM,GACX,IAAI,CAKN;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,MAAM,GACX,IAAI,CAKN"}
|