@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributionCollection.spec.js","sourceRoot":"","sources":["../../src/test/attributionCollection.spec.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 { strict as assert } from \"assert\";\nimport {\n\tcreateWeightedGenerator,\n\tGenerator,\n\tIRandom,\n\tmakeRandom,\n\tperformFuzzActions,\n\ttake,\n} from \"@fluid-private/stochastic-test-utils\";\nimport { AttributionKey } from \"@fluidframework/runtime-definitions\";\nimport { AttributionCollection, SerializedAttributionCollection } from \"../attributionCollection\";\nimport { BaseSegment, ISegment } from \"../mergeTreeNodes\";\n\nconst opKey = (seq: number): AttributionKey => ({ type: \"op\", seq });\nconst detachedKey: AttributionKey = { type: \"detached\", id: 0 };\n\ndescribe(\"AttributionCollection\", () => {\n\tconst makeCollectionWithChannel = ({ length, seq }: { length: number; seq: number }) => {\n\t\tconst collection = new AttributionCollection(length, null);\n\t\tcollection.update(\"foo\", new AttributionCollection(length, opKey(seq)));\n\t\treturn collection;\n\t};\n\n\tdescribe(\".getAtOffset\", () => {\n\t\tdescribe(\"on a collection with a single entry\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\n\t\t\tit(\"returns the entry for offsets within the length range\", () => {\n\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(100));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tit(\"throws for queries outside the range\", () => {\n\t\t\t\tassert.throws(() => collection.getAtOffset(-1));\n\t\t\t\tassert.throws(() => collection.getAtOffset(5));\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"on a collection with multiple entries\", () => {\n\t\t\tconst collection = new AttributionCollection(3, opKey(100));\n\t\t\tcollection.append(new AttributionCollection(5, opKey(101)));\n\t\t\tit(\"returns the correct entries\", () => {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(100));\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 3; i < 8; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(101));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tit(\"works on collections with entries in channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 3, seq: 300 });\n\t\t\tfor (const offset of [0, 1, 2]) {\n\t\t\t\tassert.deepEqual(collection.getAtOffset(offset, \"foo\"), opKey(300));\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\".splitAt\", () => {\n\t\tdescribe(\"on a collection with 3 entries\", () => {\n\t\t\tlet collection: AttributionCollection;\n\t\t\tbeforeEach(() => {\n\t\t\t\tcollection = new AttributionCollection(3, opKey(100));\n\t\t\t\tcollection.append(new AttributionCollection(2, opKey(101)));\n\t\t\t\tcollection.append(new AttributionCollection(1, opKey(102)));\n\t\t\t});\n\n\t\t\tit(\"can split on non-breakpoints\", () => {\n\t\t\t\tconst splitCollection = collection.splitAt(4);\n\t\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t\t{ offset: 3, key: opKey(101) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(collection.length, 4);\n\t\t\t\tassert.deepEqual(splitCollection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(101) },\n\t\t\t\t\t{ offset: 1, key: opKey(102) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(splitCollection.length, 2);\n\t\t\t});\n\n\t\t\tit(\"can split on breakpoints\", () => {\n\t\t\t\tconst splitCollection = collection.splitAt(5);\n\t\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t\t{ offset: 3, key: opKey(101) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(collection.length, 5);\n\t\t\t\tassert.deepEqual(splitCollection.getAll().root, [{ offset: 0, key: opKey(102) }]);\n\t\t\t\tassert.equal(splitCollection.length, 1);\n\t\t\t});\n\t\t});\n\n\t\tit(\"can split collection with a single value\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\t\t\tconst splitCollection = collection.splitAt(3);\n\t\t\tassert.equal(collection.length, 3);\n\t\t\tassert.equal(splitCollection.length, 2);\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tassert.deepEqual(splitCollection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t});\n\n\t\tit(\"splits channels\", () => {\n\t\t\tconst collection = new AttributionCollection(5, null);\n\t\t\tcollection.update(\"foo\", new AttributionCollection(5, opKey(100)));\n\t\t\tconst splitCollection = collection.splitAt(2);\n\t\t\tassert.deepEqual(collection.getAll().channels, {\n\t\t\t\tfoo: [{ offset: 0, key: opKey(100) }],\n\t\t\t});\n\t\t\tassert.deepEqual(splitCollection.getAll().channels, {\n\t\t\t\tfoo: [{ offset: 0, key: opKey(100) }],\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\".append\", () => {\n\t\tit(\"modifies the receiving collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tcollection.append(new AttributionCollection(1, opKey(101)));\n\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t{ offset: 2, key: opKey(101) },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"does not modify the argument collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tconst appendedCollection = new AttributionCollection(1, opKey(101));\n\t\t\tassert.deepEqual(appendedCollection.getAll().root, [{ offset: 0, key: opKey(101) }]);\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(appendedCollection.getAll().root, [{ offset: 0, key: opKey(101) }]);\n\t\t});\n\n\t\tit(\"coalesces referentially equal values at the join point\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tcollection.append(new AttributionCollection(7, opKey(100)));\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tassert.equal(collection.length, 9);\n\t\t});\n\n\t\tdescribe(\"appends channels\", () => {\n\t\t\tit(\"when both collections have the channel\", () => {\n\t\t\t\tconst appender = makeCollectionWithChannel({ length: 2, seq: 100 });\n\t\t\t\tappender.append(makeCollectionWithChannel({ length: 5, seq: 200 }));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: opKey(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: opKey(200),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"when only appended collection has a channel\", () => {\n\t\t\t\tconst appender = new AttributionCollection(2, null);\n\t\t\t\tappender.append(makeCollectionWithChannel({ length: 5, seq: 200 }));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: opKey(200),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"when only segment being appended to has a channel\", () => {\n\t\t\t\tconst appender = makeCollectionWithChannel({ length: 2, seq: 100 });\n\t\t\t\tappender.append(new AttributionCollection(5, null));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: opKey(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\".channelNames\", () => {\n\t\tit(\"is empty when collection has no channels\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tassert.deepEqual(collection.channelNames, []);\n\t\t});\n\n\t\tit(\"returns all channels with content for collection with channels\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2));\n\t\t\tcollection.update(\"bar\", new AttributionCollection(2));\n\t\t\tassert.deepEqual(collection.channelNames, [\"foo\", \"bar\"]);\n\t\t});\n\t});\n\n\tdescribe(\".populateAttributionCollections\", () => {\n\t\tit(\"correctly splits segment boundaries on breakpoints\", () => {\n\t\t\tconst segments = [{ cachedLength: 5 }, { cachedLength: 4 }] as ISegment[];\n\t\t\tAttributionCollection.populateAttributionCollections(segments, {\n\t\t\t\tlength: 9,\n\t\t\t\tposBreakpoints: [0, 2, 5, 7],\n\t\t\t\tseqs: [10, 12, 15, 17],\n\t\t\t});\n\t\t\tassert.deepEqual(segments[0].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(10) },\n\t\t\t\t{ offset: 2, key: opKey(12) },\n\t\t\t]);\n\n\t\t\tassert.deepEqual(segments[1].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(15) },\n\t\t\t\t{ offset: 2, key: opKey(17) },\n\t\t\t]);\n\n\t\t\tfor (const segment of segments) {\n\t\t\t\tassert.equal(segment.attribution?.length, segment.cachedLength);\n\t\t\t}\n\t\t});\n\n\t\tit(\"correctly splits segment boundaries between breakpoints\", () => {\n\t\t\tconst segments = [{ cachedLength: 4 }, { cachedLength: 5 }] as ISegment[];\n\t\t\tAttributionCollection.populateAttributionCollections(segments, {\n\t\t\t\tlength: 9,\n\t\t\t\tposBreakpoints: [0, 2, 5, 7],\n\t\t\t\tseqs: [10, 12, 15, 17],\n\t\t\t});\n\t\t\tassert.deepEqual(segments[0].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(10) },\n\t\t\t\t{ offset: 2, key: opKey(12) },\n\t\t\t]);\n\n\t\t\tassert.deepEqual(segments[1].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(12) },\n\t\t\t\t{ offset: 1, key: opKey(15) },\n\t\t\t\t{ offset: 3, key: opKey(17) },\n\t\t\t]);\n\n\t\t\tfor (const segment of segments) {\n\t\t\t\tassert.equal(segment.attribution?.length, segment.cachedLength);\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"serializeAttributionCollections\", () => {\n\t\tit(\"combines equal values on endpoints\", () => {\n\t\t\tconst segments = [\n\t\t\t\t{\n\t\t\t\t\tattribution: new AttributionCollection(4, opKey(0)),\n\t\t\t\t\tcachedLength: 4,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tattribution: new AttributionCollection(5, opKey(0)),\n\t\t\t\t\tcachedLength: 5,\n\t\t\t\t},\n\t\t\t] as unknown as ISegment[];\n\t\t\tconst blob = AttributionCollection.serializeAttributionCollections(segments);\n\t\t\tassert.deepEqual(blob, {\n\t\t\t\tposBreakpoints: [0],\n\t\t\t\tseqs: [0],\n\t\t\t\tlength: 9,\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"serializeAttributionCollections and populateAttributionCollections round-trip\", () => {\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst seg = (length: number): ISegment => ({ cachedLength: length }) as ISegment;\n\t\tconst testCases: {\n\t\t\tname: string;\n\t\t\tblob: SerializedAttributionCollection;\n\t\t\tsegments: ISegment[];\n\t\t}[] = [\n\t\t\t{\n\t\t\t\tname: \"single key\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 3,\n\t\t\t\t\tposBreakpoints: [0],\n\t\t\t\t\tseqs: [51],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"several keys on a single segment\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 1, 3, 5],\n\t\t\t\t\tseqs: [1, 2, 3, 4],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(7)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key spanning multiple segments\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0],\n\t\t\t\t\tseqs: [1],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key and segment boundary that align\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 3],\n\t\t\t\t\tseqs: [0, 1],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"detached attribution keys\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 3],\n\t\t\t\t\tseqs: [1, detachedKey],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"entry with channels\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 5],\n\t\t\t\t\tseqs: [3, null],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: {\n\t\t\t\t\t\t\tposBreakpoints: [0, 3, 5],\n\t\t\t\t\t\t\tseqs: [4, null, 5],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t];\n\n\t\tfor (const { name, blob, segments } of testCases) {\n\t\t\tit(name, () => {\n\t\t\t\tAttributionCollection.populateAttributionCollections(segments, blob);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tAttributionCollection.serializeAttributionCollections(segments),\n\t\t\t\t\tblob,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\n\tdescribe(\".clone\", () => {\n\t\tit(\"copies the original collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tconst appendedCollection = new AttributionCollection(1, opKey(101));\n\t\t\tconst copy = collection.clone();\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t{ offset: 2, key: opKey(101) },\n\t\t\t]);\n\t\t\tassert.deepEqual(copy.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t});\n\n\t\tit(\"copies channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 2, seq: 25 });\n\t\t\tconst appendedCollection = makeCollectionWithChannel({ length: 3, seq: 26 });\n\t\t\tconst copy = collection.clone();\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(collection.getAll().channels?.foo, [\n\t\t\t\t{ offset: 0, key: opKey(25) },\n\t\t\t\t{ offset: 2, key: opKey(26) },\n\t\t\t]);\n\t\t\tassert.deepEqual(copy.getAll().channels?.foo, [{ offset: 0, key: opKey(25) }]);\n\t\t});\n\t});\n\n\tdescribe(\".update\", () => {\n\t\tlet collection: AttributionCollection;\n\t\tbeforeEach(() => {\n\t\t\tcollection = new AttributionCollection(2, null);\n\t\t\tcollection.update(\"bar\", new AttributionCollection(2, opKey(10)));\n\t\t\tassert.deepEqual(\n\t\t\t\tcollection.getAtOffset(0, \"foo\"),\n\t\t\t\tundefined,\n\t\t\t\t\"channel should be undefined on creation\",\n\t\t\t);\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tassert.deepEqual(\n\t\t\t\tcollection.getAtOffset(0, \"bar\"),\n\t\t\t\topKey(10),\n\t\t\t\t\"update should never modify unrelated channels\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"creates a new channel when updating from an undefined state\", () => {\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(5)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0, \"foo\"), opKey(5));\n\t\t});\n\n\t\tit(\"overrides earlier calls with later ones\", () => {\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(3)));\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(5)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0, \"foo\"), opKey(5));\n\t\t});\n\n\t\tit(\"can update the root channel\", () => {\n\t\t\tcollection.update(undefined, new AttributionCollection(2, opKey(3)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0), opKey(3));\n\t\t});\n\n\t\tit(\"doesn't tolerate updates to channels having inconsistent length fields\", () => {\n\t\t\tassert.throws(() => collection.update(\"foo\", new AttributionCollection(3, null)));\n\t\t});\n\t});\n\n\tdescribe(\"serialized structure is independent of segment lengths\", () => {\n\t\tinterface State {\n\t\t\trandom: IRandom;\n\t\t\tsegments: ISegment[];\n\t\t}\n\n\t\tinterface InsertAction {\n\t\t\ttype: \"insert\";\n\t\t\tcollection: AttributionCollection;\n\t\t}\n\n\t\tinterface SplitAction {\n\t\t\ttype: \"split\";\n\t\t\tsegIndex: number;\n\t\t\toffset: number;\n\t\t}\n\n\t\tinterface AppendAction {\n\t\t\ttype: \"append\";\n\t\t\tsegIndex: number;\n\t\t}\n\n\t\tclass Segment extends BaseSegment {\n\t\t\tpublic readonly type = \"testSeg\";\n\t\t\tpublic constructor(length: number) {\n\t\t\t\tsuper();\n\t\t\t\tthis.cachedLength = length;\n\t\t\t}\n\n\t\t\tpublic toJSONObject() {\n\t\t\t\treturn { length: this.cachedLength, props: this.properties };\n\t\t\t}\n\n\t\t\tpublic clone(): ISegment {\n\t\t\t\tconst seg = new Segment(this.cachedLength);\n\t\t\t\tthis.cloneInto(seg);\n\t\t\t\treturn seg;\n\t\t\t}\n\n\t\t\tprotected createSplitSegmentAt(pos: number): BaseSegment | undefined {\n\t\t\t\tif (pos > 0) {\n\t\t\t\t\tconst leafSegment = new Segment(this.cachedLength - pos);\n\t\t\t\t\tthis.cachedLength = pos;\n\t\t\t\t\treturn leafSegment;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let seed = 0; seed < 10; seed++) {\n\t\t\tconst segmentCount = 100;\n\t\t\tit(`with randomly generated segments, seed ${seed}`, () => {\n\t\t\t\tconst generateAttributionKey = (random: IRandom): AttributionKey | null =>\n\t\t\t\t\trandom.bool(0.8)\n\t\t\t\t\t\t? opKey(random.integer(0, 10))\n\t\t\t\t\t\t: random.bool()\n\t\t\t\t\t\t? detachedKey\n\t\t\t\t\t\t: null;\n\n\t\t\t\tconst channelNamePool = [\"ch1\", \"ch2\", \"ch3\"];\n\t\t\t\tconst insertGenerator: Generator<InsertAction, State> = take(\n\t\t\t\t\tsegmentCount,\n\t\t\t\t\t({ random }) => {\n\t\t\t\t\t\tconst length = random.integer(1, 20);\n\t\t\t\t\t\tconst collection = new AttributionCollection(\n\t\t\t\t\t\t\tlength,\n\t\t\t\t\t\t\tgenerateAttributionKey(random),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (random.bool(0.25)) {\n\t\t\t\t\t\t\tfor (const channel of channelNamePool) {\n\t\t\t\t\t\t\t\tif (random.bool()) {\n\t\t\t\t\t\t\t\t\tcollection.update(\n\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\tnew AttributionCollection(\n\t\t\t\t\t\t\t\t\t\t\tlength,\n\t\t\t\t\t\t\t\t\t\t\tgenerateAttributionKey(random),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"insert\",\n\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tconst initialState = performFuzzActions<InsertAction, State>(\n\t\t\t\t\tinsertGenerator,\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: (state, { collection }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tconst seg = new Segment(collection.length);\n\t\t\t\t\t\t\tseg.attribution = collection;\n\t\t\t\t\t\t\tsegments.push(seg);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{ random: makeRandom(seed), segments: [] },\n\t\t\t\t);\n\n\t\t\t\tconst expected = AttributionCollection.serializeAttributionCollections(\n\t\t\t\t\tinitialState.segments,\n\t\t\t\t);\n\n\t\t\t\tconst split: Generator<SplitAction, State> = ({ segments, random }) => {\n\t\t\t\t\tconst validIndices = segments\n\t\t\t\t\t\t.map((seg, i) => (seg.cachedLength > 1 ? i : -1))\n\t\t\t\t\t\t.filter((i) => i >= 0);\n\n\t\t\t\t\tconst segIndex = random.pick(validIndices);\n\t\t\t\t\tconst offset = random.integer(1, segments[segIndex].cachedLength - 1);\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"split\",\n\t\t\t\t\t\tsegIndex,\n\t\t\t\t\t\toffset,\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tconst append: Generator<AppendAction, State> = ({ random, segments }) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"append\",\n\t\t\t\t\t\tsegIndex: random.integer(0, segments.length - 2),\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tconst finalState = performFuzzActions<SplitAction | AppendAction, State>(\n\t\t\t\t\ttake(\n\t\t\t\t\t\tsegmentCount,\n\t\t\t\t\t\t// Note: if playing around with constants in this test, it may be necessary to\n\t\t\t\t\t\t// introduce acceptance criteria here for split.\n\t\t\t\t\t\tcreateWeightedGenerator<SplitAction | AppendAction, State>([\n\t\t\t\t\t\t\t[split, 1],\n\t\t\t\t\t\t\t[append, 1, ({ segments }) => segments.length > 1],\n\t\t\t\t\t\t]),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tsplit: (state, { segIndex, offset }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tconst splitSeg = segments[segIndex].splitAt(offset);\n\t\t\t\t\t\t\tassert(splitSeg !== undefined);\n\t\t\t\t\t\t\tsegments.splice(segIndex + 1, 0, splitSeg);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tappend: (state, { segIndex }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tsegments[segIndex].append(segments[segIndex + 1]);\n\t\t\t\t\t\t\tsegments.splice(segIndex + 1, 1);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tinitialState,\n\t\t\t\t);\n\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tAttributionCollection.serializeAttributionCollections(finalState.segments),\n\t\t\t\t\texpected,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"attributionCollection.spec.js","sourceRoot":"","sources":["../../src/test/attributionCollection.spec.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 { strict as assert } from \"assert\";\nimport {\n\tcreateWeightedGenerator,\n\tGenerator,\n\tIRandom,\n\tmakeRandom,\n\tperformFuzzActions,\n\ttake,\n} from \"@fluid-private/stochastic-test-utils\";\nimport { AttributionKey } from \"@fluidframework/runtime-definitions\";\nimport {\n\tAttributionCollection,\n\tSerializedAttributionCollection,\n} from \"../attributionCollection.js\";\nimport { BaseSegment, ISegment } from \"../mergeTreeNodes.js\";\n\nconst opKey = (seq: number): AttributionKey => ({ type: \"op\", seq });\nconst detachedKey: AttributionKey = { type: \"detached\", id: 0 };\n\ndescribe(\"AttributionCollection\", () => {\n\tconst makeCollectionWithChannel = ({ length, seq }: { length: number; seq: number }) => {\n\t\tconst collection = new AttributionCollection(length, null);\n\t\tcollection.update(\"foo\", new AttributionCollection(length, opKey(seq)));\n\t\treturn collection;\n\t};\n\n\tdescribe(\".getAtOffset\", () => {\n\t\tdescribe(\"on a collection with a single entry\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\n\t\t\tit(\"returns the entry for offsets within the length range\", () => {\n\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(100));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tit(\"throws for queries outside the range\", () => {\n\t\t\t\tassert.throws(() => collection.getAtOffset(-1));\n\t\t\t\tassert.throws(() => collection.getAtOffset(5));\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"on a collection with multiple entries\", () => {\n\t\t\tconst collection = new AttributionCollection(3, opKey(100));\n\t\t\tcollection.append(new AttributionCollection(5, opKey(101)));\n\t\t\tit(\"returns the correct entries\", () => {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(100));\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 3; i < 8; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(101));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tit(\"works on collections with entries in channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 3, seq: 300 });\n\t\t\tfor (const offset of [0, 1, 2]) {\n\t\t\t\tassert.deepEqual(collection.getAtOffset(offset, \"foo\"), opKey(300));\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\".splitAt\", () => {\n\t\tdescribe(\"on a collection with 3 entries\", () => {\n\t\t\tlet collection: AttributionCollection;\n\t\t\tbeforeEach(() => {\n\t\t\t\tcollection = new AttributionCollection(3, opKey(100));\n\t\t\t\tcollection.append(new AttributionCollection(2, opKey(101)));\n\t\t\t\tcollection.append(new AttributionCollection(1, opKey(102)));\n\t\t\t});\n\n\t\t\tit(\"can split on non-breakpoints\", () => {\n\t\t\t\tconst splitCollection = collection.splitAt(4);\n\t\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t\t{ offset: 3, key: opKey(101) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(collection.length, 4);\n\t\t\t\tassert.deepEqual(splitCollection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(101) },\n\t\t\t\t\t{ offset: 1, key: opKey(102) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(splitCollection.length, 2);\n\t\t\t});\n\n\t\t\tit(\"can split on breakpoints\", () => {\n\t\t\t\tconst splitCollection = collection.splitAt(5);\n\t\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t\t{ offset: 3, key: opKey(101) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(collection.length, 5);\n\t\t\t\tassert.deepEqual(splitCollection.getAll().root, [{ offset: 0, key: opKey(102) }]);\n\t\t\t\tassert.equal(splitCollection.length, 1);\n\t\t\t});\n\t\t});\n\n\t\tit(\"can split collection with a single value\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\t\t\tconst splitCollection = collection.splitAt(3);\n\t\t\tassert.equal(collection.length, 3);\n\t\t\tassert.equal(splitCollection.length, 2);\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tassert.deepEqual(splitCollection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t});\n\n\t\tit(\"splits channels\", () => {\n\t\t\tconst collection = new AttributionCollection(5, null);\n\t\t\tcollection.update(\"foo\", new AttributionCollection(5, opKey(100)));\n\t\t\tconst splitCollection = collection.splitAt(2);\n\t\t\tassert.deepEqual(collection.getAll().channels, {\n\t\t\t\tfoo: [{ offset: 0, key: opKey(100) }],\n\t\t\t});\n\t\t\tassert.deepEqual(splitCollection.getAll().channels, {\n\t\t\t\tfoo: [{ offset: 0, key: opKey(100) }],\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\".append\", () => {\n\t\tit(\"modifies the receiving collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tcollection.append(new AttributionCollection(1, opKey(101)));\n\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t{ offset: 2, key: opKey(101) },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"does not modify the argument collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tconst appendedCollection = new AttributionCollection(1, opKey(101));\n\t\t\tassert.deepEqual(appendedCollection.getAll().root, [{ offset: 0, key: opKey(101) }]);\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(appendedCollection.getAll().root, [{ offset: 0, key: opKey(101) }]);\n\t\t});\n\n\t\tit(\"coalesces referentially equal values at the join point\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tcollection.append(new AttributionCollection(7, opKey(100)));\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tassert.equal(collection.length, 9);\n\t\t});\n\n\t\tdescribe(\"appends channels\", () => {\n\t\t\tit(\"when both collections have the channel\", () => {\n\t\t\t\tconst appender = makeCollectionWithChannel({ length: 2, seq: 100 });\n\t\t\t\tappender.append(makeCollectionWithChannel({ length: 5, seq: 200 }));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: opKey(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: opKey(200),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"when only appended collection has a channel\", () => {\n\t\t\t\tconst appender = new AttributionCollection(2, null);\n\t\t\t\tappender.append(makeCollectionWithChannel({ length: 5, seq: 200 }));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: opKey(200),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"when only segment being appended to has a channel\", () => {\n\t\t\t\tconst appender = makeCollectionWithChannel({ length: 2, seq: 100 });\n\t\t\t\tappender.append(new AttributionCollection(5, null));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: opKey(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\".channelNames\", () => {\n\t\tit(\"is empty when collection has no channels\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tassert.deepEqual(collection.channelNames, []);\n\t\t});\n\n\t\tit(\"returns all channels with content for collection with channels\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2));\n\t\t\tcollection.update(\"bar\", new AttributionCollection(2));\n\t\t\tassert.deepEqual(collection.channelNames, [\"foo\", \"bar\"]);\n\t\t});\n\t});\n\n\tdescribe(\".populateAttributionCollections\", () => {\n\t\tit(\"correctly splits segment boundaries on breakpoints\", () => {\n\t\t\tconst segments = [{ cachedLength: 5 }, { cachedLength: 4 }] as ISegment[];\n\t\t\tAttributionCollection.populateAttributionCollections(segments, {\n\t\t\t\tlength: 9,\n\t\t\t\tposBreakpoints: [0, 2, 5, 7],\n\t\t\t\tseqs: [10, 12, 15, 17],\n\t\t\t});\n\t\t\tassert.deepEqual(segments[0].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(10) },\n\t\t\t\t{ offset: 2, key: opKey(12) },\n\t\t\t]);\n\n\t\t\tassert.deepEqual(segments[1].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(15) },\n\t\t\t\t{ offset: 2, key: opKey(17) },\n\t\t\t]);\n\n\t\t\tfor (const segment of segments) {\n\t\t\t\tassert.equal(segment.attribution?.length, segment.cachedLength);\n\t\t\t}\n\t\t});\n\n\t\tit(\"correctly splits segment boundaries between breakpoints\", () => {\n\t\t\tconst segments = [{ cachedLength: 4 }, { cachedLength: 5 }] as ISegment[];\n\t\t\tAttributionCollection.populateAttributionCollections(segments, {\n\t\t\t\tlength: 9,\n\t\t\t\tposBreakpoints: [0, 2, 5, 7],\n\t\t\t\tseqs: [10, 12, 15, 17],\n\t\t\t});\n\t\t\tassert.deepEqual(segments[0].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(10) },\n\t\t\t\t{ offset: 2, key: opKey(12) },\n\t\t\t]);\n\n\t\t\tassert.deepEqual(segments[1].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(12) },\n\t\t\t\t{ offset: 1, key: opKey(15) },\n\t\t\t\t{ offset: 3, key: opKey(17) },\n\t\t\t]);\n\n\t\t\tfor (const segment of segments) {\n\t\t\t\tassert.equal(segment.attribution?.length, segment.cachedLength);\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"serializeAttributionCollections\", () => {\n\t\tit(\"combines equal values on endpoints\", () => {\n\t\t\tconst segments = [\n\t\t\t\t{\n\t\t\t\t\tattribution: new AttributionCollection(4, opKey(0)),\n\t\t\t\t\tcachedLength: 4,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tattribution: new AttributionCollection(5, opKey(0)),\n\t\t\t\t\tcachedLength: 5,\n\t\t\t\t},\n\t\t\t] as unknown as ISegment[];\n\t\t\tconst blob = AttributionCollection.serializeAttributionCollections(segments);\n\t\t\tassert.deepEqual(blob, {\n\t\t\t\tposBreakpoints: [0],\n\t\t\t\tseqs: [0],\n\t\t\t\tlength: 9,\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"serializeAttributionCollections and populateAttributionCollections round-trip\", () => {\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst seg = (length: number): ISegment => ({ cachedLength: length }) as ISegment;\n\t\tconst testCases: {\n\t\t\tname: string;\n\t\t\tblob: SerializedAttributionCollection;\n\t\t\tsegments: ISegment[];\n\t\t}[] = [\n\t\t\t{\n\t\t\t\tname: \"single key\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 3,\n\t\t\t\t\tposBreakpoints: [0],\n\t\t\t\t\tseqs: [51],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"several keys on a single segment\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 1, 3, 5],\n\t\t\t\t\tseqs: [1, 2, 3, 4],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(7)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key spanning multiple segments\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0],\n\t\t\t\t\tseqs: [1],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key and segment boundary that align\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 3],\n\t\t\t\t\tseqs: [0, 1],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"detached attribution keys\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 3],\n\t\t\t\t\tseqs: [1, detachedKey],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"entry with channels\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 5],\n\t\t\t\t\tseqs: [3, null],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: {\n\t\t\t\t\t\t\tposBreakpoints: [0, 3, 5],\n\t\t\t\t\t\t\tseqs: [4, null, 5],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t];\n\n\t\tfor (const { name, blob, segments } of testCases) {\n\t\t\tit(name, () => {\n\t\t\t\tAttributionCollection.populateAttributionCollections(segments, blob);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tAttributionCollection.serializeAttributionCollections(segments),\n\t\t\t\t\tblob,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\n\tdescribe(\".clone\", () => {\n\t\tit(\"copies the original collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tconst appendedCollection = new AttributionCollection(1, opKey(101));\n\t\t\tconst copy = collection.clone();\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t{ offset: 2, key: opKey(101) },\n\t\t\t]);\n\t\t\tassert.deepEqual(copy.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t});\n\n\t\tit(\"copies channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 2, seq: 25 });\n\t\t\tconst appendedCollection = makeCollectionWithChannel({ length: 3, seq: 26 });\n\t\t\tconst copy = collection.clone();\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(collection.getAll().channels?.foo, [\n\t\t\t\t{ offset: 0, key: opKey(25) },\n\t\t\t\t{ offset: 2, key: opKey(26) },\n\t\t\t]);\n\t\t\tassert.deepEqual(copy.getAll().channels?.foo, [{ offset: 0, key: opKey(25) }]);\n\t\t});\n\t});\n\n\tdescribe(\".update\", () => {\n\t\tlet collection: AttributionCollection;\n\t\tbeforeEach(() => {\n\t\t\tcollection = new AttributionCollection(2, null);\n\t\t\tcollection.update(\"bar\", new AttributionCollection(2, opKey(10)));\n\t\t\tassert.deepEqual(\n\t\t\t\tcollection.getAtOffset(0, \"foo\"),\n\t\t\t\tundefined,\n\t\t\t\t\"channel should be undefined on creation\",\n\t\t\t);\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tassert.deepEqual(\n\t\t\t\tcollection.getAtOffset(0, \"bar\"),\n\t\t\t\topKey(10),\n\t\t\t\t\"update should never modify unrelated channels\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"creates a new channel when updating from an undefined state\", () => {\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(5)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0, \"foo\"), opKey(5));\n\t\t});\n\n\t\tit(\"overrides earlier calls with later ones\", () => {\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(3)));\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(5)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0, \"foo\"), opKey(5));\n\t\t});\n\n\t\tit(\"can update the root channel\", () => {\n\t\t\tcollection.update(undefined, new AttributionCollection(2, opKey(3)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0), opKey(3));\n\t\t});\n\n\t\tit(\"doesn't tolerate updates to channels having inconsistent length fields\", () => {\n\t\t\tassert.throws(() => collection.update(\"foo\", new AttributionCollection(3, null)));\n\t\t});\n\t});\n\n\tdescribe(\"serialized structure is independent of segment lengths\", () => {\n\t\tinterface State {\n\t\t\trandom: IRandom;\n\t\t\tsegments: ISegment[];\n\t\t}\n\n\t\tinterface InsertAction {\n\t\t\ttype: \"insert\";\n\t\t\tcollection: AttributionCollection;\n\t\t}\n\n\t\tinterface SplitAction {\n\t\t\ttype: \"split\";\n\t\t\tsegIndex: number;\n\t\t\toffset: number;\n\t\t}\n\n\t\tinterface AppendAction {\n\t\t\ttype: \"append\";\n\t\t\tsegIndex: number;\n\t\t}\n\n\t\tclass Segment extends BaseSegment {\n\t\t\tpublic readonly type = \"testSeg\";\n\t\t\tpublic constructor(length: number) {\n\t\t\t\tsuper();\n\t\t\t\tthis.cachedLength = length;\n\t\t\t}\n\n\t\t\tpublic toJSONObject() {\n\t\t\t\treturn { length: this.cachedLength, props: this.properties };\n\t\t\t}\n\n\t\t\tpublic clone(): ISegment {\n\t\t\t\tconst seg = new Segment(this.cachedLength);\n\t\t\t\tthis.cloneInto(seg);\n\t\t\t\treturn seg;\n\t\t\t}\n\n\t\t\tprotected createSplitSegmentAt(pos: number): BaseSegment | undefined {\n\t\t\t\tif (pos > 0) {\n\t\t\t\t\tconst leafSegment = new Segment(this.cachedLength - pos);\n\t\t\t\t\tthis.cachedLength = pos;\n\t\t\t\t\treturn leafSegment;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let seed = 0; seed < 10; seed++) {\n\t\t\tconst segmentCount = 100;\n\t\t\tit(`with randomly generated segments, seed ${seed}`, () => {\n\t\t\t\tconst generateAttributionKey = (random: IRandom): AttributionKey | null =>\n\t\t\t\t\trandom.bool(0.8)\n\t\t\t\t\t\t? opKey(random.integer(0, 10))\n\t\t\t\t\t\t: random.bool()\n\t\t\t\t\t\t? detachedKey\n\t\t\t\t\t\t: null;\n\n\t\t\t\tconst channelNamePool = [\"ch1\", \"ch2\", \"ch3\"];\n\t\t\t\tconst insertGenerator: Generator<InsertAction, State> = take(\n\t\t\t\t\tsegmentCount,\n\t\t\t\t\t({ random }) => {\n\t\t\t\t\t\tconst length = random.integer(1, 20);\n\t\t\t\t\t\tconst collection = new AttributionCollection(\n\t\t\t\t\t\t\tlength,\n\t\t\t\t\t\t\tgenerateAttributionKey(random),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (random.bool(0.25)) {\n\t\t\t\t\t\t\tfor (const channel of channelNamePool) {\n\t\t\t\t\t\t\t\tif (random.bool()) {\n\t\t\t\t\t\t\t\t\tcollection.update(\n\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\tnew AttributionCollection(\n\t\t\t\t\t\t\t\t\t\t\tlength,\n\t\t\t\t\t\t\t\t\t\t\tgenerateAttributionKey(random),\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"insert\",\n\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tconst initialState = performFuzzActions<InsertAction, State>(\n\t\t\t\t\tinsertGenerator,\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: (state, { collection }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tconst seg = new Segment(collection.length);\n\t\t\t\t\t\t\tseg.attribution = collection;\n\t\t\t\t\t\t\tsegments.push(seg);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{ random: makeRandom(seed), segments: [] },\n\t\t\t\t);\n\n\t\t\t\tconst expected = AttributionCollection.serializeAttributionCollections(\n\t\t\t\t\tinitialState.segments,\n\t\t\t\t);\n\n\t\t\t\tconst split: Generator<SplitAction, State> = ({ segments, random }) => {\n\t\t\t\t\tconst validIndices = segments\n\t\t\t\t\t\t.map((seg, i) => (seg.cachedLength > 1 ? i : -1))\n\t\t\t\t\t\t.filter((i) => i >= 0);\n\n\t\t\t\t\tconst segIndex = random.pick(validIndices);\n\t\t\t\t\tconst offset = random.integer(1, segments[segIndex].cachedLength - 1);\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"split\",\n\t\t\t\t\t\tsegIndex,\n\t\t\t\t\t\toffset,\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tconst append: Generator<AppendAction, State> = ({ random, segments }) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"append\",\n\t\t\t\t\t\tsegIndex: random.integer(0, segments.length - 2),\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tconst finalState = performFuzzActions<SplitAction | AppendAction, State>(\n\t\t\t\t\ttake(\n\t\t\t\t\t\tsegmentCount,\n\t\t\t\t\t\t// Note: if playing around with constants in this test, it may be necessary to\n\t\t\t\t\t\t// introduce acceptance criteria here for split.\n\t\t\t\t\t\tcreateWeightedGenerator<SplitAction | AppendAction, State>([\n\t\t\t\t\t\t\t[split, 1],\n\t\t\t\t\t\t\t[append, 1, ({ segments }) => segments.length > 1],\n\t\t\t\t\t\t]),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tsplit: (state, { segIndex, offset }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tconst splitSeg = segments[segIndex].splitAt(offset);\n\t\t\t\t\t\t\tassert(splitSeg !== undefined);\n\t\t\t\t\t\t\tsegments.splice(segIndex + 1, 0, splitSeg);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tappend: (state, { segIndex }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tsegments[segIndex].append(segments[segIndex + 1]);\n\t\t\t\t\t\t\tsegments.splice(segIndex + 1, 1);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tinitialState,\n\t\t\t\t);\n\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tAttributionCollection.serializeAttributionCollections(finalState.segments),\n\t\t\t\t\texpected,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n});\n"]}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const assert_1 = require("assert");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const attributionPolicy_js_1 = require("../attributionPolicy.js");
|
|
9
|
+
const testClient_js_1 = require("./testClient.js");
|
|
10
10
|
const local = { type: "local" };
|
|
11
11
|
describe("Attribution Policy", () => {
|
|
12
12
|
const localUserLongId = "localUser";
|
|
@@ -28,7 +28,7 @@ describe("Attribution Policy", () => {
|
|
|
28
28
|
assert_1.strict.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);
|
|
29
29
|
});
|
|
30
30
|
it("attributes insertion in a detached state", () => {
|
|
31
|
-
client = new
|
|
31
|
+
client = new testClient_js_1.TestClient(client.mergeTree.options);
|
|
32
32
|
client.insertTextLocal(0, "1", undefined);
|
|
33
33
|
assert_1.strict.deepEqual(client.getAllAttributionSeqs(), [{ type: "detached", id: 0 }]);
|
|
34
34
|
});
|
|
@@ -77,23 +77,23 @@ describe("Attribution Policy", () => {
|
|
|
77
77
|
});
|
|
78
78
|
});
|
|
79
79
|
it("attributes annotation in a detached state", () => {
|
|
80
|
-
client = new
|
|
80
|
+
client = new testClient_js_1.TestClient(client.mergeTree.options);
|
|
81
81
|
client.insertTextLocal(0, "1", undefined);
|
|
82
82
|
client.annotateRangeLocal(0, 1, { foo: "bar" });
|
|
83
83
|
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [{ type: "detached", id: 0 }]);
|
|
84
84
|
});
|
|
85
85
|
it("attributes annotation on insertion in a detached state", () => {
|
|
86
|
-
client = new
|
|
86
|
+
client = new testClient_js_1.TestClient(client.mergeTree.options);
|
|
87
87
|
client.insertTextLocal(0, "1", { foo: "bar" });
|
|
88
88
|
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [{ type: "detached", id: 0 }]);
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
describe("using insert-only attribution", () => {
|
|
92
92
|
beforeEach(() => {
|
|
93
|
-
client = new
|
|
93
|
+
client = new testClient_js_1.TestClient({
|
|
94
94
|
attribution: {
|
|
95
95
|
track: true,
|
|
96
|
-
policyFactory:
|
|
96
|
+
policyFactory: attributionPolicy_js_1.createInsertOnlyAttributionPolicy,
|
|
97
97
|
},
|
|
98
98
|
});
|
|
99
99
|
client.startOrUpdateCollaboration(localUserLongId);
|
|
@@ -113,10 +113,10 @@ describe("Attribution Policy", () => {
|
|
|
113
113
|
});
|
|
114
114
|
describe("using foo-property-only attribution", () => {
|
|
115
115
|
beforeEach(() => {
|
|
116
|
-
client = new
|
|
116
|
+
client = new testClient_js_1.TestClient({
|
|
117
117
|
attribution: {
|
|
118
118
|
track: true,
|
|
119
|
-
policyFactory: (0,
|
|
119
|
+
policyFactory: (0, attributionPolicy_js_1.createPropertyTrackingAttributionPolicyFactory)("foo"),
|
|
120
120
|
},
|
|
121
121
|
});
|
|
122
122
|
client.startOrUpdateCollaboration(localUserLongId);
|
|
@@ -156,10 +156,10 @@ describe("Attribution Policy", () => {
|
|
|
156
156
|
});
|
|
157
157
|
describe("using an attribution policy which tracks insertion and annotation", () => {
|
|
158
158
|
beforeEach(() => {
|
|
159
|
-
client = new
|
|
159
|
+
client = new testClient_js_1.TestClient({
|
|
160
160
|
attribution: {
|
|
161
161
|
track: true,
|
|
162
|
-
policyFactory: (0,
|
|
162
|
+
policyFactory: (0, attributionPolicy_js_1.createPropertyTrackingAndInsertionAttributionPolicyFactory)("foo"),
|
|
163
163
|
},
|
|
164
164
|
});
|
|
165
165
|
client.startOrUpdateCollaboration(localUserLongId);
|
|
@@ -169,10 +169,10 @@ describe("Attribution Policy", () => {
|
|
|
169
169
|
});
|
|
170
170
|
describe("using an attribution policy which tracks annotation of multiple properties", () => {
|
|
171
171
|
beforeEach(() => {
|
|
172
|
-
client = new
|
|
172
|
+
client = new testClient_js_1.TestClient({
|
|
173
173
|
attribution: {
|
|
174
174
|
track: true,
|
|
175
|
-
policyFactory: (0,
|
|
175
|
+
policyFactory: (0, attributionPolicy_js_1.createPropertyTrackingAttributionPolicyFactory)("foo", "bar"),
|
|
176
176
|
},
|
|
177
177
|
});
|
|
178
178
|
client.startOrUpdateCollaboration(localUserLongId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributionPolicy.spec.js","sourceRoot":"","sources":["../../src/test/attributionPolicy.spec.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 { strict as assert } from \"assert\";\nimport { AttributionKey } from \"@fluidframework/runtime-definitions\";\nimport {\n\tcreateInsertOnlyAttributionPolicy,\n\tcreatePropertyTrackingAndInsertionAttributionPolicyFactory,\n\tcreatePropertyTrackingAttributionPolicyFactory,\n} from \"../attributionPolicy\";\nimport { TestClient } from \"./testClient\";\n\nconst local: AttributionKey = { type: \"local\" };\n\ndescribe(\"Attribution Policy\", () => {\n\tconst localUserLongId = \"localUser\";\n\tconst remoteUserLongId = \"remoteUser\";\n\tlet client: TestClient;\n\tlet seq: number = 0;\n\tbeforeEach(() => {\n\t\tseq = 0;\n\t});\n\n\tfunction runInsertVerificationTests() {\n\t\tit(\"attributes segments inserted locally\", () => {\n\t\t\tconst mergeTreeOp = client.insertTextLocal(0, \"123\");\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [local, local, local]);\n\t\t\tclient.applyMsg(client.makeOpMessage(mergeTreeOp, ++seq));\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);\n\t\t});\n\n\t\tit(\"attributes segments inserted remotely\", () => {\n\t\t\tclient.insertTextRemote(0, \"123\", undefined, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);\n\t\t});\n\n\t\tit(\"attributes insertion in a detached state\", () => {\n\t\t\tclient = new TestClient(client.mergeTree.options);\n\t\t\tclient.insertTextLocal(0, \"1\", undefined);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [{ type: \"detached\", id: 0 }]);\n\t\t});\n\t}\n\n\tfunction runAnnotateVerificationTests() {\n\t\tit(\"attributes local property changes\", () => {\n\t\t\tclient.applyMsg(client.makeOpMessage(client.insertTextLocal(0, \"123\"), ++seq));\n\t\t\tconst annotateOp = client.annotateRangeLocal(1, 2, { foo: 1 });\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [undefined, local, undefined]);\n\t\t\tclient.applyMsg(client.makeOpMessage(annotateOp, ++seq));\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(0, 3, { bar: 2 }), ++seq),\n\t\t\t);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [undefined, 2, undefined]);\n\t\t});\n\n\t\tit(\"attributes remote property changes\", () => {\n\t\t\tclient.insertTextRemote(0, \"123\", undefined, ++seq, seq - 1, remoteUserLongId);\n\t\t\tclient.annotateRangeRemote(1, 2, { foo: 1 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [undefined, 2, undefined]);\n\t\t});\n\n\t\tit(\"uses LWW semantics for conflicting attribution of props\", () => {\n\t\t\tclient.applyMsg(client.makeOpMessage(client.insertTextLocal(0, \"123\"), ++seq));\n\t\t\tconst localPropChange = client.annotateRangeLocal(1, 2, { foo: 1 });\n\t\t\tclient.annotateRangeRemote(0, 2, { foo: 2 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tconst firstRemoteAnnotateSeq = seq;\n\t\t\tassert.equal(client.getPropertiesAtPosition(0)?.foo, 2);\n\t\t\tassert.equal(client.getPropertiesAtPosition(1)?.foo, 1);\n\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [\n\t\t\t\tfirstRemoteAnnotateSeq,\n\t\t\t\tlocal,\n\t\t\t\tundefined,\n\t\t\t]);\n\t\t\tclient.applyMsg(client.makeOpMessage(localPropChange, ++seq, seq - 1, localUserLongId));\n\t\t\tassert.deepEqual(\n\t\t\t\tclient.getAllAttributionSeqs(\"foo\"),\n\t\t\t\t[firstRemoteAnnotateSeq, seq, undefined],\n\t\t\t\t\"property change should have been attributed to the winning, local op\",\n\t\t\t);\n\t\t\tclient.annotateRangeRemote(1, 2, { foo: 3 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(\n\t\t\t\tclient.getAllAttributionSeqs(\"foo\"),\n\t\t\t\t[firstRemoteAnnotateSeq, seq, undefined],\n\t\t\t\t\"second property change should have been attributed to a remote change\",\n\t\t\t);\n\t\t});\n\n\t\tdescribe(\"attributes properties set on a segment at insertion time\", () => {\n\t\t\tit(\"for remote insertions\", () => {\n\t\t\t\tclient.insertTextRemote(0, \"123\", { foo: \"bar\" }, ++seq, seq - 1, remoteUserLongId);\n\t\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [1, 1, 1]);\n\t\t\t});\n\n\t\t\tit(\"for local insertions\", () => {\n\t\t\t\tconst mergeTreeOp = client.insertTextLocal(0, \"123\", { foo: \"bar\" });\n\t\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [local, local, local]);\n\t\t\t\tclient.applyMsg(client.makeOpMessage(mergeTreeOp, ++seq));\n\t\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [1, 1, 1]);\n\t\t\t});\n\t\t});\n\n\t\tit(\"attributes annotation in a detached state\", () => {\n\t\t\tclient = new TestClient(client.mergeTree.options);\n\t\t\tclient.insertTextLocal(0, \"1\", undefined);\n\t\t\tclient.annotateRangeLocal(0, 1, { foo: \"bar\" });\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [{ type: \"detached\", id: 0 }]);\n\t\t});\n\n\t\tit(\"attributes annotation on insertion in a detached state\", () => {\n\t\t\tclient = new TestClient(client.mergeTree.options);\n\t\t\tclient.insertTextLocal(0, \"1\", { foo: \"bar\" });\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [{ type: \"detached\", id: 0 }]);\n\t\t});\n\t}\n\n\tdescribe(\"using insert-only attribution\", () => {\n\t\tbeforeEach(() => {\n\t\t\tclient = new TestClient({\n\t\t\t\tattribution: {\n\t\t\t\t\ttrack: true,\n\t\t\t\t\tpolicyFactory: createInsertOnlyAttributionPolicy,\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t\t});\n\n\t\trunInsertVerificationTests();\n\n\t\tit(\"ignores local property changes\", () => {\n\t\t\tclient.applyMsg(client.makeOpMessage(client.insertTextLocal(0, \"123\"), ++seq));\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(1, 2, { foo: 1 }), ++seq),\n\t\t\t);\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(0, 3, { bar: 2 }), ++seq),\n\t\t\t);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);\n\t\t});\n\n\t\tit(\"ignores remote property changes\", () => {\n\t\t\tclient.insertTextRemote(0, \"123\", undefined, ++seq, seq - 1, remoteUserLongId);\n\t\t\tclient.annotateRangeRemote(1, 2, { foo: 1 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);\n\t\t});\n\t});\n\n\tdescribe(\"using foo-property-only attribution\", () => {\n\t\tbeforeEach(() => {\n\t\t\tclient = new TestClient({\n\t\t\t\tattribution: {\n\t\t\t\t\ttrack: true,\n\t\t\t\t\tpolicyFactory: createPropertyTrackingAttributionPolicyFactory(\"foo\"),\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t\t});\n\n\t\trunAnnotateVerificationTests();\n\n\t\tit(\"ignores segments inserted locally\", () => {\n\t\t\tconst mergeTreeOp = client.insertTextLocal(0, \"123\");\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t]);\n\t\t\tclient.applyMsg(client.makeOpMessage(mergeTreeOp, ++seq));\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t]);\n\t\t});\n\n\t\tit(\"ignores segments inserted remotely\", () => {\n\t\t\tclient.insertTextRemote(0, \"123\", undefined, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [undefined, undefined, undefined]);\n\t\t});\n\n\t\tit(\"can correctly combine segment attribution on append\", () => {\n\t\t\tclient.insertTextRemote(\n\t\t\t\t0,\n\t\t\t\t\"1\",\n\t\t\t\t{ foo: \"bar\", bar: 1 },\n\t\t\t\t++seq,\n\t\t\t\tseq - 1,\n\t\t\t\tremoteUserLongId,\n\t\t\t);\n\t\t\tclient.insertTextRemote(1, \"2\", { bar: 1 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tclient.annotateRangeRemote(0, 1, { foo: null }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tclient.updateMinSeq(seq);\n\t\t\tlet segmentCount = 0;\n\t\t\tclient.walkSegments(() => {\n\t\t\t\tsegmentCount++;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t\tassert.equal(segmentCount, 1);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [seq, undefined]);\n\t\t});\n\t});\n\n\tdescribe(\"using an attribution policy which tracks insertion and annotation\", () => {\n\t\tbeforeEach(() => {\n\t\t\tclient = new TestClient({\n\t\t\t\tattribution: {\n\t\t\t\t\ttrack: true,\n\t\t\t\t\tpolicyFactory:\n\t\t\t\t\t\tcreatePropertyTrackingAndInsertionAttributionPolicyFactory(\"foo\"),\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t\t});\n\n\t\trunAnnotateVerificationTests();\n\n\t\trunInsertVerificationTests();\n\t});\n\n\tdescribe(\"using an attribution policy which tracks annotation of multiple properties\", () => {\n\t\tbeforeEach(() => {\n\t\t\tclient = new TestClient({\n\t\t\t\tattribution: {\n\t\t\t\t\ttrack: true,\n\t\t\t\t\tpolicyFactory: createPropertyTrackingAttributionPolicyFactory(\"foo\", \"bar\"),\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t\t});\n\n\t\tit(\"attributes local property change on ack\", () => {\n\t\t\tclient.applyMsg(client.makeOpMessage(client.insertTextLocal(0, \"123\"), ++seq));\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(1, 2, { foo: 1 }), ++seq),\n\t\t\t);\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(0, 3, { bar: 2 }), ++seq),\n\t\t\t);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [undefined, 2, undefined]);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"bar\"), [3, 3, 3]);\n\t\t});\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"attributionPolicy.spec.js","sourceRoot":"","sources":["../../src/test/attributionPolicy.spec.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 { strict as assert } from \"assert\";\nimport { AttributionKey } from \"@fluidframework/runtime-definitions\";\nimport {\n\tcreateInsertOnlyAttributionPolicy,\n\tcreatePropertyTrackingAndInsertionAttributionPolicyFactory,\n\tcreatePropertyTrackingAttributionPolicyFactory,\n} from \"../attributionPolicy.js\";\nimport { TestClient } from \"./testClient.js\";\n\nconst local: AttributionKey = { type: \"local\" };\n\ndescribe(\"Attribution Policy\", () => {\n\tconst localUserLongId = \"localUser\";\n\tconst remoteUserLongId = \"remoteUser\";\n\tlet client: TestClient;\n\tlet seq: number = 0;\n\tbeforeEach(() => {\n\t\tseq = 0;\n\t});\n\n\tfunction runInsertVerificationTests() {\n\t\tit(\"attributes segments inserted locally\", () => {\n\t\t\tconst mergeTreeOp = client.insertTextLocal(0, \"123\");\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [local, local, local]);\n\t\t\tclient.applyMsg(client.makeOpMessage(mergeTreeOp, ++seq));\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);\n\t\t});\n\n\t\tit(\"attributes segments inserted remotely\", () => {\n\t\t\tclient.insertTextRemote(0, \"123\", undefined, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);\n\t\t});\n\n\t\tit(\"attributes insertion in a detached state\", () => {\n\t\t\tclient = new TestClient(client.mergeTree.options);\n\t\t\tclient.insertTextLocal(0, \"1\", undefined);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [{ type: \"detached\", id: 0 }]);\n\t\t});\n\t}\n\n\tfunction runAnnotateVerificationTests() {\n\t\tit(\"attributes local property changes\", () => {\n\t\t\tclient.applyMsg(client.makeOpMessage(client.insertTextLocal(0, \"123\"), ++seq));\n\t\t\tconst annotateOp = client.annotateRangeLocal(1, 2, { foo: 1 });\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [undefined, local, undefined]);\n\t\t\tclient.applyMsg(client.makeOpMessage(annotateOp, ++seq));\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(0, 3, { bar: 2 }), ++seq),\n\t\t\t);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [undefined, 2, undefined]);\n\t\t});\n\n\t\tit(\"attributes remote property changes\", () => {\n\t\t\tclient.insertTextRemote(0, \"123\", undefined, ++seq, seq - 1, remoteUserLongId);\n\t\t\tclient.annotateRangeRemote(1, 2, { foo: 1 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [undefined, 2, undefined]);\n\t\t});\n\n\t\tit(\"uses LWW semantics for conflicting attribution of props\", () => {\n\t\t\tclient.applyMsg(client.makeOpMessage(client.insertTextLocal(0, \"123\"), ++seq));\n\t\t\tconst localPropChange = client.annotateRangeLocal(1, 2, { foo: 1 });\n\t\t\tclient.annotateRangeRemote(0, 2, { foo: 2 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tconst firstRemoteAnnotateSeq = seq;\n\t\t\tassert.equal(client.getPropertiesAtPosition(0)?.foo, 2);\n\t\t\tassert.equal(client.getPropertiesAtPosition(1)?.foo, 1);\n\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [\n\t\t\t\tfirstRemoteAnnotateSeq,\n\t\t\t\tlocal,\n\t\t\t\tundefined,\n\t\t\t]);\n\t\t\tclient.applyMsg(client.makeOpMessage(localPropChange, ++seq, seq - 1, localUserLongId));\n\t\t\tassert.deepEqual(\n\t\t\t\tclient.getAllAttributionSeqs(\"foo\"),\n\t\t\t\t[firstRemoteAnnotateSeq, seq, undefined],\n\t\t\t\t\"property change should have been attributed to the winning, local op\",\n\t\t\t);\n\t\t\tclient.annotateRangeRemote(1, 2, { foo: 3 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(\n\t\t\t\tclient.getAllAttributionSeqs(\"foo\"),\n\t\t\t\t[firstRemoteAnnotateSeq, seq, undefined],\n\t\t\t\t\"second property change should have been attributed to a remote change\",\n\t\t\t);\n\t\t});\n\n\t\tdescribe(\"attributes properties set on a segment at insertion time\", () => {\n\t\t\tit(\"for remote insertions\", () => {\n\t\t\t\tclient.insertTextRemote(0, \"123\", { foo: \"bar\" }, ++seq, seq - 1, remoteUserLongId);\n\t\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [1, 1, 1]);\n\t\t\t});\n\n\t\t\tit(\"for local insertions\", () => {\n\t\t\t\tconst mergeTreeOp = client.insertTextLocal(0, \"123\", { foo: \"bar\" });\n\t\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [local, local, local]);\n\t\t\t\tclient.applyMsg(client.makeOpMessage(mergeTreeOp, ++seq));\n\t\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [1, 1, 1]);\n\t\t\t});\n\t\t});\n\n\t\tit(\"attributes annotation in a detached state\", () => {\n\t\t\tclient = new TestClient(client.mergeTree.options);\n\t\t\tclient.insertTextLocal(0, \"1\", undefined);\n\t\t\tclient.annotateRangeLocal(0, 1, { foo: \"bar\" });\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [{ type: \"detached\", id: 0 }]);\n\t\t});\n\n\t\tit(\"attributes annotation on insertion in a detached state\", () => {\n\t\t\tclient = new TestClient(client.mergeTree.options);\n\t\t\tclient.insertTextLocal(0, \"1\", { foo: \"bar\" });\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [{ type: \"detached\", id: 0 }]);\n\t\t});\n\t}\n\n\tdescribe(\"using insert-only attribution\", () => {\n\t\tbeforeEach(() => {\n\t\t\tclient = new TestClient({\n\t\t\t\tattribution: {\n\t\t\t\t\ttrack: true,\n\t\t\t\t\tpolicyFactory: createInsertOnlyAttributionPolicy,\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t\t});\n\n\t\trunInsertVerificationTests();\n\n\t\tit(\"ignores local property changes\", () => {\n\t\t\tclient.applyMsg(client.makeOpMessage(client.insertTextLocal(0, \"123\"), ++seq));\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(1, 2, { foo: 1 }), ++seq),\n\t\t\t);\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(0, 3, { bar: 2 }), ++seq),\n\t\t\t);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);\n\t\t});\n\n\t\tit(\"ignores remote property changes\", () => {\n\t\t\tclient.insertTextRemote(0, \"123\", undefined, ++seq, seq - 1, remoteUserLongId);\n\t\t\tclient.annotateRangeRemote(1, 2, { foo: 1 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);\n\t\t});\n\t});\n\n\tdescribe(\"using foo-property-only attribution\", () => {\n\t\tbeforeEach(() => {\n\t\t\tclient = new TestClient({\n\t\t\t\tattribution: {\n\t\t\t\t\ttrack: true,\n\t\t\t\t\tpolicyFactory: createPropertyTrackingAttributionPolicyFactory(\"foo\"),\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t\t});\n\n\t\trunAnnotateVerificationTests();\n\n\t\tit(\"ignores segments inserted locally\", () => {\n\t\t\tconst mergeTreeOp = client.insertTextLocal(0, \"123\");\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t]);\n\t\t\tclient.applyMsg(client.makeOpMessage(mergeTreeOp, ++seq));\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t]);\n\t\t});\n\n\t\tit(\"ignores segments inserted remotely\", () => {\n\t\t\tclient.insertTextRemote(0, \"123\", undefined, ++seq, seq - 1, remoteUserLongId);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(), [undefined, undefined, undefined]);\n\t\t});\n\n\t\tit(\"can correctly combine segment attribution on append\", () => {\n\t\t\tclient.insertTextRemote(\n\t\t\t\t0,\n\t\t\t\t\"1\",\n\t\t\t\t{ foo: \"bar\", bar: 1 },\n\t\t\t\t++seq,\n\t\t\t\tseq - 1,\n\t\t\t\tremoteUserLongId,\n\t\t\t);\n\t\t\tclient.insertTextRemote(1, \"2\", { bar: 1 }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tclient.annotateRangeRemote(0, 1, { foo: null }, ++seq, seq - 1, remoteUserLongId);\n\t\t\tclient.updateMinSeq(seq);\n\t\t\tlet segmentCount = 0;\n\t\t\tclient.walkSegments(() => {\n\t\t\t\tsegmentCount++;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t\tassert.equal(segmentCount, 1);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [seq, undefined]);\n\t\t});\n\t});\n\n\tdescribe(\"using an attribution policy which tracks insertion and annotation\", () => {\n\t\tbeforeEach(() => {\n\t\t\tclient = new TestClient({\n\t\t\t\tattribution: {\n\t\t\t\t\ttrack: true,\n\t\t\t\t\tpolicyFactory:\n\t\t\t\t\t\tcreatePropertyTrackingAndInsertionAttributionPolicyFactory(\"foo\"),\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t\t});\n\n\t\trunAnnotateVerificationTests();\n\n\t\trunInsertVerificationTests();\n\t});\n\n\tdescribe(\"using an attribution policy which tracks annotation of multiple properties\", () => {\n\t\tbeforeEach(() => {\n\t\t\tclient = new TestClient({\n\t\t\t\tattribution: {\n\t\t\t\t\ttrack: true,\n\t\t\t\t\tpolicyFactory: createPropertyTrackingAttributionPolicyFactory(\"foo\", \"bar\"),\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t\t});\n\n\t\tit(\"attributes local property change on ack\", () => {\n\t\t\tclient.applyMsg(client.makeOpMessage(client.insertTextLocal(0, \"123\"), ++seq));\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(1, 2, { foo: 1 }), ++seq),\n\t\t\t);\n\t\t\tclient.applyMsg(\n\t\t\t\tclient.makeOpMessage(client.annotateRangeLocal(0, 3, { bar: 2 }), ++seq),\n\t\t\t);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"foo\"), [undefined, 2, undefined]);\n\t\t\tassert.deepEqual(client.getAllAttributionSeqs(\"bar\"), [3, 3, 3]);\n\t\t});\n\t});\n});\n"]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { IRandom } from "@fluid-private/stochastic-test-utils";
|
|
6
|
-
import { IMergeNode } from "../mergeTreeNodes";
|
|
7
|
-
import { TestClient } from "./testClient";
|
|
6
|
+
import { IMergeNode } from "../mergeTreeNodes.js";
|
|
7
|
+
import { TestClient } from "./testClient.js";
|
|
8
8
|
export declare function simpleTest(): void;
|
|
9
9
|
export declare function integerTest1(): number;
|
|
10
10
|
export declare function fileTest1(): void;
|
|
@@ -51,4 +51,4 @@ export declare class DocumentTree {
|
|
|
51
51
|
static generateRow(rowProbability: number): DocumentTree;
|
|
52
52
|
static generateBox(rowProbability: number): DocumentTree;
|
|
53
53
|
}
|
|
54
|
-
//# sourceMappingURL=beastTest.d.ts.map
|
|
54
|
+
//# sourceMappingURL=beastTest.spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beastTest.spec.d.ts","sourceRoot":"","sources":["../../src/test/beastTest.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,OAAO,EAAc,MAAM,sCAAsC,CAAC;AAa3E,OAAO,EAEN,UAAU,EAKV,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EAA2B,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAoHtE,wBAAgB,UAAU,SAYzB;AAcD,wBAAgB,YAAY,WAsC3B;AAED,wBAAgB,SAAS,SAoDxB;AAQD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAExD;AA6ED,wBAAgB,cAAc,SAwB7B;AAED,wBAAgB,kBAAkB,SAoFjC;AAED,wBAAgB,oBAAoB,WAwMnC;AAID,wBAAgB,QAAQ,CAAC,OAAO,UAAO;;;+BA4DJ,MAAM;;EAimBxC;AAYD,qBAAa,UAAU;IACtB,MAAM,EAAE,OAAO,CAAC;;IAKhB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAIpC,UAAU,CAAC,SAAS,EAAE,MAAM;CA+B5B;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,YAAY,CAAC;AACjD;;;;;;;GAOG;AACH,qBAAa,YAAY;IAOhB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,YAAY,EAAE;IAPhC,GAAG,SAAK;IACR,GAAG;;;MAAsB;IACzB,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,MAAM,CAAC,QAAQ,aAAoB;gBAG3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,EAAE;IAGhC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY;IA2CxD,MAAM,CAAC,gBAAgB;IAKvB,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM;IAuB7C,MAAM,CAAC,iBAAiB;IAOxB,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM;IAUzC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM;CAGzC"}
|