@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
|
@@ -129,28 +129,31 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
129
129
|
) {}
|
|
130
130
|
|
|
131
131
|
private makeNode(key: TKey, data: TData, color: RBColor, size: number): RBNode<TKey, TData> {
|
|
132
|
-
return { key, data, color, size } as
|
|
132
|
+
return { key, data, color, size } as unknown as RBNode<TKey, TData>;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
private isRed(node: RBNode<TKey, TData> | undefined) {
|
|
135
|
+
private isRed(node: RBNode<TKey, TData> | undefined): boolean {
|
|
136
136
|
return !!node && node.color === RBColor.RED;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
private nodeSize(node: RBNode<TKey, TData> | undefined) {
|
|
139
|
+
private nodeSize(node: RBNode<TKey, TData> | undefined): number {
|
|
140
140
|
return node ? node.size : 0;
|
|
141
141
|
}
|
|
142
|
-
public size() {
|
|
142
|
+
public size(): number {
|
|
143
143
|
return this.nodeSize(this.root);
|
|
144
144
|
}
|
|
145
|
-
public isEmpty() {
|
|
145
|
+
public isEmpty(): boolean {
|
|
146
146
|
return !this.root;
|
|
147
147
|
}
|
|
148
|
-
public get(key: TKey) {
|
|
148
|
+
public get(key: TKey): RBNode<TKey, TData> | undefined {
|
|
149
149
|
if (key !== undefined) {
|
|
150
150
|
return this.nodeGet(this.root, key);
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
|
-
private nodeGet(
|
|
153
|
+
private nodeGet(
|
|
154
|
+
node: RBNode<TKey, TData> | undefined,
|
|
155
|
+
key: TKey,
|
|
156
|
+
): RBNode<TKey, TData> | undefined {
|
|
154
157
|
let _node = node;
|
|
155
158
|
while (_node) {
|
|
156
159
|
const cmp = this.compareKeys(key, _node.key);
|
|
@@ -163,11 +166,11 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
163
166
|
}
|
|
164
167
|
}
|
|
165
168
|
}
|
|
166
|
-
private contains(key: TKey) {
|
|
169
|
+
private contains(key: TKey): RBNode<TKey, TData> | undefined {
|
|
167
170
|
return this.get(key);
|
|
168
171
|
}
|
|
169
172
|
|
|
170
|
-
public gather(key: TKey, matcher: IRBMatcher<TKey, TData>) {
|
|
173
|
+
public gather(key: TKey, matcher: IRBMatcher<TKey, TData>): RBNode<TKey, TData>[] {
|
|
171
174
|
const results = [] as RBNode<TKey, TData>[];
|
|
172
175
|
if (key !== undefined) {
|
|
173
176
|
this.nodeGather(this.root, results, key, matcher);
|
|
@@ -180,7 +183,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
180
183
|
results: RBNode<TKey, TData>[],
|
|
181
184
|
key: TKey,
|
|
182
185
|
matcher: IRBMatcher<TKey, TData>,
|
|
183
|
-
) {
|
|
186
|
+
): void {
|
|
184
187
|
if (node) {
|
|
185
188
|
if (matcher.continueSubtree(node.left, key)) {
|
|
186
189
|
this.nodeGather(node.left, results, key, matcher);
|
|
@@ -199,7 +202,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
199
202
|
actionFn: (node: RBNode<TKey, TData>) => void,
|
|
200
203
|
continueLeftFn: (number: number) => boolean,
|
|
201
204
|
continueRightFn: (number: number) => boolean,
|
|
202
|
-
) {
|
|
205
|
+
): void {
|
|
203
206
|
this.nodeWalkExactMatchesForward(
|
|
204
207
|
this.root,
|
|
205
208
|
compareFn,
|
|
@@ -215,7 +218,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
215
218
|
actionFn: (node: RBNode<TKey, TData>) => void,
|
|
216
219
|
continueLeftFn: (number: number) => boolean,
|
|
217
220
|
continueRightFn: (number: number) => boolean,
|
|
218
|
-
) {
|
|
221
|
+
): void {
|
|
219
222
|
if (!node) {
|
|
220
223
|
return;
|
|
221
224
|
}
|
|
@@ -248,7 +251,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
248
251
|
actionFn: (node: RBNode<TKey, TData>) => void,
|
|
249
252
|
continueLeftFn: (number: number) => boolean,
|
|
250
253
|
continueRightFn: (number: number) => boolean,
|
|
251
|
-
) {
|
|
254
|
+
): void {
|
|
252
255
|
this.nodeWalkExactMatchesBackward(
|
|
253
256
|
this.root,
|
|
254
257
|
compareFn,
|
|
@@ -264,7 +267,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
264
267
|
actionFn: (node: RBNode<TKey, TData>) => void,
|
|
265
268
|
continueLeftFn: (cmp: number) => boolean,
|
|
266
269
|
continueRightFn: (cmp: number) => boolean,
|
|
267
|
-
) {
|
|
270
|
+
): void {
|
|
268
271
|
if (!node) {
|
|
269
272
|
return;
|
|
270
273
|
}
|
|
@@ -292,7 +295,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
292
295
|
}
|
|
293
296
|
}
|
|
294
297
|
|
|
295
|
-
public put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>) {
|
|
298
|
+
public put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>): void {
|
|
296
299
|
if (key !== undefined) {
|
|
297
300
|
if (data === undefined) {
|
|
298
301
|
this.remove(key);
|
|
@@ -308,11 +311,9 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
308
311
|
key: TKey,
|
|
309
312
|
data: TData,
|
|
310
313
|
conflict?: ConflictAction<TKey, TData>,
|
|
311
|
-
) {
|
|
314
|
+
): RBNode<TKey, TData> {
|
|
312
315
|
let _node = node;
|
|
313
|
-
if (
|
|
314
|
-
return this.makeNode(key, data, RBColor.RED, 1);
|
|
315
|
-
} else {
|
|
316
|
+
if (_node) {
|
|
316
317
|
const cmp = this.compareKeys(key, _node.key);
|
|
317
318
|
if (cmp < 0) {
|
|
318
319
|
_node.left = this.nodePut(_node.left, key, data, conflict);
|
|
@@ -324,7 +325,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
324
325
|
if (kd.key) {
|
|
325
326
|
_node.key = kd.key;
|
|
326
327
|
}
|
|
327
|
-
_node.data = kd.data
|
|
328
|
+
_node.data = kd.data ?? data;
|
|
328
329
|
} else {
|
|
329
330
|
_node.data = data;
|
|
330
331
|
}
|
|
@@ -344,10 +345,12 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
344
345
|
this.updateLocal(_node);
|
|
345
346
|
}
|
|
346
347
|
return _node;
|
|
348
|
+
} else {
|
|
349
|
+
return this.makeNode(key, data, RBColor.RED, 1);
|
|
347
350
|
}
|
|
348
351
|
}
|
|
349
352
|
|
|
350
|
-
private updateLocal(node: RBNode<TKey, TData>) {
|
|
353
|
+
private updateLocal(node: RBNode<TKey, TData>): void {
|
|
351
354
|
if (this.aug) {
|
|
352
355
|
if (this.isRed(node.left)) {
|
|
353
356
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -361,7 +364,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
361
364
|
}
|
|
362
365
|
}
|
|
363
366
|
|
|
364
|
-
private nodeRemoveMin(node: RBNode<TKey, TData>) {
|
|
367
|
+
private nodeRemoveMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> | undefined {
|
|
365
368
|
let _node = node;
|
|
366
369
|
if (_node.left) {
|
|
367
370
|
if (!this.isRed(_node.left) && !this.isRed(_node.left.left)) {
|
|
@@ -374,7 +377,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
374
377
|
}
|
|
375
378
|
}
|
|
376
379
|
|
|
377
|
-
public remove(key: TKey) {
|
|
380
|
+
public remove(key: TKey): void {
|
|
378
381
|
if (key !== undefined) {
|
|
379
382
|
if (!this.contains(key)) {
|
|
380
383
|
return;
|
|
@@ -385,7 +388,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
385
388
|
// TODO: error on undefined key
|
|
386
389
|
}
|
|
387
390
|
|
|
388
|
-
public removeExisting(key: TKey) {
|
|
391
|
+
public removeExisting(key: TKey): void {
|
|
389
392
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
390
393
|
if (!this.isRed(this.root!.left) && !this.isRed(this.root!.right)) {
|
|
391
394
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -396,7 +399,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
396
399
|
this.root = this.nodeRemove(this.root!, key);
|
|
397
400
|
}
|
|
398
401
|
|
|
399
|
-
private nodeRemove(node: RBNode<TKey, TData>, key: TKey) {
|
|
402
|
+
private nodeRemove(node: RBNode<TKey, TData>, key: TKey): RBNode<TKey, TData> | undefined {
|
|
400
403
|
let _node = node;
|
|
401
404
|
if (this.compareKeys(key, _node.key) < 0) {
|
|
402
405
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -432,9 +435,9 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
432
435
|
}
|
|
433
436
|
|
|
434
437
|
/**
|
|
435
|
-
*
|
|
438
|
+
* Finds the largest node that is less than or equal to a given key.
|
|
436
439
|
*/
|
|
437
|
-
public floor(key: TKey) {
|
|
440
|
+
public floor(key: TKey): RBNode<TKey, TData> | undefined {
|
|
438
441
|
if (!this.isEmpty()) {
|
|
439
442
|
return this.nodeFloor(this.root, key);
|
|
440
443
|
}
|
|
@@ -452,15 +455,15 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
452
455
|
return this.nodeFloor(node.left, key);
|
|
453
456
|
} else {
|
|
454
457
|
const rightFloor = this.nodeFloor(node.right, key);
|
|
455
|
-
return rightFloor
|
|
458
|
+
return rightFloor ?? node;
|
|
456
459
|
}
|
|
457
460
|
}
|
|
458
461
|
}
|
|
459
462
|
|
|
460
463
|
/**
|
|
461
|
-
*
|
|
464
|
+
* Finds the smallest node that is greater than or equal to a given key.
|
|
462
465
|
*/
|
|
463
|
-
public ceil(key: TKey) {
|
|
466
|
+
public ceil(key: TKey): RBNode<TKey, TData> | undefined {
|
|
464
467
|
if (!this.isEmpty()) {
|
|
465
468
|
return this.nodeCeil(this.root, key);
|
|
466
469
|
}
|
|
@@ -478,32 +481,32 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
478
481
|
return this.nodeCeil(node.right, key);
|
|
479
482
|
} else {
|
|
480
483
|
const leftCeil = this.nodeCeil(node.left, key);
|
|
481
|
-
return leftCeil
|
|
484
|
+
return leftCeil ?? node;
|
|
482
485
|
}
|
|
483
486
|
}
|
|
484
487
|
}
|
|
485
488
|
|
|
486
|
-
public min() {
|
|
489
|
+
public min(): RBNode<TKey, TData> | undefined {
|
|
487
490
|
if (this.root) {
|
|
488
491
|
return this.nodeMin(this.root);
|
|
489
492
|
}
|
|
490
493
|
}
|
|
491
494
|
|
|
492
495
|
private nodeMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
|
|
493
|
-
return
|
|
496
|
+
return node.left ? this.nodeMin(node.left) : node;
|
|
494
497
|
}
|
|
495
498
|
|
|
496
|
-
public max() {
|
|
499
|
+
public max(): RBNode<TKey, TData> | undefined {
|
|
497
500
|
if (this.root) {
|
|
498
501
|
return this.nodeMax(this.root);
|
|
499
502
|
}
|
|
500
503
|
}
|
|
501
504
|
|
|
502
505
|
private nodeMax(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
|
|
503
|
-
return
|
|
506
|
+
return node.right ? this.nodeMax(node.right) : node;
|
|
504
507
|
}
|
|
505
508
|
|
|
506
|
-
private rotateRight(node: RBNode<TKey, TData>) {
|
|
509
|
+
private rotateRight(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
|
|
507
510
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
508
511
|
const leftChild = node.left!;
|
|
509
512
|
node.left = leftChild.right;
|
|
@@ -519,7 +522,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
519
522
|
return leftChild;
|
|
520
523
|
}
|
|
521
524
|
|
|
522
|
-
private rotateLeft(node: RBNode<TKey, TData>) {
|
|
525
|
+
private rotateLeft(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
|
|
523
526
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
524
527
|
const rightChild = node.right!;
|
|
525
528
|
node.right = rightChild.left;
|
|
@@ -535,11 +538,11 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
535
538
|
return rightChild;
|
|
536
539
|
}
|
|
537
540
|
|
|
538
|
-
private oppositeColor(c: RBColor) {
|
|
541
|
+
private oppositeColor(c: RBColor): RBColor {
|
|
539
542
|
return c === RBColor.BLACK ? RBColor.RED : RBColor.BLACK;
|
|
540
543
|
}
|
|
541
544
|
|
|
542
|
-
private flipColors(node: RBNode<TKey, TData>) {
|
|
545
|
+
private flipColors(node: RBNode<TKey, TData>): void {
|
|
543
546
|
node.color = this.oppositeColor(node.color);
|
|
544
547
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
545
548
|
node.left!.color = this.oppositeColor(node.left!.color);
|
|
@@ -547,7 +550,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
547
550
|
node.right!.color = this.oppositeColor(node.right!.color);
|
|
548
551
|
}
|
|
549
552
|
|
|
550
|
-
private moveRedLeft(node: RBNode<TKey, TData>) {
|
|
553
|
+
private moveRedLeft(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
|
|
551
554
|
let _node = node;
|
|
552
555
|
this.flipColors(_node);
|
|
553
556
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -560,7 +563,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
560
563
|
return _node;
|
|
561
564
|
}
|
|
562
565
|
|
|
563
|
-
private moveRedRight(node: RBNode<TKey, TData>) {
|
|
566
|
+
private moveRedRight(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
|
|
564
567
|
let _node = node;
|
|
565
568
|
this.flipColors(_node);
|
|
566
569
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -571,7 +574,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
571
574
|
return _node;
|
|
572
575
|
}
|
|
573
576
|
|
|
574
|
-
private balance(input: RBNode<TKey, TData>) {
|
|
577
|
+
private balance(input: RBNode<TKey, TData>): RBNode<TKey, TData> {
|
|
575
578
|
let node: RBNode<TKey, TData> | undefined = input;
|
|
576
579
|
if (this.isRed(node.right)) {
|
|
577
580
|
node = this.rotateLeft(node);
|
|
@@ -595,16 +598,16 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
595
598
|
accum?: TAccum,
|
|
596
599
|
start?: TKey,
|
|
597
600
|
end?: TKey,
|
|
598
|
-
) {
|
|
601
|
+
): void {
|
|
599
602
|
this.nodeMap(this.root, action, accum, start, end);
|
|
600
603
|
}
|
|
601
604
|
|
|
602
|
-
public map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {
|
|
605
|
+
public map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum): void {
|
|
603
606
|
// TODO: optimize to avoid comparisons
|
|
604
607
|
this.nodeMap(this.root, action, accum);
|
|
605
608
|
}
|
|
606
609
|
|
|
607
|
-
public keys() {
|
|
610
|
+
public keys(): TKey[] {
|
|
608
611
|
const keyList: TKey[] = [];
|
|
609
612
|
const actions: RBNodeActions<TKey, TData> = {
|
|
610
613
|
showStructure: true,
|
|
@@ -622,11 +625,11 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
622
625
|
* false, traversal is halted.
|
|
623
626
|
* @param action - action to apply to each node
|
|
624
627
|
*/
|
|
625
|
-
public walk(actions: RBNodeActions<TKey, TData>) {
|
|
628
|
+
public walk(actions: RBNodeActions<TKey, TData>): void {
|
|
626
629
|
this.nodeWalk(this.root, actions);
|
|
627
630
|
}
|
|
628
631
|
|
|
629
|
-
public walkBackward(actions: RBNodeActions<TKey, TData>) {
|
|
632
|
+
public walkBackward(actions: RBNodeActions<TKey, TData>): void {
|
|
630
633
|
this.nodeWalkBackward(this.root, actions);
|
|
631
634
|
}
|
|
632
635
|
|
|
@@ -636,26 +639,20 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
636
639
|
): boolean {
|
|
637
640
|
let go = true;
|
|
638
641
|
if (node) {
|
|
639
|
-
if (actions.pre) {
|
|
640
|
-
|
|
641
|
-
go = actions.pre(node);
|
|
642
|
-
}
|
|
642
|
+
if (actions.pre && (!!actions.showStructure || node.color === RBColor.BLACK)) {
|
|
643
|
+
go = actions.pre(node);
|
|
643
644
|
}
|
|
644
645
|
if (node.left) {
|
|
645
646
|
go = this.nodeWalk(node.left, actions);
|
|
646
647
|
}
|
|
647
|
-
if (go && actions.infix) {
|
|
648
|
-
|
|
649
|
-
go = actions.infix(node);
|
|
650
|
-
}
|
|
648
|
+
if (go && actions.infix && (!!actions.showStructure || node.color === RBColor.BLACK)) {
|
|
649
|
+
go = actions.infix(node);
|
|
651
650
|
}
|
|
652
651
|
if (go) {
|
|
653
652
|
go = this.nodeWalk(node.right, actions);
|
|
654
653
|
}
|
|
655
|
-
if (go && actions.post) {
|
|
656
|
-
|
|
657
|
-
go = actions.post(node);
|
|
658
|
-
}
|
|
654
|
+
if (go && actions.post && (!!actions.showStructure || node.color === RBColor.BLACK)) {
|
|
655
|
+
go = actions.post(node);
|
|
659
656
|
}
|
|
660
657
|
}
|
|
661
658
|
return go;
|
|
@@ -667,26 +664,20 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
|
|
|
667
664
|
): boolean {
|
|
668
665
|
let go = true;
|
|
669
666
|
if (node) {
|
|
670
|
-
if (actions.pre) {
|
|
671
|
-
|
|
672
|
-
go = actions.pre(node);
|
|
673
|
-
}
|
|
667
|
+
if (actions.pre && (!!actions.showStructure || node.color === RBColor.BLACK)) {
|
|
668
|
+
go = actions.pre(node);
|
|
674
669
|
}
|
|
675
670
|
if (node.right) {
|
|
676
671
|
go = this.nodeWalkBackward(node.right, actions);
|
|
677
672
|
}
|
|
678
|
-
if (go && actions.infix) {
|
|
679
|
-
|
|
680
|
-
go = actions.infix(node);
|
|
681
|
-
}
|
|
673
|
+
if (go && actions.infix && (!!actions.showStructure || node.color === RBColor.BLACK)) {
|
|
674
|
+
go = actions.infix(node);
|
|
682
675
|
}
|
|
683
676
|
if (go) {
|
|
684
677
|
go = this.nodeWalkBackward(node.left, actions);
|
|
685
678
|
}
|
|
686
|
-
if (go && actions.post) {
|
|
687
|
-
|
|
688
|
-
go = actions.post(node);
|
|
689
|
-
}
|
|
679
|
+
if (go && actions.post && (!!actions.showStructure || node.color === RBColor.BLACK)) {
|
|
680
|
+
go = actions.post(node);
|
|
690
681
|
}
|
|
691
682
|
}
|
|
692
683
|
return go;
|
package/src/endOfTreeSegment.ts
CHANGED
|
@@ -61,11 +61,11 @@ abstract class BaseEndpointSegment {
|
|
|
61
61
|
depth: number;
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
get parent() {
|
|
64
|
+
get parent(): MergeBlock {
|
|
65
65
|
return this.endpointSegmentProps().parent;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
get index() {
|
|
68
|
+
get index(): number {
|
|
69
69
|
return this.endpointSegmentProps().index;
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -77,10 +77,10 @@ abstract class BaseEndpointSegment {
|
|
|
77
77
|
* since this segment isn't real, throw on any segment
|
|
78
78
|
* operation that isn't expected
|
|
79
79
|
*/
|
|
80
|
-
get segmentGroups() {
|
|
80
|
+
get segmentGroups(): never {
|
|
81
81
|
return notSupported();
|
|
82
82
|
}
|
|
83
|
-
get trackingCollection() {
|
|
83
|
+
get trackingCollection(): never {
|
|
84
84
|
return notSupported();
|
|
85
85
|
}
|
|
86
86
|
addProperties = notSupported;
|
|
@@ -92,7 +92,7 @@ abstract class BaseEndpointSegment {
|
|
|
92
92
|
ack = notSupported;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
const notSupported = () => {
|
|
95
|
+
const notSupported = (): never => {
|
|
96
96
|
assert(false, 0x3ed /* operation not supported */);
|
|
97
97
|
};
|
|
98
98
|
|
|
@@ -107,7 +107,11 @@ export class StartOfTreeSegment extends BaseEndpointSegment implements ISegment,
|
|
|
107
107
|
* this segment pretends to be a sibling of the first real segment.
|
|
108
108
|
* so compute the necessary properties to pretend to be that segment.
|
|
109
109
|
*/
|
|
110
|
-
protected endpointSegmentProps() {
|
|
110
|
+
protected endpointSegmentProps(): {
|
|
111
|
+
parent: MergeBlock;
|
|
112
|
+
index: number;
|
|
113
|
+
depth: number;
|
|
114
|
+
} {
|
|
111
115
|
let firstSegment: ISegmentLeaf | undefined;
|
|
112
116
|
let depth = 1;
|
|
113
117
|
const root = this.mergeTree.root;
|
|
@@ -134,7 +138,10 @@ export class StartOfTreeSegment extends BaseEndpointSegment implements ISegment,
|
|
|
134
138
|
};
|
|
135
139
|
}
|
|
136
140
|
|
|
137
|
-
get ordinal() {
|
|
141
|
+
get ordinal(): string {
|
|
142
|
+
// Ordinals exist purely for lexicographical sort order and use a small set of valid bytes for each string character.
|
|
143
|
+
// The extra handling fromCodePoint has for things like surrogate pairs is therefore unnecessary.
|
|
144
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
|
138
145
|
return String.fromCharCode(0x00);
|
|
139
146
|
}
|
|
140
147
|
}
|
|
@@ -150,7 +157,11 @@ export class EndOfTreeSegment extends BaseEndpointSegment implements ISegment, I
|
|
|
150
157
|
* this segment pretends to be a sibling of the last real segment.
|
|
151
158
|
* so compute the necessary properties to pretend to be that segment.
|
|
152
159
|
*/
|
|
153
|
-
protected endpointSegmentProps() {
|
|
160
|
+
protected endpointSegmentProps(): {
|
|
161
|
+
parent: MergeBlock;
|
|
162
|
+
index: number;
|
|
163
|
+
depth: number;
|
|
164
|
+
} {
|
|
154
165
|
let lastSegment: ISegmentLeaf | undefined;
|
|
155
166
|
let depth = 1;
|
|
156
167
|
const root = this.mergeTree.root;
|
|
@@ -177,11 +188,11 @@ export class EndOfTreeSegment extends BaseEndpointSegment implements ISegment, I
|
|
|
177
188
|
};
|
|
178
189
|
}
|
|
179
190
|
|
|
180
|
-
get ordinal() {
|
|
191
|
+
get ordinal(): string {
|
|
181
192
|
// just compute an arbitrarily big ordinal
|
|
182
193
|
// we base it on the depth of the tree
|
|
183
194
|
// to ensure it is bigger than all ordinals in
|
|
184
195
|
// the tree, as each layer appends to the previous
|
|
185
|
-
return String.
|
|
196
|
+
return String.fromCodePoint(0xffff).repeat(this.endpointSegmentProps().depth);
|
|
186
197
|
}
|
|
187
198
|
}
|