@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
package/dist/mergeTree.js
CHANGED
|
@@ -20,7 +20,6 @@ const opBuilder_js_1 = require("./opBuilder.js");
|
|
|
20
20
|
const ops_js_1 = require("./ops.js");
|
|
21
21
|
const partialLengths_js_1 = require("./partialLengths.js");
|
|
22
22
|
const perspective_js_1 = require("./perspective.js");
|
|
23
|
-
// eslint-disable-next-line import/no-deprecated
|
|
24
23
|
const properties_js_1 = require("./properties.js");
|
|
25
24
|
const referencePositions_js_1 = require("./referencePositions.js");
|
|
26
25
|
const segmentPropertiesManager_js_1 = require("./segmentPropertiesManager.js");
|
|
@@ -31,7 +30,7 @@ function wasRemovedAfter(seg, seq) {
|
|
|
31
30
|
}
|
|
32
31
|
function markSegmentMoved(seg, moveInfo) {
|
|
33
32
|
seg.moveDst = moveInfo.moveDst;
|
|
34
|
-
seg.movedClientIds = moveInfo.movedClientIds
|
|
33
|
+
seg.movedClientIds = [...moveInfo.movedClientIds];
|
|
35
34
|
seg.movedSeqs = [moveInfo.movedSeq];
|
|
36
35
|
seg.movedSeq = moveInfo.movedSeq;
|
|
37
36
|
seg.localMovedSeq = moveInfo.localMovedSeq;
|
|
@@ -77,18 +76,19 @@ function findRootMergeBlock(segmentOrNode) {
|
|
|
77
76
|
while (maybeRoot?.parent !== undefined) {
|
|
78
77
|
maybeRoot = maybeRoot.parent;
|
|
79
78
|
}
|
|
80
|
-
return maybeRoot?.mergeTree
|
|
79
|
+
return maybeRoot?.mergeTree === undefined ? undefined : maybeRoot;
|
|
81
80
|
}
|
|
82
81
|
exports.findRootMergeBlock = findRootMergeBlock;
|
|
83
82
|
/**
|
|
83
|
+
* Find the segment to which a reference will slide if it needs to slide, or undefined if there
|
|
84
|
+
* is no valid segment (i.e. the tree is empty).
|
|
85
|
+
*
|
|
84
86
|
* @param segment - The segment to slide from.
|
|
85
87
|
* @param cache - Optional cache mapping segments to their sliding destinations.
|
|
86
88
|
* Excursions will be avoided for segments in the cache, and the cache will be populated with
|
|
87
89
|
* entries for all segments visited during excursion.
|
|
88
90
|
* This can reduce the number of times the tree needs to be scanned if a range containing many
|
|
89
91
|
* SlideOnRemove references is removed.
|
|
90
|
-
* @returns The segment a SlideOnRemove reference should slide to, or undefined if there is no
|
|
91
|
-
* valid segment (i.e. the tree is empty).
|
|
92
92
|
* @internal
|
|
93
93
|
*/
|
|
94
94
|
function getSlideToSegment(segment, slidingPreference = localReference_js_1.SlidingPreference.FORWARD, cache, useNewSlidingBehavior = false) {
|
|
@@ -170,6 +170,8 @@ function getSlideToSegoff(segoff, slidingPreference = localReference_js_1.Slidin
|
|
|
170
170
|
};
|
|
171
171
|
}
|
|
172
172
|
exports.getSlideToSegoff = getSlideToSegoff;
|
|
173
|
+
const forwardPred = (ref) => ref.slidingPreference !== localReference_js_1.SlidingPreference.BACKWARD;
|
|
174
|
+
const backwardPred = (ref) => ref.slidingPreference === localReference_js_1.SlidingPreference.BACKWARD;
|
|
173
175
|
/**
|
|
174
176
|
* @internal
|
|
175
177
|
*/
|
|
@@ -277,7 +279,18 @@ class MergeTree {
|
|
|
277
279
|
(0, internal_1.assert)(refSeq !== undefined, 0x398 /* localSeq provided for local length without refSeq */);
|
|
278
280
|
(0, internal_1.assert)(segment.seq !== undefined, 0x399 /* segment with no seq in mergeTree */);
|
|
279
281
|
const { seq, removedSeq, localRemovedSeq, movedSeq, localMovedSeq } = segment;
|
|
280
|
-
if (seq
|
|
282
|
+
if (seq === constants_js_1.UnassignedSequenceNumber) {
|
|
283
|
+
(0, internal_1.assert)(segment.localSeq !== undefined, 0x39a /* unacked segment with undefined localSeq */);
|
|
284
|
+
// inserted locally, still un-acked
|
|
285
|
+
if (segment.localSeq > localSeq ||
|
|
286
|
+
(localRemovedSeq !== undefined && localRemovedSeq <= localSeq) ||
|
|
287
|
+
(localMovedSeq !== undefined && localMovedSeq <= localSeq)) {
|
|
288
|
+
return 0;
|
|
289
|
+
}
|
|
290
|
+
const { cachedLength } = segment;
|
|
291
|
+
return cachedLength;
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
281
294
|
// inserted remotely
|
|
282
295
|
if (seq > refSeq ||
|
|
283
296
|
(removedSeq !== undefined &&
|
|
@@ -292,16 +305,6 @@ class MergeTree {
|
|
|
292
305
|
}
|
|
293
306
|
return segment.cachedLength;
|
|
294
307
|
}
|
|
295
|
-
else {
|
|
296
|
-
(0, internal_1.assert)(segment.localSeq !== undefined, 0x39a /* unacked segment with undefined localSeq */);
|
|
297
|
-
// inserted locally, still un-acked
|
|
298
|
-
if (segment.localSeq > localSeq ||
|
|
299
|
-
(localRemovedSeq !== undefined && localRemovedSeq <= localSeq) ||
|
|
300
|
-
(localMovedSeq !== undefined && localMovedSeq <= localSeq)) {
|
|
301
|
-
return 0;
|
|
302
|
-
}
|
|
303
|
-
return segment.cachedLength;
|
|
304
|
-
}
|
|
305
308
|
}
|
|
306
309
|
unlinkMarker(marker) {
|
|
307
310
|
const id = marker.getId();
|
|
@@ -321,7 +324,7 @@ class MergeTree {
|
|
|
321
324
|
// Starting with the leaf segments, recursively builds the B-Tree layer by layer from the bottom up.
|
|
322
325
|
const buildMergeBlock = (nodes) => {
|
|
323
326
|
const blockCount = Math.ceil(nodes.length / maxChildren); // Compute # blocks require for this level of B-Tree
|
|
324
|
-
const blocks =
|
|
327
|
+
const blocks = Array.from({ length: blockCount }); // Pre-alloc array to collect nodes
|
|
325
328
|
// For each block in this level of the B-Tree...
|
|
326
329
|
for (let nodeIndex = 0, blockIndex = 0; // Start with the first block and first node
|
|
327
330
|
blockIndex < blockCount; // If we have more blocks, we also have more nodes to insert
|
|
@@ -334,6 +337,7 @@ class MergeTree {
|
|
|
334
337
|
childIndex++, nodeIndex++ // Advance to next child & node
|
|
335
338
|
) {
|
|
336
339
|
// Insert the next node into the current block
|
|
340
|
+
// TODO Non null asserting, why is this not null?
|
|
337
341
|
this.addNode(block, nodes[nodeIndex]);
|
|
338
342
|
}
|
|
339
343
|
// Calculate this block's info. Previously this was inlined into the above loop as a micro-optimization,
|
|
@@ -342,7 +346,8 @@ class MergeTree {
|
|
|
342
346
|
this.blockUpdate(block);
|
|
343
347
|
}
|
|
344
348
|
return blocks.length === 1 // If there is only one block at this layer...
|
|
345
|
-
?
|
|
349
|
+
? // Non null asserting here because of the length check above
|
|
350
|
+
blocks[0] // ...then we're done. Return the root.
|
|
346
351
|
: buildMergeBlock(blocks); // ...otherwise recursively build the next layer above blocks.
|
|
347
352
|
};
|
|
348
353
|
if (segments.length > 0) {
|
|
@@ -390,6 +395,7 @@ class MergeTree {
|
|
|
390
395
|
while (parent) {
|
|
391
396
|
const children = parent.children;
|
|
392
397
|
for (let childIndex = 0; childIndex < parent.childCount; childIndex++) {
|
|
398
|
+
// TODO Non null asserting, why is this not null?
|
|
393
399
|
const child = children[childIndex];
|
|
394
400
|
if ((!!prevParent && child === prevParent) || child === node) {
|
|
395
401
|
break;
|
|
@@ -440,11 +446,9 @@ class MergeTree {
|
|
|
440
446
|
let currentForwardMaybeEndpoint;
|
|
441
447
|
let currentForwardSlideDestination;
|
|
442
448
|
let currentForwardSlideIsForward;
|
|
443
|
-
const forwardPred = (ref) => ref.slidingPreference !== localReference_js_1.SlidingPreference.BACKWARD;
|
|
444
449
|
let currentBackwardMaybeEndpoint;
|
|
445
450
|
let currentBackwardSlideDestination;
|
|
446
451
|
let currentBackwardSlideIsForward;
|
|
447
|
-
const backwardPred = (ref) => ref.slidingPreference === localReference_js_1.SlidingPreference.BACKWARD;
|
|
448
452
|
const slideGroup = (currentSlideDestination, currentSlideIsForward, currentSlideGroup, pred, maybeEndpoint) => {
|
|
449
453
|
if (currentSlideIsForward === undefined) {
|
|
450
454
|
return;
|
|
@@ -461,16 +465,7 @@ class MergeTree {
|
|
|
461
465
|
localRefs.addAfterTombstones(...endpointRefsToAdd);
|
|
462
466
|
}
|
|
463
467
|
}
|
|
464
|
-
if (currentSlideDestination
|
|
465
|
-
const localRefs = localReference_js_1.LocalReferenceCollection.setOrGet(currentSlideDestination);
|
|
466
|
-
if (currentSlideIsForward) {
|
|
467
|
-
localRefs.addBeforeTombstones(...nonEndpointRefsToAdd);
|
|
468
|
-
}
|
|
469
|
-
else {
|
|
470
|
-
localRefs.addAfterTombstones(...nonEndpointRefsToAdd);
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
else {
|
|
468
|
+
if (currentSlideDestination === undefined) {
|
|
474
469
|
for (const collection of currentSlideGroup) {
|
|
475
470
|
for (const ref of collection) {
|
|
476
471
|
if (pred(ref) && !(0, referencePositions_js_1.refTypeIncludesFlag)(ref, ops_js_1.ReferenceType.StayOnRemove)) {
|
|
@@ -481,6 +476,15 @@ class MergeTree {
|
|
|
481
476
|
}
|
|
482
477
|
}
|
|
483
478
|
}
|
|
479
|
+
else {
|
|
480
|
+
const localRefs = localReference_js_1.LocalReferenceCollection.setOrGet(currentSlideDestination);
|
|
481
|
+
if (currentSlideIsForward) {
|
|
482
|
+
localRefs.addBeforeTombstones(...nonEndpointRefsToAdd);
|
|
483
|
+
}
|
|
484
|
+
else {
|
|
485
|
+
localRefs.addAfterTombstones(...nonEndpointRefsToAdd);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
484
488
|
};
|
|
485
489
|
const trySlideSegment = (segment, currentSlideDestination, currentSlideIsForward, currentSlideGroup, pred, slidingPreference, currentMaybeEndpoint, reassign) => {
|
|
486
490
|
// avoid sliding logic if this segment doesn't have any references
|
|
@@ -567,12 +571,7 @@ class MergeTree {
|
|
|
567
571
|
}
|
|
568
572
|
else {
|
|
569
573
|
// Sequence number within window
|
|
570
|
-
if (
|
|
571
|
-
const partialLen = node.partialLengths.getPartialLength(refSeq, clientId);
|
|
572
|
-
partialLengths_js_1.PartialSequenceLengths.options.verifyExpected?.(this, node, refSeq, clientId);
|
|
573
|
-
return partialLen;
|
|
574
|
-
}
|
|
575
|
-
else {
|
|
574
|
+
if (node.isLeaf()) {
|
|
576
575
|
const segment = node;
|
|
577
576
|
const removalInfo = (0, mergeTreeNodes_js_1.toRemovalInfo)(segment);
|
|
578
577
|
const moveInfo = (0, mergeTreeNodes_js_1.toMoveInfo)(segment);
|
|
@@ -598,6 +597,11 @@ class MergeTree {
|
|
|
598
597
|
? segment.cachedLength
|
|
599
598
|
: 0;
|
|
600
599
|
}
|
|
600
|
+
else {
|
|
601
|
+
const partialLen = node.partialLengths.getPartialLength(refSeq, clientId);
|
|
602
|
+
partialLengths_js_1.PartialSequenceLengths.options.verifyExpected?.(this, node, refSeq, clientId);
|
|
603
|
+
return partialLen;
|
|
604
|
+
}
|
|
601
605
|
}
|
|
602
606
|
}
|
|
603
607
|
setMinSeq(minSeq) {
|
|
@@ -621,7 +625,6 @@ class MergeTree {
|
|
|
621
625
|
* Defaults to including all edits which have been applied.
|
|
622
626
|
* @param clientId - The ID of the client from whose perspective to resolve this reference. Defaults to the current client.
|
|
623
627
|
* @param localSeq - The local sequence number to consider. Defaults to including all local edits.
|
|
624
|
-
* @returns the count of elements before the given reference position in the given perspective.
|
|
625
628
|
*/
|
|
626
629
|
referencePositionToLocalPosition(refPos, refSeq = Number.MAX_SAFE_INTEGER, clientId = this.collabWindow.clientId, localSeq = this.collabWindow.localSeq) {
|
|
627
630
|
const seg = refPos.getSegment();
|
|
@@ -689,7 +692,7 @@ class MergeTree {
|
|
|
689
692
|
foundMarker = marker;
|
|
690
693
|
}
|
|
691
694
|
}
|
|
692
|
-
return foundMarker
|
|
695
|
+
return foundMarker === undefined ? mergeTreeNodeWalk_js_1.NodeAction.Skip : mergeTreeNodeWalk_js_1.NodeAction.Exit;
|
|
693
696
|
}, undefined, undefined, forwards);
|
|
694
697
|
return foundMarker;
|
|
695
698
|
}
|
|
@@ -721,6 +724,8 @@ class MergeTree {
|
|
|
721
724
|
if (opArgs.op.type === ops_js_1.MergeTreeDeltaType.OBLITERATE && localMovedSeq !== undefined) {
|
|
722
725
|
const locallyMovedSegments = this.locallyMovedSegments.get(localMovedSeq);
|
|
723
726
|
if (locallyMovedSegments) {
|
|
727
|
+
// Disabling because a for of loop causes the type of segment to be ISegment, which does not have parent information stored
|
|
728
|
+
// eslint-disable-next-line unicorn/no-array-for-each
|
|
724
729
|
locallyMovedSegments.segments.forEach((segment) => {
|
|
725
730
|
segment.localMovedSeq = undefined;
|
|
726
731
|
if (!nodesToUpdate.includes(segment.parent)) {
|
|
@@ -821,15 +826,15 @@ class MergeTree {
|
|
|
821
826
|
}
|
|
822
827
|
if (marker) {
|
|
823
828
|
pos = this.getPosition(marker, refseq, clientId);
|
|
824
|
-
if (
|
|
825
|
-
pos += marker.cachedLength;
|
|
829
|
+
if (relativePos.before) {
|
|
826
830
|
if (relativePos.offset !== undefined) {
|
|
827
|
-
pos
|
|
831
|
+
pos -= relativePos.offset;
|
|
828
832
|
}
|
|
829
833
|
}
|
|
830
834
|
else {
|
|
835
|
+
pos += marker.cachedLength;
|
|
831
836
|
if (relativePos.offset !== undefined) {
|
|
832
|
-
pos
|
|
837
|
+
pos += relativePos.offset;
|
|
833
838
|
}
|
|
834
839
|
}
|
|
835
840
|
}
|
|
@@ -888,6 +893,8 @@ class MergeTree {
|
|
|
888
893
|
}
|
|
889
894
|
}
|
|
890
895
|
blockInsert(pos, refSeq, clientId, seq, localSeq, newSegments) {
|
|
896
|
+
// Keeping this function within the scope of blockInsert for readability.
|
|
897
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping
|
|
891
898
|
const continueFrom = (node) => {
|
|
892
899
|
let siblingExists = false;
|
|
893
900
|
(0, mergeTreeNodeWalk_js_1.forwardExcursion)(node, () => {
|
|
@@ -946,7 +953,7 @@ class MergeTree {
|
|
|
946
953
|
});
|
|
947
954
|
if (newSegment.parent === undefined) {
|
|
948
955
|
// Indicates an attempt to insert past the end of the merge-tree's content.
|
|
949
|
-
const errorConstructor = localSeq
|
|
956
|
+
const errorConstructor = localSeq === undefined ? internal_2.DataProcessingError : internal_2.UsageError;
|
|
950
957
|
throw new errorConstructor("MergeTree insert failed", {
|
|
951
958
|
currentSeq: this.collabWindow.currentSeq,
|
|
952
959
|
minSeq: this.collabWindow.minSeq,
|
|
@@ -1088,6 +1095,7 @@ class MergeTree {
|
|
|
1088
1095
|
let newNode;
|
|
1089
1096
|
let fromSplit;
|
|
1090
1097
|
for (childIndex = 0; childIndex < block.childCount; childIndex++) {
|
|
1098
|
+
// TODO Non null asserting, why is this not null?
|
|
1091
1099
|
child = children[childIndex];
|
|
1092
1100
|
// ensure we walk down the far edge of the tree, even if all sub-tree is eligible for zamboni
|
|
1093
1101
|
const isLastNonLeafBlock = isLastChildBlock && !child.isLeaf() && childIndex === block.childCount - 1;
|
|
@@ -1100,7 +1108,23 @@ class MergeTree {
|
|
|
1100
1108
|
(0, internal_1.assert)(len >= 0, 0x4bc /* Length should not be negative */);
|
|
1101
1109
|
if (_pos < len || (_pos === len && this.breakTie(_pos, child, seq))) {
|
|
1102
1110
|
// Found entry containing pos
|
|
1103
|
-
if (
|
|
1111
|
+
if (child.isLeaf()) {
|
|
1112
|
+
const segment = child;
|
|
1113
|
+
const segmentChanges = context.leaf(segment, _pos, context);
|
|
1114
|
+
if (segmentChanges.replaceCurrent) {
|
|
1115
|
+
block.assignChild(segmentChanges.replaceCurrent, childIndex, false);
|
|
1116
|
+
segmentChanges.replaceCurrent.ordinal = child.ordinal;
|
|
1117
|
+
}
|
|
1118
|
+
if (segmentChanges.next) {
|
|
1119
|
+
newNode = segmentChanges.next;
|
|
1120
|
+
childIndex++; // Insert after
|
|
1121
|
+
}
|
|
1122
|
+
else {
|
|
1123
|
+
// No change
|
|
1124
|
+
return undefined;
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
else {
|
|
1104
1128
|
const childBlock = child;
|
|
1105
1129
|
// Internal node
|
|
1106
1130
|
const splitNode = this.insertingWalk(childBlock, _pos, refSeq, clientId, seq, context, isLastNonLeafBlock);
|
|
@@ -1118,43 +1142,27 @@ class MergeTree {
|
|
|
1118
1142
|
childIndex++; // Insert after
|
|
1119
1143
|
}
|
|
1120
1144
|
}
|
|
1121
|
-
else {
|
|
1122
|
-
const segment = child;
|
|
1123
|
-
const segmentChanges = context.leaf(segment, _pos, context);
|
|
1124
|
-
if (segmentChanges.replaceCurrent) {
|
|
1125
|
-
block.assignChild(segmentChanges.replaceCurrent, childIndex, false);
|
|
1126
|
-
segmentChanges.replaceCurrent.ordinal = child.ordinal;
|
|
1127
|
-
}
|
|
1128
|
-
if (segmentChanges.next) {
|
|
1129
|
-
newNode = segmentChanges.next;
|
|
1130
|
-
childIndex++; // Insert after
|
|
1131
|
-
}
|
|
1132
|
-
else {
|
|
1133
|
-
// No change
|
|
1134
|
-
return undefined;
|
|
1135
|
-
}
|
|
1136
|
-
}
|
|
1137
1145
|
break;
|
|
1138
1146
|
}
|
|
1139
1147
|
else {
|
|
1140
1148
|
_pos -= len;
|
|
1141
1149
|
}
|
|
1142
1150
|
}
|
|
1143
|
-
if (!newNode) {
|
|
1144
|
-
if (
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
// Assert segmentChanges.replaceCurrent === undefined
|
|
1152
|
-
}
|
|
1151
|
+
if (!newNode && _pos === 0) {
|
|
1152
|
+
if (context.continuePredicate?.(block)) {
|
|
1153
|
+
return MergeTree.theUnfinishedNode;
|
|
1154
|
+
}
|
|
1155
|
+
else {
|
|
1156
|
+
const segmentChanges = context.leaf(undefined, _pos, context);
|
|
1157
|
+
newNode = segmentChanges.next;
|
|
1158
|
+
// Assert segmentChanges.replaceCurrent === undefined
|
|
1153
1159
|
}
|
|
1154
1160
|
}
|
|
1155
1161
|
if (newNode) {
|
|
1156
1162
|
for (let i = block.childCount; i > childIndex; i--) {
|
|
1163
|
+
// TODO Non null asserting, why is this not null?
|
|
1157
1164
|
block.children[i] = block.children[i - 1];
|
|
1165
|
+
// TODO Non null asserting, why is this not null?
|
|
1158
1166
|
block.children[i].index = i;
|
|
1159
1167
|
}
|
|
1160
1168
|
block.assignChild(newNode, childIndex, false);
|
|
@@ -1186,6 +1194,7 @@ class MergeTree {
|
|
|
1186
1194
|
// Update ordinals to reflect lowered child count
|
|
1187
1195
|
this.nodeUpdateOrdinals(node);
|
|
1188
1196
|
for (let i = 0; i < halfCount; i++) {
|
|
1197
|
+
// TODO Non null asserting, why is this not null?
|
|
1189
1198
|
newNode.assignChild(node.children[halfCount + i], i, false);
|
|
1190
1199
|
node.children[halfCount + i] = undefined;
|
|
1191
1200
|
}
|
|
@@ -1195,6 +1204,7 @@ class MergeTree {
|
|
|
1195
1204
|
}
|
|
1196
1205
|
nodeUpdateOrdinals(block) {
|
|
1197
1206
|
for (let i = 0; i < block.childCount; i++) {
|
|
1207
|
+
// TODO Non null asserting, why is this not null?
|
|
1198
1208
|
const child = block.children[i];
|
|
1199
1209
|
block.setOrdinal(child, i);
|
|
1200
1210
|
if (!child.isLeaf()) {
|
|
@@ -1248,10 +1258,10 @@ class MergeTree {
|
|
|
1248
1258
|
deltaSegments,
|
|
1249
1259
|
});
|
|
1250
1260
|
}
|
|
1251
|
-
if (this.collabWindow.collaborating &&
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1261
|
+
if (this.collabWindow.collaborating &&
|
|
1262
|
+
seq !== constants_js_1.UnassignedSequenceNumber &&
|
|
1263
|
+
MergeTree.options.zamboniSegments) {
|
|
1264
|
+
(0, zamboni_js_1.zamboniSegments)(this);
|
|
1255
1265
|
}
|
|
1256
1266
|
}
|
|
1257
1267
|
obliterateRange(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
|
|
@@ -1280,7 +1290,16 @@ class MergeTree {
|
|
|
1280
1290
|
(refSeq < segment.seq || segment.seq === constants_js_1.UnassignedSequenceNumber)) {
|
|
1281
1291
|
segment.wasMovedOnInsert = true;
|
|
1282
1292
|
}
|
|
1283
|
-
if (existingMoveInfo
|
|
1293
|
+
if (existingMoveInfo === undefined) {
|
|
1294
|
+
segment.movedClientIds = [clientId];
|
|
1295
|
+
segment.movedSeq = seq;
|
|
1296
|
+
segment.localMovedSeq = localSeq;
|
|
1297
|
+
segment.movedSeqs = [seq];
|
|
1298
|
+
if (!(0, mergeTreeNodes_js_1.toRemovalInfo)(segment)) {
|
|
1299
|
+
movedSegments.push({ segment });
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
else {
|
|
1284
1303
|
_overwrite = true;
|
|
1285
1304
|
if (existingMoveInfo.movedSeq === constants_js_1.UnassignedSequenceNumber) {
|
|
1286
1305
|
// we moved this locally, but someone else moved it first
|
|
@@ -1300,15 +1319,6 @@ class MergeTree {
|
|
|
1300
1319
|
existingMoveInfo.movedSeqs.push(seq);
|
|
1301
1320
|
}
|
|
1302
1321
|
}
|
|
1303
|
-
else {
|
|
1304
|
-
segment.movedClientIds = [clientId];
|
|
1305
|
-
segment.movedSeq = seq;
|
|
1306
|
-
segment.localMovedSeq = localSeq;
|
|
1307
|
-
segment.movedSeqs = [seq];
|
|
1308
|
-
if (!(0, mergeTreeNodes_js_1.toRemovalInfo)(segment)) {
|
|
1309
|
-
movedSegments.push({ segment });
|
|
1310
|
-
}
|
|
1311
|
-
}
|
|
1312
1322
|
// Save segment so can assign moved sequence number when acked by server
|
|
1313
1323
|
if (this.collabWindow.collaborating) {
|
|
1314
1324
|
if (segment.movedSeq === constants_js_1.UnassignedSequenceNumber &&
|
|
@@ -1332,7 +1342,7 @@ class MergeTree {
|
|
|
1332
1342
|
}
|
|
1333
1343
|
return true;
|
|
1334
1344
|
};
|
|
1335
|
-
this.nodeMap(refSeq, clientId, markMoved, undefined, afterMarkMoved, start, end, undefined, seq
|
|
1345
|
+
this.nodeMap(refSeq, clientId, markMoved, undefined, afterMarkMoved, start, end, undefined, seq === constants_js_1.UnassignedSequenceNumber ? undefined : seq);
|
|
1336
1346
|
this.slideAckedRemovedSegmentReferences(localOverlapWithRefs);
|
|
1337
1347
|
// opArgs == undefined => test code
|
|
1338
1348
|
if (movedSegments.length > 0) {
|
|
@@ -1350,10 +1360,10 @@ class MergeTree {
|
|
|
1350
1360
|
if (!this.collabWindow.collaborating || clientId !== this.collabWindow.clientId) {
|
|
1351
1361
|
this.slideAckedRemovedSegmentReferences(movedSegments.map(({ segment }) => segment));
|
|
1352
1362
|
}
|
|
1353
|
-
if (this.collabWindow.collaborating &&
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1363
|
+
if (this.collabWindow.collaborating &&
|
|
1364
|
+
seq !== constants_js_1.UnassignedSequenceNumber &&
|
|
1365
|
+
MergeTree.options.zamboniSegments) {
|
|
1366
|
+
(0, zamboni_js_1.zamboniSegments)(this);
|
|
1357
1367
|
}
|
|
1358
1368
|
}
|
|
1359
1369
|
markRangeRemoved(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
|
|
@@ -1367,7 +1377,15 @@ class MergeTree {
|
|
|
1367
1377
|
const localSeq = seq === constants_js_1.UnassignedSequenceNumber ? ++this.collabWindow.localSeq : undefined;
|
|
1368
1378
|
const markRemoved = (segment, pos, _start, _end) => {
|
|
1369
1379
|
const existingRemovalInfo = (0, mergeTreeNodes_js_1.toRemovalInfo)(segment);
|
|
1370
|
-
if (existingRemovalInfo
|
|
1380
|
+
if (existingRemovalInfo === undefined) {
|
|
1381
|
+
segment.removedClientIds = [clientId];
|
|
1382
|
+
segment.removedSeq = seq;
|
|
1383
|
+
segment.localRemovedSeq = localSeq;
|
|
1384
|
+
if (!(0, mergeTreeNodes_js_1.toMoveInfo)(segment)) {
|
|
1385
|
+
removedSegments.push({ segment });
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1388
|
+
else {
|
|
1371
1389
|
_overwrite = true;
|
|
1372
1390
|
if (existingRemovalInfo.removedSeq === constants_js_1.UnassignedSequenceNumber) {
|
|
1373
1391
|
// we removed this locally, but someone else removed it first
|
|
@@ -1385,14 +1403,6 @@ class MergeTree {
|
|
|
1385
1403
|
existingRemovalInfo.removedClientIds.push(clientId);
|
|
1386
1404
|
}
|
|
1387
1405
|
}
|
|
1388
|
-
else {
|
|
1389
|
-
segment.removedClientIds = [clientId];
|
|
1390
|
-
segment.removedSeq = seq;
|
|
1391
|
-
segment.localRemovedSeq = localSeq;
|
|
1392
|
-
if (!(0, mergeTreeNodes_js_1.toMoveInfo)(segment)) {
|
|
1393
|
-
removedSegments.push({ segment });
|
|
1394
|
-
}
|
|
1395
|
-
}
|
|
1396
1406
|
// Save segment so we can assign removed sequence number when acked by server
|
|
1397
1407
|
if (this.collabWindow.collaborating) {
|
|
1398
1408
|
if (segment.removedSeq === constants_js_1.UnassignedSequenceNumber &&
|
|
@@ -1433,10 +1443,10 @@ class MergeTree {
|
|
|
1433
1443
|
if (!this.collabWindow.collaborating || clientId !== this.collabWindow.clientId) {
|
|
1434
1444
|
this.slideAckedRemovedSegmentReferences(removedSegments.map(({ segment }) => segment));
|
|
1435
1445
|
}
|
|
1436
|
-
if (this.collabWindow.collaborating &&
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1446
|
+
if (this.collabWindow.collaborating &&
|
|
1447
|
+
seq !== constants_js_1.UnassignedSequenceNumber &&
|
|
1448
|
+
MergeTree.options.zamboniSegments) {
|
|
1449
|
+
(0, zamboni_js_1.zamboniSegments)(this);
|
|
1440
1450
|
}
|
|
1441
1451
|
}
|
|
1442
1452
|
/**
|
|
@@ -1449,6 +1459,8 @@ class MergeTree {
|
|
|
1449
1459
|
if (pendingSegmentGroup === undefined || pendingSegmentGroup !== localOpMetadata) {
|
|
1450
1460
|
throw new Error("Rollback op doesn't match last edit");
|
|
1451
1461
|
}
|
|
1462
|
+
// Disabling because a for of loop causes the type of segment to be ISegment, which does not have parent information stored
|
|
1463
|
+
// eslint-disable-next-line unicorn/no-array-for-each
|
|
1452
1464
|
pendingSegmentGroup.segments.forEach((segment) => {
|
|
1453
1465
|
const segmentSegmentGroup = segment.segmentGroups?.pop?.();
|
|
1454
1466
|
(0, internal_1.assert)(segmentSegmentGroup === pendingSegmentGroup, 0x3ee /* Unexpected segmentGroup in segment */);
|
|
@@ -1488,6 +1500,7 @@ class MergeTree {
|
|
|
1488
1500
|
this.markRangeRemoved(start, start + segment.cachedLength, constants_js_1.UniversalSequenceNumber, this.collabWindow.clientId, constants_js_1.UniversalSequenceNumber, false, { op: removeOp });
|
|
1489
1501
|
} /* op.type === MergeTreeDeltaType.ANNOTATE */
|
|
1490
1502
|
else {
|
|
1503
|
+
// TODO Non null asserting, why is this not null?
|
|
1491
1504
|
const props = pendingSegmentGroup.previousProps[i];
|
|
1492
1505
|
const annotateOp = (0, opBuilder_js_1.createAnnotateRangeOp)(start, start + segment.cachedLength, props);
|
|
1493
1506
|
this.annotateRange(start, start + segment.cachedLength, props, constants_js_1.UniversalSequenceNumber, this.collabWindow.clientId, constants_js_1.UniversalSequenceNumber, { op: annotateOp }, segmentPropertiesManager_js_1.PropertiesRollback.Rollback);
|
|
@@ -1592,18 +1605,20 @@ class MergeTree {
|
|
|
1592
1605
|
}
|
|
1593
1606
|
}
|
|
1594
1607
|
}
|
|
1595
|
-
const newOrder = Array.from(affectedSegments
|
|
1596
|
-
|
|
1608
|
+
const newOrder = Array.from(affectedSegments, ({ data }) => data);
|
|
1609
|
+
for (const seg of newOrder)
|
|
1610
|
+
seg.localRefs?.walkReferences((lref) => lref.callbacks?.beforeSlide?.(lref));
|
|
1597
1611
|
const perSegmentTrackingGroups = new Map();
|
|
1598
1612
|
for (const segment of newOrder) {
|
|
1599
1613
|
const { trackingCollection } = segment;
|
|
1600
|
-
const trackingGroups =
|
|
1614
|
+
const trackingGroups = [...trackingCollection.trackingGroups];
|
|
1601
1615
|
perSegmentTrackingGroups.set(segment, trackingGroups);
|
|
1602
1616
|
for (const group of trackingCollection.trackingGroups) {
|
|
1603
1617
|
trackingCollection.unlink(group);
|
|
1604
1618
|
}
|
|
1605
1619
|
}
|
|
1606
1620
|
for (let i = 0; i < newOrder.length; i++) {
|
|
1621
|
+
// TODO Non null asserting, why is this not null?
|
|
1607
1622
|
const seg = newOrder[i];
|
|
1608
1623
|
const { parent, index, ordinal } = currentOrder[i];
|
|
1609
1624
|
parent?.assignChild(seg, index, false);
|
|
@@ -1623,13 +1638,16 @@ class MergeTree {
|
|
|
1623
1638
|
}
|
|
1624
1639
|
return depths.get(block);
|
|
1625
1640
|
};
|
|
1626
|
-
newOrder
|
|
1627
|
-
|
|
1641
|
+
for (const element of newOrder) {
|
|
1642
|
+
computeDepth(element);
|
|
1643
|
+
}
|
|
1644
|
+
for (const [node] of [...depths.entries()].sort((a, b) => b[1] - a[1])) {
|
|
1628
1645
|
if (!node.isLeaf()) {
|
|
1629
1646
|
this.nodeUpdateLengthNewStructure(node);
|
|
1630
1647
|
}
|
|
1631
1648
|
}
|
|
1632
|
-
|
|
1649
|
+
for (const seg of newOrder)
|
|
1650
|
+
seg.localRefs?.walkReferences((lref) => lref.callbacks?.afterSlide?.(lref));
|
|
1633
1651
|
}
|
|
1634
1652
|
/**
|
|
1635
1653
|
* Normalizes the segments nearby `segmentGroup` to be ordered as they would if the op submitting `segmentGroup`
|
|
@@ -1684,11 +1702,10 @@ class MergeTree {
|
|
|
1684
1702
|
}
|
|
1685
1703
|
blockUpdate(block) {
|
|
1686
1704
|
let len;
|
|
1687
|
-
// eslint-disable-next-line import/no-deprecated
|
|
1688
1705
|
const rightmostTiles = (0, properties_js_1.createMap)();
|
|
1689
|
-
// eslint-disable-next-line import/no-deprecated
|
|
1690
1706
|
const leftmostTiles = (0, properties_js_1.createMap)();
|
|
1691
1707
|
for (let i = 0; i < block.childCount; i++) {
|
|
1708
|
+
// TODO Non null asserting, why is this not null?
|
|
1692
1709
|
const node = block.children[i];
|
|
1693
1710
|
const nodeLength = nodeTotalLength(this, node);
|
|
1694
1711
|
if (nodeLength !== undefined) {
|
|
@@ -1719,9 +1736,7 @@ class MergeTree {
|
|
|
1719
1736
|
}
|
|
1720
1737
|
}
|
|
1721
1738
|
else {
|
|
1722
|
-
// eslint-disable-next-line import/no-deprecated
|
|
1723
1739
|
(0, properties_js_1.extend)(rightmostTiles, node.rightmostTiles);
|
|
1724
|
-
// eslint-disable-next-line import/no-deprecated
|
|
1725
1740
|
(0, properties_js_1.extendIfUndefined)(leftmostTiles, node.leftmostTiles);
|
|
1726
1741
|
}
|
|
1727
1742
|
}
|