@powerhousedao/powerhouse-vetra-packages 6.0.0-dev.105 → 6.0.0-dev.106

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.
Files changed (72) hide show
  1. package/dist/document-models/document-model/index.d.ts +2 -0
  2. package/dist/document-models/document-model/index.d.ts.map +1 -0
  3. package/dist/document-models/document-model/index.js +2 -0
  4. package/dist/document-models/document-model/index.js.map +1 -0
  5. package/dist/document-models/document-model/test/document-skip-operations.test.d.ts +2 -0
  6. package/dist/document-models/document-model/test/document-skip-operations.test.d.ts.map +1 -0
  7. package/dist/document-models/document-model/test/document-skip-operations.test.js +494 -0
  8. package/dist/document-models/document-model/test/document-skip-operations.test.js.map +1 -0
  9. package/dist/document-models/document-model/test/prune.test.d.ts +2 -0
  10. package/dist/document-models/document-model/test/prune.test.d.ts.map +1 -0
  11. package/dist/document-models/document-model/test/prune.test.js +158 -0
  12. package/dist/document-models/document-model/test/prune.test.js.map +1 -0
  13. package/dist/document-models/document-model/test/reducer.test.d.ts +2 -0
  14. package/dist/document-models/document-model/test/reducer.test.d.ts.map +1 -0
  15. package/dist/document-models/document-model/test/reducer.test.js +283 -0
  16. package/dist/document-models/document-model/test/reducer.test.js.map +1 -0
  17. package/dist/document-models/document-model/test/skip-operations.test.d.ts +2 -0
  18. package/dist/document-models/document-model/test/skip-operations.test.d.ts.map +1 -0
  19. package/dist/document-models/document-model/test/skip-operations.test.js +214 -0
  20. package/dist/document-models/document-model/test/skip-operations.test.js.map +1 -0
  21. package/dist/document-models/document-model/test/validation.test.d.ts +2 -0
  22. package/dist/document-models/document-model/test/validation.test.d.ts.map +1 -0
  23. package/dist/document-models/document-model/test/validation.test.js +453 -0
  24. package/dist/document-models/document-model/test/validation.test.js.map +1 -0
  25. package/dist/document-models/document-model/test/versioning.test.d.ts +2 -0
  26. package/dist/document-models/document-model/test/versioning.test.d.ts.map +1 -0
  27. package/dist/document-models/document-model/test/versioning.test.js +95 -0
  28. package/dist/document-models/document-model/test/versioning.test.js.map +1 -0
  29. package/dist/document-models/document-model/test/zip.test.d.ts +2 -0
  30. package/dist/document-models/document-model/test/zip.test.d.ts.map +1 -0
  31. package/dist/document-models/document-model/test/zip.test.js +79 -0
  32. package/dist/document-models/document-model/test/zip.test.js.map +1 -0
  33. package/dist/document-models/document-models.d.ts +1 -1
  34. package/dist/document-models/document-models.d.ts.map +1 -1
  35. package/dist/document-models/document-models.js +5 -1
  36. package/dist/document-models/document-models.js.map +1 -1
  37. package/dist/document-models/index.d.ts +2 -0
  38. package/dist/document-models/index.d.ts.map +1 -0
  39. package/dist/document-models/index.js +2 -0
  40. package/dist/document-models/index.js.map +1 -0
  41. package/dist/editors/document-model-editor/components/module-form.d.ts +1 -1
  42. package/dist/editors/document-model-editor/components/module-form.d.ts.map +1 -1
  43. package/dist/editors/document-model-editor/components/module.d.ts +1 -1
  44. package/dist/editors/document-model-editor/components/module.d.ts.map +1 -1
  45. package/dist/editors/document-model-editor/components/modules.d.ts +1 -1
  46. package/dist/editors/document-model-editor/components/modules.d.ts.map +1 -1
  47. package/dist/editors/document-model-editor/components/operation-description-form.d.ts +1 -1
  48. package/dist/editors/document-model-editor/components/operation-description-form.d.ts.map +1 -1
  49. package/dist/editors/document-model-editor/components/operation-error-form.d.ts +1 -1
  50. package/dist/editors/document-model-editor/components/operation-error-form.d.ts.map +1 -1
  51. package/dist/editors/document-model-editor/components/operation-errors.d.ts +1 -1
  52. package/dist/editors/document-model-editor/components/operation-errors.d.ts.map +1 -1
  53. package/dist/editors/document-model-editor/components/operation-form.d.ts +1 -1
  54. package/dist/editors/document-model-editor/components/operation-form.d.ts.map +1 -1
  55. package/dist/editors/document-model-editor/components/operation.d.ts +1 -1
  56. package/dist/editors/document-model-editor/components/operation.d.ts.map +1 -1
  57. package/dist/editors/document-model-editor/components/operations.d.ts +1 -1
  58. package/dist/editors/document-model-editor/components/operations.d.ts.map +1 -1
  59. package/dist/editors/document-model-editor/editor.js +2 -2
  60. package/dist/editors/document-model-editor/editor.js.map +1 -1
  61. package/dist/editors/document-model-editor/hooks/useDocumentModelDocument.d.ts +1 -1
  62. package/dist/editors/document-model-editor/hooks/useDocumentModelDocument.d.ts.map +1 -1
  63. package/dist/editors/document-model-editor/module.d.ts +1 -1
  64. package/dist/editors/document-model-editor/module.d.ts.map +1 -1
  65. package/dist/editors/editors.d.ts +1 -1
  66. package/dist/editors/editors.d.ts.map +1 -1
  67. package/dist/editors/generic-drive-explorer/editor.d.ts +1 -1
  68. package/dist/editors/generic-drive-explorer/editor.d.ts.map +1 -1
  69. package/dist/editors/generic-drive-explorer/module.d.ts +1 -1
  70. package/dist/editors/generic-drive-explorer/module.d.ts.map +1 -1
  71. package/dist/tsconfig.tsbuildinfo +1 -1
  72. package/package.json +14 -4
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../document-models/document-model/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../document-models/document-model/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=document-skip-operations.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-skip-operations.test.d.ts","sourceRoot":"","sources":["../../../../document-models/document-model/test/document-skip-operations.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,494 @@
1
+ import { baseCreateDocument, garbageCollectDocumentOperations, mapSkippedOperations, replayOperations, setName, } from "@powerhousedao/shared/document-model";
2
+ import { baseCountReducer, countReducer, createCountDocumentState, defaultPHDocumentCreateState, error, fakeOperation, increment, mapOperations, testCreateBaseState, wrappedEmptyReducer, } from "document-model/test";
3
+ import { describe, expect, it } from "vitest";
4
+ describe("skip operations", () => {
5
+ describe("skip operation param", () => {
6
+ it("should include skip param in base operations with default value to 0 if not provided", () => {
7
+ let document = baseCreateDocument(defaultPHDocumentCreateState);
8
+ document = wrappedEmptyReducer(document, setName("TEST_1"));
9
+ document = wrappedEmptyReducer(document, setName("TEST_2"));
10
+ document = wrappedEmptyReducer(document, setName("TEST_3"));
11
+ expect(document.header.revision.global).toBe(3);
12
+ const ops = mapOperations(document.operations.global);
13
+ expect(ops.length).toBe(3);
14
+ ops.forEach((op) => {
15
+ expect(op).toHaveProperty("skip", 0);
16
+ });
17
+ });
18
+ it("should include skip param in base operations with provided value", () => {
19
+ let document = baseCreateDocument(defaultPHDocumentCreateState);
20
+ document = wrappedEmptyReducer(document, setName("TEST_1"), undefined, {
21
+ skip: 1,
22
+ ignoreSkipOperations: true,
23
+ });
24
+ document = wrappedEmptyReducer(document, setName("TEST_2"), undefined, {
25
+ skip: 2,
26
+ ignoreSkipOperations: true,
27
+ });
28
+ document = wrappedEmptyReducer(document, setName("TEST_3"), undefined, {
29
+ skip: 3,
30
+ ignoreSkipOperations: true,
31
+ });
32
+ expect(document.header.revision.global).toBe(3);
33
+ const ops = mapOperations(document.operations.global);
34
+ expect(ops.length).toBe(3);
35
+ ops.forEach((op, index) => {
36
+ expect(op).toHaveProperty("skip", index + 1);
37
+ });
38
+ });
39
+ });
40
+ describe("mapSkippedOperations", () => {
41
+ it('should tag as "ignored" operation 2 when operation 3 -> (skip=1)', () => {
42
+ const operations = [
43
+ fakeOperation(1),
44
+ fakeOperation(2),
45
+ fakeOperation(3, 1),
46
+ ];
47
+ const ignoredIndexes = [2];
48
+ const mappedOps = mapSkippedOperations(operations);
49
+ expect(mappedOps.length).toBe(3);
50
+ mappedOps.forEach((mapOp) => {
51
+ let ignore = false;
52
+ if (ignoredIndexes.includes(mapOp.operation.index)) {
53
+ ignore = true;
54
+ }
55
+ expect(mapOp).toHaveProperty("ignore", ignore);
56
+ });
57
+ });
58
+ it('should tag as "ignored" operation 2, 3 and 4 when operation 5 -> (skip=3)', () => {
59
+ const operations = [
60
+ fakeOperation(1),
61
+ fakeOperation(2),
62
+ fakeOperation(3),
63
+ fakeOperation(4),
64
+ fakeOperation(5, 3),
65
+ ];
66
+ const ignoredIndexes = [2, 3, 4];
67
+ const mappedOps = mapSkippedOperations(operations);
68
+ expect(mappedOps.length).toBe(5);
69
+ mappedOps.forEach((mapOp) => {
70
+ let ignore = false;
71
+ if (ignoredIndexes.includes(mapOp.operation.index)) {
72
+ ignore = true;
73
+ }
74
+ expect(mapOp).toHaveProperty("ignore", ignore);
75
+ });
76
+ });
77
+ it('should tag as "ignored" operation 2 and 5 when opration 3 -> (skip=1) and operation 6 -> (skip=1)', () => {
78
+ const operations = [
79
+ fakeOperation(1),
80
+ fakeOperation(2),
81
+ fakeOperation(3, 1),
82
+ fakeOperation(4),
83
+ fakeOperation(5),
84
+ fakeOperation(6, 1),
85
+ ];
86
+ const ignoredIndexes = [2, 5];
87
+ const mappedOps = mapSkippedOperations(operations);
88
+ expect(mappedOps.length).toBe(6);
89
+ mappedOps.forEach((mapOp) => {
90
+ let ignore = false;
91
+ if (ignoredIndexes.includes(mapOp.operation.index)) {
92
+ ignore = true;
93
+ }
94
+ expect(mapOp).toHaveProperty("ignore", ignore);
95
+ });
96
+ });
97
+ it('should tag as "ignored" operation 1, 2, 3, 4, 5 and 6 when opration 7 -> (skip=6)', () => {
98
+ const operations = [
99
+ fakeOperation(1),
100
+ fakeOperation(2),
101
+ fakeOperation(3),
102
+ fakeOperation(4),
103
+ fakeOperation(5),
104
+ fakeOperation(6),
105
+ fakeOperation(7, 6),
106
+ ];
107
+ const ignoredIndexes = [1, 2, 3, 4, 5, 6];
108
+ const mappedOps = mapSkippedOperations(operations);
109
+ expect(mappedOps.length).toBe(7);
110
+ mappedOps.forEach((mapOp) => {
111
+ let ignore = false;
112
+ if (ignoredIndexes.includes(mapOp.operation.index)) {
113
+ ignore = true;
114
+ }
115
+ expect(mapOp).toHaveProperty("ignore", ignore);
116
+ });
117
+ });
118
+ it('should tag as "ignored" operation 2, 3, and 4 when operation 5 -> (skip=2) and operation 3 -> (skip=1)', () => {
119
+ const operations = [
120
+ fakeOperation(1),
121
+ fakeOperation(2),
122
+ fakeOperation(3, 1),
123
+ fakeOperation(4),
124
+ fakeOperation(5, 2),
125
+ ];
126
+ const ignoredIndexes = [2, 3, 4];
127
+ const mappedOps = mapSkippedOperations(operations);
128
+ expect(mappedOps.length).toBe(5);
129
+ mappedOps.forEach((mapOp) => {
130
+ let ignore = false;
131
+ if (ignoredIndexes.includes(mapOp.operation.index)) {
132
+ ignore = true;
133
+ }
134
+ expect(mapOp).toHaveProperty("ignore", ignore);
135
+ });
136
+ });
137
+ it('should tag as "ignored" operations 3, 4, 5, 6, and 7 when operation 6 -> (skip=1) and operation 8 -> (skip=5)', () => {
138
+ const operations = [
139
+ fakeOperation(1),
140
+ fakeOperation(2),
141
+ fakeOperation(3),
142
+ fakeOperation(4),
143
+ fakeOperation(5),
144
+ fakeOperation(6, 1),
145
+ fakeOperation(7),
146
+ fakeOperation(8, 5),
147
+ ];
148
+ const ignoredIndexes = [3, 4, 5, 6, 7];
149
+ const mappedOps = mapSkippedOperations(operations);
150
+ expect(mappedOps.length).toBe(8);
151
+ mappedOps.forEach((mapOp) => {
152
+ let ignore = false;
153
+ if (ignoredIndexes.includes(mapOp.operation.index)) {
154
+ ignore = true;
155
+ }
156
+ expect(mapOp).toHaveProperty("ignore", ignore);
157
+ });
158
+ });
159
+ it('should tag all the previous operations as "ignored" when operation 5 -> (skip=4)', () => {
160
+ const operations = [
161
+ fakeOperation(1),
162
+ fakeOperation(2),
163
+ fakeOperation(3),
164
+ fakeOperation(4),
165
+ fakeOperation(5, 4),
166
+ ];
167
+ const ignoredIndexes = [1, 2, 3, 4];
168
+ const mappedOps = mapSkippedOperations(operations);
169
+ expect(mappedOps.length).toBe(5);
170
+ mappedOps.forEach((mapOp) => {
171
+ let ignore = false;
172
+ if (ignoredIndexes.includes(mapOp.operation.index)) {
173
+ ignore = true;
174
+ }
175
+ expect(mapOp).toHaveProperty("ignore", ignore);
176
+ });
177
+ });
178
+ it("should not skip operations if there's not skipped operations and skippedHeadOperations is not provided", () => {
179
+ const operations = [fakeOperation(1), fakeOperation(2), fakeOperation(3)];
180
+ const mappedOps = mapSkippedOperations(operations);
181
+ expect(mappedOps.length).toBe(3);
182
+ mappedOps.forEach((mapOp) => {
183
+ expect(mapOp).toHaveProperty("ignore", false);
184
+ });
185
+ });
186
+ it("should skip the latest operation when skippedHeadOperations = 1", () => {
187
+ const operations = [fakeOperation(1), fakeOperation(2), fakeOperation(3)];
188
+ const ignoredIndexes = [3];
189
+ const mappedOps = mapSkippedOperations(operations, 1);
190
+ expect(mappedOps.length).toBe(3);
191
+ mappedOps.forEach((mapOp) => {
192
+ let ignore = false;
193
+ if (ignoredIndexes.includes(mapOp.operation.index)) {
194
+ ignore = true;
195
+ }
196
+ expect(mapOp).toHaveProperty("ignore", ignore);
197
+ });
198
+ });
199
+ it("should skip the latest 2 operations when skippedHeadOperations = 2", () => {
200
+ const operations = [
201
+ fakeOperation(1),
202
+ fakeOperation(2),
203
+ fakeOperation(3),
204
+ fakeOperation(4),
205
+ fakeOperation(5),
206
+ ];
207
+ const ignoredIndexes = [4, 5];
208
+ const mappedOps = mapSkippedOperations(operations, 2);
209
+ expect(mappedOps.length).toBe(5);
210
+ mappedOps.forEach((mapOp) => {
211
+ let ignore = false;
212
+ if (ignoredIndexes.includes(mapOp.operation.index)) {
213
+ ignore = true;
214
+ }
215
+ expect(mapOp).toHaveProperty("ignore", ignore);
216
+ });
217
+ });
218
+ it("should be able to detect cleared operations", () => {
219
+ const operations = [
220
+ fakeOperation(0),
221
+ fakeOperation(1),
222
+ fakeOperation(3, 1),
223
+ ];
224
+ const mappedOps = mapSkippedOperations(operations);
225
+ expect(mappedOps.length).toBe(3);
226
+ mappedOps.forEach((mapOp) => {
227
+ expect(mapOp).toHaveProperty("ignore", false);
228
+ });
229
+ });
230
+ });
231
+ describe("replayOperations", () => {
232
+ it("should ignore operation 2, when operation 3 -> (skip=1)", () => {
233
+ const initialState = testCreateBaseState({ count: 0 }, { name: "" });
234
+ let document = baseCreateDocument(createCountDocumentState, initialState);
235
+ document = countReducer(document, increment()); // valid operation, skip 0
236
+ document = countReducer(document, increment()); // skipped
237
+ document = countReducer(
238
+ // valid operation, skip 1
239
+ document, increment(), undefined, { skip: 1, ignoreSkipOperations: false });
240
+ const clearedOperations = garbageCollectDocumentOperations(document.operations);
241
+ const replayedDoc = replayOperations(initialState, clearedOperations, baseCountReducer, document.header);
242
+ expect(replayedDoc.header.revision.global).toBe(3);
243
+ expect(replayedDoc.operations.global.length).toBe(2);
244
+ expect(replayedDoc.operations.global).toMatchObject([
245
+ {
246
+ type: "INCREMENT",
247
+ skip: 0,
248
+ index: 0,
249
+ },
250
+ {
251
+ type: "INCREMENT",
252
+ skip: 1,
253
+ index: 2,
254
+ },
255
+ ]);
256
+ });
257
+ it("should ignore operation 2, 3 and 4, when operation 5 -> (skip=3)", () => {
258
+ const initialState = testCreateBaseState({ count: 0 }, { name: "" });
259
+ let document = baseCreateDocument(createCountDocumentState, initialState);
260
+ document = countReducer(document, increment()); // valid operation, skip 0
261
+ document = countReducer(document, increment()); // skipped
262
+ document = countReducer(document, increment()); // skipped
263
+ document = countReducer(document, increment()); // skipped
264
+ document = countReducer(
265
+ // valid operation, skip 3
266
+ document, increment(), undefined, { skip: 3, ignoreSkipOperations: true });
267
+ const clearedOperations = garbageCollectDocumentOperations(document.operations);
268
+ const replayedDoc = replayOperations(initialState, clearedOperations, baseCountReducer, document.header);
269
+ expect(replayedDoc.header.revision.global).toBe(5);
270
+ expect(replayedDoc.operations.global.length).toBe(2);
271
+ expect(replayedDoc.operations.global).toMatchObject([
272
+ {
273
+ type: "INCREMENT",
274
+ skip: 0,
275
+ index: 0,
276
+ },
277
+ {
278
+ type: "INCREMENT",
279
+ skip: 3,
280
+ index: 4,
281
+ },
282
+ ]);
283
+ });
284
+ it("should ignore operation 2 and 5, when operation 3 -> (skip=1) and operation 6 -> (skip=1)", () => {
285
+ const initialState = testCreateBaseState({ count: 0 }, { name: "" });
286
+ let document = baseCreateDocument(createCountDocumentState, initialState);
287
+ document = countReducer(document, increment()); // valid operation, skip 0
288
+ document = countReducer(document, increment()); // skipped
289
+ document = countReducer(
290
+ // valid operation, skip 1
291
+ document, increment(), undefined, { skip: 1, ignoreSkipOperations: true });
292
+ document = countReducer(document, increment()); // valid operation, skip 0
293
+ document = countReducer(document, increment()); // skipped
294
+ document = countReducer(
295
+ // valid operation, skip 1
296
+ document, increment(), undefined, { skip: 1, ignoreSkipOperations: true });
297
+ const clearedOperations = garbageCollectDocumentOperations(document.operations);
298
+ const replayedDoc = replayOperations(initialState, clearedOperations, baseCountReducer, document.header);
299
+ expect(replayedDoc.header.revision.global).toBe(6);
300
+ expect(replayedDoc.operations.global.length).toBe(4);
301
+ expect(replayedDoc.operations.global).toMatchObject([
302
+ {
303
+ type: "INCREMENT",
304
+ skip: 0,
305
+ index: 0,
306
+ },
307
+ {
308
+ type: "INCREMENT",
309
+ skip: 1,
310
+ index: 2,
311
+ },
312
+ {
313
+ type: "INCREMENT",
314
+ skip: 0,
315
+ index: 3,
316
+ },
317
+ {
318
+ type: "INCREMENT",
319
+ skip: 1,
320
+ index: 5,
321
+ },
322
+ ]);
323
+ });
324
+ it("should ignore all the previous operations, when operation 5 -> (skip=4)", () => {
325
+ const initialState = testCreateBaseState({ count: 0 }, { name: "" });
326
+ let document = baseCreateDocument(createCountDocumentState, initialState);
327
+ document = countReducer(document, increment()); // skipped
328
+ document = countReducer(document, increment()); // skipped
329
+ document = countReducer(document, increment()); // skipped
330
+ document = countReducer(document, increment()); // skipped
331
+ document = countReducer(
332
+ // valid operation, skip 4
333
+ document, increment(), undefined, { skip: 4, ignoreSkipOperations: true });
334
+ const clearedOperations = garbageCollectDocumentOperations(document.operations);
335
+ const replayedDoc = replayOperations(initialState, clearedOperations, baseCountReducer, document.header);
336
+ expect(replayedDoc.header.revision.global).toBe(5);
337
+ expect(replayedDoc.operations.global.length).toBe(1);
338
+ expect(replayedDoc.operations.global).toMatchObject([
339
+ {
340
+ type: "INCREMENT",
341
+ skip: 4,
342
+ index: 4,
343
+ },
344
+ ]);
345
+ });
346
+ it("should skip operations when dispatch a new action with an skip value", () => {
347
+ const initialState = testCreateBaseState({ count: 0 }, { name: "" });
348
+ let document = baseCreateDocument(createCountDocumentState, initialState);
349
+ document = countReducer(document, increment());
350
+ document = countReducer(document, increment());
351
+ document = countReducer(document, increment(), undefined, {
352
+ skip: 1,
353
+ });
354
+ document = countReducer(document, increment());
355
+ document = countReducer(document, increment(), undefined, {
356
+ skip: 1,
357
+ });
358
+ expect(document.state.global.count).toBe(3);
359
+ expect(document.operations.global.length).toBe(3);
360
+ expect(document.operations.global).toMatchObject([
361
+ {
362
+ type: "INCREMENT",
363
+ skip: 0,
364
+ index: 0,
365
+ },
366
+ {
367
+ type: "INCREMENT",
368
+ skip: 1,
369
+ index: 2,
370
+ },
371
+ {
372
+ type: "INCREMENT",
373
+ skip: 1,
374
+ index: 4,
375
+ },
376
+ ]);
377
+ });
378
+ it("should handle compounded GC across multiple skip operations", () => {
379
+ const initialState = testCreateBaseState({ count: 0 }, { name: "" });
380
+ let document = baseCreateDocument(createCountDocumentState, initialState);
381
+ // Phase 1: Build 6 operations (indices 0-5)
382
+ document = countReducer(document, increment()); // index 0
383
+ document = countReducer(document, increment()); // index 1
384
+ document = countReducer(document, increment()); // index 2
385
+ document = countReducer(document, increment()); // index 3
386
+ document = countReducer(document, increment()); // index 4
387
+ document = countReducer(document, increment()); // index 5
388
+ expect(document.operations.global.length).toBe(6);
389
+ // Phase 2: skip=4 → GC removes ops 2-5, doc = [op0, op1, op6(6,4)]
390
+ document = countReducer(document, increment(), undefined, {
391
+ skip: 4,
392
+ });
393
+ expect(document.operations.global.length).toBe(3);
394
+ expect(document.operations.global).toMatchObject([
395
+ { index: 0, skip: 0 },
396
+ { index: 1, skip: 0 },
397
+ { index: 6, skip: 4 },
398
+ ]);
399
+ // Phase 3: skip=1 → GC removes op6, doc = [op0, op1, op7(7,1)]
400
+ document = countReducer(document, increment(), undefined, {
401
+ skip: 1,
402
+ });
403
+ expect(document.operations.global.length).toBe(3);
404
+ expect(document.operations.global).toMatchObject([
405
+ { index: 0, skip: 0 },
406
+ { index: 1, skip: 0 },
407
+ { index: 7, skip: 1 },
408
+ ]);
409
+ // Phase 4: Two regular ops (skip=0)
410
+ document = countReducer(document, increment()); // index 8
411
+ document = countReducer(document, increment()); // index 9
412
+ expect(document.operations.global.length).toBe(5);
413
+ // Phase 5: skip=2 → processSkipOperation replays [op0, op1, op7(7,1)]
414
+ // Before the fix, this threw:
415
+ // "Missing operations: expected 2 with skip 0 or equivalent, got index 7 with skip 1"
416
+ // because op7's skip=1 was set to bridge from op6 (now removed), not from op1.
417
+ document = countReducer(document, increment(), undefined, {
418
+ skip: 2,
419
+ });
420
+ expect(document.operations.global.length).toBe(4);
421
+ expect(document.operations.global).toMatchObject([
422
+ { index: 0, skip: 0 },
423
+ { index: 1, skip: 0 },
424
+ { index: 7, skip: 1 },
425
+ { index: 10, skip: 2 },
426
+ ]);
427
+ expect(document.state.global.count).toBe(4);
428
+ });
429
+ it("should not throw when replaying GC'd operations with index gaps from prior GC passes", () => {
430
+ // This test directly exercises the bug: replayOperations on operations
431
+ // that survived multiple GC passes where skip values no longer bridge
432
+ // the index gaps.
433
+ const initialState = testCreateBaseState({ count: 0 }, { name: "" });
434
+ let document = baseCreateDocument(createCountDocumentState, initialState);
435
+ // Build operations, applying skip to trigger GC
436
+ document = countReducer(document, increment()); // index 0, skip 0
437
+ document = countReducer(document, increment()); // index 1, skip 0
438
+ document = countReducer(document, increment()); // index 2, skip 0
439
+ document = countReducer(document, increment()); // index 3, skip 0
440
+ document = countReducer(document, increment()); // index 4, skip 0
441
+ document = countReducer(document, increment()); // index 5, skip 0
442
+ // skip=4 → GC to [op0, op1, op6(6,4)]
443
+ document = countReducer(document, increment(), undefined, { skip: 4 });
444
+ // skip=1 → GC to [op0, op1, op7(7,1)]
445
+ document = countReducer(document, increment(), undefined, { skip: 1 });
446
+ // Now doc has [op0(0,0), op1(1,0), op7(7,1)]
447
+ // op7's skip=1 was intended to bridge from op6 (index 5 via skipUntil=5),
448
+ // but op6 was removed by the second GC. So there's a gap from index 1 to
449
+ // index 7 that skip=1 doesn't cover: 7-1=6 > 1+1=2.
450
+ const gcOps = garbageCollectDocumentOperations(document.operations);
451
+ expect(gcOps.global.length).toBe(3);
452
+ // Without skipIndexValidation, replayOperations throws because op7's
453
+ // skip=1 doesn't bridge the gap from op1 (index 1) to op7 (index 7):
454
+ // 7-1=6 > nextIndex=2
455
+ expect(() => replayOperations(initialState, gcOps, baseCountReducer, document.header)).toThrow("Missing operations: expected 2 with skip 0 or equivalent, got index 7 with skip 1");
456
+ // With skipIndexValidation: true, it succeeds
457
+ const replayedDoc = replayOperations(initialState, gcOps, baseCountReducer, document.header, undefined, undefined, {}, { skipIndexValidation: true });
458
+ expect(replayedDoc.state.global.count).toBe(3);
459
+ expect(replayedDoc.operations.global.length).toBe(3);
460
+ });
461
+ it("should not process and skip operation that throws an error", () => {
462
+ const initialState = testCreateBaseState({ count: 0 }, { name: "" });
463
+ let document = baseCreateDocument(createCountDocumentState, initialState);
464
+ document = countReducer(document, increment());
465
+ document = countReducer(document, increment());
466
+ document = countReducer(document, error(), undefined, {
467
+ skip: 1,
468
+ });
469
+ expect(document.state.global.count).toBe(2);
470
+ expect(document.operations.global.length).toBe(3);
471
+ expect(document.operations.global).toMatchObject([
472
+ {
473
+ type: "INCREMENT",
474
+ skip: 0,
475
+ index: 0,
476
+ error: undefined,
477
+ },
478
+ {
479
+ type: "INCREMENT",
480
+ skip: 0,
481
+ index: 1,
482
+ error: undefined,
483
+ },
484
+ {
485
+ type: "ERROR",
486
+ skip: 0,
487
+ index: 2,
488
+ error: "Error action",
489
+ },
490
+ ]);
491
+ });
492
+ });
493
+ });
494
+ //# sourceMappingURL=document-skip-operations.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-skip-operations.test.js","sourceRoot":"","sources":["../../../../document-models/document-model/test/document-skip-operations.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prune.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune.test.d.ts","sourceRoot":"","sources":["../../../../document-models/document-model/test/prune.test.ts"],"names":[],"mappings":""}