@fluidframework/merge-tree 2.0.0-rc.1.0.4 → 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 +2 -2
- 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 +72 -72
- 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} +3 -2
- 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 +3 -3
- 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/revertibles.js
CHANGED
|
@@ -7,16 +7,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.revertMergeTreeDeltaRevertibles = exports.discardMergeTreeDeltaRevertible = exports.appendToMergeTreeDeltaRevertibles = exports.isMergeTreeDeltaRevertible = void 0;
|
|
8
8
|
const core_utils_1 = require("@fluidframework/core-utils");
|
|
9
9
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
10
|
+
const index_js_1 = require("./collections/index.js");
|
|
11
|
+
const endOfTreeSegment_js_1 = require("./endOfTreeSegment.js");
|
|
12
|
+
const localReference_js_1 = require("./localReference.js");
|
|
13
|
+
const mergeTreeNodes_js_1 = require("./mergeTreeNodes.js");
|
|
14
|
+
const mergeTreeNodeWalk_js_1 = require("./mergeTreeNodeWalk.js");
|
|
15
|
+
const mergeTreeTracking_js_1 = require("./mergeTreeTracking.js");
|
|
16
|
+
const ops_js_1 = require("./ops.js");
|
|
17
|
+
const properties_js_1 = require("./properties.js");
|
|
18
|
+
const referencePositions_js_1 = require("./referencePositions.js");
|
|
19
|
+
const mergeTree_js_1 = require("./mergeTree.js");
|
|
20
20
|
/**
|
|
21
21
|
* Tests whether x is a MergeTreeDeltaRevertible
|
|
22
22
|
* @internal
|
|
@@ -27,15 +27,15 @@ function isMergeTreeDeltaRevertible(x) {
|
|
|
27
27
|
exports.isMergeTreeDeltaRevertible = isMergeTreeDeltaRevertible;
|
|
28
28
|
function findMergeTreeWithRevert(trackable) {
|
|
29
29
|
const segmentOrNode = trackable.isLeaf() ? trackable : trackable.getSegment();
|
|
30
|
-
const maybeRoot = (0,
|
|
30
|
+
const maybeRoot = (0, mergeTree_js_1.findRootMergeBlock)(segmentOrNode);
|
|
31
31
|
(0, core_utils_1.assert)(maybeRoot?.mergeTree !== undefined, 0x5c2 /* trackable is invalid as it is not in a rooted merge tree. */);
|
|
32
32
|
const mergeTree = maybeRoot.mergeTree;
|
|
33
33
|
if (mergeTree.__mergeTreeRevertible === undefined) {
|
|
34
|
-
const detachedReferences = new
|
|
34
|
+
const detachedReferences = new endOfTreeSegment_js_1.EndOfTreeSegment(maybeRoot.mergeTree);
|
|
35
35
|
const refCallbacks = {
|
|
36
36
|
afterSlide: (r) => {
|
|
37
|
-
if (mergeTree.referencePositionToLocalPosition(r) ===
|
|
38
|
-
const refs =
|
|
37
|
+
if (mergeTree.referencePositionToLocalPosition(r) === referencePositions_js_1.DetachedReferencePosition) {
|
|
38
|
+
const refs = localReference_js_1.LocalReferenceCollection.setOrGet(detachedReferences);
|
|
39
39
|
refs.addAfterTombstones([r]);
|
|
40
40
|
}
|
|
41
41
|
},
|
|
@@ -48,10 +48,10 @@ function findMergeTreeWithRevert(trackable) {
|
|
|
48
48
|
return mergeTree;
|
|
49
49
|
}
|
|
50
50
|
function appendLocalInsertToRevertibles(deltaArgs, revertibles) {
|
|
51
|
-
if (revertibles[revertibles.length - 1]?.operation !==
|
|
51
|
+
if (revertibles[revertibles.length - 1]?.operation !== ops_js_1.MergeTreeDeltaType.INSERT) {
|
|
52
52
|
revertibles.push({
|
|
53
|
-
operation:
|
|
54
|
-
trackingGroup: new
|
|
53
|
+
operation: ops_js_1.MergeTreeDeltaType.INSERT,
|
|
54
|
+
trackingGroup: new mergeTreeTracking_js_1.UnorderedTrackingGroup(),
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
const last = revertibles[revertibles.length - 1];
|
|
@@ -59,10 +59,10 @@ function appendLocalInsertToRevertibles(deltaArgs, revertibles) {
|
|
|
59
59
|
return revertibles;
|
|
60
60
|
}
|
|
61
61
|
function appendLocalRemoveToRevertibles(deltaArgs, revertibles) {
|
|
62
|
-
if (revertibles[revertibles.length - 1]?.operation !==
|
|
62
|
+
if (revertibles[revertibles.length - 1]?.operation !== ops_js_1.MergeTreeDeltaType.REMOVE) {
|
|
63
63
|
revertibles.push({
|
|
64
|
-
operation:
|
|
65
|
-
trackingGroup: new
|
|
64
|
+
operation: ops_js_1.MergeTreeDeltaType.REMOVE,
|
|
65
|
+
trackingGroup: new mergeTreeTracking_js_1.UnorderedTrackingGroup(),
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
const last = revertibles[revertibles.length - 1];
|
|
@@ -72,7 +72,7 @@ function appendLocalRemoveToRevertibles(deltaArgs, revertibles) {
|
|
|
72
72
|
segSpec: t.segment.toJSONObject(),
|
|
73
73
|
referenceSpace: "mergeTreeDeltaRevertible",
|
|
74
74
|
};
|
|
75
|
-
const ref = mergeTreeWithRevert.createLocalReferencePosition(t.segment, 0,
|
|
75
|
+
const ref = mergeTreeWithRevert.createLocalReferencePosition(t.segment, 0, ops_js_1.ReferenceType.SlideOnRemove, props);
|
|
76
76
|
ref.callbacks = mergeTreeWithRevert.__mergeTreeRevertible.refCallbacks;
|
|
77
77
|
t.segment.trackingCollection.trackingGroups.forEach((tg) => {
|
|
78
78
|
tg.link(ref);
|
|
@@ -87,15 +87,15 @@ function appendLocalAnnotateToRevertibles(deltaArgs, revertibles) {
|
|
|
87
87
|
deltaArgs.deltaSegments.forEach((ds) => {
|
|
88
88
|
const propertyDeltas = ds.propertyDeltas;
|
|
89
89
|
if (propertyDeltas) {
|
|
90
|
-
if (last?.operation ===
|
|
91
|
-
(0,
|
|
90
|
+
if (last?.operation === ops_js_1.MergeTreeDeltaType.ANNOTATE &&
|
|
91
|
+
(0, properties_js_1.matchProperties)(last?.propertyDeltas, propertyDeltas)) {
|
|
92
92
|
last.trackingGroup.link(ds.segment);
|
|
93
93
|
}
|
|
94
94
|
else {
|
|
95
95
|
last = {
|
|
96
|
-
operation:
|
|
96
|
+
operation: ops_js_1.MergeTreeDeltaType.ANNOTATE,
|
|
97
97
|
propertyDeltas,
|
|
98
|
-
trackingGroup: new
|
|
98
|
+
trackingGroup: new mergeTreeTracking_js_1.UnorderedTrackingGroup(),
|
|
99
99
|
};
|
|
100
100
|
last.trackingGroup.link(ds.segment);
|
|
101
101
|
revertibles.push(last);
|
|
@@ -112,13 +112,13 @@ function appendToMergeTreeDeltaRevertibles(deltaArgs, revertibles) {
|
|
|
112
112
|
return;
|
|
113
113
|
}
|
|
114
114
|
switch (deltaArgs.operation) {
|
|
115
|
-
case
|
|
115
|
+
case ops_js_1.MergeTreeDeltaType.INSERT:
|
|
116
116
|
appendLocalInsertToRevertibles(deltaArgs, revertibles);
|
|
117
117
|
break;
|
|
118
|
-
case
|
|
118
|
+
case ops_js_1.MergeTreeDeltaType.REMOVE:
|
|
119
119
|
appendLocalRemoveToRevertibles(deltaArgs, revertibles);
|
|
120
120
|
break;
|
|
121
|
-
case
|
|
121
|
+
case ops_js_1.MergeTreeDeltaType.ANNOTATE:
|
|
122
122
|
appendLocalAnnotateToRevertibles(deltaArgs, revertibles);
|
|
123
123
|
break;
|
|
124
124
|
default:
|
|
@@ -148,7 +148,7 @@ function revertLocalInsert(driver, mergeTreeWithRevert, revertible) {
|
|
|
148
148
|
const tracked = revertible.trackingGroup.tracked[0];
|
|
149
149
|
(0, core_utils_1.assert)(tracked.trackingCollection.unlink(revertible.trackingGroup), 0x3f1 /* tracking group removed */);
|
|
150
150
|
(0, core_utils_1.assert)(tracked.isLeaf(), 0x3f2 /* inserts must track segments */);
|
|
151
|
-
if ((0,
|
|
151
|
+
if ((0, mergeTreeNodes_js_1.toRemovalInfo)(tracked) === undefined) {
|
|
152
152
|
const start = getPosition(mergeTreeWithRevert, tracked);
|
|
153
153
|
driver.removeRange(start, start + tracked.cachedLength);
|
|
154
154
|
}
|
|
@@ -165,10 +165,10 @@ function revertLocalRemove(driver, mergeTreeWithRevert, revertible) {
|
|
|
165
165
|
// they will return the length of the merge-tree. this case just catches
|
|
166
166
|
// random references, likely not created in the revertible flow,
|
|
167
167
|
// that are tying to be reverted for some reason.
|
|
168
|
-
if (realPos ===
|
|
168
|
+
if (realPos === referencePositions_js_1.DetachedReferencePosition || refSeg === undefined) {
|
|
169
169
|
throw new telemetry_utils_1.UsageError("Cannot insert at detached references position");
|
|
170
170
|
}
|
|
171
|
-
if ((0,
|
|
171
|
+
if ((0, mergeTreeNodes_js_1.toRemovalInfo)(refSeg) === undefined && refSeg.localRefs?.isAfterTombstone(tracked)) {
|
|
172
172
|
realPos++;
|
|
173
173
|
}
|
|
174
174
|
const props = tracked.properties;
|
|
@@ -187,16 +187,16 @@ function revertLocalRemove(driver, mergeTreeWithRevert, revertible) {
|
|
|
187
187
|
}
|
|
188
188
|
if (localSlideFilter(lref)) {
|
|
189
189
|
if (forward) {
|
|
190
|
-
const before = (insertRef.before ?? (insertRef.before = new
|
|
190
|
+
const before = (insertRef.before ?? (insertRef.before = new index_js_1.DoublyLinkedList()));
|
|
191
191
|
before.push(lref);
|
|
192
192
|
}
|
|
193
193
|
else {
|
|
194
|
-
const after = (insertRef.after ?? (insertRef.after = new
|
|
194
|
+
const after = (insertRef.after ?? (insertRef.after = new index_js_1.DoublyLinkedList()));
|
|
195
195
|
after.unshift(lref);
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
};
|
|
199
|
-
(0,
|
|
199
|
+
(0, mergeTreeNodeWalk_js_1.depthFirstNodeWalk)(
|
|
200
200
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
201
201
|
insertSegment.parent, insertSegment, undefined, (seg) => {
|
|
202
202
|
if (seg.localRefs?.empty === false) {
|
|
@@ -209,7 +209,7 @@ function revertLocalRemove(driver, mergeTreeWithRevert, revertible) {
|
|
|
209
209
|
mergeTreeWithRevert?.__mergeTreeRevertible.detachedReferences.localRefs.walkReferences(refHandler);
|
|
210
210
|
}
|
|
211
211
|
if (insertRef !== undefined) {
|
|
212
|
-
const localRefs =
|
|
212
|
+
const localRefs = localReference_js_1.LocalReferenceCollection.setOrGet(insertSegment);
|
|
213
213
|
if (insertRef.before?.empty === false) {
|
|
214
214
|
localRefs.addBeforeTombstones(insertRef.before.map((n) => n.data));
|
|
215
215
|
}
|
|
@@ -229,7 +229,7 @@ function revertLocalAnnotate(driver, mergeTreeWithRevert, revertible) {
|
|
|
229
229
|
const tracked = revertible.trackingGroup.tracked[0];
|
|
230
230
|
const unlinked = tracked.trackingCollection.unlink(revertible.trackingGroup);
|
|
231
231
|
(0, core_utils_1.assert)(unlinked && tracked.isLeaf(), 0x3f7 /* annotates must track segments */);
|
|
232
|
-
if ((0,
|
|
232
|
+
if ((0, mergeTreeNodes_js_1.toRemovalInfo)(tracked) === undefined) {
|
|
233
233
|
const start = getPosition(mergeTreeWithRevert, tracked);
|
|
234
234
|
driver.annotateRange(start, start + tracked.cachedLength, revertible.propertyDeltas);
|
|
235
235
|
}
|
|
@@ -250,13 +250,13 @@ function revertMergeTreeDeltaRevertibles(driver, revertibles) {
|
|
|
250
250
|
if (r.trackingGroup.size > 0) {
|
|
251
251
|
mergeTreeWithRevert ?? (mergeTreeWithRevert = findMergeTreeWithRevert(r.trackingGroup.tracked[0]));
|
|
252
252
|
switch (operation) {
|
|
253
|
-
case
|
|
253
|
+
case ops_js_1.MergeTreeDeltaType.INSERT:
|
|
254
254
|
revertLocalInsert(driver, mergeTreeWithRevert, r);
|
|
255
255
|
break;
|
|
256
|
-
case
|
|
256
|
+
case ops_js_1.MergeTreeDeltaType.REMOVE:
|
|
257
257
|
revertLocalRemove(driver, mergeTreeWithRevert, r);
|
|
258
258
|
break;
|
|
259
|
-
case
|
|
259
|
+
case ops_js_1.MergeTreeDeltaType.ANNOTATE:
|
|
260
260
|
revertLocalAnnotate(driver, mergeTreeWithRevert, r);
|
|
261
261
|
break;
|
|
262
262
|
default:
|
package/dist/revertibles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revertibles.js","sourceRoot":"","sources":["../src/revertibles.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 { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport { UsageError } from \"@fluidframework/telemetry-utils\";\nimport { DoublyLinkedList } from \"./collections\";\nimport { EndOfTreeSegment } from \"./endOfTreeSegment\";\nimport { LocalReferenceCollection, LocalReferencePosition } from \"./localReference\";\nimport { IMergeTreeDeltaCallbackArgs } from \"./mergeTreeDeltaCallback\";\nimport { IMergeLeaf, ISegment, toRemovalInfo } from \"./mergeTreeNodes\";\nimport { depthFirstNodeWalk } from \"./mergeTreeNodeWalk\";\nimport { ITrackingGroup, Trackable, UnorderedTrackingGroup } from \"./mergeTreeTracking\";\nimport { IJSONSegment, MergeTreeDeltaType, ReferenceType } from \"./ops\";\nimport { matchProperties, PropertySet } from \"./properties\";\nimport { DetachedReferencePosition } from \"./referencePositions\";\nimport { MergeTree, findRootMergeBlock } from \"./mergeTree\";\n\n/**\n * @alpha\n */\nexport type MergeTreeDeltaRevertible =\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.INSERT;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t }\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.REMOVE;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t }\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.ANNOTATE;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t\t\tpropertyDeltas: PropertySet;\n\t };\n\n/**\n * Tests whether x is a MergeTreeDeltaRevertible\n * @internal\n */\nexport function isMergeTreeDeltaRevertible(x: unknown): x is MergeTreeDeltaRevertible {\n\treturn !!x && typeof x === \"object\" && \"operation\" in x && \"trackingGroup\" in x;\n}\n\ntype TypedRevertible<T extends MergeTreeDeltaRevertible[\"operation\"]> = MergeTreeDeltaRevertible & {\n\toperation: T;\n};\n\ninterface RemoveSegmentRefProperties {\n\t/**\n\t * the serialized form of the segment, so it can be re-inserted\n\t */\n\tsegSpec: IJSONSegment;\n\t/**\n\t * a tag so the reference can be identified as being created for revert\n\t */\n\treferenceSpace: \"mergeTreeDeltaRevertible\";\n}\n\n/**\n * @alpha\n */\nexport interface MergeTreeRevertibleDriver {\n\tinsertFromSpec(pos: number, spec: IJSONSegment): void;\n\tremoveRange(start: number, end: number): void;\n\tannotateRange(start: number, end: number, props: PropertySet): void;\n}\n\n/**\n * exported for test only. should not be exported out the the package\n * @internal\n */\nexport interface MergeTreeWithRevert extends MergeTree {\n\t__mergeTreeRevertible: {\n\t\tdetachedReferences: EndOfTreeSegment;\n\t\trefCallbacks: LocalReferencePosition[\"callbacks\"];\n\t};\n}\n\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nfunction findMergeTreeWithRevert(trackable: Trackable): MergeTreeWithRevert {\n\tconst segmentOrNode = trackable.isLeaf() ? trackable : trackable.getSegment();\n\tconst maybeRoot = findRootMergeBlock(segmentOrNode);\n\tassert(\n\t\tmaybeRoot?.mergeTree !== undefined,\n\t\t0x5c2 /* trackable is invalid as it is not in a rooted merge tree. */,\n\t);\n\tconst mergeTree: PickPartial<MergeTreeWithRevert, \"__mergeTreeRevertible\"> =\n\t\tmaybeRoot.mergeTree;\n\n\tif (mergeTree.__mergeTreeRevertible === undefined) {\n\t\tconst detachedReferences = new EndOfTreeSegment(maybeRoot.mergeTree);\n\t\tconst refCallbacks: MergeTreeWithRevert[\"__mergeTreeRevertible\"][\"refCallbacks\"] = {\n\t\t\tafterSlide: (r: LocalReferencePosition) => {\n\t\t\t\tif (mergeTree.referencePositionToLocalPosition(r) === DetachedReferencePosition) {\n\t\t\t\t\tconst refs = (detachedReferences.localRefs ??= new LocalReferenceCollection(\n\t\t\t\t\t\tdetachedReferences,\n\t\t\t\t\t));\n\t\t\t\t\trefs.addAfterTombstones([r]);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tmergeTree.__mergeTreeRevertible = {\n\t\t\trefCallbacks,\n\t\t\tdetachedReferences,\n\t\t};\n\t}\n\treturn mergeTree as MergeTreeWithRevert;\n}\n\nfunction appendLocalInsertToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tif (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.INSERT) {\n\t\trevertibles.push({\n\t\t\toperation: MergeTreeDeltaType.INSERT,\n\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t});\n\t}\n\tconst last = revertibles[revertibles.length - 1];\n\tdeltaArgs.deltaSegments.forEach((t) => last.trackingGroup.link(t.segment));\n\n\treturn revertibles;\n}\n\nfunction appendLocalRemoveToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tif (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.REMOVE) {\n\t\trevertibles.push({\n\t\t\toperation: MergeTreeDeltaType.REMOVE,\n\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t});\n\t}\n\tconst last = revertibles[revertibles.length - 1];\n\n\tconst mergeTreeWithRevert = findMergeTreeWithRevert(deltaArgs.deltaSegments[0].segment);\n\n\tdeltaArgs.deltaSegments.forEach((t) => {\n\t\tconst props: RemoveSegmentRefProperties = {\n\t\t\tsegSpec: t.segment.toJSONObject(),\n\t\t\treferenceSpace: \"mergeTreeDeltaRevertible\",\n\t\t};\n\t\tconst ref = mergeTreeWithRevert.createLocalReferencePosition(\n\t\t\tt.segment,\n\t\t\t0,\n\t\t\tReferenceType.SlideOnRemove,\n\t\t\tprops,\n\t\t);\n\t\tref.callbacks = mergeTreeWithRevert.__mergeTreeRevertible.refCallbacks;\n\t\tt.segment.trackingCollection.trackingGroups.forEach((tg) => {\n\t\t\ttg.link(ref);\n\t\t\ttg.unlink(t.segment);\n\t\t});\n\n\t\tlast.trackingGroup.link(ref);\n\t});\n\treturn revertibles;\n}\n\nfunction appendLocalAnnotateToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tlet last = revertibles[revertibles.length - 1];\n\tdeltaArgs.deltaSegments.forEach((ds) => {\n\t\tconst propertyDeltas = ds.propertyDeltas;\n\t\tif (propertyDeltas) {\n\t\t\tif (\n\t\t\t\tlast?.operation === MergeTreeDeltaType.ANNOTATE &&\n\t\t\t\tmatchProperties(last?.propertyDeltas, propertyDeltas)\n\t\t\t) {\n\t\t\t\tlast.trackingGroup.link(ds.segment);\n\t\t\t} else {\n\t\t\t\tlast = {\n\t\t\t\t\toperation: MergeTreeDeltaType.ANNOTATE,\n\t\t\t\t\tpropertyDeltas,\n\t\t\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t\t\t};\n\t\t\t\tlast.trackingGroup.link(ds.segment);\n\t\t\t\trevertibles.push(last);\n\t\t\t}\n\t\t}\n\t});\n\treturn revertibles;\n}\n\n/**\n * @alpha\n */\nexport function appendToMergeTreeDeltaRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tif (deltaArgs.deltaSegments.length === 0) {\n\t\treturn;\n\t}\n\tswitch (deltaArgs.operation) {\n\t\tcase MergeTreeDeltaType.INSERT:\n\t\t\tappendLocalInsertToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\n\t\tcase MergeTreeDeltaType.REMOVE:\n\t\t\tappendLocalRemoveToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\n\t\tcase MergeTreeDeltaType.ANNOTATE:\n\t\t\tappendLocalAnnotateToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new UsageError(\"Unsupported event delta type\", {\n\t\t\t\toperation: deltaArgs.operation,\n\t\t\t});\n\t}\n}\n\n/**\n * @alpha\n */\nexport function discardMergeTreeDeltaRevertible(revertibles: MergeTreeDeltaRevertible[]) {\n\trevertibles.forEach((r) => {\n\t\tr.trackingGroup.tracked.forEach((t) => {\n\t\t\tt.trackingCollection.unlink(r.trackingGroup);\n\t\t\t// remove untracked local references\n\t\t\tif (t.trackingCollection.empty && !t.isLeaf()) {\n\t\t\t\tt.getSegment()?.localRefs?.removeLocalRef(t);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction revertLocalInsert(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.INSERT>,\n) {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\t\tassert(\n\t\t\ttracked.trackingCollection.unlink(revertible.trackingGroup),\n\t\t\t0x3f1 /* tracking group removed */,\n\t\t);\n\t\tassert(tracked.isLeaf(), 0x3f2 /* inserts must track segments */);\n\t\tif (toRemovalInfo(tracked) === undefined) {\n\t\t\tconst start = getPosition(mergeTreeWithRevert, tracked);\n\t\t\tdriver.removeRange(start, start + tracked.cachedLength);\n\t\t}\n\t}\n}\n\nfunction revertLocalRemove(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.REMOVE>,\n) {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\n\t\tassert(\n\t\t\ttracked.trackingCollection.unlink(revertible.trackingGroup),\n\t\t\t0x3f3 /* tracking group removed */,\n\t\t);\n\n\t\tassert(!tracked.isLeaf(), 0x3f4 /* removes must track local refs */);\n\n\t\tconst refSeg = tracked.getSegment();\n\t\tlet realPos = mergeTreeWithRevert.referencePositionToLocalPosition(tracked);\n\n\t\t// References which are on EndOfStringSegment don't return detached for pos,\n\t\t// they will return the length of the merge-tree. this case just catches\n\t\t// random references, likely not created in the revertible flow,\n\t\t// that are tying to be reverted for some reason.\n\t\tif (realPos === DetachedReferencePosition || refSeg === undefined) {\n\t\t\tthrow new UsageError(\"Cannot insert at detached references position\");\n\t\t}\n\n\t\tif (toRemovalInfo(refSeg) === undefined && refSeg.localRefs?.isAfterTombstone(tracked)) {\n\t\t\trealPos++;\n\t\t}\n\n\t\tconst props = tracked.properties as RemoveSegmentRefProperties;\n\t\tdriver.insertFromSpec(realPos, props.segSpec);\n\t\tconst insertSegment: IMergeLeaf | undefined = mergeTreeWithRevert.getContainingSegment(\n\t\t\trealPos,\n\t\t\tmergeTreeWithRevert.collabWindow.currentSeq,\n\t\t\tmergeTreeWithRevert.collabWindow.clientId,\n\t\t).segment;\n\t\tassert(insertSegment !== undefined, 0x3f5 /* insert segment must exist at position */);\n\n\t\tconst localSlideFilter = (lref: LocalReferencePosition) =>\n\t\t\t(lref.properties as Partial<RemoveSegmentRefProperties>)?.referenceSpace ===\n\t\t\t\"mergeTreeDeltaRevertible\";\n\n\t\tconst insertRef: Partial<\n\t\t\tRecord<\"before\" | \"after\", DoublyLinkedList<LocalReferencePosition>>\n\t\t> = {};\n\t\tconst forward = insertSegment.ordinal < refSeg.ordinal;\n\t\tconst refHandler = (lref: LocalReferencePosition) => {\n\t\t\t// once we reach it keep the original reference where it is\n\t\t\t// we'll move tracking groups, and remove it as a last step.\n\t\t\tif (tracked === lref) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (localSlideFilter(lref)) {\n\t\t\t\tif (forward) {\n\t\t\t\t\tconst before = (insertRef.before ??= new DoublyLinkedList());\n\t\t\t\t\tbefore.push(lref);\n\t\t\t\t} else {\n\t\t\t\t\tconst after = (insertRef.after ??= new DoublyLinkedList());\n\t\t\t\t\tafter.unshift(lref);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tdepthFirstNodeWalk(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tinsertSegment.parent!,\n\t\t\tinsertSegment,\n\t\t\tundefined,\n\t\t\t(seg) => {\n\t\t\t\tif (seg.localRefs?.empty === false) {\n\t\t\t\t\treturn seg.localRefs.walkReferences(refHandler, undefined, forward);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tundefined,\n\t\t\tforward,\n\t\t);\n\t\tif (\n\t\t\tmergeTreeWithRevert?.__mergeTreeRevertible?.detachedReferences?.localRefs?.has(tracked)\n\t\t) {\n\t\t\tassert(forward, 0x3f6 /* forward should always be true when detached */);\n\t\t\tmergeTreeWithRevert?.__mergeTreeRevertible.detachedReferences.localRefs.walkReferences(\n\t\t\t\trefHandler,\n\t\t\t);\n\t\t}\n\n\t\tif (insertRef !== undefined) {\n\t\t\tconst localRefs = (insertSegment.localRefs ??= new LocalReferenceCollection(\n\t\t\t\tinsertSegment,\n\t\t\t));\n\t\t\tif (insertRef.before?.empty === false) {\n\t\t\t\tlocalRefs.addBeforeTombstones(insertRef.before.map((n) => n.data));\n\t\t\t}\n\t\t\tif (insertRef.after?.empty === false) {\n\t\t\t\tlocalRefs.addAfterTombstones(insertRef.after.map((n) => n.data));\n\t\t\t}\n\t\t}\n\n\t\ttracked.trackingCollection.trackingGroups.forEach((tg) => {\n\t\t\ttg.link(insertSegment);\n\t\t\ttg.unlink(tracked);\n\t\t});\n\t\ttracked.getSegment()?.localRefs?.removeLocalRef(tracked);\n\t}\n}\n\nfunction revertLocalAnnotate(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.ANNOTATE>,\n) {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\t\tconst unlinked = tracked.trackingCollection.unlink(revertible.trackingGroup);\n\t\tassert(unlinked && tracked.isLeaf(), 0x3f7 /* annotates must track segments */);\n\t\tif (toRemovalInfo(tracked) === undefined) {\n\t\t\tconst start = getPosition(mergeTreeWithRevert, tracked);\n\t\t\tdriver.annotateRange(start, start + tracked.cachedLength, revertible.propertyDeltas);\n\t\t}\n\t}\n}\n\nfunction getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegment) {\n\treturn mergeTreeWithRevert.getPosition(\n\t\tsegment,\n\t\tmergeTreeWithRevert.collabWindow.currentSeq,\n\t\tmergeTreeWithRevert.collabWindow.clientId,\n\t);\n}\n\n/**\n * @alpha\n */\nexport function revertMergeTreeDeltaRevertibles(\n\tdriver: MergeTreeRevertibleDriver,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tlet mergeTreeWithRevert: MergeTreeWithRevert | undefined;\n\n\twhile (revertibles.length > 0) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst r = revertibles.pop()!;\n\t\tconst operation = r.operation;\n\t\tif (r.trackingGroup.size > 0) {\n\t\t\tmergeTreeWithRevert ??= findMergeTreeWithRevert(r.trackingGroup.tracked[0]);\n\t\t\tswitch (operation) {\n\t\t\t\tcase MergeTreeDeltaType.INSERT:\n\t\t\t\t\trevertLocalInsert(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase MergeTreeDeltaType.REMOVE:\n\t\t\t\t\trevertLocalRemove(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase MergeTreeDeltaType.ANNOTATE:\n\t\t\t\t\trevertLocalAnnotate(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tunreachableCase(operation);\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"revertibles.js","sourceRoot":"","sources":["../src/revertibles.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2DAAqE;AACrE,qEAA6D;AAC7D,qDAA0D;AAC1D,+DAAyD;AACzD,2DAAuF;AAEvF,2DAA4E;AAC5E,iEAA4D;AAC5D,iEAA2F;AAC3F,qCAA2E;AAC3E,mDAA+D;AAC/D,mEAAoE;AACpE,iDAA+D;AAoB/D;;;GAGG;AACH,SAAgB,0BAA0B,CAAC,CAAU;IACpD,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,WAAW,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,CAAC;AACjF,CAAC;AAFD,gEAEC;AAsCD,SAAS,uBAAuB,CAAC,SAAoB;IACpD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IAC9E,MAAM,SAAS,GAAG,IAAA,iCAAkB,EAAC,aAAa,CAAC,CAAC;IACpD,IAAA,mBAAM,EACL,SAAS,EAAE,SAAS,KAAK,SAAS,EAClC,KAAK,CAAC,+DAA+D,CACrE,CAAC;IACF,MAAM,SAAS,GACd,SAAS,CAAC,SAAS,CAAC;IAErB,IAAI,SAAS,CAAC,qBAAqB,KAAK,SAAS,EAAE;QAClD,MAAM,kBAAkB,GAAG,IAAI,sCAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,YAAY,GAAiE;YAClF,UAAU,EAAE,CAAC,CAAyB,EAAE,EAAE;gBACzC,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC,CAAC,KAAK,iDAAyB,EAAE;oBAChF,MAAM,IAAI,GAAG,4CAAwB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;oBACnE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7B;YACF,CAAC;SACD,CAAC;QACF,SAAS,CAAC,qBAAqB,GAAG;YACjC,YAAY;YACZ,kBAAkB;SAClB,CAAC;KACF;IACD,OAAO,SAAgC,CAAC;AACzC,CAAC;AAED,SAAS,8BAA8B,CACtC,SAAsC,EACtC,WAAuC;IAEvC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,2BAAkB,CAAC,MAAM,EAAE;QACjF,WAAW,CAAC,IAAI,CAAC;YAChB,SAAS,EAAE,2BAAkB,CAAC,MAAM;YACpC,aAAa,EAAE,IAAI,6CAAsB,EAAE;SAC3C,CAAC,CAAC;KACH;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3E,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,SAAS,8BAA8B,CACtC,SAAsC,EACtC,WAAuC;IAEvC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,2BAAkB,CAAC,MAAM,EAAE;QACjF,WAAW,CAAC,IAAI,CAAC;YAChB,SAAS,EAAE,2BAAkB,CAAC,MAAM;YACpC,aAAa,EAAE,IAAI,6CAAsB,EAAE;SAC3C,CAAC,CAAC;KACH;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEjD,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAExF,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACrC,MAAM,KAAK,GAA+B;YACzC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE;YACjC,cAAc,EAAE,0BAA0B;SAC1C,CAAC;QACF,MAAM,GAAG,GAAG,mBAAmB,CAAC,4BAA4B,CAC3D,CAAC,CAAC,OAAO,EACT,CAAC,EACD,sBAAa,CAAC,aAAa,EAC3B,KAAK,CACL,CAAC;QACF,GAAG,CAAC,SAAS,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,YAAY,CAAC;QACvE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC1D,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,SAAS,gCAAgC,CACxC,SAAsC,EACtC,WAAuC;IAEvC,IAAI,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACtC,MAAM,cAAc,GAAG,EAAE,CAAC,cAAc,CAAC;QACzC,IAAI,cAAc,EAAE;YACnB,IACC,IAAI,EAAE,SAAS,KAAK,2BAAkB,CAAC,QAAQ;gBAC/C,IAAA,+BAAe,EAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,EACpD;gBACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;aACpC;iBAAM;gBACN,IAAI,GAAG;oBACN,SAAS,EAAE,2BAAkB,CAAC,QAAQ;oBACtC,cAAc;oBACd,aAAa,EAAE,IAAI,6CAAsB,EAAE;iBAC3C,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBACpC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;SACD;IACF,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAgB,iCAAiC,CAChD,SAAsC,EACtC,WAAuC;IAEvC,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;QACzC,OAAO;KACP;IACD,QAAQ,SAAS,CAAC,SAAS,EAAE;QAC5B,KAAK,2BAAkB,CAAC,MAAM;YAC7B,8BAA8B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM;QAEP,KAAK,2BAAkB,CAAC,MAAM;YAC7B,8BAA8B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM;QAEP,KAAK,2BAAkB,CAAC,QAAQ;YAC/B,gCAAgC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACzD,MAAM;QAEP;YACC,MAAM,IAAI,4BAAU,CAAC,8BAA8B,EAAE;gBACpD,SAAS,EAAE,SAAS,CAAC,SAAS;aAC9B,CAAC,CAAC;KACJ;AACF,CAAC;AAzBD,8EAyBC;AAED;;GAEG;AACH,SAAgB,+BAA+B,CAAC,WAAuC;IACtF,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACzB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACrC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YAC7C,oCAAoC;YACpC,IAAI,CAAC,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC9C,CAAC,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;aAC7C;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAVD,0EAUC;AAED,SAAS,iBAAiB,CACzB,MAAiC,EACjC,mBAAwC,EACxC,UAA6D;IAE7D,OAAO,UAAU,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,IAAA,mBAAM,EACL,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,EAC3D,KAAK,CAAC,4BAA4B,CAClC,CAAC;QACF,IAAA,mBAAM,EAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAClE,IAAI,IAAA,iCAAa,EAAC,OAAO,CAAC,KAAK,SAAS,EAAE;YACzC,MAAM,KAAK,GAAG,WAAW,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;SACxD;KACD;AACF,CAAC;AAED,SAAS,iBAAiB,CACzB,MAAiC,EACjC,mBAAwC,EACxC,UAA6D;IAE7D,OAAO,UAAU,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpD,IAAA,mBAAM,EACL,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,EAC3D,KAAK,CAAC,4BAA4B,CAClC,CAAC;QAEF,IAAA,mBAAM,EAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,OAAO,GAAG,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;QAE5E,4EAA4E;QAC5E,wEAAwE;QACxE,gEAAgE;QAChE,iDAAiD;QACjD,IAAI,OAAO,KAAK,iDAAyB,IAAI,MAAM,KAAK,SAAS,EAAE;YAClE,MAAM,IAAI,4BAAU,CAAC,+CAA+C,CAAC,CAAC;SACtE;QAED,IAAI,IAAA,iCAAa,EAAC,MAAM,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE;YACvF,OAAO,EAAE,CAAC;SACV;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,UAAwC,CAAC;QAC/D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,aAAa,GAA6B,mBAAmB,CAAC,oBAAoB,CACvF,OAAO,EACP,mBAAmB,CAAC,YAAY,CAAC,UAAU,EAC3C,mBAAmB,CAAC,YAAY,CAAC,QAAQ,CACzC,CAAC,OAAO,CAAC;QACV,IAAA,mBAAM,EAAC,aAAa,KAAK,SAAS,EAAE,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAEvF,MAAM,gBAAgB,GAAG,CAAC,IAA4B,EAAE,EAAE,CACxD,IAAI,CAAC,UAAkD,EAAE,cAAc;YACxE,0BAA0B,CAAC;QAE5B,MAAM,SAAS,GAEX,EAAE,CAAC;QACP,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACvD,MAAM,UAAU,GAAG,CAAC,IAA4B,EAAE,EAAE;YACnD,2DAA2D;YAC3D,4DAA4D;YAC5D,IAAI,OAAO,KAAK,IAAI,EAAE;gBACrB,OAAO,KAAK,CAAC;aACb;YACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,IAAI,OAAO,EAAE;oBACZ,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,KAAhB,SAAS,CAAC,MAAM,GAAK,IAAI,2BAAgB,EAAE,EAAC,CAAC;oBAC7D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClB;qBAAM;oBACN,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,KAAK,KAAf,SAAS,CAAC,KAAK,GAAK,IAAI,2BAAgB,EAAE,EAAC,CAAC;oBAC3D,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACpB;aACD;QACF,CAAC,CAAC;QACF,IAAA,yCAAkB;QACjB,oEAAoE;QACpE,aAAa,CAAC,MAAO,EACrB,aAAa,EACb,SAAS,EACT,CAAC,GAAG,EAAE,EAAE;YACP,IAAI,GAAG,CAAC,SAAS,EAAE,KAAK,KAAK,KAAK,EAAE;gBACnC,OAAO,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;aACpE;YACD,OAAO,IAAI,CAAC;QACb,CAAC,EACD,SAAS,EACT,OAAO,CACP,CAAC;QACF,IACC,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,EACtF;YACD,IAAA,mBAAM,EAAC,OAAO,EAAE,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACzE,mBAAmB,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,SAAS,CAAC,cAAc,CACrF,UAAU,CACV,CAAC;SACF;QAED,IAAI,SAAS,KAAK,SAAS,EAAE;YAC5B,MAAM,SAAS,GAAG,4CAAwB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACnE,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,KAAK,KAAK,EAAE;gBACtC,SAAS,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;aACnE;YACD,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;gBACrC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;aACjE;SACD;QAED,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACxD,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACvB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;KACzD;AACF,CAAC;AAED,SAAS,mBAAmB,CAC3B,MAAiC,EACjC,mBAAwC,EACxC,UAA+D;IAE/D,OAAO,UAAU,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC7E,IAAA,mBAAM,EAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAChF,IAAI,IAAA,iCAAa,EAAC,OAAO,CAAC,KAAK,SAAS,EAAE;YACzC,MAAM,KAAK,GAAG,WAAW,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;SACrF;KACD;AACF,CAAC;AAED,SAAS,WAAW,CAAC,mBAAwC,EAAE,OAAiB;IAC/E,OAAO,mBAAmB,CAAC,WAAW,CACrC,OAAO,EACP,mBAAmB,CAAC,YAAY,CAAC,UAAU,EAC3C,mBAAmB,CAAC,YAAY,CAAC,QAAQ,CACzC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,+BAA+B,CAC9C,MAAiC,EACjC,WAAuC;IAEvC,IAAI,mBAAoD,CAAC;IAEzD,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9B,oEAAoE;QACpE,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAG,CAAC;QAC7B,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;YAC7B,mBAAmB,KAAnB,mBAAmB,GAAK,uBAAuB,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC;YAC5E,QAAQ,SAAS,EAAE;gBAClB,KAAK,2BAAkB,CAAC,MAAM;oBAC7B,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;oBAClD,MAAM;gBACP,KAAK,2BAAkB,CAAC,MAAM;oBAC7B,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;oBAClD,MAAM;gBACP,KAAK,2BAAkB,CAAC,QAAQ;oBAC/B,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;oBACpD,MAAM;gBACP;oBACC,IAAA,4BAAe,EAAC,SAAS,CAAC,CAAC;aAC5B;SACD;KACD;AACF,CAAC;AA3BD,0EA2BC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport { UsageError } from \"@fluidframework/telemetry-utils\";\nimport { DoublyLinkedList } from \"./collections/index.js\";\nimport { EndOfTreeSegment } from \"./endOfTreeSegment.js\";\nimport { LocalReferenceCollection, LocalReferencePosition } from \"./localReference.js\";\nimport { IMergeTreeDeltaCallbackArgs } from \"./mergeTreeDeltaCallback.js\";\nimport { ISegmentLeaf, ISegment, toRemovalInfo } from \"./mergeTreeNodes.js\";\nimport { depthFirstNodeWalk } from \"./mergeTreeNodeWalk.js\";\nimport { ITrackingGroup, Trackable, UnorderedTrackingGroup } from \"./mergeTreeTracking.js\";\nimport { IJSONSegment, MergeTreeDeltaType, ReferenceType } from \"./ops.js\";\nimport { matchProperties, PropertySet } from \"./properties.js\";\nimport { DetachedReferencePosition } from \"./referencePositions.js\";\nimport { MergeTree, findRootMergeBlock } from \"./mergeTree.js\";\n\n/**\n * @alpha\n */\nexport type MergeTreeDeltaRevertible =\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.INSERT;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t }\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.REMOVE;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t }\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.ANNOTATE;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t\t\tpropertyDeltas: PropertySet;\n\t };\n\n/**\n * Tests whether x is a MergeTreeDeltaRevertible\n * @internal\n */\nexport function isMergeTreeDeltaRevertible(x: unknown): x is MergeTreeDeltaRevertible {\n\treturn !!x && typeof x === \"object\" && \"operation\" in x && \"trackingGroup\" in x;\n}\n\ntype TypedRevertible<T extends MergeTreeDeltaRevertible[\"operation\"]> = MergeTreeDeltaRevertible & {\n\toperation: T;\n};\n\ninterface RemoveSegmentRefProperties {\n\t/**\n\t * the serialized form of the segment, so it can be re-inserted\n\t */\n\tsegSpec: IJSONSegment;\n\t/**\n\t * a tag so the reference can be identified as being created for revert\n\t */\n\treferenceSpace: \"mergeTreeDeltaRevertible\";\n}\n\n/**\n * @alpha\n */\nexport interface MergeTreeRevertibleDriver {\n\tinsertFromSpec(pos: number, spec: IJSONSegment): void;\n\tremoveRange(start: number, end: number): void;\n\tannotateRange(start: number, end: number, props: PropertySet): void;\n}\n\n/**\n * exported for test only. should not be exported out the the package\n * @internal\n */\nexport interface MergeTreeWithRevert extends MergeTree {\n\t__mergeTreeRevertible: {\n\t\tdetachedReferences: EndOfTreeSegment;\n\t\trefCallbacks: LocalReferencePosition[\"callbacks\"];\n\t};\n}\n\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nfunction findMergeTreeWithRevert(trackable: Trackable): MergeTreeWithRevert {\n\tconst segmentOrNode = trackable.isLeaf() ? trackable : trackable.getSegment();\n\tconst maybeRoot = findRootMergeBlock(segmentOrNode);\n\tassert(\n\t\tmaybeRoot?.mergeTree !== undefined,\n\t\t0x5c2 /* trackable is invalid as it is not in a rooted merge tree. */,\n\t);\n\tconst mergeTree: PickPartial<MergeTreeWithRevert, \"__mergeTreeRevertible\"> =\n\t\tmaybeRoot.mergeTree;\n\n\tif (mergeTree.__mergeTreeRevertible === undefined) {\n\t\tconst detachedReferences = new EndOfTreeSegment(maybeRoot.mergeTree);\n\t\tconst refCallbacks: MergeTreeWithRevert[\"__mergeTreeRevertible\"][\"refCallbacks\"] = {\n\t\t\tafterSlide: (r: LocalReferencePosition) => {\n\t\t\t\tif (mergeTree.referencePositionToLocalPosition(r) === DetachedReferencePosition) {\n\t\t\t\t\tconst refs = LocalReferenceCollection.setOrGet(detachedReferences);\n\t\t\t\t\trefs.addAfterTombstones([r]);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tmergeTree.__mergeTreeRevertible = {\n\t\t\trefCallbacks,\n\t\t\tdetachedReferences,\n\t\t};\n\t}\n\treturn mergeTree as MergeTreeWithRevert;\n}\n\nfunction appendLocalInsertToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tif (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.INSERT) {\n\t\trevertibles.push({\n\t\t\toperation: MergeTreeDeltaType.INSERT,\n\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t});\n\t}\n\tconst last = revertibles[revertibles.length - 1];\n\tdeltaArgs.deltaSegments.forEach((t) => last.trackingGroup.link(t.segment));\n\n\treturn revertibles;\n}\n\nfunction appendLocalRemoveToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tif (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.REMOVE) {\n\t\trevertibles.push({\n\t\t\toperation: MergeTreeDeltaType.REMOVE,\n\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t});\n\t}\n\tconst last = revertibles[revertibles.length - 1];\n\n\tconst mergeTreeWithRevert = findMergeTreeWithRevert(deltaArgs.deltaSegments[0].segment);\n\n\tdeltaArgs.deltaSegments.forEach((t) => {\n\t\tconst props: RemoveSegmentRefProperties = {\n\t\t\tsegSpec: t.segment.toJSONObject(),\n\t\t\treferenceSpace: \"mergeTreeDeltaRevertible\",\n\t\t};\n\t\tconst ref = mergeTreeWithRevert.createLocalReferencePosition(\n\t\t\tt.segment,\n\t\t\t0,\n\t\t\tReferenceType.SlideOnRemove,\n\t\t\tprops,\n\t\t);\n\t\tref.callbacks = mergeTreeWithRevert.__mergeTreeRevertible.refCallbacks;\n\t\tt.segment.trackingCollection.trackingGroups.forEach((tg) => {\n\t\t\ttg.link(ref);\n\t\t\ttg.unlink(t.segment);\n\t\t});\n\n\t\tlast.trackingGroup.link(ref);\n\t});\n\treturn revertibles;\n}\n\nfunction appendLocalAnnotateToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tlet last = revertibles[revertibles.length - 1];\n\tdeltaArgs.deltaSegments.forEach((ds) => {\n\t\tconst propertyDeltas = ds.propertyDeltas;\n\t\tif (propertyDeltas) {\n\t\t\tif (\n\t\t\t\tlast?.operation === MergeTreeDeltaType.ANNOTATE &&\n\t\t\t\tmatchProperties(last?.propertyDeltas, propertyDeltas)\n\t\t\t) {\n\t\t\t\tlast.trackingGroup.link(ds.segment);\n\t\t\t} else {\n\t\t\t\tlast = {\n\t\t\t\t\toperation: MergeTreeDeltaType.ANNOTATE,\n\t\t\t\t\tpropertyDeltas,\n\t\t\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t\t\t};\n\t\t\t\tlast.trackingGroup.link(ds.segment);\n\t\t\t\trevertibles.push(last);\n\t\t\t}\n\t\t}\n\t});\n\treturn revertibles;\n}\n\n/**\n * @alpha\n */\nexport function appendToMergeTreeDeltaRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tif (deltaArgs.deltaSegments.length === 0) {\n\t\treturn;\n\t}\n\tswitch (deltaArgs.operation) {\n\t\tcase MergeTreeDeltaType.INSERT:\n\t\t\tappendLocalInsertToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\n\t\tcase MergeTreeDeltaType.REMOVE:\n\t\t\tappendLocalRemoveToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\n\t\tcase MergeTreeDeltaType.ANNOTATE:\n\t\t\tappendLocalAnnotateToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new UsageError(\"Unsupported event delta type\", {\n\t\t\t\toperation: deltaArgs.operation,\n\t\t\t});\n\t}\n}\n\n/**\n * @alpha\n */\nexport function discardMergeTreeDeltaRevertible(revertibles: MergeTreeDeltaRevertible[]) {\n\trevertibles.forEach((r) => {\n\t\tr.trackingGroup.tracked.forEach((t) => {\n\t\t\tt.trackingCollection.unlink(r.trackingGroup);\n\t\t\t// remove untracked local references\n\t\t\tif (t.trackingCollection.empty && !t.isLeaf()) {\n\t\t\t\tt.getSegment()?.localRefs?.removeLocalRef(t);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction revertLocalInsert(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.INSERT>,\n) {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\t\tassert(\n\t\t\ttracked.trackingCollection.unlink(revertible.trackingGroup),\n\t\t\t0x3f1 /* tracking group removed */,\n\t\t);\n\t\tassert(tracked.isLeaf(), 0x3f2 /* inserts must track segments */);\n\t\tif (toRemovalInfo(tracked) === undefined) {\n\t\t\tconst start = getPosition(mergeTreeWithRevert, tracked);\n\t\t\tdriver.removeRange(start, start + tracked.cachedLength);\n\t\t}\n\t}\n}\n\nfunction revertLocalRemove(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.REMOVE>,\n) {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\n\t\tassert(\n\t\t\ttracked.trackingCollection.unlink(revertible.trackingGroup),\n\t\t\t0x3f3 /* tracking group removed */,\n\t\t);\n\n\t\tassert(!tracked.isLeaf(), 0x3f4 /* removes must track local refs */);\n\n\t\tconst refSeg = tracked.getSegment();\n\t\tlet realPos = mergeTreeWithRevert.referencePositionToLocalPosition(tracked);\n\n\t\t// References which are on EndOfStringSegment don't return detached for pos,\n\t\t// they will return the length of the merge-tree. this case just catches\n\t\t// random references, likely not created in the revertible flow,\n\t\t// that are tying to be reverted for some reason.\n\t\tif (realPos === DetachedReferencePosition || refSeg === undefined) {\n\t\t\tthrow new UsageError(\"Cannot insert at detached references position\");\n\t\t}\n\n\t\tif (toRemovalInfo(refSeg) === undefined && refSeg.localRefs?.isAfterTombstone(tracked)) {\n\t\t\trealPos++;\n\t\t}\n\n\t\tconst props = tracked.properties as RemoveSegmentRefProperties;\n\t\tdriver.insertFromSpec(realPos, props.segSpec);\n\t\tconst insertSegment: ISegmentLeaf | undefined = mergeTreeWithRevert.getContainingSegment(\n\t\t\trealPos,\n\t\t\tmergeTreeWithRevert.collabWindow.currentSeq,\n\t\t\tmergeTreeWithRevert.collabWindow.clientId,\n\t\t).segment;\n\t\tassert(insertSegment !== undefined, 0x3f5 /* insert segment must exist at position */);\n\n\t\tconst localSlideFilter = (lref: LocalReferencePosition) =>\n\t\t\t(lref.properties as Partial<RemoveSegmentRefProperties>)?.referenceSpace ===\n\t\t\t\"mergeTreeDeltaRevertible\";\n\n\t\tconst insertRef: Partial<\n\t\t\tRecord<\"before\" | \"after\", DoublyLinkedList<LocalReferencePosition>>\n\t\t> = {};\n\t\tconst forward = insertSegment.ordinal < refSeg.ordinal;\n\t\tconst refHandler = (lref: LocalReferencePosition) => {\n\t\t\t// once we reach it keep the original reference where it is\n\t\t\t// we'll move tracking groups, and remove it as a last step.\n\t\t\tif (tracked === lref) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (localSlideFilter(lref)) {\n\t\t\t\tif (forward) {\n\t\t\t\t\tconst before = (insertRef.before ??= new DoublyLinkedList());\n\t\t\t\t\tbefore.push(lref);\n\t\t\t\t} else {\n\t\t\t\t\tconst after = (insertRef.after ??= new DoublyLinkedList());\n\t\t\t\t\tafter.unshift(lref);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tdepthFirstNodeWalk(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tinsertSegment.parent!,\n\t\t\tinsertSegment,\n\t\t\tundefined,\n\t\t\t(seg) => {\n\t\t\t\tif (seg.localRefs?.empty === false) {\n\t\t\t\t\treturn seg.localRefs.walkReferences(refHandler, undefined, forward);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tundefined,\n\t\t\tforward,\n\t\t);\n\t\tif (\n\t\t\tmergeTreeWithRevert?.__mergeTreeRevertible?.detachedReferences?.localRefs?.has(tracked)\n\t\t) {\n\t\t\tassert(forward, 0x3f6 /* forward should always be true when detached */);\n\t\t\tmergeTreeWithRevert?.__mergeTreeRevertible.detachedReferences.localRefs.walkReferences(\n\t\t\t\trefHandler,\n\t\t\t);\n\t\t}\n\n\t\tif (insertRef !== undefined) {\n\t\t\tconst localRefs = LocalReferenceCollection.setOrGet(insertSegment);\n\t\t\tif (insertRef.before?.empty === false) {\n\t\t\t\tlocalRefs.addBeforeTombstones(insertRef.before.map((n) => n.data));\n\t\t\t}\n\t\t\tif (insertRef.after?.empty === false) {\n\t\t\t\tlocalRefs.addAfterTombstones(insertRef.after.map((n) => n.data));\n\t\t\t}\n\t\t}\n\n\t\ttracked.trackingCollection.trackingGroups.forEach((tg) => {\n\t\t\ttg.link(insertSegment);\n\t\t\ttg.unlink(tracked);\n\t\t});\n\t\ttracked.getSegment()?.localRefs?.removeLocalRef(tracked);\n\t}\n}\n\nfunction revertLocalAnnotate(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.ANNOTATE>,\n) {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\t\tconst unlinked = tracked.trackingCollection.unlink(revertible.trackingGroup);\n\t\tassert(unlinked && tracked.isLeaf(), 0x3f7 /* annotates must track segments */);\n\t\tif (toRemovalInfo(tracked) === undefined) {\n\t\t\tconst start = getPosition(mergeTreeWithRevert, tracked);\n\t\t\tdriver.annotateRange(start, start + tracked.cachedLength, revertible.propertyDeltas);\n\t\t}\n\t}\n}\n\nfunction getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegment) {\n\treturn mergeTreeWithRevert.getPosition(\n\t\tsegment,\n\t\tmergeTreeWithRevert.collabWindow.currentSeq,\n\t\tmergeTreeWithRevert.collabWindow.clientId,\n\t);\n}\n\n/**\n * @alpha\n */\nexport function revertMergeTreeDeltaRevertibles(\n\tdriver: MergeTreeRevertibleDriver,\n\trevertibles: MergeTreeDeltaRevertible[],\n) {\n\tlet mergeTreeWithRevert: MergeTreeWithRevert | undefined;\n\n\twhile (revertibles.length > 0) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst r = revertibles.pop()!;\n\t\tconst operation = r.operation;\n\t\tif (r.trackingGroup.size > 0) {\n\t\t\tmergeTreeWithRevert ??= findMergeTreeWithRevert(r.trackingGroup.tracked[0]);\n\t\t\tswitch (operation) {\n\t\t\t\tcase MergeTreeDeltaType.INSERT:\n\t\t\t\t\trevertLocalInsert(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase MergeTreeDeltaType.REMOVE:\n\t\t\t\t\trevertLocalRemove(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase MergeTreeDeltaType.ANNOTATE:\n\t\t\t\t\trevertLocalAnnotate(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tunreachableCase(operation);\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmentGroupCollection.d.ts","sourceRoot":"","sources":["../src/segmentGroupCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"segmentGroupCollection.d.ts","sourceRoot":"","sources":["../src/segmentGroupCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,qBAAa,sBAAsB;IAItB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;gBAElC,OAAO,EAAE,QAAQ;IAK9C,IAAW,IAAI,WAEd;IAED,IAAW,KAAK,YAEf;IAGM,OAAO,CAAC,YAAY,EAAE,YAAY;IAMlC,OAAO,IAAI,YAAY,GAAG,SAAS;IAKnC,MAAM,CAAC,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO;IAU5C,GAAG,CAAC,IAAI,YAAY,GAAG,SAAS;IAIhC,MAAM,CAAC,OAAO,EAAE,QAAQ;IAO/B,OAAO,CAAC,aAAa;CAUrB"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.SegmentGroupCollection = void 0;
|
|
8
|
-
const
|
|
8
|
+
const index_js_1 = require("./collections/index.js");
|
|
9
9
|
/**
|
|
10
10
|
* @alpha
|
|
11
11
|
*/
|
|
@@ -13,7 +13,7 @@ class SegmentGroupCollection {
|
|
|
13
13
|
constructor(segment) {
|
|
14
14
|
this.segment = segment;
|
|
15
15
|
// eslint-disable-next-line import/no-deprecated
|
|
16
|
-
this.segmentGroups = new
|
|
16
|
+
this.segmentGroups = new index_js_1.DoublyLinkedList();
|
|
17
17
|
}
|
|
18
18
|
get size() {
|
|
19
19
|
return this.segmentGroups.length;
|
|
@@ -44,7 +44,7 @@ class SegmentGroupCollection {
|
|
|
44
44
|
return this.segmentGroups.pop ? this.segmentGroups.pop()?.data : undefined;
|
|
45
45
|
}
|
|
46
46
|
copyTo(segment) {
|
|
47
|
-
(0,
|
|
47
|
+
(0, index_js_1.walkList)(this.segmentGroups, (sg) => segment.segmentGroups.enqueueOnCopy(sg.data, this.segment));
|
|
48
48
|
}
|
|
49
49
|
// eslint-disable-next-line import/no-deprecated
|
|
50
50
|
enqueueOnCopy(segmentGroup, sourceSegment) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmentGroupCollection.js","sourceRoot":"","sources":["../src/segmentGroupCollection.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH
|
|
1
|
+
{"version":3,"file":"segmentGroupCollection.js","sourceRoot":"","sources":["../src/segmentGroupCollection.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qDAAoE;AAIpE;;GAEG;AACH,MAAa,sBAAsB;IAIlC,YAA6B,OAAiB;QAAjB,YAAO,GAAP,OAAO,CAAU;QAC7C,gDAAgD;QAChD,IAAI,CAAC,aAAa,GAAG,IAAI,2BAAgB,EAAgB,CAAC;IAC3D,CAAC;IAED,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,gDAAgD;IACzC,OAAO,CAAC,YAA0B;QACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,gDAAgD;IACzC,OAAO;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;IACzC,CAAC;IAED,gDAAgD;IACzC,MAAM,CAAE,YAA0B;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QACtE,IAAI,KAAK,KAAK,SAAS,EAAE;YACxB,OAAO,KAAK,CAAC;SACb;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,gDAAgD;IACzC,GAAG;QACT,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,CAAC;IAEM,MAAM,CAAC,OAAiB;QAC9B,IAAA,mBAAQ,EAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CACnC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAC1D,CAAC;IACH,CAAC;IAED,gDAAgD;IACxC,aAAa,CAAC,YAA0B,EAAE,aAAuB;QACxE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC3B,IAAI,YAAY,CAAC,aAAa,EAAE;YAC/B,+CAA+C;YAC/C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC3D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBACjB,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;aACnE;SACD;IACF,CAAC;CACD;AA5DD,wDA4DC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { DoublyLinkedList, walkList } from \"./collections/index.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { ISegment, SegmentGroup } from \"./mergeTreeNodes.js\";\n\n/**\n * @alpha\n */\nexport class SegmentGroupCollection {\n\t// eslint-disable-next-line import/no-deprecated\n\tprivate readonly segmentGroups: DoublyLinkedList<SegmentGroup>;\n\n\tconstructor(private readonly segment: ISegment) {\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tthis.segmentGroups = new DoublyLinkedList<SegmentGroup>();\n\t}\n\n\tpublic get size() {\n\t\treturn this.segmentGroups.length;\n\t}\n\n\tpublic get empty() {\n\t\treturn this.segmentGroups.empty;\n\t}\n\n\t// eslint-disable-next-line import/no-deprecated\n\tpublic enqueue(segmentGroup: SegmentGroup) {\n\t\tthis.segmentGroups.push(segmentGroup);\n\t\tsegmentGroup.segments.push(this.segment);\n\t}\n\n\t// eslint-disable-next-line import/no-deprecated\n\tpublic dequeue(): SegmentGroup | undefined {\n\t\treturn this.segmentGroups.shift()?.data;\n\t}\n\n\t// eslint-disable-next-line import/no-deprecated\n\tpublic remove?(segmentGroup: SegmentGroup): boolean {\n\t\tconst found = this.segmentGroups.find((v) => v.data === segmentGroup);\n\t\tif (found === undefined) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.segmentGroups.remove(found);\n\t\treturn true;\n\t}\n\n\t// eslint-disable-next-line import/no-deprecated\n\tpublic pop?(): SegmentGroup | undefined {\n\t\treturn this.segmentGroups.pop ? this.segmentGroups.pop()?.data : undefined;\n\t}\n\n\tpublic copyTo(segment: ISegment) {\n\t\twalkList(this.segmentGroups, (sg) =>\n\t\t\tsegment.segmentGroups.enqueueOnCopy(sg.data, this.segment),\n\t\t);\n\t}\n\n\t// eslint-disable-next-line import/no-deprecated\n\tprivate enqueueOnCopy(segmentGroup: SegmentGroup, sourceSegment: ISegment) {\n\t\tthis.enqueue(segmentGroup);\n\t\tif (segmentGroup.previousProps) {\n\t\t\t// duplicate the previousProps for this segment\n\t\t\tconst index = segmentGroup.segments.indexOf(sourceSegment);\n\t\t\tif (index !== -1) {\n\t\t\t\tsegmentGroup.previousProps.push(segmentGroup.previousProps[index]);\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { IMergeTreeAnnotateMsg } from "./ops";
|
|
6
|
-
import { PropertySet } from "./properties";
|
|
5
|
+
import { IMergeTreeAnnotateMsg } from "./ops.js";
|
|
6
|
+
import { PropertySet } from "./properties.js";
|
|
7
7
|
/**
|
|
8
8
|
* @alpha
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmentPropertiesManager.d.ts","sourceRoot":"","sources":["../src/segmentPropertiesManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"segmentPropertiesManager.d.ts","sourceRoot":"","sources":["../src/segmentPropertiesManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAsB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAElE;;GAEG;AACH,oBAAY,kBAAkB;IAC7B,wBAAwB;IACxB,IAAI,IAAA;IAEJ,eAAe;IACf,QAAQ,IAAA;CACR;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,qBAAqB,CAA8B;IAEpD,oBAAoB,CAAC,UAAU,EAAE,qBAAqB;IAI7D,OAAO,CAAC,sBAAsB;IAgBvB,aAAa,CACnB,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,EACrB,GAAG,CAAC,EAAE,MAAM,EACZ,aAAa,GAAE,OAAe,EAC9B,QAAQ,GAAE,kBAA4C,GACpD,WAAW;IAiDP,MAAM,CACZ,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,WAAW,GAAG,SAAS,EACjC,UAAU,EAAE,iBAAiB,GAC3B,WAAW,GAAG,SAAS;IAmBnB,oBAAoB;IAIpB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAG/C"}
|
|
@@ -7,9 +7,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.PropertiesManager = exports.PropertiesRollback = void 0;
|
|
8
8
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
9
9
|
const core_utils_1 = require("@fluidframework/core-utils");
|
|
10
|
-
const
|
|
10
|
+
const constants_js_1 = require("./constants.js");
|
|
11
11
|
// eslint-disable-next-line import/no-deprecated
|
|
12
|
-
const
|
|
12
|
+
const properties_js_1 = require("./properties.js");
|
|
13
13
|
/**
|
|
14
14
|
* @alpha
|
|
15
15
|
*/
|
|
@@ -41,14 +41,14 @@ class PropertiesManager {
|
|
|
41
41
|
}
|
|
42
42
|
addProperties(oldProps, newProps, seq, collaborating = false, rollback = PropertiesRollback.None) {
|
|
43
43
|
// eslint-disable-next-line import/no-deprecated
|
|
44
|
-
this.pendingKeyUpdateCount ?? (this.pendingKeyUpdateCount = (0,
|
|
44
|
+
this.pendingKeyUpdateCount ?? (this.pendingKeyUpdateCount = (0, properties_js_1.createMap)());
|
|
45
45
|
// Clean up counts for rolled back edits before modifying oldProps
|
|
46
46
|
if (collaborating && rollback === PropertiesRollback.Rollback) {
|
|
47
47
|
this.decrementPendingCounts(newProps);
|
|
48
48
|
}
|
|
49
49
|
const shouldModifyKey = (key) => {
|
|
50
|
-
if (seq ===
|
|
51
|
-
seq ===
|
|
50
|
+
if (seq === constants_js_1.UnassignedSequenceNumber ||
|
|
51
|
+
seq === constants_js_1.UniversalSequenceNumber ||
|
|
52
52
|
this.pendingKeyUpdateCount?.[key] === undefined) {
|
|
53
53
|
return true;
|
|
54
54
|
}
|
|
@@ -57,7 +57,7 @@ class PropertiesManager {
|
|
|
57
57
|
const deltas = {};
|
|
58
58
|
for (const key of Object.keys(newProps)) {
|
|
59
59
|
if (collaborating) {
|
|
60
|
-
if (seq ===
|
|
60
|
+
if (seq === constants_js_1.UnassignedSequenceNumber) {
|
|
61
61
|
if (this.pendingKeyUpdateCount?.[key] === undefined) {
|
|
62
62
|
this.pendingKeyUpdateCount[key] = 0;
|
|
63
63
|
}
|
|
@@ -84,7 +84,7 @@ class PropertiesManager {
|
|
|
84
84
|
copyTo(oldProps, newProps, newManager) {
|
|
85
85
|
if (oldProps) {
|
|
86
86
|
// eslint-disable-next-line no-param-reassign, import/no-deprecated
|
|
87
|
-
newProps ?? (newProps = (0,
|
|
87
|
+
newProps ?? (newProps = (0, properties_js_1.createMap)());
|
|
88
88
|
if (!newManager) {
|
|
89
89
|
throw new Error("Must provide new PropertyManager");
|
|
90
90
|
}
|
|
@@ -92,7 +92,7 @@ class PropertiesManager {
|
|
|
92
92
|
newProps[key] = oldProps[key];
|
|
93
93
|
}
|
|
94
94
|
// eslint-disable-next-line import/no-deprecated
|
|
95
|
-
newManager.pendingKeyUpdateCount = (0,
|
|
95
|
+
newManager.pendingKeyUpdateCount = (0, properties_js_1.createMap)();
|
|
96
96
|
for (const key of Object.keys(this.pendingKeyUpdateCount)) {
|
|
97
97
|
newManager.pendingKeyUpdateCount[key] = this.pendingKeyUpdateCount[key];
|
|
98
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmentPropertiesManager.js","sourceRoot":"","sources":["../src/segmentPropertiesManager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6DAA6D;AAE7D,2DAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"segmentPropertiesManager.js","sourceRoot":"","sources":["../src/segmentPropertiesManager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6DAA6D;AAE7D,2DAAoD;AACpD,iDAAmF;AAEnF,gDAAgD;AAChD,mDAAkE;AAElE;;GAEG;AACH,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC7B,wBAAwB;IACxB,2DAAI,CAAA;IAEJ,eAAe;IACf,mEAAQ,CAAA;AACT,CAAC,EANW,kBAAkB,kCAAlB,kBAAkB,QAM7B;AAED;;GAEG;AACH,MAAa,iBAAiB;IAGtB,oBAAoB,CAAC,UAAiC;QAC5D,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEO,sBAAsB,CAAC,KAAkB;QAChD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACrC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;gBACpD,IAAA,mBAAM,EACL,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EACnC,KAAK,CAAC,2DAA2D,CACjE,CAAC;gBACF,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBAC5C,gEAAgE;oBAChE,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;iBACvC;aACD;SACD;IACF,CAAC;IAEM,aAAa,CACnB,QAAqB,EACrB,QAAqB,EACrB,GAAY,EACZ,gBAAyB,KAAK,EAC9B,WAA+B,kBAAkB,CAAC,IAAI;QAEtD,gDAAgD;QAChD,IAAI,CAAC,qBAAqB,KAA1B,IAAI,CAAC,qBAAqB,GAAK,IAAA,yBAAS,GAAU,EAAC;QAEnD,kEAAkE;QAClE,IAAI,aAAa,IAAI,QAAQ,KAAK,kBAAkB,CAAC,QAAQ,EAAE;YAC9D,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;SACtC;QAED,MAAM,eAAe,GAAG,CAAC,GAAW,EAAW,EAAE;YAChD,IACC,GAAG,KAAK,uCAAwB;gBAChC,GAAG,KAAK,sCAAuB;gBAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,EAC9C;gBACD,OAAO,IAAI,CAAC;aACZ;YACD,OAAO,KAAK,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACxC,IAAI,aAAa,EAAE;gBAClB,IAAI,GAAG,KAAK,uCAAwB,EAAE;oBACrC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;wBACpD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBACpC;oBACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;iBAClC;qBAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE;oBACjC,SAAS;iBACT;aACD;YAED,MAAM,aAAa,GAAQ,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,wEAAwE;YACxE,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;YACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACtB,gEAAgE;gBAChE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;aACrB;iBAAM;gBACN,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;aACzB;SACD;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,MAAM,CACZ,QAAqB,EACrB,QAAiC,EACjC,UAA6B;QAE7B,IAAI,QAAQ,EAAE;YACb,mEAAmE;YACnE,QAAQ,KAAR,QAAQ,GAAK,IAAA,yBAAS,GAAO,EAAC;YAC9B,IAAI,CAAC,UAAU,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;aACpD;YACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;aAC9B;YACD,gDAAgD;YAChD,UAAU,CAAC,qBAAqB,GAAG,IAAA,yBAAS,GAAU,CAAC;YACvD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAsB,CAAC,EAAE;gBAC3D,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,qBAAsB,CAAC,GAAG,CAAC,CAAC;aACzE;SACD;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;IAEM,oBAAoB;QAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAsB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5D,CAAC;IAEM,kBAAkB,CAAC,GAAW;QACpC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;CACD;AA5GD,8CA4GC","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 { assert } from \"@fluidframework/core-utils\";\nimport { UnassignedSequenceNumber, UniversalSequenceNumber } from \"./constants.js\";\nimport { IMergeTreeAnnotateMsg } from \"./ops.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { createMap, MapLike, PropertySet } from \"./properties.js\";\n\n/**\n * @alpha\n */\nexport enum PropertiesRollback {\n\t/** Not in a rollback */\n\tNone,\n\n\t/** Rollback */\n\tRollback,\n}\n\n/**\n * @alpha\n */\nexport class PropertiesManager {\n\tprivate pendingKeyUpdateCount: MapLike<number> | undefined;\n\n\tpublic ackPendingProperties(annotateOp: IMergeTreeAnnotateMsg) {\n\t\tthis.decrementPendingCounts(annotateOp.props);\n\t}\n\n\tprivate decrementPendingCounts(props: PropertySet) {\n\t\tfor (const key of Object.keys(props)) {\n\t\t\tif (this.pendingKeyUpdateCount?.[key] !== undefined) {\n\t\t\t\tassert(\n\t\t\t\t\tthis.pendingKeyUpdateCount[key] > 0,\n\t\t\t\t\t0x05c /* \"Trying to update more annotate props than do exist!\" */,\n\t\t\t\t);\n\t\t\t\tthis.pendingKeyUpdateCount[key]--;\n\t\t\t\tif (this.pendingKeyUpdateCount?.[key] === 0) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\t\tdelete this.pendingKeyUpdateCount[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic addProperties(\n\t\toldProps: PropertySet,\n\t\tnewProps: PropertySet,\n\t\tseq?: number,\n\t\tcollaborating: boolean = false,\n\t\trollback: PropertiesRollback = PropertiesRollback.None,\n\t): PropertySet {\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tthis.pendingKeyUpdateCount ??= createMap<number>();\n\n\t\t// Clean up counts for rolled back edits before modifying oldProps\n\t\tif (collaborating && rollback === PropertiesRollback.Rollback) {\n\t\t\tthis.decrementPendingCounts(newProps);\n\t\t}\n\n\t\tconst shouldModifyKey = (key: string): boolean => {\n\t\t\tif (\n\t\t\t\tseq === UnassignedSequenceNumber ||\n\t\t\t\tseq === UniversalSequenceNumber ||\n\t\t\t\tthis.pendingKeyUpdateCount?.[key] === undefined\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst deltas: PropertySet = {};\n\n\t\tfor (const key of Object.keys(newProps)) {\n\t\t\tif (collaborating) {\n\t\t\t\tif (seq === UnassignedSequenceNumber) {\n\t\t\t\t\tif (this.pendingKeyUpdateCount?.[key] === undefined) {\n\t\t\t\t\t\tthis.pendingKeyUpdateCount[key] = 0;\n\t\t\t\t\t}\n\t\t\t\t\tthis.pendingKeyUpdateCount[key]++;\n\t\t\t\t} else if (!shouldModifyKey(key)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst previousValue: any = oldProps[key];\n\t\t\t// The delta should be null if undefined, as that's how we encode delete\n\t\t\tdeltas[key] = previousValue === undefined ? null : previousValue;\n\t\t\tconst newValue = newProps[key];\n\t\t\tif (newValue === null) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\tdelete oldProps[key];\n\t\t\t} else {\n\t\t\t\toldProps[key] = newValue;\n\t\t\t}\n\t\t}\n\n\t\treturn deltas;\n\t}\n\n\tpublic copyTo(\n\t\toldProps: PropertySet,\n\t\tnewProps: PropertySet | undefined,\n\t\tnewManager: PropertiesManager,\n\t): PropertySet | undefined {\n\t\tif (oldProps) {\n\t\t\t// eslint-disable-next-line no-param-reassign, import/no-deprecated\n\t\t\tnewProps ??= createMap<any>();\n\t\t\tif (!newManager) {\n\t\t\t\tthrow new Error(\"Must provide new PropertyManager\");\n\t\t\t}\n\t\t\tfor (const key of Object.keys(oldProps)) {\n\t\t\t\tnewProps[key] = oldProps[key];\n\t\t\t}\n\t\t\t// eslint-disable-next-line import/no-deprecated\n\t\t\tnewManager.pendingKeyUpdateCount = createMap<number>();\n\t\t\tfor (const key of Object.keys(this.pendingKeyUpdateCount!)) {\n\t\t\t\tnewManager.pendingKeyUpdateCount[key] = this.pendingKeyUpdateCount![key];\n\t\t\t}\n\t\t}\n\t\treturn newProps;\n\t}\n\n\tpublic hasPendingProperties() {\n\t\treturn Object.keys(this.pendingKeyUpdateCount!).length > 0;\n\t}\n\n\tpublic hasPendingProperty(key: string): boolean {\n\t\treturn (this.pendingKeyUpdateCount?.[key] ?? 0) > 0;\n\t}\n}\n"]}
|
package/dist/snapshotChunks.d.ts
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
import { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
6
6
|
import { IFluidSerializer } from "@fluidframework/shared-object-base";
|
|
7
7
|
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
8
|
-
import { PropertySet } from "./properties";
|
|
9
|
-
import { IJSONSegment } from "./ops";
|
|
10
|
-
import { SerializedAttributionCollection } from "./attributionCollection";
|
|
8
|
+
import { PropertySet } from "./properties.js";
|
|
9
|
+
import { IJSONSegment } from "./ops.js";
|
|
10
|
+
import { SerializedAttributionCollection } from "./attributionCollection.js";
|
|
11
11
|
export interface VersionedMergeTreeChunk {
|
|
12
12
|
version: undefined | "1";
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshotChunks.d.ts","sourceRoot":"","sources":["../src/snapshotChunks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"snapshotChunks.d.ts","sourceRoot":"","sources":["../src/snapshotChunks.ts"],"names":[],"mappings":"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"}
|
package/dist/snapshotChunks.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.toLatestVersion = exports.serializeAsMaxSupportedVersion = exports.serializeAsMinSupportedVersion = exports.hasMergeInfo = void 0;
|
|
8
|
-
const
|
|
8
|
+
const snapshotlegacy_js_1 = require("./snapshotlegacy.js");
|
|
9
9
|
/**
|
|
10
10
|
* Returns true if the given 'spec' is an IJSONSegmentWithMergeInfo.
|
|
11
11
|
*/
|
|
@@ -30,7 +30,7 @@ function serializeAsMinSupportedVersion(path, chunk, logger, options, serializer
|
|
|
30
30
|
break;
|
|
31
31
|
case "1":
|
|
32
32
|
const chunkV1 = chunk;
|
|
33
|
-
const headerMetadata = path ===
|
|
33
|
+
const headerMetadata = path === snapshotlegacy_js_1.SnapshotLegacy.header ? chunkV1.headerMetadata : undefined;
|
|
34
34
|
targetChuck = {
|
|
35
35
|
version: undefined,
|
|
36
36
|
chunkStartSegmentIndex: chunkV1.startIndex,
|
|
@@ -77,13 +77,13 @@ function toLatestVersion(path, chunk, logger, options) {
|
|
|
77
77
|
}
|
|
78
78
|
exports.toLatestVersion = toLatestVersion;
|
|
79
79
|
function buildHeaderMetadataForLegacyChunk(path, chunk, options) {
|
|
80
|
-
if (path ===
|
|
80
|
+
if (path === snapshotlegacy_js_1.SnapshotLegacy.header) {
|
|
81
81
|
if (chunk.headerMetadata !== undefined) {
|
|
82
82
|
return chunk.headerMetadata;
|
|
83
83
|
}
|
|
84
|
-
const chunkIds = [{ id:
|
|
84
|
+
const chunkIds = [{ id: snapshotlegacy_js_1.SnapshotLegacy.header }];
|
|
85
85
|
if (chunk.chunkLengthChars < chunk.totalLengthChars) {
|
|
86
|
-
chunkIds.push({ id:
|
|
86
|
+
chunkIds.push({ id: snapshotlegacy_js_1.SnapshotLegacy.body });
|
|
87
87
|
}
|
|
88
88
|
return {
|
|
89
89
|
orderedChunkMetadata: chunkIds,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshotChunks.js","sourceRoot":"","sources":["../src/snapshotChunks.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAQH,
|
|
1
|
+
{"version":3,"file":"snapshotChunks.js","sourceRoot":"","sources":["../src/snapshotChunks.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 { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { IFluidSerializer } from \"@fluidframework/shared-object-base\";\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils\";\nimport { PropertySet } from \"./properties.js\";\nimport { SnapshotLegacy } from \"./snapshotlegacy.js\";\nimport { IJSONSegment } from \"./ops.js\";\nimport { SerializedAttributionCollection } from \"./attributionCollection.js\";\n\nexport interface VersionedMergeTreeChunk {\n\tversion: undefined | \"1\";\n}\n\nexport type JsonSegmentSpecs = IJSONSegment | IJSONSegmentWithMergeInfo;\n\nexport interface MergeTreeChunkLegacy extends VersionedMergeTreeChunk {\n\tversion: undefined;\n\tchunkStartSegmentIndex: number;\n\tchunkSegmentCount: number;\n\tchunkLengthChars: number;\n\ttotalLengthChars?: number;\n\ttotalSegmentCount?: number;\n\tchunkSequenceNumber?: number;\n\tchunkMinSequenceNumber?: number;\n\tsegmentTexts: JsonSegmentSpecs[];\n\theaderMetadata?: MergeTreeHeaderMetadata;\n\tattribution?: SerializedAttributionCollection;\n}\n\nexport interface MergeTreeHeaderChunkMetadata {\n\tid: string;\n}\n\nexport interface MergeTreeHeaderMetadata {\n\ttotalLength: number;\n\ttotalSegmentCount: number;\n\torderedChunkMetadata: MergeTreeHeaderChunkMetadata[];\n\tsequenceNumber: number;\n\tminSequenceNumber: number;\n}\n\nexport interface MergeTreeChunkV1 extends VersionedMergeTreeChunk {\n\tversion: \"1\";\n\tstartIndex: number;\n\tsegmentCount: number;\n\tlength: number;\n\tsegments: JsonSegmentSpecs[];\n\theaderMetadata: MergeTreeHeaderMetadata | undefined;\n\tattribution?: SerializedAttributionCollection;\n}\n\n/**\n * Used during snapshotting to record the metadata required to merge segments above the MSN\n * to the raw output of `ISegment.toJSONObject()`. (Note that IJSONSegment may be a raw\n * string or array, which is why this interface wraps the original IJSONSegment instead of\n * extending it.)\n */\nexport interface IJSONSegmentWithMergeInfo {\n\tjson: IJSONSegment;\n\tclient?: string;\n\tseq?: number;\n\tremovedClientIds?: string[];\n\tremovedSeq?: number;\n\tmovedClientIds?: string[];\n\tmovedSeq?: number;\n\tmovedSeqs?: number[];\n}\n\n/**\n * Returns true if the given 'spec' is an IJSONSegmentWithMergeInfo.\n */\nexport function hasMergeInfo(\n\tspec: IJSONSegment | IJSONSegmentWithMergeInfo,\n): spec is IJSONSegmentWithMergeInfo {\n\treturn !!spec && typeof spec === \"object\" && \"json\" in spec;\n}\n\nexport function serializeAsMinSupportedVersion(\n\tpath: string,\n\tchunk: VersionedMergeTreeChunk,\n\tlogger: ITelemetryLoggerExt,\n\toptions: PropertySet | undefined,\n\tserializer: IFluidSerializer,\n\tbind: IFluidHandle,\n) {\n\tlet targetChuck: MergeTreeChunkLegacy;\n\n\tif (chunk.version !== undefined) {\n\t\tlogger.send({\n\t\t\teventName: \"MergeTreeChunk:serializeAsMinSupportedVersion\",\n\t\t\tcategory: \"generic\",\n\t\t\tfromChunkVersion: chunk.version,\n\t\t\ttoChunkVersion: undefined,\n\t\t});\n\t}\n\n\tswitch (chunk.version) {\n\t\tcase undefined:\n\t\t\ttargetChuck = chunk as MergeTreeChunkLegacy;\n\t\t\ttargetChuck.headerMetadata = buildHeaderMetadataForLegacyChunk(\n\t\t\t\tpath,\n\t\t\t\ttargetChuck,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\tbreak;\n\n\t\tcase \"1\":\n\t\t\tconst chunkV1 = chunk as MergeTreeChunkV1;\n\t\t\tconst headerMetadata =\n\t\t\t\tpath === SnapshotLegacy.header ? chunkV1.headerMetadata : undefined;\n\t\t\ttargetChuck = {\n\t\t\t\tversion: undefined,\n\t\t\t\tchunkStartSegmentIndex: chunkV1.startIndex,\n\t\t\t\tchunkLengthChars: chunkV1.length,\n\t\t\t\tchunkSegmentCount: chunkV1.segmentCount,\n\t\t\t\tsegmentTexts: chunkV1.segments,\n\t\t\t\ttotalLengthChars: headerMetadata?.totalLength,\n\t\t\t\ttotalSegmentCount: headerMetadata?.totalSegmentCount,\n\t\t\t\tchunkSequenceNumber: headerMetadata?.sequenceNumber,\n\t\t\t\tchunkMinSequenceNumber: headerMetadata?.minSequenceNumber,\n\t\t\t\theaderMetadata,\n\t\t\t};\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported chunk path: ${path} version: ${chunk.version}`);\n\t}\n\treturn serializer.stringify(targetChuck, bind);\n}\n\nexport function serializeAsMaxSupportedVersion(\n\tpath: string,\n\tchunk: VersionedMergeTreeChunk,\n\tlogger: ITelemetryLoggerExt,\n\toptions: PropertySet | undefined,\n\tserializer: IFluidSerializer,\n\tbind: IFluidHandle,\n) {\n\tconst targetChuck = toLatestVersion(path, chunk, logger, options);\n\treturn serializer.stringify(targetChuck, bind);\n}\n\nexport function toLatestVersion(\n\tpath: string,\n\tchunk: VersionedMergeTreeChunk,\n\tlogger: ITelemetryLoggerExt,\n\toptions: PropertySet | undefined,\n): MergeTreeChunkV1 {\n\tswitch (chunk.version) {\n\t\tcase undefined: {\n\t\t\tconst chunkLegacy = chunk as MergeTreeChunkLegacy;\n\t\t\treturn {\n\t\t\t\tversion: \"1\",\n\t\t\t\tlength: chunkLegacy.chunkLengthChars,\n\t\t\t\tsegmentCount: chunkLegacy.chunkSegmentCount,\n\t\t\t\theaderMetadata: buildHeaderMetadataForLegacyChunk(path, chunkLegacy, options),\n\t\t\t\tsegments: chunkLegacy.segmentTexts,\n\t\t\t\tstartIndex: chunkLegacy.chunkStartSegmentIndex,\n\t\t\t\tattribution: chunkLegacy.attribution,\n\t\t\t};\n\t\t}\n\t\tcase \"1\":\n\t\t\treturn chunk as MergeTreeChunkV1;\n\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported chunk path: ${path} version: ${chunk.version}`);\n\t}\n}\n\nfunction buildHeaderMetadataForLegacyChunk(\n\tpath: string,\n\tchunk: MergeTreeChunkLegacy,\n\toptions: PropertySet | undefined,\n): MergeTreeHeaderMetadata | undefined {\n\tif (path === SnapshotLegacy.header) {\n\t\tif (chunk.headerMetadata !== undefined) {\n\t\t\treturn chunk.headerMetadata;\n\t\t}\n\t\tconst chunkIds: MergeTreeHeaderChunkMetadata[] = [{ id: SnapshotLegacy.header }];\n\t\tif (chunk.chunkLengthChars < chunk.totalLengthChars!) {\n\t\t\tchunkIds.push({ id: SnapshotLegacy.body });\n\t\t}\n\t\treturn {\n\t\t\torderedChunkMetadata: chunkIds,\n\t\t\tminSequenceNumber: chunk.chunkMinSequenceNumber!,\n\t\t\tsequenceNumber: chunk.chunkSequenceNumber!,\n\t\t\ttotalLength: chunk.totalLengthChars!,\n\t\t\ttotalSegmentCount: chunk.totalSegmentCount!,\n\t\t};\n\t}\n\treturn undefined;\n}\n"]}
|