@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.
- package/dist/client.d.ts +1 -1
- package/dist/mergeTree.d.ts +27 -33
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +61 -60
- package/dist/mergeTree.js.map +1 -1
- package/dist/partialLengths.js +2 -2
- package/dist/partialLengths.js.map +1 -1
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js +11 -2
- package/dist/textSegment.js.map +1 -1
- package/lib/client.d.ts +1 -1
- package/lib/mergeTree.d.ts +27 -33
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +61 -60
- package/lib/mergeTree.js.map +1 -1
- package/lib/partialLengths.js +2 -2
- package/lib/partialLengths.js.map +1 -1
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js +11 -2
- package/lib/textSegment.js.map +1 -1
- package/package.json +7 -7
- package/src/mergeTree.ts +240 -166
- package/src/partialLengths.ts +2 -2
- package/src/textSegment.ts +12 -2
package/src/partialLengths.ts
CHANGED
|
@@ -236,7 +236,7 @@ export class PartialSequenceLengths {
|
|
|
236
236
|
PartialSequenceLengths.insertSegment(combinedPartialLengths, segment);
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
|
-
const removalInfo =
|
|
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 =
|
|
428
|
+
const removalInfo: IRemovalInfo = segment;
|
|
429
429
|
|
|
430
430
|
if (segment.seq === seq) {
|
|
431
431
|
if (removalInfo.removedSeq !== seq) {
|
package/src/textSegment.ts
CHANGED
|
@@ -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 <=
|
|
67
|
-
segment.cachedLength <=
|
|
76
|
+
&& (this.cachedLength <= TextSegmentGranularity ||
|
|
77
|
+
segment.cachedLength <= TextSegmentGranularity);
|
|
68
78
|
}
|
|
69
79
|
|
|
70
80
|
public toString() {
|