@fluidframework/merge-tree 2.0.0-internal.8.0.0 → 2.0.0-rc.1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/README.md +0 -6
- package/api-extractor-esm.json +17 -0
- package/api-extractor-lint.json +1 -10
- package/api-extractor.json +0 -4
- package/api-report/merge-tree.api.md +4 -9
- package/dist/client.d.ts +0 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +0 -7
- package/dist/client.js.map +1 -1
- package/dist/merge-tree-alpha.d.ts +27 -12
- package/dist/merge-tree-beta.d.ts +0 -16
- package/dist/merge-tree-public.d.ts +0 -16
- package/dist/merge-tree-untrimmed.d.ts +5 -29
- package/dist/mergeTree.d.ts +0 -17
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +0 -130
- package/dist/mergeTree.js.map +1 -1
- package/dist/ops.d.ts +1 -1
- package/dist/ops.js +1 -1
- package/dist/ops.js.map +1 -1
- package/dist/revertibles.d.ts +4 -4
- package/dist/revertibles.js +3 -3
- package/dist/revertibles.js.map +1 -1
- package/dist/test/Insertion.perf.spec.d.ts +6 -0
- package/dist/test/Insertion.perf.spec.d.ts.map +1 -0
- package/dist/test/Insertion.perf.spec.js +113 -0
- package/dist/test/Insertion.perf.spec.js.map +1 -0
- package/dist/test/PartialLengths.perf.spec.d.ts +6 -0
- package/dist/test/PartialLengths.perf.spec.d.ts.map +1 -0
- package/dist/test/PartialLengths.perf.spec.js +67 -0
- package/dist/test/PartialLengths.perf.spec.js.map +1 -0
- package/dist/test/Removal.perf.spec.d.ts +6 -0
- package/dist/test/Removal.perf.spec.d.ts.map +1 -0
- package/dist/test/Removal.perf.spec.js +166 -0
- package/dist/test/Removal.perf.spec.js.map +1 -0
- package/dist/test/Snapshot.perf.spec.d.ts +6 -0
- package/dist/test/Snapshot.perf.spec.d.ts.map +1 -0
- package/dist/test/Snapshot.perf.spec.js +33 -0
- package/dist/test/Snapshot.perf.spec.js.map +1 -0
- package/dist/test/attributionCollection.perf.spec.d.ts +6 -0
- package/dist/test/attributionCollection.perf.spec.d.ts.map +1 -0
- package/dist/test/attributionCollection.perf.spec.js +231 -0
- package/dist/test/attributionCollection.perf.spec.js.map +1 -0
- package/dist/test/attributionCollection.spec.d.ts +6 -0
- package/dist/test/attributionCollection.spec.d.ts.map +1 -0
- package/dist/test/attributionCollection.spec.js +486 -0
- package/dist/test/attributionCollection.spec.js.map +1 -0
- package/dist/test/attributionPolicy.spec.d.ts +6 -0
- package/dist/test/attributionPolicy.spec.d.ts.map +1 -0
- package/dist/test/attributionPolicy.spec.js +189 -0
- package/dist/test/attributionPolicy.spec.js.map +1 -0
- package/dist/test/beastTest.d.ts +54 -0
- package/dist/test/beastTest.d.ts.map +1 -0
- package/dist/test/beastTest.js +1333 -0
- package/dist/test/beastTest.js.map +1 -0
- package/dist/test/client.annotateMarker.spec.d.ts +6 -0
- package/dist/test/client.annotateMarker.spec.d.ts.map +1 -0
- package/dist/test/client.annotateMarker.spec.js +45 -0
- package/dist/test/client.annotateMarker.spec.js.map +1 -0
- package/dist/test/client.apis.d.ts +7 -0
- package/dist/test/client.apis.d.ts.map +1 -0
- package/dist/test/client.apis.js +72 -0
- package/dist/test/client.apis.js.map +1 -0
- package/dist/test/client.applyMsg.spec.d.ts +6 -0
- package/dist/test/client.applyMsg.spec.d.ts.map +1 -0
- package/dist/test/client.applyMsg.spec.js +500 -0
- package/dist/test/client.applyMsg.spec.js.map +1 -0
- package/dist/test/client.applyStashedOpFarm.spec.d.ts +12 -0
- package/dist/test/client.applyStashedOpFarm.spec.d.ts.map +1 -0
- package/dist/test/client.applyStashedOpFarm.spec.js +144 -0
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -0
- package/dist/test/client.attributionFarm.spec.d.ts +7 -0
- package/dist/test/client.attributionFarm.spec.d.ts.map +1 -0
- package/dist/test/client.attributionFarm.spec.js +96 -0
- package/dist/test/client.attributionFarm.spec.js.map +1 -0
- package/dist/test/client.conflictFarm.spec.d.ts +15 -0
- package/dist/test/client.conflictFarm.spec.d.ts.map +1 -0
- package/dist/test/client.conflictFarm.spec.js +88 -0
- package/dist/test/client.conflictFarm.spec.js.map +1 -0
- package/dist/test/client.getPosition.spec.d.ts +6 -0
- package/dist/test/client.getPosition.spec.d.ts.map +1 -0
- package/dist/test/client.getPosition.spec.js +54 -0
- package/dist/test/client.getPosition.spec.js.map +1 -0
- package/dist/test/client.localReference.spec.d.ts +6 -0
- package/dist/test/client.localReference.spec.d.ts.map +1 -0
- package/dist/test/client.localReference.spec.js +439 -0
- package/dist/test/client.localReference.spec.js.map +1 -0
- package/dist/test/client.localReferenceFarm.spec.d.ts +6 -0
- package/dist/test/client.localReferenceFarm.spec.d.ts.map +1 -0
- package/dist/test/client.localReferenceFarm.spec.js +88 -0
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -0
- package/dist/test/client.rebasePosition.spec.d.ts +6 -0
- package/dist/test/client.rebasePosition.spec.d.ts.map +1 -0
- package/dist/test/client.rebasePosition.spec.js +102 -0
- package/dist/test/client.rebasePosition.spec.js.map +1 -0
- package/dist/test/client.reconnectFarm.spec.d.ts +12 -0
- package/dist/test/client.reconnectFarm.spec.d.ts.map +1 -0
- package/dist/test/client.reconnectFarm.spec.js +91 -0
- package/dist/test/client.reconnectFarm.spec.js.map +1 -0
- package/dist/test/client.replay.spec.d.ts +6 -0
- package/dist/test/client.replay.spec.d.ts.map +1 -0
- package/dist/test/client.replay.spec.js +85 -0
- package/dist/test/client.replay.spec.js.map +1 -0
- package/dist/test/client.rollback.spec.d.ts +6 -0
- package/dist/test/client.rollback.spec.d.ts.map +1 -0
- package/dist/test/client.rollback.spec.js +453 -0
- package/dist/test/client.rollback.spec.js.map +1 -0
- package/dist/test/client.rollbackFarm.spec.d.ts +6 -0
- package/dist/test/client.rollbackFarm.spec.d.ts.map +1 -0
- package/dist/test/client.rollbackFarm.spec.js +48 -0
- package/dist/test/client.rollbackFarm.spec.js.map +1 -0
- package/dist/test/client.searchForMarker.spec.d.ts +6 -0
- package/dist/test/client.searchForMarker.spec.d.ts.map +1 -0
- package/dist/test/client.searchForMarker.spec.js +446 -0
- package/dist/test/client.searchForMarker.spec.js.map +1 -0
- package/dist/test/client.walkSegments.spec.d.ts +6 -0
- package/dist/test/client.walkSegments.spec.d.ts.map +1 -0
- package/dist/test/client.walkSegments.spec.js +54 -0
- package/dist/test/client.walkSegments.spec.js.map +1 -0
- package/dist/test/collections.list.spec.d.ts +6 -0
- package/dist/test/collections.list.spec.d.ts.map +1 -0
- package/dist/test/collections.list.spec.js +84 -0
- package/dist/test/collections.list.spec.js.map +1 -0
- package/dist/test/createInsertOnlyAttributionPolicy.spec.d.ts +6 -0
- package/dist/test/createInsertOnlyAttributionPolicy.spec.d.ts.map +1 -0
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js +35 -0
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -0
- package/dist/test/index.d.ts +13 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +88 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/mergeTree.annotate.deltaCallback.spec.d.ts +6 -0
- package/dist/test/mergeTree.annotate.deltaCallback.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +142 -0
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -0
- package/dist/test/mergeTree.annotate.spec.d.ts +6 -0
- package/dist/test/mergeTree.annotate.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.annotate.spec.js +448 -0
- package/dist/test/mergeTree.annotate.spec.js.map +1 -0
- package/dist/test/mergeTree.insert.deltaCallback.spec.d.ts +6 -0
- package/dist/test/mergeTree.insert.deltaCallback.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +126 -0
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -0
- package/dist/test/mergeTree.insertingWalk.spec.d.ts +6 -0
- package/dist/test/mergeTree.insertingWalk.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.insertingWalk.spec.js +279 -0
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -0
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts +6 -0
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +178 -0
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -0
- package/dist/test/mergeTree.markRangeRemoved.spec.d.ts +6 -0
- package/dist/test/mergeTree.markRangeRemoved.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.markRangeRemoved.spec.js +130 -0
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -0
- package/dist/test/mergeTree.walk.spec.d.ts +6 -0
- package/dist/test/mergeTree.walk.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.walk.spec.js +63 -0
- package/dist/test/mergeTree.walk.spec.js.map +1 -0
- package/dist/test/mergeTree.zamboni.spec.d.ts +6 -0
- package/dist/test/mergeTree.zamboni.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.zamboni.spec.js +52 -0
- package/dist/test/mergeTree.zamboni.spec.js.map +1 -0
- package/dist/test/mergeTreeOperationRunner.d.ts +63 -0
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -0
- package/dist/test/mergeTreeOperationRunner.js +245 -0
- package/dist/test/mergeTreeOperationRunner.js.map +1 -0
- package/dist/test/mergeTreeOperationRunner.spec.d.ts +6 -0
- package/dist/test/mergeTreeOperationRunner.spec.d.ts.map +1 -0
- package/dist/test/mergeTreeOperationRunner.spec.js +156 -0
- package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -0
- package/dist/test/obliterate.concurrent.spec.d.ts +6 -0
- package/dist/test/obliterate.concurrent.spec.d.ts.map +1 -0
- package/dist/test/obliterate.concurrent.spec.js +1446 -0
- package/dist/test/obliterate.concurrent.spec.js.map +1 -0
- package/dist/test/obliterate.partialLength.spec.d.ts +6 -0
- package/dist/test/obliterate.partialLength.spec.d.ts.map +1 -0
- package/dist/test/obliterate.partialLength.spec.js +279 -0
- package/dist/test/obliterate.partialLength.spec.js.map +1 -0
- package/dist/test/obliterate.reconnect.spec.d.ts +6 -0
- package/dist/test/obliterate.reconnect.spec.d.ts.map +1 -0
- package/dist/test/obliterate.reconnect.spec.js +164 -0
- package/dist/test/obliterate.reconnect.spec.js.map +1 -0
- package/dist/test/obliterate.spec.d.ts +6 -0
- package/dist/test/obliterate.spec.d.ts.map +1 -0
- package/dist/test/obliterate.spec.js +162 -0
- package/dist/test/obliterate.spec.js.map +1 -0
- package/dist/test/ordinal.spec.d.ts +2 -0
- package/dist/test/ordinal.spec.d.ts.map +1 -0
- package/dist/test/ordinal.spec.js +43 -0
- package/dist/test/ordinal.spec.js.map +1 -0
- package/dist/test/partialLength.spec.d.ts +6 -0
- package/dist/test/partialLength.spec.d.ts.map +1 -0
- package/dist/test/partialLength.spec.js +282 -0
- package/dist/test/partialLength.spec.js.map +1 -0
- package/dist/test/properties.spec.d.ts +6 -0
- package/dist/test/properties.spec.d.ts.map +1 -0
- package/dist/test/properties.spec.js +55 -0
- package/dist/test/properties.spec.js.map +1 -0
- package/dist/test/reconnectHelper.d.ts +48 -0
- package/dist/test/reconnectHelper.d.ts.map +1 -0
- package/dist/test/reconnectHelper.js +86 -0
- package/dist/test/reconnectHelper.js.map +1 -0
- package/dist/test/resetPendingSegmentsToOp.spec.d.ts +6 -0
- package/dist/test/resetPendingSegmentsToOp.spec.d.ts.map +1 -0
- package/dist/test/resetPendingSegmentsToOp.spec.js +218 -0
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -0
- package/dist/test/revertibleFarm.spec.d.ts +6 -0
- package/dist/test/revertibleFarm.spec.d.ts.map +1 -0
- package/dist/test/revertibleFarm.spec.js +124 -0
- package/dist/test/revertibleFarm.spec.js.map +1 -0
- package/dist/test/revertibles.spec.d.ts +17 -0
- package/dist/test/revertibles.spec.d.ts.map +1 -0
- package/dist/test/revertibles.spec.js +385 -0
- package/dist/test/revertibles.spec.js.map +1 -0
- package/dist/test/segmentGroupCollection.spec.d.ts +6 -0
- package/dist/test/segmentGroupCollection.spec.d.ts.map +1 -0
- package/dist/test/segmentGroupCollection.spec.js +60 -0
- package/dist/test/segmentGroupCollection.spec.js.map +1 -0
- package/dist/test/snapshot.spec.d.ts +6 -0
- package/dist/test/snapshot.spec.d.ts.map +1 -0
- package/dist/test/snapshot.spec.js +178 -0
- package/dist/test/snapshot.spec.js.map +1 -0
- package/dist/test/snapshot.utils.d.ts +33 -0
- package/dist/test/snapshot.utils.d.ts.map +1 -0
- package/dist/test/snapshot.utils.js +109 -0
- package/dist/test/snapshot.utils.js.map +1 -0
- package/dist/test/snapshotlegacy.spec.d.ts +6 -0
- package/dist/test/snapshotlegacy.spec.d.ts.map +1 -0
- package/dist/test/snapshotlegacy.spec.js +139 -0
- package/dist/test/snapshotlegacy.spec.js.map +1 -0
- package/dist/test/sortedSegmentSet.spec.d.ts +6 -0
- package/dist/test/sortedSegmentSet.spec.d.ts.map +1 -0
- package/dist/test/sortedSegmentSet.spec.js +95 -0
- package/dist/test/sortedSegmentSet.spec.js.map +1 -0
- package/dist/test/testClient.d.ts +119 -0
- package/dist/test/testClient.d.ts.map +1 -0
- package/dist/test/testClient.js +439 -0
- package/dist/test/testClient.js.map +1 -0
- package/dist/test/testClientLogger.d.ts +44 -0
- package/dist/test/testClientLogger.d.ts.map +1 -0
- package/dist/test/testClientLogger.js +287 -0
- package/dist/test/testClientLogger.js.map +1 -0
- package/dist/test/testSerializer.d.ts +18 -0
- package/dist/test/testSerializer.d.ts.map +1 -0
- package/dist/test/testSerializer.js +33 -0
- package/dist/test/testSerializer.js.map +1 -0
- package/dist/test/testServer.d.ts +36 -0
- package/dist/test/testServer.d.ts.map +1 -0
- package/dist/test/testServer.js +138 -0
- package/dist/test/testServer.js.map +1 -0
- package/dist/test/testUtils.d.ts +69 -0
- package/dist/test/testUtils.d.ts.map +1 -0
- package/dist/test/testUtils.js +149 -0
- package/dist/test/testUtils.js.map +1 -0
- package/dist/test/text.d.ts +9 -0
- package/dist/test/text.d.ts.map +1 -0
- package/dist/test/text.js +76 -0
- package/dist/test/text.js.map +1 -0
- package/dist/test/tracking.spec.d.ts +6 -0
- package/dist/test/tracking.spec.d.ts.map +1 -0
- package/dist/test/tracking.spec.js +120 -0
- package/dist/test/tracking.spec.js.map +1 -0
- package/dist/test/wordUnitTests.d.ts +6 -0
- package/dist/test/wordUnitTests.d.ts.map +1 -0
- package/dist/test/wordUnitTests.js +172 -0
- package/dist/test/wordUnitTests.js.map +1 -0
- package/lib/{MergeTreeTextHelper.d.ts → MergeTreeTextHelper.d.mts} +3 -3
- package/lib/MergeTreeTextHelper.d.mts.map +1 -0
- package/lib/{MergeTreeTextHelper.js → MergeTreeTextHelper.mjs} +5 -10
- package/lib/MergeTreeTextHelper.mjs.map +1 -0
- package/lib/{attributionCollection.d.ts → attributionCollection.d.mts} +2 -2
- package/lib/attributionCollection.d.mts.map +1 -0
- package/lib/{attributionCollection.js → attributionCollection.mjs} +9 -14
- package/lib/attributionCollection.mjs.map +1 -0
- package/lib/{attributionPolicy.d.ts → attributionPolicy.d.mts} +2 -2
- package/lib/attributionPolicy.d.mts.map +1 -0
- package/lib/{attributionPolicy.js → attributionPolicy.mjs} +21 -27
- package/lib/attributionPolicy.mjs.map +1 -0
- package/lib/{client.d.ts → client.d.mts} +9 -16
- package/lib/client.d.mts.map +1 -0
- package/lib/{client.js → client.mjs} +101 -110
- package/lib/client.mjs.map +1 -0
- package/lib/collections/{index.d.ts → index.d.mts} +3 -3
- package/lib/collections/index.d.mts.map +1 -0
- package/lib/collections/index.mjs +7 -0
- package/lib/collections/index.mjs.map +1 -0
- package/lib/collections/{list.d.ts → list.d.mts} +1 -1
- package/lib/collections/list.d.mts.map +1 -0
- package/lib/collections/{list.js → list.mjs} +6 -11
- package/lib/collections/list.mjs.map +1 -0
- package/lib/collections/{rbTree.d.ts → rbTree.d.mts} +1 -1
- package/lib/collections/rbTree.d.mts.map +1 -0
- package/lib/collections/{rbTree.js → rbTree.mjs} +16 -20
- package/lib/collections/rbTree.mjs.map +1 -0
- package/lib/{constants.d.ts → constants.d.mts} +1 -1
- package/lib/constants.d.mts.map +1 -0
- package/lib/constants.mjs +32 -0
- package/lib/constants.mjs.map +1 -0
- package/lib/{endOfTreeSegment.d.ts → endOfTreeSegment.d.mts} +4 -4
- package/lib/endOfTreeSegment.d.mts.map +1 -0
- package/lib/{endOfTreeSegment.js → endOfTreeSegment.mjs} +13 -18
- package/lib/endOfTreeSegment.mjs.map +1 -0
- package/lib/{index.d.ts → index.d.mts} +21 -21
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +24 -0
- package/lib/index.mjs.map +1 -0
- package/lib/{localReference.d.ts → localReference.d.mts} +7 -7
- package/lib/localReference.d.mts.map +1 -0
- package/lib/{localReference.js → localReference.mjs} +38 -47
- package/lib/localReference.mjs.map +1 -0
- package/lib/{merge-tree-alpha.d.ts → merge-tree-alpha.d.mts} +27 -12
- package/lib/{merge-tree-beta.d.ts → merge-tree-beta.d.mts} +0 -16
- package/lib/{merge-tree-public.d.ts → merge-tree-public.d.mts} +0 -16
- package/lib/{merge-tree-untrimmed.d.ts → merge-tree-untrimmed.d.mts} +5 -29
- package/lib/{mergeTree.d.ts → mergeTree.d.mts} +12 -29
- package/lib/mergeTree.d.mts.map +1 -0
- package/lib/{mergeTree.js → mergeTree.mjs} +203 -340
- package/lib/mergeTree.mjs.map +1 -0
- package/lib/{mergeTreeDeltaCallback.d.ts → mergeTreeDeltaCallback.d.mts} +4 -8
- package/lib/mergeTreeDeltaCallback.d.mts.map +1 -0
- package/lib/{mergeTreeDeltaCallback.js → mergeTreeDeltaCallback.mjs} +2 -5
- package/lib/mergeTreeDeltaCallback.mjs.map +1 -0
- package/lib/{mergeTreeNodeWalk.d.ts → mergeTreeNodeWalk.d.mts} +2 -2
- package/lib/mergeTreeNodeWalk.d.mts.map +1 -0
- package/lib/{mergeTreeNodeWalk.js → mergeTreeNodeWalk.mjs} +14 -21
- package/lib/mergeTreeNodeWalk.mjs.map +1 -0
- package/lib/{mergeTreeNodes.d.ts → mergeTreeNodes.d.mts} +12 -12
- package/lib/mergeTreeNodes.d.mts.map +1 -0
- package/lib/{mergeTreeNodes.js → mergeTreeNodes.mjs} +60 -76
- package/lib/mergeTreeNodes.mjs.map +1 -0
- package/lib/{mergeTreeTracking.d.ts → mergeTreeTracking.d.mts} +3 -3
- package/lib/mergeTreeTracking.d.mts.map +1 -0
- package/lib/{mergeTreeTracking.js → mergeTreeTracking.mjs} +6 -13
- package/lib/mergeTreeTracking.mjs.map +1 -0
- package/lib/{opBuilder.d.ts → opBuilder.d.mts} +4 -4
- package/lib/opBuilder.d.mts.map +1 -0
- package/lib/{opBuilder.js → opBuilder.mjs} +15 -25
- package/lib/opBuilder.mjs.map +1 -0
- package/lib/{ops.d.ts → ops.d.mts} +2 -2
- package/lib/ops.d.mts.map +1 -0
- package/lib/{ops.js → ops.mjs} +5 -8
- package/lib/ops.mjs.map +1 -0
- package/lib/{ordinal.d.ts → ordinal.d.mts} +1 -1
- package/lib/ordinal.d.mts.map +1 -0
- package/lib/{ordinal.js → ordinal.mjs} +4 -9
- package/lib/ordinal.mjs.map +1 -0
- package/lib/{partialLengths.d.ts → partialLengths.d.mts} +4 -4
- package/lib/partialLengths.d.mts.map +1 -0
- package/lib/{partialLengths.js → partialLengths.mjs} +38 -46
- package/lib/partialLengths.mjs.map +1 -0
- package/lib/{properties.d.ts → properties.d.mts} +1 -1
- package/lib/properties.d.mts.map +1 -0
- package/lib/{properties.js → properties.mjs} +7 -16
- package/lib/properties.mjs.map +1 -0
- package/lib/{referencePositions.d.ts → referencePositions.d.mts} +5 -5
- package/lib/referencePositions.d.mts.map +1 -0
- package/lib/referencePositions.mjs +70 -0
- package/lib/referencePositions.mjs.map +1 -0
- package/lib/{revertibles.d.ts → revertibles.d.mts} +12 -12
- package/lib/revertibles.d.mts.map +1 -0
- package/lib/{revertibles.js → revertibles.mjs} +60 -67
- package/lib/revertibles.mjs.map +1 -0
- package/lib/{segmentGroupCollection.d.ts → segmentGroupCollection.d.mts} +2 -2
- package/lib/segmentGroupCollection.d.mts.map +1 -0
- package/lib/{segmentGroupCollection.js → segmentGroupCollection.mjs} +5 -9
- package/lib/segmentGroupCollection.mjs.map +1 -0
- package/lib/{segmentPropertiesManager.d.ts → segmentPropertiesManager.d.mts} +3 -3
- package/lib/segmentPropertiesManager.d.mts.map +1 -0
- package/lib/{segmentPropertiesManager.js → segmentPropertiesManager.mjs} +14 -20
- package/lib/{segmentPropertiesManager.js.map → segmentPropertiesManager.mjs.map} +1 -1
- package/lib/{snapshotChunks.d.ts → snapshotChunks.d.mts} +4 -4
- package/lib/snapshotChunks.d.mts.map +1 -0
- package/lib/{snapshotChunks.js → snapshotChunks.mjs} +10 -17
- package/lib/snapshotChunks.mjs.map +1 -0
- package/lib/{snapshotLoader.d.ts → snapshotLoader.d.mts} +3 -3
- package/lib/snapshotLoader.d.mts.map +1 -0
- package/lib/{snapshotLoader.js → snapshotLoader.mjs} +33 -38
- package/lib/snapshotLoader.mjs.map +1 -0
- package/lib/{snapshotV1.d.ts → snapshotV1.d.mts} +4 -4
- package/lib/snapshotV1.d.mts.map +1 -0
- package/lib/{snapshotV1.js → snapshotV1.mjs} +28 -32
- package/lib/snapshotV1.mjs.map +1 -0
- package/lib/{snapshotlegacy.d.ts → snapshotlegacy.d.mts} +3 -3
- package/lib/snapshotlegacy.d.mts.map +1 -0
- package/lib/{snapshotlegacy.js → snapshotlegacy.mjs} +21 -26
- package/lib/snapshotlegacy.mjs.map +1 -0
- package/lib/{sortedSegmentSet.d.ts → sortedSegmentSet.d.mts} +4 -4
- package/lib/sortedSegmentSet.d.mts.map +1 -0
- package/lib/{sortedSegmentSet.js → sortedSegmentSet.mjs} +3 -8
- package/lib/sortedSegmentSet.mjs.map +1 -0
- package/lib/{sortedSet.d.ts → sortedSet.d.mts} +1 -1
- package/lib/sortedSet.d.mts.map +1 -0
- package/lib/{sortedSet.js → sortedSet.mjs} +2 -6
- package/lib/sortedSet.mjs.map +1 -0
- package/lib/{textSegment.d.ts → textSegment.d.mts} +4 -4
- package/lib/textSegment.d.mts.map +1 -0
- package/lib/{textSegment.js → textSegment.mjs} +8 -12
- package/lib/textSegment.mjs.map +1 -0
- package/lib/{zamboni.d.ts → zamboni.d.mts} +3 -3
- package/lib/zamboni.d.mts.map +1 -0
- package/lib/{zamboni.js → zamboni.mjs} +22 -28
- package/lib/zamboni.mjs.map +1 -0
- package/package.json +95 -164
- package/src/client.ts +0 -8
- package/src/mergeTree.ts +0 -226
- package/src/ops.ts +1 -1
- package/src/revertibles.ts +4 -4
- package/lib/MergeTreeTextHelper.d.ts.map +0 -1
- package/lib/MergeTreeTextHelper.js.map +0 -1
- package/lib/attributionCollection.d.ts.map +0 -1
- package/lib/attributionCollection.js.map +0 -1
- package/lib/attributionPolicy.d.ts.map +0 -1
- package/lib/attributionPolicy.js.map +0 -1
- package/lib/client.d.ts.map +0 -1
- package/lib/client.js.map +0 -1
- package/lib/collections/index.d.ts.map +0 -1
- package/lib/collections/index.js +0 -14
- package/lib/collections/index.js.map +0 -1
- package/lib/collections/list.d.ts.map +0 -1
- package/lib/collections/list.js.map +0 -1
- package/lib/collections/rbTree.d.ts.map +0 -1
- package/lib/collections/rbTree.js.map +0 -1
- package/lib/constants.d.ts.map +0 -1
- package/lib/constants.js +0 -35
- package/lib/constants.js.map +0 -1
- package/lib/endOfTreeSegment.d.ts.map +0 -1
- package/lib/endOfTreeSegment.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -80
- package/lib/index.js.map +0 -1
- package/lib/localReference.d.ts.map +0 -1
- package/lib/localReference.js.map +0 -1
- package/lib/mergeTree.d.ts.map +0 -1
- package/lib/mergeTree.js.map +0 -1
- package/lib/mergeTreeDeltaCallback.d.ts.map +0 -1
- package/lib/mergeTreeDeltaCallback.js.map +0 -1
- package/lib/mergeTreeNodeWalk.d.ts.map +0 -1
- package/lib/mergeTreeNodeWalk.js.map +0 -1
- package/lib/mergeTreeNodes.d.ts.map +0 -1
- package/lib/mergeTreeNodes.js.map +0 -1
- package/lib/mergeTreeTracking.d.ts.map +0 -1
- package/lib/mergeTreeTracking.js.map +0 -1
- package/lib/opBuilder.d.ts.map +0 -1
- package/lib/opBuilder.js.map +0 -1
- package/lib/ops.d.ts.map +0 -1
- package/lib/ops.js.map +0 -1
- package/lib/ordinal.d.ts.map +0 -1
- package/lib/ordinal.js.map +0 -1
- package/lib/partialLengths.d.ts.map +0 -1
- package/lib/partialLengths.js.map +0 -1
- package/lib/properties.d.ts.map +0 -1
- package/lib/properties.js.map +0 -1
- package/lib/referencePositions.d.ts.map +0 -1
- package/lib/referencePositions.js +0 -80
- package/lib/referencePositions.js.map +0 -1
- package/lib/revertibles.d.ts.map +0 -1
- package/lib/revertibles.js.map +0 -1
- package/lib/segmentGroupCollection.d.ts.map +0 -1
- package/lib/segmentGroupCollection.js.map +0 -1
- package/lib/segmentPropertiesManager.d.ts.map +0 -1
- package/lib/snapshotChunks.d.ts.map +0 -1
- package/lib/snapshotChunks.js.map +0 -1
- package/lib/snapshotLoader.d.ts.map +0 -1
- package/lib/snapshotLoader.js.map +0 -1
- package/lib/snapshotV1.d.ts.map +0 -1
- package/lib/snapshotV1.js.map +0 -1
- package/lib/snapshotlegacy.d.ts.map +0 -1
- package/lib/snapshotlegacy.js.map +0 -1
- package/lib/sortedSegmentSet.d.ts.map +0 -1
- package/lib/sortedSegmentSet.js.map +0 -1
- package/lib/sortedSet.d.ts.map +0 -1
- package/lib/sortedSet.js.map +0 -1
- package/lib/textSegment.d.ts.map +0 -1
- package/lib/textSegment.js.map +0 -1
- package/lib/zamboni.d.ts.map +0 -1
- package/lib/zamboni.js.map +0 -1
- package/merge-tree.test-files.tar +0 -0
- package/src/mergeTreeExample1.pdf +0 -0
- package/tsconfig.esnext.json +0 -6
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const assert_1 = require("assert");
|
|
8
|
+
const attributionPolicy_1 = require("../attributionPolicy");
|
|
9
|
+
const testClient_1 = require("./testClient");
|
|
10
|
+
const local = { type: "local" };
|
|
11
|
+
describe("Attribution Policy", () => {
|
|
12
|
+
const localUserLongId = "localUser";
|
|
13
|
+
const remoteUserLongId = "remoteUser";
|
|
14
|
+
let client;
|
|
15
|
+
let seq = 0;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
seq = 0;
|
|
18
|
+
});
|
|
19
|
+
function runInsertVerificationTests() {
|
|
20
|
+
it("attributes segments inserted locally", () => {
|
|
21
|
+
const mergeTreeOp = client.insertTextLocal(0, "123");
|
|
22
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs(), [local, local, local]);
|
|
23
|
+
client.applyMsg(client.makeOpMessage(mergeTreeOp, ++seq));
|
|
24
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);
|
|
25
|
+
});
|
|
26
|
+
it("attributes segments inserted remotely", () => {
|
|
27
|
+
client.insertTextRemote(0, "123", undefined, ++seq, seq - 1, remoteUserLongId);
|
|
28
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);
|
|
29
|
+
});
|
|
30
|
+
it("attributes insertion in a detached state", () => {
|
|
31
|
+
client = new testClient_1.TestClient(client.mergeTree.options);
|
|
32
|
+
client.insertTextLocal(0, "1", undefined);
|
|
33
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs(), [{ type: "detached", id: 0 }]);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function runAnnotateVerificationTests() {
|
|
37
|
+
it("attributes local property changes", () => {
|
|
38
|
+
client.applyMsg(client.makeOpMessage(client.insertTextLocal(0, "123"), ++seq));
|
|
39
|
+
const annotateOp = client.annotateRangeLocal(1, 2, { foo: 1 });
|
|
40
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [undefined, local, undefined]);
|
|
41
|
+
client.applyMsg(client.makeOpMessage(annotateOp, ++seq));
|
|
42
|
+
client.applyMsg(client.makeOpMessage(client.annotateRangeLocal(0, 3, { bar: 2 }), ++seq));
|
|
43
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [undefined, 2, undefined]);
|
|
44
|
+
});
|
|
45
|
+
it("attributes remote property changes", () => {
|
|
46
|
+
client.insertTextRemote(0, "123", undefined, ++seq, seq - 1, remoteUserLongId);
|
|
47
|
+
client.annotateRangeRemote(1, 2, { foo: 1 }, ++seq, seq - 1, remoteUserLongId);
|
|
48
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [undefined, 2, undefined]);
|
|
49
|
+
});
|
|
50
|
+
it("uses LWW semantics for conflicting attribution of props", () => {
|
|
51
|
+
client.applyMsg(client.makeOpMessage(client.insertTextLocal(0, "123"), ++seq));
|
|
52
|
+
const localPropChange = client.annotateRangeLocal(1, 2, { foo: 1 });
|
|
53
|
+
client.annotateRangeRemote(0, 2, { foo: 2 }, ++seq, seq - 1, remoteUserLongId);
|
|
54
|
+
const firstRemoteAnnotateSeq = seq;
|
|
55
|
+
assert_1.strict.equal(client.getPropertiesAtPosition(0)?.foo, 2);
|
|
56
|
+
assert_1.strict.equal(client.getPropertiesAtPosition(1)?.foo, 1);
|
|
57
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [
|
|
58
|
+
firstRemoteAnnotateSeq,
|
|
59
|
+
local,
|
|
60
|
+
undefined,
|
|
61
|
+
]);
|
|
62
|
+
client.applyMsg(client.makeOpMessage(localPropChange, ++seq, seq - 1, localUserLongId));
|
|
63
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [firstRemoteAnnotateSeq, seq, undefined], "property change should have been attributed to the winning, local op");
|
|
64
|
+
client.annotateRangeRemote(1, 2, { foo: 3 }, ++seq, seq - 1, remoteUserLongId);
|
|
65
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [firstRemoteAnnotateSeq, seq, undefined], "second property change should have been attributed to a remote change");
|
|
66
|
+
});
|
|
67
|
+
describe("attributes properties set on a segment at insertion time", () => {
|
|
68
|
+
it("for remote insertions", () => {
|
|
69
|
+
client.insertTextRemote(0, "123", { foo: "bar" }, ++seq, seq - 1, remoteUserLongId);
|
|
70
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [1, 1, 1]);
|
|
71
|
+
});
|
|
72
|
+
it("for local insertions", () => {
|
|
73
|
+
const mergeTreeOp = client.insertTextLocal(0, "123", { foo: "bar" });
|
|
74
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [local, local, local]);
|
|
75
|
+
client.applyMsg(client.makeOpMessage(mergeTreeOp, ++seq));
|
|
76
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [1, 1, 1]);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
it("attributes annotation in a detached state", () => {
|
|
80
|
+
client = new testClient_1.TestClient(client.mergeTree.options);
|
|
81
|
+
client.insertTextLocal(0, "1", undefined);
|
|
82
|
+
client.annotateRangeLocal(0, 1, { foo: "bar" });
|
|
83
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [{ type: "detached", id: 0 }]);
|
|
84
|
+
});
|
|
85
|
+
it("attributes annotation on insertion in a detached state", () => {
|
|
86
|
+
client = new testClient_1.TestClient(client.mergeTree.options);
|
|
87
|
+
client.insertTextLocal(0, "1", { foo: "bar" });
|
|
88
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [{ type: "detached", id: 0 }]);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
describe("using insert-only attribution", () => {
|
|
92
|
+
beforeEach(() => {
|
|
93
|
+
client = new testClient_1.TestClient({
|
|
94
|
+
attribution: {
|
|
95
|
+
track: true,
|
|
96
|
+
policyFactory: attributionPolicy_1.createInsertOnlyAttributionPolicy,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
client.startOrUpdateCollaboration(localUserLongId);
|
|
100
|
+
});
|
|
101
|
+
runInsertVerificationTests();
|
|
102
|
+
it("ignores local property changes", () => {
|
|
103
|
+
client.applyMsg(client.makeOpMessage(client.insertTextLocal(0, "123"), ++seq));
|
|
104
|
+
client.applyMsg(client.makeOpMessage(client.annotateRangeLocal(1, 2, { foo: 1 }), ++seq));
|
|
105
|
+
client.applyMsg(client.makeOpMessage(client.annotateRangeLocal(0, 3, { bar: 2 }), ++seq));
|
|
106
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);
|
|
107
|
+
});
|
|
108
|
+
it("ignores remote property changes", () => {
|
|
109
|
+
client.insertTextRemote(0, "123", undefined, ++seq, seq - 1, remoteUserLongId);
|
|
110
|
+
client.annotateRangeRemote(1, 2, { foo: 1 }, ++seq, seq - 1, remoteUserLongId);
|
|
111
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs(), [1, 1, 1]);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
describe("using foo-property-only attribution", () => {
|
|
115
|
+
beforeEach(() => {
|
|
116
|
+
client = new testClient_1.TestClient({
|
|
117
|
+
attribution: {
|
|
118
|
+
track: true,
|
|
119
|
+
policyFactory: (0, attributionPolicy_1.createPropertyTrackingAttributionPolicyFactory)("foo"),
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
client.startOrUpdateCollaboration(localUserLongId);
|
|
123
|
+
});
|
|
124
|
+
runAnnotateVerificationTests();
|
|
125
|
+
it("ignores segments inserted locally", () => {
|
|
126
|
+
const mergeTreeOp = client.insertTextLocal(0, "123");
|
|
127
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [
|
|
128
|
+
undefined,
|
|
129
|
+
undefined,
|
|
130
|
+
undefined,
|
|
131
|
+
]);
|
|
132
|
+
client.applyMsg(client.makeOpMessage(mergeTreeOp, ++seq));
|
|
133
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [
|
|
134
|
+
undefined,
|
|
135
|
+
undefined,
|
|
136
|
+
undefined,
|
|
137
|
+
]);
|
|
138
|
+
});
|
|
139
|
+
it("ignores segments inserted remotely", () => {
|
|
140
|
+
client.insertTextRemote(0, "123", undefined, ++seq, seq - 1, remoteUserLongId);
|
|
141
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs(), [undefined, undefined, undefined]);
|
|
142
|
+
});
|
|
143
|
+
it("can correctly combine segment attribution on append", () => {
|
|
144
|
+
client.insertTextRemote(0, "1", { foo: "bar", bar: 1 }, ++seq, seq - 1, remoteUserLongId);
|
|
145
|
+
client.insertTextRemote(1, "2", { bar: 1 }, ++seq, seq - 1, remoteUserLongId);
|
|
146
|
+
client.annotateRangeRemote(0, 1, { foo: null }, ++seq, seq - 1, remoteUserLongId);
|
|
147
|
+
client.updateMinSeq(seq);
|
|
148
|
+
let segmentCount = 0;
|
|
149
|
+
client.walkSegments(() => {
|
|
150
|
+
segmentCount++;
|
|
151
|
+
return true;
|
|
152
|
+
});
|
|
153
|
+
assert_1.strict.equal(segmentCount, 1);
|
|
154
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [seq, undefined]);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe("using an attribution policy which tracks insertion and annotation", () => {
|
|
158
|
+
beforeEach(() => {
|
|
159
|
+
client = new testClient_1.TestClient({
|
|
160
|
+
attribution: {
|
|
161
|
+
track: true,
|
|
162
|
+
policyFactory: (0, attributionPolicy_1.createPropertyTrackingAndInsertionAttributionPolicyFactory)("foo"),
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
client.startOrUpdateCollaboration(localUserLongId);
|
|
166
|
+
});
|
|
167
|
+
runAnnotateVerificationTests();
|
|
168
|
+
runInsertVerificationTests();
|
|
169
|
+
});
|
|
170
|
+
describe("using an attribution policy which tracks annotation of multiple properties", () => {
|
|
171
|
+
beforeEach(() => {
|
|
172
|
+
client = new testClient_1.TestClient({
|
|
173
|
+
attribution: {
|
|
174
|
+
track: true,
|
|
175
|
+
policyFactory: (0, attributionPolicy_1.createPropertyTrackingAttributionPolicyFactory)("foo", "bar"),
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
client.startOrUpdateCollaboration(localUserLongId);
|
|
179
|
+
});
|
|
180
|
+
it("attributes local property change on ack", () => {
|
|
181
|
+
client.applyMsg(client.makeOpMessage(client.insertTextLocal(0, "123"), ++seq));
|
|
182
|
+
client.applyMsg(client.makeOpMessage(client.annotateRangeLocal(1, 2, { foo: 1 }), ++seq));
|
|
183
|
+
client.applyMsg(client.makeOpMessage(client.annotateRangeLocal(0, 3, { bar: 2 }), ++seq));
|
|
184
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("foo"), [undefined, 2, undefined]);
|
|
185
|
+
assert_1.strict.deepEqual(client.getAllAttributionSeqs("bar"), [3, 3, 3]);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
//# sourceMappingURL=attributionPolicy.spec.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { IRandom } from "@fluid-private/stochastic-test-utils";
|
|
6
|
+
import { IMergeNode } from "../mergeTreeNodes";
|
|
7
|
+
import { TestClient } from "./testClient";
|
|
8
|
+
export declare function simpleTest(): void;
|
|
9
|
+
export declare function integerTest1(): number;
|
|
10
|
+
export declare function fileTest1(): void;
|
|
11
|
+
export declare function makeTextSegment(text: string): IMergeNode;
|
|
12
|
+
export declare function mergeTreeTest1(): void;
|
|
13
|
+
export declare function mergeTreeLargeTest(): void;
|
|
14
|
+
export declare function mergeTreeCheckedTest(): number;
|
|
15
|
+
export declare function TestPack(verbose?: boolean): {
|
|
16
|
+
firstTest: () => void;
|
|
17
|
+
randolicious: () => number;
|
|
18
|
+
clientServer: (startFile?: string, initRounds?: number) => number;
|
|
19
|
+
manyMergeTrees: () => void;
|
|
20
|
+
};
|
|
21
|
+
export declare class RandomPack {
|
|
22
|
+
random: IRandom;
|
|
23
|
+
constructor();
|
|
24
|
+
randInteger(min: number, max: number): number;
|
|
25
|
+
randString(wordCount: number): string;
|
|
26
|
+
}
|
|
27
|
+
export type DocumentNode = string | DocumentTree;
|
|
28
|
+
/**
|
|
29
|
+
* Generate and model documents from the following tree grammar:
|
|
30
|
+
* Row -\> row[Box*];
|
|
31
|
+
* Box -\> box[Content];
|
|
32
|
+
* Content -\> (Row|Paragraph)*;
|
|
33
|
+
* Paragraph -\> pgtile text;
|
|
34
|
+
* Document -\> Content
|
|
35
|
+
*/
|
|
36
|
+
export declare class DocumentTree {
|
|
37
|
+
name: string;
|
|
38
|
+
children: DocumentNode[];
|
|
39
|
+
pos: number;
|
|
40
|
+
ids: {
|
|
41
|
+
box: number;
|
|
42
|
+
row: number;
|
|
43
|
+
};
|
|
44
|
+
id: string | undefined;
|
|
45
|
+
static randPack: RandomPack;
|
|
46
|
+
constructor(name: string, children: DocumentNode[]);
|
|
47
|
+
addToMergeTree(client: TestClient, docNode: DocumentNode): void;
|
|
48
|
+
static generateDocument(): DocumentTree;
|
|
49
|
+
static generateContent(rowProbability: number): DocumentNode[];
|
|
50
|
+
static generateParagraph(): DocumentTree;
|
|
51
|
+
static generateRow(rowProbability: number): DocumentTree;
|
|
52
|
+
static generateBox(rowProbability: number): DocumentTree;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=beastTest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beastTest.d.ts","sourceRoot":"","sources":["../../src/test/beastTest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,OAAO,EAAc,MAAM,sCAAsC,CAAC;AAa3E,OAAO,EAEN,UAAU,EAKV,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EAA2B,UAAU,EAAE,MAAM,cAAc,CAAC;AAmHnE,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"}
|