@fluidframework/merge-tree 2.1.0-276985 → 2.1.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.cjs +2 -4
- package/CHANGELOG.md +15 -0
- package/README.md +109 -1
- package/api-extractor/api-extractor.current.json +5 -0
- package/api-extractor/api-extractor.legacy.json +1 -1
- package/api-extractor.json +1 -1
- package/api-report/merge-tree.legacy.alpha.api.md +10 -22
- package/api-report/merge-tree.legacy.public.api.md +9 -0
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js +1 -1
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/attributionCollection.d.ts.map +1 -1
- package/dist/attributionCollection.js +65 -17
- package/dist/attributionCollection.js.map +1 -1
- package/dist/attributionPolicy.d.ts +2 -1
- package/dist/attributionPolicy.d.ts.map +1 -1
- package/dist/attributionPolicy.js +10 -3
- package/dist/attributionPolicy.js.map +1 -1
- package/dist/client.d.ts +3 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +65 -37
- package/dist/client.js.map +1 -1
- package/dist/collections/list.d.ts.map +1 -1
- package/dist/collections/list.js +5 -2
- package/dist/collections/list.js.map +1 -1
- package/dist/collections/rbTree.d.ts +2 -2
- package/dist/collections/rbTree.d.ts.map +1 -1
- package/dist/collections/rbTree.js +23 -35
- package/dist/collections/rbTree.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +4 -1
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/legacy.d.ts +1 -1
- package/dist/localReference.d.ts +16 -6
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +31 -20
- package/dist/localReference.js.map +1 -1
- package/dist/mergeTree.d.ts +0 -1
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +127 -112
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
- package/dist/mergeTreeNodeWalk.js +1 -1
- package/dist/mergeTreeNodeWalk.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +6 -5
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +29 -20
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/mergeTreeTracking.js +3 -3
- package/dist/mergeTreeTracking.js.map +1 -1
- package/dist/opBuilder.d.ts +6 -1
- package/dist/opBuilder.d.ts.map +1 -1
- package/dist/opBuilder.js +5 -0
- package/dist/opBuilder.js.map +1 -1
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js.map +1 -1
- package/dist/ordinal.d.ts.map +1 -1
- package/dist/ordinal.js +7 -0
- package/dist/ordinal.js.map +1 -1
- package/dist/partialLengths.d.ts +4 -2
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +101 -53
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.d.ts +4 -1
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +7 -6
- package/dist/perspective.js.map +1 -1
- package/dist/properties.d.ts +13 -10
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +22 -11
- package/dist/properties.js.map +1 -1
- package/dist/public.d.ts +1 -1
- package/dist/referencePositions.d.ts +7 -0
- package/dist/referencePositions.d.ts.map +1 -1
- package/dist/referencePositions.js +7 -0
- package/dist/referencePositions.js.map +1 -1
- package/dist/revertibles.d.ts +6 -0
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +50 -21
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentGroupCollection.d.ts.map +1 -1
- package/dist/segmentGroupCollection.js +2 -0
- package/dist/segmentGroupCollection.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts +7 -3
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +20 -15
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotChunks.d.ts.map +1 -1
- package/dist/snapshotChunks.js +10 -5
- package/dist/snapshotChunks.js.map +1 -1
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +14 -10
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +20 -8
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +4 -2
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/sortedSegmentSet.d.ts.map +1 -1
- package/dist/sortedSegmentSet.js +8 -1
- package/dist/sortedSegmentSet.js.map +1 -1
- package/dist/sortedSet.d.ts.map +1 -1
- package/dist/sortedSet.js +4 -0
- package/dist/sortedSet.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/Snapshot.perf.spec.js +1 -0
- package/dist/test/Snapshot.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.perf.spec.js +3 -1
- package/dist/test/attributionCollection.perf.spec.js.map +1 -1
- package/dist/test/attributionCollection.spec.js +69 -68
- package/dist/test/attributionCollection.spec.js.map +1 -1
- package/dist/test/attributionPolicy.spec.js +29 -27
- package/dist/test/attributionPolicy.spec.js.map +1 -1
- package/dist/test/beastTest.spec.d.ts +1 -4
- package/dist/test/beastTest.spec.d.ts.map +1 -1
- package/dist/test/beastTest.spec.js +32 -30
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.annotateMarker.spec.js +5 -5
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/client.apis.spec.d.ts.map +1 -1
- package/dist/test/client.apis.spec.js +5 -7
- package/dist/test/client.apis.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +125 -103
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.applyStashedOpFarm.spec.js +18 -10
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.js +13 -8
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.conflictFarm.spec.js +4 -2
- package/dist/test/client.conflictFarm.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +10 -10
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +111 -104
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.localReferenceFarm.spec.js +14 -10
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
- package/dist/test/client.rebasePosition.spec.js +12 -12
- package/dist/test/client.rebasePosition.spec.js.map +1 -1
- package/dist/test/client.reconnectFarm.spec.js +12 -9
- package/dist/test/client.reconnectFarm.spec.js.map +1 -1
- package/dist/test/client.replay.spec.js +11 -10
- package/dist/test/client.replay.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +87 -84
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js +3 -1
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +122 -112
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/client.walkSegments.spec.js +7 -7
- package/dist/test/client.walkSegments.spec.js.map +1 -1
- package/dist/test/collections.list.spec.js +14 -14
- package/dist/test/collections.list.spec.js.map +1 -1
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js +3 -3
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/dist/test/dirname.cjs +1 -0
- package/dist/test/dirname.cjs.map +1 -1
- package/dist/test/dirname.d.cts.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +7 -7
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +87 -87
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +6 -6
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +24 -24
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +6 -6
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +23 -23
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +3 -3
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTree.zamboni.spec.js +10 -10
- package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +28 -16
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.spec.js +9 -5
- package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +165 -165
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.deltaCallback.spec.js +20 -21
- package/dist/test/obliterate.deltaCallback.spec.js.map +1 -1
- package/dist/test/obliterate.partialLength.spec.js +7 -7
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.reconnect.spec.js +13 -13
- package/dist/test/obliterate.reconnect.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +9 -9
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/ordinal.spec.js +10 -4
- package/dist/test/ordinal.spec.js.map +1 -1
- package/dist/test/partialLength.spec.js.map +1 -1
- package/dist/test/properties.spec.js +15 -15
- package/dist/test/properties.spec.js.map +1 -1
- package/dist/test/reconnectHelper.d.ts +4 -4
- package/dist/test/reconnectHelper.d.ts.map +1 -1
- package/dist/test/reconnectHelper.js +28 -20
- package/dist/test/reconnectHelper.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +35 -29
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/revertibleFarm.spec.js +11 -10
- package/dist/test/revertibleFarm.spec.js.map +1 -1
- package/dist/test/revertibles.spec.d.ts.map +1 -1
- package/dist/test/revertibles.spec.js +96 -57
- package/dist/test/revertibles.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js +17 -17
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/snapshot.spec.js +5 -5
- package/dist/test/snapshot.spec.js.map +1 -1
- package/dist/test/snapshot.utils.d.ts.map +1 -1
- package/dist/test/snapshot.utils.js +6 -6
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/snapshotlegacy.spec.js +18 -13
- package/dist/test/snapshotlegacy.spec.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js +22 -18
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +6 -5
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +30 -32
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +39 -38
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testSerializer.d.ts +5 -5
- package/dist/test/testSerializer.d.ts.map +1 -1
- package/dist/test/testSerializer.js +0 -1
- package/dist/test/testSerializer.js.map +1 -1
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +1 -1
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +15 -17
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.d.ts.map +1 -1
- package/dist/test/text.js +1 -1
- package/dist/test/text.js.map +1 -1
- package/dist/test/tracking.spec.js +50 -46
- package/dist/test/tracking.spec.js.map +1 -1
- package/dist/test/wordUnitTests.spec.d.ts.map +1 -1
- package/dist/test/wordUnitTests.spec.js +10 -10
- package/dist/test/wordUnitTests.spec.js.map +1 -1
- package/dist/textSegment.d.ts +1 -1
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js +3 -3
- package/dist/textSegment.js.map +1 -1
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js +7 -2
- package/dist/zamboni.js.map +1 -1
- package/internal.d.ts +1 -1
- package/legacy.d.ts +1 -1
- package/lib/MergeTreeTextHelper.d.ts.map +1 -1
- package/lib/MergeTreeTextHelper.js +1 -1
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/attributionCollection.d.ts.map +1 -1
- package/lib/attributionCollection.js +65 -17
- package/lib/attributionCollection.js.map +1 -1
- package/lib/attributionPolicy.d.ts +2 -1
- package/lib/attributionPolicy.d.ts.map +1 -1
- package/lib/attributionPolicy.js +10 -3
- package/lib/attributionPolicy.js.map +1 -1
- package/lib/client.d.ts +3 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +65 -37
- package/lib/client.js.map +1 -1
- package/lib/collections/list.d.ts.map +1 -1
- package/lib/collections/list.js +5 -2
- package/lib/collections/list.js.map +1 -1
- package/lib/collections/rbTree.d.ts +2 -2
- package/lib/collections/rbTree.d.ts.map +1 -1
- package/lib/collections/rbTree.js +23 -35
- package/lib/collections/rbTree.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js +4 -1
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/legacy.d.ts +1 -1
- package/lib/localReference.d.ts +16 -6
- package/lib/localReference.d.ts.map +1 -1
- package/lib/localReference.js +31 -20
- package/lib/localReference.js.map +1 -1
- package/lib/mergeTree.d.ts +0 -1
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +127 -112
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeNodeWalk.d.ts.map +1 -1
- package/lib/mergeTreeNodeWalk.js +1 -1
- package/lib/mergeTreeNodeWalk.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +6 -5
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +29 -20
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/mergeTreeTracking.js +3 -3
- package/lib/mergeTreeTracking.js.map +1 -1
- package/lib/opBuilder.d.ts +6 -1
- package/lib/opBuilder.d.ts.map +1 -1
- package/lib/opBuilder.js +5 -0
- package/lib/opBuilder.js.map +1 -1
- package/lib/ops.d.ts.map +1 -1
- package/lib/ops.js.map +1 -1
- package/lib/ordinal.d.ts.map +1 -1
- package/lib/ordinal.js +7 -0
- package/lib/ordinal.js.map +1 -1
- package/lib/partialLengths.d.ts +4 -2
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +101 -53
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.d.ts +4 -1
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +7 -6
- package/lib/perspective.js.map +1 -1
- package/lib/properties.d.ts +13 -10
- package/lib/properties.d.ts.map +1 -1
- package/lib/properties.js +22 -11
- package/lib/properties.js.map +1 -1
- package/lib/public.d.ts +1 -1
- package/lib/referencePositions.d.ts +7 -0
- package/lib/referencePositions.d.ts.map +1 -1
- package/lib/referencePositions.js +7 -0
- package/lib/referencePositions.js.map +1 -1
- package/lib/revertibles.d.ts +6 -0
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +50 -21
- package/lib/revertibles.js.map +1 -1
- package/lib/segmentGroupCollection.d.ts.map +1 -1
- package/lib/segmentGroupCollection.js +2 -0
- package/lib/segmentGroupCollection.js.map +1 -1
- package/lib/segmentPropertiesManager.d.ts +7 -3
- package/lib/segmentPropertiesManager.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +20 -15
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotChunks.d.ts.map +1 -1
- package/lib/snapshotChunks.js +10 -5
- package/lib/snapshotChunks.js.map +1 -1
- package/lib/snapshotLoader.d.ts.map +1 -1
- package/lib/snapshotLoader.js +14 -10
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js +20 -8
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js +4 -2
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/sortedSegmentSet.d.ts.map +1 -1
- package/lib/sortedSegmentSet.js +8 -1
- package/lib/sortedSegmentSet.js.map +1 -1
- package/lib/sortedSet.d.ts.map +1 -1
- package/lib/sortedSet.js +4 -0
- package/lib/sortedSet.js.map +1 -1
- package/lib/test/Insertion.perf.spec.js.map +1 -1
- package/lib/test/Removal.perf.spec.js.map +1 -1
- package/lib/test/Snapshot.perf.spec.js +1 -0
- package/lib/test/Snapshot.perf.spec.js.map +1 -1
- package/lib/test/attributionCollection.perf.spec.js +3 -1
- package/lib/test/attributionCollection.perf.spec.js.map +1 -1
- package/lib/test/attributionCollection.spec.js +3 -2
- package/lib/test/attributionCollection.spec.js.map +1 -1
- package/lib/test/attributionPolicy.spec.js +3 -1
- package/lib/test/attributionPolicy.spec.js.map +1 -1
- package/lib/test/beastTest.spec.d.ts +1 -4
- package/lib/test/beastTest.spec.d.ts.map +1 -1
- package/lib/test/beastTest.spec.js +26 -24
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.annotateMarker.spec.js +1 -1
- package/lib/test/client.annotateMarker.spec.js.map +1 -1
- package/lib/test/client.apis.spec.d.ts.map +1 -1
- package/lib/test/client.apis.spec.js +4 -6
- package/lib/test/client.apis.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +72 -50
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.applyStashedOpFarm.spec.js +18 -10
- package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -1
- package/lib/test/client.attributionFarm.spec.js +12 -7
- package/lib/test/client.attributionFarm.spec.js.map +1 -1
- package/lib/test/client.conflictFarm.spec.js +4 -2
- package/lib/test/client.conflictFarm.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js +1 -1
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +14 -7
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.localReferenceFarm.spec.js +13 -9
- package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
- package/lib/test/client.rebasePosition.spec.js +1 -1
- package/lib/test/client.rebasePosition.spec.js.map +1 -1
- package/lib/test/client.reconnectFarm.spec.js +11 -8
- package/lib/test/client.reconnectFarm.spec.js.map +1 -1
- package/lib/test/client.replay.spec.js +8 -7
- package/lib/test/client.replay.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +14 -11
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/client.rollbackFarm.spec.js +3 -1
- package/lib/test/client.rollbackFarm.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +29 -19
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/client.walkSegments.spec.js +1 -1
- package/lib/test/client.walkSegments.spec.js.map +1 -1
- package/lib/test/collections.list.spec.js +1 -1
- package/lib/test/collections.list.spec.js.map +1 -1
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js +1 -1
- package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
- package/lib/test/dirname.cjs +1 -0
- package/lib/test/dirname.cjs.map +1 -1
- package/lib/test/dirname.d.cts.map +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.annotate.spec.js +1 -1
- package/lib/test/mergeTree.annotate.spec.js.map +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.insertingWalk.spec.js +8 -8
- package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/mergeTree.walk.spec.js +1 -1
- package/lib/test/mergeTree.walk.spec.js.map +1 -1
- package/lib/test/mergeTree.zamboni.spec.js +1 -1
- package/lib/test/mergeTree.zamboni.spec.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js +27 -15
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.spec.js +5 -1
- package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +4 -4
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.deltaCallback.spec.js +2 -3
- package/lib/test/obliterate.deltaCallback.spec.js.map +1 -1
- package/lib/test/obliterate.partialLength.spec.js +1 -1
- package/lib/test/obliterate.partialLength.spec.js.map +1 -1
- package/lib/test/obliterate.reconnect.spec.js +1 -1
- package/lib/test/obliterate.reconnect.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +1 -1
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/ordinal.spec.js +7 -1
- package/lib/test/ordinal.spec.js.map +1 -1
- package/lib/test/partialLength.spec.js.map +1 -1
- package/lib/test/properties.spec.js +1 -1
- package/lib/test/properties.spec.js.map +1 -1
- package/lib/test/reconnectHelper.d.ts +4 -4
- package/lib/test/reconnectHelper.d.ts.map +1 -1
- package/lib/test/reconnectHelper.js +22 -14
- package/lib/test/reconnectHelper.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +8 -2
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/revertibleFarm.spec.js +8 -7
- package/lib/test/revertibleFarm.spec.js.map +1 -1
- package/lib/test/revertibles.spec.d.ts.map +1 -1
- package/lib/test/revertibles.spec.js +93 -54
- package/lib/test/revertibles.spec.js.map +1 -1
- package/lib/test/segmentGroupCollection.spec.js +1 -1
- package/lib/test/segmentGroupCollection.spec.js.map +1 -1
- package/lib/test/snapshot.spec.js +1 -1
- package/lib/test/snapshot.spec.js.map +1 -1
- package/lib/test/snapshot.utils.d.ts.map +1 -1
- package/lib/test/snapshot.utils.js +1 -1
- package/lib/test/snapshot.utils.js.map +1 -1
- package/lib/test/snapshotlegacy.spec.js +10 -5
- package/lib/test/snapshotlegacy.spec.js.map +1 -1
- package/lib/test/sortedSegmentSet.spec.js +6 -2
- package/lib/test/sortedSegmentSet.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +6 -5
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +25 -27
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +37 -36
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testSerializer.d.ts +5 -5
- package/lib/test/testSerializer.d.ts.map +1 -1
- package/lib/test/testSerializer.js +0 -1
- package/lib/test/testSerializer.js.map +1 -1
- package/lib/test/testServer.d.ts.map +1 -1
- package/lib/test/testServer.js.map +1 -1
- package/lib/test/testUtils.d.ts +1 -1
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js +6 -8
- package/lib/test/testUtils.js.map +1 -1
- package/lib/test/text.d.ts.map +1 -1
- package/lib/test/text.js +1 -1
- package/lib/test/text.js.map +1 -1
- package/lib/test/tracking.spec.js +9 -5
- package/lib/test/tracking.spec.js.map +1 -1
- package/lib/test/wordUnitTests.spec.d.ts.map +1 -1
- package/lib/test/wordUnitTests.spec.js +9 -9
- package/lib/test/wordUnitTests.spec.js.map +1 -1
- package/lib/textSegment.d.ts +1 -1
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js +3 -3
- package/lib/textSegment.js.map +1 -1
- package/lib/zamboni.d.ts.map +1 -1
- package/lib/zamboni.js +7 -2
- package/lib/zamboni.js.map +1 -1
- package/package.json +29 -27
- package/src/MergeTreeTextHelper.ts +2 -2
- package/src/attributionCollection.ts +71 -28
- package/src/attributionPolicy.ts +14 -9
- package/src/client.ts +120 -71
- package/src/collections/list.ts +9 -6
- package/src/collections/rbTree.ts +62 -71
- package/src/endOfTreeSegment.ts +21 -10
- package/src/localReference.ts +61 -43
- package/src/mergeTree.ts +229 -178
- package/src/mergeTreeNodeWalk.ts +2 -1
- package/src/mergeTreeNodes.ts +59 -46
- package/src/mergeTreeTracking.ts +3 -3
- package/src/opBuilder.ts +6 -1
- package/src/ops.ts +5 -0
- package/src/ordinal.ts +8 -1
- package/src/partialLengths.ts +143 -87
- package/src/perspective.ts +10 -7
- package/src/properties.ts +36 -18
- package/src/referencePositions.ts +7 -0
- package/src/revertibles.ts +71 -41
- package/src/segmentGroupCollection.ts +8 -6
- package/src/segmentPropertiesManager.ts +28 -24
- package/src/snapshotChunks.ts +12 -7
- package/src/snapshotLoader.ts +20 -17
- package/src/snapshotV1.ts +36 -18
- package/src/snapshotlegacy.ts +7 -5
- package/src/sortedSegmentSet.ts +9 -3
- package/src/sortedSet.ts +7 -3
- package/src/textSegment.ts +9 -9
- package/src/zamboni.ts +14 -10
- package/tsconfig.json +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testClientLogger.js","sourceRoot":"","sources":["../../src/test/testClientLogger.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\";\n\nimport { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\nimport { LoggingError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { UnassignedSequenceNumber } from \"../constants.js\";\nimport { IMergeTreeOptions } from \"../index.js\";\nimport { IMergeTreeDeltaOpArgs, MergeTreeMaintenanceType } from \"../mergeTreeDeltaCallback.js\";\nimport { depthFirstNodeWalk } from \"../mergeTreeNodeWalk.js\";\nimport { Marker, seqLTE, toRemovalInfo } from \"../mergeTreeNodes.js\";\nimport { IMergeTreeOp } from \"../ops.js\";\nimport { PropertySet, matchProperties } from \"../properties.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\n\nfunction getOpString(msg: ISequencedDocumentMessage | undefined) {\n\tif (msg === undefined) {\n\t\treturn \"\";\n\t}\n\tconst op = msg.contents as IMergeTreeOp;\n\tconst opType = op.type.toString();\n\tconst opPos =\n\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\top?.[\"pos1\"] !== undefined\n\t\t\t? // eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t`@${op[\"pos1\"]}${op[\"pos2\"] !== undefined ? `,${op[\"pos2\"]}` : \"\"}`\n\t\t\t: \"\";\n\n\tconst seq =\n\t\tmsg.sequenceNumber < 0 ? \"L\" : (msg.sequenceNumber - msg.minimumSequenceNumber).toString();\n\tconst ref = (msg.referenceSequenceNumber - msg.minimumSequenceNumber).toString();\n\tconst client = msg.clientId;\n\treturn `${seq}:${ref}:${client}${opType}${opPos}`;\n}\n\nfunction arePropsEmpty(props: PropertySet | undefined) {\n\treturn props === undefined || Object.entries(props).length === 0;\n}\n\n/**\n * Compare properties, allowing empty to match undefined\n */\nfunction matchPropertiesHandleEmpty(a: PropertySet | undefined, b: PropertySet | undefined) {\n\treturn matchProperties(a, b) || (arePropsEmpty(a) && arePropsEmpty(b));\n}\n\ntype ClientMap<TClientName extends string> = Partial<Record<TClientName, TestClient>>;\n\nexport function createClientsAtInitialState<\n\tTClients extends ClientMap<TClientName>,\n\tTClientName extends string = string & keyof TClients,\n>(\n\topts: {\n\t\tinitialState: string;\n\t\toptions?: IMergeTreeOptions & PropertySet;\n\t},\n\t...clientIds: TClientName[]\n): Record<keyof TClients, TestClient> & { all: TestClient[] } {\n\tconst setup = (c: TestClient) => {\n\t\tif (opts.initialState.length > 0) {\n\t\t\tc.insertTextLocal(0, opts.initialState);\n\t\t\twhile (c.getText().includes(\"-\")) {\n\t\t\t\tconst index = c.getText().indexOf(\"-\");\n\t\t\t\tc.removeRangeLocal(index, index + 1);\n\t\t\t}\n\t\t}\n\t};\n\tconst all: TestClient[] = [];\n\tconst clients: Partial<Record<keyof TClients, TestClient>> = {};\n\tfor (const id of clientIds) {\n\t\tif (clients[id] === undefined) {\n\t\t\tconst client = new TestClient(opts.options);\n\t\t\tclients[id] = client;\n\t\t\tall.push(client);\n\t\t\tsetup(client);\n\t\t\tclient.startOrUpdateCollaboration(id);\n\t\t}\n\t}\n\n\treturn { ...(clients as Record<keyof TClients, TestClient>), all };\n}\nexport class TestClientLogger {\n\tpublic static toString(clients: readonly TestClient[]) {\n\t\treturn clients\n\t\t\t.map((c) => this.getSegString(c))\n\t\t\t.reduce<[string, string]>(\n\t\t\t\t(pv, cv) => {\n\t\t\t\t\tpv[0] += `|${cv.acked.padEnd(cv.local.length, \"\")}`;\n\t\t\t\t\tpv[1] += `|${cv.local.padEnd(cv.acked.length, \"\")}`;\n\t\t\t\t\treturn pv;\n\t\t\t\t},\n\t\t\t\t[\"\", \"\"],\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\t}\n\n\tprivate readonly incrementalLog = false;\n\n\tprivate readonly paddings: number[] = [];\n\tprivate readonly roundLogLines: string[][] = [];\n\n\tprivate ackedLine: string[] = [];\n\tprivate localLine: string[] = [];\n\t// initialize to private instance, so first real edit will create a new line\n\tprivate lastDeltaArgs: IMergeTreeDeltaOpArgs | undefined;\n\n\tprivate readonly disposeCallbacks: (() => void)[] = [];\n\n\t/**\n\t * Unsubscribes this logger from its clients' events. Consider using this for tests with client lifetime\n\t * extending significantly past the logger's.\n\t */\n\tpublic dispose(): void {\n\t\tfor (const cb of this.disposeCallbacks) {\n\t\t\tcb();\n\t\t}\n\t\tthis.disposeCallbacks.length = 0;\n\t}\n\n\tconstructor(\n\t\tprivate readonly clients: readonly TestClient[],\n\t\tprivate readonly title?: string,\n\t) {\n\t\tconst logHeaders: string[] = [];\n\t\tclients.forEach((c, i) => {\n\t\t\tlogHeaders.push(\"op\");\n\t\t\tlogHeaders.push(`client ${c.longClientId}`);\n\t\t\tconst callback = (deltaArgs: IMergeTreeDeltaOpArgs | undefined) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.lastDeltaArgs?.sequencedMessage !== deltaArgs?.sequencedMessage ||\n\t\t\t\t\tthis.lastDeltaArgs?.op !== deltaArgs?.op\n\t\t\t\t) {\n\t\t\t\t\tthis.addNewLogLine();\n\t\t\t\t\tthis.lastDeltaArgs = deltaArgs;\n\t\t\t\t}\n\t\t\t\tconst clientLogIndex = i * 2;\n\n\t\t\t\tthis.ackedLine[clientLogIndex] =\n\t\t\t\t\tdeltaArgs === undefined\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: getOpString(\n\t\t\t\t\t\t\t\tdeltaArgs.sequencedMessage !== undefined\n\t\t\t\t\t\t\t\t\t? { ...deltaArgs.sequencedMessage, contents: deltaArgs.op }\n\t\t\t\t\t\t\t\t\t: c.makeOpMessage(deltaArgs.op),\n\t\t\t\t\t\t\t);\n\t\t\t\tconst segStrings = TestClientLogger.getSegString(c);\n\t\t\t\tthis.ackedLine[clientLogIndex + 1] = segStrings.acked;\n\t\t\t\tthis.localLine[clientLogIndex + 1] = segStrings.local;\n\n\t\t\t\tthis.paddings[clientLogIndex] = Math.max(\n\t\t\t\t\tthis.ackedLine[clientLogIndex].length,\n\t\t\t\t\tthis.localLine[clientLogIndex].length,\n\t\t\t\t\tthis.paddings[clientLogIndex],\n\t\t\t\t);\n\n\t\t\t\tthis.paddings[clientLogIndex + 1] = Math.max(\n\t\t\t\t\tthis.ackedLine[clientLogIndex + 1].length,\n\t\t\t\t\tthis.localLine[clientLogIndex + 1].length,\n\t\t\t\t\tthis.paddings[clientLogIndex + 1],\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst maintenanceCallback = (main, op) => {\n\t\t\t\tif (main.operation === MergeTreeMaintenanceType.ACKNOWLEDGED) {\n\t\t\t\t\tcallback(op);\n\t\t\t\t}\n\t\t\t};\n\t\t\tc.on(\"delta\", callback);\n\t\t\tc.on(\"maintenance\", maintenanceCallback);\n\t\t\tthis.disposeCallbacks.push(() => {\n\t\t\t\tc.off(\"delta\", callback);\n\t\t\t\tc.off(\"maintenance\", maintenanceCallback);\n\t\t\t});\n\t\t});\n\t\tthis.roundLogLines.push(logHeaders);\n\t\tthis.roundLogLines[0].forEach((v) => this.paddings.push(v.length));\n\t\tthis.addNewLogLine(); // capture initial state\n\t}\n\n\tprivate addNewLogLine() {\n\t\tif (this.incrementalLog) {\n\t\t\twhile (this.roundLogLines.length > 0) {\n\t\t\t\tconst logLine = this.roundLogLines.shift();\n\t\t\t\tif (logLine?.some((c) => c.trim().length > 0)) {\n\t\t\t\t\tconsole.log(logLine.map((v, i) => v.padEnd(this.paddings[i])).join(\" | \"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.ackedLine = [];\n\t\tthis.localLine = [];\n\t\tthis.clients.forEach((cc, clientLogIndex) => {\n\t\t\tconst segStrings = TestClientLogger.getSegString(cc);\n\t\t\tthis.ackedLine.push(\"\", segStrings.acked);\n\t\t\tthis.localLine.push(\"\", segStrings.local);\n\n\t\t\tthis.paddings[clientLogIndex] = Math.max(\n\t\t\t\tthis.ackedLine[clientLogIndex].length,\n\t\t\t\tthis.localLine[clientLogIndex].length,\n\t\t\t\tthis.paddings[clientLogIndex],\n\t\t\t);\n\n\t\t\tthis.paddings[clientLogIndex + 1] = Math.max(\n\t\t\t\tthis.ackedLine[clientLogIndex + 1].length,\n\t\t\t\tthis.localLine[clientLogIndex + 1].length,\n\t\t\t\tthis.paddings[clientLogIndex + 1],\n\t\t\t);\n\t\t});\n\t\tthis.roundLogLines.push(this.ackedLine);\n\t\tthis.roundLogLines.push(this.localLine);\n\t}\n\n\tpublic validate(opts?: { clear?: boolean; baseText?: string; errorPrefix?: string }) {\n\t\tconst baseText = opts?.baseText ?? this.clients[0].getText();\n\t\tconst errorPrefix = opts?.errorPrefix ? `${opts?.errorPrefix}: ` : \"\";\n\t\t// cache all the properties of client 0 for faster look up\n\t\tconst properties = Array.from({ length: this.clients[0].getLength() }).map((_, i) =>\n\t\t\tthis.clients[0].getPropertiesAtPosition(i),\n\t\t);\n\t\tthis.clients.forEach((c) => {\n\t\t\tif (opts?.baseText === undefined && c === this.clients[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// ensure all clients have seen the same ops\n\t\t\tassert.equal(\n\t\t\t\tc.getCurrentSeq(),\n\t\t\t\tthis.clients[0].getCurrentSeq(),\n\t\t\t\t`${errorPrefix}${c.longClientId} current seq does not match client ${this.clients[0].longClientId}`,\n\t\t\t);\n\t\t\t// Pre-check to avoid this.toString() in the string template\n\t\t\tif (c.getText() !== baseText) {\n\t\t\t\tassert.equal(\n\t\t\t\t\tc.getText(),\n\t\t\t\t\tbaseText,\n\t\t\t\t\t`${errorPrefix}\\n${this.toString()}\\nClient ${\n\t\t\t\t\t\tc.longClientId\n\t\t\t\t\t} does not match client ${\n\t\t\t\t\t\topts?.baseText ? \"baseText\" : this.clients[0].longClientId\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (c === this.clients[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet pos = 0;\n\t\t\tdepthFirstNodeWalk(c.mergeTree.root, c.mergeTree.root.children[0], undefined, (seg) => {\n\t\t\t\tif (toRemovalInfo(seg) === undefined) {\n\t\t\t\t\tconst segProps = seg.properties;\n\t\t\t\t\tfor (let i = 0; i < seg.cachedLength; i++) {\n\t\t\t\t\t\tif (!matchPropertiesHandleEmpty(segProps, properties[pos + i])) {\n\t\t\t\t\t\t\tassert.deepStrictEqual(\n\t\t\t\t\t\t\t\tsegProps,\n\t\t\t\t\t\t\t\tproperties[pos + i],\n\t\t\t\t\t\t\t\t`${errorPrefix}\\n${this.toString()}\\nClient ${\n\t\t\t\t\t\t\t\t\tc.longClientId\n\t\t\t\t\t\t\t\t} does not match client ${this.clients[0].longClientId} properties at pos ${\n\t\t\t\t\t\t\t\t\tpos + i\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}\n\t\t\t\t\tpos += seg.cachedLength;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tif (opts?.clear === true) {\n\t\t\tthis.roundLogLines.splice(1, this.roundLogLines.length);\n\t\t\tthis.roundLogLines[0].forEach((v, i) => (this.paddings[i] = v.length));\n\t\t\tthis.addNewLogLine(); // capture initial state\n\t\t}\n\t\treturn baseText;\n\t}\n\n\tstatic validate(clients: readonly TestClient[], title?: string) {\n\t\tconst logger = new TestClientLogger(clients, title);\n\t\tconst result = logger.validate();\n\t\tlogger.dispose();\n\t\treturn result;\n\t}\n\n\tpublic toString(excludeHeader: boolean = false) {\n\t\tlet str = \"\";\n\t\tif (!excludeHeader) {\n\t\t\tstr +=\n\t\t\t\t`_: Local State\\n` +\n\t\t\t\t`-: Deleted ~:Deleted <= MinSeq\\n` +\n\t\t\t\t`*: Unacked Insert and Delete\\n` +\n\t\t\t\t`${this.clients[0].getCollabWindow().minSeq}: msn/offset\\n` +\n\t\t\t\t`Op format <seq>:<ref>:<client><type>@<pos1>,<pos2>\\n` +\n\t\t\t\t`sequence number represented as offset from msn. L means local.\\n` +\n\t\t\t\t`op types: 0) insert 1) remove 2) annotate\\n`;\n\n\t\t\tif (this.title) {\n\t\t\t\tstr += `${this.title}\\n`;\n\t\t\t}\n\t\t}\n\t\tstr += this.roundLogLines\n\t\t\t.filter((line) => line.some((c) => c.trim().length > 0))\n\t\t\t.map((line) => line.map((v, i) => v.padEnd(this.paddings[i])).join(\" | \"))\n\t\t\t.join(\"\\n\");\n\t\treturn str;\n\t}\n\n\tpublic addLogsToError(e: unknown): Error {\n\t\tif (e instanceof Error) {\n\t\t\te.message += `\\n${this.toString()}`;\n\t\t\treturn e;\n\t\t}\n\n\t\treturn new LoggingError(`${e}\\n${this.toString()}`);\n\t}\n\n\tprivate static getSegString(client: TestClient): { acked: string; local: string } {\n\t\tlet acked: string = \"\";\n\t\tlet local: string = \"\";\n\t\tconst nodes = [...client.mergeTree.root.children];\n\t\tlet parent = nodes[0]?.parent;\n\t\twhile (nodes.length > 0) {\n\t\t\tconst node = nodes.shift();\n\t\t\tif (node) {\n\t\t\t\tif (node.isLeaf()) {\n\t\t\t\t\tif (node.parent !== parent) {\n\t\t\t\t\t\tif (acked.length > 0) {\n\t\t\t\t\t\t\tacked += \" \";\n\t\t\t\t\t\t\tlocal += \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparent = node.parent;\n\t\t\t\t\t}\n\t\t\t\t\tconst text = TextSegment.is(node) ? node.text : Marker.is(node) ? \"¶\" : undefined;\n\t\t\t\t\tif (text !== undefined) {\n\t\t\t\t\t\tconst removedNode = toRemovalInfo(node);\n\t\t\t\t\t\tif (removedNode !== undefined) {\n\t\t\t\t\t\t\tif (removedNode.removedSeq === UnassignedSequenceNumber) {\n\t\t\t\t\t\t\t\tacked += \"_\".repeat(text.length);\n\t\t\t\t\t\t\t\tlocal +=\n\t\t\t\t\t\t\t\t\tnode.seq === UnassignedSequenceNumber\n\t\t\t\t\t\t\t\t\t\t? \"*\".repeat(text.length)\n\t\t\t\t\t\t\t\t\t\t: \"-\".repeat(text.length);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst removedSymbol = seqLTE(\n\t\t\t\t\t\t\t\t\tremovedNode.removedSeq,\n\t\t\t\t\t\t\t\t\tclient.getCollabWindow().minSeq,\n\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\t: \"-\";\n\t\t\t\t\t\t\t\tacked += removedSymbol.repeat(text.length);\n\t\t\t\t\t\t\t\tlocal += \" \".repeat(text.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (node.seq === UnassignedSequenceNumber) {\n\t\t\t\t\t\t\t\tacked += \"_\".repeat(text.length);\n\t\t\t\t\t\t\t\tlocal += text;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tacked += text;\n\t\t\t\t\t\t\t\tlocal += \" \".repeat(text.length);\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} else {\n\t\t\t\t\tnodes.push(...node.children);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { acked, local };\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"testClientLogger.js","sourceRoot":"","sources":["../../src/test/testClientLogger.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 \"node:assert\";\n\nimport { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\nimport { LoggingError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { UnassignedSequenceNumber } from \"../constants.js\";\nimport { IMergeTreeOptions } from \"../index.js\";\nimport {\n\tIMergeTreeDeltaOpArgs,\n\tMergeTreeMaintenanceType,\n\ttype IMergeTreeMaintenanceCallbackArgs,\n} from \"../mergeTreeDeltaCallback.js\";\nimport { depthFirstNodeWalk } from \"../mergeTreeNodeWalk.js\";\nimport { Marker, seqLTE, toRemovalInfo } from \"../mergeTreeNodes.js\";\nimport { IMergeTreeOp } from \"../ops.js\";\nimport { PropertySet, matchProperties } from \"../properties.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\n\nfunction getOpString(msg: ISequencedDocumentMessage | undefined): string {\n\tif (msg === undefined) {\n\t\treturn \"\";\n\t}\n\tconst op = msg.contents as IMergeTreeOp;\n\tconst opType = op.type.toString();\n\tconst opPos =\n\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\top?.[\"pos1\"] === undefined\n\t\t\t? \"\"\n\t\t\t: // eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t`@${op[\"pos1\"]}${op[\"pos2\"] === undefined ? \"\" : `,${op[\"pos2\"]}`}`;\n\n\tconst seq =\n\t\tmsg.sequenceNumber < 0 ? \"L\" : (msg.sequenceNumber - msg.minimumSequenceNumber).toString();\n\tconst ref = (msg.referenceSequenceNumber - msg.minimumSequenceNumber).toString();\n\tconst client = msg.clientId;\n\treturn `${seq}:${ref}:${client}${opType}${opPos}`;\n}\n\nfunction arePropsEmpty(props: PropertySet | undefined): boolean {\n\treturn props === undefined || Object.entries(props).length === 0;\n}\n\n/**\n * Compare properties, allowing empty to match undefined\n */\nfunction matchPropertiesHandleEmpty(\n\ta: PropertySet | undefined,\n\tb: PropertySet | undefined,\n): boolean {\n\treturn matchProperties(a, b) || (arePropsEmpty(a) && arePropsEmpty(b));\n}\n\ntype ClientMap<TClientName extends string> = Partial<Record<TClientName, TestClient>>;\n\nexport function createClientsAtInitialState<\n\tTClients extends ClientMap<TClientName>,\n\tTClientName extends string = string & keyof TClients,\n>(\n\topts: {\n\t\tinitialState: string;\n\t\toptions?: IMergeTreeOptions & PropertySet;\n\t},\n\t...clientIds: TClientName[]\n): Record<keyof TClients, TestClient> & { all: TestClient[] } {\n\tconst setup = (c: TestClient): void => {\n\t\tif (opts.initialState.length > 0) {\n\t\t\tc.insertTextLocal(0, opts.initialState);\n\t\t\twhile (c.getText().includes(\"-\")) {\n\t\t\t\tconst index = c.getText().indexOf(\"-\");\n\t\t\t\tc.removeRangeLocal(index, index + 1);\n\t\t\t}\n\t\t}\n\t};\n\tconst all: TestClient[] = [];\n\tconst clients: Partial<Record<keyof TClients, TestClient>> = {};\n\tfor (const id of clientIds) {\n\t\tif (clients[id] === undefined) {\n\t\t\tconst client = new TestClient(opts.options);\n\t\t\tclients[id] = client;\n\t\t\tall.push(client);\n\t\t\tsetup(client);\n\t\t\tclient.startOrUpdateCollaboration(id);\n\t\t}\n\t}\n\n\treturn { ...(clients as Record<keyof TClients, TestClient>), all };\n}\nexport class TestClientLogger {\n\tpublic static toString(clients: readonly TestClient[]): string {\n\t\treturn (\n\t\t\tclients\n\t\t\t\t.map((c) => this.getSegString(c))\n\t\t\t\t// eslint-disable-next-line unicorn/no-array-reduce\n\t\t\t\t.reduce<[string, string]>(\n\t\t\t\t\t(pv, cv) => {\n\t\t\t\t\t\tpv[0] += `|${cv.acked.padEnd(cv.local.length, \"\")}`;\n\t\t\t\t\t\tpv[1] += `|${cv.local.padEnd(cv.acked.length, \"\")}`;\n\t\t\t\t\t\treturn pv;\n\t\t\t\t\t},\n\t\t\t\t\t[\"\", \"\"],\n\t\t\t\t)\n\t\t\t\t.join(\"\\n\")\n\t\t);\n\t}\n\n\tprivate readonly incrementalLog = false;\n\n\tprivate readonly paddings: number[] = [];\n\tprivate readonly roundLogLines: string[][] = [];\n\n\tprivate ackedLine: string[] = [];\n\tprivate localLine: string[] = [];\n\t// initialize to private instance, so first real edit will create a new line\n\tprivate lastDeltaArgs: IMergeTreeDeltaOpArgs | undefined;\n\n\tprivate readonly disposeCallbacks: (() => void)[] = [];\n\n\t/**\n\t * Unsubscribes this logger from its clients' events. Consider using this for tests with client lifetime\n\t * extending significantly past the logger's.\n\t */\n\tpublic dispose(): void {\n\t\tfor (const cb of this.disposeCallbacks) {\n\t\t\tcb();\n\t\t}\n\t\tthis.disposeCallbacks.length = 0;\n\t}\n\n\tconstructor(\n\t\tprivate readonly clients: readonly TestClient[],\n\t\tprivate readonly title?: string,\n\t) {\n\t\tconst logHeaders: string[] = [];\n\t\tfor (const [i, c] of clients.entries()) {\n\t\t\tlogHeaders.push(\"op\", `client ${c.longClientId}`);\n\t\t\tconst callback = (deltaArgs: IMergeTreeDeltaOpArgs | undefined): void => {\n\t\t\t\tif (\n\t\t\t\t\tthis.lastDeltaArgs?.sequencedMessage !== deltaArgs?.sequencedMessage ||\n\t\t\t\t\tthis.lastDeltaArgs?.op !== deltaArgs?.op\n\t\t\t\t) {\n\t\t\t\t\tthis.addNewLogLine();\n\t\t\t\t\tthis.lastDeltaArgs = deltaArgs;\n\t\t\t\t}\n\t\t\t\tconst clientLogIndex = i * 2;\n\n\t\t\t\tthis.ackedLine[clientLogIndex] =\n\t\t\t\t\tdeltaArgs === undefined\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: getOpString(\n\t\t\t\t\t\t\t\tdeltaArgs.sequencedMessage === undefined\n\t\t\t\t\t\t\t\t\t? c.makeOpMessage(deltaArgs.op)\n\t\t\t\t\t\t\t\t\t: { ...deltaArgs.sequencedMessage, contents: deltaArgs.op },\n\t\t\t\t\t\t\t);\n\t\t\t\tconst segStrings = TestClientLogger.getSegString(c);\n\t\t\t\tthis.ackedLine[clientLogIndex + 1] = segStrings.acked;\n\t\t\t\tthis.localLine[clientLogIndex + 1] = segStrings.local;\n\n\t\t\t\tthis.paddings[clientLogIndex] = Math.max(\n\t\t\t\t\tthis.ackedLine[clientLogIndex].length,\n\t\t\t\t\tthis.localLine[clientLogIndex].length,\n\t\t\t\t\tthis.paddings[clientLogIndex],\n\t\t\t\t);\n\n\t\t\t\tthis.paddings[clientLogIndex + 1] = Math.max(\n\t\t\t\t\tthis.ackedLine[clientLogIndex + 1].length,\n\t\t\t\t\tthis.localLine[clientLogIndex + 1].length,\n\t\t\t\t\tthis.paddings[clientLogIndex + 1],\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst maintenanceCallback = (\n\t\t\t\tmain: IMergeTreeMaintenanceCallbackArgs,\n\t\t\t\top: IMergeTreeDeltaOpArgs | undefined,\n\t\t\t): void => {\n\t\t\t\tif (main.operation === MergeTreeMaintenanceType.ACKNOWLEDGED) {\n\t\t\t\t\tcallback(op);\n\t\t\t\t}\n\t\t\t};\n\t\t\tc.on(\"delta\", callback);\n\t\t\tc.on(\"maintenance\", maintenanceCallback);\n\t\t\tthis.disposeCallbacks.push(() => {\n\t\t\t\tc.off(\"delta\", callback);\n\t\t\t\tc.off(\"maintenance\", maintenanceCallback);\n\t\t\t});\n\t\t}\n\t\tthis.roundLogLines.push(logHeaders);\n\t\tfor (const v of this.roundLogLines[0]) this.paddings.push(v.length);\n\t\tthis.addNewLogLine(); // capture initial state\n\t}\n\n\tprivate addNewLogLine(): void {\n\t\tif (this.incrementalLog) {\n\t\t\twhile (this.roundLogLines.length > 0) {\n\t\t\t\tconst logLine = this.roundLogLines.shift();\n\t\t\t\tif (logLine?.some((c) => c.trim().length > 0)) {\n\t\t\t\t\tconsole.log(logLine.map((v, i) => v.padEnd(this.paddings[i])).join(\" | \"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.ackedLine = [];\n\t\tthis.localLine = [];\n\t\tfor (const [clientLogIndex, cc] of this.clients.entries()) {\n\t\t\tconst segStrings = TestClientLogger.getSegString(cc);\n\t\t\tthis.ackedLine.push(\"\", segStrings.acked);\n\t\t\tthis.localLine.push(\"\", segStrings.local);\n\n\t\t\tthis.paddings[clientLogIndex] = Math.max(\n\t\t\t\tthis.ackedLine[clientLogIndex].length,\n\t\t\t\tthis.localLine[clientLogIndex].length,\n\t\t\t\tthis.paddings[clientLogIndex],\n\t\t\t);\n\n\t\t\tthis.paddings[clientLogIndex + 1] = Math.max(\n\t\t\t\tthis.ackedLine[clientLogIndex + 1].length,\n\t\t\t\tthis.localLine[clientLogIndex + 1].length,\n\t\t\t\tthis.paddings[clientLogIndex + 1],\n\t\t\t);\n\t\t}\n\t\tthis.roundLogLines.push(this.ackedLine, this.localLine);\n\t}\n\n\tpublic validate(opts?: {\n\t\tclear?: boolean;\n\t\tbaseText?: string;\n\t\terrorPrefix?: string;\n\t}): string {\n\t\tconst baseText = opts?.baseText ?? this.clients[0].getText();\n\t\tconst errorPrefix = opts?.errorPrefix ? `${opts?.errorPrefix}: ` : \"\";\n\t\t// cache all the properties of client 0 for faster look up\n\t\tconst properties = Array.from({ length: this.clients[0].getLength() }).map((_, i) =>\n\t\t\tthis.clients[0].getPropertiesAtPosition(i),\n\t\t);\n\t\tfor (const c of this.clients) {\n\t\t\tif (opts?.baseText === undefined && c === this.clients[0]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// ensure all clients have seen the same ops\n\t\t\tassert.equal(\n\t\t\t\tc.getCurrentSeq(),\n\t\t\t\tthis.clients[0].getCurrentSeq(),\n\t\t\t\t`${errorPrefix}${c.longClientId} current seq does not match client ${this.clients[0].longClientId}`,\n\t\t\t);\n\t\t\t// Pre-check to avoid this.toString() in the string template\n\t\t\tif (c.getText() !== baseText) {\n\t\t\t\tassert.equal(\n\t\t\t\t\tc.getText(),\n\t\t\t\t\tbaseText,\n\t\t\t\t\t`${errorPrefix}\\n${this.toString()}\\nClient ${\n\t\t\t\t\t\tc.longClientId\n\t\t\t\t\t} does not match client ${\n\t\t\t\t\t\topts?.baseText ? \"baseText\" : this.clients[0].longClientId\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (c === this.clients[0]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet pos = 0;\n\t\t\tdepthFirstNodeWalk(c.mergeTree.root, c.mergeTree.root.children[0], undefined, (seg) => {\n\t\t\t\tif (toRemovalInfo(seg) === undefined) {\n\t\t\t\t\tconst segProps = seg.properties;\n\t\t\t\t\tfor (let i = 0; i < seg.cachedLength; i++) {\n\t\t\t\t\t\tif (!matchPropertiesHandleEmpty(segProps, properties[pos + i])) {\n\t\t\t\t\t\t\tassert.deepStrictEqual(\n\t\t\t\t\t\t\t\tsegProps,\n\t\t\t\t\t\t\t\tproperties[pos + i],\n\t\t\t\t\t\t\t\t`${errorPrefix}\\n${this.toString()}\\nClient ${\n\t\t\t\t\t\t\t\t\tc.longClientId\n\t\t\t\t\t\t\t\t} does not match client ${this.clients[0].longClientId} properties at pos ${\n\t\t\t\t\t\t\t\t\tpos + i\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}\n\t\t\t\t\tpos += seg.cachedLength;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (opts?.clear === true) {\n\t\t\tthis.roundLogLines.splice(1, this.roundLogLines.length);\n\t\t\tfor (const [i, v] of this.roundLogLines[0].entries()) this.paddings[i] = v.length;\n\t\t\tthis.addNewLogLine(); // capture initial state\n\t\t}\n\t\treturn baseText;\n\t}\n\n\tstatic validate(clients: readonly TestClient[], title?: string): string {\n\t\tconst logger = new TestClientLogger(clients, title);\n\t\tconst result = logger.validate();\n\t\tlogger.dispose();\n\t\treturn result;\n\t}\n\n\tpublic toString(excludeHeader: boolean = false): string {\n\t\tlet str = \"\";\n\t\tif (!excludeHeader) {\n\t\t\tstr +=\n\t\t\t\t`_: Local State\\n` +\n\t\t\t\t`-: Deleted ~:Deleted <= MinSeq\\n` +\n\t\t\t\t`*: Unacked Insert and Delete\\n` +\n\t\t\t\t`${this.clients[0].getCollabWindow().minSeq}: msn/offset\\n` +\n\t\t\t\t`Op format <seq>:<ref>:<client><type>@<pos1>,<pos2>\\n` +\n\t\t\t\t`sequence number represented as offset from msn. L means local.\\n` +\n\t\t\t\t`op types: 0) insert 1) remove 2) annotate\\n`;\n\n\t\t\tif (this.title) {\n\t\t\t\tstr += `${this.title}\\n`;\n\t\t\t}\n\t\t}\n\t\tstr += this.roundLogLines\n\t\t\t.filter((line) => line.some((c) => c.trim().length > 0))\n\t\t\t.map((line) => line.map((v, i) => v.padEnd(this.paddings[i])).join(\" | \"))\n\t\t\t.join(\"\\n\");\n\t\treturn str;\n\t}\n\n\tpublic addLogsToError(e: unknown): Error {\n\t\tif (e instanceof Error) {\n\t\t\te.message += `\\n${this.toString()}`;\n\t\t\treturn e;\n\t\t}\n\n\t\treturn new LoggingError(`${e}\\n${this.toString()}`);\n\t}\n\n\tprivate static getSegString(client: TestClient): { acked: string; local: string } {\n\t\tlet acked: string = \"\";\n\t\tlet local: string = \"\";\n\t\tconst nodes = [...client.mergeTree.root.children];\n\t\tlet parent = nodes[0]?.parent;\n\t\twhile (nodes.length > 0) {\n\t\t\tconst node = nodes.shift();\n\t\t\tif (node) {\n\t\t\t\tif (node.isLeaf()) {\n\t\t\t\t\tif (node.parent !== parent) {\n\t\t\t\t\t\tif (acked.length > 0) {\n\t\t\t\t\t\t\tacked += \" \";\n\t\t\t\t\t\t\tlocal += \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparent = node.parent;\n\t\t\t\t\t}\n\t\t\t\t\tconst text = TextSegment.is(node) ? node.text : Marker.is(node) ? \"¶\" : undefined;\n\t\t\t\t\tif (text !== undefined) {\n\t\t\t\t\t\tconst removedNode = toRemovalInfo(node);\n\t\t\t\t\t\tif (removedNode === undefined) {\n\t\t\t\t\t\t\tif (node.seq === UnassignedSequenceNumber) {\n\t\t\t\t\t\t\t\tacked += \"_\".repeat(text.length);\n\t\t\t\t\t\t\t\tlocal += text;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tacked += text;\n\t\t\t\t\t\t\t\tlocal += \" \".repeat(text.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (removedNode.removedSeq === UnassignedSequenceNumber) {\n\t\t\t\t\t\t\t\tacked += \"_\".repeat(text.length);\n\t\t\t\t\t\t\t\tlocal +=\n\t\t\t\t\t\t\t\t\tnode.seq === UnassignedSequenceNumber\n\t\t\t\t\t\t\t\t\t\t? \"*\".repeat(text.length)\n\t\t\t\t\t\t\t\t\t\t: \"-\".repeat(text.length);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst removedSymbol = seqLTE(\n\t\t\t\t\t\t\t\t\tremovedNode.removedSeq,\n\t\t\t\t\t\t\t\t\tclient.getCollabWindow().minSeq,\n\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\t: \"-\";\n\t\t\t\t\t\t\t\tacked += removedSymbol.repeat(text.length);\n\t\t\t\t\t\t\t\tlocal += \" \".repeat(text.length);\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} else {\n\t\t\t\t\tnodes.push(...node.children);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { acked, local };\n\t}\n}\n"]}
|
|
@@ -9,10 +9,10 @@ import { IFluidSerializer } from "@fluidframework/shared-object-base/internal";
|
|
|
9
9
|
*/
|
|
10
10
|
export declare class TestSerializer implements IFluidSerializer {
|
|
11
11
|
constructor();
|
|
12
|
-
get IFluidSerializer():
|
|
13
|
-
encode(input:
|
|
14
|
-
decode(input:
|
|
15
|
-
stringify(value:
|
|
16
|
-
parse(value: string):
|
|
12
|
+
get IFluidSerializer(): TestSerializer;
|
|
13
|
+
encode(input: unknown, bind: IFluidHandle): unknown;
|
|
14
|
+
decode(input: unknown): unknown;
|
|
15
|
+
stringify(value: unknown, bind: IFluidHandle): string;
|
|
16
|
+
parse(value: string): unknown;
|
|
17
17
|
}
|
|
18
18
|
//# sourceMappingURL=testSerializer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testSerializer.d.ts","sourceRoot":"","sources":["../../src/test/testSerializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E;;GAEG;AACH,qBAAa,cAAe,YAAW,gBAAgB;;IAGtD,IAAW,gBAAgB,
|
|
1
|
+
{"version":3,"file":"testSerializer.d.ts","sourceRoot":"","sources":["../../src/test/testSerializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E;;GAEG;AACH,qBAAa,cAAe,YAAW,gBAAgB;;IAGtD,IAAW,gBAAgB,IAAI,cAAc,CAE5C;IAEM,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO;IAInD,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAI/B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM;IAKrD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testSerializer.js","sourceRoot":"","sources":["../../src/test/testSerializer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,kEAA6D;AAG7D;;GAEG;AACH,MAAa,cAAc;IAC1B,gBAAsB,CAAC;IAEvB,IAAW,gBAAgB;QAC1B,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"testSerializer.js","sourceRoot":"","sources":["../../src/test/testSerializer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,kEAA6D;AAG7D;;GAEG;AACH,MAAa,cAAc;IAC1B,gBAAsB,CAAC;IAEvB,IAAW,gBAAgB;QAC1B,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,MAAM,CAAC,KAAc,EAAE,IAAkB;QAC/C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IAEM,MAAM,CAAC,KAAc;QAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IAEM,SAAS,CAAC,KAAc,EAAE,IAAkB;QAClD,IAAA,iBAAM,EAAC,IAAI,KAAK,SAAS,EAAE,wDAAwD,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,KAAa;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACD;AAvBD,wCAuBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { IFluidSerializer } from \"@fluidframework/shared-object-base/internal\";\n\n/**\n * Test serializer implementation for merge tree tests\n */\nexport class TestSerializer implements IFluidSerializer {\n\tpublic constructor() {}\n\n\tpublic get IFluidSerializer(): TestSerializer {\n\t\treturn this;\n\t}\n\n\tpublic encode(input: unknown, bind: IFluidHandle): unknown {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\tpublic decode(input: unknown): unknown {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\tpublic stringify(value: unknown, bind: IFluidHandle): string {\n\t\tassert(bind === undefined, \"Test serializer should not be called with bind handles\");\n\t\treturn JSON.stringify(value);\n\t}\n\n\tpublic parse(value: string): unknown {\n\t\treturn JSON.parse(value);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testServer.d.ts","sourceRoot":"","sources":["../../src/test/testServer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAa,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAGxF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,UAAU,SAAS;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACjB;AAOD;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACzC,GAAG,SAAK;IACR,OAAO,EAAE,UAAU,EAAE,CAAM;IAC3B,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAA0C;IAC3E,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAoD;gBACjF,OAAO,CAAC,EAAE,WAAW;IAIjC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"testServer.d.ts","sourceRoot":"","sources":["../../src/test/testServer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAa,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAGxF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,UAAU,SAAS;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACjB;AAOD;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACzC,GAAG,SAAK;IACR,OAAO,EAAE,UAAU,EAAE,CAAM;IAC3B,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAA0C;IAC3E,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAoD;gBACjF,OAAO,CAAC,EAAE,WAAW;IAIjC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAWvC,QAAQ,CAAC,GAAG,EAAE,yBAAyB,GAAG,OAAO;IAYjD,wBAAwB,CAAC,GAAG,EAAE,yBAAyB,GAAG,IAAI;IAc9D,OAAO,CAAC,GAAG,EAAE,yBAAyB,GAAG,yBAAyB;IAYlE,OAAO,CAAC,MAAM,CAAK;IAEnB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CA0CxC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,yBAAyB,GAC5B,OAAO,CAcT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testServer.js","sourceRoot":"","sources":["../../src/test/testServer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAAsE;AAGtE,sEAAgE;AAChE,sDAAuD;AACvD,4DAAsD;AAGtD,mDAA6C;AAO7C,MAAM,iBAAiB,GAAyB;IAC/C,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;CACtC,CAAC;AAEF;;;GAGG;AACH,MAAa,UAAW,SAAQ,0BAAU;IAKzC,YAAY,OAAqB;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;QALhB,QAAG,GAAG,CAAC,CAAC;QACR,YAAO,GAAiB,EAAE,CAAC;QAC3B,qBAAgB,GAAoB,IAAI,eAAI,CAAY,iBAAiB,CAAC,CAAC;QAC3E,gBAAW,GAAiC,IAAI,uBAAY,CAAiB,kCAAc,CAAC,CAAC;QAsDrF,WAAM,GAAG,CAAC,CAAC;IAnDnB,CAAC;IAED,UAAU,CAAC,OAAqB;QAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAI,CAAY,iBAAiB,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACzB,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE;gBAC9B,QAAQ,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,QAAQ,CAAC,GAA8B;QACtC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,0BAAU,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAkB,CAAC,CAAC;YAC3D,OAAO,sBAAsB,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,4DAA4D;IAC5D,sBAAsB;IACtB,wBAAwB,CAAC,GAA8B;QACtD,IAAI,GAAG,CAAC,uBAAuB,GAAG,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,uBAAuB;gBAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;QAC/D,CAAC;QACD,GAAG,CAAC,MAAM,GAAG;YACZ,EAAE,EAAE,GAAG;YACP,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,qBAAqB,EAAE,GAAG,CAAC,qBAAqB;SAChD,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,GAA8B;QACrC,OAAO;YACN,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;YAC9C,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,qBAAqB,EAAE,GAAG,CAAC,qBAAqB;YAChD,uBAAuB,EAAE,GAAG,CAAC,uBAAuB;YACpD,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,IAAI,EAAE,GAAG,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"testServer.js","sourceRoot":"","sources":["../../src/test/testServer.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 { Heap, IComparer } from \"@fluidframework/core-utils/internal\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\n\nimport { MergeTreeTextHelper } from \"../MergeTreeTextHelper.js\";\nimport { RedBlackTree } from \"../collections/index.js\";\nimport { compareNumbers } from \"../mergeTreeNodes.js\";\nimport { PropertySet } from \"../properties.js\";\n\nimport { TestClient } from \"./testClient.js\";\n\ninterface ClientSeq {\n\trefSeq: number;\n\tclientId: string;\n}\n\nconst clientSeqComparer: IComparer<ClientSeq> = {\n\tmin: { refSeq: -1, clientId: \"\" },\n\tcompare: (a, b) => a.refSeq - b.refSeq,\n};\n\n/**\n * Server for tests. Simulates client communication by directing placing\n * messages in client queues.\n */\nexport class TestServer extends TestClient {\n\tseq = 1;\n\tclients: TestClient[] = [];\n\tclientSeqNumbers: Heap<ClientSeq> = new Heap<ClientSeq>(clientSeqComparer);\n\tupstreamMap: RedBlackTree<number, number> = new RedBlackTree<number, number>(compareNumbers);\n\tconstructor(options?: PropertySet) {\n\t\tsuper(options);\n\t}\n\n\taddClients(clients: TestClient[]): void {\n\t\tthis.clientSeqNumbers = new Heap<ClientSeq>(clientSeqComparer);\n\t\tthis.clients = clients;\n\t\tfor (const client of clients) {\n\t\t\tthis.clientSeqNumbers.add({\n\t\t\t\trefSeq: client.getCurrentSeq(),\n\t\t\t\tclientId: client.longClientId ?? \"\",\n\t\t\t});\n\t\t}\n\t}\n\n\tapplyMsg(msg: ISequencedDocumentMessage): boolean {\n\t\tsuper.applyMsg(msg);\n\t\tif (TestClient.useCheckQ) {\n\t\t\tconst clid = this.getShortClientId(msg.clientId as string);\n\t\t\treturn checkTextMatchRelative(msg.referenceSequenceNumber, clid, this, msg);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// TODO: remove mappings when no longer needed using min seq\n\t// in upstream message\n\ttransformUpstreamMessage(msg: ISequencedDocumentMessage): void {\n\t\tif (msg.referenceSequenceNumber > 0) {\n\t\t\tmsg.referenceSequenceNumber =\n\t\t\t\tthis.upstreamMap.get(msg.referenceSequenceNumber)?.data ?? 0;\n\t\t}\n\t\tmsg.origin = {\n\t\t\tid: \"A\",\n\t\t\tsequenceNumber: msg.sequenceNumber,\n\t\t\tminimumSequenceNumber: msg.minimumSequenceNumber,\n\t\t};\n\t\tthis.upstreamMap.put(msg.sequenceNumber, this.seq);\n\t\tmsg.sequenceNumber = -1;\n\t}\n\n\tcopyMsg(msg: ISequencedDocumentMessage): ISequencedDocumentMessage {\n\t\treturn {\n\t\t\tclientId: msg.clientId,\n\t\t\tclientSequenceNumber: msg.clientSequenceNumber,\n\t\t\tcontents: msg.contents,\n\t\t\tminimumSequenceNumber: msg.minimumSequenceNumber,\n\t\t\treferenceSequenceNumber: msg.referenceSequenceNumber,\n\t\t\tsequenceNumber: msg.sequenceNumber,\n\t\t\ttype: msg.type,\n\t\t} as unknown as ISequencedDocumentMessage;\n\t}\n\n\tprivate minSeq = 0;\n\n\tapplyMessages(msgCount: number): boolean {\n\t\tlet _msgCount = msgCount;\n\t\twhile (_msgCount > 0) {\n\t\t\tconst msg = this.dequeueMsg();\n\t\t\tif (msg) {\n\t\t\t\tif (msg.sequenceNumber >= 0) {\n\t\t\t\t\tthis.transformUpstreamMessage(msg);\n\t\t\t\t}\n\t\t\t\tmsg.sequenceNumber = this.seq++;\n\t\t\t\tmsg.minimumSequenceNumber = this.minSeq;\n\t\t\t\tif (this.applyMsg(msg)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (this.clients) {\n\t\t\t\t\tlet minCli = this.clientSeqNumbers.peek()?.value;\n\t\t\t\t\tif (\n\t\t\t\t\t\tminCli &&\n\t\t\t\t\t\tminCli.clientId === msg.clientId &&\n\t\t\t\t\t\tminCli.refSeq < msg.referenceSequenceNumber\n\t\t\t\t\t) {\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\tconst cliSeq = this.clientSeqNumbers.get()!;\n\t\t\t\t\t\tconst oldSeq = cliSeq.refSeq;\n\t\t\t\t\t\tcliSeq.refSeq = msg.referenceSequenceNumber;\n\t\t\t\t\t\tthis.clientSeqNumbers.add(cliSeq);\n\t\t\t\t\t\tminCli = this.clientSeqNumbers.peek()?.value;\n\t\t\t\t\t\tif (minCli && minCli.refSeq > oldSeq) {\n\t\t\t\t\t\t\tmsg.minimumSequenceNumber = minCli.refSeq;\n\t\t\t\t\t\t\tthis.minSeq = minCli.refSeq;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const client of this.clients) {\n\t\t\t\t\t\tclient.enqueueMsg(msg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t_msgCount--;\n\t\t}\n\t\treturn false;\n\t}\n}\n\n/**\n * Used for in-memory testing. This will queue a reference string for each client message.\n */\nexport function checkTextMatchRelative(\n\trefSeq: number,\n\tclientId: number,\n\tserver: TestServer,\n\tmsg: ISequencedDocumentMessage,\n): boolean {\n\tconst client = server.clients[clientId];\n\tconst serverText = new MergeTreeTextHelper(server.mergeTree).getText(refSeq, clientId);\n\tconst cliText = client.checkQ.shift()?.data;\n\tif (cliText === undefined || cliText !== serverText) {\n\t\tconsole.log(`mismatch `);\n\t\tconsole.log(msg);\n\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\tconsole.log(server.mergeTree.toString());\n\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\tconsole.log(client.mergeTree.toString());\n\t\treturn true;\n\t}\n\treturn false;\n}\n"]}
|
package/dist/test/testUtils.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ export declare function nodeOrdinalsHaveIntegrity(block: MergeBlock): boolean;
|
|
|
58
58
|
* Returns an object that tallies each delta and maintenance operation observed
|
|
59
59
|
* for the given 'mergeTree'.
|
|
60
60
|
*/
|
|
61
|
-
export declare function countOperations(mergeTree: MergeTree):
|
|
61
|
+
export declare function countOperations(mergeTree: MergeTree): object;
|
|
62
62
|
export declare function validatePartialLengths(clientId: number, mergeTree: MergeTree, expectedValues?: {
|
|
63
63
|
seq: number;
|
|
64
64
|
len: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../src/test/testUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../src/test/testUtils.ts"],"names":[],"mappings":"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"}
|
package/dist/test/testUtils.js
CHANGED
|
@@ -8,8 +8,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.useStrictPartialLengthChecks = exports.validateRefCount = exports.validatePartialLengths = exports.countOperations = exports.nodeOrdinalsHaveIntegrity = exports.markRangeRemoved = exports.insertSegments = exports.insertText = exports.insertMarker = exports.loadTextFromFileWithMarkers = exports.loadTextFromFile = void 0;
|
|
11
|
-
const
|
|
12
|
-
const
|
|
11
|
+
const node_assert_1 = require("node:assert");
|
|
12
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
13
13
|
const constants_js_1 = require("../constants.js");
|
|
14
14
|
const mergeTreeNodeWalk_js_1 = require("../mergeTreeNodeWalk.js");
|
|
15
15
|
const mergeTreeNodes_js_1 = require("../mergeTreeNodes.js");
|
|
@@ -17,12 +17,12 @@ const partialLengths_js_1 = require("../partialLengths.js");
|
|
|
17
17
|
const textSegment_js_1 = require("../textSegment.js");
|
|
18
18
|
const text_js_1 = require("./text.js");
|
|
19
19
|
function loadTextFromFile(filename, mergeTree, segLimit = 0) {
|
|
20
|
-
const content =
|
|
20
|
+
const content = node_fs_1.default.readFileSync(filename, "utf8");
|
|
21
21
|
return (0, text_js_1.loadText)(content, mergeTree, segLimit);
|
|
22
22
|
}
|
|
23
23
|
exports.loadTextFromFile = loadTextFromFile;
|
|
24
24
|
function loadTextFromFileWithMarkers(filename, mergeTree, segLimit = 0) {
|
|
25
|
-
const content =
|
|
25
|
+
const content = node_fs_1.default.readFileSync(filename, "utf8");
|
|
26
26
|
return (0, text_js_1.loadText)(content, mergeTree, segLimit, true);
|
|
27
27
|
}
|
|
28
28
|
exports.loadTextFromFileWithMarkers = loadTextFromFileWithMarkers;
|
|
@@ -50,11 +50,9 @@ function nodeOrdinalsHaveIntegrity(block) {
|
|
|
50
50
|
console.log("node integrity issue");
|
|
51
51
|
return false;
|
|
52
52
|
}
|
|
53
|
-
if (i > 0) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
53
|
+
if (i > 0 && block.children[i].ordinal <= block.children[i - 1].ordinal) {
|
|
54
|
+
console.log("node sib integrity issue");
|
|
55
|
+
return false;
|
|
58
56
|
}
|
|
59
57
|
if (!block.children[i].isLeaf()) {
|
|
60
58
|
return nodeOrdinalsHaveIntegrity(block.children[i]);
|
|
@@ -74,8 +72,8 @@ exports.nodeOrdinalsHaveIntegrity = nodeOrdinalsHaveIntegrity;
|
|
|
74
72
|
*/
|
|
75
73
|
function countOperations(mergeTree) {
|
|
76
74
|
const counts = {};
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
node_assert_1.strict.strictEqual(mergeTree.mergeTreeDeltaCallback, undefined);
|
|
76
|
+
node_assert_1.strict.strictEqual(mergeTree.mergeTreeMaintenanceCallback, undefined);
|
|
79
77
|
const fn = (deltaArgs) => {
|
|
80
78
|
const previous = counts[deltaArgs.operation];
|
|
81
79
|
counts[deltaArgs.operation] = previous === undefined ? 1 : previous + 1;
|
|
@@ -124,17 +122,17 @@ function validatePartialLengths(clientId, mergeTree, expectedValues, localSeq, m
|
|
|
124
122
|
for (let i = mergeTree.collabWindow.minSeq + 1; i <= mergeTree.collabWindow.currentSeq; i++) {
|
|
125
123
|
const { partialLen, actualLen } = getPartialLengths(clientId, i, mergeTree, localSeq, mergeBlock);
|
|
126
124
|
if (partialLen && partialLen < 0) {
|
|
127
|
-
|
|
125
|
+
node_assert_1.strict.fail("Negative partial length returned");
|
|
128
126
|
}
|
|
129
|
-
|
|
127
|
+
node_assert_1.strict.equal(partialLen, actualLen);
|
|
130
128
|
}
|
|
131
129
|
if (!expectedValues) {
|
|
132
130
|
return;
|
|
133
131
|
}
|
|
134
132
|
for (const { seq, len, localSeq: expectedLocalSeq } of expectedValues) {
|
|
135
133
|
const { partialLen, actualLen } = getPartialLengths(clientId, seq, mergeTree, expectedLocalSeq ?? localSeq, mergeBlock);
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
node_assert_1.strict.equal(partialLen, len);
|
|
135
|
+
node_assert_1.strict.equal(actualLen, len);
|
|
138
136
|
}
|
|
139
137
|
}
|
|
140
138
|
exports.validatePartialLengths = validatePartialLengths;
|
|
@@ -142,9 +140,9 @@ function validateRefCount(collection) {
|
|
|
142
140
|
if (!collection) {
|
|
143
141
|
return;
|
|
144
142
|
}
|
|
145
|
-
const expectedLength =
|
|
143
|
+
const expectedLength = [...collection].length;
|
|
146
144
|
// eslint-disable-next-line @typescript-eslint/dot-notation
|
|
147
|
-
|
|
145
|
+
node_assert_1.strict.equal(collection["refCount"], expectedLength);
|
|
148
146
|
}
|
|
149
147
|
exports.validateRefCount = validateRefCount;
|
|
150
148
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/test/testUtils.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 fs from \"fs\";\n\nimport { UnassignedSequenceNumber } from \"../constants.js\";\nimport { LocalReferenceCollection } from \"../localReference.js\";\nimport { MergeTree } from \"../mergeTree.js\";\nimport { IMergeTreeDeltaOpArgs } from \"../mergeTreeDeltaCallback.js\";\nimport { walkAllChildSegments } from \"../mergeTreeNodeWalk.js\";\nimport { MergeBlock, ISegment, Marker } from \"../mergeTreeNodes.js\";\nimport { ReferenceType } from \"../ops.js\";\nimport {\n\tPartialSequenceLengths,\n\tverifyExpectedPartialLengths,\n\tverifyPartialLengths,\n} from \"../partialLengths.js\";\nimport { PropertySet } from \"../properties.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { loadText } from \"./text.js\";\n\nexport function loadTextFromFile(filename: string, mergeTree: MergeTree, segLimit = 0) {\n\tconst content = fs.readFileSync(filename, \"utf8\");\n\treturn loadText(content, mergeTree, segLimit);\n}\n\nexport function loadTextFromFileWithMarkers(\n\tfilename: string,\n\tmergeTree: MergeTree,\n\tsegLimit = 0,\n) {\n\tconst content = fs.readFileSync(filename, \"utf8\");\n\treturn loadText(content, mergeTree, segLimit, true);\n}\n\ninterface InsertMarkerArgs {\n\tmergeTree: MergeTree;\n\tpos: number;\n\trefSeq: number;\n\tclientId: number;\n\tseq: number;\n\tbehaviors: ReferenceType;\n\tprops: PropertySet | undefined;\n\topArgs: IMergeTreeDeltaOpArgs;\n}\n\nexport function insertMarker({\n\tmergeTree,\n\tpos,\n\trefSeq,\n\tclientId,\n\tseq,\n\tbehaviors,\n\tprops,\n\topArgs,\n}: InsertMarkerArgs) {\n\tmergeTree.insertSegments(\n\t\tpos,\n\t\t[Marker.make(behaviors, props)],\n\t\trefSeq,\n\t\tclientId,\n\t\tseq,\n\t\topArgs,\n\t);\n}\n\ninterface InsertTextArgs {\n\tmergeTree: MergeTree;\n\tpos: number;\n\trefSeq: number;\n\tclientId: number;\n\tseq: number;\n\ttext: string;\n\tprops?: PropertySet;\n\topArgs?: IMergeTreeDeltaOpArgs;\n}\n\nexport function insertText({\n\tmergeTree,\n\tpos,\n\trefSeq,\n\tclientId,\n\tseq,\n\ttext,\n\tprops,\n\topArgs,\n}: InsertTextArgs) {\n\tmergeTree.insertSegments(\n\t\tpos,\n\t\t[TextSegment.make(text, props)],\n\t\trefSeq,\n\t\tclientId,\n\t\tseq,\n\t\topArgs,\n\t);\n}\n\ninterface InsertSegmentsArgs {\n\tmergeTree: MergeTree;\n\tpos: number;\n\tsegments: ISegment[];\n\trefSeq: number;\n\tclientId: number;\n\tseq: number;\n\topArgs: IMergeTreeDeltaOpArgs | undefined;\n}\n\nexport function insertSegments({\n\tmergeTree,\n\tpos,\n\tsegments,\n\trefSeq,\n\tclientId,\n\tseq,\n\topArgs,\n}: InsertSegmentsArgs): void {\n\tmergeTree.insertSegments(pos, segments, refSeq, clientId, seq, opArgs);\n}\n\ninterface MarkRangeRemovedArgs {\n\tmergeTree: MergeTree;\n\tstart: number;\n\tend: number;\n\trefSeq: number;\n\tclientId: number;\n\tseq: number;\n\toverwrite: boolean;\n\topArgs: IMergeTreeDeltaOpArgs;\n}\n\nexport function markRangeRemoved({\n\tmergeTree,\n\tstart,\n\tend,\n\trefSeq,\n\tclientId,\n\tseq,\n\toverwrite = false,\n\topArgs,\n}: MarkRangeRemovedArgs): void {\n\tmergeTree.markRangeRemoved(start, end, refSeq, clientId, seq, overwrite, opArgs);\n}\n\nexport function nodeOrdinalsHaveIntegrity(block: MergeBlock): boolean {\n\tconst olen = block.ordinal.length;\n\tfor (let i = 0; i < block.childCount; i++) {\n\t\tif (block.children[i].ordinal) {\n\t\t\tif (olen !== block.children[i].ordinal.length - 1) {\n\t\t\t\tconsole.log(\"node integrity issue\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (i > 0) {\n\t\t\t\tif (block.children[i].ordinal <= block.children[i - 1].ordinal) {\n\t\t\t\t\tconsole.log(\"node sib integrity issue\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!block.children[i].isLeaf()) {\n\t\t\t\treturn nodeOrdinalsHaveIntegrity(block.children[i] as MergeBlock);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(`node child ordinal not set ${i}`);\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Returns an object that tallies each delta and maintenance operation observed\n * for the given 'mergeTree'.\n */\nexport function countOperations(mergeTree: MergeTree) {\n\tconst counts = {};\n\n\tassert.strictEqual(mergeTree.mergeTreeDeltaCallback, undefined);\n\tassert.strictEqual(mergeTree.mergeTreeMaintenanceCallback, undefined);\n\n\tconst fn = (deltaArgs) => {\n\t\tconst previous = counts[deltaArgs.operation] as undefined | number;\n\t\tcounts[deltaArgs.operation] = previous === undefined ? 1 : previous + 1;\n\t};\n\n\tmergeTree.mergeTreeDeltaCallback = (opArgs, deltaArgs) => {\n\t\tfn(deltaArgs);\n\t};\n\tmergeTree.mergeTreeMaintenanceCallback = fn;\n\n\treturn counts;\n}\n\nfunction getPartialLengths(\n\tclientId: number,\n\tseq: number,\n\tmergeTree: MergeTree,\n\tlocalSeq?: number,\n\tmergeBlock: MergeBlock = mergeTree.root,\n) {\n\tconst partialLen = mergeBlock.partialLengths?.getPartialLength(seq, clientId, localSeq);\n\n\tlet actualLen = 0;\n\n\tconst isInserted = (segment: ISegment) =>\n\t\tsegment.seq === undefined ||\n\t\t(segment.seq !== UnassignedSequenceNumber && segment.seq <= seq) ||\n\t\t(localSeq !== undefined &&\n\t\t\tsegment.seq === UnassignedSequenceNumber &&\n\t\t\tsegment.localSeq !== undefined &&\n\t\t\tsegment.localSeq <= localSeq);\n\n\tconst isRemoved = (segment: ISegment) =>\n\t\tsegment.removedSeq !== undefined &&\n\t\t((localSeq !== undefined &&\n\t\t\tsegment.removedSeq === UnassignedSequenceNumber &&\n\t\t\tsegment.localRemovedSeq !== undefined &&\n\t\t\tsegment.localRemovedSeq <= localSeq) ||\n\t\t\t(segment.removedSeq !== UnassignedSequenceNumber && segment.removedSeq <= seq));\n\n\tconst isMoved = (segment: ISegment) =>\n\t\tsegment.movedSeq !== undefined &&\n\t\t((localSeq !== undefined &&\n\t\t\tsegment.movedSeq === UnassignedSequenceNumber &&\n\t\t\tsegment.localMovedSeq !== undefined &&\n\t\t\tsegment.localMovedSeq <= localSeq) ||\n\t\t\t(segment.movedSeq !== UnassignedSequenceNumber && segment.movedSeq <= seq));\n\n\twalkAllChildSegments(mergeBlock, (segment) => {\n\t\tif (isInserted(segment) && !isRemoved(segment) && !isMoved(segment)) {\n\t\t\tactualLen += segment.cachedLength;\n\t\t}\n\t\treturn true;\n\t});\n\n\treturn {\n\t\tpartialLen,\n\t\tactualLen,\n\t};\n}\n\nexport function validatePartialLengths(\n\tclientId: number,\n\tmergeTree: MergeTree,\n\texpectedValues?: { seq: number; len: number; localSeq?: number }[],\n\tlocalSeq?: number,\n\tmergeBlock: MergeBlock = mergeTree.root,\n): void {\n\tmergeTree.computeLocalPartials(0);\n\tfor (\n\t\tlet i = mergeTree.collabWindow.minSeq + 1;\n\t\ti <= mergeTree.collabWindow.currentSeq;\n\t\ti++\n\t) {\n\t\tconst { partialLen, actualLen } = getPartialLengths(\n\t\t\tclientId,\n\t\t\ti,\n\t\t\tmergeTree,\n\t\t\tlocalSeq,\n\t\t\tmergeBlock,\n\t\t);\n\n\t\tif (partialLen && partialLen < 0) {\n\t\t\tassert.fail(\"Negative partial length returned\");\n\t\t}\n\t\tassert.equal(partialLen, actualLen);\n\t}\n\n\tif (!expectedValues) {\n\t\treturn;\n\t}\n\n\tfor (const { seq, len, localSeq: expectedLocalSeq } of expectedValues) {\n\t\tconst { partialLen, actualLen } = getPartialLengths(\n\t\t\tclientId,\n\t\t\tseq,\n\t\t\tmergeTree,\n\t\t\texpectedLocalSeq ?? localSeq,\n\t\t\tmergeBlock,\n\t\t);\n\n\t\tassert.equal(partialLen, len);\n\t\tassert.equal(actualLen, len);\n\t}\n}\n\nexport function validateRefCount(collection?: LocalReferenceCollection) {\n\tif (!collection) {\n\t\treturn;\n\t}\n\n\tconst expectedLength = Array.from(collection).length;\n\n\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\tassert.equal(collection[\"refCount\"], expectedLength);\n}\n\n/**\n * Enable stricter partial length assertions inside tests\n *\n * Note that these assertions can be expensive, and so should not be enabled in\n * production code or tests that run through thousands of ops (e.g. the SharedString\n * fuzz tests).\n */\nexport function useStrictPartialLengthChecks() {\n\tbeforeEach(() => {\n\t\tPartialSequenceLengths.options.verifier = verifyPartialLengths;\n\t\tPartialSequenceLengths.options.verifyExpected = verifyExpectedPartialLengths;\n\t});\n\n\tafterEach(() => {\n\t\tPartialSequenceLengths.options.verifier = undefined;\n\t\tPartialSequenceLengths.options.verifyExpected = undefined;\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/test/testUtils.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 \"node:assert\";\nimport fs from \"node:fs\";\n\nimport { UnassignedSequenceNumber } from \"../constants.js\";\nimport { LocalReferenceCollection } from \"../localReference.js\";\nimport { MergeTree } from \"../mergeTree.js\";\nimport {\n\tIMergeTreeDeltaOpArgs,\n\ttype IMergeTreeDeltaCallbackArgs,\n\ttype IMergeTreeMaintenanceCallbackArgs,\n} from \"../mergeTreeDeltaCallback.js\";\nimport { walkAllChildSegments } from \"../mergeTreeNodeWalk.js\";\nimport { MergeBlock, ISegment, Marker } from \"../mergeTreeNodes.js\";\nimport { ReferenceType } from \"../ops.js\";\nimport {\n\tPartialSequenceLengths,\n\tverifyExpectedPartialLengths,\n\tverifyPartialLengths,\n} from \"../partialLengths.js\";\nimport { PropertySet } from \"../properties.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { loadText } from \"./text.js\";\n\nexport function loadTextFromFile(\n\tfilename: string,\n\tmergeTree: MergeTree,\n\tsegLimit = 0,\n): MergeTree {\n\tconst content = fs.readFileSync(filename, \"utf8\");\n\treturn loadText(content, mergeTree, segLimit);\n}\n\nexport function loadTextFromFileWithMarkers(\n\tfilename: string,\n\tmergeTree: MergeTree,\n\tsegLimit = 0,\n): MergeTree {\n\tconst content = fs.readFileSync(filename, \"utf8\");\n\treturn loadText(content, mergeTree, segLimit, true);\n}\n\ninterface InsertMarkerArgs {\n\tmergeTree: MergeTree;\n\tpos: number;\n\trefSeq: number;\n\tclientId: number;\n\tseq: number;\n\tbehaviors: ReferenceType;\n\tprops: PropertySet | undefined;\n\topArgs: IMergeTreeDeltaOpArgs;\n}\n\nexport function insertMarker({\n\tmergeTree,\n\tpos,\n\trefSeq,\n\tclientId,\n\tseq,\n\tbehaviors,\n\tprops,\n\topArgs,\n}: InsertMarkerArgs): void {\n\tmergeTree.insertSegments(\n\t\tpos,\n\t\t[Marker.make(behaviors, props)],\n\t\trefSeq,\n\t\tclientId,\n\t\tseq,\n\t\topArgs,\n\t);\n}\n\ninterface InsertTextArgs {\n\tmergeTree: MergeTree;\n\tpos: number;\n\trefSeq: number;\n\tclientId: number;\n\tseq: number;\n\ttext: string;\n\tprops?: PropertySet;\n\topArgs?: IMergeTreeDeltaOpArgs;\n}\n\nexport function insertText({\n\tmergeTree,\n\tpos,\n\trefSeq,\n\tclientId,\n\tseq,\n\ttext,\n\tprops,\n\topArgs,\n}: InsertTextArgs): void {\n\tmergeTree.insertSegments(\n\t\tpos,\n\t\t[TextSegment.make(text, props)],\n\t\trefSeq,\n\t\tclientId,\n\t\tseq,\n\t\topArgs,\n\t);\n}\n\ninterface InsertSegmentsArgs {\n\tmergeTree: MergeTree;\n\tpos: number;\n\tsegments: ISegment[];\n\trefSeq: number;\n\tclientId: number;\n\tseq: number;\n\topArgs: IMergeTreeDeltaOpArgs | undefined;\n}\n\nexport function insertSegments({\n\tmergeTree,\n\tpos,\n\tsegments,\n\trefSeq,\n\tclientId,\n\tseq,\n\topArgs,\n}: InsertSegmentsArgs): void {\n\tmergeTree.insertSegments(pos, segments, refSeq, clientId, seq, opArgs);\n}\n\ninterface MarkRangeRemovedArgs {\n\tmergeTree: MergeTree;\n\tstart: number;\n\tend: number;\n\trefSeq: number;\n\tclientId: number;\n\tseq: number;\n\toverwrite: boolean;\n\topArgs: IMergeTreeDeltaOpArgs;\n}\n\nexport function markRangeRemoved({\n\tmergeTree,\n\tstart,\n\tend,\n\trefSeq,\n\tclientId,\n\tseq,\n\toverwrite = false,\n\topArgs,\n}: MarkRangeRemovedArgs): void {\n\tmergeTree.markRangeRemoved(start, end, refSeq, clientId, seq, overwrite, opArgs);\n}\n\nexport function nodeOrdinalsHaveIntegrity(block: MergeBlock): boolean {\n\tconst olen = block.ordinal.length;\n\tfor (let i = 0; i < block.childCount; i++) {\n\t\tif (block.children[i].ordinal) {\n\t\t\tif (olen !== block.children[i].ordinal.length - 1) {\n\t\t\t\tconsole.log(\"node integrity issue\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (i > 0 && block.children[i].ordinal <= block.children[i - 1].ordinal) {\n\t\t\t\tconsole.log(\"node sib integrity issue\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!block.children[i].isLeaf()) {\n\t\t\t\treturn nodeOrdinalsHaveIntegrity(block.children[i] as MergeBlock);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(`node child ordinal not set ${i}`);\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Returns an object that tallies each delta and maintenance operation observed\n * for the given 'mergeTree'.\n */\nexport function countOperations(mergeTree: MergeTree): object {\n\tconst counts = {};\n\n\tassert.strictEqual(mergeTree.mergeTreeDeltaCallback, undefined);\n\tassert.strictEqual(mergeTree.mergeTreeMaintenanceCallback, undefined);\n\n\tconst fn = (\n\t\tdeltaArgs: IMergeTreeDeltaCallbackArgs | IMergeTreeMaintenanceCallbackArgs,\n\t): void => {\n\t\tconst previous = counts[deltaArgs.operation] as undefined | number;\n\t\tcounts[deltaArgs.operation] = previous === undefined ? 1 : previous + 1;\n\t};\n\n\tmergeTree.mergeTreeDeltaCallback = (opArgs, deltaArgs): void => {\n\t\tfn(deltaArgs);\n\t};\n\tmergeTree.mergeTreeMaintenanceCallback = fn;\n\n\treturn counts;\n}\n\nfunction getPartialLengths(\n\tclientId: number,\n\tseq: number,\n\tmergeTree: MergeTree,\n\tlocalSeq?: number,\n\tmergeBlock: MergeBlock = mergeTree.root,\n): {\n\tpartialLen: number | undefined;\n\tactualLen: number;\n} {\n\tconst partialLen = mergeBlock.partialLengths?.getPartialLength(seq, clientId, localSeq);\n\n\tlet actualLen = 0;\n\n\tconst isInserted = (segment: ISegment): boolean =>\n\t\tsegment.seq === undefined ||\n\t\t(segment.seq !== UnassignedSequenceNumber && segment.seq <= seq) ||\n\t\t(localSeq !== undefined &&\n\t\t\tsegment.seq === UnassignedSequenceNumber &&\n\t\t\tsegment.localSeq !== undefined &&\n\t\t\tsegment.localSeq <= localSeq);\n\n\tconst isRemoved = (segment: ISegment): boolean =>\n\t\tsegment.removedSeq !== undefined &&\n\t\t((localSeq !== undefined &&\n\t\t\tsegment.removedSeq === UnassignedSequenceNumber &&\n\t\t\tsegment.localRemovedSeq !== undefined &&\n\t\t\tsegment.localRemovedSeq <= localSeq) ||\n\t\t\t(segment.removedSeq !== UnassignedSequenceNumber && segment.removedSeq <= seq));\n\n\tconst isMoved = (segment: ISegment): boolean =>\n\t\tsegment.movedSeq !== undefined &&\n\t\t((localSeq !== undefined &&\n\t\t\tsegment.movedSeq === UnassignedSequenceNumber &&\n\t\t\tsegment.localMovedSeq !== undefined &&\n\t\t\tsegment.localMovedSeq <= localSeq) ||\n\t\t\t(segment.movedSeq !== UnassignedSequenceNumber && segment.movedSeq <= seq));\n\n\twalkAllChildSegments(mergeBlock, (segment) => {\n\t\tif (isInserted(segment) && !isRemoved(segment) && !isMoved(segment)) {\n\t\t\tactualLen += segment.cachedLength;\n\t\t}\n\t\treturn true;\n\t});\n\n\treturn {\n\t\tpartialLen,\n\t\tactualLen,\n\t};\n}\n\nexport function validatePartialLengths(\n\tclientId: number,\n\tmergeTree: MergeTree,\n\texpectedValues?: { seq: number; len: number; localSeq?: number }[],\n\tlocalSeq?: number,\n\tmergeBlock: MergeBlock = mergeTree.root,\n): void {\n\tmergeTree.computeLocalPartials(0);\n\tfor (\n\t\tlet i = mergeTree.collabWindow.minSeq + 1;\n\t\ti <= mergeTree.collabWindow.currentSeq;\n\t\ti++\n\t) {\n\t\tconst { partialLen, actualLen } = getPartialLengths(\n\t\t\tclientId,\n\t\t\ti,\n\t\t\tmergeTree,\n\t\t\tlocalSeq,\n\t\t\tmergeBlock,\n\t\t);\n\n\t\tif (partialLen && partialLen < 0) {\n\t\t\tassert.fail(\"Negative partial length returned\");\n\t\t}\n\t\tassert.equal(partialLen, actualLen);\n\t}\n\n\tif (!expectedValues) {\n\t\treturn;\n\t}\n\n\tfor (const { seq, len, localSeq: expectedLocalSeq } of expectedValues) {\n\t\tconst { partialLen, actualLen } = getPartialLengths(\n\t\t\tclientId,\n\t\t\tseq,\n\t\t\tmergeTree,\n\t\t\texpectedLocalSeq ?? localSeq,\n\t\t\tmergeBlock,\n\t\t);\n\n\t\tassert.equal(partialLen, len);\n\t\tassert.equal(actualLen, len);\n\t}\n}\n\nexport function validateRefCount(collection?: LocalReferenceCollection): void {\n\tif (!collection) {\n\t\treturn;\n\t}\n\n\tconst expectedLength = [...collection].length;\n\n\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\tassert.equal(collection[\"refCount\"], expectedLength);\n}\n\n/**\n * Enable stricter partial length assertions inside tests\n *\n * Note that these assertions can be expensive, and so should not be enabled in\n * production code or tests that run through thousands of ops (e.g. the SharedString\n * fuzz tests).\n */\nexport function useStrictPartialLengthChecks(): void {\n\tbeforeEach(() => {\n\t\tPartialSequenceLengths.options.verifier = verifyPartialLengths;\n\t\tPartialSequenceLengths.options.verifyExpected = verifyExpectedPartialLengths;\n\t});\n\n\tafterEach(() => {\n\t\tPartialSequenceLengths.options.verifier = undefined;\n\t\tPartialSequenceLengths.options.verifyExpected = undefined;\n\t});\n}\n"]}
|
package/dist/test/text.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/test/text.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAU,MAAM,sBAAsB,CAAC;AAKxD,wBAAgB,YAAY,CAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,OAAe,EACxB,SAAS,GAAE,OAAc,
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/test/text.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAU,MAAM,sBAAsB,CAAC;AAKxD,wBAAgB,YAAY,CAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,OAAe,EACxB,SAAS,GAAE,OAAc,GACvB,QAAQ,EAAE,CAwDZ;AAED,wBAAgB,QAAQ,CACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,UAAQ,GACb,SAAS,CAIX"}
|
package/dist/test/text.js
CHANGED
|
@@ -15,7 +15,7 @@ function loadSegments(content, segLimit, markers = false, withProps = true) {
|
|
|
15
15
|
for (let i = 0, len = paragraphs.length; i < len; i++) {
|
|
16
16
|
paragraphs[i] = paragraphs[i]
|
|
17
17
|
.replace(/\r?\n/g, " ")
|
|
18
|
-
.replace(/\
|
|
18
|
+
.replace(/\u201C|\u201D/g, '"')
|
|
19
19
|
.replace(/\u2019/g, "'");
|
|
20
20
|
if (!markers && i !== paragraphs.length - 1) {
|
|
21
21
|
paragraphs[i] += "\n";
|
package/dist/test/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/test/text.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 { MergeTree } from \"../mergeTree.js\";\nimport { ISegment, Marker } from \"../mergeTreeNodes.js\";\nimport { ReferenceType } from \"../ops.js\";\nimport { reservedTileLabelsKey } from \"../referencePositions.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nexport function loadSegments(\n\tcontent: string,\n\tsegLimit: number,\n\tmarkers: boolean = false,\n\twithProps: boolean = true,\n) {\n\tconst BOMFreeContent = content.replace(/^\\uFEFF/, \"\");\n\n\tconst paragraphs = BOMFreeContent.split(/\\r?\\n/);\n\tfor (let i = 0, len = paragraphs.length; i < len; i++) {\n\t\tparagraphs[i] = paragraphs[i]\n\t\t\t.replace(/\\r?\\n/g, \" \")\n\t\t\t.replace(/\\
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/test/text.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,4DAAwD;AACxD,sCAA0C;AAC1C,oEAAiE;AACjE,sDAAgD;AAEhD,SAAgB,YAAY,CAC3B,OAAe,EACf,QAAgB,EAChB,UAAmB,KAAK,EACxB,YAAqB,IAAI;IAEzB,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACvD,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;aAC3B,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;aACtB,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;aAC9B,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACvB,CAAC;IACF,CAAC;IAED,MAAM,QAAQ,GAAG,EAAgB,CAAC;IAClC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,QAA4B,CAAC;QACjC,IAAI,OAAO,EAAE,CAAC;YACb,QAAQ,GAAG,0BAAM,CAAC,IAAI,CAAC,sBAAa,CAAC,IAAI,EAAE,EAAE,CAAC,6CAAqB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC3E,IAAI,QAAQ,EAAE,CAAC;oBACd,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;oBACtC,QAAQ,CAAC,IAAI,CAAC,IAAI,4BAAW,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACP,QAAQ,CAAC,IAAI,CAAC,4BAAW,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBACtF,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxD,sCAAsC;oBACtC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBACX,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC/B,QAAQ,CAAC,IAAI,CAAC,4BAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;wBAC1E,CAAC;oBACF,CAAC;yBAAM,CAAC;wBACP,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC/B,QAAQ,CAAC,IAAI,CAAC,IAAI,4BAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChD,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,QAAQ,CAAC,IAAI,CAAC,IAAI,4BAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAClB,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AA7DD,oCA6DC;AAED,SAAgB,QAAQ,CACvB,OAAe,EACf,SAAoB,EACpB,QAAgB,EAChB,OAAO,GAAG,KAAK;IAEf,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,SAAS,CAAC;AAClB,CAAC;AATD,4BASC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { MergeTree } from \"../mergeTree.js\";\nimport { ISegment, Marker } from \"../mergeTreeNodes.js\";\nimport { ReferenceType } from \"../ops.js\";\nimport { reservedTileLabelsKey } from \"../referencePositions.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nexport function loadSegments(\n\tcontent: string,\n\tsegLimit: number,\n\tmarkers: boolean = false,\n\twithProps: boolean = true,\n): ISegment[] {\n\tconst BOMFreeContent = content.replace(/^\\uFEFF/, \"\");\n\n\tconst paragraphs = BOMFreeContent.split(/\\r?\\n/);\n\tfor (let i = 0, len = paragraphs.length; i < len; i++) {\n\t\tparagraphs[i] = paragraphs[i]\n\t\t\t.replace(/\\r?\\n/g, \" \")\n\t\t\t.replace(/\\u201C|\\u201D/g, '\"')\n\t\t\t.replace(/\\u2019/g, \"'\");\n\t\tif (!markers && i !== paragraphs.length - 1) {\n\t\t\tparagraphs[i] += \"\\n\";\n\t\t}\n\t}\n\n\tconst segments = [] as ISegment[];\n\tfor (const paragraph of paragraphs) {\n\t\tlet pgMarker: Marker | undefined;\n\t\tif (markers) {\n\t\t\tpgMarker = Marker.make(ReferenceType.Tile, { [reservedTileLabelsKey]: [\"pg\"] });\n\t\t}\n\t\tif (withProps) {\n\t\t\tif (paragraph.includes(\"Chapter\") || paragraph.includes(\"PRIDE AND PREJ\")) {\n\t\t\t\tif (pgMarker) {\n\t\t\t\t\tpgMarker.addProperties({ header: 2 });\n\t\t\t\t\tsegments.push(new TextSegment(paragraph));\n\t\t\t\t} else {\n\t\t\t\t\tsegments.push(TextSegment.make(paragraph, { fontSize: \"140%\", lineHeight: \"150%\" }));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst emphStrings = paragraph.split(\"_\");\n\t\t\t\tfor (let i = 0, len = emphStrings.length; i < len; i++) {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (i & 1) {\n\t\t\t\t\t\tif (emphStrings[i].length > 0) {\n\t\t\t\t\t\t\tsegments.push(TextSegment.make(emphStrings[i], { fontStyle: \"italic\" }));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (emphStrings[i].length > 0) {\n\t\t\t\t\t\t\tsegments.push(new TextSegment(emphStrings[i]));\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} else {\n\t\t\tsegments.push(new TextSegment(paragraph));\n\t\t}\n\t\tif (pgMarker) {\n\t\t\tsegments.push(pgMarker);\n\t\t}\n\t}\n\n\tif (segLimit > 0) {\n\t\tsegments.length = segLimit;\n\t}\n\n\treturn segments;\n}\n\nexport function loadText(\n\tcontent: string,\n\tmergeTree: MergeTree,\n\tsegLimit: number,\n\tmarkers = false,\n): MergeTree {\n\tconst segments = loadSegments(content, segLimit, markers);\n\tmergeTree.reloadFromSegments(segments);\n\treturn mergeTree;\n}\n"]}
|