@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.
Files changed (98) hide show
  1. package/api-report/merge-tree.legacy.alpha.api.md +26 -5
  2. package/dist/attributionPolicy.d.ts.map +1 -1
  3. package/dist/attributionPolicy.js +10 -3
  4. package/dist/attributionPolicy.js.map +1 -1
  5. package/dist/client.d.ts +14 -4
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +97 -9
  8. package/dist/client.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/legacy.d.ts +1 -0
  13. package/dist/mergeTree.d.ts +15 -1
  14. package/dist/mergeTree.d.ts.map +1 -1
  15. package/dist/mergeTree.js +65 -19
  16. package/dist/mergeTree.js.map +1 -1
  17. package/dist/mergeTreeNodes.d.ts +6 -0
  18. package/dist/mergeTreeNodes.d.ts.map +1 -1
  19. package/dist/mergeTreeNodes.js +2 -1
  20. package/dist/mergeTreeNodes.js.map +1 -1
  21. package/dist/opBuilder.d.ts +15 -1
  22. package/dist/opBuilder.d.ts.map +1 -1
  23. package/dist/opBuilder.js +28 -1
  24. package/dist/opBuilder.js.map +1 -1
  25. package/dist/ops.d.ts +27 -1
  26. package/dist/ops.d.ts.map +1 -1
  27. package/dist/ops.js +1 -0
  28. package/dist/ops.js.map +1 -1
  29. package/dist/sequencePlace.d.ts +4 -0
  30. package/dist/sequencePlace.d.ts.map +1 -1
  31. package/dist/sequencePlace.js +17 -1
  32. package/dist/sequencePlace.js.map +1 -1
  33. package/dist/test/obliterate.concurrent.spec.js +18 -0
  34. package/dist/test/obliterate.concurrent.spec.js.map +1 -1
  35. package/dist/test/obliterate.rangeExpansion.spec.js +109 -53
  36. package/dist/test/obliterate.rangeExpansion.spec.js.map +1 -1
  37. package/dist/test/obliterate.spec.js +2 -2
  38. package/dist/test/obliterate.spec.js.map +1 -1
  39. package/dist/test/reconnectHelper.d.ts +8 -6
  40. package/dist/test/reconnectHelper.d.ts.map +1 -1
  41. package/dist/test/reconnectHelper.js +14 -13
  42. package/dist/test/reconnectHelper.js.map +1 -1
  43. package/dist/test/testClientLogger.d.ts.map +1 -1
  44. package/dist/test/testClientLogger.js +19 -8
  45. package/dist/test/testClientLogger.js.map +1 -1
  46. package/lib/attributionPolicy.d.ts.map +1 -1
  47. package/lib/attributionPolicy.js +10 -3
  48. package/lib/attributionPolicy.js.map +1 -1
  49. package/lib/client.d.ts +14 -4
  50. package/lib/client.d.ts.map +1 -1
  51. package/lib/client.js +98 -10
  52. package/lib/client.js.map +1 -1
  53. package/lib/index.d.ts +1 -1
  54. package/lib/index.d.ts.map +1 -1
  55. package/lib/index.js.map +1 -1
  56. package/lib/legacy.d.ts +1 -0
  57. package/lib/mergeTree.d.ts +15 -1
  58. package/lib/mergeTree.d.ts.map +1 -1
  59. package/lib/mergeTree.js +65 -19
  60. package/lib/mergeTree.js.map +1 -1
  61. package/lib/mergeTreeNodes.d.ts +6 -0
  62. package/lib/mergeTreeNodes.d.ts.map +1 -1
  63. package/lib/mergeTreeNodes.js +2 -1
  64. package/lib/mergeTreeNodes.js.map +1 -1
  65. package/lib/opBuilder.d.ts +15 -1
  66. package/lib/opBuilder.d.ts.map +1 -1
  67. package/lib/opBuilder.js +26 -0
  68. package/lib/opBuilder.js.map +1 -1
  69. package/lib/ops.d.ts +27 -1
  70. package/lib/ops.d.ts.map +1 -1
  71. package/lib/ops.js +1 -0
  72. package/lib/ops.js.map +1 -1
  73. package/lib/sequencePlace.d.ts +4 -0
  74. package/lib/sequencePlace.d.ts.map +1 -1
  75. package/lib/sequencePlace.js +15 -0
  76. package/lib/sequencePlace.js.map +1 -1
  77. package/lib/test/obliterate.concurrent.spec.js +18 -0
  78. package/lib/test/obliterate.concurrent.spec.js.map +1 -1
  79. package/lib/test/obliterate.rangeExpansion.spec.js +109 -53
  80. package/lib/test/obliterate.rangeExpansion.spec.js.map +1 -1
  81. package/lib/test/obliterate.spec.js +2 -2
  82. package/lib/test/obliterate.spec.js.map +1 -1
  83. package/lib/test/reconnectHelper.d.ts +8 -6
  84. package/lib/test/reconnectHelper.d.ts.map +1 -1
  85. package/lib/test/reconnectHelper.js +15 -14
  86. package/lib/test/reconnectHelper.js.map +1 -1
  87. package/lib/test/testClientLogger.d.ts.map +1 -1
  88. package/lib/test/testClientLogger.js +19 -8
  89. package/lib/test/testClientLogger.js.map +1 -1
  90. package/package.json +29 -16
  91. package/src/attributionPolicy.ts +5 -0
  92. package/src/client.ts +136 -21
  93. package/src/index.ts +1 -0
  94. package/src/mergeTree.ts +108 -22
  95. package/src/mergeTreeNodes.ts +9 -1
  96. package/src/opBuilder.ts +32 -0
  97. package/src/ops.ts +23 -1
  98. package/src/sequencePlace.ts +16 -0
@@ -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
- obliterateRange(start: number, end: number, refSeq: number, clientId: number, seq: number, overwrite: boolean | undefined, opArgs: IMergeTreeDeltaOpArgs): void;
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
@@ -1 +1 @@
1
- {"version":3,"file":"mergeTree.d.ts","sourceRoot":"","sources":["../src/mergeTree.ts"],"names":[],"mappings":"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"}
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
- obliterateRange(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
1231
- errorIfOptionNotTrue(this.options, "mergeTreeEnableObliterate");
1232
- this.ensureIntervalBoundary(start, refSeq, clientId);
1233
- this.ensureIntervalBoundary(end, refSeq, clientId);
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 - 1, refSeq, clientId);
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
- var _a;
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, undefined, seq === UnassignedSequenceNumber ? undefined : seq);
1320
- this.obliterates.addOrUpdate(obliterate);
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);