@fluidframework/merge-tree 2.3.1 → 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 (118) hide show
  1. package/api-report/merge-tree.legacy.alpha.api.md +26 -7
  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 -10
  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 -2
  14. package/dist/mergeTree.d.ts.map +1 -1
  15. package/dist/mergeTree.js +68 -48
  16. package/dist/mergeTree.js.map +1 -1
  17. package/dist/mergeTreeNodes.d.ts +6 -9
  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.partialLength.spec.js +8 -4
  36. package/dist/test/obliterate.partialLength.spec.js.map +1 -1
  37. package/dist/test/obliterate.rangeExpansion.spec.js +109 -53
  38. package/dist/test/obliterate.rangeExpansion.spec.js.map +1 -1
  39. package/dist/test/obliterate.spec.js +14 -8
  40. package/dist/test/obliterate.spec.js.map +1 -1
  41. package/dist/test/reconnectHelper.d.ts +8 -6
  42. package/dist/test/reconnectHelper.d.ts.map +1 -1
  43. package/dist/test/reconnectHelper.js +14 -13
  44. package/dist/test/reconnectHelper.js.map +1 -1
  45. package/dist/test/testClient.d.ts +1 -11
  46. package/dist/test/testClient.d.ts.map +1 -1
  47. package/dist/test/testClient.js +0 -3
  48. package/dist/test/testClient.js.map +1 -1
  49. package/dist/test/testClientLogger.d.ts.map +1 -1
  50. package/dist/test/testClientLogger.js +19 -8
  51. package/dist/test/testClientLogger.js.map +1 -1
  52. package/dist/test/testUtils.d.ts +10 -0
  53. package/dist/test/testUtils.d.ts.map +1 -1
  54. package/dist/test/testUtils.js +5 -1
  55. package/dist/test/testUtils.js.map +1 -1
  56. package/lib/attributionPolicy.d.ts.map +1 -1
  57. package/lib/attributionPolicy.js +10 -3
  58. package/lib/attributionPolicy.js.map +1 -1
  59. package/lib/client.d.ts +14 -4
  60. package/lib/client.d.ts.map +1 -1
  61. package/lib/client.js +98 -11
  62. package/lib/client.js.map +1 -1
  63. package/lib/index.d.ts +1 -1
  64. package/lib/index.d.ts.map +1 -1
  65. package/lib/index.js.map +1 -1
  66. package/lib/legacy.d.ts +1 -0
  67. package/lib/mergeTree.d.ts +15 -2
  68. package/lib/mergeTree.d.ts.map +1 -1
  69. package/lib/mergeTree.js +69 -49
  70. package/lib/mergeTree.js.map +1 -1
  71. package/lib/mergeTreeNodes.d.ts +6 -9
  72. package/lib/mergeTreeNodes.d.ts.map +1 -1
  73. package/lib/mergeTreeNodes.js +2 -1
  74. package/lib/mergeTreeNodes.js.map +1 -1
  75. package/lib/opBuilder.d.ts +15 -1
  76. package/lib/opBuilder.d.ts.map +1 -1
  77. package/lib/opBuilder.js +26 -0
  78. package/lib/opBuilder.js.map +1 -1
  79. package/lib/ops.d.ts +27 -1
  80. package/lib/ops.d.ts.map +1 -1
  81. package/lib/ops.js +1 -0
  82. package/lib/ops.js.map +1 -1
  83. package/lib/sequencePlace.d.ts +4 -0
  84. package/lib/sequencePlace.d.ts.map +1 -1
  85. package/lib/sequencePlace.js +15 -0
  86. package/lib/sequencePlace.js.map +1 -1
  87. package/lib/test/obliterate.concurrent.spec.js +18 -0
  88. package/lib/test/obliterate.concurrent.spec.js.map +1 -1
  89. package/lib/test/obliterate.partialLength.spec.js +9 -5
  90. package/lib/test/obliterate.partialLength.spec.js.map +1 -1
  91. package/lib/test/obliterate.rangeExpansion.spec.js +109 -53
  92. package/lib/test/obliterate.rangeExpansion.spec.js.map +1 -1
  93. package/lib/test/obliterate.spec.js +15 -9
  94. package/lib/test/obliterate.spec.js.map +1 -1
  95. package/lib/test/reconnectHelper.d.ts +8 -6
  96. package/lib/test/reconnectHelper.d.ts.map +1 -1
  97. package/lib/test/reconnectHelper.js +15 -14
  98. package/lib/test/reconnectHelper.js.map +1 -1
  99. package/lib/test/testClient.d.ts +1 -11
  100. package/lib/test/testClient.d.ts.map +1 -1
  101. package/lib/test/testClient.js +0 -3
  102. package/lib/test/testClient.js.map +1 -1
  103. package/lib/test/testClientLogger.d.ts.map +1 -1
  104. package/lib/test/testClientLogger.js +19 -8
  105. package/lib/test/testClientLogger.js.map +1 -1
  106. package/lib/test/testUtils.d.ts +10 -0
  107. package/lib/test/testUtils.d.ts.map +1 -1
  108. package/lib/test/testUtils.js +3 -0
  109. package/lib/test/testUtils.js.map +1 -1
  110. package/package.json +30 -17
  111. package/src/attributionPolicy.ts +5 -0
  112. package/src/client.ts +138 -20
  113. package/src/index.ts +1 -0
  114. package/src/mergeTree.ts +116 -77
  115. package/src/mergeTreeNodes.ts +9 -10
  116. package/src/opBuilder.ts +32 -0
  117. package/src/ops.ts +23 -1
  118. package/src/sequencePlace.ts +16 -0
