@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.
Files changed (49) hide show
  1. package/api-report/merge-tree.legacy.alpha.api.md +0 -2
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +0 -1
  4. package/dist/client.js.map +1 -1
  5. package/dist/mergeTree.d.ts +1 -2
  6. package/dist/mergeTree.d.ts.map +1 -1
  7. package/dist/mergeTree.js +10 -36
  8. package/dist/mergeTree.js.map +1 -1
  9. package/dist/mergeTreeNodes.d.ts +0 -9
  10. package/dist/mergeTreeNodes.d.ts.map +1 -1
  11. package/dist/mergeTreeNodes.js.map +1 -1
  12. package/dist/test/obliterate.partialLength.spec.js +8 -4
  13. package/dist/test/obliterate.partialLength.spec.js.map +1 -1
  14. package/dist/test/obliterate.spec.js +12 -6
  15. package/dist/test/obliterate.spec.js.map +1 -1
  16. package/dist/test/testClient.d.ts +1 -11
  17. package/dist/test/testClient.d.ts.map +1 -1
  18. package/dist/test/testClient.js +0 -3
  19. package/dist/test/testClient.js.map +1 -1
  20. package/dist/test/testUtils.d.ts +10 -0
  21. package/dist/test/testUtils.d.ts.map +1 -1
  22. package/dist/test/testUtils.js +5 -1
  23. package/dist/test/testUtils.js.map +1 -1
  24. package/lib/client.d.ts.map +1 -1
  25. package/lib/client.js +0 -1
  26. package/lib/client.js.map +1 -1
  27. package/lib/mergeTree.d.ts +1 -2
  28. package/lib/mergeTree.d.ts.map +1 -1
  29. package/lib/mergeTree.js +10 -36
  30. package/lib/mergeTree.js.map +1 -1
  31. package/lib/mergeTreeNodes.d.ts +0 -9
  32. package/lib/mergeTreeNodes.d.ts.map +1 -1
  33. package/lib/mergeTreeNodes.js.map +1 -1
  34. package/lib/test/obliterate.partialLength.spec.js +9 -5
  35. package/lib/test/obliterate.partialLength.spec.js.map +1 -1
  36. package/lib/test/obliterate.spec.js +13 -7
  37. package/lib/test/obliterate.spec.js.map +1 -1
  38. package/lib/test/testClient.d.ts +1 -11
  39. package/lib/test/testClient.d.ts.map +1 -1
  40. package/lib/test/testClient.js +0 -3
  41. package/lib/test/testClient.js.map +1 -1
  42. package/lib/test/testUtils.d.ts +10 -0
  43. package/lib/test/testUtils.d.ts.map +1 -1
  44. package/lib/test/testUtils.js +3 -0
  45. package/lib/test/testUtils.js.map +1 -1
  46. package/package.json +16 -16
  47. package/src/client.ts +5 -2
  48. package/src/mergeTree.ts +16 -63
  49. 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 | "start" | "end",
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: SequencePlace,
1883
- end: SequencePlace,
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
- const { startPos, startSide, endPos, endSide } = endpointPosAndSide(start, end);
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
- normalizedStartPos,
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: SequencePlace = 0,
2688
- end?: SequencePlace,
2652
+ start: number = 0,
2653
+ end?: number,
2689
2654
  localSeq?: number,
2690
2655
  visibilitySeq: number = refSeq,
2691
2656
  ): void {
2692
- const maybeEndPos = end ?? this.nodeLength(this.root, refSeq, clientId, localSeq) ?? 0;
2693
- if (maybeEndPos === start) {
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 (typeof startPos === "number" && startPos >= nextPos) {
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, startPos - pos, endPos - pos, accum),
2707
+ post(block, pos, refSeq, clientId, start - pos, endPos - pos, accum),
2755
2708
  );
2756
2709
  }
2757
2710
  }
@@ -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.