@fluidframework/merge-tree 2.30.0 → 2.31.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 +403 -399
- package/api-report/merge-tree.legacy.alpha.api.md +1 -0
- package/dist/MergeTreeTextHelper.d.ts +9 -3
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js +5 -5
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/client.d.ts +7 -13
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +136 -110
- package/dist/client.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts +12 -8
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +2 -4
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/mergeTree.d.ts +37 -23
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +400 -483
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeDeltaCallback.d.ts +4 -8
- package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/dist/mergeTreeDeltaCallback.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +32 -10
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +43 -28
- 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 +181 -109
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.d.ts +8 -27
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +7 -67
- package/dist/perspective.js.map +1 -1
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +2 -2
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentInfos.d.ts +20 -106
- package/dist/segmentInfos.d.ts.map +1 -1
- package/dist/segmentInfos.js +28 -42
- package/dist/segmentInfos.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts +1 -14
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +3 -17
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +62 -19
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +55 -24
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +6 -9
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/stamps.d.ts +1 -1
- package/dist/stamps.js +1 -1
- package/dist/stamps.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js +6 -51
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/PartialLengths.perf.spec.js +18 -25
- package/dist/test/PartialLengths.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js +13 -41
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/beastTest.spec.d.ts.map +1 -1
- package/dist/test/beastTest.spec.js +41 -66
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.annotateMarker.spec.js +1 -11
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +14 -14
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +1 -1
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +1 -1
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +49 -58
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js +1 -1
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +4 -21
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/index.d.ts +2 -2
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +2 -6
- package/dist/test/index.js.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +14 -59
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +47 -63
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +9 -62
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +59 -125
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +12 -93
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +10 -7
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +2 -14
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +2 -2
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +18 -23
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.partialLength.spec.js +166 -136
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +16 -126
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/partialLength.spec.js +28 -196
- package/dist/test/partialLength.spec.js.map +1 -1
- package/dist/test/perspective.spec.js +34 -0
- package/dist/test/perspective.spec.js.map +1 -1
- package/dist/test/propertyManager.spec.js +1 -1
- package/dist/test/propertyManager.spec.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +0 -2
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js +10 -4
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +1 -0
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +16 -26
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +3 -10
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testServer.d.ts +2 -1
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js +7 -5
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +36 -56
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +68 -77
- 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 +5 -2
- package/dist/test/text.js.map +1 -1
- package/dist/textSegment.d.ts +0 -6
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js.map +1 -1
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js +53 -26
- package/dist/zamboni.js.map +1 -1
- package/lib/MergeTreeTextHelper.d.ts +9 -3
- package/lib/MergeTreeTextHelper.d.ts.map +1 -1
- package/lib/MergeTreeTextHelper.js +5 -5
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/client.d.ts +7 -13
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +117 -116
- package/lib/client.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts +12 -8
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js +2 -4
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/index.d.ts +6 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/mergeTree.d.ts +37 -23
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +381 -488
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeDeltaCallback.d.ts +4 -8
- package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/lib/mergeTreeDeltaCallback.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +32 -10
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +42 -29
- 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 +160 -111
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.d.ts +8 -27
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +8 -68
- package/lib/perspective.js.map +1 -1
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +2 -2
- package/lib/revertibles.js.map +1 -1
- package/lib/segmentInfos.d.ts +20 -106
- package/lib/segmentInfos.d.ts.map +1 -1
- package/lib/segmentInfos.js +26 -37
- package/lib/segmentInfos.js.map +1 -1
- package/lib/segmentPropertiesManager.d.ts +1 -14
- package/lib/segmentPropertiesManager.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +2 -16
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotLoader.d.ts.map +1 -1
- package/lib/snapshotLoader.js +39 -19
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js +34 -26
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js +7 -10
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/stamps.d.ts +1 -1
- package/lib/stamps.js +1 -1
- package/lib/stamps.js.map +1 -1
- package/lib/test/Insertion.perf.spec.js +6 -51
- package/lib/test/Insertion.perf.spec.js.map +1 -1
- package/lib/test/PartialLengths.perf.spec.js +18 -25
- package/lib/test/PartialLengths.perf.spec.js.map +1 -1
- package/lib/test/Removal.perf.spec.js +13 -41
- package/lib/test/Removal.perf.spec.js.map +1 -1
- package/lib/test/beastTest.spec.d.ts.map +1 -1
- package/lib/test/beastTest.spec.js +42 -67
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.annotateMarker.spec.js +1 -11
- package/lib/test/client.annotateMarker.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +14 -14
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js +1 -1
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +1 -1
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +50 -59
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/client.rollbackFarm.spec.js +1 -1
- package/lib/test/client.rollbackFarm.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +4 -21
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/index.d.ts +2 -2
- package/lib/test/index.d.ts.map +1 -1
- package/lib/test/index.js +1 -1
- package/lib/test/index.js.map +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +15 -60
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.annotate.spec.js +48 -64
- package/lib/test/mergeTree.annotate.spec.js.map +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js +10 -63
- package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.insertingWalk.spec.js +61 -127
- package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +13 -94
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js +10 -7
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/mergeTree.walk.spec.js +2 -14
- package/lib/test/mergeTree.walk.spec.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js +3 -3
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +18 -23
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.partialLength.spec.js +167 -137
- package/lib/test/obliterate.partialLength.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +17 -127
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/partialLength.spec.js +29 -197
- package/lib/test/partialLength.spec.js.map +1 -1
- package/lib/test/perspective.spec.js +34 -0
- package/lib/test/perspective.spec.js.map +1 -1
- package/lib/test/propertyManager.spec.js +2 -2
- package/lib/test/propertyManager.spec.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +0 -2
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/segmentGroupCollection.spec.js +10 -4
- package/lib/test/segmentGroupCollection.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +1 -0
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +18 -28
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +3 -10
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testServer.d.ts +2 -1
- package/lib/test/testServer.d.ts.map +1 -1
- package/lib/test/testServer.js +7 -5
- package/lib/test/testServer.js.map +1 -1
- package/lib/test/testUtils.d.ts +36 -56
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js +66 -48
- 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 +6 -3
- package/lib/test/text.js.map +1 -1
- package/lib/textSegment.d.ts +0 -6
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/lib/zamboni.d.ts.map +1 -1
- package/lib/zamboni.js +32 -28
- package/lib/zamboni.js.map +1 -1
- package/package.json +17 -20
- package/src/MergeTreeTextHelper.ts +17 -12
- package/src/client.ts +141 -197
- package/src/endOfTreeSegment.ts +11 -8
- package/src/index.ts +4 -3
- package/src/mergeTree.ts +482 -633
- package/src/mergeTreeDeltaCallback.ts +4 -8
- package/src/mergeTreeNodes.ts +66 -45
- package/src/partialLengths.ts +181 -137
- package/src/perspective.ts +17 -95
- package/src/revertibles.ts +2 -7
- package/src/segmentInfos.ts +48 -141
- package/src/segmentPropertiesManager.ts +2 -16
- package/src/snapshotLoader.ts +62 -30
- package/src/snapshotV1.ts +36 -28
- package/src/snapshotlegacy.ts +7 -16
- package/src/stamps.ts +1 -1
- package/src/textSegment.ts +0 -13
- package/src/zamboni.ts +38 -32
- package/tsconfig.json +1 -0
- package/prettier.config.cjs +0 -8
package/src/snapshotlegacy.ts
CHANGED
|
@@ -16,11 +16,11 @@ import {
|
|
|
16
16
|
createChildLogger,
|
|
17
17
|
} from "@fluidframework/telemetry-utils/internal";
|
|
18
18
|
|
|
19
|
-
import { NonCollabClient
|
|
19
|
+
import { NonCollabClient } from "./constants.js";
|
|
20
20
|
import { MergeTree } from "./mergeTree.js";
|
|
21
|
-
import { type ISegmentPrivate } from "./mergeTreeNodes.js";
|
|
21
|
+
import { isSegmentLeaf, type ISegmentPrivate } from "./mergeTreeNodes.js";
|
|
22
|
+
import { PriorPerspective } from "./perspective.js";
|
|
22
23
|
import { matchProperties } from "./properties.js";
|
|
23
|
-
import { isInserted, isRemoved } from "./segmentInfos.js";
|
|
24
24
|
import {
|
|
25
25
|
JsonSegmentSpecs,
|
|
26
26
|
MergeTreeChunkLegacy,
|
|
@@ -195,11 +195,9 @@ export class SnapshotLegacy {
|
|
|
195
195
|
extractSync(): ISegmentPrivate[] {
|
|
196
196
|
const collabWindow = this.mergeTree.collabWindow;
|
|
197
197
|
const seq = (this.seq = collabWindow.minSeq);
|
|
198
|
+
const minSeqPerspective = new PriorPerspective(this.seq, NonCollabClient);
|
|
198
199
|
this.header = {
|
|
199
|
-
segmentsTotalLength: this.mergeTree.getLength(
|
|
200
|
-
this.mergeTree.collabWindow.minSeq,
|
|
201
|
-
NonCollabClient,
|
|
202
|
-
),
|
|
200
|
+
segmentsTotalLength: this.mergeTree.getLength(minSeqPerspective),
|
|
203
201
|
seq: this.mergeTree.collabWindow.minSeq,
|
|
204
202
|
};
|
|
205
203
|
|
|
@@ -208,14 +206,7 @@ export class SnapshotLegacy {
|
|
|
208
206
|
const segs: ISegmentPrivate[] = [];
|
|
209
207
|
let prev: ISegmentPrivate | undefined;
|
|
210
208
|
const extractSegment = (segment: ISegmentPrivate): boolean => {
|
|
211
|
-
if (
|
|
212
|
-
isInserted(segment) &&
|
|
213
|
-
segment.seq !== UnassignedSequenceNumber &&
|
|
214
|
-
segment.seq <= seq &&
|
|
215
|
-
(!isRemoved(segment) ||
|
|
216
|
-
segment.removedSeq === UnassignedSequenceNumber ||
|
|
217
|
-
segment.removedSeq > seq)
|
|
218
|
-
) {
|
|
209
|
+
if (isSegmentLeaf(segment) && minSeqPerspective.isSegmentPresent(segment)) {
|
|
219
210
|
originalSegments += 1;
|
|
220
211
|
const properties =
|
|
221
212
|
segment.propertyManager?.getAtSeq(segment.properties, seq) ?? segment.properties;
|
|
@@ -230,7 +221,7 @@ export class SnapshotLegacy {
|
|
|
230
221
|
return true;
|
|
231
222
|
};
|
|
232
223
|
|
|
233
|
-
this.mergeTree.mapRange(extractSegment,
|
|
224
|
+
this.mergeTree.mapRange(extractSegment, minSeqPerspective, undefined);
|
|
234
225
|
|
|
235
226
|
this.segments = [];
|
|
236
227
|
let totalLength: number = 0;
|
package/src/stamps.ts
CHANGED
|
@@ -130,7 +130,7 @@ export function isAcked(a: OperationStamp): boolean {
|
|
|
130
130
|
* Inserts a stamp into a sorted list of stamps in the correct (sorted) position.
|
|
131
131
|
*
|
|
132
132
|
* Beware that this uses Array.splice, thus requires asymptotics considerations.
|
|
133
|
-
* If inserting a variable number of
|
|
133
|
+
* If inserting a variable number of timestamps, consider just pushing them and sorting the list
|
|
134
134
|
* after using {@link compare} instead.
|
|
135
135
|
*/
|
|
136
136
|
export function spliceIntoList(list: OperationStamp[], stamp: OperationStamp): void {
|
package/src/textSegment.ts
CHANGED
|
@@ -104,16 +104,3 @@ export class TextSegment extends BaseSegment {
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* @internal
|
|
110
|
-
*/
|
|
111
|
-
export interface IMergeTreeTextHelper {
|
|
112
|
-
getText(
|
|
113
|
-
refSeq: number,
|
|
114
|
-
clientId: number,
|
|
115
|
-
placeholder: string,
|
|
116
|
-
start?: number,
|
|
117
|
-
end?: number,
|
|
118
|
-
): string;
|
|
119
|
-
}
|
package/src/zamboni.ts
CHANGED
|
@@ -11,20 +11,25 @@ import { MergeTreeMaintenanceType } from "./mergeTreeDeltaCallback.js";
|
|
|
11
11
|
import {
|
|
12
12
|
type MergeBlock,
|
|
13
13
|
assignChild,
|
|
14
|
+
getMinSeqStamp,
|
|
14
15
|
IMergeNode,
|
|
15
16
|
ISegmentPrivate,
|
|
16
17
|
Marker,
|
|
17
18
|
MaxNodesInBlock,
|
|
18
|
-
seqLTE,
|
|
19
19
|
} from "./mergeTreeNodes.js";
|
|
20
20
|
import { matchProperties } from "./properties.js";
|
|
21
|
-
import { toRemovalInfo,
|
|
21
|
+
import { toRemovalInfo, removeMergeNodeInfo } from "./segmentInfos.js";
|
|
22
|
+
import * as opstampUtils from "./stamps.js";
|
|
23
|
+
import type { OperationStamp } from "./stamps.js";
|
|
22
24
|
|
|
23
25
|
export const zamboniSegmentsMax = 2;
|
|
24
26
|
function underflow(node: MergeBlock): boolean {
|
|
25
27
|
return node.childCount < MaxNodesInBlock / 2;
|
|
26
28
|
}
|
|
27
29
|
|
|
30
|
+
// blockUpdatePathLengths requires an OperationStamp but it is unused when passing `newStructure: true`.
|
|
31
|
+
const dummyStamp: OperationStamp = { seq: UnassignedSequenceNumber, clientId: -1 };
|
|
32
|
+
|
|
28
33
|
export function zamboniSegments(
|
|
29
34
|
mergeTree: MergeTree,
|
|
30
35
|
zamboniSegmentsMaxCount = zamboniSegmentsMax,
|
|
@@ -67,7 +72,7 @@ export function zamboniSegments(
|
|
|
67
72
|
packParent(block.parent, mergeTree);
|
|
68
73
|
} else {
|
|
69
74
|
mergeTree.nodeUpdateOrdinals(block);
|
|
70
|
-
mergeTree.blockUpdatePathLengths(block,
|
|
75
|
+
mergeTree.blockUpdatePathLengths(block, dummyStamp, true);
|
|
71
76
|
}
|
|
72
77
|
}
|
|
73
78
|
}
|
|
@@ -129,7 +134,7 @@ export function packParent(parent: MergeBlock, mergeTree: MergeTree): void {
|
|
|
129
134
|
packParent(parent.parent, mergeTree);
|
|
130
135
|
} else {
|
|
131
136
|
mergeTree.nodeUpdateOrdinals(parent);
|
|
132
|
-
mergeTree.blockUpdatePathLengths(parent,
|
|
137
|
+
mergeTree.blockUpdatePathLengths(parent, dummyStamp, true);
|
|
133
138
|
}
|
|
134
139
|
}
|
|
135
140
|
|
|
@@ -148,34 +153,10 @@ function scourNode(node: MergeBlock, holdNodes: IMergeNode[], mergeTree: MergeTr
|
|
|
148
153
|
|
|
149
154
|
const segment = childNode;
|
|
150
155
|
const removalInfo = toRemovalInfo(segment);
|
|
151
|
-
const
|
|
152
|
-
if (removalInfo
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (
|
|
156
|
-
((!!removalInfo && seqLTE(removalInfo.removedSeq, mergeTree.collabWindow.minSeq)) ||
|
|
157
|
-
(!!moveInfo && seqLTE(moveInfo.movedSeq, mergeTree.collabWindow.minSeq))) &&
|
|
158
|
-
segment.trackingCollection.empty
|
|
159
|
-
) {
|
|
160
|
-
mergeTree.mergeTreeMaintenanceCallback?.(
|
|
161
|
-
{
|
|
162
|
-
operation: MergeTreeMaintenanceType.UNLINK,
|
|
163
|
-
deltaSegments: [{ segment }],
|
|
164
|
-
},
|
|
165
|
-
undefined,
|
|
166
|
-
);
|
|
167
|
-
if (Marker.is(segment)) {
|
|
168
|
-
mergeTree.unlinkMarker(segment);
|
|
169
|
-
}
|
|
170
|
-
removeMergeNodeInfo(segment);
|
|
171
|
-
} else {
|
|
172
|
-
holdNodes.push(segment);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
prevSegment = undefined;
|
|
176
|
-
} else {
|
|
177
|
-
if (segment.seq <= mergeTree.collabWindow.minSeq) {
|
|
178
|
-
const segmentHasPositiveLength = (mergeTree.localNetLength(segment) ?? 0) > 0;
|
|
156
|
+
const minSeqStamp = getMinSeqStamp(mergeTree.collabWindow);
|
|
157
|
+
if (removalInfo === undefined) {
|
|
158
|
+
if (opstampUtils.lte(segment.insert, minSeqStamp)) {
|
|
159
|
+
const segmentHasPositiveLength = (mergeTree.leafLength(segment) ?? 0) > 0;
|
|
179
160
|
const canAppend =
|
|
180
161
|
prevSegment?.canAppend(segment) &&
|
|
181
162
|
matchProperties(prevSegment.properties, segment.properties) &&
|
|
@@ -202,6 +183,31 @@ function scourNode(node: MergeBlock, holdNodes: IMergeNode[], mergeTree: MergeTr
|
|
|
202
183
|
holdNodes.push(segment);
|
|
203
184
|
prevSegment = undefined;
|
|
204
185
|
}
|
|
186
|
+
} else {
|
|
187
|
+
const firstRemove = removalInfo.removes[0];
|
|
188
|
+
// If the segment's removal is below the MSN and it's not being held onto by a tracking group,
|
|
189
|
+
// it can be unlinked (i.e. removed from the merge-tree)
|
|
190
|
+
if (
|
|
191
|
+
!!firstRemove &&
|
|
192
|
+
opstampUtils.lte(firstRemove, minSeqStamp) &&
|
|
193
|
+
segment.trackingCollection.empty
|
|
194
|
+
) {
|
|
195
|
+
mergeTree.mergeTreeMaintenanceCallback?.(
|
|
196
|
+
{
|
|
197
|
+
operation: MergeTreeMaintenanceType.UNLINK,
|
|
198
|
+
deltaSegments: [{ segment }],
|
|
199
|
+
},
|
|
200
|
+
undefined,
|
|
201
|
+
);
|
|
202
|
+
if (Marker.is(segment)) {
|
|
203
|
+
mergeTree.unlinkMarker(segment);
|
|
204
|
+
}
|
|
205
|
+
removeMergeNodeInfo(segment);
|
|
206
|
+
} else {
|
|
207
|
+
holdNodes.push(segment);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
prevSegment = undefined;
|
|
205
211
|
}
|
|
206
212
|
}
|
|
207
213
|
}
|
package/tsconfig.json
CHANGED