@fluidframework/merge-tree 2.3.0 → 2.4.0-294316
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/api-report/merge-tree.legacy.alpha.api.md +0 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +0 -1
- package/dist/client.js.map +1 -1
- package/dist/mergeTree.d.ts +1 -2
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +10 -36
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +0 -9
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/test/obliterate.partialLength.spec.js +8 -4
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +12 -6
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +1 -11
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +0 -3
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testUtils.d.ts +10 -0
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +5 -1
- package/dist/test/testUtils.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +0 -1
- package/lib/client.js.map +1 -1
- package/lib/mergeTree.d.ts +1 -2
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +10 -36
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +0 -9
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/test/obliterate.partialLength.spec.js +9 -5
- package/lib/test/obliterate.partialLength.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +13 -7
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +1 -11
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +0 -3
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testUtils.d.ts +10 -0
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js +3 -0
- package/lib/test/testUtils.js.map +1 -1
- package/package.json +16 -16
- package/src/client.ts +5 -2
- package/src/mergeTree.ts +16 -63
- package/src/mergeTreeNodes.ts +0 -9
package/src/mergeTree.ts
CHANGED
|
@@ -90,7 +90,6 @@ import {
|
|
|
90
90
|
} from "./referencePositions.js";
|
|
91
91
|
// eslint-disable-next-line import/no-deprecated
|
|
92
92
|
import { PropertiesRollback } from "./segmentPropertiesManager.js";
|
|
93
|
-
import { endpointPosAndSide, type SequencePlace } from "./sequencePlace.js";
|
|
94
93
|
import { SortedSegmentSet } from "./sortedSegmentSet.js";
|
|
95
94
|
import { zamboniSegments } from "./zamboni.js";
|
|
96
95
|
|
|
@@ -1601,11 +1600,7 @@ export class MergeTree {
|
|
|
1601
1600
|
return { next };
|
|
1602
1601
|
};
|
|
1603
1602
|
|
|
1604
|
-
private ensureIntervalBoundary(
|
|
1605
|
-
pos: number | "start" | "end",
|
|
1606
|
-
refSeq: number,
|
|
1607
|
-
clientId: number,
|
|
1608
|
-
): void {
|
|
1603
|
+
private ensureIntervalBoundary(pos: number, refSeq: number, clientId: number): void {
|
|
1609
1604
|
const splitNode = this.insertingWalk(
|
|
1610
1605
|
this.root,
|
|
1611
1606
|
pos,
|
|
@@ -1649,21 +1644,14 @@ export class MergeTree {
|
|
|
1649
1644
|
|
|
1650
1645
|
private insertingWalk(
|
|
1651
1646
|
block: MergeBlock,
|
|
1652
|
-
pos: number
|
|
1647
|
+
pos: number,
|
|
1653
1648
|
refSeq: number,
|
|
1654
1649
|
clientId: number,
|
|
1655
1650
|
seq: number,
|
|
1656
1651
|
context: InsertContext,
|
|
1657
1652
|
isLastChildBlock: boolean = true,
|
|
1658
1653
|
): MergeBlock | undefined {
|
|
1659
|
-
let _pos: number;
|
|
1660
|
-
if (pos === "start") {
|
|
1661
|
-
_pos = 0;
|
|
1662
|
-
} else if (pos === "end") {
|
|
1663
|
-
_pos = this.root.mergeTree?.getLength(refSeq, clientId) ?? 0;
|
|
1664
|
-
} else {
|
|
1665
|
-
_pos = pos;
|
|
1666
|
-
}
|
|
1654
|
+
let _pos: number = pos;
|
|
1667
1655
|
|
|
1668
1656
|
const children = block.children;
|
|
1669
1657
|
let childIndex: number;
|
|
@@ -1879,8 +1867,8 @@ export class MergeTree {
|
|
|
1879
1867
|
}
|
|
1880
1868
|
|
|
1881
1869
|
public obliterateRange(
|
|
1882
|
-
start:
|
|
1883
|
-
end:
|
|
1870
|
+
start: number,
|
|
1871
|
+
end: number,
|
|
1884
1872
|
refSeq: number,
|
|
1885
1873
|
clientId: number,
|
|
1886
1874
|
seq: number,
|
|
@@ -1889,20 +1877,8 @@ export class MergeTree {
|
|
|
1889
1877
|
): void {
|
|
1890
1878
|
errorIfOptionNotTrue(this.options, "mergeTreeEnableObliterate");
|
|
1891
1879
|
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
assert(
|
|
1895
|
-
startPos !== undefined &&
|
|
1896
|
-
endPos !== undefined &&
|
|
1897
|
-
startSide !== undefined &&
|
|
1898
|
-
endSide !== undefined &&
|
|
1899
|
-
startPos !== "end" &&
|
|
1900
|
-
endPos !== "start",
|
|
1901
|
-
0x9e2 /* start and end cannot be undefined because they were not passed in as undefined */,
|
|
1902
|
-
);
|
|
1903
|
-
|
|
1904
|
-
this.ensureIntervalBoundary(startPos, refSeq, clientId);
|
|
1905
|
-
this.ensureIntervalBoundary(endPos, refSeq, clientId);
|
|
1880
|
+
this.ensureIntervalBoundary(start, refSeq, clientId);
|
|
1881
|
+
this.ensureIntervalBoundary(end, refSeq, clientId);
|
|
1906
1882
|
|
|
1907
1883
|
let _overwrite = overwrite;
|
|
1908
1884
|
const localOverlapWithRefs: ISegment[] = [];
|
|
@@ -1919,20 +1895,9 @@ export class MergeTree {
|
|
|
1919
1895
|
localSeq,
|
|
1920
1896
|
segmentGroup: undefined,
|
|
1921
1897
|
};
|
|
1922
|
-
const normalizedStartPos = startPos === "start" || startPos === undefined ? 0 : startPos;
|
|
1923
|
-
const normalizedEndPos =
|
|
1924
|
-
endPos === "end" || endPos === undefined ? this.getLength(refSeq, clientId) : endPos;
|
|
1925
1898
|
|
|
1926
|
-
const { segment: startSeg } = this.getContainingSegment(
|
|
1927
|
-
|
|
1928
|
-
refSeq,
|
|
1929
|
-
clientId,
|
|
1930
|
-
);
|
|
1931
|
-
const { segment: endSeg } = this.getContainingSegment(
|
|
1932
|
-
normalizedEndPos - 1,
|
|
1933
|
-
refSeq,
|
|
1934
|
-
clientId,
|
|
1935
|
-
);
|
|
1899
|
+
const { segment: startSeg } = this.getContainingSegment(start, refSeq, clientId);
|
|
1900
|
+
const { segment: endSeg } = this.getContainingSegment(end - 1, refSeq, clientId);
|
|
1936
1901
|
assert(
|
|
1937
1902
|
startSeg !== undefined && endSeg !== undefined,
|
|
1938
1903
|
0xa3f /* segments cannot be undefined */,
|
|
@@ -2684,28 +2649,18 @@ export class MergeTree {
|
|
|
2684
2649
|
leaf: ISegmentAction<TClientData>,
|
|
2685
2650
|
accum: TClientData,
|
|
2686
2651
|
post?: BlockAction<TClientData>,
|
|
2687
|
-
start:
|
|
2688
|
-
end?:
|
|
2652
|
+
start: number = 0,
|
|
2653
|
+
end?: number,
|
|
2689
2654
|
localSeq?: number,
|
|
2690
2655
|
visibilitySeq: number = refSeq,
|
|
2691
2656
|
): void {
|
|
2692
|
-
const
|
|
2693
|
-
if (
|
|
2657
|
+
const endPos = end ?? this.nodeLength(this.root, refSeq, clientId, localSeq) ?? 0;
|
|
2658
|
+
if (endPos === start) {
|
|
2694
2659
|
return;
|
|
2695
2660
|
}
|
|
2696
2661
|
|
|
2697
2662
|
let pos = 0;
|
|
2698
|
-
let { startPos, endPos } = endpointPosAndSide(start, end);
|
|
2699
2663
|
|
|
2700
|
-
startPos = startPos === "start" || startPos === undefined ? 0 : startPos;
|
|
2701
|
-
endPos =
|
|
2702
|
-
endPos === "end" || endPos === undefined
|
|
2703
|
-
? this.root.mergeTree?.getLength(refSeq, clientId) ?? 0
|
|
2704
|
-
: endPos;
|
|
2705
|
-
assert(
|
|
2706
|
-
startPos !== "end" && endPos !== "start",
|
|
2707
|
-
0x9e3 /* start cannot be 'end' and end cannot be 'start' */,
|
|
2708
|
-
);
|
|
2709
2664
|
depthFirstNodeWalk(
|
|
2710
2665
|
this.root,
|
|
2711
2666
|
this.root.children[0],
|
|
@@ -2733,15 +2688,13 @@ export class MergeTree {
|
|
|
2733
2688
|
|
|
2734
2689
|
const nextPos = pos + lenAtRefSeq;
|
|
2735
2690
|
// start is beyond the current node, so we can skip it
|
|
2736
|
-
if (
|
|
2691
|
+
if (start >= nextPos) {
|
|
2737
2692
|
pos = nextPos;
|
|
2738
2693
|
return NodeAction.Skip;
|
|
2739
2694
|
}
|
|
2740
2695
|
|
|
2741
2696
|
if (node.isLeaf()) {
|
|
2742
|
-
if (
|
|
2743
|
-
leaf(node, pos, refSeq, clientId, startPos - pos, endPos - pos, accum) === false
|
|
2744
|
-
) {
|
|
2697
|
+
if (leaf(node, pos, refSeq, clientId, start - pos, endPos - pos, accum) === false) {
|
|
2745
2698
|
return NodeAction.Exit;
|
|
2746
2699
|
}
|
|
2747
2700
|
pos = nextPos;
|
|
@@ -2751,7 +2704,7 @@ export class MergeTree {
|
|
|
2751
2704
|
post === undefined
|
|
2752
2705
|
? undefined
|
|
2753
2706
|
: (block): boolean =>
|
|
2754
|
-
post(block, pos, refSeq, clientId,
|
|
2707
|
+
post(block, pos, refSeq, clientId, start - pos, endPos - pos, accum),
|
|
2755
2708
|
);
|
|
2756
2709
|
}
|
|
2757
2710
|
}
|
package/src/mergeTreeNodes.ts
CHANGED
|
@@ -30,7 +30,6 @@ import {
|
|
|
30
30
|
import { SegmentGroupCollection } from "./segmentGroupCollection.js";
|
|
31
31
|
// eslint-disable-next-line import/no-deprecated
|
|
32
32
|
import { PropertiesManager, PropertiesRollback } from "./segmentPropertiesManager.js";
|
|
33
|
-
import { Side } from "./sequencePlace.js";
|
|
34
33
|
|
|
35
34
|
/**
|
|
36
35
|
* Common properties for a node in a merge tree.
|
|
@@ -263,14 +262,6 @@ export interface ISegment extends IMergeNodeCommon, Partial<IRemovalInfo>, Parti
|
|
|
263
262
|
* Properties that have been added to this segment via annotation.
|
|
264
263
|
*/
|
|
265
264
|
properties?: PropertySet;
|
|
266
|
-
/**
|
|
267
|
-
* Stores side information passed to obliterate for the start of a range.
|
|
268
|
-
*/
|
|
269
|
-
startSide?: Side.Before | Side.After;
|
|
270
|
-
/**
|
|
271
|
-
* Stores side information passed to obliterate for the end of a range.
|
|
272
|
-
*/
|
|
273
|
-
endSide?: Side.Before | Side.After;
|
|
274
265
|
|
|
275
266
|
/**
|
|
276
267
|
* Add properties to this segment via annotation.
|