@@ -14,7 +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 SequencePlace } from "./sequencePlace.js";
17
+ import { type InteriorSequencePlace } from "./sequencePlace.js";
18
18
  /**
19
19
  * @legacy
20
20
  * @alpha
@@ -69,11 +69,22 @@ export interface IMergeTreeOptions {
69
69
  * @defaultValue `false`
70
70
  */
71
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;
72
82
  }
73
83
  export declare function errorIfOptionNotTrue(options: IMergeTreeOptions | undefined, option: keyof IMergeTreeOptions): void;
74
84
  /**
75
85
  * @legacy
76
86
  * @alpha
87
+ * @deprecated This functionality was not meant to be exported and will be removed in a future release
77
88
  */
78
89
  export interface IMergeTreeAttributionOptions {
79
90
  /**
@@ -99,6 +110,7 @@ export interface IMergeTreeAttributionOptions {
99
110
  * @sealed
100
111
  * @legacy
101
112
  * @alpha
113
+ * @deprecated This functionality was not meant to be exported and will be removed in a future release
102
114
  */
103
115
  export interface AttributionPolicy {
104
116
  /**
@@ -301,7 +313,8 @@ export declare class MergeTree {
301
313
  * @param rollback - Whether this is for a local rollback and what kind
302
314
  */
303
315
  annotateRange(start: number, end: number, props: PropertySet, refSeq: number, clientId: number, seq: number, opArgs: IMergeTreeDeltaOpArgs, rollback?: PropertiesRollback): void;
304
- obliterateRange(start: SequencePlace, end: SequencePlace, 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;
305
318
  markRangeRemoved(start: number, end: number, refSeq: number, clientId: number, seq: number, overwrite: boolean | undefined, opArgs: IMergeTreeDeltaOpArgs): void;
306
319
  /**
307
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,7 +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 { endpointPosAndSide } from "./sequencePlace.js";
26
+ import { Side } from "./sequencePlace.js";
27
27
  import { SortedSegmentSet } from "./sortedSegmentSet.js";
28
28
  import { zamboniSegments } from "./zamboni.js";
29
29
  function markSegmentMoved(seg, moveInfo) {
@@ -761,13 +761,15 @@ export class MergeTree {
761
761
  segment: pendingSegment,
762
762
  });
763
763
  });
764
- if (opArgs.op.type === MergeTreeDeltaType.OBLITERATE) {
764
+ if (opArgs.op.type === MergeTreeDeltaType.OBLITERATE ||
765
+ opArgs.op.type === MergeTreeDeltaType.OBLITERATE_SIDED) {
765
766
  this.obliterates.addOrUpdate(pendingSegmentGroup.obliterateInfo);
766
767
  }
767
768
  // Perform slides after all segments have been acked, so that
768
769
  // positions after slide are final
769
770
  if (opArgs.op.type === MergeTreeDeltaType.REMOVE ||
770
- opArgs.op.type === MergeTreeDeltaType.OBLITERATE) {
771
+ opArgs.op.type === MergeTreeDeltaType.OBLITERATE ||
772
+ opArgs.op.type === MergeTreeDeltaType.OBLITERATE_SIDED) {
771
773
  this.slideAckedRemovedSegmentReferences(pendingSegmentGroup.segments);
772
774
  }
773
775
  this.mergeTreeMaintenanceCallback?.({
@@ -967,9 +969,9 @@ export class MergeTree {
967
969
  });
968
970
  }
969
971
  this.updateRoot(splitNode);
970
- saveIfLocal(newSegment);
971
972
  insertPos += newSegment.cachedLength;
972
973
  if (!this.options?.mergeTreeEnableObliterate || this.obliterates.empty()) {
974
+ saveIfLocal(newSegment);
973
975
  continue;
974
976
  }
975
977
  // eslint-disable-next-line import/no-deprecated
@@ -996,13 +998,13 @@ export class MergeTree {
996
998
  movedSeqs.unshift(ob.seq);
997
999
  }
998
1000
  else {
999
- if (newest === undefined || normalizedNewestSeq < normalizedObSeq) {
1000
- normalizedNewestSeq = normalizedObSeq;
1001
- newest = ob;
1002
- }
1003
1001
  movedClientIds.push(ob.clientId);
1004
1002
  movedSeqs.push(ob.seq);
1005
1003
  }
1004
+ if (newest === undefined || normalizedNewestSeq < normalizedObSeq) {
1005
+ normalizedNewestSeq = normalizedObSeq;
1006
+ newest = ob;
1007
+ }
1006
1008
  }
1007
1009
  }
1008
1010
  if (oldest && newest?.clientId !== clientId) {
@@ -1022,6 +1024,10 @@ export class MergeTree {
1022
1024
  this.blockUpdatePathLengths(newSegment.parent, seq, clientId);
1023
1025
  }
1024
1026
  }
1027
+ else if (oldest && newest?.clientId === clientId) {
1028
+ newSegment.prevObliterateByInserter = newest;
1029
+ }
1030
+ saveIfLocal(newSegment);
1025
1031
  }
1026
1032
  }
1027
1033
  }
@@ -1055,16 +1061,7 @@ export class MergeTree {
1055
1061
  }
1056
1062
  }
1057
1063
  insertingWalk(block, pos, refSeq, clientId, seq, context, isLastChildBlock = true) {
1058
- let _pos;
1059
- if (pos === "start") {
1060
- _pos = 0;
1061
- }
1062
- else if (pos === "end") {
1063
- _pos = this.root.mergeTree?.getLength(refSeq, clientId) ?? 0;
1064
- }
1065
- else {
1066
- _pos = pos;
1067
- }
1064
+ let _pos = pos;
1068
1065
  const children = block.children;
1069
1066
  let childIndex;
1070
1067
  let child;
@@ -1237,15 +1234,9 @@ export class MergeTree {
1237
1234
  zamboniSegments(this);
1238
1235
  }
1239
1236
  }
1240
- obliterateRange(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
1241
- errorIfOptionNotTrue(this.options, "mergeTreeEnableObliterate");
1242
- const { startPos, startSide, endPos, endSide } = endpointPosAndSide(start, end);
1243
- assert(startPos !== undefined &&
1244
- endPos !== undefined &&
1245
- startSide !== undefined &&
1246
- endSide !== undefined &&
1247
- startPos !== "end" &&
1248
- endPos !== "start", 0x9e2 /* start and end cannot be undefined because they were not passed in as undefined */);
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;
1249
1240
  this.ensureIntervalBoundary(startPos, refSeq, clientId);
1250
1241
  this.ensureIntervalBoundary(endPos, refSeq, clientId);
1251
1242
  let _overwrite = overwrite;
@@ -1262,20 +1253,46 @@ export class MergeTree {
1262
1253
  localSeq,
1263
1254
  segmentGroup: undefined,
1264
1255
  };
1265
- const normalizedStartPos = startPos === "start" || startPos === undefined ? 0 : startPos;
1266
- const normalizedEndPos = endPos === "end" || endPos === undefined ? this.getLength(refSeq, clientId) : endPos;
1267
- const { segment: startSeg } = this.getContainingSegment(normalizedStartPos, refSeq, clientId);
1268
- const { segment: endSeg } = this.getContainingSegment(normalizedEndPos - 1, refSeq, clientId);
1256
+ const { segment: startSeg } = this.getContainingSegment(start.pos, refSeq, clientId);
1257
+ const { segment: endSeg } = this.getContainingSegment(end.pos, refSeq, clientId);
1269
1258
  assert(startSeg !== undefined && endSeg !== undefined, 0xa3f /* segments cannot be undefined */);
1270
- 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, {
1271
1260
  obliterate,
1272
1261
  });
1273
- 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, {
1274
1263
  obliterate,
1275
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);
1276
1279
  const markMoved = (segment, pos, _start, _end) => {
1277
- 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
+ }
1278
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
+ }
1279
1296
  if (clientId !== segment.clientId &&
1280
1297
  segment.seq !== undefined &&
1281
1298
  seq !== UnassignedSequenceNumber &&
@@ -1316,7 +1333,6 @@ export class MergeTree {
1316
1333
  if (segment.movedSeq === UnassignedSequenceNumber &&
1317
1334
  clientId === this.collabWindow.clientId) {
1318
1335
  obliterate.segmentGroup = this.addToPendingList(segment, obliterate.segmentGroup, localSeq);
1319
- (_a = obliterate.segmentGroup).obliterateInfo ?? (_a.obliterateInfo = obliterate);
1320
1336
  }
1321
1337
  else {
1322
1338
  if (MergeTree.options.zamboniSegments) {
@@ -1335,8 +1351,8 @@ export class MergeTree {
1335
1351
  }
1336
1352
  return true;
1337
1353
  };
1338
- this.nodeMap(refSeq, clientId, markMoved, undefined, afterMarkMoved, start, end, undefined, seq === UnassignedSequenceNumber ? undefined : seq);
1339
- 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);
1340
1356
  this.slideAckedRemovedSegmentReferences(localOverlapWithRefs);
1341
1357
  // opArgs == undefined => test code
1342
1358
  if (movedSegments.length > 0) {
@@ -1357,6 +1373,17 @@ export class MergeTree {
1357
1373
  zamboniSegments(this);
1358
1374
  }
1359
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
+ }
1360
1387
  markRangeRemoved(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
1361
1388
  let _overwrite = overwrite;
1362
1389
  this.ensureIntervalBoundary(start, refSeq, clientId);
@@ -1805,18 +1832,11 @@ export class MergeTree {
1805
1832
  * ignored for the purposes of tracking when traversal should end.
1806
1833
  */
1807
1834
  nodeMap(refSeq, clientId, leaf, accum, post, start = 0, end, localSeq, visibilitySeq = refSeq) {
1808
- const maybeEndPos = end ?? this.nodeLength(this.root, refSeq, clientId, localSeq) ?? 0;
1809
- if (maybeEndPos === start) {
1835
+ const endPos = end ?? this.nodeLength(this.root, refSeq, clientId, localSeq) ?? 0;
1836
+ if (endPos === start) {
1810
1837
  return;
1811
1838
  }
1812
1839
  let pos = 0;
1813
- let { startPos, endPos } = endpointPosAndSide(start, end);
1814
- startPos = startPos === "start" || startPos === undefined ? 0 : startPos;
1815
- endPos =
1816
- endPos === "end" || endPos === undefined
1817
- ? this.root.mergeTree?.getLength(refSeq, clientId) ?? 0
1818
- : endPos;
1819
- assert(startPos !== "end" && endPos !== "start", 0x9e3 /* start cannot be 'end' and end cannot be 'start' */);
1820
1840
  depthFirstNodeWalk(this.root, this.root.children[0], (node) => {
1821
1841
  if (endPos <= pos) {
1822
1842
  return NodeAction.Exit;
@@ -1833,19 +1853,19 @@ export class MergeTree {
1833
1853
  }
1834
1854
  const nextPos = pos + lenAtRefSeq;
1835
1855
  // start is beyond the current node, so we can skip it
1836
- if (typeof startPos === "number" && startPos >= nextPos) {
1856
+ if (start >= nextPos) {
1837
1857
  pos = nextPos;
1838
1858
  return NodeAction.Skip;
1839
1859
  }
1840
1860
  if (node.isLeaf()) {
1841
- if (leaf(node, pos, refSeq, clientId, startPos - pos, endPos - pos, accum) === false) {
1861
+ if (leaf(node, pos, refSeq, clientId, start - pos, endPos - pos, accum) === false) {
1842
1862
  return NodeAction.Exit;
1843
1863
  }
1844
1864
  pos = nextPos;
1845
1865
  }
1846
1866
  }, undefined, post === undefined
1847
1867
  ? undefined
1848
- : (block) => post(block, pos, refSeq, clientId, startPos - pos, endPos - pos, accum));
1868
+ : (block) => post(block, pos, refSeq, clientId, start - pos, endPos - pos, accum));
1849
1869
  }
1850
1870
  }
1851
1871
  MergeTree.options = {