@fluidframework/merge-tree 2.0.0-rc.1.0.3 → 2.0.0-rc.2.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/{.eslintrc.js → .eslintrc.cjs} +4 -1
- package/{.mocharc.js → .mocharc.cjs} +1 -1
- package/CHANGELOG.md +4 -0
- package/api-extractor-cjs.json +8 -0
- package/api-extractor-lint.json +1 -1
- package/api-extractor.json +1 -9
- package/api-report/merge-tree.api.md +6 -12
- package/dist/MergeTreeTextHelper.d.ts +2 -2
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js +3 -3
- 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.map +1 -1
- package/dist/attributionPolicy.d.ts +1 -1
- package/dist/attributionPolicy.d.ts.map +1 -1
- package/dist/attributionPolicy.js +15 -15
- package/dist/attributionPolicy.js.map +1 -1
- package/dist/client.d.ts +31 -12
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +103 -92
- package/dist/client.js.map +1 -1
- package/dist/collections/index.d.ts +2 -2
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +6 -6
- package/dist/collections/index.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts +3 -3
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +8 -8
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/index.d.ts +20 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +71 -71
- package/dist/index.js.map +1 -1
- package/dist/localReference.d.ts +9 -39
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +29 -24
- package/dist/localReference.js.map +1 -1
- package/dist/merge-tree-alpha.d.ts +28 -450
- package/dist/merge-tree-beta.d.ts +0 -438
- package/dist/merge-tree-public.d.ts +0 -438
- package/dist/merge-tree-untrimmed.d.ts +28 -787
- package/dist/mergeTree.d.ts +11 -19
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +201 -189
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeDeltaCallback.d.ts +3 -7
- package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/dist/mergeTreeDeltaCallback.js.map +1 -1
- package/dist/mergeTreeNodeWalk.d.ts +1 -1
- package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
- package/dist/mergeTreeNodeWalk.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +17 -14
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +32 -32
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/mergeTreeTracking.d.ts +2 -2
- package/dist/mergeTreeTracking.d.ts.map +1 -1
- package/dist/mergeTreeTracking.js +2 -2
- package/dist/mergeTreeTracking.js.map +1 -1
- package/dist/opBuilder.d.ts +3 -3
- package/dist/opBuilder.d.ts.map +1 -1
- package/dist/opBuilder.js +7 -7
- package/dist/opBuilder.js.map +1 -1
- package/dist/package.json +3 -0
- package/dist/partialLengths.d.ts +5 -5
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +29 -29
- package/dist/partialLengths.js.map +1 -1
- package/dist/referencePositions.d.ts +4 -4
- package/dist/referencePositions.d.ts.map +1 -1
- package/dist/referencePositions.js +2 -2
- package/dist/referencePositions.js.map +1 -1
- package/dist/revertibles.d.ts +7 -7
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +39 -39
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentGroupCollection.d.ts +1 -1
- package/dist/segmentGroupCollection.d.ts.map +1 -1
- package/dist/segmentGroupCollection.js +3 -3
- package/dist/segmentGroupCollection.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts +2 -2
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +8 -8
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotChunks.d.ts +3 -3
- package/dist/snapshotChunks.d.ts.map +1 -1
- package/dist/snapshotChunks.js +5 -5
- package/dist/snapshotChunks.js.map +1 -1
- package/dist/snapshotLoader.d.ts +3 -3
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +19 -19
- 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 +35 -18
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts +2 -2
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +22 -10
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/sortedSegmentSet.d.ts +3 -3
- package/dist/sortedSegmentSet.d.ts.map +1 -1
- package/dist/sortedSegmentSet.js +7 -5
- package/dist/sortedSegmentSet.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js +15 -15
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/PartialLengths.perf.spec.js +13 -13
- package/dist/test/PartialLengths.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js +25 -25
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/Snapshot.perf.spec.js +3 -3
- package/dist/test/Snapshot.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.perf.spec.js +9 -9
- package/dist/test/attributionCollection.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.spec.js +46 -46
- package/dist/test/attributionCollection.spec.js.map +1 -1
- package/dist/test/attributionPolicy.spec.js +13 -13
- package/dist/test/attributionPolicy.spec.js.map +1 -1
- package/dist/test/{beastTest.d.ts → beastTest.spec.d.ts} +3 -3
- package/dist/test/beastTest.spec.d.ts.map +1 -0
- package/dist/test/{beastTest.js → beastTest.spec.js} +120 -119
- package/dist/test/beastTest.spec.js.map +1 -0
- package/dist/test/client.annotateMarker.spec.js +13 -13
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/{client.apis.d.ts → client.apis.spec.d.ts} +1 -1
- package/dist/test/client.apis.spec.d.ts.map +1 -0
- package/dist/test/{client.apis.js → client.apis.spec.js} +8 -8
- package/dist/test/client.apis.spec.js.map +1 -0
- package/dist/test/client.applyMsg.spec.js +106 -43
- 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 +33 -21
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.d.ts +1 -1
- package/dist/test/client.attributionFarm.spec.d.ts.map +1 -1
- package/dist/test/client.attributionFarm.spec.js +13 -13
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.conflictFarm.spec.d.ts +1 -1
- package/dist/test/client.conflictFarm.spec.d.ts.map +1 -1
- package/dist/test/client.conflictFarm.spec.js +9 -9
- package/dist/test/client.conflictFarm.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +4 -4
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +140 -109
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.localReferenceFarm.spec.js +18 -18
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
- package/dist/test/client.rebasePosition.spec.js +2 -2
- 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 +10 -10
- package/dist/test/client.reconnectFarm.spec.js.map +1 -1
- package/dist/test/client.replay.spec.js +11 -11
- package/dist/test/client.replay.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +83 -83
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js +9 -9
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +137 -137
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/client.walkSegments.spec.js +2 -2
- package/dist/test/client.walkSegments.spec.js.map +1 -1
- package/dist/test/collections.list.spec.js +4 -4
- package/dist/test/collections.list.spec.js.map +1 -1
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js +4 -4
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/dist/test/dirname.cjs +16 -0
- package/dist/test/dirname.cjs.map +1 -0
- package/dist/test/dirname.d.cts +6 -0
- package/dist/test/dirname.d.cts.map +1 -0
- package/dist/test/index.d.ts +8 -8
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +82 -81
- package/dist/test/index.js.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +39 -39
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +39 -39
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +35 -35
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +77 -77
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +42 -42
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +15 -15
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +14 -14
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTree.zamboni.spec.js +9 -9
- package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.d.ts +4 -4
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +16 -15
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.spec.js +5 -5
- package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +85 -88
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.deltaCallback.spec.d.ts +6 -0
- package/dist/test/obliterate.deltaCallback.spec.d.ts.map +1 -0
- package/dist/test/obliterate.deltaCallback.spec.js +146 -0
- package/dist/test/obliterate.deltaCallback.spec.js.map +1 -0
- package/dist/test/obliterate.partialLength.spec.js +39 -44
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.reconnect.spec.js +15 -18
- package/dist/test/obliterate.reconnect.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +16 -16
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/ordinal.spec.js +5 -5
- package/dist/test/ordinal.spec.js.map +1 -1
- package/dist/test/partialLength.spec.js +58 -64
- 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 +8 -8
- package/dist/test/reconnectHelper.d.ts.map +1 -1
- package/dist/test/reconnectHelper.js +3 -3
- package/dist/test/reconnectHelper.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +18 -18
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/revertibleFarm.spec.js +21 -21
- package/dist/test/revertibleFarm.spec.js.map +1 -1
- package/dist/test/revertibles.spec.js +67 -67
- package/dist/test/revertibles.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js +3 -3
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/snapshot.spec.js +16 -16
- package/dist/test/snapshot.spec.js.map +1 -1
- package/dist/test/snapshot.utils.d.ts +4 -4
- package/dist/test/snapshot.utils.d.ts.map +1 -1
- package/dist/test/snapshot.utils.js +11 -11
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/snapshotlegacy.spec.js +22 -22
- package/dist/test/snapshotlegacy.spec.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js +9 -9
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +13 -16
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +57 -59
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts +3 -3
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +19 -19
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testServer.d.ts +3 -3
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js +8 -8
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +14 -6
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +36 -17
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.d.ts +2 -2
- package/dist/test/text.d.ts.map +1 -1
- package/dist/test/text.js +10 -10
- package/dist/test/text.js.map +1 -1
- package/dist/test/tracking.spec.js +12 -12
- package/dist/test/tracking.spec.js.map +1 -1
- package/dist/test/{wordUnitTests.d.ts → wordUnitTests.spec.d.ts} +1 -1
- package/dist/test/wordUnitTests.spec.d.ts.map +1 -0
- package/dist/test/{wordUnitTests.js → wordUnitTests.spec.js} +16 -15
- package/dist/test/wordUnitTests.spec.js.map +1 -0
- package/dist/textSegment.d.ts +3 -3
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js +2 -2
- package/dist/textSegment.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/zamboni.d.ts +2 -2
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js +19 -19
- package/dist/zamboni.js.map +1 -1
- package/lib/{MergeTreeTextHelper.d.mts → MergeTreeTextHelper.d.ts} +3 -3
- package/lib/MergeTreeTextHelper.d.ts.map +1 -0
- package/lib/{MergeTreeTextHelper.mjs → MergeTreeTextHelper.js} +3 -2
- package/lib/MergeTreeTextHelper.js.map +1 -0
- package/lib/{attributionCollection.d.mts → attributionCollection.d.ts} +2 -2
- package/lib/attributionCollection.d.ts.map +1 -0
- package/lib/{attributionCollection.mjs → attributionCollection.js} +1 -1
- package/lib/attributionCollection.js.map +1 -0
- package/lib/{attributionPolicy.d.mts → attributionPolicy.d.ts} +2 -2
- package/lib/attributionPolicy.d.ts.map +1 -0
- package/lib/{attributionPolicy.mjs → attributionPolicy.js} +4 -4
- package/lib/attributionPolicy.js.map +1 -0
- package/lib/{client.d.mts → client.d.ts} +32 -13
- package/lib/client.d.ts.map +1 -0
- package/lib/{client.mjs → client.js} +42 -31
- package/lib/client.js.map +1 -0
- package/lib/collections/{index.d.mts → index.d.ts} +3 -3
- package/lib/collections/index.d.ts.map +1 -0
- package/lib/collections/index.js +7 -0
- package/lib/collections/index.js.map +1 -0
- package/lib/collections/{list.d.mts → list.d.ts} +1 -1
- package/lib/collections/list.d.ts.map +1 -0
- package/lib/collections/{list.mjs → list.js} +1 -1
- package/lib/collections/list.js.map +1 -0
- package/lib/collections/{rbTree.d.mts → rbTree.d.ts} +1 -1
- package/lib/collections/rbTree.d.ts.map +1 -0
- package/lib/collections/{rbTree.mjs → rbTree.js} +1 -1
- package/lib/collections/rbTree.js.map +1 -0
- package/lib/{constants.d.mts → constants.d.ts} +1 -1
- package/lib/constants.d.ts.map +1 -0
- package/lib/{constants.mjs → constants.js} +1 -1
- package/lib/constants.js.map +1 -0
- package/lib/{endOfTreeSegment.d.mts → endOfTreeSegment.d.ts} +4 -4
- package/lib/endOfTreeSegment.d.ts.map +1 -0
- package/lib/{endOfTreeSegment.mjs → endOfTreeSegment.js} +3 -3
- package/lib/endOfTreeSegment.js.map +1 -0
- package/lib/{index.d.mts → index.d.ts} +21 -21
- package/lib/index.d.ts.map +1 -0
- package/lib/{index.mjs → index.js} +20 -20
- package/lib/index.js.map +1 -0
- package/lib/{localReference.d.mts → localReference.d.ts} +10 -40
- package/lib/localReference.d.ts.map +1 -0
- package/lib/{localReference.mjs → localReference.js} +12 -6
- package/lib/localReference.js.map +1 -0
- package/lib/{merge-tree-alpha.d.mts → merge-tree-alpha.d.ts} +28 -450
- package/lib/merge-tree-beta.d.ts +230 -0
- package/lib/merge-tree-public.d.ts +230 -0
- package/lib/{merge-tree-untrimmed.d.mts → merge-tree-untrimmed.d.ts} +28 -787
- package/lib/{mergeTree.d.mts → mergeTree.d.ts} +12 -20
- package/lib/mergeTree.d.ts.map +1 -0
- package/lib/{mergeTree.mjs → mergeTree.js} +47 -32
- package/lib/mergeTree.js.map +1 -0
- package/lib/{mergeTreeDeltaCallback.d.mts → mergeTreeDeltaCallback.d.ts} +8 -8
- package/lib/mergeTreeDeltaCallback.d.ts.map +1 -0
- package/lib/{mergeTreeDeltaCallback.mjs → mergeTreeDeltaCallback.js} +1 -1
- package/lib/mergeTreeDeltaCallback.js.map +1 -0
- package/lib/{mergeTreeNodeWalk.d.mts → mergeTreeNodeWalk.d.ts} +2 -2
- package/lib/mergeTreeNodeWalk.d.ts.map +1 -0
- package/lib/{mergeTreeNodeWalk.mjs → mergeTreeNodeWalk.js} +1 -1
- package/lib/mergeTreeNodeWalk.js.map +1 -0
- package/lib/{mergeTreeNodes.d.mts → mergeTreeNodes.d.ts} +18 -15
- package/lib/mergeTreeNodes.d.ts.map +1 -0
- package/lib/{mergeTreeNodes.mjs → mergeTreeNodes.js} +12 -10
- package/lib/mergeTreeNodes.js.map +1 -0
- package/lib/{mergeTreeTracking.d.mts → mergeTreeTracking.d.ts} +3 -3
- package/lib/mergeTreeTracking.d.ts.map +1 -0
- package/lib/{mergeTreeTracking.mjs → mergeTreeTracking.js} +3 -2
- package/lib/mergeTreeTracking.js.map +1 -0
- package/lib/{opBuilder.d.mts → opBuilder.d.ts} +4 -4
- package/lib/{opBuilder.d.mts.map → opBuilder.d.ts.map} +1 -1
- package/lib/{opBuilder.mjs → opBuilder.js} +2 -2
- package/lib/opBuilder.js.map +1 -0
- package/lib/{ops.d.mts → ops.d.ts} +1 -1
- package/lib/ops.d.ts.map +1 -0
- package/lib/{ops.mjs → ops.js} +1 -1
- package/lib/ops.js.map +1 -0
- package/lib/{ordinal.d.mts → ordinal.d.ts} +1 -1
- package/lib/ordinal.d.ts.map +1 -0
- package/lib/{ordinal.mjs → ordinal.js} +2 -1
- package/lib/ordinal.js.map +1 -0
- package/lib/{partialLengths.d.mts → partialLengths.d.ts} +6 -6
- package/lib/partialLengths.d.ts.map +1 -0
- package/lib/{partialLengths.mjs → partialLengths.js} +11 -10
- package/lib/partialLengths.js.map +1 -0
- package/lib/{properties.d.mts → properties.d.ts} +1 -1
- package/lib/properties.d.ts.map +1 -0
- package/lib/{properties.mjs → properties.js} +1 -1
- package/lib/properties.js.map +1 -0
- package/lib/{referencePositions.d.mts → referencePositions.d.ts} +5 -5
- package/lib/referencePositions.d.ts.map +1 -0
- package/lib/{referencePositions.mjs → referencePositions.js} +2 -2
- package/lib/referencePositions.js.map +1 -0
- package/lib/{revertibles.d.mts → revertibles.d.ts} +8 -8
- package/lib/revertibles.d.ts.map +1 -0
- package/lib/{revertibles.mjs → revertibles.js} +13 -13
- package/lib/revertibles.js.map +1 -0
- package/lib/{segmentGroupCollection.d.mts → segmentGroupCollection.d.ts} +2 -2
- package/lib/segmentGroupCollection.d.ts.map +1 -0
- package/lib/{segmentGroupCollection.mjs → segmentGroupCollection.js} +2 -2
- package/lib/segmentGroupCollection.js.map +1 -0
- package/lib/{segmentPropertiesManager.d.mts → segmentPropertiesManager.d.ts} +3 -3
- package/lib/segmentPropertiesManager.d.ts.map +1 -0
- package/lib/{segmentPropertiesManager.mjs → segmentPropertiesManager.js} +5 -3
- package/lib/segmentPropertiesManager.js.map +1 -0
- package/lib/{snapshotChunks.d.mts → snapshotChunks.d.ts} +4 -4
- package/lib/snapshotChunks.d.ts.map +1 -0
- package/lib/{snapshotChunks.mjs → snapshotChunks.js} +2 -2
- package/lib/snapshotChunks.js.map +1 -0
- package/lib/{snapshotLoader.d.mts → snapshotLoader.d.ts} +4 -4
- package/lib/snapshotLoader.d.ts.map +1 -0
- package/lib/{snapshotLoader.mjs → snapshotLoader.js} +10 -9
- package/lib/snapshotLoader.js.map +1 -0
- package/lib/{snapshotV1.d.mts → snapshotV1.d.ts} +4 -4
- package/lib/snapshotV1.d.ts.map +1 -0
- package/lib/{snapshotV1.mjs → snapshotV1.js} +24 -7
- package/lib/snapshotV1.js.map +1 -0
- package/lib/{snapshotlegacy.d.mts → snapshotlegacy.d.ts} +3 -3
- package/lib/snapshotlegacy.d.ts.map +1 -0
- package/lib/{snapshotlegacy.mjs → snapshotlegacy.js} +17 -4
- package/lib/snapshotlegacy.js.map +1 -0
- package/lib/{sortedSegmentSet.d.mts → sortedSegmentSet.d.ts} +4 -4
- package/lib/sortedSegmentSet.d.ts.map +1 -0
- package/lib/{sortedSegmentSet.mjs → sortedSegmentSet.js} +8 -5
- package/lib/sortedSegmentSet.js.map +1 -0
- package/lib/{sortedSet.d.mts → sortedSet.d.ts} +1 -1
- package/lib/sortedSet.d.ts.map +1 -0
- package/lib/{sortedSet.mjs → sortedSet.js} +1 -1
- package/lib/sortedSet.js.map +1 -0
- package/lib/test/Insertion.perf.spec.d.ts +6 -0
- package/lib/test/Insertion.perf.spec.d.ts.map +1 -0
- package/lib/test/Insertion.perf.spec.js +111 -0
- package/lib/test/Insertion.perf.spec.js.map +1 -0
- package/lib/test/PartialLengths.perf.spec.d.ts +6 -0
- package/lib/test/PartialLengths.perf.spec.d.ts.map +1 -0
- package/lib/test/PartialLengths.perf.spec.js +65 -0
- package/lib/test/PartialLengths.perf.spec.js.map +1 -0
- package/lib/test/Removal.perf.spec.d.ts +6 -0
- package/lib/test/Removal.perf.spec.d.ts.map +1 -0
- package/lib/test/Removal.perf.spec.js +164 -0
- package/lib/test/Removal.perf.spec.js.map +1 -0
- package/lib/test/Snapshot.perf.spec.d.ts +6 -0
- package/lib/test/Snapshot.perf.spec.d.ts.map +1 -0
- package/lib/test/Snapshot.perf.spec.js +31 -0
- package/lib/test/Snapshot.perf.spec.js.map +1 -0
- package/lib/test/attributionCollection.perf.spec.d.ts +6 -0
- package/lib/test/attributionCollection.perf.spec.d.ts.map +1 -0
- package/lib/test/attributionCollection.perf.spec.js +229 -0
- package/lib/test/attributionCollection.perf.spec.js.map +1 -0
- package/lib/test/attributionCollection.spec.d.ts +6 -0
- package/lib/test/attributionCollection.spec.d.ts.map +1 -0
- package/lib/test/attributionCollection.spec.js +484 -0
- package/lib/test/attributionCollection.spec.js.map +1 -0
- package/lib/test/attributionPolicy.spec.d.ts +6 -0
- package/lib/test/attributionPolicy.spec.d.ts.map +1 -0
- package/lib/test/attributionPolicy.spec.js +187 -0
- package/lib/test/attributionPolicy.spec.js.map +1 -0
- package/lib/test/beastTest.spec.d.ts +54 -0
- package/lib/test/beastTest.spec.d.ts.map +1 -0
- package/lib/test/beastTest.spec.js +1318 -0
- package/lib/test/beastTest.spec.js.map +1 -0
- package/lib/test/client.annotateMarker.spec.d.ts +6 -0
- package/lib/test/client.annotateMarker.spec.d.ts.map +1 -0
- package/lib/test/client.annotateMarker.spec.js +43 -0
- package/lib/test/client.annotateMarker.spec.js.map +1 -0
- package/lib/test/client.apis.spec.d.ts +7 -0
- package/lib/test/client.apis.spec.d.ts.map +1 -0
- package/lib/test/client.apis.spec.js +67 -0
- package/lib/test/client.apis.spec.js.map +1 -0
- package/lib/test/client.applyMsg.spec.d.ts +6 -0
- package/lib/test/client.applyMsg.spec.d.ts.map +1 -0
- package/lib/test/client.applyMsg.spec.js +561 -0
- package/lib/test/client.applyMsg.spec.js.map +1 -0
- package/lib/test/client.applyStashedOpFarm.spec.d.ts +12 -0
- package/lib/test/client.applyStashedOpFarm.spec.d.ts.map +1 -0
- package/lib/test/client.applyStashedOpFarm.spec.js +153 -0
- package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -0
- package/lib/test/client.attributionFarm.spec.d.ts +7 -0
- package/lib/test/client.attributionFarm.spec.d.ts.map +1 -0
- package/lib/test/client.attributionFarm.spec.js +92 -0
- package/lib/test/client.attributionFarm.spec.js.map +1 -0
- package/lib/test/client.conflictFarm.spec.d.ts +15 -0
- package/lib/test/client.conflictFarm.spec.d.ts.map +1 -0
- package/lib/test/client.conflictFarm.spec.js +85 -0
- package/lib/test/client.conflictFarm.spec.js.map +1 -0
- package/lib/test/client.getPosition.spec.d.ts +6 -0
- package/lib/test/client.getPosition.spec.d.ts.map +1 -0
- package/lib/test/client.getPosition.spec.js +52 -0
- package/lib/test/client.getPosition.spec.js.map +1 -0
- package/lib/test/client.localReference.spec.d.ts +6 -0
- package/lib/test/client.localReference.spec.d.ts.map +1 -0
- package/lib/test/client.localReference.spec.js +468 -0
- package/lib/test/client.localReference.spec.js.map +1 -0
- package/lib/test/client.localReferenceFarm.spec.d.ts +6 -0
- package/lib/test/client.localReferenceFarm.spec.d.ts.map +1 -0
- package/lib/test/client.localReferenceFarm.spec.js +86 -0
- package/lib/test/client.localReferenceFarm.spec.js.map +1 -0
- package/lib/test/client.rebasePosition.spec.d.ts +6 -0
- package/lib/test/client.rebasePosition.spec.d.ts.map +1 -0
- package/lib/test/client.rebasePosition.spec.js +100 -0
- package/lib/test/client.rebasePosition.spec.js.map +1 -0
- package/lib/test/client.reconnectFarm.spec.d.ts +12 -0
- package/lib/test/client.reconnectFarm.spec.d.ts.map +1 -0
- package/lib/test/client.reconnectFarm.spec.js +88 -0
- package/lib/test/client.reconnectFarm.spec.js.map +1 -0
- package/lib/test/client.replay.spec.d.ts +6 -0
- package/lib/test/client.replay.spec.d.ts.map +1 -0
- package/lib/test/client.replay.spec.js +57 -0
- package/lib/test/client.replay.spec.js.map +1 -0
- package/lib/test/client.rollback.spec.d.ts +6 -0
- package/lib/test/client.rollback.spec.d.ts.map +1 -0
- package/lib/test/client.rollback.spec.js +451 -0
- package/lib/test/client.rollback.spec.js.map +1 -0
- package/lib/test/client.rollbackFarm.spec.d.ts +6 -0
- package/lib/test/client.rollbackFarm.spec.d.ts.map +1 -0
- package/lib/test/client.rollbackFarm.spec.js +46 -0
- package/lib/test/client.rollbackFarm.spec.js.map +1 -0
- package/lib/test/client.searchForMarker.spec.d.ts +6 -0
- package/lib/test/client.searchForMarker.spec.d.ts.map +1 -0
- package/lib/test/client.searchForMarker.spec.js +495 -0
- package/lib/test/client.searchForMarker.spec.js.map +1 -0
- package/lib/test/client.walkSegments.spec.d.ts +6 -0
- package/lib/test/client.walkSegments.spec.d.ts.map +1 -0
- package/lib/test/client.walkSegments.spec.js +52 -0
- package/lib/test/client.walkSegments.spec.js.map +1 -0
- package/lib/test/collections.list.spec.d.ts +6 -0
- package/lib/test/collections.list.spec.d.ts.map +1 -0
- package/lib/test/collections.list.spec.js +82 -0
- package/lib/test/collections.list.spec.js.map +1 -0
- package/lib/test/createInsertOnlyAttributionPolicy.spec.d.ts +6 -0
- package/lib/test/createInsertOnlyAttributionPolicy.spec.d.ts.map +1 -0
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js +33 -0
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -0
- package/lib/test/dirname.cjs +16 -0
- package/lib/test/dirname.cjs.map +1 -0
- package/lib/test/dirname.d.cts +6 -0
- package/lib/test/dirname.d.cts.map +1 -0
- package/lib/test/index.d.ts +13 -0
- package/lib/test/index.d.ts.map +1 -0
- package/lib/test/index.js +13 -0
- package/lib/test/index.js.map +1 -0
- package/lib/test/mergeTree.annotate.deltaCallback.spec.d.ts +6 -0
- package/lib/test/mergeTree.annotate.deltaCallback.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +140 -0
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -0
- package/lib/test/mergeTree.annotate.spec.d.ts +6 -0
- package/lib/test/mergeTree.annotate.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.annotate.spec.js +446 -0
- package/lib/test/mergeTree.annotate.spec.js.map +1 -0
- package/lib/test/mergeTree.insert.deltaCallback.spec.d.ts +6 -0
- package/lib/test/mergeTree.insert.deltaCallback.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.insert.deltaCallback.spec.js +124 -0
- package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -0
- package/lib/test/mergeTree.insertingWalk.spec.d.ts +6 -0
- package/lib/test/mergeTree.insertingWalk.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.insertingWalk.spec.js +277 -0
- package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -0
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts +6 -0
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +176 -0
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -0
- package/lib/test/mergeTree.markRangeRemoved.spec.d.ts +6 -0
- package/lib/test/mergeTree.markRangeRemoved.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.markRangeRemoved.spec.js +128 -0
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -0
- package/lib/test/mergeTree.walk.spec.d.ts +6 -0
- package/lib/test/mergeTree.walk.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.walk.spec.js +61 -0
- package/lib/test/mergeTree.walk.spec.js.map +1 -0
- package/lib/test/mergeTree.zamboni.spec.d.ts +6 -0
- package/lib/test/mergeTree.zamboni.spec.d.ts.map +1 -0
- package/lib/test/mergeTree.zamboni.spec.js +50 -0
- package/lib/test/mergeTree.zamboni.spec.js.map +1 -0
- package/lib/test/mergeTreeOperationRunner.d.ts +63 -0
- package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -0
- package/lib/test/mergeTreeOperationRunner.js +207 -0
- package/lib/test/mergeTreeOperationRunner.js.map +1 -0
- package/lib/test/mergeTreeOperationRunner.spec.d.ts +6 -0
- package/lib/test/mergeTreeOperationRunner.spec.d.ts.map +1 -0
- package/lib/test/mergeTreeOperationRunner.spec.js +154 -0
- package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -0
- package/lib/test/obliterate.concurrent.spec.d.ts +6 -0
- package/lib/test/obliterate.concurrent.spec.d.ts.map +1 -0
- package/lib/test/obliterate.concurrent.spec.js +1441 -0
- package/lib/test/obliterate.concurrent.spec.js.map +1 -0
- package/lib/test/obliterate.deltaCallback.spec.d.ts +6 -0
- package/lib/test/obliterate.deltaCallback.spec.d.ts.map +1 -0
- package/lib/test/obliterate.deltaCallback.spec.js +144 -0
- package/lib/test/obliterate.deltaCallback.spec.js.map +1 -0
- package/lib/test/obliterate.partialLength.spec.d.ts +6 -0
- package/lib/test/obliterate.partialLength.spec.d.ts.map +1 -0
- package/lib/test/obliterate.partialLength.spec.js +272 -0
- package/lib/test/obliterate.partialLength.spec.js.map +1 -0
- package/lib/test/obliterate.reconnect.spec.d.ts +6 -0
- package/lib/test/obliterate.reconnect.spec.d.ts.map +1 -0
- package/lib/test/obliterate.reconnect.spec.js +159 -0
- package/lib/test/obliterate.reconnect.spec.js.map +1 -0
- package/lib/test/obliterate.spec.d.ts +6 -0
- package/lib/test/obliterate.spec.d.ts.map +1 -0
- package/lib/test/obliterate.spec.js +160 -0
- package/lib/test/obliterate.spec.js.map +1 -0
- package/lib/test/ordinal.spec.d.ts +2 -0
- package/lib/test/ordinal.spec.d.ts.map +1 -0
- package/lib/test/ordinal.spec.js +38 -0
- package/lib/test/ordinal.spec.js.map +1 -0
- package/lib/test/partialLength.spec.d.ts +6 -0
- package/lib/test/partialLength.spec.d.ts.map +1 -0
- package/lib/test/partialLength.spec.js +274 -0
- package/lib/test/partialLength.spec.js.map +1 -0
- package/lib/test/properties.spec.d.ts +6 -0
- package/lib/test/properties.spec.d.ts.map +1 -0
- package/lib/test/properties.spec.js +53 -0
- package/lib/test/properties.spec.js.map +1 -0
- package/lib/test/reconnectHelper.d.ts +48 -0
- package/lib/test/reconnectHelper.d.ts.map +1 -0
- package/lib/test/reconnectHelper.js +82 -0
- package/lib/test/reconnectHelper.js.map +1 -0
- package/lib/test/resetPendingSegmentsToOp.spec.d.ts +6 -0
- package/lib/test/resetPendingSegmentsToOp.spec.d.ts.map +1 -0
- package/lib/test/resetPendingSegmentsToOp.spec.js +235 -0
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -0
- package/lib/test/revertibleFarm.spec.d.ts +6 -0
- package/lib/test/revertibleFarm.spec.d.ts.map +1 -0
- package/lib/test/revertibleFarm.spec.js +119 -0
- package/lib/test/revertibleFarm.spec.js.map +1 -0
- package/lib/test/revertibles.spec.d.ts +17 -0
- package/lib/test/revertibles.spec.d.ts.map +1 -0
- package/lib/test/revertibles.spec.js +381 -0
- package/lib/test/revertibles.spec.js.map +1 -0
- package/lib/test/segmentGroupCollection.spec.d.ts +6 -0
- package/lib/test/segmentGroupCollection.spec.d.ts.map +1 -0
- package/lib/test/segmentGroupCollection.spec.js +58 -0
- package/lib/test/segmentGroupCollection.spec.js.map +1 -0
- package/lib/test/snapshot.spec.d.ts +6 -0
- package/lib/test/snapshot.spec.d.ts.map +1 -0
- package/lib/test/snapshot.spec.js +176 -0
- package/lib/test/snapshot.spec.js.map +1 -0
- package/lib/test/snapshot.utils.d.ts +33 -0
- package/lib/test/snapshot.utils.d.ts.map +1 -0
- package/lib/test/snapshot.utils.js +104 -0
- package/lib/test/snapshot.utils.js.map +1 -0
- package/lib/test/snapshotlegacy.spec.d.ts +6 -0
- package/lib/test/snapshotlegacy.spec.d.ts.map +1 -0
- package/lib/test/snapshotlegacy.spec.js +137 -0
- package/lib/test/snapshotlegacy.spec.js.map +1 -0
- package/lib/test/sortedSegmentSet.spec.d.ts +6 -0
- package/lib/test/sortedSegmentSet.spec.d.ts.map +1 -0
- package/lib/test/sortedSegmentSet.spec.js +93 -0
- package/lib/test/sortedSegmentSet.spec.js.map +1 -0
- package/lib/test/testClient.d.ts +116 -0
- package/lib/test/testClient.d.ts.map +1 -0
- package/lib/test/testClient.js +430 -0
- package/lib/test/testClient.js.map +1 -0
- package/lib/test/testClientLogger.d.ts +44 -0
- package/lib/test/testClientLogger.d.ts.map +1 -0
- package/lib/test/testClientLogger.js +282 -0
- package/lib/test/testClientLogger.js.map +1 -0
- package/lib/test/testSerializer.d.ts +18 -0
- package/lib/test/testSerializer.d.ts.map +1 -0
- package/lib/test/testSerializer.js +29 -0
- package/lib/test/testSerializer.js.map +1 -0
- package/lib/test/testServer.d.ts +36 -0
- package/lib/test/testServer.d.ts.map +1 -0
- package/lib/test/testServer.js +133 -0
- package/lib/test/testServer.js.map +1 -0
- package/lib/test/testUtils.d.ts +77 -0
- package/lib/test/testUtils.d.ts.map +1 -0
- package/lib/test/testUtils.js +151 -0
- package/lib/test/testUtils.js.map +1 -0
- package/lib/test/text.d.ts +9 -0
- package/lib/test/text.d.ts.map +1 -0
- package/lib/test/text.js +71 -0
- package/lib/test/text.js.map +1 -0
- package/lib/test/tracking.spec.d.ts +6 -0
- package/lib/test/tracking.spec.d.ts.map +1 -0
- package/lib/test/tracking.spec.js +118 -0
- package/lib/test/tracking.spec.js.map +1 -0
- package/lib/test/types/validateMergeTreePrevious.generated.d.ts +2 -0
- package/lib/test/types/validateMergeTreePrevious.generated.d.ts.map +1 -0
- package/lib/test/types/validateMergeTreePrevious.generated.js +228 -0
- package/lib/test/types/validateMergeTreePrevious.generated.js.map +1 -0
- package/lib/test/wordUnitTests.spec.d.ts +6 -0
- package/lib/test/wordUnitTests.spec.d.ts.map +1 -0
- package/lib/test/wordUnitTests.spec.js +166 -0
- package/lib/test/wordUnitTests.spec.js.map +1 -0
- package/lib/{textSegment.d.mts → textSegment.d.ts} +4 -4
- package/lib/textSegment.d.ts.map +1 -0
- package/lib/{textSegment.mjs → textSegment.js} +2 -2
- package/lib/textSegment.js.map +1 -0
- package/lib/{zamboni.d.mts → zamboni.d.ts} +3 -3
- package/lib/zamboni.d.ts.map +1 -0
- package/lib/{zamboni.mjs → zamboni.js} +7 -6
- package/lib/zamboni.js.map +1 -0
- package/package.json +50 -57
- package/src/MergeTreeTextHelper.ts +4 -4
- package/src/attributionCollection.ts +1 -1
- package/src/attributionPolicy.ts +5 -5
- package/src/client.ts +50 -41
- package/src/collections/index.ts +2 -2
- package/src/endOfTreeSegment.ts +5 -5
- package/src/index.ts +20 -20
- package/src/localReference.ts +13 -7
- package/src/mergeTree.ts +53 -44
- package/src/mergeTreeDeltaCallback.ts +3 -8
- package/src/mergeTreeNodeWalk.ts +1 -1
- package/src/mergeTreeNodes.ts +21 -19
- package/src/mergeTreeTracking.ts +3 -3
- package/src/opBuilder.ts +3 -3
- package/src/partialLengths.ts +10 -10
- package/src/referencePositions.ts +4 -4
- package/src/revertibles.ts +14 -18
- package/src/segmentGroupCollection.ts +2 -2
- package/src/segmentPropertiesManager.ts +3 -3
- package/src/snapshotChunks.ts +4 -4
- package/src/snapshotLoader.ts +14 -11
- package/src/snapshotV1.ts +29 -9
- package/src/snapshotlegacy.ts +19 -5
- package/src/sortedSegmentSet.ts +8 -6
- package/src/textSegment.ts +3 -3
- package/src/zamboni.ts +7 -7
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +2 -5
- package/api-extractor-esm.json +0 -17
- package/dist/test/beastTest.d.ts.map +0 -1
- package/dist/test/beastTest.js.map +0 -1
- package/dist/test/client.apis.d.ts.map +0 -1
- package/dist/test/client.apis.js.map +0 -1
- package/dist/test/wordUnitTests.d.ts.map +0 -1
- package/dist/test/wordUnitTests.js.map +0 -1
- package/lib/MergeTreeTextHelper.d.mts.map +0 -1
- package/lib/MergeTreeTextHelper.mjs.map +0 -1
- package/lib/attributionCollection.d.mts.map +0 -1
- package/lib/attributionCollection.mjs.map +0 -1
- package/lib/attributionPolicy.d.mts.map +0 -1
- package/lib/attributionPolicy.mjs.map +0 -1
- package/lib/client.d.mts.map +0 -1
- package/lib/client.mjs.map +0 -1
- package/lib/collections/index.d.mts.map +0 -1
- package/lib/collections/index.mjs +0 -7
- package/lib/collections/index.mjs.map +0 -1
- package/lib/collections/list.d.mts.map +0 -1
- package/lib/collections/list.mjs.map +0 -1
- package/lib/collections/rbTree.d.mts.map +0 -1
- package/lib/collections/rbTree.mjs.map +0 -1
- package/lib/constants.d.mts.map +0 -1
- package/lib/constants.mjs.map +0 -1
- package/lib/endOfTreeSegment.d.mts.map +0 -1
- package/lib/endOfTreeSegment.mjs.map +0 -1
- package/lib/index.d.mts.map +0 -1
- package/lib/index.mjs.map +0 -1
- package/lib/localReference.d.mts.map +0 -1
- package/lib/localReference.mjs.map +0 -1
- package/lib/merge-tree-beta.d.mts +0 -668
- package/lib/merge-tree-public.d.mts +0 -668
- package/lib/mergeTree.d.mts.map +0 -1
- package/lib/mergeTree.mjs.map +0 -1
- package/lib/mergeTreeDeltaCallback.d.mts.map +0 -1
- package/lib/mergeTreeDeltaCallback.mjs.map +0 -1
- package/lib/mergeTreeNodeWalk.d.mts.map +0 -1
- package/lib/mergeTreeNodeWalk.mjs.map +0 -1
- package/lib/mergeTreeNodes.d.mts.map +0 -1
- package/lib/mergeTreeNodes.mjs.map +0 -1
- package/lib/mergeTreeTracking.d.mts.map +0 -1
- package/lib/mergeTreeTracking.mjs.map +0 -1
- package/lib/opBuilder.mjs.map +0 -1
- package/lib/ops.d.mts.map +0 -1
- package/lib/ops.mjs.map +0 -1
- package/lib/ordinal.d.mts.map +0 -1
- package/lib/ordinal.mjs.map +0 -1
- package/lib/partialLengths.d.mts.map +0 -1
- package/lib/partialLengths.mjs.map +0 -1
- package/lib/properties.d.mts.map +0 -1
- package/lib/properties.mjs.map +0 -1
- package/lib/referencePositions.d.mts.map +0 -1
- package/lib/referencePositions.mjs.map +0 -1
- package/lib/revertibles.d.mts.map +0 -1
- package/lib/revertibles.mjs.map +0 -1
- package/lib/segmentGroupCollection.d.mts.map +0 -1
- package/lib/segmentGroupCollection.mjs.map +0 -1
- package/lib/segmentPropertiesManager.d.mts.map +0 -1
- package/lib/segmentPropertiesManager.mjs.map +0 -1
- package/lib/snapshotChunks.d.mts.map +0 -1
- package/lib/snapshotChunks.mjs.map +0 -1
- package/lib/snapshotLoader.d.mts.map +0 -1
- package/lib/snapshotLoader.mjs.map +0 -1
- package/lib/snapshotV1.d.mts.map +0 -1
- package/lib/snapshotV1.mjs.map +0 -1
- package/lib/snapshotlegacy.d.mts.map +0 -1
- package/lib/snapshotlegacy.mjs.map +0 -1
- package/lib/sortedSegmentSet.d.mts.map +0 -1
- package/lib/sortedSegmentSet.mjs.map +0 -1
- package/lib/sortedSet.d.mts.map +0 -1
- package/lib/sortedSet.mjs.map +0 -1
- package/lib/textSegment.d.mts.map +0 -1
- package/lib/textSegment.mjs.map +0 -1
- package/lib/zamboni.d.mts.map +0 -1
- package/lib/zamboni.mjs.map +0 -1
package/dist/snapshotlegacy.js
CHANGED
|
@@ -9,9 +9,9 @@ exports.SnapshotLegacy = void 0;
|
|
|
9
9
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
10
10
|
const core_utils_1 = require("@fluidframework/core-utils");
|
|
11
11
|
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
12
|
+
const constants_js_1 = require("./constants.js");
|
|
13
|
+
const properties_js_1 = require("./properties.js");
|
|
14
|
+
const snapshotChunks_js_1 = require("./snapshotChunks.js");
|
|
15
15
|
/**
|
|
16
16
|
* @internal
|
|
17
17
|
*/
|
|
@@ -65,12 +65,12 @@ class SnapshotLegacy {
|
|
|
65
65
|
let length = chunk1.chunkLengthChars;
|
|
66
66
|
let segments = chunk1.chunkSegmentCount;
|
|
67
67
|
const builder = new runtime_utils_1.SummaryTreeBuilder();
|
|
68
|
-
builder.addBlob(SnapshotLegacy.header, (0,
|
|
68
|
+
builder.addBlob(SnapshotLegacy.header, (0, snapshotChunks_js_1.serializeAsMinSupportedVersion)(SnapshotLegacy.header, chunk1, this.logger, this.mergeTree.options, serializer, bind));
|
|
69
69
|
if (chunk1.chunkSegmentCount < chunk1.totalSegmentCount) {
|
|
70
70
|
const chunk2 = this.getSeqLengthSegs(this.segments, this.header.segmentsTotalLength, chunk1.chunkSegmentCount);
|
|
71
71
|
length += chunk2.chunkLengthChars;
|
|
72
72
|
segments += chunk2.chunkSegmentCount;
|
|
73
|
-
builder.addBlob(SnapshotLegacy.body, (0,
|
|
73
|
+
builder.addBlob(SnapshotLegacy.body, (0, snapshotChunks_js_1.serializeAsMinSupportedVersion)(SnapshotLegacy.body, chunk2, this.logger, this.mergeTree.options, serializer, bind));
|
|
74
74
|
}
|
|
75
75
|
(0, core_utils_1.assert)(length === this.header.segmentsTotalLength, 0x05d /* "emit: mismatch in segmentsTotalLength" */);
|
|
76
76
|
(0, core_utils_1.assert)(segments === chunk1.totalSegmentCount, 0x05e /* "emit: mismatch in totalSegmentCount" */);
|
|
@@ -89,19 +89,21 @@ class SnapshotLegacy {
|
|
|
89
89
|
const collabWindow = this.mergeTree.collabWindow;
|
|
90
90
|
this.seq = collabWindow.minSeq;
|
|
91
91
|
this.header = {
|
|
92
|
-
segmentsTotalLength: this.mergeTree.getLength(this.mergeTree.collabWindow.minSeq,
|
|
92
|
+
segmentsTotalLength: this.mergeTree.getLength(this.mergeTree.collabWindow.minSeq, constants_js_1.NonCollabClient),
|
|
93
93
|
seq: this.mergeTree.collabWindow.minSeq,
|
|
94
94
|
};
|
|
95
|
+
let originalSegments = 0;
|
|
95
96
|
const segs = [];
|
|
96
97
|
let prev;
|
|
97
98
|
const extractSegment = (segment, pos, refSeq, clientId, start, end) => {
|
|
98
|
-
if (segment.seq !==
|
|
99
|
+
if (segment.seq !== constants_js_1.UnassignedSequenceNumber &&
|
|
99
100
|
segment.seq <= this.seq &&
|
|
100
101
|
(segment.removedSeq === undefined ||
|
|
101
|
-
segment.removedSeq ===
|
|
102
|
+
segment.removedSeq === constants_js_1.UnassignedSequenceNumber ||
|
|
102
103
|
segment.removedSeq > this.seq)) {
|
|
104
|
+
originalSegments += 1;
|
|
103
105
|
if (prev?.canAppend(segment) &&
|
|
104
|
-
(0,
|
|
106
|
+
(0, properties_js_1.matchProperties)(prev.properties, segment.properties)) {
|
|
105
107
|
prev = prev.clone();
|
|
106
108
|
prev.append(segment.clone());
|
|
107
109
|
}
|
|
@@ -114,7 +116,7 @@ class SnapshotLegacy {
|
|
|
114
116
|
}
|
|
115
117
|
return true;
|
|
116
118
|
};
|
|
117
|
-
this.mergeTree.mapRange(extractSegment, this.seq,
|
|
119
|
+
this.mergeTree.mapRange(extractSegment, this.seq, constants_js_1.NonCollabClient, undefined);
|
|
118
120
|
if (prev) {
|
|
119
121
|
segs.push(prev);
|
|
120
122
|
}
|
|
@@ -128,6 +130,16 @@ class SnapshotLegacy {
|
|
|
128
130
|
}
|
|
129
131
|
this.segments.push(segment);
|
|
130
132
|
});
|
|
133
|
+
// To reduce potential spam from this telemetry, we sample only a small
|
|
134
|
+
// percentage of summaries
|
|
135
|
+
if (Math.abs(originalSegments - segs.length) > 500 && Math.random() < 0.005) {
|
|
136
|
+
this.logger.sendTelemetryEvent({
|
|
137
|
+
eventName: "MergeTreeLegacySummarizeSegmentCount",
|
|
138
|
+
originalSegments,
|
|
139
|
+
segmentsAfterCombine: segs.length,
|
|
140
|
+
segmentsLen: this.segments.length,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
131
143
|
// We observed this.header.segmentsTotalLength < totalLength to happen in some cases
|
|
132
144
|
// When this condition happens, we might not write out all segments in getSeqLengthSegs()
|
|
133
145
|
// when writing out "body". Issue #1995 tracks following up on the core of the problem.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshotlegacy.js","sourceRoot":"","sources":["../src/snapshotlegacy.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { ITelemetryLoggerExt, createChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { IFluidSerializer } from \"@fluidframework/shared-object-base\";\nimport { ISummaryTreeWithStats } from \"@fluidframework/runtime-definitions\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { SummaryTreeBuilder } from \"@fluidframework/runtime-utils\";\nimport { NonCollabClient, UnassignedSequenceNumber } from \"./constants\";\nimport { ISegment } from \"./mergeTreeNodes\";\nimport { matchProperties } from \"./properties\";\nimport {\n\tJsonSegmentSpecs,\n\tMergeTreeChunkLegacy,\n\tserializeAsMinSupportedVersion,\n} from \"./snapshotChunks\";\nimport { MergeTree } from \"./mergeTree\";\n\ninterface SnapshotHeader {\n\tchunkCount?: number;\n\tsegmentsTotalLength: number;\n\tindexOffset?: number;\n\tsegmentsOffset?: number;\n\tseq: number;\n\t// TODO: Make 'minSeq' non-optional once the new snapshot format becomes the default?\n\t// (See https://github.com/microsoft/FluidFramework/issues/84)\n\tminSeq?: number;\n}\n\n/**\n * @internal\n */\nexport class SnapshotLegacy {\n\tpublic static readonly header = \"header\";\n\tpublic static readonly body = \"body\";\n\tprivate static readonly catchupOps = \"catchupOps\";\n\n\t// Split snapshot into two entries - headers (small) and body (overflow) for faster loading initial content\n\t// Please note that this number has no direct relationship to anything other than size of raw text (characters).\n\t// As we produce json for the blob (and then send over the wire compressed), this number\n\t// is really hard to correlate with any actual metric that matters (like bytes over the wire).\n\t// For test with small number of chunks it would be closer to blob size,\n\t// for very chunky text, blob size can easily be 4x-8x of that number.\n\tpublic static readonly sizeOfFirstChunk: number = 10000;\n\n\tprivate header: SnapshotHeader | undefined;\n\tprivate seq: number | undefined;\n\tprivate segments: ISegment[] | undefined;\n\tprivate readonly logger: ITelemetryLoggerExt;\n\tprivate readonly chunkSize: number;\n\n\tconstructor(\n\t\tpublic mergeTree: MergeTree,\n\t\tlogger: ITelemetryLoggerExt,\n\t\tpublic filename?: string,\n\t\tpublic onCompletion?: () => void,\n\t) {\n\t\tthis.logger = createChildLogger({ logger, namespace: \"Snapshot\" });\n\t\tthis.chunkSize =\n\t\t\tmergeTree?.options?.mergeTreeSnapshotChunkSize ?? SnapshotLegacy.sizeOfFirstChunk;\n\t}\n\n\tprivate getSeqLengthSegs(\n\t\tallSegments: ISegment[],\n\t\tapproxSequenceLength: number,\n\t\tstartIndex = 0,\n\t): MergeTreeChunkLegacy {\n\t\tconst segs: ISegment[] = [];\n\t\tlet sequenceLength = 0;\n\t\tlet segCount = 0;\n\t\tlet segsWithAttribution = 0;\n\t\twhile (\n\t\t\tsequenceLength < approxSequenceLength &&\n\t\t\tstartIndex + segCount < allSegments.length\n\t\t) {\n\t\t\tconst pseg = allSegments[startIndex + segCount];\n\t\t\tsegs.push(pseg);\n\t\t\tif (pseg.attribution) {\n\t\t\t\tsegsWithAttribution++;\n\t\t\t}\n\t\t\tsequenceLength += pseg.cachedLength;\n\t\t\tsegCount++;\n\t\t}\n\n\t\tassert(\n\t\t\tsegsWithAttribution === 0 || segsWithAttribution === segCount,\n\t\t\t0x4bf /* all or no segments should have attribution */,\n\t\t);\n\n\t\tconst attributionSerializer = this.mergeTree.attributionPolicy?.serializer;\n\t\tassert(\n\t\t\tsegsWithAttribution === 0 || attributionSerializer !== undefined,\n\t\t\t0x559 /* attribution serializer must be provided when there are segments with attribution. */,\n\t\t);\n\t\treturn {\n\t\t\tversion: undefined,\n\t\t\tchunkStartSegmentIndex: startIndex,\n\t\t\tchunkSegmentCount: segCount,\n\t\t\tchunkLengthChars: sequenceLength,\n\t\t\ttotalLengthChars: this.header!.segmentsTotalLength,\n\t\t\ttotalSegmentCount: allSegments.length,\n\t\t\tchunkSequenceNumber: this.header!.seq,\n\t\t\tsegmentTexts: segs.map((seg) => seg.toJSONObject() as JsonSegmentSpecs),\n\t\t\tattribution:\n\t\t\t\tsegsWithAttribution > 0\n\t\t\t\t\t? attributionSerializer?.serializeAttributionCollections(segs)\n\t\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Emits the snapshot to an ISummarizeResult. If provided the optional IFluidSerializer will be used when\n\t * serializing the summary data rather than JSON.stringify.\n\t */\n\temit(\n\t\tcatchUpMsgs: ISequencedDocumentMessage[],\n\t\tserializer: IFluidSerializer,\n\t\tbind: IFluidHandle,\n\t): ISummaryTreeWithStats {\n\t\tconst chunk1 = this.getSeqLengthSegs(this.segments!, this.chunkSize);\n\t\tlet length: number = chunk1.chunkLengthChars;\n\t\tlet segments: number = chunk1.chunkSegmentCount;\n\t\tconst builder = new SummaryTreeBuilder();\n\t\tbuilder.addBlob(\n\t\t\tSnapshotLegacy.header,\n\t\t\tserializeAsMinSupportedVersion(\n\t\t\t\tSnapshotLegacy.header,\n\t\t\t\tchunk1,\n\t\t\t\tthis.logger,\n\t\t\t\tthis.mergeTree.options,\n\t\t\t\tserializer,\n\t\t\t\tbind,\n\t\t\t),\n\t\t);\n\n\t\tif (chunk1.chunkSegmentCount < chunk1.totalSegmentCount!) {\n\t\t\tconst chunk2 = this.getSeqLengthSegs(\n\t\t\t\tthis.segments!,\n\t\t\t\tthis.header!.segmentsTotalLength,\n\t\t\t\tchunk1.chunkSegmentCount,\n\t\t\t);\n\t\t\tlength += chunk2.chunkLengthChars;\n\t\t\tsegments += chunk2.chunkSegmentCount;\n\t\t\tbuilder.addBlob(\n\t\t\t\tSnapshotLegacy.body,\n\t\t\t\tserializeAsMinSupportedVersion(\n\t\t\t\t\tSnapshotLegacy.body,\n\t\t\t\t\tchunk2,\n\t\t\t\t\tthis.logger,\n\t\t\t\t\tthis.mergeTree.options,\n\t\t\t\t\tserializer,\n\t\t\t\t\tbind,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tassert(\n\t\t\tlength === this.header!.segmentsTotalLength,\n\t\t\t0x05d /* \"emit: mismatch in segmentsTotalLength\" */,\n\t\t);\n\n\t\tassert(\n\t\t\tsegments === chunk1.totalSegmentCount,\n\t\t\t0x05e /* \"emit: mismatch in totalSegmentCount\" */,\n\t\t);\n\n\t\tif (catchUpMsgs !== undefined && catchUpMsgs.length > 0) {\n\t\t\t// Messages used to have a \"term\" property which has since been removed.\n\t\t\t// It is benign so it doesn't really need to be deleted here, but doing so permits snapshot tests\n\t\t\t// to pass with an exact match (and matching the updated definition of ISequencedDocumentMessage).\n\t\t\tcatchUpMsgs.forEach((message) => {\n\t\t\t\tdelete (message as any).term;\n\t\t\t});\n\t\t\tbuilder.addBlob(\n\t\t\t\tthis.mergeTree.options?.catchUpBlobName ?? SnapshotLegacy.catchupOps,\n\t\t\t\tserializer ? serializer.stringify(catchUpMsgs, bind) : JSON.stringify(catchUpMsgs),\n\t\t\t);\n\t\t}\n\n\t\treturn builder.getSummaryTree();\n\t}\n\n\textractSync() {\n\t\tconst collabWindow = this.mergeTree.collabWindow;\n\t\tthis.seq = collabWindow.minSeq;\n\t\tthis.header = {\n\t\t\tsegmentsTotalLength: this.mergeTree.getLength(\n\t\t\t\tthis.mergeTree.collabWindow.minSeq,\n\t\t\t\tNonCollabClient,\n\t\t\t),\n\t\t\tseq: this.mergeTree.collabWindow.minSeq,\n\t\t};\n\n\t\tconst segs: ISegment[] = [];\n\t\tlet prev: ISegment | undefined;\n\t\tconst extractSegment = (\n\t\t\tsegment: ISegment,\n\t\t\tpos: number,\n\t\t\trefSeq: number,\n\t\t\tclientId: number,\n\t\t\tstart: number | undefined,\n\t\t\tend: number | undefined,\n\t\t) => {\n\t\t\tif (\n\t\t\t\tsegment.seq !== UnassignedSequenceNumber &&\n\t\t\t\tsegment.seq! <= this.seq! &&\n\t\t\t\t(segment.removedSeq === undefined ||\n\t\t\t\t\tsegment.removedSeq === UnassignedSequenceNumber ||\n\t\t\t\t\tsegment.removedSeq > this.seq!)\n\t\t\t) {\n\t\t\t\tif (\n\t\t\t\t\tprev?.canAppend(segment) &&\n\t\t\t\t\tmatchProperties(prev.properties, segment.properties)\n\t\t\t\t) {\n\t\t\t\t\tprev = prev.clone();\n\t\t\t\t\tprev.append(segment.clone());\n\t\t\t\t} else {\n\t\t\t\t\tif (prev) {\n\t\t\t\t\t\tsegs.push(prev);\n\t\t\t\t\t}\n\t\t\t\t\tprev = segment;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tthis.mergeTree.mapRange(extractSegment, this.seq, NonCollabClient, undefined);\n\t\tif (prev) {\n\t\t\tsegs.push(prev);\n\t\t}\n\n\t\tthis.segments = [];\n\t\tlet totalLength: number = 0;\n\t\tsegs.map((segment) => {\n\t\t\ttotalLength += segment.cachedLength;\n\t\t\tif (segment.properties !== undefined && Object.keys(segment.properties).length === 0) {\n\t\t\t\tsegment.properties = undefined;\n\t\t\t\tsegment.propertyManager = undefined;\n\t\t\t}\n\t\t\tthis.segments!.push(segment);\n\t\t});\n\n\t\t// We observed this.header.segmentsTotalLength < totalLength to happen in some cases\n\t\t// When this condition happens, we might not write out all segments in getSeqLengthSegs()\n\t\t// when writing out \"body\". Issue #1995 tracks following up on the core of the problem.\n\t\t// In the meantime, this code makes sure we will write out all segments properly\n\n\t\tif (this.header.segmentsTotalLength !== totalLength) {\n\t\t\tthis.logger.sendErrorEvent({\n\t\t\t\teventName: \"SegmentsTotalLengthMismatch\",\n\t\t\t\ttotalLength,\n\t\t\t\tsegmentsTotalLength: this.header.segmentsTotalLength,\n\t\t\t});\n\t\t\tthis.header.segmentsTotalLength = totalLength;\n\t\t}\n\n\t\treturn this.segments;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"snapshotlegacy.js","sourceRoot":"","sources":["../src/snapshotlegacy.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { ITelemetryLoggerExt, createChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { IFluidSerializer } from \"@fluidframework/shared-object-base\";\nimport { ISummaryTreeWithStats } from \"@fluidframework/runtime-definitions\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { SummaryTreeBuilder } from \"@fluidframework/runtime-utils\";\nimport { NonCollabClient, UnassignedSequenceNumber } from \"./constants.js\";\nimport { ISegment } from \"./mergeTreeNodes.js\";\nimport { matchProperties } from \"./properties.js\";\nimport {\n\tJsonSegmentSpecs,\n\tMergeTreeChunkLegacy,\n\tserializeAsMinSupportedVersion,\n} from \"./snapshotChunks.js\";\nimport { MergeTree } from \"./mergeTree.js\";\n\ninterface SnapshotHeader {\n\tchunkCount?: number;\n\tsegmentsTotalLength: number;\n\tindexOffset?: number;\n\tsegmentsOffset?: number;\n\tseq: number;\n\t// TODO: Make 'minSeq' non-optional once the new snapshot format becomes the default?\n\t// (See https://github.com/microsoft/FluidFramework/issues/84)\n\tminSeq?: number;\n}\n\n/**\n * @internal\n */\nexport class SnapshotLegacy {\n\tpublic static readonly header = \"header\";\n\tpublic static readonly body = \"body\";\n\tprivate static readonly catchupOps = \"catchupOps\";\n\n\t// Split snapshot into two entries - headers (small) and body (overflow) for faster loading initial content\n\t// Please note that this number has no direct relationship to anything other than size of raw text (characters).\n\t// As we produce json for the blob (and then send over the wire compressed), this number\n\t// is really hard to correlate with any actual metric that matters (like bytes over the wire).\n\t// For test with small number of chunks it would be closer to blob size,\n\t// for very chunky text, blob size can easily be 4x-8x of that number.\n\tpublic static readonly sizeOfFirstChunk: number = 10000;\n\n\tprivate header: SnapshotHeader | undefined;\n\tprivate seq: number | undefined;\n\tprivate segments: ISegment[] | undefined;\n\tprivate readonly logger: ITelemetryLoggerExt;\n\tprivate readonly chunkSize: number;\n\n\tconstructor(\n\t\tpublic mergeTree: MergeTree,\n\t\tlogger: ITelemetryLoggerExt,\n\t\tpublic filename?: string,\n\t\tpublic onCompletion?: () => void,\n\t) {\n\t\tthis.logger = createChildLogger({ logger, namespace: \"Snapshot\" });\n\t\tthis.chunkSize =\n\t\t\tmergeTree?.options?.mergeTreeSnapshotChunkSize ?? SnapshotLegacy.sizeOfFirstChunk;\n\t}\n\n\tprivate getSeqLengthSegs(\n\t\tallSegments: ISegment[],\n\t\tapproxSequenceLength: number,\n\t\tstartIndex = 0,\n\t): MergeTreeChunkLegacy {\n\t\tconst segs: ISegment[] = [];\n\t\tlet sequenceLength = 0;\n\t\tlet segCount = 0;\n\t\tlet segsWithAttribution = 0;\n\t\twhile (\n\t\t\tsequenceLength < approxSequenceLength &&\n\t\t\tstartIndex + segCount < allSegments.length\n\t\t) {\n\t\t\tconst pseg = allSegments[startIndex + segCount];\n\t\t\tsegs.push(pseg);\n\t\t\tif (pseg.attribution) {\n\t\t\t\tsegsWithAttribution++;\n\t\t\t}\n\t\t\tsequenceLength += pseg.cachedLength;\n\t\t\tsegCount++;\n\t\t}\n\n\t\tassert(\n\t\t\tsegsWithAttribution === 0 || segsWithAttribution === segCount,\n\t\t\t0x4bf /* all or no segments should have attribution */,\n\t\t);\n\n\t\tconst attributionSerializer = this.mergeTree.attributionPolicy?.serializer;\n\t\tassert(\n\t\t\tsegsWithAttribution === 0 || attributionSerializer !== undefined,\n\t\t\t0x559 /* attribution serializer must be provided when there are segments with attribution. */,\n\t\t);\n\t\treturn {\n\t\t\tversion: undefined,\n\t\t\tchunkStartSegmentIndex: startIndex,\n\t\t\tchunkSegmentCount: segCount,\n\t\t\tchunkLengthChars: sequenceLength,\n\t\t\ttotalLengthChars: this.header!.segmentsTotalLength,\n\t\t\ttotalSegmentCount: allSegments.length,\n\t\t\tchunkSequenceNumber: this.header!.seq,\n\t\t\tsegmentTexts: segs.map((seg) => seg.toJSONObject() as JsonSegmentSpecs),\n\t\t\tattribution:\n\t\t\t\tsegsWithAttribution > 0\n\t\t\t\t\t? attributionSerializer?.serializeAttributionCollections(segs)\n\t\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Emits the snapshot to an ISummarizeResult. If provided the optional IFluidSerializer will be used when\n\t * serializing the summary data rather than JSON.stringify.\n\t */\n\temit(\n\t\tcatchUpMsgs: ISequencedDocumentMessage[],\n\t\tserializer: IFluidSerializer,\n\t\tbind: IFluidHandle,\n\t): ISummaryTreeWithStats {\n\t\tconst chunk1 = this.getSeqLengthSegs(this.segments!, this.chunkSize);\n\t\tlet length: number = chunk1.chunkLengthChars;\n\t\tlet segments: number = chunk1.chunkSegmentCount;\n\t\tconst builder = new SummaryTreeBuilder();\n\t\tbuilder.addBlob(\n\t\t\tSnapshotLegacy.header,\n\t\t\tserializeAsMinSupportedVersion(\n\t\t\t\tSnapshotLegacy.header,\n\t\t\t\tchunk1,\n\t\t\t\tthis.logger,\n\t\t\t\tthis.mergeTree.options,\n\t\t\t\tserializer,\n\t\t\t\tbind,\n\t\t\t),\n\t\t);\n\n\t\tif (chunk1.chunkSegmentCount < chunk1.totalSegmentCount!) {\n\t\t\tconst chunk2 = this.getSeqLengthSegs(\n\t\t\t\tthis.segments!,\n\t\t\t\tthis.header!.segmentsTotalLength,\n\t\t\t\tchunk1.chunkSegmentCount,\n\t\t\t);\n\t\t\tlength += chunk2.chunkLengthChars;\n\t\t\tsegments += chunk2.chunkSegmentCount;\n\t\t\tbuilder.addBlob(\n\t\t\t\tSnapshotLegacy.body,\n\t\t\t\tserializeAsMinSupportedVersion(\n\t\t\t\t\tSnapshotLegacy.body,\n\t\t\t\t\tchunk2,\n\t\t\t\t\tthis.logger,\n\t\t\t\t\tthis.mergeTree.options,\n\t\t\t\t\tserializer,\n\t\t\t\t\tbind,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tassert(\n\t\t\tlength === this.header!.segmentsTotalLength,\n\t\t\t0x05d /* \"emit: mismatch in segmentsTotalLength\" */,\n\t\t);\n\n\t\tassert(\n\t\t\tsegments === chunk1.totalSegmentCount,\n\t\t\t0x05e /* \"emit: mismatch in totalSegmentCount\" */,\n\t\t);\n\n\t\tif (catchUpMsgs !== undefined && catchUpMsgs.length > 0) {\n\t\t\t// Messages used to have a \"term\" property which has since been removed.\n\t\t\t// It is benign so it doesn't really need to be deleted here, but doing so permits snapshot tests\n\t\t\t// to pass with an exact match (and matching the updated definition of ISequencedDocumentMessage).\n\t\t\tcatchUpMsgs.forEach((message) => {\n\t\t\t\tdelete (message as any).term;\n\t\t\t});\n\t\t\tbuilder.addBlob(\n\t\t\t\tthis.mergeTree.options?.catchUpBlobName ?? SnapshotLegacy.catchupOps,\n\t\t\t\tserializer ? serializer.stringify(catchUpMsgs, bind) : JSON.stringify(catchUpMsgs),\n\t\t\t);\n\t\t}\n\n\t\treturn builder.getSummaryTree();\n\t}\n\n\textractSync() {\n\t\tconst collabWindow = this.mergeTree.collabWindow;\n\t\tthis.seq = collabWindow.minSeq;\n\t\tthis.header = {\n\t\t\tsegmentsTotalLength: this.mergeTree.getLength(\n\t\t\t\tthis.mergeTree.collabWindow.minSeq,\n\t\t\t\tNonCollabClient,\n\t\t\t),\n\t\t\tseq: this.mergeTree.collabWindow.minSeq,\n\t\t};\n\n\t\tlet originalSegments = 0;\n\n\t\tconst segs: ISegment[] = [];\n\t\tlet prev: ISegment | undefined;\n\t\tconst extractSegment = (\n\t\t\tsegment: ISegment,\n\t\t\tpos: number,\n\t\t\trefSeq: number,\n\t\t\tclientId: number,\n\t\t\tstart: number | undefined,\n\t\t\tend: number | undefined,\n\t\t) => {\n\t\t\tif (\n\t\t\t\tsegment.seq !== UnassignedSequenceNumber &&\n\t\t\t\tsegment.seq! <= this.seq! &&\n\t\t\t\t(segment.removedSeq === undefined ||\n\t\t\t\t\tsegment.removedSeq === UnassignedSequenceNumber ||\n\t\t\t\t\tsegment.removedSeq > this.seq!)\n\t\t\t) {\n\t\t\t\toriginalSegments += 1;\n\t\t\t\tif (\n\t\t\t\t\tprev?.canAppend(segment) &&\n\t\t\t\t\tmatchProperties(prev.properties, segment.properties)\n\t\t\t\t) {\n\t\t\t\t\tprev = prev.clone();\n\t\t\t\t\tprev.append(segment.clone());\n\t\t\t\t} else {\n\t\t\t\t\tif (prev) {\n\t\t\t\t\t\tsegs.push(prev);\n\t\t\t\t\t}\n\t\t\t\t\tprev = segment;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tthis.mergeTree.mapRange(extractSegment, this.seq, NonCollabClient, undefined);\n\t\tif (prev) {\n\t\t\tsegs.push(prev);\n\t\t}\n\n\t\tthis.segments = [];\n\t\tlet totalLength: number = 0;\n\t\tsegs.map((segment) => {\n\t\t\ttotalLength += segment.cachedLength;\n\t\t\tif (segment.properties !== undefined && Object.keys(segment.properties).length === 0) {\n\t\t\t\tsegment.properties = undefined;\n\t\t\t\tsegment.propertyManager = undefined;\n\t\t\t}\n\t\t\tthis.segments!.push(segment);\n\t\t});\n\n\t\t// To reduce potential spam from this telemetry, we sample only a small\n\t\t// percentage of summaries\n\t\tif (Math.abs(originalSegments - segs.length) > 500 && Math.random() < 0.005) {\n\t\t\tthis.logger.sendTelemetryEvent({\n\t\t\t\teventName: \"MergeTreeLegacySummarizeSegmentCount\",\n\t\t\t\toriginalSegments,\n\t\t\t\tsegmentsAfterCombine: segs.length,\n\t\t\t\tsegmentsLen: this.segments.length,\n\t\t\t});\n\t\t}\n\n\t\t// We observed this.header.segmentsTotalLength < totalLength to happen in some cases\n\t\t// When this condition happens, we might not write out all segments in getSeqLengthSegs()\n\t\t// when writing out \"body\". Issue #1995 tracks following up on the core of the problem.\n\t\t// In the meantime, this code makes sure we will write out all segments properly\n\n\t\tif (this.header.segmentsTotalLength !== totalLength) {\n\t\t\tthis.logger.sendErrorEvent({\n\t\t\t\teventName: \"SegmentsTotalLengthMismatch\",\n\t\t\t\ttotalLength,\n\t\t\t\tsegmentsTotalLength: this.header.segmentsTotalLength,\n\t\t\t});\n\t\t\tthis.header.segmentsTotalLength = totalLength;\n\t\t}\n\n\t\treturn this.segments;\n\t}\n}\n"]}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { LocalReferencePosition } from "./localReference";
|
|
6
|
-
import { ISegment } from "./mergeTreeNodes";
|
|
7
|
-
import { SortedSet } from "./sortedSet";
|
|
5
|
+
import { LocalReferencePosition } from "./localReference.js";
|
|
6
|
+
import { ISegment } from "./mergeTreeNodes.js";
|
|
7
|
+
import { SortedSet } from "./sortedSet.js";
|
|
8
8
|
/**
|
|
9
9
|
* @deprecated This functionality was not meant to be exported and will be removed in a future release
|
|
10
10
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortedSegmentSet.d.ts","sourceRoot":"","sources":["../src/sortedSegmentSet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sortedSegmentSet.d.ts","sourceRoot":"","sources":["../src/sortedSegmentSet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC7B,QAAQ,GACR,sBAAsB,GACtB;IAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;AAElC;;;;;;;;;;;;GAYG;AAEH,qBAAa,gBAAgB,CAAC,CAAC,SAAS,oBAAoB,GAAG,QAAQ,CAAE,SAAQ,SAAS,CACzF,CAAC,EACD,MAAM,CACN;IACA,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAmBjC,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAqDvE"}
|
package/dist/sortedSegmentSet.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.SortedSegmentSet = void 0;
|
|
8
8
|
// eslint-disable-next-line import/no-deprecated
|
|
9
|
-
const
|
|
9
|
+
const sortedSet_js_1 = require("./sortedSet.js");
|
|
10
10
|
/**
|
|
11
11
|
* Stores a unique and sorted set of segments, or objects with segments
|
|
12
12
|
*
|
|
@@ -21,14 +21,16 @@ const sortedSet_1 = require("./sortedSet");
|
|
|
21
21
|
* @internal
|
|
22
22
|
*/
|
|
23
23
|
// eslint-disable-next-line import/no-deprecated
|
|
24
|
-
class SortedSegmentSet extends
|
|
24
|
+
class SortedSegmentSet extends sortedSet_js_1.SortedSet {
|
|
25
25
|
getKey(item) {
|
|
26
26
|
const maybeRef = item;
|
|
27
27
|
if (maybeRef.getSegment !== undefined && maybeRef.isLeaf?.() === false) {
|
|
28
28
|
const lref = maybeRef;
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
// If the reference position has no associated segment, assign it a sentinel value.
|
|
30
|
+
// The particular value for comparison doesn't matter because `findItemPosition` tolerates
|
|
31
|
+
// elements with duplicate keys (as it must, since local references use the same key as their segment).
|
|
32
|
+
// All that matters is that it's consistent.
|
|
33
|
+
return lref.getSegment()?.ordinal ?? "";
|
|
32
34
|
}
|
|
33
35
|
const maybeObject = item;
|
|
34
36
|
if (maybeObject?.segment) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortedSegmentSet.js","sourceRoot":"","sources":["../src/sortedSegmentSet.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,gDAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"sortedSegmentSet.js","sourceRoot":"","sources":["../src/sortedSegmentSet.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { LocalReferencePosition } from \"./localReference.js\";\nimport { ISegment } from \"./mergeTreeNodes.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { SortedSet } from \"./sortedSet.js\";\n\n/**\n * @deprecated This functionality was not meant to be exported and will be removed in a future release\n * @internal\n */\nexport type SortedSegmentSetItem =\n\t| ISegment\n\t| LocalReferencePosition\n\t| { readonly segment: ISegment };\n\n/**\n * Stores a unique and sorted set of segments, or objects with segments\n *\n * This differs from a normal sorted set in that the keys are not fixed.\n * The segments are sorted via their ordinals which can change as the merge tree is modified.\n * Even though the values of the ordinals can change their ordering and uniqueness cannot, so the order of a set of\n * segments ordered by their ordinals will always have the same order even if the ordinal values on\n * the segments changes. This invariant allows us to ensure the segments stay\n * ordered and unique, and that new segments can be inserted into that order.\n *\n * @deprecated This functionality was not meant to be exported and will be removed in a future release\n * @internal\n */\n// eslint-disable-next-line import/no-deprecated\nexport class SortedSegmentSet<T extends SortedSegmentSetItem = ISegment> extends SortedSet<\n\tT,\n\tstring\n> {\n\tprotected getKey(item: T): string {\n\t\tconst maybeRef = item as Partial<LocalReferencePosition>;\n\t\tif (maybeRef.getSegment !== undefined && maybeRef.isLeaf?.() === false) {\n\t\t\tconst lref = maybeRef as LocalReferencePosition;\n\t\t\t// If the reference position has no associated segment, assign it a sentinel value.\n\t\t\t// The particular value for comparison doesn't matter because `findItemPosition` tolerates\n\t\t\t// elements with duplicate keys (as it must, since local references use the same key as their segment).\n\t\t\t// All that matters is that it's consistent.\n\t\t\treturn lref.getSegment()?.ordinal ?? \"\";\n\t\t}\n\t\tconst maybeObject = item as { readonly segment: ISegment };\n\t\tif (maybeObject?.segment) {\n\t\t\treturn maybeObject.segment.ordinal;\n\t\t}\n\n\t\tconst maybeSegment = item as ISegment;\n\t\treturn maybeSegment.ordinal;\n\t}\n\n\tprotected findItemPosition(item: T): { exists: boolean; index: number } {\n\t\tif (this.keySortedItems.length === 0) {\n\t\t\treturn { exists: false, index: 0 };\n\t\t}\n\t\tlet start = 0;\n\t\tlet end = this.keySortedItems.length - 1;\n\t\tconst itemKey = this.getKey(item);\n\t\tlet index = -1;\n\n\t\twhile (start <= end) {\n\t\t\tindex = start + Math.floor((end - start) / 2);\n\t\t\tconst indexKey = this.getKey(this.keySortedItems[index]);\n\t\t\tif (indexKey > itemKey) {\n\t\t\t\tif (start === index) {\n\t\t\t\t\treturn { exists: false, index };\n\t\t\t\t}\n\t\t\t\tend = index - 1;\n\t\t\t} else if (indexKey < itemKey) {\n\t\t\t\tif (index === end) {\n\t\t\t\t\treturn { exists: false, index: index + 1 };\n\t\t\t\t}\n\t\t\t\tstart = index + 1;\n\t\t\t} else if (indexKey === itemKey) {\n\t\t\t\t// at this point we've found the key of the item\n\t\t\t\t// so we need to find the index of the item instance\n\t\t\t\t//\n\t\t\t\tif (item === this.keySortedItems[index]) {\n\t\t\t\t\treturn { exists: true, index };\n\t\t\t\t}\n\t\t\t\tfor (\n\t\t\t\t\tlet b = index - 1;\n\t\t\t\t\tb >= 0 && this.getKey(this.keySortedItems[b]) === itemKey;\n\t\t\t\t\tb--\n\t\t\t\t) {\n\t\t\t\t\tif (this.keySortedItems[b] === item) {\n\t\t\t\t\t\treturn { exists: true, index: b };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (\n\t\t\t\t\tindex + 1;\n\t\t\t\t\tindex < this.keySortedItems.length &&\n\t\t\t\t\tthis.getKey(this.keySortedItems[index]) === itemKey;\n\t\t\t\t\tindex++\n\t\t\t\t) {\n\t\t\t\t\tif (this.keySortedItems[index] === item) {\n\t\t\t\t\t\treturn { exists: true, index };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { exists: false, index };\n\t\t\t}\n\t\t}\n\t\treturn { exists: false, index };\n\t}\n}\n"]}
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const benchmark_1 = require("@fluid-tools/benchmark");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
8
|
+
const mergeTree_js_1 = require("../mergeTree.js");
|
|
9
|
+
const ops_js_1 = require("../ops.js");
|
|
10
|
+
const testUtils_js_1 = require("./testUtils.js");
|
|
11
11
|
function constructTree(numOfSegments) {
|
|
12
|
-
const mergeTree = new
|
|
12
|
+
const mergeTree = new mergeTree_js_1.MergeTree();
|
|
13
13
|
for (let i = 0; i < numOfSegments; i++) {
|
|
14
|
-
(0,
|
|
14
|
+
(0, testUtils_js_1.insertText)({
|
|
15
15
|
mergeTree,
|
|
16
16
|
pos: 0,
|
|
17
17
|
refSeq: i,
|
|
@@ -19,7 +19,7 @@ function constructTree(numOfSegments) {
|
|
|
19
19
|
seq: i,
|
|
20
20
|
text: "a",
|
|
21
21
|
props: undefined,
|
|
22
|
-
opArgs: { op: { type:
|
|
22
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.INSERT } },
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
return mergeTree;
|
|
@@ -30,8 +30,8 @@ describe("MergeTree insertion", () => {
|
|
|
30
30
|
type: benchmark_1.BenchmarkType.Measurement,
|
|
31
31
|
title: "insert into empty tree",
|
|
32
32
|
benchmarkFn: () => {
|
|
33
|
-
const emptyTree = new
|
|
34
|
-
(0,
|
|
33
|
+
const emptyTree = new mergeTree_js_1.MergeTree();
|
|
34
|
+
(0, testUtils_js_1.insertText)({
|
|
35
35
|
mergeTree: emptyTree,
|
|
36
36
|
pos: 0,
|
|
37
37
|
refSeq: 0,
|
|
@@ -39,7 +39,7 @@ describe("MergeTree insertion", () => {
|
|
|
39
39
|
seq: 0,
|
|
40
40
|
text: "a",
|
|
41
41
|
props: undefined,
|
|
42
|
-
opArgs: { op: { type:
|
|
42
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.INSERT } },
|
|
43
43
|
});
|
|
44
44
|
},
|
|
45
45
|
});
|
|
@@ -49,7 +49,7 @@ describe("MergeTree insertion", () => {
|
|
|
49
49
|
title: "insert at start of large tree",
|
|
50
50
|
benchmarkFn: () => {
|
|
51
51
|
for (let i = TREE_SIZE; i < TREE_SIZE + 25; i++) {
|
|
52
|
-
(0,
|
|
52
|
+
(0, testUtils_js_1.insertText)({
|
|
53
53
|
mergeTree: startTree,
|
|
54
54
|
pos: 0,
|
|
55
55
|
refSeq: i,
|
|
@@ -57,7 +57,7 @@ describe("MergeTree insertion", () => {
|
|
|
57
57
|
seq: i + 1,
|
|
58
58
|
text: "a",
|
|
59
59
|
props: undefined,
|
|
60
|
-
opArgs: { op: { type:
|
|
60
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.INSERT } },
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
},
|
|
@@ -71,7 +71,7 @@ describe("MergeTree insertion", () => {
|
|
|
71
71
|
title: "insert at middle of large tree",
|
|
72
72
|
benchmarkFn: () => {
|
|
73
73
|
for (let i = TREE_SIZE; i < TREE_SIZE + 25; i++) {
|
|
74
|
-
(0,
|
|
74
|
+
(0, testUtils_js_1.insertText)({
|
|
75
75
|
mergeTree: middleTree,
|
|
76
76
|
pos: TREE_SIZE / 2,
|
|
77
77
|
refSeq: i,
|
|
@@ -79,7 +79,7 @@ describe("MergeTree insertion", () => {
|
|
|
79
79
|
seq: i + 1,
|
|
80
80
|
text: "a",
|
|
81
81
|
props: undefined,
|
|
82
|
-
opArgs: { op: { type:
|
|
82
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.INSERT } },
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
},
|
|
@@ -93,7 +93,7 @@ describe("MergeTree insertion", () => {
|
|
|
93
93
|
title: "insert at end of large tree",
|
|
94
94
|
benchmarkFn: () => {
|
|
95
95
|
for (let i = TREE_SIZE; i < TREE_SIZE + 25; i++) {
|
|
96
|
-
(0,
|
|
96
|
+
(0, testUtils_js_1.insertText)({
|
|
97
97
|
mergeTree: endTree,
|
|
98
98
|
pos: i,
|
|
99
99
|
refSeq: i,
|
|
@@ -101,7 +101,7 @@ describe("MergeTree insertion", () => {
|
|
|
101
101
|
seq: i + 1,
|
|
102
102
|
text: "a",
|
|
103
103
|
props: undefined,
|
|
104
|
-
opArgs: { op: { type:
|
|
104
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.INSERT } },
|
|
105
105
|
});
|
|
106
106
|
}
|
|
107
107
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Insertion.perf.spec.js","sourceRoot":"","sources":["../../src/test/Insertion.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,sDAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"Insertion.perf.spec.js","sourceRoot":"","sources":["../../src/test/Insertion.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,sDAAkE;AAClE,kDAA4C;AAC5C,sCAA+C;AAC/C,iDAA4C;AAE5C,SAAS,aAAa,CAAC,aAAqB;IAC3C,MAAM,SAAS,GAAG,IAAI,wBAAS,EAAE,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;QACvC,IAAA,yBAAU,EAAC;YACV,SAAS;YACT,GAAG,EAAE,CAAC;YACN,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,CAAC;YACX,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;SACnD,CAAC,CAAC;KACH;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAW,IAAK,CAAC;AAEhC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACpC,IAAA,qBAAS,EAAC;QACT,IAAI,EAAE,yBAAa,CAAC,WAAW;QAC/B,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,GAAG,EAAE;YACjB,MAAM,SAAS,GAAG,IAAI,wBAAS,EAAE,CAAC;YAClC,IAAA,yBAAU,EAAC;gBACV,SAAS,EAAE,SAAS;gBACpB,GAAG,EAAE,CAAC;gBACN,MAAM,EAAE,CAAC;gBACT,QAAQ,EAAE,CAAC;gBACX,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;aACnD,CAAC,CAAC;QACJ,CAAC;KACD,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACzC,IAAA,qBAAS,EAAC;QACT,IAAI,EAAE,yBAAa,CAAC,WAAW;QAC/B,KAAK,EAAE,+BAA+B;QACtC,WAAW,EAAE,GAAG,EAAE;YACjB,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gBAChD,IAAA,yBAAU,EAAC;oBACV,SAAS,EAAE,SAAS;oBACpB,GAAG,EAAE,CAAC;oBACN,MAAM,EAAE,CAAC;oBACT,QAAQ,EAAE,CAAC;oBACX,GAAG,EAAE,CAAC,GAAG,CAAC;oBACV,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;iBACnD,CAAC,CAAC;aACH;QACF,CAAC;QACD,eAAe,EAAE,GAAG,EAAE;YACrB,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;KACD,CAAC,CAAC;IAEH,IAAI,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAA,qBAAS,EAAC;QACT,IAAI,EAAE,yBAAa,CAAC,WAAW;QAC/B,KAAK,EAAE,gCAAgC;QACvC,WAAW,EAAE,GAAG,EAAE;YACjB,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gBAChD,IAAA,yBAAU,EAAC;oBACV,SAAS,EAAE,UAAU;oBACrB,GAAG,EAAE,SAAS,GAAG,CAAC;oBAClB,MAAM,EAAE,CAAC;oBACT,QAAQ,EAAE,CAAC;oBACX,GAAG,EAAE,CAAC,GAAG,CAAC;oBACV,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;iBACnD,CAAC,CAAC;aACH;QACF,CAAC;QACD,eAAe,EAAE,GAAG,EAAE;YACrB,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;KACD,CAAC,CAAC;IAEH,IAAI,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACvC,IAAA,qBAAS,EAAC;QACT,IAAI,EAAE,yBAAa,CAAC,WAAW;QAC/B,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,GAAG,EAAE;YACjB,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gBAChD,IAAA,yBAAU,EAAC;oBACV,SAAS,EAAE,OAAO;oBAClB,GAAG,EAAE,CAAC;oBACN,MAAM,EAAE,CAAC;oBACT,QAAQ,EAAE,CAAC;oBACX,GAAG,EAAE,CAAC,GAAG,CAAC;oBACV,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;iBACnD,CAAC,CAAC;aACH;QACF,CAAC;QACD,eAAe,EAAE,GAAG,EAAE;YACrB,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;KACD,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { benchmark, BenchmarkType } from \"@fluid-tools/benchmark\";\nimport { MergeTree } from \"../mergeTree.js\";\nimport { MergeTreeDeltaType } from \"../ops.js\";\nimport { insertText } from \"./testUtils.js\";\n\nfunction constructTree(numOfSegments: number): MergeTree {\n\tconst mergeTree = new MergeTree();\n\tfor (let i = 0; i < numOfSegments; i++) {\n\t\tinsertText({\n\t\t\tmergeTree,\n\t\t\tpos: 0,\n\t\t\trefSeq: i,\n\t\t\tclientId: 0,\n\t\t\tseq: i,\n\t\t\ttext: \"a\",\n\t\t\tprops: undefined,\n\t\t\topArgs: { op: { type: MergeTreeDeltaType.INSERT } },\n\t\t});\n\t}\n\treturn mergeTree;\n}\n\nconst TREE_SIZE: number = 7_500;\n\ndescribe(\"MergeTree insertion\", () => {\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"insert into empty tree\",\n\t\tbenchmarkFn: () => {\n\t\t\tconst emptyTree = new MergeTree();\n\t\t\tinsertText({\n\t\t\t\tmergeTree: emptyTree,\n\t\t\t\tpos: 0,\n\t\t\t\trefSeq: 0,\n\t\t\t\tclientId: 0,\n\t\t\t\tseq: 0,\n\t\t\t\ttext: \"a\",\n\t\t\t\tprops: undefined,\n\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.INSERT } },\n\t\t\t});\n\t\t},\n\t});\n\n\tlet startTree = constructTree(TREE_SIZE);\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"insert at start of large tree\",\n\t\tbenchmarkFn: () => {\n\t\t\tfor (let i = TREE_SIZE; i < TREE_SIZE + 25; i++) {\n\t\t\t\tinsertText({\n\t\t\t\t\tmergeTree: startTree,\n\t\t\t\t\tpos: 0,\n\t\t\t\t\trefSeq: i,\n\t\t\t\t\tclientId: 0,\n\t\t\t\t\tseq: i + 1,\n\t\t\t\t\ttext: \"a\",\n\t\t\t\t\tprops: undefined,\n\t\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.INSERT } },\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tbeforeEachBatch: () => {\n\t\t\tstartTree = constructTree(TREE_SIZE);\n\t\t},\n\t});\n\n\tlet middleTree = constructTree(TREE_SIZE);\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"insert at middle of large tree\",\n\t\tbenchmarkFn: () => {\n\t\t\tfor (let i = TREE_SIZE; i < TREE_SIZE + 25; i++) {\n\t\t\t\tinsertText({\n\t\t\t\t\tmergeTree: middleTree,\n\t\t\t\t\tpos: TREE_SIZE / 2,\n\t\t\t\t\trefSeq: i,\n\t\t\t\t\tclientId: 0,\n\t\t\t\t\tseq: i + 1,\n\t\t\t\t\ttext: \"a\",\n\t\t\t\t\tprops: undefined,\n\t\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.INSERT } },\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tbeforeEachBatch: () => {\n\t\t\tmiddleTree = constructTree(TREE_SIZE);\n\t\t},\n\t});\n\n\tlet endTree = constructTree(TREE_SIZE);\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"insert at end of large tree\",\n\t\tbenchmarkFn: () => {\n\t\t\tfor (let i = TREE_SIZE; i < TREE_SIZE + 25; i++) {\n\t\t\t\tinsertText({\n\t\t\t\t\tmergeTree: endTree,\n\t\t\t\t\tpos: i,\n\t\t\t\t\trefSeq: i,\n\t\t\t\t\tclientId: 0,\n\t\t\t\t\tseq: i + 1,\n\t\t\t\t\ttext: \"a\",\n\t\t\t\t\tprops: undefined,\n\t\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.INSERT } },\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tbeforeEachBatch: () => {\n\t\t\tendTree = constructTree(TREE_SIZE);\n\t\t},\n\t});\n});\n"]}
|
|
@@ -5,24 +5,24 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const benchmark_1 = require("@fluid-tools/benchmark");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
8
|
+
const ops_js_1 = require("../ops.js");
|
|
9
|
+
const mergeTree_js_1 = require("../mergeTree.js");
|
|
10
|
+
const testUtils_js_1 = require("./testUtils.js");
|
|
11
11
|
describe("MergeTree partial lengths", () => {
|
|
12
|
-
const originalIncrementalUpdate =
|
|
12
|
+
const originalIncrementalUpdate = mergeTree_js_1.MergeTree.options.incrementalUpdate;
|
|
13
13
|
for (const incremental of [true, false]) {
|
|
14
14
|
(0, benchmark_1.benchmark)({
|
|
15
15
|
type: benchmark_1.BenchmarkType.Measurement,
|
|
16
16
|
title: `incremental updates = ${incremental}`,
|
|
17
17
|
category: "partial lengths",
|
|
18
18
|
before: () => {
|
|
19
|
-
|
|
19
|
+
mergeTree_js_1.MergeTree.options.incrementalUpdate = incremental;
|
|
20
20
|
},
|
|
21
21
|
benchmarkFn: () => {
|
|
22
|
-
const mergeTree = new
|
|
22
|
+
const mergeTree = new mergeTree_js_1.MergeTree();
|
|
23
23
|
let i = 1;
|
|
24
24
|
for (; i < 1001; i++) {
|
|
25
|
-
(0,
|
|
25
|
+
(0, testUtils_js_1.insertText)({
|
|
26
26
|
mergeTree,
|
|
27
27
|
pos: 0,
|
|
28
28
|
refSeq: i,
|
|
@@ -30,23 +30,23 @@ describe("MergeTree partial lengths", () => {
|
|
|
30
30
|
seq: i,
|
|
31
31
|
text: "a",
|
|
32
32
|
props: undefined,
|
|
33
|
-
opArgs: { op: { type:
|
|
33
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.INSERT } },
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
for (; i < 2001; i++) {
|
|
37
|
-
(0,
|
|
37
|
+
(0, testUtils_js_1.markRangeRemoved)({
|
|
38
38
|
mergeTree,
|
|
39
39
|
start: i - 1001,
|
|
40
40
|
end: i - 1000,
|
|
41
41
|
refSeq: i,
|
|
42
42
|
clientId: 0,
|
|
43
43
|
seq: i,
|
|
44
|
-
opArgs: { op: { type:
|
|
44
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
|
|
45
45
|
overwrite: false,
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
for (; i < 3001; i++) {
|
|
49
|
-
(0,
|
|
49
|
+
(0, testUtils_js_1.insertText)({
|
|
50
50
|
mergeTree,
|
|
51
51
|
pos: 0,
|
|
52
52
|
refSeq: i,
|
|
@@ -54,12 +54,12 @@ describe("MergeTree partial lengths", () => {
|
|
|
54
54
|
seq: i,
|
|
55
55
|
text: "a",
|
|
56
56
|
props: undefined,
|
|
57
|
-
opArgs: { op: { type:
|
|
57
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.INSERT } },
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
after: () => {
|
|
62
|
-
|
|
62
|
+
mergeTree_js_1.MergeTree.options.incrementalUpdate = originalIncrementalUpdate;
|
|
63
63
|
},
|
|
64
64
|
});
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartialLengths.perf.spec.js","sourceRoot":"","sources":["../../src/test/PartialLengths.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,sDAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"PartialLengths.perf.spec.js","sourceRoot":"","sources":["../../src/test/PartialLengths.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,sDAAkE;AAClE,sCAA+C;AAC/C,kDAA4C;AAC5C,iDAA8D;AAE9D,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,MAAM,yBAAyB,GAAY,wBAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAE/E,KAAK,MAAM,WAAW,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;QACxC,IAAA,qBAAS,EAAC;YACT,IAAI,EAAE,yBAAa,CAAC,WAAW;YAC/B,KAAK,EAAE,yBAAyB,WAAW,EAAE;YAC7C,QAAQ,EAAE,iBAAiB;YAC3B,MAAM,EAAE,GAAG,EAAE;gBACZ,wBAAS,CAAC,OAAO,CAAC,iBAAiB,GAAG,WAAW,CAAC;YACnD,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,MAAM,SAAS,GAAG,IAAI,wBAAS,EAAE,CAAC;gBAElC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;oBACrB,IAAA,yBAAU,EAAC;wBACV,SAAS;wBACT,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,CAAC;wBACT,QAAQ,EAAE,CAAC;wBACX,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,GAAG;wBACT,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;qBACnD,CAAC,CAAC;iBACH;gBAED,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;oBACrB,IAAA,+BAAgB,EAAC;wBAChB,SAAS;wBACT,KAAK,EAAE,CAAC,GAAG,IAAI;wBACf,GAAG,EAAE,CAAC,GAAG,IAAI;wBACb,MAAM,EAAE,CAAC;wBACT,QAAQ,EAAE,CAAC;wBACX,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;wBACnD,SAAS,EAAE,KAAK;qBAChB,CAAC,CAAC;iBACH;gBAED,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;oBACrB,IAAA,yBAAU,EAAC;wBACV,SAAS;wBACT,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,CAAC;wBACT,QAAQ,EAAE,CAAC;wBACX,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,GAAG;wBACT,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;qBACnD,CAAC,CAAC;iBACH;YACF,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACX,wBAAS,CAAC,OAAO,CAAC,iBAAiB,GAAG,yBAAyB,CAAC;YACjE,CAAC;SACD,CAAC,CAAC;KACH;AACF,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { benchmark, BenchmarkType } from \"@fluid-tools/benchmark\";\nimport { MergeTreeDeltaType } from \"../ops.js\";\nimport { MergeTree } from \"../mergeTree.js\";\nimport { insertText, markRangeRemoved } from \"./testUtils.js\";\n\ndescribe(\"MergeTree partial lengths\", () => {\n\tconst originalIncrementalUpdate: boolean = MergeTree.options.incrementalUpdate;\n\n\tfor (const incremental of [true, false]) {\n\t\tbenchmark({\n\t\t\ttype: BenchmarkType.Measurement,\n\t\t\ttitle: `incremental updates = ${incremental}`,\n\t\t\tcategory: \"partial lengths\",\n\t\t\tbefore: () => {\n\t\t\t\tMergeTree.options.incrementalUpdate = incremental;\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tconst mergeTree = new MergeTree();\n\n\t\t\t\tlet i = 1;\n\t\t\t\tfor (; i < 1001; i++) {\n\t\t\t\t\tinsertText({\n\t\t\t\t\t\tmergeTree,\n\t\t\t\t\t\tpos: 0,\n\t\t\t\t\t\trefSeq: i,\n\t\t\t\t\t\tclientId: 0,\n\t\t\t\t\t\tseq: i,\n\t\t\t\t\t\ttext: \"a\",\n\t\t\t\t\t\tprops: undefined,\n\t\t\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.INSERT } },\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (; i < 2001; i++) {\n\t\t\t\t\tmarkRangeRemoved({\n\t\t\t\t\t\tmergeTree,\n\t\t\t\t\t\tstart: i - 1001,\n\t\t\t\t\t\tend: i - 1000,\n\t\t\t\t\t\trefSeq: i,\n\t\t\t\t\t\tclientId: 0,\n\t\t\t\t\t\tseq: i,\n\t\t\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t\t\t\toverwrite: false,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (; i < 3001; i++) {\n\t\t\t\t\tinsertText({\n\t\t\t\t\t\tmergeTree,\n\t\t\t\t\t\tpos: 0,\n\t\t\t\t\t\trefSeq: i,\n\t\t\t\t\t\tclientId: 0,\n\t\t\t\t\t\tseq: i,\n\t\t\t\t\t\ttext: \"a\",\n\t\t\t\t\t\tprops: undefined,\n\t\t\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.INSERT } },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tafter: () => {\n\t\t\t\tMergeTree.options.incrementalUpdate = originalIncrementalUpdate;\n\t\t\t},\n\t\t});\n\t}\n});\n"]}
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const benchmark_1 = require("@fluid-tools/benchmark");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
8
|
+
const ops_js_1 = require("../ops.js");
|
|
9
|
+
const revertibles_js_1 = require("../revertibles.js");
|
|
10
|
+
const testUtils_js_1 = require("./testUtils.js");
|
|
11
|
+
const snapshot_utils_js_1 = require("./snapshot.utils.js");
|
|
12
12
|
describe("MergeTree remove", () => {
|
|
13
13
|
let summary;
|
|
14
14
|
(0, benchmark_1.benchmark)({
|
|
@@ -19,7 +19,7 @@ describe("MergeTree remove", () => {
|
|
|
19
19
|
title: "baseline summary load",
|
|
20
20
|
category: "remove",
|
|
21
21
|
before: () => {
|
|
22
|
-
const str = new
|
|
22
|
+
const str = new snapshot_utils_js_1.TestString("id", {});
|
|
23
23
|
for (let i = 0; i < 1000; i++) {
|
|
24
24
|
str.append("a", false);
|
|
25
25
|
}
|
|
@@ -27,7 +27,7 @@ describe("MergeTree remove", () => {
|
|
|
27
27
|
summary = str.getSummary();
|
|
28
28
|
},
|
|
29
29
|
benchmarkFnAsync: async () => {
|
|
30
|
-
await (0,
|
|
30
|
+
await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
31
31
|
},
|
|
32
32
|
});
|
|
33
33
|
(0, benchmark_1.benchmark)({
|
|
@@ -35,7 +35,7 @@ describe("MergeTree remove", () => {
|
|
|
35
35
|
title: "remove large range of large tree",
|
|
36
36
|
category: "remove",
|
|
37
37
|
before: () => {
|
|
38
|
-
const str = new
|
|
38
|
+
const str = new snapshot_utils_js_1.TestString("id", {});
|
|
39
39
|
for (let i = 0; i < 1000; i++) {
|
|
40
40
|
str.append("a", false);
|
|
41
41
|
}
|
|
@@ -43,15 +43,15 @@ describe("MergeTree remove", () => {
|
|
|
43
43
|
summary = str.getSummary();
|
|
44
44
|
},
|
|
45
45
|
benchmarkFnAsync: async () => {
|
|
46
|
-
const str = await (0,
|
|
47
|
-
(0,
|
|
46
|
+
const str = await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
47
|
+
(0, testUtils_js_1.markRangeRemoved)({
|
|
48
48
|
mergeTree: str.mergeTree,
|
|
49
49
|
start: 0,
|
|
50
50
|
end: 1000,
|
|
51
51
|
refSeq: 1000,
|
|
52
52
|
clientId: 0,
|
|
53
53
|
seq: 1001,
|
|
54
|
-
opArgs: { op: { type:
|
|
54
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
|
|
55
55
|
overwrite: false,
|
|
56
56
|
});
|
|
57
57
|
},
|
|
@@ -62,7 +62,7 @@ describe("MergeTree remove", () => {
|
|
|
62
62
|
title: "remove large range of large tree with undo-redo",
|
|
63
63
|
category: "remove",
|
|
64
64
|
before: () => {
|
|
65
|
-
const str = new
|
|
65
|
+
const str = new snapshot_utils_js_1.TestString("id", {});
|
|
66
66
|
for (let i = 0; i < length / 2; i++) {
|
|
67
67
|
str.append("a", true);
|
|
68
68
|
str.appendMarker(true);
|
|
@@ -71,10 +71,10 @@ describe("MergeTree remove", () => {
|
|
|
71
71
|
summary = str.getSummary();
|
|
72
72
|
},
|
|
73
73
|
benchmarkFnAsync: async () => {
|
|
74
|
-
const str = await (0,
|
|
74
|
+
const str = await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
75
75
|
const revertibles = [];
|
|
76
76
|
str.on("delta", (_op, delta) => {
|
|
77
|
-
(0,
|
|
77
|
+
(0, revertibles_js_1.appendToMergeTreeDeltaRevertibles)(delta, revertibles);
|
|
78
78
|
});
|
|
79
79
|
const op = str.removeRangeLocal(0, length - 1);
|
|
80
80
|
str.applyMsg(str.makeOpMessage(op,
|
|
@@ -89,7 +89,7 @@ describe("MergeTree remove", () => {
|
|
|
89
89
|
title: "remove start of large tree",
|
|
90
90
|
category: "remove",
|
|
91
91
|
before: () => {
|
|
92
|
-
const str = new
|
|
92
|
+
const str = new snapshot_utils_js_1.TestString("id", {});
|
|
93
93
|
for (let i = 0; i < 1000; i++) {
|
|
94
94
|
str.append("a", false);
|
|
95
95
|
}
|
|
@@ -97,15 +97,15 @@ describe("MergeTree remove", () => {
|
|
|
97
97
|
summary = str.getSummary();
|
|
98
98
|
},
|
|
99
99
|
benchmarkFnAsync: async () => {
|
|
100
|
-
const str = await (0,
|
|
101
|
-
(0,
|
|
100
|
+
const str = await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
101
|
+
(0, testUtils_js_1.markRangeRemoved)({
|
|
102
102
|
mergeTree: str.mergeTree,
|
|
103
103
|
start: 0,
|
|
104
104
|
end: 1,
|
|
105
105
|
refSeq: 1000,
|
|
106
106
|
clientId: 0,
|
|
107
107
|
seq: 1001,
|
|
108
|
-
opArgs: { op: { type:
|
|
108
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
|
|
109
109
|
overwrite: false,
|
|
110
110
|
});
|
|
111
111
|
},
|
|
@@ -115,7 +115,7 @@ describe("MergeTree remove", () => {
|
|
|
115
115
|
title: "remove middle of large tree",
|
|
116
116
|
category: "remove",
|
|
117
117
|
before: () => {
|
|
118
|
-
const str = new
|
|
118
|
+
const str = new snapshot_utils_js_1.TestString("id", {});
|
|
119
119
|
for (let i = 0; i < 1000; i++) {
|
|
120
120
|
str.append("a", false);
|
|
121
121
|
}
|
|
@@ -123,15 +123,15 @@ describe("MergeTree remove", () => {
|
|
|
123
123
|
summary = str.getSummary();
|
|
124
124
|
},
|
|
125
125
|
benchmarkFnAsync: async () => {
|
|
126
|
-
const str = await (0,
|
|
127
|
-
(0,
|
|
126
|
+
const str = await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
127
|
+
(0, testUtils_js_1.markRangeRemoved)({
|
|
128
128
|
mergeTree: str.mergeTree,
|
|
129
129
|
start: 499,
|
|
130
130
|
end: 501,
|
|
131
131
|
refSeq: 1000,
|
|
132
132
|
clientId: 0,
|
|
133
133
|
seq: 1001,
|
|
134
|
-
opArgs: { op: { type:
|
|
134
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
|
|
135
135
|
overwrite: false,
|
|
136
136
|
});
|
|
137
137
|
},
|
|
@@ -141,7 +141,7 @@ describe("MergeTree remove", () => {
|
|
|
141
141
|
title: "remove end of large tree",
|
|
142
142
|
category: "remove",
|
|
143
143
|
before: () => {
|
|
144
|
-
const str = new
|
|
144
|
+
const str = new snapshot_utils_js_1.TestString("id", {});
|
|
145
145
|
for (let i = 0; i < 1000; i++) {
|
|
146
146
|
str.append("a", false);
|
|
147
147
|
}
|
|
@@ -149,15 +149,15 @@ describe("MergeTree remove", () => {
|
|
|
149
149
|
summary = str.getSummary();
|
|
150
150
|
},
|
|
151
151
|
benchmarkFnAsync: async () => {
|
|
152
|
-
const str = await (0,
|
|
153
|
-
(0,
|
|
152
|
+
const str = await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
153
|
+
(0, testUtils_js_1.markRangeRemoved)({
|
|
154
154
|
mergeTree: str.mergeTree,
|
|
155
155
|
start: 999,
|
|
156
156
|
end: 1000,
|
|
157
157
|
refSeq: 1000,
|
|
158
158
|
clientId: 0,
|
|
159
159
|
seq: 1001,
|
|
160
|
-
opArgs: { op: { type:
|
|
160
|
+
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
|
|
161
161
|
overwrite: false,
|
|
162
162
|
});
|
|
163
163
|
},
|