@fluidframework/merge-tree 2.4.0-294316 → 2.4.0-297027
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/api-report/merge-tree.legacy.alpha.api.md +26 -5
- package/dist/attributionPolicy.d.ts.map +1 -1
- package/dist/attributionPolicy.js +10 -3
- package/dist/attributionPolicy.js.map +1 -1
- package/dist/client.d.ts +14 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +97 -9
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +1 -0
- package/dist/mergeTree.d.ts +15 -1
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +65 -19
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +6 -0
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +2 -1
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/opBuilder.d.ts +15 -1
- package/dist/opBuilder.d.ts.map +1 -1
- package/dist/opBuilder.js +28 -1
- package/dist/opBuilder.js.map +1 -1
- package/dist/ops.d.ts +27 -1
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js +1 -0
- package/dist/ops.js.map +1 -1
- package/dist/sequencePlace.d.ts +4 -0
- package/dist/sequencePlace.d.ts.map +1 -1
- package/dist/sequencePlace.js +17 -1
- package/dist/sequencePlace.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +18 -0
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.rangeExpansion.spec.js +109 -53
- package/dist/test/obliterate.rangeExpansion.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +2 -2
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/reconnectHelper.d.ts +8 -6
- package/dist/test/reconnectHelper.d.ts.map +1 -1
- package/dist/test/reconnectHelper.js +14 -13
- package/dist/test/reconnectHelper.js.map +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +19 -8
- package/dist/test/testClientLogger.js.map +1 -1
- package/lib/attributionPolicy.d.ts.map +1 -1
- package/lib/attributionPolicy.js +10 -3
- package/lib/attributionPolicy.js.map +1 -1
- package/lib/client.d.ts +14 -4
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +98 -10
- package/lib/client.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +1 -0
- package/lib/mergeTree.d.ts +15 -1
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +65 -19
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +6 -0
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +2 -1
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/opBuilder.d.ts +15 -1
- package/lib/opBuilder.d.ts.map +1 -1
- package/lib/opBuilder.js +26 -0
- package/lib/opBuilder.js.map +1 -1
- package/lib/ops.d.ts +27 -1
- package/lib/ops.d.ts.map +1 -1
- package/lib/ops.js +1 -0
- package/lib/ops.js.map +1 -1
- package/lib/sequencePlace.d.ts +4 -0
- package/lib/sequencePlace.d.ts.map +1 -1
- package/lib/sequencePlace.js +15 -0
- package/lib/sequencePlace.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +18 -0
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.rangeExpansion.spec.js +109 -53
- package/lib/test/obliterate.rangeExpansion.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +2 -2
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/reconnectHelper.d.ts +8 -6
- package/lib/test/reconnectHelper.d.ts.map +1 -1
- package/lib/test/reconnectHelper.js +15 -14
- package/lib/test/reconnectHelper.js.map +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +19 -8
- package/lib/test/testClientLogger.js.map +1 -1
- package/package.json +29 -16
- package/src/attributionPolicy.ts +5 -0
- package/src/client.ts +136 -21
- package/src/index.ts +1 -0
- package/src/mergeTree.ts +108 -22
- package/src/mergeTreeNodes.ts +9 -1
- package/src/opBuilder.ts +32 -0
- package/src/ops.ts +23 -1
- package/src/sequencePlace.ts +16 -0
package/lib/mergeTree.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { IMergeTreeDeltaOp, IRelativePosition, ReferenceType } from "./ops.js";
|
|
|
14
14
|
import { PropertySet } from "./properties.js";
|
|
15
15
|
import { ReferencePosition } from "./referencePositions.js";
|
|
16
16
|
import { PropertiesRollback } from "./segmentPropertiesManager.js";
|
|
17
|
+
import { type InteriorSequencePlace } from "./sequencePlace.js";
|
|
17
18
|
/**
|
|
18
19
|
* @legacy
|
|
19
20
|
* @alpha
|
|
@@ -68,11 +69,22 @@ export interface IMergeTreeOptions {
|
|
|
68
69
|
* @defaultValue `false`
|
|
69
70
|
*/
|
|
70
71
|
mergeTreeEnableObliterateReconnect?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Enables support for obliterate endpoint expansion.
|
|
74
|
+
* When enabled, obliterate operations can have sidedness specified for their endpoints.
|
|
75
|
+
* If an endpoint is externally anchored
|
|
76
|
+
* (aka the start is after a given position, or the end is before a given position),
|
|
77
|
+
* then concurrent inserts adjacent to the exclusive endpoint of an obliterated range will be included in the obliteration
|
|
78
|
+
*
|
|
79
|
+
* @defaultValue `false`
|
|
80
|
+
*/
|
|
81
|
+
mergeTreeEnableSidedObliterate?: boolean;
|
|
71
82
|
}
|
|
72
83
|
export declare function errorIfOptionNotTrue(options: IMergeTreeOptions | undefined, option: keyof IMergeTreeOptions): void;
|
|
73
84
|
/**
|
|
74
85
|
* @legacy
|
|
75
86
|
* @alpha
|
|
87
|
+
* @deprecated This functionality was not meant to be exported and will be removed in a future release
|
|
76
88
|
*/
|
|
77
89
|
export interface IMergeTreeAttributionOptions {
|
|
78
90
|
/**
|
|
@@ -98,6 +110,7 @@ export interface IMergeTreeAttributionOptions {
|
|
|
98
110
|
* @sealed
|
|
99
111
|
* @legacy
|
|
100
112
|
* @alpha
|
|
113
|
+
* @deprecated This functionality was not meant to be exported and will be removed in a future release
|
|
101
114
|
*/
|
|
102
115
|
export interface AttributionPolicy {
|
|
103
116
|
/**
|
|
@@ -300,7 +313,8 @@ export declare class MergeTree {
|
|
|
300
313
|
* @param rollback - Whether this is for a local rollback and what kind
|
|
301
314
|
*/
|
|
302
315
|
annotateRange(start: number, end: number, props: PropertySet, refSeq: number, clientId: number, seq: number, opArgs: IMergeTreeDeltaOpArgs, rollback?: PropertiesRollback): void;
|
|
303
|
-
|
|
316
|
+
private obliterateRangeSided;
|
|
317
|
+
obliterateRange(start: number | InteriorSequencePlace, end: number | InteriorSequencePlace, refSeq: number, clientId: number, seq: number, overwrite: boolean | undefined, opArgs: IMergeTreeDeltaOpArgs): void;
|
|
304
318
|
markRangeRemoved(start: number, end: number, refSeq: number, clientId: number, seq: number, overwrite: boolean | undefined, opArgs: IMergeTreeDeltaOpArgs): void;
|
|
305
319
|
/**
|
|
306
320
|
* Revert an unacked local op
|
package/lib/mergeTree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeTree.d.ts","sourceRoot":"","sources":["../src/mergeTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAU,IAAI,EAAa,MAAM,qCAAqC,CAAC;AAG9E,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAY,MAAM,wBAAwB,CAAC;AAOpE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAEN,sBAAsB,EACtB,iBAAiB,EAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,qBAAqB,EAErB,sBAAsB,EACtB,4BAA4B,EAE5B,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EAGN,mBAAmB,EACnB,UAAU,EAGV,QAAQ,EACR,cAAc,EAEd,YAAY,EAEZ,MAAM,EAEN,UAAU,EAEV,YAAY,EAOZ,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EAEjB,aAAa,EACb,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,WAAW,EAAwC,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAEN,iBAAiB,EAIjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"mergeTree.d.ts","sourceRoot":"","sources":["../src/mergeTree.ts"],"names":[],"mappings":"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"}
|
package/lib/mergeTree.js
CHANGED
|
@@ -23,6 +23,7 @@ import { createMap, extend, extendIfUndefined } from "./properties.js";
|
|
|
23
23
|
import { DetachedReferencePosition, refGetTileLabels, refHasTileLabel, refTypeIncludesFlag, } from "./referencePositions.js";
|
|
24
24
|
// eslint-disable-next-line import/no-deprecated
|
|
25
25
|
import { PropertiesRollback } from "./segmentPropertiesManager.js";
|
|
26
|
+
import { Side } from "./sequencePlace.js";
|
|
26
27
|
import { SortedSegmentSet } from "./sortedSegmentSet.js";
|
|
27
28
|
import { zamboniSegments } from "./zamboni.js";
|
|
28
29
|
function markSegmentMoved(seg, moveInfo) {
|
|
@@ -760,13 +761,15 @@ export class MergeTree {
|
|
|
760
761
|
segment: pendingSegment,
|
|
761
762
|
});
|
|
762
763
|
});
|
|
763
|
-
if (opArgs.op.type === MergeTreeDeltaType.OBLITERATE
|
|
764
|
+
if (opArgs.op.type === MergeTreeDeltaType.OBLITERATE ||
|
|
765
|
+
opArgs.op.type === MergeTreeDeltaType.OBLITERATE_SIDED) {
|
|
764
766
|
this.obliterates.addOrUpdate(pendingSegmentGroup.obliterateInfo);
|
|
765
767
|
}
|
|
766
768
|
// Perform slides after all segments have been acked, so that
|
|
767
769
|
// positions after slide are final
|
|
768
770
|
if (opArgs.op.type === MergeTreeDeltaType.REMOVE ||
|
|
769
|
-
opArgs.op.type === MergeTreeDeltaType.OBLITERATE
|
|
771
|
+
opArgs.op.type === MergeTreeDeltaType.OBLITERATE ||
|
|
772
|
+
opArgs.op.type === MergeTreeDeltaType.OBLITERATE_SIDED) {
|
|
770
773
|
this.slideAckedRemovedSegmentReferences(pendingSegmentGroup.segments);
|
|
771
774
|
}
|
|
772
775
|
this.mergeTreeMaintenanceCallback?.({
|
|
@@ -966,9 +969,9 @@ export class MergeTree {
|
|
|
966
969
|
});
|
|
967
970
|
}
|
|
968
971
|
this.updateRoot(splitNode);
|
|
969
|
-
saveIfLocal(newSegment);
|
|
970
972
|
insertPos += newSegment.cachedLength;
|
|
971
973
|
if (!this.options?.mergeTreeEnableObliterate || this.obliterates.empty()) {
|
|
974
|
+
saveIfLocal(newSegment);
|
|
972
975
|
continue;
|
|
973
976
|
}
|
|
974
977
|
// eslint-disable-next-line import/no-deprecated
|
|
@@ -995,13 +998,13 @@ export class MergeTree {
|
|
|
995
998
|
movedSeqs.unshift(ob.seq);
|
|
996
999
|
}
|
|
997
1000
|
else {
|
|
998
|
-
if (newest === undefined || normalizedNewestSeq < normalizedObSeq) {
|
|
999
|
-
normalizedNewestSeq = normalizedObSeq;
|
|
1000
|
-
newest = ob;
|
|
1001
|
-
}
|
|
1002
1001
|
movedClientIds.push(ob.clientId);
|
|
1003
1002
|
movedSeqs.push(ob.seq);
|
|
1004
1003
|
}
|
|
1004
|
+
if (newest === undefined || normalizedNewestSeq < normalizedObSeq) {
|
|
1005
|
+
normalizedNewestSeq = normalizedObSeq;
|
|
1006
|
+
newest = ob;
|
|
1007
|
+
}
|
|
1005
1008
|
}
|
|
1006
1009
|
}
|
|
1007
1010
|
if (oldest && newest?.clientId !== clientId) {
|
|
@@ -1021,6 +1024,10 @@ export class MergeTree {
|
|
|
1021
1024
|
this.blockUpdatePathLengths(newSegment.parent, seq, clientId);
|
|
1022
1025
|
}
|
|
1023
1026
|
}
|
|
1027
|
+
else if (oldest && newest?.clientId === clientId) {
|
|
1028
|
+
newSegment.prevObliterateByInserter = newest;
|
|
1029
|
+
}
|
|
1030
|
+
saveIfLocal(newSegment);
|
|
1024
1031
|
}
|
|
1025
1032
|
}
|
|
1026
1033
|
}
|
|
@@ -1227,10 +1234,11 @@ export class MergeTree {
|
|
|
1227
1234
|
zamboniSegments(this);
|
|
1228
1235
|
}
|
|
1229
1236
|
}
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
this.ensureIntervalBoundary(
|
|
1237
|
+
obliterateRangeSided(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
|
|
1238
|
+
const startPos = start.side === Side.Before ? start.pos : start.pos + 1;
|
|
1239
|
+
const endPos = end.side === Side.Before ? end.pos : end.pos + 1;
|
|
1240
|
+
this.ensureIntervalBoundary(startPos, refSeq, clientId);
|
|
1241
|
+
this.ensureIntervalBoundary(endPos, refSeq, clientId);
|
|
1234
1242
|
let _overwrite = overwrite;
|
|
1235
1243
|
const localOverlapWithRefs = [];
|
|
1236
1244
|
const movedSegments = [];
|
|
@@ -1245,18 +1253,46 @@ export class MergeTree {
|
|
|
1245
1253
|
localSeq,
|
|
1246
1254
|
segmentGroup: undefined,
|
|
1247
1255
|
};
|
|
1248
|
-
const { segment: startSeg } = this.getContainingSegment(start, refSeq, clientId);
|
|
1249
|
-
const { segment: endSeg } = this.getContainingSegment(end
|
|
1256
|
+
const { segment: startSeg } = this.getContainingSegment(start.pos, refSeq, clientId);
|
|
1257
|
+
const { segment: endSeg } = this.getContainingSegment(end.pos, refSeq, clientId);
|
|
1250
1258
|
assert(startSeg !== undefined && endSeg !== undefined, 0xa3f /* segments cannot be undefined */);
|
|
1251
|
-
obliterate.start = this.createLocalReferencePosition(startSeg, 0, ReferenceType.StayOnRemove, {
|
|
1259
|
+
obliterate.start = this.createLocalReferencePosition(startSeg, start.side === Side.Before ? 0 : Math.max(startSeg.cachedLength - 1, 0), ReferenceType.StayOnRemove, {
|
|
1252
1260
|
obliterate,
|
|
1253
1261
|
});
|
|
1254
|
-
obliterate.end = this.createLocalReferencePosition(endSeg, endSeg.cachedLength - 1, ReferenceType.StayOnRemove, {
|
|
1262
|
+
obliterate.end = this.createLocalReferencePosition(endSeg, end.side === Side.Before ? 0 : Math.max(endSeg.cachedLength - 1, 0), ReferenceType.StayOnRemove, {
|
|
1255
1263
|
obliterate,
|
|
1256
1264
|
});
|
|
1265
|
+
// Always create a segment group for obliterate,
|
|
1266
|
+
// even if there are no segments currently in the obliteration range.
|
|
1267
|
+
// Segments may be concurrently inserted into the obliteration range,
|
|
1268
|
+
// at which point they are added to the segment group.
|
|
1269
|
+
obliterate.segmentGroup = {
|
|
1270
|
+
segments: [],
|
|
1271
|
+
localSeq,
|
|
1272
|
+
refSeq: this.collabWindow.currentSeq,
|
|
1273
|
+
obliterateInfo: obliterate,
|
|
1274
|
+
};
|
|
1275
|
+
if (this.collabWindow.collaborating && clientId === this.collabWindow.clientId) {
|
|
1276
|
+
this.pendingSegments.push(obliterate.segmentGroup);
|
|
1277
|
+
}
|
|
1278
|
+
this.obliterates.addOrUpdate(obliterate);
|
|
1257
1279
|
const markMoved = (segment, pos, _start, _end) => {
|
|
1258
|
-
|
|
1280
|
+
if ((start.side === Side.After && startPos === pos + segment.cachedLength) || // exclusive start segment
|
|
1281
|
+
(end.side === Side.Before &&
|
|
1282
|
+
endPos === pos &&
|
|
1283
|
+
isSegmentPresent(segment, { refSeq, localSeq })) // exclusive end segment
|
|
1284
|
+
) {
|
|
1285
|
+
// We walk these segments because we want to also walk any concurrently inserted segments between here and the obliterated segments.
|
|
1286
|
+
// These segments are outside of the obliteration range though, so return true to keep walking.
|
|
1287
|
+
return true;
|
|
1288
|
+
}
|
|
1259
1289
|
const existingMoveInfo = toMoveInfo(segment);
|
|
1290
|
+
if (segment.prevObliterateByInserter?.seq === UnassignedSequenceNumber) {
|
|
1291
|
+
// We chose to not obliterate this segment because we are aware of an unacked local obliteration.
|
|
1292
|
+
// The local obliterate has not been sequenced yet, so it is still the newest obliterate we are aware of.
|
|
1293
|
+
// Other clients will also choose not to obliterate this segment because the most recent obliteration has the same clientId
|
|
1294
|
+
return true;
|
|
1295
|
+
}
|
|
1260
1296
|
if (clientId !== segment.clientId &&
|
|
1261
1297
|
segment.seq !== undefined &&
|
|
1262
1298
|
seq !== UnassignedSequenceNumber &&
|
|
@@ -1297,7 +1333,6 @@ export class MergeTree {
|
|
|
1297
1333
|
if (segment.movedSeq === UnassignedSequenceNumber &&
|
|
1298
1334
|
clientId === this.collabWindow.clientId) {
|
|
1299
1335
|
obliterate.segmentGroup = this.addToPendingList(segment, obliterate.segmentGroup, localSeq);
|
|
1300
|
-
(_a = obliterate.segmentGroup).obliterateInfo ?? (_a.obliterateInfo = obliterate);
|
|
1301
1336
|
}
|
|
1302
1337
|
else {
|
|
1303
1338
|
if (MergeTree.options.zamboniSegments) {
|
|
@@ -1316,8 +1351,8 @@ export class MergeTree {
|
|
|
1316
1351
|
}
|
|
1317
1352
|
return true;
|
|
1318
1353
|
};
|
|
1319
|
-
this.nodeMap(refSeq, clientId, markMoved, undefined, afterMarkMoved, start, end
|
|
1320
|
-
|
|
1354
|
+
this.nodeMap(refSeq, clientId, markMoved, undefined, afterMarkMoved, start.pos, end.pos + 1, // include the segment containing the end reference
|
|
1355
|
+
undefined, seq === UnassignedSequenceNumber ? undefined : seq);
|
|
1321
1356
|
this.slideAckedRemovedSegmentReferences(localOverlapWithRefs);
|
|
1322
1357
|
// opArgs == undefined => test code
|
|
1323
1358
|
if (movedSegments.length > 0) {
|
|
@@ -1338,6 +1373,17 @@ export class MergeTree {
|
|
|
1338
1373
|
zamboniSegments(this);
|
|
1339
1374
|
}
|
|
1340
1375
|
}
|
|
1376
|
+
obliterateRange(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
|
|
1377
|
+
errorIfOptionNotTrue(this.options, "mergeTreeEnableObliterate");
|
|
1378
|
+
if (this.options?.mergeTreeEnableSidedObliterate) {
|
|
1379
|
+
assert(typeof start === "object" && typeof end === "object", "Start and end must be of type InteriorSequencePlace if mergeTreeEnableSidedObliterate is enabled.");
|
|
1380
|
+
this.obliterateRangeSided(start, end, refSeq, clientId, seq, overwrite, opArgs);
|
|
1381
|
+
}
|
|
1382
|
+
else {
|
|
1383
|
+
assert(typeof start === "number" && typeof end === "number", "Start and end must be numbers if mergeTreeEnableSidedObliterate is not enabled.");
|
|
1384
|
+
this.obliterateRangeSided({ pos: start, side: Side.Before }, { pos: end - 1, side: Side.After }, refSeq, clientId, seq, overwrite, opArgs);
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1341
1387
|
markRangeRemoved(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
|
|
1342
1388
|
let _overwrite = overwrite;
|
|
1343
1389
|
this.ensureIntervalBoundary(start, refSeq, clientId);
|