@fluidframework/merge-tree 2.20.0 → 2.22.0
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/.eslintrc.cjs +0 -1
- package/CHANGELOG.md +8 -0
- package/README.md +1 -0
- package/dist/attributionCollection.js +5 -7
- package/dist/attributionCollection.js.map +1 -1
- package/dist/localReference.js +6 -8
- package/dist/localReference.js.map +1 -1
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +69 -34
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +15 -4
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +1 -1
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/partialLengths.d.ts +114 -144
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +431 -525
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.d.ts +10 -1
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +10 -1
- package/dist/perspective.js.map +1 -1
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +2 -3
- package/dist/properties.js.map +1 -1
- package/dist/revertibles.js +3 -3
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentInfos.d.ts +3 -0
- package/dist/segmentInfos.d.ts.map +1 -1
- package/dist/segmentInfos.js.map +1 -1
- package/dist/segmentPropertiesManager.js +3 -3
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotLoader.js +2 -2
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/sortedSegmentSet.d.ts +5 -3
- package/dist/sortedSegmentSet.d.ts.map +1 -1
- package/dist/sortedSegmentSet.js +33 -41
- package/dist/sortedSegmentSet.js.map +1 -1
- package/dist/sortedSet.d.ts +20 -3
- package/dist/sortedSet.d.ts.map +1 -1
- package/dist/sortedSet.js +23 -14
- package/dist/sortedSet.js.map +1 -1
- package/dist/test/Snapshot.perf.spec.js +1 -1
- package/dist/test/Snapshot.perf.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +20 -0
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.js +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.js +1 -1
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +48 -0
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.obliterateFarm.spec.d.ts +12 -0
- package/dist/test/client.obliterateFarm.spec.d.ts.map +1 -0
- package/dist/test/client.obliterateFarm.spec.js +89 -0
- package/dist/test/client.obliterateFarm.spec.js.map +1 -0
- package/dist/test/client.reconnectFarm.spec.js +1 -1
- package/dist/test/client.reconnectFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +2 -2
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.d.ts +7 -2
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +31 -14
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +45 -1
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.rangeExpansion.spec.js +81 -5
- package/dist/test/obliterate.rangeExpansion.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +3 -3
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/obliterateOperations.d.ts +15 -0
- package/dist/test/obliterateOperations.d.ts.map +1 -0
- package/dist/test/obliterateOperations.js +132 -0
- package/dist/test/obliterateOperations.js.map +1 -0
- package/dist/test/partialSyncHelper.d.ts +42 -0
- package/dist/test/partialSyncHelper.d.ts.map +1 -0
- package/dist/test/partialSyncHelper.js +96 -0
- package/dist/test/partialSyncHelper.js.map +1 -0
- package/dist/test/revertibles.spec.js +3 -3
- package/dist/test/revertibles.spec.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js +21 -0
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +1 -1
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +1 -0
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testUtils.js +2 -2
- package/dist/test/testUtils.js.map +1 -1
- package/lib/attributionCollection.js +5 -7
- package/lib/attributionCollection.js.map +1 -1
- package/lib/localReference.js +6 -8
- package/lib/localReference.js.map +1 -1
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +69 -34
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +15 -4
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +1 -1
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/partialLengths.d.ts +114 -144
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +432 -525
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.d.ts +10 -1
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +10 -1
- package/lib/perspective.js.map +1 -1
- package/lib/properties.d.ts.map +1 -1
- package/lib/properties.js +2 -3
- package/lib/properties.js.map +1 -1
- package/lib/revertibles.js +3 -3
- package/lib/revertibles.js.map +1 -1
- package/lib/segmentInfos.d.ts +3 -0
- package/lib/segmentInfos.d.ts.map +1 -1
- package/lib/segmentInfos.js.map +1 -1
- package/lib/segmentPropertiesManager.js +3 -3
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotLoader.js +2 -2
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/sortedSegmentSet.d.ts +5 -3
- package/lib/sortedSegmentSet.d.ts.map +1 -1
- package/lib/sortedSegmentSet.js +33 -41
- package/lib/sortedSegmentSet.js.map +1 -1
- package/lib/sortedSet.d.ts +20 -3
- package/lib/sortedSet.d.ts.map +1 -1
- package/lib/sortedSet.js +23 -14
- package/lib/sortedSet.js.map +1 -1
- package/lib/test/Snapshot.perf.spec.js +1 -1
- package/lib/test/Snapshot.perf.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +20 -0
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.js +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/lib/test/client.attributionFarm.spec.js +1 -1
- package/lib/test/client.attributionFarm.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +48 -0
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.obliterateFarm.spec.d.ts +12 -0
- package/lib/test/client.obliterateFarm.spec.d.ts.map +1 -0
- package/lib/test/client.obliterateFarm.spec.js +88 -0
- package/lib/test/client.obliterateFarm.spec.js.map +1 -0
- package/lib/test/client.reconnectFarm.spec.js +1 -1
- package/lib/test/client.reconnectFarm.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +2 -2
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.d.ts +7 -2
- package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js +31 -14
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +45 -1
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.rangeExpansion.spec.js +81 -5
- package/lib/test/obliterate.rangeExpansion.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +3 -3
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/obliterateOperations.d.ts +15 -0
- package/lib/test/obliterateOperations.d.ts.map +1 -0
- package/lib/test/obliterateOperations.js +123 -0
- package/lib/test/obliterateOperations.js.map +1 -0
- package/lib/test/partialSyncHelper.d.ts +42 -0
- package/lib/test/partialSyncHelper.d.ts.map +1 -0
- package/lib/test/partialSyncHelper.js +92 -0
- package/lib/test/partialSyncHelper.js.map +1 -0
- package/lib/test/revertibles.spec.js +3 -3
- package/lib/test/revertibles.spec.js.map +1 -1
- package/lib/test/sortedSegmentSet.spec.js +21 -0
- package/lib/test/sortedSegmentSet.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +1 -1
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +1 -0
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testUtils.js +2 -2
- package/lib/test/testUtils.js.map +1 -1
- package/package.json +21 -79
- package/src/mergeTree.ts +80 -28
- package/src/mergeTreeNodes.ts +15 -4
- package/src/partialLengths.ts +559 -776
- package/src/perspective.ts +10 -1
- package/src/properties.ts +2 -3
- package/src/segmentInfos.ts +3 -0
- package/src/snapshotLoader.ts +1 -1
- package/src/sortedSegmentSet.ts +41 -50
- package/src/sortedSet.ts +32 -16
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
import { strict as assert } from "node:assert";
|
|
6
6
|
import { LoggingError } from "@fluidframework/telemetry-utils/internal";
|
|
7
7
|
import { MergeTree } from "../mergeTree.js";
|
|
8
|
+
import { Side } from "../sequencePlace.js";
|
|
9
|
+
import { PartialSyncTestHelper } from "./partialSyncHelper.js";
|
|
8
10
|
import { ReconnectTestHelper } from "./reconnectHelper.js";
|
|
9
11
|
import { useStrictPartialLengthChecks } from "./testUtils.js";
|
|
10
12
|
/**
|
|
@@ -1191,7 +1193,6 @@ for (const incremental of [true, false]) {
|
|
|
1191
1193
|
assert.equal(helper.clients.A.getText(), "BR");
|
|
1192
1194
|
helper.logger.validate();
|
|
1193
1195
|
});
|
|
1194
|
-
// fails only for incremental
|
|
1195
1196
|
it("combines remote obliterated length ", () => {
|
|
1196
1197
|
const helper = new ReconnectTestHelper();
|
|
1197
1198
|
// R-XYZ12-STUVW-LMNOP-DEFGHIJK-A-34567890-Q-BC
|
|
@@ -1453,6 +1454,49 @@ for (const incremental of [true, false]) {
|
|
|
1453
1454
|
assert.equal(helper.clients.A.getText(), "jihagSCdfeD");
|
|
1454
1455
|
helper.logger.validate();
|
|
1455
1456
|
});
|
|
1457
|
+
it("Fuzz regression for negative partial lengths", () => {
|
|
1458
|
+
// This is a regression test for AB#15630.
|
|
1459
|
+
// Strict partial lengths checks reported an inconsistency when B applies A's
|
|
1460
|
+
// obliterateRange op for the length of the string at refSeq 4.
|
|
1461
|
+
// With strict partial lengths disabled, this manifested in 0x4bc on the subsequent op application.
|
|
1462
|
+
const helper = new PartialSyncTestHelper();
|
|
1463
|
+
helper.insertText("D", 0, "ABCDEFGH");
|
|
1464
|
+
helper.processAllOps();
|
|
1465
|
+
helper.insertText("B", 0, "123456xxxxx7890");
|
|
1466
|
+
helper.advanceClients("C");
|
|
1467
|
+
helper.obliterateRange("B", 15, 20);
|
|
1468
|
+
helper.advanceClients("A", "B");
|
|
1469
|
+
helper.insertText("A", 4, "a");
|
|
1470
|
+
helper.advanceClients("A");
|
|
1471
|
+
helper.insertText("C", 0, "c");
|
|
1472
|
+
helper.obliterateRange("C", { pos: 4, side: Side.After }, { pos: 10, side: Side.After });
|
|
1473
|
+
helper.obliterateRange("A", { pos: 0, side: Side.Before }, { pos: 7, side: Side.After });
|
|
1474
|
+
helper.removeRange("A", 0, 1);
|
|
1475
|
+
helper.processAllOps();
|
|
1476
|
+
helper.logger.validate({ baseText: "cx7890FGH" });
|
|
1477
|
+
});
|
|
1478
|
+
it("Avoids adding entries for insert with subsequent removal", () => {
|
|
1479
|
+
const helper = new PartialSyncTestHelper();
|
|
1480
|
+
helper.insertText("D", 0, "bZL4aQd");
|
|
1481
|
+
helper.processAllOps();
|
|
1482
|
+
helper.insertText("A", 0, "8mvaLcEa4nwhELu");
|
|
1483
|
+
helper.processAllOps();
|
|
1484
|
+
// These 3 ops are the crux of the test: A's inserted segment is both obliterated by C as soon as it is inserted
|
|
1485
|
+
// as well as removed by A before the insertion is acked.
|
|
1486
|
+
// This is an interesting case for partial lengths of observing clients, as:
|
|
1487
|
+
// - obliteration by C on insertion means the segment would normally only be visible to the inserting client
|
|
1488
|
+
// - ... but after some client receives the notice of A's removal, it shouldn't be visible there either!
|
|
1489
|
+
helper.obliterateRange("C", { pos: 2, side: Side.After }, { pos: 21, side: Side.After });
|
|
1490
|
+
helper.insertText("A", 3, "Y");
|
|
1491
|
+
helper.removeRange("A", 2, 4);
|
|
1492
|
+
// The subsequent operations forced failure at the time the code was defective, since clients with incorrect
|
|
1493
|
+
// partial lengths adjustments for A would misinterpret where these ops should go.
|
|
1494
|
+
helper.obliterateRange("A", { pos: 2, side: Side.After }, { pos: 6, side: Side.After });
|
|
1495
|
+
helper.obliterateRange("A", 2, 3);
|
|
1496
|
+
helper.insertText("A", 3, "X");
|
|
1497
|
+
helper.processAllOps();
|
|
1498
|
+
helper.logger.validate({ baseText: "8m" });
|
|
1499
|
+
});
|
|
1456
1500
|
});
|
|
1457
1501
|
});
|
|
1458
1502
|
}
|