@fluidframework/merge-tree 2.1.0-276985 → 2.1.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 +2 -4
- package/CHANGELOG.md +15 -0
- package/README.md +109 -1
- package/api-extractor/api-extractor.current.json +5 -0
- package/api-extractor/api-extractor.legacy.json +1 -1
- package/api-extractor.json +1 -1
- package/api-report/merge-tree.legacy.alpha.api.md +10 -22
- package/api-report/merge-tree.legacy.public.api.md +9 -0
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js +1 -1
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/attributionCollection.d.ts.map +1 -1
- package/dist/attributionCollection.js +65 -17
- package/dist/attributionCollection.js.map +1 -1
- package/dist/attributionPolicy.d.ts +2 -1
- package/dist/attributionPolicy.d.ts.map +1 -1
- package/dist/attributionPolicy.js +10 -3
- package/dist/attributionPolicy.js.map +1 -1
- package/dist/client.d.ts +3 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +65 -37
- package/dist/client.js.map +1 -1
- package/dist/collections/list.d.ts.map +1 -1
- package/dist/collections/list.js +5 -2
- package/dist/collections/list.js.map +1 -1
- package/dist/collections/rbTree.d.ts +2 -2
- package/dist/collections/rbTree.d.ts.map +1 -1
- package/dist/collections/rbTree.js +23 -35
- package/dist/collections/rbTree.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +4 -1
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/legacy.d.ts +1 -1
- package/dist/localReference.d.ts +16 -6
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +31 -20
- package/dist/localReference.js.map +1 -1
- package/dist/mergeTree.d.ts +0 -1
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +127 -112
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
- package/dist/mergeTreeNodeWalk.js +1 -1
- package/dist/mergeTreeNodeWalk.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +6 -5
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +29 -20
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/mergeTreeTracking.js +3 -3
- package/dist/mergeTreeTracking.js.map +1 -1
- package/dist/opBuilder.d.ts +6 -1
- package/dist/opBuilder.d.ts.map +1 -1
- package/dist/opBuilder.js +5 -0
- package/dist/opBuilder.js.map +1 -1
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js.map +1 -1
- package/dist/ordinal.d.ts.map +1 -1
- package/dist/ordinal.js +7 -0
- package/dist/ordinal.js.map +1 -1
- package/dist/partialLengths.d.ts +4 -2
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +101 -53
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.d.ts +4 -1
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +7 -6
- package/dist/perspective.js.map +1 -1
- package/dist/properties.d.ts +13 -10
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +22 -11
- package/dist/properties.js.map +1 -1
- package/dist/public.d.ts +1 -1
- package/dist/referencePositions.d.ts +7 -0
- package/dist/referencePositions.d.ts.map +1 -1
- package/dist/referencePositions.js +7 -0
- package/dist/referencePositions.js.map +1 -1
- package/dist/revertibles.d.ts +6 -0
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +50 -21
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentGroupCollection.d.ts.map +1 -1
- package/dist/segmentGroupCollection.js +2 -0
- package/dist/segmentGroupCollection.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts +7 -3
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +20 -15
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotChunks.d.ts.map +1 -1
- package/dist/snapshotChunks.js +10 -5
- package/dist/snapshotChunks.js.map +1 -1
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +14 -10
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +20 -8
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +4 -2
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/sortedSegmentSet.d.ts.map +1 -1
- package/dist/sortedSegmentSet.js +8 -1
- package/dist/sortedSegmentSet.js.map +1 -1
- package/dist/sortedSet.d.ts.map +1 -1
- package/dist/sortedSet.js +4 -0
- package/dist/sortedSet.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/Snapshot.perf.spec.js +1 -0
- package/dist/test/Snapshot.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.perf.spec.js +3 -1
- package/dist/test/attributionCollection.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.spec.js +69 -68
- package/dist/test/attributionCollection.spec.js.map +1 -1
- package/dist/test/attributionPolicy.spec.js +29 -27
- package/dist/test/attributionPolicy.spec.js.map +1 -1
- package/dist/test/beastTest.spec.d.ts +1 -4
- package/dist/test/beastTest.spec.d.ts.map +1 -1
- package/dist/test/beastTest.spec.js +32 -30
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.annotateMarker.spec.js +5 -5
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/client.apis.spec.d.ts.map +1 -1
- package/dist/test/client.apis.spec.js +5 -7
- package/dist/test/client.apis.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +125 -103
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.js +18 -10
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.js +13 -8
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.conflictFarm.spec.js +4 -2
- package/dist/test/client.conflictFarm.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +10 -10
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +111 -104
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.localReferenceFarm.spec.js +14 -10
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
- package/dist/test/client.rebasePosition.spec.js +12 -12
- package/dist/test/client.rebasePosition.spec.js.map +1 -1
- package/dist/test/client.reconnectFarm.spec.js +12 -9
- package/dist/test/client.reconnectFarm.spec.js.map +1 -1
- package/dist/test/client.replay.spec.js +11 -10
- package/dist/test/client.replay.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +87 -84
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js +3 -1
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +122 -112
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/client.walkSegments.spec.js +7 -7
- package/dist/test/client.walkSegments.spec.js.map +1 -1
- package/dist/test/collections.list.spec.js +14 -14
- package/dist/test/collections.list.spec.js.map +1 -1
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js +3 -3
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/dist/test/dirname.cjs +1 -0
- package/dist/test/dirname.cjs.map +1 -1
- package/dist/test/dirname.d.cts.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +7 -7
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +87 -87
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +6 -6
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +24 -24
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +6 -6
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +23 -23
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +3 -3
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTree.zamboni.spec.js +10 -10
- package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +28 -16
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.spec.js +9 -5
- package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +165 -165
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.deltaCallback.spec.js +20 -21
- package/dist/test/obliterate.deltaCallback.spec.js.map +1 -1
- package/dist/test/obliterate.partialLength.spec.js +7 -7
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.reconnect.spec.js +13 -13
- package/dist/test/obliterate.reconnect.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +9 -9
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/ordinal.spec.js +10 -4
- package/dist/test/ordinal.spec.js.map +1 -1
- package/dist/test/partialLength.spec.js.map +1 -1
- package/dist/test/properties.spec.js +15 -15
- package/dist/test/properties.spec.js.map +1 -1
- package/dist/test/reconnectHelper.d.ts +4 -4
- package/dist/test/reconnectHelper.d.ts.map +1 -1
- package/dist/test/reconnectHelper.js +28 -20
- package/dist/test/reconnectHelper.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +35 -29
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/revertibleFarm.spec.js +11 -10
- package/dist/test/revertibleFarm.spec.js.map +1 -1
- package/dist/test/revertibles.spec.d.ts.map +1 -1
- package/dist/test/revertibles.spec.js +96 -57
- package/dist/test/revertibles.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js +17 -17
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/snapshot.spec.js +5 -5
- package/dist/test/snapshot.spec.js.map +1 -1
- package/dist/test/snapshot.utils.d.ts.map +1 -1
- package/dist/test/snapshot.utils.js +6 -6
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/snapshotlegacy.spec.js +18 -13
- package/dist/test/snapshotlegacy.spec.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js +22 -18
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +6 -5
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +30 -32
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +39 -38
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testSerializer.d.ts +5 -5
- package/dist/test/testSerializer.d.ts.map +1 -1
- package/dist/test/testSerializer.js +0 -1
- package/dist/test/testSerializer.js.map +1 -1
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +1 -1
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +15 -17
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.d.ts.map +1 -1
- package/dist/test/text.js +1 -1
- package/dist/test/text.js.map +1 -1
- package/dist/test/tracking.spec.js +50 -46
- package/dist/test/tracking.spec.js.map +1 -1
- package/dist/test/wordUnitTests.spec.d.ts.map +1 -1
- package/dist/test/wordUnitTests.spec.js +10 -10
- package/dist/test/wordUnitTests.spec.js.map +1 -1
- package/dist/textSegment.d.ts +1 -1
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js +3 -3
- package/dist/textSegment.js.map +1 -1
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js +7 -2
- package/dist/zamboni.js.map +1 -1
- package/internal.d.ts +1 -1
- package/legacy.d.ts +1 -1
- package/lib/MergeTreeTextHelper.d.ts.map +1 -1
- package/lib/MergeTreeTextHelper.js +1 -1
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/attributionCollection.d.ts.map +1 -1
- package/lib/attributionCollection.js +65 -17
- package/lib/attributionCollection.js.map +1 -1
- package/lib/attributionPolicy.d.ts +2 -1
- package/lib/attributionPolicy.d.ts.map +1 -1
- package/lib/attributionPolicy.js +10 -3
- package/lib/attributionPolicy.js.map +1 -1
- package/lib/client.d.ts +3 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +65 -37
- package/lib/client.js.map +1 -1
- package/lib/collections/list.d.ts.map +1 -1
- package/lib/collections/list.js +5 -2
- package/lib/collections/list.js.map +1 -1
- package/lib/collections/rbTree.d.ts +2 -2
- package/lib/collections/rbTree.d.ts.map +1 -1
- package/lib/collections/rbTree.js +23 -35
- package/lib/collections/rbTree.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js +4 -1
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/legacy.d.ts +1 -1
- package/lib/localReference.d.ts +16 -6
- package/lib/localReference.d.ts.map +1 -1
- package/lib/localReference.js +31 -20
- package/lib/localReference.js.map +1 -1
- package/lib/mergeTree.d.ts +0 -1
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +127 -112
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeNodeWalk.d.ts.map +1 -1
- package/lib/mergeTreeNodeWalk.js +1 -1
- package/lib/mergeTreeNodeWalk.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +6 -5
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +29 -20
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/mergeTreeTracking.js +3 -3
- package/lib/mergeTreeTracking.js.map +1 -1
- package/lib/opBuilder.d.ts +6 -1
- package/lib/opBuilder.d.ts.map +1 -1
- package/lib/opBuilder.js +5 -0
- package/lib/opBuilder.js.map +1 -1
- package/lib/ops.d.ts.map +1 -1
- package/lib/ops.js.map +1 -1
- package/lib/ordinal.d.ts.map +1 -1
- package/lib/ordinal.js +7 -0
- package/lib/ordinal.js.map +1 -1
- package/lib/partialLengths.d.ts +4 -2
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +101 -53
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.d.ts +4 -1
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +7 -6
- package/lib/perspective.js.map +1 -1
- package/lib/properties.d.ts +13 -10
- package/lib/properties.d.ts.map +1 -1
- package/lib/properties.js +22 -11
- package/lib/properties.js.map +1 -1
- package/lib/public.d.ts +1 -1
- package/lib/referencePositions.d.ts +7 -0
- package/lib/referencePositions.d.ts.map +1 -1
- package/lib/referencePositions.js +7 -0
- package/lib/referencePositions.js.map +1 -1
- package/lib/revertibles.d.ts +6 -0
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +50 -21
- package/lib/revertibles.js.map +1 -1
- package/lib/segmentGroupCollection.d.ts.map +1 -1
- package/lib/segmentGroupCollection.js +2 -0
- package/lib/segmentGroupCollection.js.map +1 -1
- package/lib/segmentPropertiesManager.d.ts +7 -3
- package/lib/segmentPropertiesManager.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +20 -15
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotChunks.d.ts.map +1 -1
- package/lib/snapshotChunks.js +10 -5
- package/lib/snapshotChunks.js.map +1 -1
- package/lib/snapshotLoader.d.ts.map +1 -1
- package/lib/snapshotLoader.js +14 -10
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js +20 -8
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js +4 -2
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/sortedSegmentSet.d.ts.map +1 -1
- package/lib/sortedSegmentSet.js +8 -1
- package/lib/sortedSegmentSet.js.map +1 -1
- package/lib/sortedSet.d.ts.map +1 -1
- package/lib/sortedSet.js +4 -0
- package/lib/sortedSet.js.map +1 -1
- package/lib/test/Insertion.perf.spec.js.map +1 -1
- package/lib/test/Removal.perf.spec.js.map +1 -1
- package/lib/test/Snapshot.perf.spec.js +1 -0
- package/lib/test/Snapshot.perf.spec.js.map +1 -1
- package/lib/test/attributionCollection.perf.spec.js +3 -1
- package/lib/test/attributionCollection.perf.spec.js.map +1 -1
- package/lib/test/attributionCollection.spec.js +3 -2
- package/lib/test/attributionCollection.spec.js.map +1 -1
- package/lib/test/attributionPolicy.spec.js +3 -1
- package/lib/test/attributionPolicy.spec.js.map +1 -1
- package/lib/test/beastTest.spec.d.ts +1 -4
- package/lib/test/beastTest.spec.d.ts.map +1 -1
- package/lib/test/beastTest.spec.js +26 -24
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.annotateMarker.spec.js +1 -1
- package/lib/test/client.annotateMarker.spec.js.map +1 -1
- package/lib/test/client.apis.spec.d.ts.map +1 -1
- package/lib/test/client.apis.spec.js +4 -6
- package/lib/test/client.apis.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +72 -50
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.js +18 -10
- package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/lib/test/client.attributionFarm.spec.js +12 -7
- package/lib/test/client.attributionFarm.spec.js.map +1 -1
- package/lib/test/client.conflictFarm.spec.js +4 -2
- package/lib/test/client.conflictFarm.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js +1 -1
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +14 -7
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.localReferenceFarm.spec.js +13 -9
- package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
- package/lib/test/client.rebasePosition.spec.js +1 -1
- package/lib/test/client.rebasePosition.spec.js.map +1 -1
- package/lib/test/client.reconnectFarm.spec.js +11 -8
- package/lib/test/client.reconnectFarm.spec.js.map +1 -1
- package/lib/test/client.replay.spec.js +8 -7
- package/lib/test/client.replay.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +14 -11
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/client.rollbackFarm.spec.js +3 -1
- package/lib/test/client.rollbackFarm.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +29 -19
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/client.walkSegments.spec.js +1 -1
- package/lib/test/client.walkSegments.spec.js.map +1 -1
- package/lib/test/collections.list.spec.js +1 -1
- package/lib/test/collections.list.spec.js.map +1 -1
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js +1 -1
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/lib/test/dirname.cjs +1 -0
- package/lib/test/dirname.cjs.map +1 -1
- package/lib/test/dirname.d.cts.map +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.annotate.spec.js +1 -1
- package/lib/test/mergeTree.annotate.spec.js.map +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.insertingWalk.spec.js +8 -8
- package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/mergeTree.walk.spec.js +1 -1
- package/lib/test/mergeTree.walk.spec.js.map +1 -1
- package/lib/test/mergeTree.zamboni.spec.js +1 -1
- package/lib/test/mergeTree.zamboni.spec.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js +27 -15
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.spec.js +5 -1
- package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +4 -4
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.deltaCallback.spec.js +2 -3
- package/lib/test/obliterate.deltaCallback.spec.js.map +1 -1
- package/lib/test/obliterate.partialLength.spec.js +1 -1
- package/lib/test/obliterate.partialLength.spec.js.map +1 -1
- package/lib/test/obliterate.reconnect.spec.js +1 -1
- package/lib/test/obliterate.reconnect.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +1 -1
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/ordinal.spec.js +7 -1
- package/lib/test/ordinal.spec.js.map +1 -1
- package/lib/test/partialLength.spec.js.map +1 -1
- package/lib/test/properties.spec.js +1 -1
- package/lib/test/properties.spec.js.map +1 -1
- package/lib/test/reconnectHelper.d.ts +4 -4
- package/lib/test/reconnectHelper.d.ts.map +1 -1
- package/lib/test/reconnectHelper.js +22 -14
- package/lib/test/reconnectHelper.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +8 -2
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/revertibleFarm.spec.js +8 -7
- package/lib/test/revertibleFarm.spec.js.map +1 -1
- package/lib/test/revertibles.spec.d.ts.map +1 -1
- package/lib/test/revertibles.spec.js +93 -54
- package/lib/test/revertibles.spec.js.map +1 -1
- package/lib/test/segmentGroupCollection.spec.js +1 -1
- package/lib/test/segmentGroupCollection.spec.js.map +1 -1
- package/lib/test/snapshot.spec.js +1 -1
- package/lib/test/snapshot.spec.js.map +1 -1
- package/lib/test/snapshot.utils.d.ts.map +1 -1
- package/lib/test/snapshot.utils.js +1 -1
- package/lib/test/snapshot.utils.js.map +1 -1
- package/lib/test/snapshotlegacy.spec.js +10 -5
- package/lib/test/snapshotlegacy.spec.js.map +1 -1
- package/lib/test/sortedSegmentSet.spec.js +6 -2
- package/lib/test/sortedSegmentSet.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +6 -5
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +25 -27
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +37 -36
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testSerializer.d.ts +5 -5
- package/lib/test/testSerializer.d.ts.map +1 -1
- package/lib/test/testSerializer.js +0 -1
- package/lib/test/testSerializer.js.map +1 -1
- package/lib/test/testServer.d.ts.map +1 -1
- package/lib/test/testServer.js.map +1 -1
- package/lib/test/testUtils.d.ts +1 -1
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js +6 -8
- package/lib/test/testUtils.js.map +1 -1
- package/lib/test/text.d.ts.map +1 -1
- package/lib/test/text.js +1 -1
- package/lib/test/text.js.map +1 -1
- package/lib/test/tracking.spec.js +9 -5
- package/lib/test/tracking.spec.js.map +1 -1
- package/lib/test/wordUnitTests.spec.d.ts.map +1 -1
- package/lib/test/wordUnitTests.spec.js +9 -9
- package/lib/test/wordUnitTests.spec.js.map +1 -1
- package/lib/textSegment.d.ts +1 -1
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js +3 -3
- package/lib/textSegment.js.map +1 -1
- package/lib/zamboni.d.ts.map +1 -1
- package/lib/zamboni.js +7 -2
- package/lib/zamboni.js.map +1 -1
- package/package.json +29 -27
- package/src/MergeTreeTextHelper.ts +2 -2
- package/src/attributionCollection.ts +71 -28
- package/src/attributionPolicy.ts +14 -9
- package/src/client.ts +120 -71
- package/src/collections/list.ts +9 -6
- package/src/collections/rbTree.ts +62 -71
- package/src/endOfTreeSegment.ts +21 -10
- package/src/localReference.ts +61 -43
- package/src/mergeTree.ts +229 -178
- package/src/mergeTreeNodeWalk.ts +2 -1
- package/src/mergeTreeNodes.ts +59 -46
- package/src/mergeTreeTracking.ts +3 -3
- package/src/opBuilder.ts +6 -1
- package/src/ops.ts +5 -0
- package/src/ordinal.ts +8 -1
- package/src/partialLengths.ts +143 -87
- package/src/perspective.ts +10 -7
- package/src/properties.ts +36 -18
- package/src/referencePositions.ts +7 -0
- package/src/revertibles.ts +71 -41
- package/src/segmentGroupCollection.ts +8 -6
- package/src/segmentPropertiesManager.ts +28 -24
- package/src/snapshotChunks.ts +12 -7
- package/src/snapshotLoader.ts +20 -17
- package/src/snapshotV1.ts +36 -18
- package/src/snapshotlegacy.ts +7 -5
- package/src/sortedSegmentSet.ts +9 -3
- package/src/sortedSet.ts +7 -3
- package/src/textSegment.ts +9 -9
- package/src/zamboni.ts +14 -10
- package/tsconfig.json +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.apis.spec.js","sourceRoot":"","sources":["../../src/test/client.apis.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uDAAuD;AAEvD,
|
|
1
|
+
{"version":3,"file":"client.apis.spec.js","sourceRoot":"","sources":["../../src/test/client.apis.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable guard-for-in, no-restricted-syntax */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { Client } from \"../client.js\";\nimport { PropertySet, matchProperties } from \"../properties.js\";\n\nimport { TestClient } from \"./testClient.js\";\n\nfunction checkGetPropertiesAtPos(\n\tclient: Client,\n\tpos: number,\n\tprops?: PropertySet,\n\tverbose = false,\n): boolean {\n\tconst propsRetrieved = client.getPropertiesAtPosition(pos);\n\tconst result = matchProperties(props, propsRetrieved);\n\tif (!result && verbose) {\n\t\tconsole.log(`At pos: ${pos}`);\n\t\tconsole.log(\"Expected props\");\n\t\tfor (const key in props) {\n\t\t\tconsole.log(`Key: ${key} Value: ${props[key]}`);\n\t\t}\n\n\t\tconsole.log(\"Actual props\");\n\t\tfor (const key1 in propsRetrieved) {\n\t\t\tconsole.log(`Key: ${key1} Value: ${propsRetrieved[key1]}`);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function clientGetPropertiesAtPositionTest(): boolean {\n\tconst client = new TestClient();\n\tclient.insertTextLocal(0, \"the cat is on the mat\");\n\tconst props: PropertySet = { prop1: 10 };\n\tclient.insertTextLocal(4, \"fuzzy, fuzzy \", props);\n\n\tconst testResult1 = checkGetPropertiesAtPos(client, 4, props, true);\n\tconst testResult2 = checkGetPropertiesAtPos(client, 16, props, true);\n\tconst testResult3 = checkGetPropertiesAtPos(client, 3);\n\tconst testResult4 = checkGetPropertiesAtPos(client, 17);\n\n\treturn (((testResult1 === testResult2) === testResult3) === testResult4) === true;\n}\n\nfunction checkGetSegmentExtentsOfPos(\n\tclient: Client,\n\tpos: number,\n\tposStart: number,\n\tposAfterEnd: number,\n\tverbose = false,\n): boolean {\n\tconst segExtents = client.getRangeExtentsOfPosition(pos);\n\tconst result = segExtents.posStart === posStart && segExtents.posAfterEnd === posAfterEnd;\n\tif (!result && verbose) {\n\t\tconsole.log(`At pos: ${pos}`);\n\t\tconsole.log(`Expected extents -> start: ${posStart} end: ${posAfterEnd}`);\n\t\tconsole.log(\n\t\t\t`Actual extents -> start: ${segExtents.posStart} end: ${segExtents.posAfterEnd}`,\n\t\t);\n\t}\n\treturn result;\n}\n\nexport function clientGetSegmentExtentsOfPositionTest(): boolean {\n\tconst client = new TestClient();\n\tclient.insertTextLocal(0, \"the cat is on the mat\");\n\tconst props: PropertySet = { prop1: 10 };\n\tclient.insertTextLocal(4, \"fuzzy, fuzzy \", props);\n\tclient.insertTextLocal(8, \"more fuzzy text\", {});\n\n\tconst testResult1 = checkGetSegmentExtentsOfPos(client, 26, 23, 32);\n\tconst testResult2 = checkGetSegmentExtentsOfPos(client, 6, 4, 8);\n\tconst testResult3 = checkGetSegmentExtentsOfPos(client, 32, 32, 49);\n\treturn ((testResult1 === testResult2) === testResult3) === true;\n}\n\ndescribe(\"client.apis\", () => {\n\tit(\"clientGetPropertiesAtPositionTest\", () => {\n\t\tassert(clientGetPropertiesAtPositionTest() === true);\n\t});\n\n\tit(\"clientGetSegmentExtentsOfPositionTest\", () => {\n\t\tassert(clientGetSegmentExtentsOfPositionTest() === true);\n\t});\n});\n"]}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
8
|
-
const
|
|
8
|
+
const node_assert_1 = require("node:assert");
|
|
9
9
|
const constants_js_1 = require("../constants.js");
|
|
10
10
|
const mergeTreeNodeWalk_js_1 = require("../mergeTreeNodeWalk.js");
|
|
11
11
|
const mergeTreeTracking_js_1 = require("../mergeTreeTracking.js");
|
|
@@ -23,7 +23,7 @@ describe("client.applyMsg", () => {
|
|
|
23
23
|
});
|
|
24
24
|
it("Interleaved inserts, annotates, and deletes", () => {
|
|
25
25
|
const changes = new Map();
|
|
26
|
-
|
|
26
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
|
|
27
27
|
for (let i = 0; i < 100; i++) {
|
|
28
28
|
const len = client.getLength();
|
|
29
29
|
const pos1 = Math.floor(len / 2);
|
|
@@ -53,58 +53,61 @@ describe("client.applyMsg", () => {
|
|
|
53
53
|
changes.set(i, { msg, segmentGroup: client.peekPendingSegmentGroups() });
|
|
54
54
|
break;
|
|
55
55
|
}
|
|
56
|
-
default:
|
|
57
|
-
|
|
56
|
+
default: {
|
|
57
|
+
node_assert_1.strict.fail("all cases should be handled");
|
|
58
|
+
}
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
for (let i = 0; i < 100; i++) {
|
|
61
62
|
const msg = changes.get(i).msg;
|
|
62
63
|
client.applyMsg(msg);
|
|
63
64
|
const segmentGroup = changes.get(i)?.segmentGroup;
|
|
64
|
-
(0,
|
|
65
|
+
(0, node_assert_1.strict)(!Array.isArray(segmentGroup) && segmentGroup !== undefined, "segment group should be defined and not an array");
|
|
65
66
|
for (const seg of segmentGroup.segments) {
|
|
66
67
|
switch (i % 6) {
|
|
67
68
|
case 0:
|
|
68
|
-
case 5:
|
|
69
|
-
|
|
69
|
+
case 5: {
|
|
70
|
+
node_assert_1.strict.equal(seg.removedSeq, msg.sequenceNumber, "removed segment has unexpected id");
|
|
70
71
|
break;
|
|
72
|
+
}
|
|
71
73
|
case 1:
|
|
72
|
-
case 4:
|
|
73
|
-
|
|
74
|
+
case 4: {
|
|
75
|
+
node_assert_1.strict.equal(seg.seq, msg.sequenceNumber, "inserted segment has unexpected id");
|
|
74
76
|
break;
|
|
77
|
+
}
|
|
75
78
|
default:
|
|
76
79
|
}
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
|
-
|
|
82
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
|
|
80
83
|
for (let i = 0; i < client.getText().length; i++) {
|
|
81
84
|
const segmentInfo = client.getContainingSegment(i);
|
|
82
|
-
|
|
83
|
-
(0,
|
|
85
|
+
node_assert_1.strict.notEqual(segmentInfo.segment?.seq, constants_js_1.UnassignedSequenceNumber, "all segments should be acked");
|
|
86
|
+
(0, node_assert_1.strict)(segmentInfo.segment?.segmentGroups.empty, "there should be no outstanding segmentGroups");
|
|
84
87
|
}
|
|
85
88
|
});
|
|
86
89
|
it("insertTextLocal", () => {
|
|
87
90
|
const op = client.insertTextLocal(0, "abc");
|
|
88
91
|
const segmentInfo = client.getContainingSegment(0);
|
|
89
|
-
|
|
92
|
+
node_assert_1.strict.equal(segmentInfo.segment?.seq, constants_js_1.UnassignedSequenceNumber);
|
|
90
93
|
client.applyMsg(client.makeOpMessage(op, 17));
|
|
91
|
-
|
|
94
|
+
node_assert_1.strict.equal(segmentInfo.segment?.seq, 17);
|
|
92
95
|
});
|
|
93
96
|
it("removeRangeLocal", () => {
|
|
94
97
|
const segmentInfo = client.getContainingSegment(0);
|
|
95
98
|
const removeOp = client.removeRangeLocal(0, 1);
|
|
96
|
-
|
|
99
|
+
node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
|
|
97
100
|
client.applyMsg(client.makeOpMessage(removeOp, 17));
|
|
98
|
-
|
|
101
|
+
node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, 17);
|
|
99
102
|
});
|
|
100
103
|
it("annotateSegmentLocal", () => {
|
|
101
104
|
const props = {
|
|
102
105
|
foo: "bar",
|
|
103
106
|
};
|
|
104
107
|
const op = client.annotateRangeLocal(0, 1, props);
|
|
105
|
-
|
|
108
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 1);
|
|
106
109
|
client.applyMsg(client.makeOpMessage(op, 17));
|
|
107
|
-
|
|
110
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
|
|
108
111
|
});
|
|
109
112
|
it("annotateSegmentLocal then removeRangeLocal", () => {
|
|
110
113
|
const segmentInfo = client.getContainingSegment(0);
|
|
@@ -114,16 +117,16 @@ describe("client.applyMsg", () => {
|
|
|
114
117
|
foo: "bar",
|
|
115
118
|
};
|
|
116
119
|
const annotateOp = client.annotateRangeLocal(start, end, props);
|
|
117
|
-
|
|
120
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 1);
|
|
118
121
|
const removeOp = client.removeRangeLocal(start, end);
|
|
119
|
-
|
|
120
|
-
|
|
122
|
+
node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
|
|
123
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 2);
|
|
121
124
|
client.applyMsg(client.makeOpMessage(annotateOp, 17));
|
|
122
|
-
|
|
123
|
-
|
|
125
|
+
node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
|
|
126
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 1);
|
|
124
127
|
client.applyMsg(client.makeOpMessage(removeOp, 18, 0));
|
|
125
|
-
|
|
126
|
-
|
|
128
|
+
node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, 18);
|
|
129
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
|
|
127
130
|
});
|
|
128
131
|
it("multiple interleaved annotateSegmentLocal", () => {
|
|
129
132
|
let annotateEnd = client.getText().length;
|
|
@@ -138,11 +141,11 @@ describe("client.applyMsg", () => {
|
|
|
138
141
|
messages.push(client.makeOpMessage(annotateOp, ++sequenceNumber));
|
|
139
142
|
annotateEnd = Math.floor(annotateEnd / 2);
|
|
140
143
|
}
|
|
141
|
-
|
|
144
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, messages.length);
|
|
142
145
|
for (const msg of messages) {
|
|
143
146
|
client.applyMsg(msg);
|
|
144
147
|
}
|
|
145
|
-
|
|
148
|
+
node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
|
|
146
149
|
});
|
|
147
150
|
it("overlapping deletes", () => {
|
|
148
151
|
const segmentInfo = client.getContainingSegment(0);
|
|
@@ -150,21 +153,21 @@ describe("client.applyMsg", () => {
|
|
|
150
153
|
const end = 5;
|
|
151
154
|
const initialText = client.getText();
|
|
152
155
|
const initialLength = initialText.length;
|
|
153
|
-
|
|
154
|
-
(0,
|
|
156
|
+
node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, undefined);
|
|
157
|
+
(0, node_assert_1.strict)(segmentInfo.segment?.segmentGroups.empty);
|
|
155
158
|
const removeOp = client.removeRangeLocal(start, end);
|
|
156
|
-
|
|
157
|
-
|
|
159
|
+
node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
|
|
160
|
+
node_assert_1.strict.equal(segmentInfo.segment?.segmentGroups.size, 1);
|
|
158
161
|
const remoteMessage = client.makeOpMessage(removeOp, 17);
|
|
159
162
|
remoteMessage.clientId = "remoteClient";
|
|
160
163
|
client.applyMsg(remoteMessage);
|
|
161
|
-
|
|
162
|
-
|
|
164
|
+
node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, remoteMessage.sequenceNumber);
|
|
165
|
+
node_assert_1.strict.equal(segmentInfo.segment?.segmentGroups.size, 1);
|
|
163
166
|
client.applyMsg(client.makeOpMessage(removeOp, 18, 0));
|
|
164
|
-
|
|
165
|
-
(0,
|
|
166
|
-
|
|
167
|
-
|
|
167
|
+
node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, remoteMessage.sequenceNumber);
|
|
168
|
+
(0, node_assert_1.strict)(segmentInfo.segment?.segmentGroups.empty);
|
|
169
|
+
node_assert_1.strict.equal(client.getLength(), initialLength - (end - start));
|
|
170
|
+
node_assert_1.strict.equal(client.getText(), initialText.slice(0, Math.max(0, start)) + initialText.slice(Math.max(0, end)));
|
|
168
171
|
});
|
|
169
172
|
it("overlapping insert and delete", () => {
|
|
170
173
|
const remoteClient = new testClient_js_1.TestClient();
|
|
@@ -174,7 +177,8 @@ describe("client.applyMsg", () => {
|
|
|
174
177
|
const logger = new testClientLogger_js_1.TestClientLogger(clients);
|
|
175
178
|
let seq = 0;
|
|
176
179
|
const initialMsg = client.makeOpMessage(client.insertTextLocal(0, "-"), ++seq);
|
|
177
|
-
|
|
180
|
+
for (const c of clients)
|
|
181
|
+
c.applyMsg(initialMsg);
|
|
178
182
|
logger.validate({ baseText: "-hello world" });
|
|
179
183
|
const messages = [
|
|
180
184
|
client.makeOpMessage(client.insertTextLocal(0, "L"), ++seq),
|
|
@@ -184,7 +188,8 @@ describe("client.applyMsg", () => {
|
|
|
184
188
|
];
|
|
185
189
|
while (messages.length > 0) {
|
|
186
190
|
const msg = messages.shift();
|
|
187
|
-
|
|
191
|
+
for (const c of clients)
|
|
192
|
+
c.applyMsg(msg);
|
|
188
193
|
}
|
|
189
194
|
logger.validate({ baseText: "RLhello world" });
|
|
190
195
|
});
|
|
@@ -200,7 +205,8 @@ describe("client.applyMsg", () => {
|
|
|
200
205
|
];
|
|
201
206
|
while (messages.length > 0) {
|
|
202
207
|
const msg = messages.shift();
|
|
203
|
-
|
|
208
|
+
for (const c of clients.all)
|
|
209
|
+
c.applyMsg(msg);
|
|
204
210
|
}
|
|
205
211
|
logger.validate({ baseText: "cb" });
|
|
206
212
|
});
|
|
@@ -215,7 +221,8 @@ describe("client.applyMsg", () => {
|
|
|
215
221
|
];
|
|
216
222
|
while (messages.length > 0) {
|
|
217
223
|
const msg = messages.shift();
|
|
218
|
-
|
|
224
|
+
for (const c of clients.all)
|
|
225
|
+
c.applyMsg(msg);
|
|
219
226
|
}
|
|
220
227
|
logger.validate({ baseText: "CB" });
|
|
221
228
|
});
|
|
@@ -231,7 +238,8 @@ describe("client.applyMsg", () => {
|
|
|
231
238
|
const logger = new testClientLogger_js_1.TestClientLogger(clients.all);
|
|
232
239
|
while (messages.length > 0) {
|
|
233
240
|
const msg = messages.shift();
|
|
234
|
-
|
|
241
|
+
for (const c of clients.all)
|
|
242
|
+
c.applyMsg(msg);
|
|
235
243
|
}
|
|
236
244
|
logger.validate({ baseText: "cb" });
|
|
237
245
|
});
|
|
@@ -246,7 +254,8 @@ describe("client.applyMsg", () => {
|
|
|
246
254
|
const logger = new testClientLogger_js_1.TestClientLogger(clients.all);
|
|
247
255
|
while (messages.length > 0) {
|
|
248
256
|
const msg = messages.shift();
|
|
249
|
-
|
|
257
|
+
for (const c of clients.all)
|
|
258
|
+
c.applyMsg(msg);
|
|
250
259
|
}
|
|
251
260
|
logger.validate({ baseText: "bc" });
|
|
252
261
|
});
|
|
@@ -259,16 +268,17 @@ describe("client.applyMsg", () => {
|
|
|
259
268
|
];
|
|
260
269
|
while (messages.length > 0) {
|
|
261
270
|
const msg = messages.shift();
|
|
262
|
-
clients.all
|
|
271
|
+
for (const c of clients.all) {
|
|
263
272
|
c.applyMsg(msg);
|
|
264
|
-
}
|
|
273
|
+
}
|
|
265
274
|
}
|
|
266
275
|
const logger = new testClientLogger_js_1.TestClientLogger(clients.all);
|
|
267
276
|
logger.validate({ baseText: "CC" });
|
|
268
277
|
messages.push(clients.C.makeOpMessage(clients.C.removeRangeLocal(0, 1), ++seq), clients.C.makeOpMessage(clients.C.insertTextLocal(0, "CC"), ++seq), clients.B.makeOpMessage(clients.B.insertTextLocal(1, "BBB"), ++seq));
|
|
269
278
|
while (messages.length > 0) {
|
|
270
279
|
const msg = messages.shift();
|
|
271
|
-
|
|
280
|
+
for (const c of clients.all)
|
|
281
|
+
c.applyMsg(msg);
|
|
272
282
|
}
|
|
273
283
|
logger.validate({ baseText: "CCBBBC" });
|
|
274
284
|
});
|
|
@@ -286,7 +296,8 @@ describe("client.applyMsg", () => {
|
|
|
286
296
|
const messages = [op2, op3, op4];
|
|
287
297
|
while (messages.length > 0) {
|
|
288
298
|
const msg = messages.shift();
|
|
289
|
-
|
|
299
|
+
for (const c of clients.all)
|
|
300
|
+
c.applyMsg(msg);
|
|
290
301
|
}
|
|
291
302
|
logger.validate({ baseText: "CB" });
|
|
292
303
|
});
|
|
@@ -303,7 +314,8 @@ describe("client.applyMsg", () => {
|
|
|
303
314
|
const messages = [op2, op3];
|
|
304
315
|
while (messages.length > 0) {
|
|
305
316
|
const msg = messages.shift();
|
|
306
|
-
|
|
317
|
+
for (const c of clients.all)
|
|
318
|
+
c.applyMsg(msg);
|
|
307
319
|
}
|
|
308
320
|
logger.validate({ baseText: "CB" });
|
|
309
321
|
});
|
|
@@ -312,18 +324,16 @@ describe("client.applyMsg", () => {
|
|
|
312
324
|
const logger = new testClientLogger_js_1.TestClientLogger(clients.all);
|
|
313
325
|
let seq = 0;
|
|
314
326
|
const ops = [];
|
|
315
|
-
ops.push(clients.B.makeOpMessage(clients.B.insertTextLocal(4, "B"), ++seq));
|
|
316
|
-
ops.push(clients.C.makeOpMessage(clients.C.insertTextLocal(4, "CC"), ++seq));
|
|
317
|
-
ops.push(clients.C.makeOpMessage(clients.C.removeRangeLocal(2, 8), ++seq));
|
|
327
|
+
ops.push(clients.B.makeOpMessage(clients.B.insertTextLocal(4, "B"), ++seq), clients.C.makeOpMessage(clients.C.insertTextLocal(4, "CC"), ++seq), clients.C.makeOpMessage(clients.C.removeRangeLocal(2, 8), ++seq));
|
|
318
328
|
clients.B.applyMsg(ops[0]);
|
|
319
329
|
clients.B.applyMsg(ops[1]);
|
|
320
330
|
ops.push(clients.B.makeOpMessage(clients.B.removeRangeLocal(5, 8), ++seq));
|
|
321
331
|
for (const op of ops) {
|
|
322
|
-
clients.all
|
|
332
|
+
for (const c of clients.all) {
|
|
323
333
|
if (c.getCollabWindow().currentSeq < op.sequenceNumber) {
|
|
324
334
|
c.applyMsg(op);
|
|
325
335
|
}
|
|
326
|
-
}
|
|
336
|
+
}
|
|
327
337
|
}
|
|
328
338
|
logger.validate({ baseText: "ab" });
|
|
329
339
|
});
|
|
@@ -340,11 +350,11 @@ describe("client.applyMsg", () => {
|
|
|
340
350
|
// which its own ops will be sequenced after
|
|
341
351
|
ops.push(clients.C.makeOpMessage(clients.C.insertTextLocal(2, "X"), ++seq));
|
|
342
352
|
for (const op of ops) {
|
|
343
|
-
clients.all
|
|
353
|
+
for (const c of clients.all) {
|
|
344
354
|
if (c.getCollabWindow().currentSeq < op.sequenceNumber) {
|
|
345
355
|
c.applyMsg(op);
|
|
346
356
|
}
|
|
347
|
-
}
|
|
357
|
+
}
|
|
348
358
|
}
|
|
349
359
|
logger.validate({ baseText: "ayzXd" });
|
|
350
360
|
});
|
|
@@ -361,8 +371,8 @@ describe("client.applyMsg", () => {
|
|
|
361
371
|
const removeOp = clientB.makeOpMessage(clientB.removeRangeLocal(0, clientB.getLength()), ++seq);
|
|
362
372
|
[clientA, clientB].map((c) => c.applyMsg(removeOp));
|
|
363
373
|
const regeneratedOp = clientA.regeneratePendingOp(annotateOp, seg);
|
|
364
|
-
(0,
|
|
365
|
-
|
|
374
|
+
(0, node_assert_1.strict)(regeneratedOp.type === ops_js_1.MergeTreeDeltaType.GROUP);
|
|
375
|
+
node_assert_1.strict.strictEqual(regeneratedOp.ops.length, 0);
|
|
366
376
|
});
|
|
367
377
|
it("getContainingSegment with op", () => {
|
|
368
378
|
const clientA = new testClient_js_1.TestClient();
|
|
@@ -382,15 +392,15 @@ describe("client.applyMsg", () => {
|
|
|
382
392
|
referenceSequenceNumber: insertMessage2.referenceSequenceNumber,
|
|
383
393
|
clientId: insertMessage2.clientId,
|
|
384
394
|
});
|
|
385
|
-
|
|
386
|
-
|
|
395
|
+
node_assert_1.strict.notStrictEqual(seg.segment, undefined);
|
|
396
|
+
node_assert_1.strict.strictEqual(seg.segment.text, "C");
|
|
387
397
|
// op with reference sequence >= remove op sequence should not count removed segment
|
|
388
398
|
const insertMessage3 = clientB.makeOpMessage(insertOp2, seq, removeSequence);
|
|
389
399
|
seg = clientA.getContainingSegment(2, {
|
|
390
400
|
referenceSequenceNumber: insertMessage3.referenceSequenceNumber,
|
|
391
401
|
clientId: insertMessage3.clientId,
|
|
392
402
|
});
|
|
393
|
-
|
|
403
|
+
node_assert_1.strict.strictEqual(seg.segment, undefined);
|
|
394
404
|
});
|
|
395
405
|
/**
|
|
396
406
|
* Regression test for an issue whereby reconnected clients could have segment orders that yielded
|
|
@@ -437,21 +447,30 @@ describe("client.applyMsg", () => {
|
|
|
437
447
|
let seq = 0;
|
|
438
448
|
const ops = [];
|
|
439
449
|
const perClientOps = clients.all.map(() => []);
|
|
440
|
-
ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DD"), ++seq));
|
|
441
|
-
ops.
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "D"), ++seq));
|
|
450
|
+
ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DD"), ++seq), clients.C.makeOpMessage(clients.C.insertTextLocal(0, "C"), ++seq));
|
|
451
|
+
for (const op of ops.splice(0))
|
|
452
|
+
for (const c of clients.all)
|
|
453
|
+
c.applyMsg(op);
|
|
454
|
+
ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DDD"), ++seq), clients.D.makeOpMessage(clients.D.insertTextLocal(0, "D"), ++seq));
|
|
445
455
|
// disconnect B(1)
|
|
446
|
-
ops
|
|
447
|
-
.
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
456
|
+
for (const op of ops.splice(0))
|
|
457
|
+
for (const [i, c] of clients.all.entries())
|
|
458
|
+
if (i === 1) {
|
|
459
|
+
perClientOps[i].push(op);
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
c.applyMsg(op);
|
|
463
|
+
}
|
|
464
|
+
ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DDD"), ++seq), clients.D.makeOpMessage(clients.D.removeRangeLocal(6, 9), ++seq));
|
|
451
465
|
// disconnect B(1) and C(2)
|
|
452
|
-
ops
|
|
453
|
-
.
|
|
454
|
-
|
|
466
|
+
for (const op of ops.splice(0))
|
|
467
|
+
for (const [i, c] of clients.all.entries())
|
|
468
|
+
if (i === 1 || i === 2) {
|
|
469
|
+
perClientOps[i].push(op);
|
|
470
|
+
}
|
|
471
|
+
else {
|
|
472
|
+
c.applyMsg(op);
|
|
473
|
+
}
|
|
455
474
|
// apply changes to disconnected clients
|
|
456
475
|
const bOp = {
|
|
457
476
|
op: clients.B.insertTextLocal(1, "b"),
|
|
@@ -463,22 +482,24 @@ describe("client.applyMsg", () => {
|
|
|
463
482
|
};
|
|
464
483
|
// TODO: tracking group
|
|
465
484
|
const { segment, offset } = clients.C.getContainingSegment(5);
|
|
466
|
-
(0,
|
|
485
|
+
(0, node_assert_1.strict)(segment !== undefined, "expected segment");
|
|
467
486
|
const ref = clients.C.createLocalReferencePosition(segment, offset, ops_js_1.ReferenceType.Simple, undefined);
|
|
468
487
|
let beforeSlides = 0;
|
|
469
488
|
let afterSlides = 0;
|
|
470
489
|
ref.callbacks = {
|
|
471
490
|
beforeSlide: (lref) => {
|
|
472
|
-
(0,
|
|
491
|
+
(0, node_assert_1.strict)(lref === ref, "wrong ref slid");
|
|
473
492
|
beforeSlides++;
|
|
474
493
|
},
|
|
475
494
|
afterSlide: (lref) => {
|
|
476
|
-
(0,
|
|
495
|
+
(0, node_assert_1.strict)(lref === ref, "wrong ref slid");
|
|
477
496
|
afterSlides++;
|
|
478
497
|
},
|
|
479
498
|
};
|
|
480
499
|
// catch up disconnected clients
|
|
481
|
-
|
|
500
|
+
for (const [i, clientOps] of perClientOps.entries())
|
|
501
|
+
for (const op of clientOps.splice(0))
|
|
502
|
+
clients.all[i].applyMsg(op);
|
|
482
503
|
// rebase and resubmit disconnected client ops
|
|
483
504
|
ops.push(clients.B.makeOpMessage(clients.B.regeneratePendingOp(bOp.op, bOp.sg), ++seq));
|
|
484
505
|
const trackingGroup = new mergeTreeTracking_js_1.TrackingGroup();
|
|
@@ -487,18 +508,19 @@ describe("client.applyMsg", () => {
|
|
|
487
508
|
trackedSegs.push(seg);
|
|
488
509
|
trackingGroup.link(seg);
|
|
489
510
|
});
|
|
490
|
-
|
|
491
|
-
|
|
511
|
+
node_assert_1.strict.equal(beforeSlides, 0, "should be no slides");
|
|
512
|
+
node_assert_1.strict.equal(afterSlides, 0, "should be no slides");
|
|
492
513
|
ops.push(clients.C.makeOpMessage(clients.C.regeneratePendingOp(cOp.op, cOp.sg), ++seq));
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
(0,
|
|
497
|
-
}
|
|
514
|
+
node_assert_1.strict.equal(beforeSlides, 1, "should be 1 slide");
|
|
515
|
+
node_assert_1.strict.equal(afterSlides, 1, "should be 1 slide");
|
|
516
|
+
for (const seg of trackedSegs) {
|
|
517
|
+
(0, node_assert_1.strict)(trackingGroup.has(seg), "Tracking group should still have segment.");
|
|
518
|
+
}
|
|
498
519
|
// process the resubmitted ops
|
|
499
|
-
ops.splice(0)
|
|
500
|
-
c.
|
|
501
|
-
|
|
520
|
+
for (const op of ops.splice(0))
|
|
521
|
+
for (const c of clients.all) {
|
|
522
|
+
c.applyMsg(op);
|
|
523
|
+
}
|
|
502
524
|
logger.validate({ baseText: "DDDDDDcbD" });
|
|
503
525
|
});
|
|
504
526
|
describe("updates minSeq", () => {
|
|
@@ -509,22 +531,22 @@ describe("client.applyMsg", () => {
|
|
|
509
531
|
localClient.startOrUpdateCollaboration(localUserLongId);
|
|
510
532
|
remoteClient.startOrUpdateCollaboration(remoteUserLongId);
|
|
511
533
|
ops.push(localClient.makeOpMessage(localClient.insertTextLocal(0, "hello world"), 1, 0, localUserLongId, 0));
|
|
512
|
-
ops.splice(0)
|
|
534
|
+
for (const op of ops.splice(0)) {
|
|
513
535
|
localClient.applyMsg(op);
|
|
514
536
|
remoteClient.applyMsg(op);
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
|
|
537
|
+
}
|
|
538
|
+
node_assert_1.strict.equal(localClient.getCollabWindow().minSeq, 0);
|
|
539
|
+
node_assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 0);
|
|
518
540
|
ops.push(localClient.makeOpMessage(localClient.insertTextLocal(0, "abc"),
|
|
519
541
|
/* seq */ 17,
|
|
520
542
|
/* refSeq */ 16, localUserLongId,
|
|
521
543
|
/* minSeq */ 16));
|
|
522
|
-
ops.splice(0)
|
|
544
|
+
for (const op of ops.splice(0)) {
|
|
523
545
|
localClient.applyMsg(op);
|
|
524
546
|
remoteClient.applyMsg(op);
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
|
|
547
|
+
}
|
|
548
|
+
node_assert_1.strict.equal(localClient.getCollabWindow().minSeq, 16);
|
|
549
|
+
node_assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 16);
|
|
528
550
|
});
|
|
529
551
|
it("to the minimum of in-flight messages and the acked message's minSeq", () => {
|
|
530
552
|
let localInFlightRefSeq;
|
|
@@ -544,23 +566,23 @@ describe("client.applyMsg", () => {
|
|
|
544
566
|
/* seq */ 17,
|
|
545
567
|
/* refSeq */ 16, remoteUserLongId,
|
|
546
568
|
/* minSeq */ 16));
|
|
547
|
-
ops.splice(0)
|
|
569
|
+
for (const op of ops.splice(0)) {
|
|
548
570
|
localClient.applyMsg(op);
|
|
549
571
|
remoteClient.applyMsg(op);
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
|
|
572
|
+
}
|
|
573
|
+
node_assert_1.strict.equal(localClient.getCollabWindow().minSeq, 0);
|
|
574
|
+
node_assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 16);
|
|
553
575
|
ops.push(localClient.makeOpMessage(localClient.regeneratePendingOp(resubmittedOp, localClient.peekPendingSegmentGroups()),
|
|
554
576
|
/* seq */ 18,
|
|
555
577
|
/* refSeq */ 16, localUserLongId,
|
|
556
578
|
/* minSeq */ 16));
|
|
557
579
|
localInFlightRefSeq = 16;
|
|
558
|
-
ops.splice(0)
|
|
580
|
+
for (const op of ops.splice(0)) {
|
|
559
581
|
localClient.applyMsg(op);
|
|
560
582
|
remoteClient.applyMsg(op);
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
|
|
583
|
+
}
|
|
584
|
+
node_assert_1.strict.equal(localClient.getCollabWindow().minSeq, 16);
|
|
585
|
+
node_assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 16);
|
|
564
586
|
});
|
|
565
587
|
});
|
|
566
588
|
});
|