@fluidframework/merge-tree 2.11.0 → 2.12.0
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/CHANGELOG.md +41 -0
- package/api-report/merge-tree.legacy.alpha.api.md +50 -19
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/attributionPolicy.d.ts.map +1 -1
- package/dist/attributionPolicy.js +2 -1
- package/dist/attributionPolicy.js.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts +3 -3
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +2 -1
- package/dist/localReference.d.ts +1 -0
- package/dist/localReference.d.ts.map +1 -1
- package/dist/localReference.js +1 -0
- package/dist/localReference.js.map +1 -1
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +19 -2
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeNodeWalk.d.ts +5 -5
- package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
- package/dist/mergeTreeNodeWalk.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +115 -7
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +25 -1
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/partialLengths.d.ts +2 -2
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +5 -1
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.d.ts +9 -9
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js.map +1 -1
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +3 -0
- package/dist/revertibles.js.map +1 -1
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts +2 -2
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/sortedSegmentSet.d.ts +4 -4
- package/dist/sortedSegmentSet.d.ts.map +1 -1
- package/dist/sortedSegmentSet.js.map +1 -1
- package/dist/test/beastTest.spec.d.ts.map +1 -1
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.d.ts.map +1 -1
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/snapshot.utils.d.ts +2 -2
- package/dist/test/snapshot.utils.d.ts.map +1 -1
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +6 -6
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testUtils.d.ts +2 -2
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.d.ts +2 -2
- package/dist/test/text.d.ts.map +1 -1
- package/dist/test/text.js.map +1 -1
- package/dist/test/tracking.spec.js.map +1 -1
- package/dist/test/wordUnitTests.spec.d.ts.map +1 -1
- package/dist/test/wordUnitTests.spec.js +3 -1
- package/dist/test/wordUnitTests.spec.js.map +1 -1
- package/dist/zamboni.js.map +1 -1
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/attributionPolicy.d.ts.map +1 -1
- package/lib/attributionPolicy.js +2 -1
- package/lib/attributionPolicy.js.map +1 -1
- package/lib/client.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts +3 -3
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +2 -1
- package/lib/localReference.d.ts +1 -0
- package/lib/localReference.d.ts.map +1 -1
- package/lib/localReference.js +1 -0
- package/lib/localReference.js.map +1 -1
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +22 -3
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeNodeWalk.d.ts +5 -5
- package/lib/mergeTreeNodeWalk.d.ts.map +1 -1
- package/lib/mergeTreeNodeWalk.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +115 -7
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +23 -0
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/partialLengths.d.ts +2 -2
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +5 -1
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.d.ts +9 -9
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js.map +1 -1
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +4 -1
- package/lib/revertibles.js.map +1 -1
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts +2 -2
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/sortedSegmentSet.d.ts +4 -4
- package/lib/sortedSegmentSet.d.ts.map +1 -1
- package/lib/sortedSegmentSet.js.map +1 -1
- package/lib/test/beastTest.spec.d.ts.map +1 -1
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.attributionFarm.spec.d.ts.map +1 -1
- package/lib/test/client.attributionFarm.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/snapshot.utils.d.ts +2 -2
- package/lib/test/snapshot.utils.d.ts.map +1 -1
- package/lib/test/snapshot.utils.js.map +1 -1
- package/lib/test/sortedSegmentSet.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +6 -6
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +1 -1
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testUtils.d.ts +2 -2
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js.map +1 -1
- package/lib/test/text.d.ts +2 -2
- package/lib/test/text.d.ts.map +1 -1
- package/lib/test/text.js.map +1 -1
- package/lib/test/tracking.spec.js.map +1 -1
- package/lib/test/wordUnitTests.spec.d.ts.map +1 -1
- package/lib/test/wordUnitTests.spec.js +3 -1
- package/lib/test/wordUnitTests.spec.js.map +1 -1
- package/lib/zamboni.js.map +1 -1
- package/package.json +17 -17
- package/src/MergeTreeTextHelper.ts +2 -2
- package/src/attributionPolicy.ts +3 -1
- package/src/client.ts +1 -1
- package/src/endOfTreeSegment.ts +6 -3
- package/src/index.ts +1 -0
- package/src/localReference.ts +1 -0
- package/src/mergeTree.ts +19 -0
- package/src/mergeTreeNodeWalk.ts +6 -6
- package/src/mergeTreeNodes.ts +136 -9
- package/src/partialLengths.ts +9 -5
- package/src/perspective.ts +11 -11
- package/src/revertibles.ts +9 -11
- package/src/snapshotLoader.ts +7 -7
- package/src/snapshotV1.ts +4 -4
- package/src/snapshotlegacy.ts +6 -6
- package/src/sortedSegmentSet.ts +8 -9
- package/src/zamboni.ts +2 -2
package/src/revertibles.ts
CHANGED
|
@@ -8,16 +8,12 @@ import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
|
8
8
|
|
|
9
9
|
import { DoublyLinkedList } from "./collections/index.js";
|
|
10
10
|
import { EndOfTreeSegment } from "./endOfTreeSegment.js";
|
|
11
|
+
// eslint-disable-next-line import/no-deprecated
|
|
11
12
|
import { LocalReferenceCollection, LocalReferencePosition } from "./localReference.js";
|
|
12
13
|
import { MergeTree, findRootMergeBlock } from "./mergeTree.js";
|
|
13
14
|
import { IMergeTreeDeltaCallbackArgs } from "./mergeTreeDeltaCallback.js";
|
|
14
15
|
import { depthFirstNodeWalk } from "./mergeTreeNodeWalk.js";
|
|
15
|
-
import {
|
|
16
|
-
ISegment,
|
|
17
|
-
ISegmentInternal,
|
|
18
|
-
toRemovalInfo,
|
|
19
|
-
type ISegmentLeaf,
|
|
20
|
-
} from "./mergeTreeNodes.js";
|
|
16
|
+
import { toRemovalInfo, type ISegmentLeaf } from "./mergeTreeNodes.js";
|
|
21
17
|
import { ITrackingGroup, Trackable, UnorderedTrackingGroup } from "./mergeTreeTracking.js";
|
|
22
18
|
import { IJSONSegment, MergeTreeDeltaType, ReferenceType } from "./ops.js";
|
|
23
19
|
import { PropertySet, matchProperties } from "./properties.js";
|
|
@@ -103,6 +99,7 @@ function findMergeTreeWithRevert(trackable: Trackable): MergeTreeWithRevert {
|
|
|
103
99
|
const refCallbacks: MergeTreeWithRevert["__mergeTreeRevertible"]["refCallbacks"] = {
|
|
104
100
|
afterSlide: (r: LocalReferencePosition) => {
|
|
105
101
|
if (mergeTree.referencePositionToLocalPosition(r) === DetachedReferencePosition) {
|
|
102
|
+
// eslint-disable-next-line import/no-deprecated
|
|
106
103
|
const refs = LocalReferenceCollection.setOrGet(detachedReferences);
|
|
107
104
|
refs.addAfterTombstones([r]);
|
|
108
105
|
}
|
|
@@ -246,7 +243,7 @@ export function discardMergeTreeDeltaRevertible(
|
|
|
246
243
|
t.trackingCollection.unlink(r.trackingGroup);
|
|
247
244
|
// remove untracked local references
|
|
248
245
|
if (t.trackingCollection.empty && !t.isLeaf()) {
|
|
249
|
-
const segment:
|
|
246
|
+
const segment: ISegmentLeaf | undefined = t.getSegment();
|
|
250
247
|
segment?.localRefs?.removeLocalRef(t);
|
|
251
248
|
}
|
|
252
249
|
}
|
|
@@ -287,7 +284,7 @@ function revertLocalRemove(
|
|
|
287
284
|
|
|
288
285
|
assert(!tracked.isLeaf(), 0x3f4 /* removes must track local refs */);
|
|
289
286
|
|
|
290
|
-
const refSeg:
|
|
287
|
+
const refSeg: ISegmentLeaf | undefined = tracked.getSegment();
|
|
291
288
|
let realPos = mergeTreeWithRevert.referencePositionToLocalPosition(tracked);
|
|
292
289
|
|
|
293
290
|
// References which are on EndOfStringSegment don't return detached for pos,
|
|
@@ -340,7 +337,7 @@ function revertLocalRemove(
|
|
|
340
337
|
insertSegment.parent!,
|
|
341
338
|
insertSegment,
|
|
342
339
|
undefined,
|
|
343
|
-
(seg:
|
|
340
|
+
(seg: ISegmentLeaf) => {
|
|
344
341
|
if (seg.localRefs?.empty === false) {
|
|
345
342
|
return seg.localRefs.walkReferences(refHandler, undefined, forward);
|
|
346
343
|
}
|
|
@@ -359,6 +356,7 @@ function revertLocalRemove(
|
|
|
359
356
|
}
|
|
360
357
|
|
|
361
358
|
if (insertRef !== undefined) {
|
|
359
|
+
// eslint-disable-next-line import/no-deprecated
|
|
362
360
|
const localRefs = LocalReferenceCollection.setOrGet(insertSegment);
|
|
363
361
|
if (insertRef.before?.empty === false) {
|
|
364
362
|
localRefs.addBeforeTombstones(insertRef.before.map((n) => n.data));
|
|
@@ -372,7 +370,7 @@ function revertLocalRemove(
|
|
|
372
370
|
tg.link(insertSegment);
|
|
373
371
|
tg.unlink(tracked);
|
|
374
372
|
}
|
|
375
|
-
const segment:
|
|
373
|
+
const segment: ISegmentLeaf | undefined = tracked.getSegment();
|
|
376
374
|
segment?.localRefs?.removeLocalRef(tracked);
|
|
377
375
|
}
|
|
378
376
|
}
|
|
@@ -393,7 +391,7 @@ function revertLocalAnnotate(
|
|
|
393
391
|
}
|
|
394
392
|
}
|
|
395
393
|
|
|
396
|
-
function getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment:
|
|
394
|
+
function getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegmentLeaf): number {
|
|
397
395
|
return mergeTreeWithRevert.getPosition(
|
|
398
396
|
segment,
|
|
399
397
|
mergeTreeWithRevert.collabWindow.currentSeq,
|
package/src/snapshotLoader.ts
CHANGED
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
import { Client } from "./client.js";
|
|
25
25
|
import { NonCollabClient, UniversalSequenceNumber } from "./constants.js";
|
|
26
26
|
import { MergeTree } from "./mergeTree.js";
|
|
27
|
-
import {
|
|
27
|
+
import { ISegmentLeaf } from "./mergeTreeNodes.js";
|
|
28
28
|
import { IJSONSegment } from "./ops.js";
|
|
29
29
|
import {
|
|
30
30
|
IJSONSegmentWithMergeInfo,
|
|
@@ -96,8 +96,8 @@ export class SnapshotLoader {
|
|
|
96
96
|
|
|
97
97
|
private readonly specToSegment = (
|
|
98
98
|
spec: IJSONSegment | IJSONSegmentWithMergeInfo,
|
|
99
|
-
):
|
|
100
|
-
let seg:
|
|
99
|
+
): ISegmentLeaf => {
|
|
100
|
+
let seg: ISegmentLeaf;
|
|
101
101
|
|
|
102
102
|
if (hasMergeInfo(spec)) {
|
|
103
103
|
seg = this.client.specToSegment(spec.json);
|
|
@@ -207,7 +207,7 @@ export class SnapshotLoader {
|
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
let chunksWithAttribution = chunk1.attribution === undefined ? 0 : 1;
|
|
210
|
-
const segs:
|
|
210
|
+
const segs: ISegmentLeaf[] = [];
|
|
211
211
|
let lengthSofar = chunk1.length;
|
|
212
212
|
for (
|
|
213
213
|
let chunkIndex = 1;
|
|
@@ -244,7 +244,7 @@ export class SnapshotLoader {
|
|
|
244
244
|
|
|
245
245
|
// Helper to insert segments at the end of the MergeTree.
|
|
246
246
|
const mergeTree = this.mergeTree;
|
|
247
|
-
const append = (segments:
|
|
247
|
+
const append = (segments: ISegmentLeaf[], cli: number, seq: number): void => {
|
|
248
248
|
mergeTree.insertSegments(
|
|
249
249
|
mergeTree.root.cachedLength ?? 0,
|
|
250
250
|
segments,
|
|
@@ -256,7 +256,7 @@ export class SnapshotLoader {
|
|
|
256
256
|
};
|
|
257
257
|
|
|
258
258
|
// Helpers to batch-insert segments that are below the min seq
|
|
259
|
-
const batch:
|
|
259
|
+
const batch: ISegmentLeaf[] = [];
|
|
260
260
|
const flushBatch = (): void => {
|
|
261
261
|
if (batch.length > 0) {
|
|
262
262
|
append(batch, NonCollabClient, UniversalSequenceNumber);
|
|
@@ -280,7 +280,7 @@ export class SnapshotLoader {
|
|
|
280
280
|
flushBatch();
|
|
281
281
|
}
|
|
282
282
|
|
|
283
|
-
private extractAttribution(segments:
|
|
283
|
+
private extractAttribution(segments: ISegmentLeaf[], chunk: MergeTreeChunkV1): void {
|
|
284
284
|
if (chunk.attribution) {
|
|
285
285
|
const { attributionPolicy } = this.mergeTree;
|
|
286
286
|
if (attributionPolicy === undefined) {
|
package/src/snapshotV1.ts
CHANGED
|
@@ -22,7 +22,7 @@ import { IAttributionCollection } from "./attributionCollection.js";
|
|
|
22
22
|
import { UnassignedSequenceNumber } from "./constants.js";
|
|
23
23
|
import { MergeTree } from "./mergeTree.js";
|
|
24
24
|
import { walkAllChildSegments } from "./mergeTreeNodeWalk.js";
|
|
25
|
-
import {
|
|
25
|
+
import { ISegmentLeaf } from "./mergeTreeNodes.js";
|
|
26
26
|
import type { IJSONSegment } from "./ops.js";
|
|
27
27
|
import { PropertySet, matchProperties } from "./properties.js";
|
|
28
28
|
import {
|
|
@@ -208,7 +208,7 @@ export class SnapshotV1 {
|
|
|
208
208
|
};
|
|
209
209
|
|
|
210
210
|
// Helper to serialize the given `segment` and add it to the snapshot (if a segment is provided).
|
|
211
|
-
const pushSeg = (segment?:
|
|
211
|
+
const pushSeg = (segment?: ISegmentLeaf): void => {
|
|
212
212
|
if (segment) {
|
|
213
213
|
if (segment.properties !== undefined && Object.keys(segment.properties).length === 0) {
|
|
214
214
|
segment.properties = undefined;
|
|
@@ -221,8 +221,8 @@ export class SnapshotV1 {
|
|
|
221
221
|
}
|
|
222
222
|
};
|
|
223
223
|
|
|
224
|
-
let prev:
|
|
225
|
-
const extractSegment = (segment:
|
|
224
|
+
let prev: ISegmentLeaf | undefined;
|
|
225
|
+
const extractSegment = (segment: ISegmentLeaf): boolean => {
|
|
226
226
|
// Elide segments that do not need to be included in the snapshot. A segment may be elided if
|
|
227
227
|
// either condition is true:
|
|
228
228
|
// a) The segment has not yet been ACKed. We do not need to snapshot unACKed segments because
|
package/src/snapshotlegacy.ts
CHANGED
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
|
|
19
19
|
import { NonCollabClient, UnassignedSequenceNumber } from "./constants.js";
|
|
20
20
|
import { MergeTree } from "./mergeTree.js";
|
|
21
|
-
import {
|
|
21
|
+
import { type ISegmentLeaf } from "./mergeTreeNodes.js";
|
|
22
22
|
import { matchProperties } from "./properties.js";
|
|
23
23
|
import {
|
|
24
24
|
JsonSegmentSpecs,
|
|
@@ -55,7 +55,7 @@ export class SnapshotLegacy {
|
|
|
55
55
|
|
|
56
56
|
private header: SnapshotHeader | undefined;
|
|
57
57
|
private seq: number | undefined;
|
|
58
|
-
private segments:
|
|
58
|
+
private segments: ISegmentLeaf[] | undefined;
|
|
59
59
|
private readonly logger: ITelemetryLoggerExt;
|
|
60
60
|
private readonly chunkSize: number;
|
|
61
61
|
|
|
@@ -71,11 +71,11 @@ export class SnapshotLegacy {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
private getSeqLengthSegs(
|
|
74
|
-
allSegments:
|
|
74
|
+
allSegments: ISegmentLeaf[],
|
|
75
75
|
approxSequenceLength: number,
|
|
76
76
|
startIndex = 0,
|
|
77
77
|
): MergeTreeChunkLegacy {
|
|
78
|
-
const segs:
|
|
78
|
+
const segs: ISegmentLeaf[] = [];
|
|
79
79
|
let sequenceLength = 0;
|
|
80
80
|
let segCount = 0;
|
|
81
81
|
let segsWithAttribution = 0;
|
|
@@ -191,7 +191,7 @@ export class SnapshotLegacy {
|
|
|
191
191
|
return builder.getSummaryTree();
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
-
extractSync():
|
|
194
|
+
extractSync(): ISegmentLeaf[] {
|
|
195
195
|
const collabWindow = this.mergeTree.collabWindow;
|
|
196
196
|
const seq = (this.seq = collabWindow.minSeq);
|
|
197
197
|
this.header = {
|
|
@@ -204,7 +204,7 @@ export class SnapshotLegacy {
|
|
|
204
204
|
|
|
205
205
|
let originalSegments = 0;
|
|
206
206
|
|
|
207
|
-
const segs:
|
|
207
|
+
const segs: ISegmentLeaf[] = [];
|
|
208
208
|
let prev: ISegmentLeaf | undefined;
|
|
209
209
|
const extractSegment = (
|
|
210
210
|
segment: ISegmentLeaf,
|
package/src/sortedSegmentSet.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { LocalReferencePosition } from "./localReference.js";
|
|
7
|
-
import {
|
|
7
|
+
import { ISegmentInternal } from "./mergeTreeNodes.js";
|
|
8
8
|
// eslint-disable-next-line import/no-deprecated
|
|
9
9
|
import { SortedSet } from "./sortedSet.js";
|
|
10
10
|
|
|
@@ -12,9 +12,9 @@ import { SortedSet } from "./sortedSet.js";
|
|
|
12
12
|
* @internal
|
|
13
13
|
*/
|
|
14
14
|
export type SortedSegmentSetItem =
|
|
15
|
-
|
|
|
15
|
+
| ISegmentInternal
|
|
16
16
|
| LocalReferencePosition
|
|
17
|
-
| { readonly segment:
|
|
17
|
+
| { readonly segment: ISegmentInternal };
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Stores a unique and sorted set of segments, or objects with segments
|
|
@@ -29,10 +29,9 @@ export type SortedSegmentSetItem =
|
|
|
29
29
|
* @internal
|
|
30
30
|
*/
|
|
31
31
|
// eslint-disable-next-line import/no-deprecated
|
|
32
|
-
export class SortedSegmentSet<
|
|
33
|
-
T,
|
|
34
|
-
|
|
35
|
-
> {
|
|
32
|
+
export class SortedSegmentSet<
|
|
33
|
+
T extends SortedSegmentSetItem = ISegmentInternal,
|
|
34
|
+
> extends SortedSet<T, string> {
|
|
36
35
|
protected getKey(item: T): string {
|
|
37
36
|
const maybeRef = item as Partial<LocalReferencePosition>;
|
|
38
37
|
if (maybeRef.getSegment !== undefined && maybeRef.isLeaf?.() === false) {
|
|
@@ -43,12 +42,12 @@ export class SortedSegmentSet<T extends SortedSegmentSetItem = ISegment> extends
|
|
|
43
42
|
// All that matters is that it's consistent.
|
|
44
43
|
return lref.getSegment()?.ordinal ?? "";
|
|
45
44
|
}
|
|
46
|
-
const maybeObject = item as { readonly segment:
|
|
45
|
+
const maybeObject = item as { readonly segment: ISegmentInternal };
|
|
47
46
|
if (maybeObject?.segment) {
|
|
48
47
|
return maybeObject.segment.ordinal;
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
const maybeSegment = item as
|
|
50
|
+
const maybeSegment = item as ISegmentInternal;
|
|
52
51
|
return maybeSegment.ordinal;
|
|
53
52
|
}
|
|
54
53
|
|
package/src/zamboni.ts
CHANGED
|
@@ -11,7 +11,7 @@ import { MergeTreeMaintenanceType } from "./mergeTreeDeltaCallback.js";
|
|
|
11
11
|
import {
|
|
12
12
|
type MergeBlock,
|
|
13
13
|
IMergeNode,
|
|
14
|
-
|
|
14
|
+
ISegmentLeaf,
|
|
15
15
|
Marker,
|
|
16
16
|
MaxNodesInBlock,
|
|
17
17
|
seqLTE,
|
|
@@ -136,7 +136,7 @@ export function packParent(parent: MergeBlock, mergeTree: MergeTree): void {
|
|
|
136
136
|
function scourNode(node: MergeBlock, holdNodes: IMergeNode[], mergeTree: MergeTree): void {
|
|
137
137
|
// The previous segment is tracked while scouring for the purposes of merging adjacent segments
|
|
138
138
|
// when possible.
|
|
139
|
-
let prevSegment:
|
|
139
|
+
let prevSegment: ISegmentLeaf | undefined;
|
|
140
140
|
for (let k = 0; k < node.childCount; k++) {
|
|
141
141
|
// TODO Non null asserting, why is this not null?
|
|
142
142
|
const childNode = node.children[k]!;
|