@fluidframework/merge-tree 0.58.1000 → 0.58.2000
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/DEV.md +9 -0
- package/dist/base.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -3
- package/dist/client.js.map +1 -1
- package/dist/collections.d.ts +2 -1
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js.map +1 -1
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +4 -1
- package/dist/localReference.js.map +1 -1
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +26 -23
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/dist/mergeTreeDeltaCallback.js.map +1 -1
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +2 -2
- package/dist/partialLengths.js.map +1 -1
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +9 -2
- package/dist/properties.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +4 -0
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js.map +1 -1
- package/lib/base.js.map +1 -1
- package/lib/client.d.ts +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +13 -3
- package/lib/client.js.map +1 -1
- package/lib/collections.d.ts +2 -1
- package/lib/collections.d.ts.map +1 -1
- package/lib/collections.js.map +1 -1
- package/lib/localReference.d.ts.map +1 -1
- package/lib/localReference.js +4 -1
- package/lib/localReference.js.map +1 -1
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +26 -23
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/lib/mergeTreeDeltaCallback.js.map +1 -1
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +2 -2
- package/lib/partialLengths.js.map +1 -1
- package/lib/properties.d.ts.map +1 -1
- package/lib/properties.js +9 -2
- package/lib/properties.js.map +1 -1
- package/lib/segmentPropertiesManager.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +4 -0
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js.map +1 -1
- package/package.json +14 -10
- package/src/base.ts +2 -2
- package/src/client.ts +13 -3
- package/src/collections.ts +2 -1
- package/src/localReference.ts +4 -2
- package/src/mergeTree.ts +31 -34
- package/src/mergeTreeDeltaCallback.ts +1 -0
- package/src/partialLengths.ts +2 -4
- package/src/properties.ts +9 -3
- package/src/segmentPropertiesManager.ts +4 -3
- package/src/textSegment.ts +0 -1
package/lib/mergeTree.js
CHANGED
|
@@ -45,7 +45,7 @@ function addTileIfNotPresent(tile, tiles) {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
function applyStackDelta(currentStackMap, deltaStackMap) {
|
|
48
|
-
// eslint-disable-next-line guard-for-in
|
|
48
|
+
// eslint-disable-next-line guard-for-in, no-restricted-syntax
|
|
49
49
|
for (const label in deltaStackMap) {
|
|
50
50
|
const deltaStack = deltaStackMap[label];
|
|
51
51
|
if (!deltaStack.empty()) {
|
|
@@ -206,7 +206,7 @@ class HierMergeBlock extends MergeBlock {
|
|
|
206
206
|
}
|
|
207
207
|
hierToString(indentCount) {
|
|
208
208
|
let strbuf = "";
|
|
209
|
-
// eslint-disable-next-line guard-for-in
|
|
209
|
+
// eslint-disable-next-line guard-for-in, no-restricted-syntax
|
|
210
210
|
for (const key in this.rangeStacks) {
|
|
211
211
|
const stack = this.rangeStacks[key];
|
|
212
212
|
strbuf += internedSpaces(indentCount);
|
|
@@ -279,6 +279,7 @@ export class BaseSegment extends MergeNode {
|
|
|
279
279
|
this.localSeq = undefined;
|
|
280
280
|
return true;
|
|
281
281
|
case 1 /* REMOVE */:
|
|
282
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
282
283
|
const removalInfo = this;
|
|
283
284
|
assert(!!removalInfo, 0x046 /* "On remove ack, missing removal info!" */);
|
|
284
285
|
assert(!!removalInfo.removedSeq, 0x047 /* "On remove ack, missing removed sequence number!" */);
|
|
@@ -486,6 +487,7 @@ export class Marker extends BaseSegment {
|
|
|
486
487
|
// Avoid circular reference when stringifying makers containing handles.
|
|
487
488
|
// (Substitute a debug string instead.)
|
|
488
489
|
const handle = !!value && value.IFluidHandle;
|
|
490
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
489
491
|
return handle
|
|
490
492
|
? `#Handle(${handle.routeContext.path}/${handle.path})`
|
|
491
493
|
: value;
|
|
@@ -745,6 +747,7 @@ export class MergeTree {
|
|
|
745
747
|
// snapshot header. The bulk of the segments in long documents are inserted via `insertSegments()`.
|
|
746
748
|
this.blockUpdate(block);
|
|
747
749
|
}
|
|
750
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
748
751
|
return blocks.length === 1 // If there is only one block at this layer...
|
|
749
752
|
? blocks[0] // ...then we're done. Return the root.
|
|
750
753
|
: buildMergeBlock(blocks); // ...otherwise recursively build the next layer above blocks.
|
|
@@ -965,8 +968,8 @@ export class MergeTree {
|
|
|
965
968
|
stats.leafCount += childStats.leafCount;
|
|
966
969
|
stats.removedLeafCount += childStats.removedLeafCount;
|
|
967
970
|
stats.liveCount += childStats.liveCount;
|
|
968
|
-
for (let
|
|
969
|
-
stats.histo[
|
|
971
|
+
for (let j = 0; j < MaxNodesInBlock; j++) {
|
|
972
|
+
stats.histo[j] += childStats.histo[j];
|
|
970
973
|
}
|
|
971
974
|
}
|
|
972
975
|
else {
|
|
@@ -1017,7 +1020,7 @@ export class MergeTree {
|
|
|
1017
1020
|
getContainingSegment(pos, refSeq, clientId) {
|
|
1018
1021
|
let segment;
|
|
1019
1022
|
let offset;
|
|
1020
|
-
const leaf = (leafSeg, segpos,
|
|
1023
|
+
const leaf = (leafSeg, segpos, _refSeq, _clientId, start) => {
|
|
1021
1024
|
segment = leafSeg;
|
|
1022
1025
|
offset = start;
|
|
1023
1026
|
return false;
|
|
@@ -1493,7 +1496,7 @@ export class MergeTree {
|
|
|
1493
1496
|
}
|
|
1494
1497
|
blockInsert(pos, refSeq, clientId, seq, localSeq, newSegments) {
|
|
1495
1498
|
let segIsLocal = false;
|
|
1496
|
-
const checkSegmentIsLocal = (segment,
|
|
1499
|
+
const checkSegmentIsLocal = (segment, _pos, _refSeq, _clientId) => {
|
|
1497
1500
|
if (segment.seq === UnassignedSequenceNumber) {
|
|
1498
1501
|
segIsLocal = true;
|
|
1499
1502
|
}
|
|
@@ -1522,7 +1525,7 @@ export class MergeTree {
|
|
|
1522
1525
|
}
|
|
1523
1526
|
}
|
|
1524
1527
|
};
|
|
1525
|
-
const onLeaf = (segment,
|
|
1528
|
+
const onLeaf = (segment, _pos, context) => {
|
|
1526
1529
|
const segmentChanges = {};
|
|
1527
1530
|
if (segment) {
|
|
1528
1531
|
// Insert before segment
|
|
@@ -1594,24 +1597,24 @@ export class MergeTree {
|
|
|
1594
1597
|
while (parent) {
|
|
1595
1598
|
const children = parent.children;
|
|
1596
1599
|
let childIndex;
|
|
1597
|
-
let
|
|
1600
|
+
let _node;
|
|
1598
1601
|
let matchedStart = false;
|
|
1599
1602
|
for (childIndex = parent.childCount - 1; childIndex >= 0; childIndex--) {
|
|
1600
|
-
|
|
1603
|
+
_node = children[childIndex];
|
|
1601
1604
|
if (matchedStart) {
|
|
1602
|
-
if (!
|
|
1603
|
-
const childBlock =
|
|
1605
|
+
if (!_node.isLeaf()) {
|
|
1606
|
+
const childBlock = _node;
|
|
1604
1607
|
go = this.nodeMapReverse(childBlock, leafAction, 0, UniversalSequenceNumber, this.collabWindow.clientId);
|
|
1605
1608
|
}
|
|
1606
1609
|
else {
|
|
1607
|
-
go = leafAction(
|
|
1610
|
+
go = leafAction(_node, 0, UniversalSequenceNumber, this.collabWindow.clientId, 0, 0, undefined);
|
|
1608
1611
|
}
|
|
1609
1612
|
if (!go) {
|
|
1610
1613
|
return;
|
|
1611
1614
|
}
|
|
1612
1615
|
}
|
|
1613
1616
|
else {
|
|
1614
|
-
matchedStart = (startNode ===
|
|
1617
|
+
matchedStart = (startNode === _node);
|
|
1615
1618
|
}
|
|
1616
1619
|
}
|
|
1617
1620
|
startNode = parent;
|
|
@@ -1627,24 +1630,24 @@ export class MergeTree {
|
|
|
1627
1630
|
while (parent) {
|
|
1628
1631
|
const children = parent.children;
|
|
1629
1632
|
let childIndex;
|
|
1630
|
-
let
|
|
1633
|
+
let _node;
|
|
1631
1634
|
let matchedStart = false;
|
|
1632
1635
|
for (childIndex = 0; childIndex < parent.childCount; childIndex++) {
|
|
1633
|
-
|
|
1636
|
+
_node = children[childIndex];
|
|
1634
1637
|
if (matchedStart) {
|
|
1635
|
-
if (!
|
|
1636
|
-
const childBlock =
|
|
1638
|
+
if (!_node.isLeaf()) {
|
|
1639
|
+
const childBlock = _node;
|
|
1637
1640
|
go = this.nodeMap(childBlock, actions, 0, UniversalSequenceNumber, this.collabWindow.clientId, undefined);
|
|
1638
1641
|
}
|
|
1639
1642
|
else {
|
|
1640
|
-
go = leafAction(
|
|
1643
|
+
go = leafAction(_node, 0, UniversalSequenceNumber, this.collabWindow.clientId, 0, 0, undefined);
|
|
1641
1644
|
}
|
|
1642
1645
|
if (!go) {
|
|
1643
1646
|
return;
|
|
1644
1647
|
}
|
|
1645
1648
|
}
|
|
1646
1649
|
else {
|
|
1647
|
-
matchedStart = (startNode ===
|
|
1650
|
+
matchedStart = (startNode === _node);
|
|
1648
1651
|
}
|
|
1649
1652
|
}
|
|
1650
1653
|
startNode = parent;
|
|
@@ -1841,7 +1844,7 @@ export class MergeTree {
|
|
|
1841
1844
|
const removedSegments = [];
|
|
1842
1845
|
const savedLocalRefs = [];
|
|
1843
1846
|
const localSeq = seq === UnassignedSequenceNumber ? ++this.collabWindow.localSeq : undefined;
|
|
1844
|
-
const markRemoved = (segment, pos,
|
|
1847
|
+
const markRemoved = (segment, pos, _start, _end) => {
|
|
1845
1848
|
const removalInfo = segment;
|
|
1846
1849
|
if (removalInfo.removedSeq !== undefined) {
|
|
1847
1850
|
_overwrite = true;
|
|
@@ -1869,8 +1872,8 @@ export class MergeTree {
|
|
|
1869
1872
|
// Save segment so can assign removed sequence number when acked by server
|
|
1870
1873
|
if (this.collabWindow.collaborating) {
|
|
1871
1874
|
// Use removal information
|
|
1872
|
-
const
|
|
1873
|
-
if (
|
|
1875
|
+
const _removalInfo = segment;
|
|
1876
|
+
if (_removalInfo.removedSeq === UnassignedSequenceNumber && clientId === this.collabWindow.clientId) {
|
|
1874
1877
|
segmentGroup = this.addToPendingList(segment, segmentGroup, localSeq);
|
|
1875
1878
|
}
|
|
1876
1879
|
else {
|
|
@@ -1881,7 +1884,7 @@ export class MergeTree {
|
|
|
1881
1884
|
}
|
|
1882
1885
|
return true;
|
|
1883
1886
|
};
|
|
1884
|
-
const afterMarkRemoved = (node, pos,
|
|
1887
|
+
const afterMarkRemoved = (node, pos, _start, _end) => {
|
|
1885
1888
|
if (_overwrite) {
|
|
1886
1889
|
this.nodeUpdateLengthNewStructure(node);
|
|
1887
1890
|
}
|