@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/src/properties.ts
CHANGED
|
@@ -23,12 +23,18 @@ export interface MapLike<T> {
|
|
|
23
23
|
* @legacy
|
|
24
24
|
* @alpha
|
|
25
25
|
*/
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
27
|
export type PropertySet = MapLike<any>;
|
|
27
28
|
|
|
28
29
|
/**
|
|
30
|
+
* Compares two PropertySets for equality.
|
|
31
|
+
*
|
|
29
32
|
* @internal
|
|
30
33
|
*/
|
|
31
|
-
export function matchProperties(
|
|
34
|
+
export function matchProperties(
|
|
35
|
+
a: PropertySet | undefined,
|
|
36
|
+
b: PropertySet | undefined,
|
|
37
|
+
): boolean {
|
|
32
38
|
if (!a && !b) {
|
|
33
39
|
return true;
|
|
34
40
|
}
|
|
@@ -44,6 +50,7 @@ export function matchProperties(a: PropertySet | undefined, b: PropertySet | und
|
|
|
44
50
|
if (b?.[key] === undefined) {
|
|
45
51
|
return false;
|
|
46
52
|
} else if (typeof b[key] === "object") {
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
47
54
|
if (!matchProperties(a?.[key], b[key])) {
|
|
48
55
|
return false;
|
|
49
56
|
}
|
|
@@ -56,20 +63,23 @@ export function matchProperties(a: PropertySet | undefined, b: PropertySet | und
|
|
|
56
63
|
}
|
|
57
64
|
|
|
58
65
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
66
|
+
* Adds properties from one PropertySet to another.
|
|
67
|
+
*
|
|
61
68
|
* @internal
|
|
62
69
|
*/
|
|
63
|
-
export function extend<T>(base: MapLike<T>, extension: MapLike<T> | undefined) {
|
|
70
|
+
export function extend<T>(base: MapLike<T>, extension: MapLike<T> | undefined): MapLike<T> {
|
|
64
71
|
if (extension !== undefined) {
|
|
65
72
|
// eslint-disable-next-line guard-for-in, no-restricted-syntax
|
|
66
73
|
for (const key in extension) {
|
|
67
74
|
const v = extension[key];
|
|
75
|
+
// TODO Non null asserting, why is this not null?
|
|
68
76
|
if (v === null) {
|
|
69
77
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
70
78
|
delete base[key];
|
|
71
79
|
} else {
|
|
72
|
-
|
|
80
|
+
// Non null aseerting here since we are checking if v is not null
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
82
|
+
base[key] = v!;
|
|
73
83
|
}
|
|
74
84
|
}
|
|
75
85
|
}
|
|
@@ -77,11 +87,11 @@ export function extend<T>(base: MapLike<T>, extension: MapLike<T> | undefined) {
|
|
|
77
87
|
}
|
|
78
88
|
|
|
79
89
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
90
|
+
* Clones properties in a given PropertySet into a new PropertySet.
|
|
91
|
+
*
|
|
82
92
|
* @internal
|
|
83
93
|
*/
|
|
84
|
-
export function clone<T>(extension: MapLike<T> | undefined) {
|
|
94
|
+
export function clone<T>(extension: MapLike<T> | undefined): MapLike<T> | undefined {
|
|
85
95
|
if (extension === undefined) {
|
|
86
96
|
return undefined;
|
|
87
97
|
}
|
|
@@ -90,37 +100,46 @@ export function clone<T>(extension: MapLike<T> | undefined) {
|
|
|
90
100
|
for (const key in extension) {
|
|
91
101
|
const v = extension[key];
|
|
92
102
|
if (v !== null) {
|
|
93
|
-
|
|
103
|
+
// If `v` is undefined, undefined must have been assignable to `T`.
|
|
104
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
105
|
+
cloneMap[key] = v!;
|
|
94
106
|
}
|
|
95
107
|
}
|
|
96
108
|
return cloneMap;
|
|
97
109
|
}
|
|
98
110
|
|
|
99
111
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
112
|
+
* Add properties in one PropertySet to another PropertySet. If the PropertySet we are adding
|
|
113
|
+
* to does not exist, create one.
|
|
114
|
+
*
|
|
102
115
|
* @internal
|
|
103
116
|
*/
|
|
104
117
|
export function addProperties(
|
|
105
118
|
oldProps: PropertySet | undefined,
|
|
106
119
|
newProps: PropertySet,
|
|
107
120
|
): PropertySet {
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
108
122
|
const _oldProps = oldProps ?? createMap<any>();
|
|
109
123
|
extend(_oldProps, newProps);
|
|
110
124
|
return { ..._oldProps };
|
|
111
125
|
}
|
|
112
126
|
|
|
113
127
|
/**
|
|
114
|
-
*
|
|
115
|
-
*
|
|
128
|
+
* Replace values of undefined in one PropertySet with values for the same key from another PropertySet.
|
|
129
|
+
*
|
|
116
130
|
* @internal
|
|
117
131
|
*/
|
|
118
|
-
export function extendIfUndefined<T>(
|
|
132
|
+
export function extendIfUndefined<T>(
|
|
133
|
+
base: MapLike<T>,
|
|
134
|
+
extension: MapLike<T> | undefined,
|
|
135
|
+
): MapLike<T> {
|
|
119
136
|
if (extension !== undefined) {
|
|
120
137
|
// eslint-disable-next-line no-restricted-syntax
|
|
121
138
|
for (const key in extension) {
|
|
122
139
|
if (base[key] === undefined) {
|
|
123
|
-
|
|
140
|
+
// TODO Non null asserting, why is this not null?
|
|
141
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
142
|
+
base[key] = extension[key]!;
|
|
124
143
|
}
|
|
125
144
|
}
|
|
126
145
|
}
|
|
@@ -128,11 +147,10 @@ export function extendIfUndefined<T>(base: MapLike<T>, extension: MapLike<T> | u
|
|
|
128
147
|
}
|
|
129
148
|
|
|
130
149
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
150
|
+
* Create a MapLike with good performance.
|
|
151
|
+
*
|
|
133
152
|
* @internal
|
|
134
153
|
*/
|
|
135
|
-
// Create a MapLike with good performance.
|
|
136
154
|
export function createMap<T>(): MapLike<T> {
|
|
137
155
|
return Object.create(null) as MapLike<T>;
|
|
138
156
|
}
|
|
@@ -18,6 +18,7 @@ export const reservedTileLabelsKey = "referenceTileLabels";
|
|
|
18
18
|
export const reservedRangeLabelsKey = "referenceRangeLabels";
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
+
* Determines if the given reference type includes the given flags.
|
|
21
22
|
* @internal
|
|
22
23
|
*/
|
|
23
24
|
export function refTypeIncludesFlag(
|
|
@@ -30,6 +31,7 @@ export function refTypeIncludesFlag(
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
/**
|
|
34
|
+
* Gets the tile labels stored in the given reference position.
|
|
33
35
|
* @legacy
|
|
34
36
|
* @alpha
|
|
35
37
|
*/
|
|
@@ -39,6 +41,7 @@ export const refGetTileLabels = (refPos: ReferencePosition): string[] | undefine
|
|
|
39
41
|
: undefined;
|
|
40
42
|
|
|
41
43
|
/**
|
|
44
|
+
* Determines if a reference position has the given tile label.
|
|
42
45
|
* @legacy
|
|
43
46
|
* @alpha
|
|
44
47
|
*/
|
|
@@ -48,6 +51,7 @@ export function refHasTileLabel(refPos: ReferencePosition, label: string): boole
|
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
/**
|
|
54
|
+
* Determines if a reference position has any tile labels.
|
|
51
55
|
* @internal
|
|
52
56
|
*/
|
|
53
57
|
export function refHasTileLabels(refPos: ReferencePosition): boolean {
|
|
@@ -108,6 +112,7 @@ export interface ReferencePosition {
|
|
|
108
112
|
export const DetachedReferencePosition = -1;
|
|
109
113
|
|
|
110
114
|
/**
|
|
115
|
+
* Finds the minimum reference position.
|
|
111
116
|
* @internal
|
|
112
117
|
*/
|
|
113
118
|
export function minReferencePosition<T extends ReferencePosition>(a: T, b: T): T {
|
|
@@ -115,6 +120,7 @@ export function minReferencePosition<T extends ReferencePosition>(a: T, b: T): T
|
|
|
115
120
|
}
|
|
116
121
|
|
|
117
122
|
/**
|
|
123
|
+
* Finds the maximum reference position.
|
|
118
124
|
* @internal
|
|
119
125
|
*/
|
|
120
126
|
export function maxReferencePosition<T extends ReferencePosition>(a: T, b: T): T {
|
|
@@ -122,6 +128,7 @@ export function maxReferencePosition<T extends ReferencePosition>(a: T, b: T): T
|
|
|
122
128
|
}
|
|
123
129
|
|
|
124
130
|
/**
|
|
131
|
+
* Compares two reference positions.
|
|
125
132
|
* @internal
|
|
126
133
|
*/
|
|
127
134
|
export function compareReferencePositions(a: ReferencePosition, b: ReferencePosition): number {
|
package/src/revertibles.ts
CHANGED
|
@@ -114,15 +114,17 @@ function findMergeTreeWithRevert(trackable: Trackable): MergeTreeWithRevert {
|
|
|
114
114
|
function appendLocalInsertToRevertibles(
|
|
115
115
|
deltaArgs: IMergeTreeDeltaCallbackArgs,
|
|
116
116
|
revertibles: MergeTreeDeltaRevertible[],
|
|
117
|
-
) {
|
|
117
|
+
): MergeTreeDeltaRevertible[] {
|
|
118
118
|
if (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.INSERT) {
|
|
119
119
|
revertibles.push({
|
|
120
120
|
operation: MergeTreeDeltaType.INSERT,
|
|
121
121
|
trackingGroup: new UnorderedTrackingGroup(),
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
// TODO Non null asserting, why is this not null?
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
126
|
+
const last = revertibles[revertibles.length - 1]!;
|
|
127
|
+
for (const t of deltaArgs.deltaSegments) last.trackingGroup.link(t.segment);
|
|
126
128
|
|
|
127
129
|
return revertibles;
|
|
128
130
|
}
|
|
@@ -130,20 +132,24 @@ function appendLocalInsertToRevertibles(
|
|
|
130
132
|
function appendLocalRemoveToRevertibles(
|
|
131
133
|
deltaArgs: IMergeTreeDeltaCallbackArgs,
|
|
132
134
|
revertibles: MergeTreeDeltaRevertible[],
|
|
133
|
-
) {
|
|
135
|
+
): MergeTreeDeltaRevertible[] {
|
|
134
136
|
if (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.REMOVE) {
|
|
135
137
|
revertibles.push({
|
|
136
138
|
operation: MergeTreeDeltaType.REMOVE,
|
|
137
139
|
trackingGroup: new UnorderedTrackingGroup(),
|
|
138
140
|
});
|
|
139
141
|
}
|
|
140
|
-
|
|
142
|
+
// TODO Non null asserting, why is this not null?
|
|
143
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
144
|
+
const last = revertibles[revertibles.length - 1]!;
|
|
141
145
|
|
|
142
|
-
|
|
146
|
+
// TODO Non null asserting, why is this not null?
|
|
147
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
148
|
+
const mergeTreeWithRevert = findMergeTreeWithRevert(deltaArgs.deltaSegments[0]!.segment);
|
|
143
149
|
|
|
144
|
-
deltaArgs.deltaSegments
|
|
150
|
+
for (const t of deltaArgs.deltaSegments) {
|
|
145
151
|
const props: RemoveSegmentRefProperties = {
|
|
146
|
-
segSpec: t.segment.toJSONObject(),
|
|
152
|
+
segSpec: t.segment.toJSONObject() as IJSONSegment,
|
|
147
153
|
referenceSpace: "mergeTreeDeltaRevertible",
|
|
148
154
|
};
|
|
149
155
|
const ref = mergeTreeWithRevert.createLocalReferencePosition(
|
|
@@ -153,22 +159,22 @@ function appendLocalRemoveToRevertibles(
|
|
|
153
159
|
props,
|
|
154
160
|
);
|
|
155
161
|
ref.callbacks = mergeTreeWithRevert.__mergeTreeRevertible.refCallbacks;
|
|
156
|
-
t.segment.trackingCollection.trackingGroups
|
|
162
|
+
for (const tg of t.segment.trackingCollection.trackingGroups) {
|
|
157
163
|
tg.link(ref);
|
|
158
164
|
tg.unlink(t.segment);
|
|
159
|
-
}
|
|
165
|
+
}
|
|
160
166
|
|
|
161
167
|
last.trackingGroup.link(ref);
|
|
162
|
-
}
|
|
168
|
+
}
|
|
163
169
|
return revertibles;
|
|
164
170
|
}
|
|
165
171
|
|
|
166
172
|
function appendLocalAnnotateToRevertibles(
|
|
167
173
|
deltaArgs: IMergeTreeDeltaCallbackArgs,
|
|
168
174
|
revertibles: MergeTreeDeltaRevertible[],
|
|
169
|
-
) {
|
|
175
|
+
): MergeTreeDeltaRevertible[] {
|
|
170
176
|
let last = revertibles[revertibles.length - 1];
|
|
171
|
-
deltaArgs.deltaSegments
|
|
177
|
+
for (const ds of deltaArgs.deltaSegments) {
|
|
172
178
|
const propertyDeltas = ds.propertyDeltas;
|
|
173
179
|
if (propertyDeltas) {
|
|
174
180
|
if (
|
|
@@ -186,64 +192,76 @@ function appendLocalAnnotateToRevertibles(
|
|
|
186
192
|
revertibles.push(last);
|
|
187
193
|
}
|
|
188
194
|
}
|
|
189
|
-
}
|
|
195
|
+
}
|
|
190
196
|
return revertibles;
|
|
191
197
|
}
|
|
192
198
|
|
|
193
199
|
/**
|
|
200
|
+
* Appends a merge tree delta to the list of revertibles.
|
|
201
|
+
*
|
|
194
202
|
* @legacy
|
|
195
203
|
* @alpha
|
|
196
204
|
*/
|
|
197
205
|
export function appendToMergeTreeDeltaRevertibles(
|
|
198
206
|
deltaArgs: IMergeTreeDeltaCallbackArgs,
|
|
199
207
|
revertibles: MergeTreeDeltaRevertible[],
|
|
200
|
-
) {
|
|
208
|
+
): void {
|
|
201
209
|
if (deltaArgs.deltaSegments.length === 0) {
|
|
202
210
|
return;
|
|
203
211
|
}
|
|
204
212
|
switch (deltaArgs.operation) {
|
|
205
|
-
case MergeTreeDeltaType.INSERT:
|
|
213
|
+
case MergeTreeDeltaType.INSERT: {
|
|
206
214
|
appendLocalInsertToRevertibles(deltaArgs, revertibles);
|
|
207
215
|
break;
|
|
216
|
+
}
|
|
208
217
|
|
|
209
|
-
case MergeTreeDeltaType.REMOVE:
|
|
218
|
+
case MergeTreeDeltaType.REMOVE: {
|
|
210
219
|
appendLocalRemoveToRevertibles(deltaArgs, revertibles);
|
|
211
220
|
break;
|
|
221
|
+
}
|
|
212
222
|
|
|
213
|
-
case MergeTreeDeltaType.ANNOTATE:
|
|
223
|
+
case MergeTreeDeltaType.ANNOTATE: {
|
|
214
224
|
appendLocalAnnotateToRevertibles(deltaArgs, revertibles);
|
|
215
225
|
break;
|
|
226
|
+
}
|
|
216
227
|
|
|
217
|
-
default:
|
|
228
|
+
default: {
|
|
218
229
|
throw new UsageError("Unsupported event delta type", {
|
|
219
230
|
operation: deltaArgs.operation,
|
|
220
231
|
});
|
|
232
|
+
}
|
|
221
233
|
}
|
|
222
234
|
}
|
|
223
235
|
|
|
224
236
|
/**
|
|
237
|
+
* Removes all revertibles from the list of revertibles.
|
|
238
|
+
*
|
|
225
239
|
* @legacy
|
|
226
240
|
* @alpha
|
|
227
241
|
*/
|
|
228
|
-
export function discardMergeTreeDeltaRevertible(
|
|
229
|
-
revertibles
|
|
230
|
-
|
|
242
|
+
export function discardMergeTreeDeltaRevertible(
|
|
243
|
+
revertibles: MergeTreeDeltaRevertible[],
|
|
244
|
+
): void {
|
|
245
|
+
for (const r of revertibles) {
|
|
246
|
+
for (const t of r.trackingGroup.tracked) {
|
|
231
247
|
t.trackingCollection.unlink(r.trackingGroup);
|
|
232
248
|
// remove untracked local references
|
|
233
249
|
if (t.trackingCollection.empty && !t.isLeaf()) {
|
|
234
250
|
t.getSegment()?.localRefs?.removeLocalRef(t);
|
|
235
251
|
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
238
254
|
}
|
|
239
255
|
|
|
240
256
|
function revertLocalInsert(
|
|
241
257
|
driver: MergeTreeRevertibleDriver,
|
|
242
258
|
mergeTreeWithRevert: MergeTreeWithRevert,
|
|
243
259
|
revertible: TypedRevertible<typeof MergeTreeDeltaType.INSERT>,
|
|
244
|
-
) {
|
|
260
|
+
): void {
|
|
245
261
|
while (revertible.trackingGroup.size > 0) {
|
|
246
|
-
|
|
262
|
+
// TODO Non null asserting, why is this not null?
|
|
263
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
264
|
+
const tracked = revertible.trackingGroup.tracked[0]!;
|
|
247
265
|
assert(
|
|
248
266
|
tracked.trackingCollection.unlink(revertible.trackingGroup),
|
|
249
267
|
0x3f1 /* tracking group removed */,
|
|
@@ -260,9 +278,11 @@ function revertLocalRemove(
|
|
|
260
278
|
driver: MergeTreeRevertibleDriver,
|
|
261
279
|
mergeTreeWithRevert: MergeTreeWithRevert,
|
|
262
280
|
revertible: TypedRevertible<typeof MergeTreeDeltaType.REMOVE>,
|
|
263
|
-
) {
|
|
281
|
+
): void {
|
|
264
282
|
while (revertible.trackingGroup.size > 0) {
|
|
265
|
-
|
|
283
|
+
// TODO Non null asserting, why is this not null?
|
|
284
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
285
|
+
const tracked = revertible.trackingGroup.tracked[0]!;
|
|
266
286
|
|
|
267
287
|
assert(
|
|
268
288
|
tracked.trackingCollection.unlink(revertible.trackingGroup),
|
|
@@ -295,7 +315,7 @@ function revertLocalRemove(
|
|
|
295
315
|
).segment;
|
|
296
316
|
assert(insertSegment !== undefined, 0x3f5 /* insert segment must exist at position */);
|
|
297
317
|
|
|
298
|
-
const localSlideFilter = (lref: LocalReferencePosition) =>
|
|
318
|
+
const localSlideFilter = (lref: LocalReferencePosition): boolean =>
|
|
299
319
|
(lref.properties as Partial<RemoveSegmentRefProperties>)?.referenceSpace ===
|
|
300
320
|
"mergeTreeDeltaRevertible";
|
|
301
321
|
|
|
@@ -303,7 +323,7 @@ function revertLocalRemove(
|
|
|
303
323
|
Record<"before" | "after", DoublyLinkedList<LocalReferencePosition>>
|
|
304
324
|
> = {};
|
|
305
325
|
const forward = insertSegment.ordinal < refSeg.ordinal;
|
|
306
|
-
const refHandler = (lref: LocalReferencePosition) => {
|
|
326
|
+
const refHandler = (lref: LocalReferencePosition): false | undefined => {
|
|
307
327
|
// once we reach it keep the original reference where it is
|
|
308
328
|
// we'll move tracking groups, and remove it as a last step.
|
|
309
329
|
if (tracked === lref) {
|
|
@@ -352,10 +372,10 @@ function revertLocalRemove(
|
|
|
352
372
|
}
|
|
353
373
|
}
|
|
354
374
|
|
|
355
|
-
tracked.trackingCollection.trackingGroups
|
|
375
|
+
for (const tg of tracked.trackingCollection.trackingGroups) {
|
|
356
376
|
tg.link(insertSegment);
|
|
357
377
|
tg.unlink(tracked);
|
|
358
|
-
}
|
|
378
|
+
}
|
|
359
379
|
tracked.getSegment()?.localRefs?.removeLocalRef(tracked);
|
|
360
380
|
}
|
|
361
381
|
}
|
|
@@ -364,9 +384,11 @@ function revertLocalAnnotate(
|
|
|
364
384
|
driver: MergeTreeRevertibleDriver,
|
|
365
385
|
mergeTreeWithRevert: MergeTreeWithRevert,
|
|
366
386
|
revertible: TypedRevertible<typeof MergeTreeDeltaType.ANNOTATE>,
|
|
367
|
-
) {
|
|
387
|
+
): void {
|
|
368
388
|
while (revertible.trackingGroup.size > 0) {
|
|
369
|
-
|
|
389
|
+
// TODO Non null asserting, why is this not null?
|
|
390
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
391
|
+
const tracked = revertible.trackingGroup.tracked[0]!;
|
|
370
392
|
const unlinked = tracked.trackingCollection.unlink(revertible.trackingGroup);
|
|
371
393
|
assert(unlinked && tracked.isLeaf(), 0x3f7 /* annotates must track segments */);
|
|
372
394
|
if (toRemovalInfo(tracked) === undefined) {
|
|
@@ -376,7 +398,7 @@ function revertLocalAnnotate(
|
|
|
376
398
|
}
|
|
377
399
|
}
|
|
378
400
|
|
|
379
|
-
function getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegment) {
|
|
401
|
+
function getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegment): number {
|
|
380
402
|
return mergeTreeWithRevert.getPosition(
|
|
381
403
|
segment,
|
|
382
404
|
mergeTreeWithRevert.collabWindow.currentSeq,
|
|
@@ -385,13 +407,15 @@ function getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegment
|
|
|
385
407
|
}
|
|
386
408
|
|
|
387
409
|
/**
|
|
410
|
+
* Reverts all operations in the list of revertibles.
|
|
411
|
+
*
|
|
388
412
|
* @legacy
|
|
389
413
|
* @alpha
|
|
390
414
|
*/
|
|
391
415
|
export function revertMergeTreeDeltaRevertibles(
|
|
392
416
|
driver: MergeTreeRevertibleDriver,
|
|
393
417
|
revertibles: MergeTreeDeltaRevertible[],
|
|
394
|
-
) {
|
|
418
|
+
): void {
|
|
395
419
|
let mergeTreeWithRevert: MergeTreeWithRevert | undefined;
|
|
396
420
|
|
|
397
421
|
while (revertibles.length > 0) {
|
|
@@ -399,19 +423,25 @@ export function revertMergeTreeDeltaRevertibles(
|
|
|
399
423
|
const r = revertibles.pop()!;
|
|
400
424
|
const operation = r.operation;
|
|
401
425
|
if (r.trackingGroup.size > 0) {
|
|
402
|
-
|
|
426
|
+
// TODO Non null asserting, why is this not null?
|
|
427
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
428
|
+
mergeTreeWithRevert ??= findMergeTreeWithRevert(r.trackingGroup.tracked[0]!);
|
|
403
429
|
switch (operation) {
|
|
404
|
-
case MergeTreeDeltaType.INSERT:
|
|
430
|
+
case MergeTreeDeltaType.INSERT: {
|
|
405
431
|
revertLocalInsert(driver, mergeTreeWithRevert, r);
|
|
406
432
|
break;
|
|
407
|
-
|
|
433
|
+
}
|
|
434
|
+
case MergeTreeDeltaType.REMOVE: {
|
|
408
435
|
revertLocalRemove(driver, mergeTreeWithRevert, r);
|
|
409
436
|
break;
|
|
410
|
-
|
|
437
|
+
}
|
|
438
|
+
case MergeTreeDeltaType.ANNOTATE: {
|
|
411
439
|
revertLocalAnnotate(driver, mergeTreeWithRevert, r);
|
|
412
440
|
break;
|
|
413
|
-
|
|
441
|
+
}
|
|
442
|
+
default: {
|
|
414
443
|
unreachableCase(operation);
|
|
444
|
+
}
|
|
415
445
|
}
|
|
416
446
|
}
|
|
417
447
|
}
|
|
@@ -20,16 +20,16 @@ export class SegmentGroupCollection {
|
|
|
20
20
|
this.segmentGroups = new DoublyLinkedList<SegmentGroup>();
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
public get size() {
|
|
23
|
+
public get size(): number {
|
|
24
24
|
return this.segmentGroups.length;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
public get empty() {
|
|
27
|
+
public get empty(): boolean {
|
|
28
28
|
return this.segmentGroups.empty;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// eslint-disable-next-line import/no-deprecated
|
|
32
|
-
public enqueue(segmentGroup: SegmentGroup) {
|
|
32
|
+
public enqueue(segmentGroup: SegmentGroup): void {
|
|
33
33
|
this.segmentGroups.push(segmentGroup);
|
|
34
34
|
segmentGroup.segments.push(this.segment);
|
|
35
35
|
}
|
|
@@ -54,20 +54,22 @@ export class SegmentGroupCollection {
|
|
|
54
54
|
return this.segmentGroups.pop ? this.segmentGroups.pop()?.data : undefined;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
public copyTo(segment: ISegment) {
|
|
57
|
+
public copyTo(segment: ISegment): void {
|
|
58
58
|
walkList(this.segmentGroups, (sg) =>
|
|
59
59
|
segment.segmentGroups.enqueueOnCopy(sg.data, this.segment),
|
|
60
60
|
);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
// eslint-disable-next-line import/no-deprecated
|
|
64
|
-
private enqueueOnCopy(segmentGroup: SegmentGroup, sourceSegment: ISegment) {
|
|
64
|
+
private enqueueOnCopy(segmentGroup: SegmentGroup, sourceSegment: ISegment): void {
|
|
65
65
|
this.enqueue(segmentGroup);
|
|
66
66
|
if (segmentGroup.previousProps) {
|
|
67
67
|
// duplicate the previousProps for this segment
|
|
68
68
|
const index = segmentGroup.segments.indexOf(sourceSegment);
|
|
69
69
|
if (index !== -1) {
|
|
70
|
-
|
|
70
|
+
// TODO Non null asserting, why is this not null?
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
72
|
+
segmentGroup.previousProps.push(segmentGroup.previousProps[index]!);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
}
|
|
@@ -9,7 +9,6 @@ import { assert } from "@fluidframework/core-utils/internal";
|
|
|
9
9
|
|
|
10
10
|
import { UnassignedSequenceNumber, UniversalSequenceNumber } from "./constants.js";
|
|
11
11
|
import { IMergeTreeAnnotateMsg } from "./ops.js";
|
|
12
|
-
// eslint-disable-next-line import/no-deprecated
|
|
13
12
|
import { MapLike, PropertySet, createMap } from "./properties.js";
|
|
14
13
|
|
|
15
14
|
/**
|
|
@@ -17,10 +16,14 @@ import { MapLike, PropertySet, createMap } from "./properties.js";
|
|
|
17
16
|
* @alpha
|
|
18
17
|
*/
|
|
19
18
|
export enum PropertiesRollback {
|
|
20
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Not in a rollback
|
|
21
|
+
*/
|
|
21
22
|
None,
|
|
22
23
|
|
|
23
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Rollback
|
|
26
|
+
*/
|
|
24
27
|
Rollback,
|
|
25
28
|
}
|
|
26
29
|
|
|
@@ -31,23 +34,22 @@ export enum PropertiesRollback {
|
|
|
31
34
|
export class PropertiesManager {
|
|
32
35
|
private pendingKeyUpdateCount: MapLike<number> | undefined;
|
|
33
36
|
|
|
34
|
-
public ackPendingProperties(annotateOp: IMergeTreeAnnotateMsg) {
|
|
37
|
+
public ackPendingProperties(annotateOp: IMergeTreeAnnotateMsg): void {
|
|
35
38
|
this.decrementPendingCounts(annotateOp.props);
|
|
36
39
|
}
|
|
37
40
|
|
|
38
|
-
private decrementPendingCounts(props: PropertySet) {
|
|
41
|
+
private decrementPendingCounts(props: PropertySet): void {
|
|
39
42
|
for (const [key, value] of Object.entries(props)) {
|
|
40
|
-
if (value !== undefined) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
43
|
+
if (value !== undefined && this.pendingKeyUpdateCount?.[key] !== undefined) {
|
|
44
|
+
assert(
|
|
45
|
+
// TODO Non null asserting, why is this not null?
|
|
46
|
+
this.pendingKeyUpdateCount[key]! > 0,
|
|
47
|
+
0x05c /* "Trying to update more annotate props than do exist!" */,
|
|
48
|
+
);
|
|
49
|
+
this.pendingKeyUpdateCount[key]--;
|
|
50
|
+
if (this.pendingKeyUpdateCount?.[key] === 0) {
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
52
|
+
delete this.pendingKeyUpdateCount[key];
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
}
|
|
@@ -60,7 +62,6 @@ export class PropertiesManager {
|
|
|
60
62
|
collaborating: boolean = false,
|
|
61
63
|
rollback: PropertiesRollback = PropertiesRollback.None,
|
|
62
64
|
): PropertySet {
|
|
63
|
-
// eslint-disable-next-line import/no-deprecated
|
|
64
65
|
this.pendingKeyUpdateCount ??= createMap<number>();
|
|
65
66
|
|
|
66
67
|
// Clean up counts for rolled back edits before modifying oldProps
|
|
@@ -97,13 +98,15 @@ export class PropertiesManager {
|
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
|
|
100
|
-
const previousValue:
|
|
101
|
+
const previousValue: unknown = oldProps[key];
|
|
101
102
|
// The delta should be null if undefined, as that's how we encode delete
|
|
103
|
+
// eslint-disable-next-line unicorn/no-null
|
|
102
104
|
deltas[key] = previousValue === undefined ? null : previousValue;
|
|
103
105
|
if (newValue === null) {
|
|
104
106
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
105
107
|
delete oldProps[key];
|
|
106
108
|
} else {
|
|
109
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
107
110
|
oldProps[key] = newValue;
|
|
108
111
|
}
|
|
109
112
|
}
|
|
@@ -117,27 +120,28 @@ export class PropertiesManager {
|
|
|
117
120
|
newManager: PropertiesManager,
|
|
118
121
|
): PropertySet | undefined {
|
|
119
122
|
if (oldProps) {
|
|
120
|
-
// eslint-disable-next-line no-param-reassign
|
|
121
|
-
newProps ??= createMap<
|
|
123
|
+
// eslint-disable-next-line no-param-reassign
|
|
124
|
+
newProps ??= createMap<unknown>();
|
|
122
125
|
if (!newManager) {
|
|
123
126
|
throw new Error("Must provide new PropertyManager");
|
|
124
127
|
}
|
|
125
128
|
for (const key of Object.keys(oldProps)) {
|
|
129
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
126
130
|
newProps[key] = oldProps[key];
|
|
127
131
|
}
|
|
128
|
-
// eslint-disable-next-line import/no-deprecated
|
|
129
132
|
newManager.pendingKeyUpdateCount = createMap<number>();
|
|
130
133
|
for (const key of Object.keys(this.pendingKeyUpdateCount!)) {
|
|
131
|
-
|
|
134
|
+
// TODO Non null asserting, why is this not null?
|
|
135
|
+
newManager.pendingKeyUpdateCount[key] = this.pendingKeyUpdateCount![key]!;
|
|
132
136
|
}
|
|
133
137
|
}
|
|
134
138
|
return newProps;
|
|
135
139
|
}
|
|
136
140
|
|
|
137
141
|
/**
|
|
138
|
-
*
|
|
142
|
+
* Determines if all of the defined properties in a given property set are pending.
|
|
139
143
|
*/
|
|
140
|
-
public hasPendingProperties(props: PropertySet) {
|
|
144
|
+
public hasPendingProperties(props: PropertySet): boolean {
|
|
141
145
|
for (const [key, value] of Object.entries(props)) {
|
|
142
146
|
if (value !== undefined && this.pendingKeyUpdateCount?.[key] === undefined) {
|
|
143
147
|
return false;
|