@fluidframework/merge-tree 2.0.0-rc.2.0.1 → 2.0.0-rc.3.0.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/CHANGELOG.md +23 -0
- package/api-report/merge-tree.api.md +16 -4
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/attributionCollection.d.ts +1 -1
- package/dist/attributionCollection.d.ts.map +1 -1
- package/dist/attributionCollection.js +6 -6
- package/dist/attributionCollection.js.map +1 -1
- package/dist/attributionPolicy.d.ts +2 -2
- package/dist/attributionPolicy.d.ts.map +1 -1
- package/dist/attributionPolicy.js +5 -5
- package/dist/attributionPolicy.js.map +1 -1
- package/dist/client.d.ts +8 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +37 -48
- package/dist/client.js.map +1 -1
- package/dist/collections/list.js +3 -3
- package/dist/collections/list.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts +5 -5
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +2 -2
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +76 -0
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +7 -7
- package/dist/localReference.js.map +1 -1
- package/dist/mergeTree.d.ts +8 -8
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +44 -57
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeDeltaCallback.d.ts +1 -1
- package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/dist/mergeTreeDeltaCallback.js +4 -0
- package/dist/mergeTreeDeltaCallback.js.map +1 -1
- package/dist/mergeTreeNodeWalk.d.ts +3 -3
- package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
- package/dist/mergeTreeNodeWalk.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +37 -55
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +40 -19
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/opBuilder.d.ts +1 -1
- package/dist/opBuilder.d.ts.map +1 -1
- package/dist/opBuilder.js.map +1 -1
- package/dist/ordinal.js +2 -2
- package/dist/ordinal.js.map +1 -1
- package/dist/partialLengths.d.ts +6 -6
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +13 -13
- package/dist/partialLengths.js.map +1 -1
- package/dist/public.d.ts +12 -0
- package/dist/revertibles.d.ts +1 -1
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +15 -15
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +2 -2
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotChunks.d.ts +2 -2
- package/dist/snapshotChunks.d.ts.map +1 -1
- package/dist/snapshotChunks.js.map +1 -1
- package/dist/snapshotLoader.d.ts +2 -2
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +11 -11
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts +3 -3
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +10 -10
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts +4 -4
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +9 -10
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/PartialLengths.perf.spec.js +1 -1
- package/dist/test/PartialLengths.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js +1 -1
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/Snapshot.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.perf.spec.js +2 -2
- package/dist/test/attributionCollection.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.spec.js.map +1 -1
- package/dist/test/attributionPolicy.spec.js.map +1 -1
- package/dist/test/beastTest.spec.d.ts.map +1 -1
- package/dist/test/beastTest.spec.js +7 -7
- package/dist/test/beastTest.spec.js.map +1 -1
- 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.map +1 -1
- package/dist/test/client.applyMsg.spec.js +2 -2
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.d.ts +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.d.ts.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.d.ts.map +1 -1
- package/dist/test/client.attributionFarm.spec.js +1 -1
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.conflictFarm.spec.d.ts.map +1 -1
- package/dist/test/client.conflictFarm.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +1 -1
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +6 -6
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.localReferenceFarm.spec.js +2 -2
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
- package/dist/test/client.rebasePosition.spec.js.map +1 -1
- package/dist/test/client.reconnectFarm.spec.d.ts +1 -1
- package/dist/test/client.reconnectFarm.spec.d.ts.map +1 -1
- package/dist/test/client.reconnectFarm.spec.js +1 -1
- package/dist/test/client.reconnectFarm.spec.js.map +1 -1
- package/dist/test/client.replay.spec.js +4 -4
- package/dist/test/client.replay.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +2 -2
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +1 -1
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/client.walkSegments.spec.js.map +1 -1
- package/dist/test/collections.list.spec.js.map +1 -1
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +3 -3
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +1 -1
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +3 -3
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +2 -2
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.d.ts +2 -2
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +3 -3
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +2 -2
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.deltaCallback.spec.js +1 -1
- package/dist/test/obliterate.deltaCallback.spec.js.map +1 -1
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.reconnect.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/ordinal.spec.d.ts +4 -0
- package/dist/test/ordinal.spec.d.ts.map +1 -1
- package/dist/test/ordinal.spec.js +4 -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.map +1 -1
- package/dist/test/reconnectHelper.d.ts +1 -1
- package/dist/test/reconnectHelper.d.ts.map +1 -1
- package/dist/test/reconnectHelper.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/revertibleFarm.spec.js +1 -1
- 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 +1 -1
- package/dist/test/revertibles.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/snapshot.spec.js +1 -1
- package/dist/test/snapshot.spec.js.map +1 -1
- package/dist/test/snapshot.utils.d.ts +1 -1
- package/dist/test/snapshot.utils.d.ts.map +1 -1
- package/dist/test/snapshot.utils.js +3 -3
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/snapshotlegacy.spec.js +8 -8
- package/dist/test/snapshotlegacy.spec.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js +2 -2
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +5 -5
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +11 -11
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +10 -8
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testSerializer.d.ts.map +1 -1
- package/dist/test/testSerializer.js +2 -2
- package/dist/test/testSerializer.js.map +1 -1
- package/dist/test/testServer.d.ts +1 -1
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js +4 -4
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +5 -5
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +3 -3
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.d.ts +1 -1
- package/dist/test/text.d.ts.map +1 -1
- package/dist/test/text.js.map +1 -1
- 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 +2 -2
- package/dist/test/wordUnitTests.spec.js.map +1 -1
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js +2 -2
- package/dist/textSegment.js.map +1 -1
- package/dist/zamboni.d.ts +2 -2
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js.map +1 -1
- package/internal.d.ts +11 -0
- package/legacy.d.ts +11 -0
- package/lib/MergeTreeTextHelper.d.ts.map +1 -1
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/attributionCollection.d.ts +1 -1
- package/lib/attributionCollection.d.ts.map +1 -1
- package/lib/attributionCollection.js +1 -1
- package/lib/attributionCollection.js.map +1 -1
- package/lib/attributionPolicy.d.ts +2 -2
- package/lib/attributionPolicy.d.ts.map +1 -1
- package/lib/attributionPolicy.js +4 -4
- package/lib/attributionPolicy.js.map +1 -1
- package/lib/client.d.ts +8 -8
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +14 -25
- package/lib/client.js.map +1 -1
- package/lib/collections/list.js +1 -1
- package/lib/collections/list.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts +5 -5
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js +2 -2
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +76 -0
- package/lib/localReference.d.ts.map +1 -1
- package/lib/localReference.js +2 -2
- package/lib/localReference.js.map +1 -1
- package/lib/mergeTree.d.ts +8 -8
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +23 -36
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeDeltaCallback.d.ts +1 -1
- package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/lib/mergeTreeDeltaCallback.js +4 -0
- package/lib/mergeTreeDeltaCallback.js.map +1 -1
- package/lib/mergeTreeNodeWalk.d.ts +3 -3
- package/lib/mergeTreeNodeWalk.d.ts.map +1 -1
- package/lib/mergeTreeNodeWalk.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +37 -55
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +28 -8
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/opBuilder.d.ts +1 -1
- package/lib/opBuilder.d.ts.map +1 -1
- package/lib/opBuilder.js.map +1 -1
- package/lib/ordinal.js +1 -1
- package/lib/ordinal.js.map +1 -1
- package/lib/partialLengths.d.ts +6 -6
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +3 -3
- package/lib/partialLengths.js.map +1 -1
- package/lib/public.d.ts +12 -0
- package/lib/revertibles.d.ts +1 -1
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +4 -4
- package/lib/revertibles.js.map +1 -1
- package/lib/segmentPropertiesManager.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +1 -1
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotChunks.d.ts +2 -2
- package/lib/snapshotChunks.d.ts.map +1 -1
- package/lib/snapshotChunks.js.map +1 -1
- package/lib/snapshotLoader.d.ts +2 -2
- package/lib/snapshotLoader.d.ts.map +1 -1
- package/lib/snapshotLoader.js +2 -2
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.d.ts +3 -3
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js +5 -5
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts +4 -4
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js +3 -4
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/test/Insertion.perf.spec.js +1 -1
- package/lib/test/Insertion.perf.spec.js.map +1 -1
- package/lib/test/PartialLengths.perf.spec.js +2 -2
- package/lib/test/PartialLengths.perf.spec.js.map +1 -1
- package/lib/test/Removal.perf.spec.js +2 -2
- package/lib/test/Removal.perf.spec.js.map +1 -1
- package/lib/test/Snapshot.perf.spec.js +2 -2
- package/lib/test/Snapshot.perf.spec.js.map +1 -1
- package/lib/test/attributionCollection.perf.spec.js +4 -4
- package/lib/test/attributionCollection.perf.spec.js.map +1 -1
- package/lib/test/attributionCollection.spec.js.map +1 -1
- package/lib/test/attributionPolicy.spec.js.map +1 -1
- package/lib/test/beastTest.spec.d.ts.map +1 -1
- package/lib/test/beastTest.spec.js +8 -8
- package/lib/test/beastTest.spec.js.map +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.map +1 -1
- package/lib/test/client.applyMsg.spec.js +3 -3
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.d.ts +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.d.ts.map +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.js +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/lib/test/client.attributionFarm.spec.d.ts.map +1 -1
- package/lib/test/client.attributionFarm.spec.js +2 -2
- package/lib/test/client.attributionFarm.spec.js.map +1 -1
- package/lib/test/client.conflictFarm.spec.d.ts.map +1 -1
- package/lib/test/client.conflictFarm.spec.js +1 -1
- package/lib/test/client.conflictFarm.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +5 -5
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.localReferenceFarm.spec.js +2 -2
- package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
- package/lib/test/client.rebasePosition.spec.js.map +1 -1
- package/lib/test/client.reconnectFarm.spec.d.ts +1 -1
- package/lib/test/client.reconnectFarm.spec.d.ts.map +1 -1
- package/lib/test/client.reconnectFarm.spec.js +2 -2
- package/lib/test/client.reconnectFarm.spec.js.map +1 -1
- package/lib/test/client.replay.spec.js +3 -3
- package/lib/test/client.replay.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +1 -1
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/client.rollbackFarm.spec.js +1 -1
- package/lib/test/client.rollbackFarm.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +2 -2
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/client.walkSegments.spec.js.map +1 -1
- package/lib/test/collections.list.spec.js.map +1 -1
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +3 -3
- 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 +3 -3
- 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.map +1 -1
- package/lib/test/mergeTree.walk.spec.js +2 -2
- 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 +2 -2
- package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js +3 -3
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +1 -1
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.deltaCallback.spec.js +1 -1
- package/lib/test/obliterate.deltaCallback.spec.js.map +1 -1
- package/lib/test/obliterate.partialLength.spec.js.map +1 -1
- package/lib/test/obliterate.reconnect.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/ordinal.spec.d.ts +4 -0
- package/lib/test/ordinal.spec.d.ts.map +1 -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.map +1 -1
- package/lib/test/reconnectHelper.d.ts +1 -1
- package/lib/test/reconnectHelper.d.ts.map +1 -1
- package/lib/test/reconnectHelper.js +1 -1
- package/lib/test/reconnectHelper.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/revertibleFarm.spec.js +3 -3
- 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 +2 -2
- package/lib/test/revertibles.spec.js.map +1 -1
- package/lib/test/segmentGroupCollection.spec.js.map +1 -1
- package/lib/test/snapshot.spec.js +2 -2
- package/lib/test/snapshot.spec.js.map +1 -1
- package/lib/test/snapshot.utils.d.ts +1 -1
- package/lib/test/snapshot.utils.d.ts.map +1 -1
- package/lib/test/snapshot.utils.js +2 -2
- package/lib/test/snapshot.utils.js.map +1 -1
- package/lib/test/snapshotlegacy.spec.js +4 -4
- package/lib/test/snapshotlegacy.spec.js.map +1 -1
- package/lib/test/sortedSegmentSet.spec.js +2 -2
- package/lib/test/sortedSegmentSet.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +5 -5
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +7 -7
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.d.ts +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +9 -7
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testSerializer.d.ts.map +1 -1
- package/lib/test/testSerializer.js +1 -1
- package/lib/test/testSerializer.js.map +1 -1
- package/lib/test/testServer.d.ts +1 -1
- package/lib/test/testServer.d.ts.map +1 -1
- package/lib/test/testServer.js +2 -2
- package/lib/test/testServer.js.map +1 -1
- package/lib/test/testUtils.d.ts +5 -5
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js +3 -3
- package/lib/test/testUtils.js.map +1 -1
- package/lib/test/text.d.ts +1 -1
- package/lib/test/text.d.ts.map +1 -1
- package/lib/test/text.js.map +1 -1
- 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 +2 -2
- package/lib/test/wordUnitTests.spec.js.map +1 -1
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js +1 -1
- package/lib/textSegment.js.map +1 -1
- package/lib/zamboni.d.ts +2 -2
- package/lib/zamboni.d.ts.map +1 -1
- package/lib/zamboni.js.map +1 -1
- package/package.json +37 -58
- package/src/MergeTreeTextHelper.ts +1 -1
- package/src/attributionCollection.ts +4 -3
- package/src/attributionPolicy.ts +7 -6
- package/src/client.ts +32 -45
- package/src/collections/list.ts +1 -1
- package/src/endOfTreeSegment.ts +5 -4
- package/src/index.ts +5 -1
- package/src/localReference.ts +4 -3
- package/src/mergeTree.ts +66 -84
- package/src/mergeTreeDeltaCallback.ts +3 -1
- package/src/mergeTreeNodeWalk.ts +6 -6
- package/src/mergeTreeNodes.ts +59 -61
- package/src/opBuilder.ts +3 -3
- package/src/ordinal.ts +1 -1
- package/src/partialLengths.ts +11 -10
- package/src/revertibles.ts +6 -5
- package/src/segmentPropertiesManager.ts +3 -2
- package/src/snapshotChunks.ts +3 -2
- package/src/snapshotLoader.ts +10 -12
- package/src/snapshotV1.ts +15 -12
- package/src/snapshotlegacy.ts +8 -6
- package/src/textSegment.ts +2 -1
- package/src/zamboni.ts +7 -7
- package/api-extractor-cjs.json +0 -8
- package/dist/merge-tree-alpha.d.ts +0 -1558
- package/dist/merge-tree-beta.d.ts +0 -230
- package/dist/merge-tree-public.d.ts +0 -230
- package/dist/merge-tree-untrimmed.d.ts +0 -1894
- package/lib/merge-tree-alpha.d.ts +0 -1558
- package/lib/merge-tree-beta.d.ts +0 -230
- package/lib/merge-tree-public.d.ts +0 -230
- package/lib/merge-tree-untrimmed.d.ts +0 -1894
- package/lib/test/types/validateMergeTreePrevious.generated.d.ts +0 -2
- package/lib/test/types/validateMergeTreePrevious.generated.d.ts.map +0 -1
- package/lib/test/types/validateMergeTreePrevious.generated.js +0 -228
- package/lib/test/types/validateMergeTreePrevious.generated.js.map +0 -1
- /package/{dist → lib}/tsdoc-metadata.json +0 -0
package/src/mergeTree.ts
CHANGED
|
@@ -6,9 +6,12 @@
|
|
|
6
6
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
7
7
|
/* eslint-disable no-bitwise */
|
|
8
8
|
|
|
9
|
-
import { assert, Heap, IComparer } from "@fluidframework/core-utils";
|
|
10
|
-
import { DataProcessingError, UsageError } from "@fluidframework/telemetry-utils";
|
|
9
|
+
import { assert, Heap, IComparer } from "@fluidframework/core-utils/internal";
|
|
10
|
+
import { DataProcessingError, UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
11
|
+
|
|
11
12
|
import { IAttributionCollectionSerializer } from "./attributionCollection.js";
|
|
13
|
+
// eslint-disable-next-line import/no-deprecated
|
|
14
|
+
import { Client } from "./client.js";
|
|
12
15
|
import { DoublyLinkedList, ListNode } from "./collections/index.js";
|
|
13
16
|
import {
|
|
14
17
|
NonCollabClient,
|
|
@@ -16,69 +19,66 @@ import {
|
|
|
16
19
|
UnassignedSequenceNumber,
|
|
17
20
|
UniversalSequenceNumber,
|
|
18
21
|
} from "./constants.js";
|
|
22
|
+
import { EndOfTreeSegment, StartOfTreeSegment } from "./endOfTreeSegment.js";
|
|
19
23
|
import {
|
|
20
|
-
anyLocalReferencePosition,
|
|
21
|
-
filterLocalReferencePositions,
|
|
22
24
|
LocalReferenceCollection,
|
|
23
25
|
LocalReferencePosition,
|
|
24
26
|
SlidingPreference,
|
|
27
|
+
anyLocalReferencePosition,
|
|
28
|
+
filterLocalReferencePositions,
|
|
25
29
|
} from "./localReference.js";
|
|
30
|
+
import {
|
|
31
|
+
IMergeTreeDeltaOpArgs,
|
|
32
|
+
IMergeTreeSegmentDelta,
|
|
33
|
+
MergeTreeDeltaCallback,
|
|
34
|
+
MergeTreeMaintenanceCallback,
|
|
35
|
+
MergeTreeMaintenanceType,
|
|
36
|
+
} from "./mergeTreeDeltaCallback.js";
|
|
37
|
+
import {
|
|
38
|
+
NodeAction,
|
|
39
|
+
backwardExcursion,
|
|
40
|
+
depthFirstNodeWalk,
|
|
41
|
+
forwardExcursion,
|
|
42
|
+
walkAllChildSegments,
|
|
43
|
+
} from "./mergeTreeNodeWalk.js";
|
|
26
44
|
import {
|
|
27
45
|
BlockAction,
|
|
28
46
|
// eslint-disable-next-line import/no-deprecated
|
|
29
47
|
CollaborationWindow,
|
|
30
|
-
|
|
31
|
-
IMergeBlock,
|
|
32
|
-
ISegmentLeaf,
|
|
48
|
+
HierMergeBlock,
|
|
33
49
|
IMergeNode,
|
|
34
50
|
IMoveInfo,
|
|
35
|
-
InsertContext,
|
|
36
51
|
IRemovalInfo,
|
|
37
52
|
ISegment,
|
|
38
53
|
ISegmentAction,
|
|
39
54
|
ISegmentChanges,
|
|
55
|
+
ISegmentLeaf,
|
|
56
|
+
InsertContext,
|
|
40
57
|
Marker,
|
|
41
58
|
MaxNodesInBlock,
|
|
42
59
|
MergeBlock,
|
|
43
|
-
reservedMarkerIdKey,
|
|
44
60
|
// eslint-disable-next-line import/no-deprecated
|
|
45
61
|
SegmentGroup,
|
|
46
|
-
|
|
62
|
+
reservedMarkerIdKey,
|
|
47
63
|
seqLTE,
|
|
64
|
+
toMoveInfo,
|
|
48
65
|
toRemovalInfo,
|
|
49
66
|
} from "./mergeTreeNodes.js";
|
|
50
|
-
import {
|
|
51
|
-
IMergeTreeDeltaOpArgs,
|
|
52
|
-
IMergeTreeSegmentDelta,
|
|
53
|
-
MergeTreeDeltaCallback,
|
|
54
|
-
MergeTreeMaintenanceCallback,
|
|
55
|
-
MergeTreeMaintenanceType,
|
|
56
|
-
} from "./mergeTreeDeltaCallback.js";
|
|
67
|
+
import type { TrackingGroup } from "./mergeTreeTracking.js";
|
|
57
68
|
import { createAnnotateRangeOp, createInsertSegmentOp, createRemoveRangeOp } from "./opBuilder.js";
|
|
58
69
|
import { IMergeTreeDeltaOp, IRelativePosition, MergeTreeDeltaType, ReferenceType } from "./ops.js";
|
|
59
70
|
import { PartialSequenceLengths } from "./partialLengths.js";
|
|
60
71
|
// eslint-disable-next-line import/no-deprecated
|
|
61
|
-
import {
|
|
72
|
+
import { MapLike, PropertySet, createMap, extend, extendIfUndefined } from "./properties.js";
|
|
62
73
|
import {
|
|
63
|
-
refTypeIncludesFlag,
|
|
64
|
-
ReferencePosition,
|
|
65
74
|
DetachedReferencePosition,
|
|
75
|
+
ReferencePosition,
|
|
66
76
|
refGetTileLabels,
|
|
67
77
|
refHasTileLabel,
|
|
78
|
+
refTypeIncludesFlag,
|
|
68
79
|
} from "./referencePositions.js";
|
|
69
80
|
import { PropertiesRollback } from "./segmentPropertiesManager.js";
|
|
70
|
-
import {
|
|
71
|
-
backwardExcursion,
|
|
72
|
-
depthFirstNodeWalk,
|
|
73
|
-
forwardExcursion,
|
|
74
|
-
NodeAction,
|
|
75
|
-
walkAllChildSegments,
|
|
76
|
-
} from "./mergeTreeNodeWalk.js";
|
|
77
|
-
import type { TrackingGroup } from "./mergeTreeTracking.js";
|
|
78
81
|
import { zamboniSegments } from "./zamboni.js";
|
|
79
|
-
// eslint-disable-next-line import/no-deprecated
|
|
80
|
-
import { Client } from "./client.js";
|
|
81
|
-
import { EndOfTreeSegment, StartOfTreeSegment } from "./endOfTreeSegment.js";
|
|
82
82
|
|
|
83
83
|
function wasRemovedAfter(seg: ISegment, seq: number): boolean {
|
|
84
84
|
return (
|
|
@@ -154,23 +154,6 @@ function addTileIfNotPresent(tile: ReferencePosition, tiles: MapLike<ReferencePo
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
class HierMergeBlock extends MergeBlock implements IHierBlock {
|
|
158
|
-
public rightmostTiles: MapLike<ReferencePosition>;
|
|
159
|
-
public leftmostTiles: MapLike<ReferencePosition>;
|
|
160
|
-
|
|
161
|
-
constructor(childCount: number) {
|
|
162
|
-
super(childCount);
|
|
163
|
-
// eslint-disable-next-line import/no-deprecated
|
|
164
|
-
this.rightmostTiles = createMap<ReferencePosition>();
|
|
165
|
-
// eslint-disable-next-line import/no-deprecated
|
|
166
|
-
this.leftmostTiles = createMap<ReferencePosition>();
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
public hierBlock() {
|
|
170
|
-
return this;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
157
|
/**
|
|
175
158
|
* @alpha
|
|
176
159
|
*/
|
|
@@ -279,7 +262,7 @@ export interface LRUSegment {
|
|
|
279
262
|
maxSeq: number;
|
|
280
263
|
}
|
|
281
264
|
|
|
282
|
-
export interface IRootMergeBlock extends
|
|
265
|
+
export interface IRootMergeBlock extends MergeBlock {
|
|
283
266
|
mergeTree?: MergeTree;
|
|
284
267
|
}
|
|
285
268
|
|
|
@@ -422,7 +405,7 @@ export class MergeTree {
|
|
|
422
405
|
zamboniSegments: true,
|
|
423
406
|
};
|
|
424
407
|
|
|
425
|
-
private static readonly theUnfinishedNode = { childCount: -1 } as unknown as
|
|
408
|
+
private static readonly theUnfinishedNode = { childCount: -1 } as unknown as MergeBlock;
|
|
426
409
|
|
|
427
410
|
// eslint-disable-next-line import/no-deprecated
|
|
428
411
|
public readonly collabWindow = new CollaborationWindow();
|
|
@@ -575,7 +558,7 @@ export class MergeTree {
|
|
|
575
558
|
}
|
|
576
559
|
}
|
|
577
560
|
|
|
578
|
-
private addNode(block:
|
|
561
|
+
private addNode(block: MergeBlock, node: IMergeNode) {
|
|
579
562
|
const index = block.childCount++;
|
|
580
563
|
block.assignChild(node, index, false);
|
|
581
564
|
return index;
|
|
@@ -593,7 +576,7 @@ export class MergeTree {
|
|
|
593
576
|
// Starting with the leaf segments, recursively builds the B-Tree layer by layer from the bottom up.
|
|
594
577
|
const buildMergeBlock = (nodes: IMergeNode[]): IRootMergeBlock => {
|
|
595
578
|
const blockCount = Math.ceil(nodes.length / maxChildren); // Compute # blocks require for this level of B-Tree
|
|
596
|
-
const blocks:
|
|
579
|
+
const blocks: MergeBlock[] = new Array(blockCount); // Pre-alloc array to collect nodes
|
|
597
580
|
|
|
598
581
|
// For each block in this level of the B-Tree...
|
|
599
582
|
for (
|
|
@@ -676,7 +659,7 @@ export class MergeTree {
|
|
|
676
659
|
|
|
677
660
|
let totalOffset = 0;
|
|
678
661
|
let parent = node.parent;
|
|
679
|
-
let prevParent:
|
|
662
|
+
let prevParent: MergeBlock | undefined;
|
|
680
663
|
while (parent) {
|
|
681
664
|
const children = parent.children;
|
|
682
665
|
for (let childIndex = 0; childIndex < parent.childCount; childIndex++) {
|
|
@@ -927,7 +910,7 @@ export class MergeTree {
|
|
|
927
910
|
);
|
|
928
911
|
}
|
|
929
912
|
|
|
930
|
-
private blockLength(node:
|
|
913
|
+
private blockLength(node: MergeBlock, refSeq: number, clientId: number): number {
|
|
931
914
|
return this.collabWindow.collaborating && clientId !== this.collabWindow.clientId
|
|
932
915
|
? node.partialLengths!.getPartialLength(refSeq, clientId)
|
|
933
916
|
: node.cachedLength ?? 0;
|
|
@@ -1110,16 +1093,16 @@ export class MergeTree {
|
|
|
1110
1093
|
depthFirstNodeWalk(
|
|
1111
1094
|
segWithParent.parent,
|
|
1112
1095
|
segWithParent,
|
|
1113
|
-
(
|
|
1114
|
-
if (
|
|
1115
|
-
if (Marker.is(
|
|
1116
|
-
foundMarker =
|
|
1096
|
+
(node) => {
|
|
1097
|
+
if (node.isLeaf()) {
|
|
1098
|
+
if (Marker.is(node) && refHasTileLabel(node, markerLabel)) {
|
|
1099
|
+
foundMarker = node;
|
|
1117
1100
|
}
|
|
1118
1101
|
} else {
|
|
1119
|
-
|
|
1102
|
+
assert(node.hierBlock(), 0x90b /* must be hierBlock */);
|
|
1120
1103
|
const marker = forwards
|
|
1121
|
-
?
|
|
1122
|
-
:
|
|
1104
|
+
? node.leftmostTiles[markerLabel]
|
|
1105
|
+
: node.rightmostTiles[markerLabel];
|
|
1123
1106
|
if (marker !== undefined) {
|
|
1124
1107
|
assert(
|
|
1125
1108
|
marker.isLeaf() && Marker.is(marker),
|
|
@@ -1138,7 +1121,7 @@ export class MergeTree {
|
|
|
1138
1121
|
return foundMarker;
|
|
1139
1122
|
}
|
|
1140
1123
|
|
|
1141
|
-
private updateRoot(splitNode:
|
|
1124
|
+
private updateRoot(splitNode: MergeBlock | undefined) {
|
|
1142
1125
|
if (splitNode !== undefined) {
|
|
1143
1126
|
const newRoot = this.makeBlock(2);
|
|
1144
1127
|
newRoot.assignChild(this.root, 0, false);
|
|
@@ -1156,7 +1139,7 @@ export class MergeTree {
|
|
|
1156
1139
|
public ackPendingSegment(opArgs: IMergeTreeDeltaOpArgs) {
|
|
1157
1140
|
const seq = opArgs.sequencedMessage!.sequenceNumber;
|
|
1158
1141
|
const pendingSegmentGroup = this.pendingSegments.shift()?.data;
|
|
1159
|
-
const nodesToUpdate:
|
|
1142
|
+
const nodesToUpdate: MergeBlock[] = [];
|
|
1160
1143
|
let overwrite = false;
|
|
1161
1144
|
if (pendingSegmentGroup !== undefined) {
|
|
1162
1145
|
const deltaSegments: IMergeTreeSegmentDelta[] = [];
|
|
@@ -1401,7 +1384,7 @@ export class MergeTree {
|
|
|
1401
1384
|
localSeq: number | undefined,
|
|
1402
1385
|
newSegments: T[],
|
|
1403
1386
|
) {
|
|
1404
|
-
const continueFrom = (node:
|
|
1387
|
+
const continueFrom = (node: MergeBlock) => {
|
|
1405
1388
|
let siblingExists = false;
|
|
1406
1389
|
forwardExcursion(node, () => {
|
|
1407
1390
|
siblingExists = true;
|
|
@@ -1682,7 +1665,7 @@ export class MergeTree {
|
|
|
1682
1665
|
}
|
|
1683
1666
|
|
|
1684
1667
|
private insertingWalk(
|
|
1685
|
-
block:
|
|
1668
|
+
block: MergeBlock,
|
|
1686
1669
|
pos: number,
|
|
1687
1670
|
refSeq: number,
|
|
1688
1671
|
clientId: number,
|
|
@@ -1695,7 +1678,7 @@ export class MergeTree {
|
|
|
1695
1678
|
let childIndex: number;
|
|
1696
1679
|
let child: IMergeNode;
|
|
1697
1680
|
let newNode: IMergeNode | undefined;
|
|
1698
|
-
let fromSplit:
|
|
1681
|
+
let fromSplit: MergeBlock | undefined;
|
|
1699
1682
|
for (childIndex = 0; childIndex < block.childCount; childIndex++) {
|
|
1700
1683
|
child = children[childIndex];
|
|
1701
1684
|
// ensure we walk down the far edge of the tree, even if all sub-tree is eligible for zamboni
|
|
@@ -1801,7 +1784,7 @@ export class MergeTree {
|
|
|
1801
1784
|
}
|
|
1802
1785
|
}
|
|
1803
1786
|
|
|
1804
|
-
private split(node:
|
|
1787
|
+
private split(node: MergeBlock) {
|
|
1805
1788
|
const halfCount = MaxNodesInBlock / 2;
|
|
1806
1789
|
const newNode = this.makeBlock(halfCount);
|
|
1807
1790
|
node.childCount = halfCount;
|
|
@@ -1816,7 +1799,7 @@ export class MergeTree {
|
|
|
1816
1799
|
return newNode;
|
|
1817
1800
|
}
|
|
1818
1801
|
|
|
1819
|
-
public nodeUpdateOrdinals(block:
|
|
1802
|
+
public nodeUpdateOrdinals(block: MergeBlock) {
|
|
1820
1803
|
for (let i = 0; i < block.childCount; i++) {
|
|
1821
1804
|
const child = block.children[i];
|
|
1822
1805
|
block.setOrdinal(child, i);
|
|
@@ -1987,7 +1970,7 @@ export class MergeTree {
|
|
|
1987
1970
|
return true;
|
|
1988
1971
|
};
|
|
1989
1972
|
|
|
1990
|
-
const afterMarkMoved = (node:
|
|
1973
|
+
const afterMarkMoved = (node: MergeBlock, pos: number, _start: number, _end: number) => {
|
|
1991
1974
|
if (_overwrite) {
|
|
1992
1975
|
this.nodeUpdateLengthNewStructure(node);
|
|
1993
1976
|
} else {
|
|
@@ -2098,7 +2081,7 @@ export class MergeTree {
|
|
|
2098
2081
|
}
|
|
2099
2082
|
return true;
|
|
2100
2083
|
};
|
|
2101
|
-
const afterMarkRemoved = (node:
|
|
2084
|
+
const afterMarkRemoved = (node: MergeBlock, pos: number, _start: number, _end: number) => {
|
|
2102
2085
|
if (_overwrite) {
|
|
2103
2086
|
this.nodeUpdateLengthNewStructure(node);
|
|
2104
2087
|
} else {
|
|
@@ -2260,7 +2243,7 @@ export class MergeTree {
|
|
|
2260
2243
|
return segmentPosition;
|
|
2261
2244
|
}
|
|
2262
2245
|
|
|
2263
|
-
public nodeUpdateLengthNewStructure(node:
|
|
2246
|
+
public nodeUpdateLengthNewStructure(node: MergeBlock, recur = false) {
|
|
2264
2247
|
this.blockUpdate(node);
|
|
2265
2248
|
if (this.collabWindow.collaborating) {
|
|
2266
2249
|
this.localPartialsComputed = false;
|
|
@@ -2498,22 +2481,21 @@ export class MergeTree {
|
|
|
2498
2481
|
}
|
|
2499
2482
|
}
|
|
2500
2483
|
} else {
|
|
2501
|
-
|
|
2484
|
+
assert(node.hierBlock(), 0x90c /* must be hier block */);
|
|
2502
2485
|
// eslint-disable-next-line import/no-deprecated
|
|
2503
|
-
extend(rightmostTiles,
|
|
2486
|
+
extend(rightmostTiles, node.rightmostTiles);
|
|
2504
2487
|
// eslint-disable-next-line import/no-deprecated
|
|
2505
|
-
extendIfUndefined(leftmostTiles,
|
|
2488
|
+
extendIfUndefined(leftmostTiles, node.leftmostTiles);
|
|
2506
2489
|
}
|
|
2507
2490
|
}
|
|
2508
2491
|
|
|
2509
|
-
private blockUpdate(block:
|
|
2492
|
+
private blockUpdate(block: MergeBlock) {
|
|
2510
2493
|
let len: number | undefined;
|
|
2511
|
-
|
|
2512
|
-
if (hierBlock) {
|
|
2494
|
+
if (block.hierBlock()) {
|
|
2513
2495
|
// eslint-disable-next-line import/no-deprecated
|
|
2514
|
-
|
|
2496
|
+
block.rightmostTiles = createMap<Marker>();
|
|
2515
2497
|
// eslint-disable-next-line import/no-deprecated
|
|
2516
|
-
|
|
2498
|
+
block.leftmostTiles = createMap<Marker>();
|
|
2517
2499
|
}
|
|
2518
2500
|
for (let i = 0; i < block.childCount; i++) {
|
|
2519
2501
|
const child = block.children[i];
|
|
@@ -2522,8 +2504,8 @@ export class MergeTree {
|
|
|
2522
2504
|
len ??= 0;
|
|
2523
2505
|
len += nodeLength;
|
|
2524
2506
|
}
|
|
2525
|
-
if (hierBlock) {
|
|
2526
|
-
this.addNodeReferences(child,
|
|
2507
|
+
if (block.hierBlock()) {
|
|
2508
|
+
this.addNodeReferences(child, block.rightmostTiles, block.leftmostTiles);
|
|
2527
2509
|
}
|
|
2528
2510
|
}
|
|
2529
2511
|
|
|
@@ -2531,12 +2513,12 @@ export class MergeTree {
|
|
|
2531
2513
|
}
|
|
2532
2514
|
|
|
2533
2515
|
public blockUpdatePathLengths(
|
|
2534
|
-
startBlock:
|
|
2516
|
+
startBlock: MergeBlock | undefined,
|
|
2535
2517
|
seq: number,
|
|
2536
2518
|
clientId: number,
|
|
2537
2519
|
newStructure = false,
|
|
2538
2520
|
) {
|
|
2539
|
-
let block:
|
|
2521
|
+
let block: MergeBlock | undefined = startBlock;
|
|
2540
2522
|
while (block !== undefined) {
|
|
2541
2523
|
if (newStructure) {
|
|
2542
2524
|
this.nodeUpdateLengthNewStructure(block);
|
|
@@ -2547,7 +2529,7 @@ export class MergeTree {
|
|
|
2547
2529
|
}
|
|
2548
2530
|
}
|
|
2549
2531
|
|
|
2550
|
-
private blockUpdateLength(node:
|
|
2532
|
+
private blockUpdateLength(node: MergeBlock, seq: number, clientId: number) {
|
|
2551
2533
|
this.blockUpdate(node);
|
|
2552
2534
|
this.localPartialsComputed = false;
|
|
2553
2535
|
if (
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
+
|
|
5
6
|
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
7
|
+
|
|
8
|
+
import { ISegment } from "./mergeTreeNodes.js";
|
|
6
9
|
// eslint-disable-next-line import/no-deprecated
|
|
7
10
|
import { IMergeTreeGroupMsg, IMergeTreeOp, MergeTreeDeltaType } from "./ops.js";
|
|
8
11
|
import { PropertySet } from "./properties.js";
|
|
9
|
-
import { ISegment } from "./mergeTreeNodes.js";
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
14
|
* @alpha
|
package/src/mergeTreeNodeWalk.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { type MergeBlock, IMergeNode, ISegment } from "./mergeTreeNodes.js";
|
|
7
7
|
|
|
8
8
|
export const LeafAction = {
|
|
9
9
|
Exit: false,
|
|
@@ -33,11 +33,11 @@ export type NodeAction = (typeof NodeAction)[keyof typeof NodeAction] | Exclude<
|
|
|
33
33
|
* @returns true if we naturally exit, false if exiting due to Exit action result
|
|
34
34
|
*/
|
|
35
35
|
export function depthFirstNodeWalk(
|
|
36
|
-
startBlock:
|
|
36
|
+
startBlock: MergeBlock,
|
|
37
37
|
startChild: IMergeNode | undefined,
|
|
38
38
|
downAction?: (node: IMergeNode) => NodeAction,
|
|
39
39
|
leafActionOverride?: (seg: ISegment) => LeafAction,
|
|
40
|
-
upAction?: (block:
|
|
40
|
+
upAction?: (block: MergeBlock) => void,
|
|
41
41
|
forward: boolean = true,
|
|
42
42
|
): boolean {
|
|
43
43
|
const increment = forward ? 1 : -1;
|
|
@@ -56,7 +56,7 @@ export function depthFirstNodeWalk(
|
|
|
56
56
|
let blockResult: NodeAction;
|
|
57
57
|
while (start?.isLeaf() === false) {
|
|
58
58
|
// cast is safe due to isLeaf === false in while above
|
|
59
|
-
block = start as
|
|
59
|
+
block = start as MergeBlock;
|
|
60
60
|
childCount = block.childCount;
|
|
61
61
|
blockResult = downAction?.(block);
|
|
62
62
|
// setting start undefined will skip the leaf walk
|
|
@@ -168,7 +168,7 @@ export function backwardExcursion(
|
|
|
168
168
|
* @returns true if we naturally exit, false if exiting due to leaf action result
|
|
169
169
|
*/
|
|
170
170
|
export function walkAllChildSegments(
|
|
171
|
-
startBlock:
|
|
171
|
+
startBlock: MergeBlock,
|
|
172
172
|
leafAction: (segment: ISegment) => boolean | undefined | void,
|
|
173
173
|
): boolean {
|
|
174
174
|
if (startBlock.childCount === 0) {
|
|
@@ -177,7 +177,7 @@ export function walkAllChildSegments(
|
|
|
177
177
|
|
|
178
178
|
// undefined shouldn't actually be added, but this allows subsequent check for `node.parent` to typecheck
|
|
179
179
|
// without further runtime work.
|
|
180
|
-
const ancestors = new Set<
|
|
180
|
+
const ancestors = new Set<MergeBlock | undefined>();
|
|
181
181
|
for (let cur = startBlock.parent; cur !== undefined; cur = cur.parent) {
|
|
182
182
|
ancestors.add(cur);
|
|
183
183
|
}
|
package/src/mergeTreeNodes.ts
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
7
7
|
|
|
8
|
-
import { assert } from "@fluidframework/core-utils";
|
|
9
|
-
import { AttributionKey } from "@fluidframework/runtime-definitions";
|
|
8
|
+
import { assert } from "@fluidframework/core-utils/internal";
|
|
9
|
+
import { AttributionKey } from "@fluidframework/runtime-definitions/internal";
|
|
10
|
+
|
|
10
11
|
import { IAttributionCollection } from "./attributionCollection.js";
|
|
11
12
|
import { LocalClientId, UnassignedSequenceNumber, UniversalSequenceNumber } from "./constants.js";
|
|
12
13
|
import { LocalReferenceCollection } from "./localReference.js";
|
|
@@ -14,10 +15,10 @@ import { IMergeTreeDeltaOpArgs } from "./mergeTreeDeltaCallback.js";
|
|
|
14
15
|
import { TrackingGroupCollection } from "./mergeTreeTracking.js";
|
|
15
16
|
import { IJSONSegment, IMarkerDef, MergeTreeDeltaType, ReferenceType } from "./ops.js";
|
|
16
17
|
import { computeHierarchicalOrdinal } from "./ordinal.js";
|
|
17
|
-
import { PartialSequenceLengths } from "./partialLengths.js";
|
|
18
|
+
import type { PartialSequenceLengths } from "./partialLengths.js";
|
|
18
19
|
// eslint-disable-next-line import/no-deprecated
|
|
19
|
-
import { clone, createMap, MapLike
|
|
20
|
-
import {
|
|
20
|
+
import { PropertySet, clone, createMap, type MapLike } from "./properties.js";
|
|
21
|
+
import { ReferencePosition, refGetTileLabels, refTypeIncludesFlag } from "./referencePositions.js";
|
|
21
22
|
import { SegmentGroupCollection } from "./segmentGroupCollection.js";
|
|
22
23
|
import { PropertiesManager, PropertiesRollback } from "./segmentPropertiesManager.js";
|
|
23
24
|
|
|
@@ -41,52 +42,8 @@ export interface IMergeNodeCommon {
|
|
|
41
42
|
* someday we may split tree leaves from segments, but for now they are the same
|
|
42
43
|
* this is just a convenience type that makes it clear that we need something that is both a segment and a leaf node
|
|
43
44
|
*/
|
|
44
|
-
export type ISegmentLeaf = ISegment & { parent?:
|
|
45
|
-
export type IMergeNode =
|
|
46
|
-
/**
|
|
47
|
-
* Internal (i.e. non-leaf) node in a merge tree.
|
|
48
|
-
* @internal
|
|
49
|
-
*/
|
|
50
|
-
export interface IMergeBlock extends IMergeNodeCommon {
|
|
51
|
-
parent?: IMergeBlock;
|
|
52
|
-
|
|
53
|
-
needsScour?: boolean;
|
|
54
|
-
/**
|
|
55
|
-
* Number of direct children of this node
|
|
56
|
-
*/
|
|
57
|
-
childCount: number;
|
|
58
|
-
/**
|
|
59
|
-
* Array of child nodes.
|
|
60
|
-
*
|
|
61
|
-
* @remarks To avoid reallocation, this is always initialized to have maximum length as deemed by
|
|
62
|
-
* the merge tree's branching factor. Use `childCount` to determine how many children this node actually has.
|
|
63
|
-
*/
|
|
64
|
-
children: IMergeNode[];
|
|
65
|
-
/**
|
|
66
|
-
* Supports querying the total length of all descendants of this IMergeBlock from the perspective of any
|
|
67
|
-
* (clientId, seq) within the collab window.
|
|
68
|
-
*
|
|
69
|
-
* @remarks This is only optional for implementation reasons (internal nodes can be created/moved without
|
|
70
|
-
* immediately initializing the partial lengths). Aside from mid-update on tree operations, these lengths
|
|
71
|
-
* objects are always defined.
|
|
72
|
-
*/
|
|
73
|
-
partialLengths?: PartialSequenceLengths;
|
|
74
|
-
/**
|
|
75
|
-
* The length of the contents of the node.
|
|
76
|
-
*/
|
|
77
|
-
cachedLength: number | undefined;
|
|
78
|
-
hierBlock(): IHierBlock | undefined;
|
|
79
|
-
assignChild(child: IMergeNode, index: number, updateOrdinal?: boolean): void;
|
|
80
|
-
setOrdinal(child: IMergeNode, index: number): void;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* @internal
|
|
85
|
-
*/
|
|
86
|
-
export interface IHierBlock extends IMergeBlock {
|
|
87
|
-
rightmostTiles: MapLike<ReferencePosition>;
|
|
88
|
-
leftmostTiles: MapLike<ReferencePosition>;
|
|
89
|
-
}
|
|
45
|
+
export type ISegmentLeaf = ISegment & { parent?: MergeBlock };
|
|
46
|
+
export type IMergeNode = MergeBlock | ISegmentLeaf;
|
|
90
47
|
|
|
91
48
|
/**
|
|
92
49
|
* Contains removal information associated to an {@link ISegment}.
|
|
@@ -350,7 +307,7 @@ export interface ISegmentChanges {
|
|
|
350
307
|
export interface BlockAction<TClientData> {
|
|
351
308
|
// eslint-disable-next-line @typescript-eslint/prefer-function-type
|
|
352
309
|
(
|
|
353
|
-
block:
|
|
310
|
+
block: MergeBlock,
|
|
354
311
|
pos: number,
|
|
355
312
|
refSeq: number,
|
|
356
313
|
clientId: number,
|
|
@@ -366,7 +323,7 @@ export interface BlockAction<TClientData> {
|
|
|
366
323
|
export interface NodeAction<TClientData> {
|
|
367
324
|
// eslint-disable-next-line @typescript-eslint/prefer-function-type
|
|
368
325
|
(
|
|
369
|
-
node:
|
|
326
|
+
node: MergeNode,
|
|
370
327
|
pos: number,
|
|
371
328
|
refSeq: number,
|
|
372
329
|
clientId: number,
|
|
@@ -382,7 +339,7 @@ export interface NodeAction<TClientData> {
|
|
|
382
339
|
export interface InsertContext {
|
|
383
340
|
candidateSegment?: ISegment;
|
|
384
341
|
leaf: (segment: ISegment | undefined, pos: number, ic: InsertContext) => ISegmentChanges;
|
|
385
|
-
continuePredicate?: (continueFromBlock:
|
|
342
|
+
continuePredicate?: (continueFromBlock: MergeBlock) => boolean;
|
|
386
343
|
}
|
|
387
344
|
|
|
388
345
|
/**
|
|
@@ -409,6 +366,7 @@ export interface SegmentGroup {
|
|
|
409
366
|
|
|
410
367
|
/**
|
|
411
368
|
* @alpha
|
|
369
|
+
* @deprecated - unused and will be removed
|
|
412
370
|
*/
|
|
413
371
|
export class MergeNode implements IMergeNodeCommon {
|
|
414
372
|
index: number = 0;
|
|
@@ -431,16 +389,34 @@ export const MaxNodesInBlock = 8;
|
|
|
431
389
|
/**
|
|
432
390
|
* @internal
|
|
433
391
|
*/
|
|
434
|
-
export class MergeBlock
|
|
435
|
-
parent?: IMergeBlock;
|
|
392
|
+
export class MergeBlock implements IMergeNodeCommon {
|
|
436
393
|
public children: IMergeNode[];
|
|
394
|
+
public needsScour?: boolean;
|
|
395
|
+
public parent?: MergeBlock;
|
|
396
|
+
public index: number = 0;
|
|
397
|
+
public ordinal: string = "";
|
|
398
|
+
public cachedLength: number | undefined = 0;
|
|
399
|
+
|
|
400
|
+
isLeaf(): this is ISegment {
|
|
401
|
+
return false;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Supports querying the total length of all descendants of this IMergeBlock from the perspective of any
|
|
406
|
+
* (clientId, seq) within the collab window.
|
|
407
|
+
*
|
|
408
|
+
* @remarks This is only optional for implementation reasons (internal nodes can be created/moved without
|
|
409
|
+
* immediately initializing the partial lengths). Aside from mid-update on tree operations, these lengths
|
|
410
|
+
* objects are always defined.
|
|
411
|
+
*/
|
|
412
|
+
partialLengths?: PartialSequenceLengths;
|
|
413
|
+
|
|
437
414
|
public constructor(public childCount: number) {
|
|
438
|
-
super();
|
|
439
415
|
this.children = new Array<IMergeNode>(MaxNodesInBlock);
|
|
440
416
|
}
|
|
441
417
|
|
|
442
|
-
public hierBlock():
|
|
443
|
-
return
|
|
418
|
+
public hierBlock(): this is HierMergeBlock {
|
|
419
|
+
return false;
|
|
444
420
|
}
|
|
445
421
|
|
|
446
422
|
public setOrdinal(child: IMergeNode, index: number) {
|
|
@@ -467,6 +443,23 @@ export class MergeBlock extends MergeNode implements IMergeBlock {
|
|
|
467
443
|
}
|
|
468
444
|
}
|
|
469
445
|
|
|
446
|
+
export class HierMergeBlock extends MergeBlock {
|
|
447
|
+
public rightmostTiles: MapLike<ReferencePosition>;
|
|
448
|
+
public leftmostTiles: MapLike<ReferencePosition>;
|
|
449
|
+
|
|
450
|
+
constructor(childCount: number) {
|
|
451
|
+
super(childCount);
|
|
452
|
+
// eslint-disable-next-line import/no-deprecated
|
|
453
|
+
this.rightmostTiles = createMap<ReferencePosition>();
|
|
454
|
+
// eslint-disable-next-line import/no-deprecated
|
|
455
|
+
this.leftmostTiles = createMap<ReferencePosition>();
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
public hierBlock(): this is HierMergeBlock {
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
|
|
470
463
|
export function seqLTE(seq: number, minOrRefSeq: number) {
|
|
471
464
|
return seq !== UnassignedSequenceNumber && seq <= minOrRefSeq;
|
|
472
465
|
}
|
|
@@ -474,7 +467,7 @@ export function seqLTE(seq: number, minOrRefSeq: number) {
|
|
|
474
467
|
/**
|
|
475
468
|
* @alpha
|
|
476
469
|
*/
|
|
477
|
-
export abstract class BaseSegment
|
|
470
|
+
export abstract class BaseSegment implements ISegment {
|
|
478
471
|
public clientId: number = LocalClientId;
|
|
479
472
|
public seq: number = UniversalSequenceNumber;
|
|
480
473
|
public removedSeq?: number;
|
|
@@ -483,6 +476,10 @@ export abstract class BaseSegment extends MergeNode implements ISegment {
|
|
|
483
476
|
public movedSeqs?: number[];
|
|
484
477
|
public movedClientIds?: number[];
|
|
485
478
|
public wasMovedOnInsert?: boolean | undefined;
|
|
479
|
+
public index: number = 0;
|
|
480
|
+
public ordinal: string = "";
|
|
481
|
+
public cachedLength: number = 0;
|
|
482
|
+
|
|
486
483
|
public readonly segmentGroups: SegmentGroupCollection = new SegmentGroupCollection(this);
|
|
487
484
|
public readonly trackingCollection: TrackingGroupCollection = new TrackingGroupCollection(this);
|
|
488
485
|
/***/
|
|
@@ -695,9 +692,10 @@ export abstract class BaseSegment extends MergeNode implements ISegment {
|
|
|
695
692
|
*
|
|
696
693
|
* @remarks In general, marker ids should be accessed using the inherent method
|
|
697
694
|
* {@link Marker.getId}. Marker ids should not be updated after creation.
|
|
698
|
-
* @
|
|
695
|
+
* @alpha
|
|
699
696
|
*/
|
|
700
697
|
export const reservedMarkerIdKey = "markerId";
|
|
698
|
+
|
|
701
699
|
/**
|
|
702
700
|
* @internal
|
|
703
701
|
*/
|
package/src/opBuilder.ts
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
import { ISegment, Marker } from "./mergeTreeNodes.js";
|
|
7
7
|
import {
|
|
8
8
|
IMergeTreeAnnotateMsg,
|
|
9
|
+
IMergeTreeDeltaOp,
|
|
9
10
|
// eslint-disable-next-line import/no-deprecated
|
|
10
11
|
IMergeTreeGroupMsg,
|
|
11
12
|
IMergeTreeInsertMsg,
|
|
12
|
-
IMergeTreeRemoveMsg,
|
|
13
|
-
MergeTreeDeltaType,
|
|
14
|
-
IMergeTreeDeltaOp,
|
|
15
13
|
// eslint-disable-next-line import/no-deprecated
|
|
16
14
|
IMergeTreeObliterateMsg,
|
|
15
|
+
IMergeTreeRemoveMsg,
|
|
16
|
+
MergeTreeDeltaType,
|
|
17
17
|
} from "./ops.js";
|
|
18
18
|
import { PropertySet } from "./properties.js";
|
|
19
19
|
|