@fluidframework/merge-tree 0.53.0 → 0.54.2

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.
@@ -236,7 +236,7 @@ export class PartialSequenceLengths {
236
236
  PartialSequenceLengths.insertSegment(combinedPartialLengths, segment);
237
237
  }
238
238
  }
239
- const removalInfo = mergeTree.getRemovalInfo(segment);
239
+ const removalInfo: IRemovalInfo = segment;
240
240
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
241
241
  if (seqLTE(removalInfo.removedSeq!, collabWindow.minSeq)) {
242
242
  combinedPartialLengths.minLength -= segment.cachedLength;
@@ -425,7 +425,7 @@ export class PartialSequenceLengths {
425
425
  segCount += branchPartialLengths.segmentCount;
426
426
  } else {
427
427
  const segment = child;
428
- const removalInfo = mergeTree.getRemovalInfo(segment);
428
+ const removalInfo: IRemovalInfo = segment;
429
429
 
430
430
  if (segment.seq === seq) {
431
431
  if (removalInfo.removedSeq !== seq) {
@@ -9,6 +9,16 @@ import { IJSONSegment } from "./ops";
9
9
  import { PropertySet } from "./properties";
10
10
  import { LocalReferenceCollection } from "./localReference";
11
11
 
12
+ // Maximum length of text segment to be considered to be merged with other segment.
13
+ // Maximum segment length is at least 2x of it (not taking into account initial segment creation).
14
+ // The bigger it is, the more expensive it is to break segment into sub-segments (on edits)
15
+ // The smaller it is, the more segments we have in snapshots (and in memory) - it's more expensive to load snapshots.
16
+ // Small number also makes ReplayTool produce false positives ("same" snapshots have slightly different binary
17
+ // representations). More measurements needs to be done, but it's very likely the right spot is somewhere between
18
+ // 1K-2K mark. That said, we also break segments on newline and there are very few segments that are longer than 256
19
+ // because of it. Must be an even number
20
+ const TextSegmentGranularity = 256;
21
+
12
22
  export interface IJSONTextSegment extends IJSONSegment {
13
23
  text: string;
14
24
  }
@@ -63,8 +73,8 @@ export class TextSegment extends BaseSegment {
63
73
  public canAppend(segment: ISegment): boolean {
64
74
  return !this.text.endsWith("\n")
65
75
  && TextSegment.is(segment)
66
- && (this.cachedLength <= MergeTree.TextSegmentGranularity ||
67
- segment.cachedLength <= MergeTree.TextSegmentGranularity);
76
+ && (this.cachedLength <= TextSegmentGranularity ||
77
+ segment.cachedLength <= TextSegmentGranularity);
68
78
  }
69
79
 
70
80
  public toString() {