@fluidframework/merge-tree 2.12.0 → 2.13.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.
Files changed (285) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/MergeTreeTextHelper.d.ts.map +1 -1
  3. package/dist/MergeTreeTextHelper.js +0 -2
  4. package/dist/MergeTreeTextHelper.js.map +1 -1
  5. package/dist/attributionPolicy.d.ts.map +1 -1
  6. package/dist/attributionPolicy.js +6 -16
  7. package/dist/attributionPolicy.js.map +1 -1
  8. package/dist/client.d.ts +3 -4
  9. package/dist/client.d.ts.map +1 -1
  10. package/dist/client.js +39 -28
  11. package/dist/client.js.map +1 -1
  12. package/dist/endOfTreeSegment.d.ts +2 -1
  13. package/dist/endOfTreeSegment.d.ts.map +1 -1
  14. package/dist/endOfTreeSegment.js.map +1 -1
  15. package/dist/index.d.ts +2 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +2 -4
  18. package/dist/index.js.map +1 -1
  19. package/dist/mergeTree.d.ts +8 -7
  20. package/dist/mergeTree.d.ts.map +1 -1
  21. package/dist/mergeTree.js +190 -216
  22. package/dist/mergeTree.js.map +1 -1
  23. package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
  24. package/dist/mergeTreeNodeWalk.js +3 -2
  25. package/dist/mergeTreeNodeWalk.js.map +1 -1
  26. package/dist/mergeTreeNodes.d.ts +76 -162
  27. package/dist/mergeTreeNodes.d.ts.map +1 -1
  28. package/dist/mergeTreeNodes.js +100 -112
  29. package/dist/mergeTreeNodes.js.map +1 -1
  30. package/dist/mergeTreeTracking.d.ts.map +1 -1
  31. package/dist/mergeTreeTracking.js +0 -2
  32. package/dist/mergeTreeTracking.js.map +1 -1
  33. package/dist/partialLengths.d.ts +2 -2
  34. package/dist/partialLengths.d.ts.map +1 -1
  35. package/dist/partialLengths.js +28 -26
  36. package/dist/partialLengths.js.map +1 -1
  37. package/dist/perspective.d.ts +3 -2
  38. package/dist/perspective.d.ts.map +1 -1
  39. package/dist/perspective.js +11 -4
  40. package/dist/perspective.js.map +1 -1
  41. package/dist/referencePositions.d.ts.map +1 -1
  42. package/dist/referencePositions.js +4 -1
  43. package/dist/referencePositions.js.map +1 -1
  44. package/dist/revertibles.d.ts.map +1 -1
  45. package/dist/revertibles.js +10 -11
  46. package/dist/revertibles.js.map +1 -1
  47. package/dist/segmentGroupCollection.d.ts +4 -4
  48. package/dist/segmentGroupCollection.d.ts.map +1 -1
  49. package/dist/segmentGroupCollection.js +0 -6
  50. package/dist/segmentGroupCollection.js.map +1 -1
  51. package/dist/segmentInfos.d.ts +257 -0
  52. package/dist/segmentInfos.d.ts.map +1 -0
  53. package/dist/segmentInfos.js +166 -0
  54. package/dist/segmentInfos.js.map +1 -0
  55. package/dist/snapshotLoader.d.ts.map +1 -1
  56. package/dist/snapshotLoader.js +38 -44
  57. package/dist/snapshotLoader.js.map +1 -1
  58. package/dist/snapshotV1.d.ts.map +1 -1
  59. package/dist/snapshotV1.js +9 -12
  60. package/dist/snapshotV1.js.map +1 -1
  61. package/dist/snapshotlegacy.d.ts +2 -2
  62. package/dist/snapshotlegacy.d.ts.map +1 -1
  63. package/dist/snapshotlegacy.js +5 -3
  64. package/dist/snapshotlegacy.js.map +1 -1
  65. package/dist/sortedSegmentSet.d.ts.map +1 -1
  66. package/dist/sortedSegmentSet.js +5 -8
  67. package/dist/sortedSegmentSet.js.map +1 -1
  68. package/dist/test/beastTest.spec.d.ts +0 -2
  69. package/dist/test/beastTest.spec.d.ts.map +1 -1
  70. package/dist/test/beastTest.spec.js +1 -5
  71. package/dist/test/beastTest.spec.js.map +1 -1
  72. package/dist/test/client.annotateMarker.spec.js.map +1 -1
  73. package/dist/test/client.applyMsg.spec.js +15 -12
  74. package/dist/test/client.applyMsg.spec.js.map +1 -1
  75. package/dist/test/client.attributionFarm.spec.js.map +1 -1
  76. package/dist/test/client.getPosition.spec.js +3 -2
  77. package/dist/test/client.getPosition.spec.js.map +1 -1
  78. package/dist/test/client.localReference.spec.js +6 -6
  79. package/dist/test/client.localReference.spec.js.map +1 -1
  80. package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
  81. package/dist/test/client.rollback.spec.js.map +1 -1
  82. package/dist/test/dirname.cjs +0 -1
  83. package/dist/test/dirname.cjs.map +1 -1
  84. package/dist/test/index.d.ts +1 -1
  85. package/dist/test/index.d.ts.map +1 -1
  86. package/dist/test/index.js +2 -4
  87. package/dist/test/index.js.map +1 -1
  88. package/dist/test/mergeTree.annotate.spec.js +3 -0
  89. package/dist/test/mergeTree.annotate.spec.js.map +1 -1
  90. package/dist/test/mergeTree.insertingWalk.spec.js +1 -1
  91. package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
  92. package/dist/test/mergeTree.markRangeRemoved.spec.js +2 -0
  93. package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  94. package/dist/test/mergeTree.walk.spec.js.map +1 -1
  95. package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
  96. package/dist/test/mergeTreeOperationRunner.js +2 -3
  97. package/dist/test/mergeTreeOperationRunner.js.map +1 -1
  98. package/dist/test/obliterate.spec.js.map +1 -1
  99. package/dist/test/propertyManager.spec.js.map +1 -1
  100. package/dist/test/reconnectHelper.d.ts +2 -1
  101. package/dist/test/reconnectHelper.d.ts.map +1 -1
  102. package/dist/test/reconnectHelper.js.map +1 -1
  103. package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  104. package/dist/test/revertibleFarm.spec.js.map +1 -1
  105. package/dist/test/segmentGroupCollection.spec.js +15 -3
  106. package/dist/test/segmentGroupCollection.spec.js.map +1 -1
  107. package/dist/test/snapshot.utils.d.ts +2 -2
  108. package/dist/test/snapshot.utils.d.ts.map +1 -1
  109. package/dist/test/snapshot.utils.js.map +1 -1
  110. package/dist/test/sortedSegmentSet.spec.js +4 -3
  111. package/dist/test/sortedSegmentSet.spec.js.map +1 -1
  112. package/dist/test/testClient.d.ts +8 -6
  113. package/dist/test/testClient.d.ts.map +1 -1
  114. package/dist/test/testClient.js +29 -27
  115. package/dist/test/testClient.js.map +1 -1
  116. package/dist/test/testClientLogger.d.ts.map +1 -1
  117. package/dist/test/testClientLogger.js +6 -4
  118. package/dist/test/testClientLogger.js.map +1 -1
  119. package/dist/test/testUtils.d.ts +2 -2
  120. package/dist/test/testUtils.d.ts.map +1 -1
  121. package/dist/test/testUtils.js +32 -8
  122. package/dist/test/testUtils.js.map +1 -1
  123. package/dist/test/text.d.ts +2 -2
  124. package/dist/test/text.d.ts.map +1 -1
  125. package/dist/test/text.js +12 -6
  126. package/dist/test/text.js.map +1 -1
  127. package/dist/test/tracking.spec.js.map +1 -1
  128. package/dist/test/wordUnitTests.spec.js +1 -1
  129. package/dist/test/wordUnitTests.spec.js.map +1 -1
  130. package/dist/zamboni.d.ts.map +1 -1
  131. package/dist/zamboni.js +8 -7
  132. package/dist/zamboni.js.map +1 -1
  133. package/lib/MergeTreeTextHelper.d.ts.map +1 -1
  134. package/lib/MergeTreeTextHelper.js +0 -2
  135. package/lib/MergeTreeTextHelper.js.map +1 -1
  136. package/lib/attributionPolicy.d.ts.map +1 -1
  137. package/lib/attributionPolicy.js +6 -16
  138. package/lib/attributionPolicy.js.map +1 -1
  139. package/lib/client.d.ts +3 -4
  140. package/lib/client.d.ts.map +1 -1
  141. package/lib/client.js +40 -29
  142. package/lib/client.js.map +1 -1
  143. package/lib/endOfTreeSegment.d.ts +2 -1
  144. package/lib/endOfTreeSegment.d.ts.map +1 -1
  145. package/lib/endOfTreeSegment.js.map +1 -1
  146. package/lib/index.d.ts +2 -1
  147. package/lib/index.d.ts.map +1 -1
  148. package/lib/index.js +1 -1
  149. package/lib/index.js.map +1 -1
  150. package/lib/mergeTree.d.ts +8 -7
  151. package/lib/mergeTree.d.ts.map +1 -1
  152. package/lib/mergeTree.js +177 -205
  153. package/lib/mergeTree.js.map +1 -1
  154. package/lib/mergeTreeNodeWalk.d.ts.map +1 -1
  155. package/lib/mergeTreeNodeWalk.js +3 -2
  156. package/lib/mergeTreeNodeWalk.js.map +1 -1
  157. package/lib/mergeTreeNodes.d.ts +76 -162
  158. package/lib/mergeTreeNodes.d.ts.map +1 -1
  159. package/lib/mergeTreeNodes.js +95 -108
  160. package/lib/mergeTreeNodes.js.map +1 -1
  161. package/lib/mergeTreeTracking.d.ts.map +1 -1
  162. package/lib/mergeTreeTracking.js +0 -2
  163. package/lib/mergeTreeTracking.js.map +1 -1
  164. package/lib/partialLengths.d.ts +2 -2
  165. package/lib/partialLengths.d.ts.map +1 -1
  166. package/lib/partialLengths.js +25 -23
  167. package/lib/partialLengths.js.map +1 -1
  168. package/lib/perspective.d.ts +3 -2
  169. package/lib/perspective.d.ts.map +1 -1
  170. package/lib/perspective.js +11 -4
  171. package/lib/perspective.js.map +1 -1
  172. package/lib/referencePositions.d.ts.map +1 -1
  173. package/lib/referencePositions.js +4 -1
  174. package/lib/referencePositions.js.map +1 -1
  175. package/lib/revertibles.d.ts.map +1 -1
  176. package/lib/revertibles.js +8 -9
  177. package/lib/revertibles.js.map +1 -1
  178. package/lib/segmentGroupCollection.d.ts +4 -4
  179. package/lib/segmentGroupCollection.d.ts.map +1 -1
  180. package/lib/segmentGroupCollection.js +0 -6
  181. package/lib/segmentGroupCollection.js.map +1 -1
  182. package/lib/segmentInfos.d.ts +257 -0
  183. package/lib/segmentInfos.d.ts.map +1 -0
  184. package/lib/segmentInfos.js +145 -0
  185. package/lib/segmentInfos.js.map +1 -0
  186. package/lib/snapshotLoader.d.ts.map +1 -1
  187. package/lib/snapshotLoader.js +38 -44
  188. package/lib/snapshotLoader.js.map +1 -1
  189. package/lib/snapshotV1.d.ts.map +1 -1
  190. package/lib/snapshotV1.js +9 -12
  191. package/lib/snapshotV1.js.map +1 -1
  192. package/lib/snapshotlegacy.d.ts +2 -2
  193. package/lib/snapshotlegacy.d.ts.map +1 -1
  194. package/lib/snapshotlegacy.js +5 -3
  195. package/lib/snapshotlegacy.js.map +1 -1
  196. package/lib/sortedSegmentSet.d.ts.map +1 -1
  197. package/lib/sortedSegmentSet.js +5 -8
  198. package/lib/sortedSegmentSet.js.map +1 -1
  199. package/lib/test/beastTest.spec.d.ts +0 -2
  200. package/lib/test/beastTest.spec.d.ts.map +1 -1
  201. package/lib/test/beastTest.spec.js +0 -3
  202. package/lib/test/beastTest.spec.js.map +1 -1
  203. package/lib/test/client.annotateMarker.spec.js.map +1 -1
  204. package/lib/test/client.applyMsg.spec.js +15 -12
  205. package/lib/test/client.applyMsg.spec.js.map +1 -1
  206. package/lib/test/client.attributionFarm.spec.js.map +1 -1
  207. package/lib/test/client.getPosition.spec.js +3 -2
  208. package/lib/test/client.getPosition.spec.js.map +1 -1
  209. package/lib/test/client.localReference.spec.js +1 -1
  210. package/lib/test/client.localReference.spec.js.map +1 -1
  211. package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
  212. package/lib/test/client.rollback.spec.js +1 -1
  213. package/lib/test/client.rollback.spec.js.map +1 -1
  214. package/lib/test/dirname.cjs +0 -1
  215. package/lib/test/dirname.cjs.map +1 -1
  216. package/lib/test/index.d.ts +1 -1
  217. package/lib/test/index.d.ts.map +1 -1
  218. package/lib/test/index.js +1 -1
  219. package/lib/test/index.js.map +1 -1
  220. package/lib/test/mergeTree.annotate.spec.js +3 -0
  221. package/lib/test/mergeTree.annotate.spec.js.map +1 -1
  222. package/lib/test/mergeTree.insertingWalk.spec.js +2 -2
  223. package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
  224. package/lib/test/mergeTree.markRangeRemoved.spec.js +2 -0
  225. package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  226. package/lib/test/mergeTree.walk.spec.js.map +1 -1
  227. package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -1
  228. package/lib/test/mergeTreeOperationRunner.js +1 -2
  229. package/lib/test/mergeTreeOperationRunner.js.map +1 -1
  230. package/lib/test/obliterate.spec.js.map +1 -1
  231. package/lib/test/propertyManager.spec.js.map +1 -1
  232. package/lib/test/reconnectHelper.d.ts +2 -1
  233. package/lib/test/reconnectHelper.d.ts.map +1 -1
  234. package/lib/test/reconnectHelper.js.map +1 -1
  235. package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  236. package/lib/test/revertibleFarm.spec.js.map +1 -1
  237. package/lib/test/segmentGroupCollection.spec.js +15 -3
  238. package/lib/test/segmentGroupCollection.spec.js.map +1 -1
  239. package/lib/test/snapshot.utils.d.ts +2 -2
  240. package/lib/test/snapshot.utils.d.ts.map +1 -1
  241. package/lib/test/snapshot.utils.js.map +1 -1
  242. package/lib/test/sortedSegmentSet.spec.js +4 -3
  243. package/lib/test/sortedSegmentSet.spec.js.map +1 -1
  244. package/lib/test/testClient.d.ts +8 -6
  245. package/lib/test/testClient.d.ts.map +1 -1
  246. package/lib/test/testClient.js +30 -28
  247. package/lib/test/testClient.js.map +1 -1
  248. package/lib/test/testClientLogger.d.ts.map +1 -1
  249. package/lib/test/testClientLogger.js +5 -3
  250. package/lib/test/testClientLogger.js.map +1 -1
  251. package/lib/test/testUtils.d.ts +2 -2
  252. package/lib/test/testUtils.d.ts.map +1 -1
  253. package/lib/test/testUtils.js +9 -8
  254. package/lib/test/testUtils.js.map +1 -1
  255. package/lib/test/text.d.ts +2 -2
  256. package/lib/test/text.d.ts.map +1 -1
  257. package/lib/test/text.js +12 -6
  258. package/lib/test/text.js.map +1 -1
  259. package/lib/test/tracking.spec.js.map +1 -1
  260. package/lib/test/wordUnitTests.spec.js +1 -1
  261. package/lib/test/wordUnitTests.spec.js.map +1 -1
  262. package/lib/zamboni.d.ts.map +1 -1
  263. package/lib/zamboni.js +7 -6
  264. package/lib/zamboni.js.map +1 -1
  265. package/package.json +17 -17
  266. package/src/MergeTreeTextHelper.ts +2 -4
  267. package/src/attributionPolicy.ts +5 -13
  268. package/src/client.ts +55 -44
  269. package/src/endOfTreeSegment.ts +3 -3
  270. package/src/index.ts +4 -6
  271. package/src/mergeTree.ts +245 -282
  272. package/src/mergeTreeNodeWalk.ts +3 -2
  273. package/src/mergeTreeNodes.ts +190 -322
  274. package/src/mergeTreeTracking.ts +0 -3
  275. package/src/partialLengths.ts +42 -27
  276. package/src/perspective.ts +27 -4
  277. package/src/referencePositions.ts +4 -1
  278. package/src/revertibles.ts +19 -13
  279. package/src/segmentGroupCollection.ts +7 -18
  280. package/src/segmentInfos.ts +377 -0
  281. package/src/snapshotLoader.ts +60 -57
  282. package/src/snapshotV1.ts +14 -16
  283. package/src/snapshotlegacy.ts +12 -17
  284. package/src/sortedSegmentSet.ts +6 -8
  285. package/src/zamboni.ts +10 -12
package/dist/mergeTree.js CHANGED
@@ -22,45 +22,26 @@ const partialLengths_js_1 = require("./partialLengths.js");
22
22
  const perspective_js_1 = require("./perspective.js");
23
23
  const properties_js_1 = require("./properties.js");
24
24
  const referencePositions_js_1 = require("./referencePositions.js");
25
- // eslint-disable-next-line import/no-deprecated
26
25
  const segmentGroupCollection_js_1 = require("./segmentGroupCollection.js");
27
- // eslint-disable-next-line import/no-deprecated
26
+ const segmentInfos_js_1 = require("./segmentInfos.js");
28
27
  const segmentPropertiesManager_js_1 = require("./segmentPropertiesManager.js");
29
28
  const sequencePlace_js_1 = require("./sequencePlace.js");
30
29
  const sortedSegmentSet_js_1 = require("./sortedSegmentSet.js");
31
30
  const zamboni_js_1 = require("./zamboni.js");
32
- // eslint-disable-next-line import/no-deprecated
33
- function markSegmentMoved(seg, moveInfo) {
34
- seg.moveDst = moveInfo.moveDst;
35
- seg.movedClientIds = [...moveInfo.movedClientIds];
36
- seg.movedSeqs = [moveInfo.movedSeq];
37
- seg.movedSeq = moveInfo.movedSeq;
38
- seg.localMovedSeq = moveInfo.localMovedSeq;
39
- seg.wasMovedOnInsert = moveInfo.wasMovedOnInsert;
40
- }
41
- // eslint-disable-next-line import/no-deprecated
42
- function isMoved(segment) {
43
- return (0, mergeTreeNodes_js_1.toMoveInfo)(segment) !== undefined;
44
- }
45
- // eslint-disable-next-line import/no-deprecated
46
- function isRemoved(segment) {
47
- return (0, mergeTreeNodes_js_1.toRemovalInfo)(segment) !== undefined;
48
- }
49
- // eslint-disable-next-line import/no-deprecated
50
31
  function isRemovedAndAcked(segment) {
51
- const removalInfo = (0, mergeTreeNodes_js_1.toRemovalInfo)(segment);
32
+ const removalInfo = (0, segmentInfos_js_1.toRemovalInfo)(segment);
52
33
  return removalInfo !== undefined && removalInfo.removedSeq !== constants_js_1.UnassignedSequenceNumber;
53
34
  }
54
35
  // eslint-disable-next-line import/no-deprecated
55
36
  function isMovedAndAcked(segment) {
56
- const moveInfo = (0, mergeTreeNodes_js_1.toMoveInfo)(segment);
37
+ const moveInfo = (0, segmentInfos_js_1.toMoveInfo)(segment);
57
38
  return moveInfo !== undefined && moveInfo.movedSeq !== constants_js_1.UnassignedSequenceNumber;
58
39
  }
59
40
  function isRemovedAndAckedOrMovedAndAcked(segment) {
60
41
  return isRemovedAndAcked(segment) || isMovedAndAcked(segment);
61
42
  }
62
43
  function isRemovedOrMoved(segment) {
63
- return isRemoved(segment) || isMoved(segment);
44
+ return (0, segmentInfos_js_1.isRemoved)(segment) || (0, segmentInfos_js_1.isMoved)(segment);
64
45
  }
65
46
  function nodeTotalLength(mergeTree, node) {
66
47
  if (!node.isLeaf()) {
@@ -90,29 +71,25 @@ function ackSegment(segment, segmentGroup, opArgs) {
90
71
  return true;
91
72
  }
92
73
  case ops_js_1.MergeTreeDeltaType.REMOVE: {
93
- // eslint-disable-next-line import/no-deprecated
94
- const removalInfo = (0, mergeTreeNodes_js_1.toRemovalInfo)(segment);
95
- (0, internal_1.assert)(removalInfo !== undefined, 0x046 /* "On remove ack, missing removal info!" */);
74
+ (0, segmentInfos_js_1.assertRemoved)(segment);
96
75
  segment.localRemovedSeq = undefined;
97
- if (removalInfo.removedSeq === constants_js_1.UnassignedSequenceNumber) {
98
- removalInfo.removedSeq = sequenceNumber;
76
+ if (segment.removedSeq === constants_js_1.UnassignedSequenceNumber) {
77
+ segment.removedSeq = sequenceNumber;
99
78
  return true;
100
79
  }
101
80
  return false;
102
81
  }
103
82
  case ops_js_1.MergeTreeDeltaType.OBLITERATE:
104
83
  case ops_js_1.MergeTreeDeltaType.OBLITERATE_SIDED: {
105
- // eslint-disable-next-line import/no-deprecated
106
- const moveInfo = (0, mergeTreeNodes_js_1.toMoveInfo)(segment);
107
- (0, internal_1.assert)(moveInfo !== undefined, 0x86e /* On obliterate ack, missing move info! */);
84
+ (0, segmentInfos_js_1.assertMoved)(segment);
108
85
  const obliterateInfo = segmentGroup.obliterateInfo;
109
86
  (0, internal_1.assert)(obliterateInfo !== undefined, 0xa40 /* must have obliterate info */);
110
87
  segment.localMovedSeq = obliterateInfo.localSeq = undefined;
111
- const seqIdx = moveInfo.movedSeqs.indexOf(constants_js_1.UnassignedSequenceNumber);
88
+ const seqIdx = segment.movedSeqs.indexOf(constants_js_1.UnassignedSequenceNumber);
112
89
  (0, internal_1.assert)(seqIdx !== -1, 0x86f /* expected movedSeqs to contain unacked seq */);
113
- moveInfo.movedSeqs[seqIdx] = sequenceNumber;
114
- if (moveInfo.movedSeq === constants_js_1.UnassignedSequenceNumber) {
115
- moveInfo.movedSeq = sequenceNumber;
90
+ segment.movedSeqs[seqIdx] = sequenceNumber;
91
+ if (segment.movedSeq === constants_js_1.UnassignedSequenceNumber) {
92
+ segment.movedSeq = sequenceNumber;
116
93
  return true;
117
94
  }
118
95
  return false;
@@ -151,7 +128,6 @@ exports.findRootMergeBlock = findRootMergeBlock;
151
128
  * entries for all segments visited during excursion.
152
129
  * This can reduce the number of times the tree needs to be scanned if a range containing many
153
130
  * SlideOnRemove references is removed.
154
- * @internal
155
131
  */
156
132
  function getSlideToSegment(segment, slidingPreference = localReference_js_1.SlidingPreference.FORWARD, cache, useNewSlidingBehavior = false) {
157
133
  if (!segment ||
@@ -171,7 +147,8 @@ function getSlideToSegment(segment, slidingPreference = localReference_js_1.Slid
171
147
  return false;
172
148
  }
173
149
  if (cache !== undefined &&
174
- (seg.removedSeq === segment.removedSeq || seg.movedSeq === segment.movedSeq)) {
150
+ ((0, segmentInfos_js_1.toRemovalInfo)(seg)?.removedSeq === (0, segmentInfos_js_1.toRemovalInfo)(segment)?.removedSeq ||
151
+ (0, segmentInfos_js_1.toMoveInfo)(seg)?.movedSeq === (0, segmentInfos_js_1.toMoveInfo)(segment)?.movedSeq)) {
175
152
  cache.set(seg, result);
176
153
  }
177
154
  return true;
@@ -218,7 +195,7 @@ function getSlideToSegment(segment, slidingPreference = localReference_js_1.Slid
218
195
  * @internal
219
196
  */
220
197
  function getSlideToSegoff(segoff, slidingPreference = localReference_js_1.SlidingPreference.FORWARD, useNewSlidingBehavior = false) {
221
- if (segoff.segment === undefined) {
198
+ if (!(0, mergeTreeNodes_js_1.isSegmentLeaf)(segoff.segment)) {
222
199
  return segoff;
223
200
  }
224
201
  const [segment, _] = getSlideToSegment(segoff.segment, slidingPreference, undefined, useNewSlidingBehavior);
@@ -246,7 +223,6 @@ class Obliterates {
246
223
  * See https://github.com/microsoft/FluidFramework/blob/main/packages/dds/merge-tree/docs/Obliterate.md#remote-perspective
247
224
  * for additional context
248
225
  */
249
- // eslint-disable-next-line import/no-deprecated
250
226
  this.seqOrdered = new index_js_1.DoublyLinkedList();
251
227
  /**
252
228
  * This contains a sorted lists of all obliterate starts
@@ -264,7 +240,6 @@ class Obliterates {
264
240
  this.mergeTree.removeLocalReferencePosition(ob.data.end);
265
241
  }
266
242
  }
267
- // eslint-disable-next-line import/no-deprecated
268
243
  addOrUpdate(obliterateInfo) {
269
244
  const { seq, start } = obliterateInfo;
270
245
  if (seq !== constants_js_1.UnassignedSequenceNumber) {
@@ -275,14 +250,14 @@ class Obliterates {
275
250
  empty() {
276
251
  return this.startOrdered.size === 0;
277
252
  }
278
- // eslint-disable-next-line import/no-deprecated
279
253
  findOverlapping(seg) {
280
- // eslint-disable-next-line import/no-deprecated
281
254
  const overlapping = [];
282
255
  for (const start of this.startOrdered.items) {
283
- if (start.getSegment().ordinal <= seg.ordinal) {
256
+ const startSeg = start.getSegment();
257
+ if ((0, segmentInfos_js_1.isMergeNodeInfo)(startSeg) && startSeg.ordinal <= seg.ordinal) {
284
258
  const ob = start.properties?.obliterate;
285
- if (ob.end.getSegment().ordinal >= seg.ordinal) {
259
+ const endSeg = ob.end.getSegment();
260
+ if ((0, segmentInfos_js_1.isMergeNodeInfo)(endSeg) && endSeg.ordinal >= seg.ordinal) {
286
261
  overlapping.push(ob);
287
262
  }
288
263
  }
@@ -300,9 +275,7 @@ class Obliterates {
300
275
  class MergeTree {
301
276
  constructor(options) {
302
277
  this.options = options;
303
- // eslint-disable-next-line import/no-deprecated
304
278
  this.collabWindow = new mergeTreeNodes_js_1.CollaborationWindow();
305
- // eslint-disable-next-line import/no-deprecated
306
279
  this.pendingSegments = new index_js_1.DoublyLinkedList();
307
280
  this.segmentsToScour = new internal_1.Heap(LRUSegmentComparer);
308
281
  /**
@@ -320,6 +293,7 @@ class MergeTree {
320
293
  return {};
321
294
  }
322
295
  const next = segment.splitAt(pos);
296
+ (0, mergeTreeNodes_js_1.assertSegmentLeaf)(next);
323
297
  if (segment?.segmentGroups) {
324
298
  next.segmentGroups ?? (next.segmentGroups = new segmentGroupCollection_js_1.SegmentGroupCollection(next));
325
299
  segment.segmentGroups.copyTo(next.segmentGroups);
@@ -363,8 +337,8 @@ class MergeTree {
363
337
  * numbers corresponding to un-acked operations give valid results.
364
338
  */
365
339
  localNetLength(segment, refSeq, localSeq) {
366
- const removalInfo = (0, mergeTreeNodes_js_1.toRemovalInfo)(segment);
367
- const moveInfo = (0, mergeTreeNodes_js_1.toMoveInfo)(segment);
340
+ const removalInfo = (0, segmentInfos_js_1.toRemovalInfo)(segment);
341
+ const moveInfo = (0, segmentInfos_js_1.toMoveInfo)(segment);
368
342
  if (localSeq === undefined) {
369
343
  if (removalInfo !== undefined || moveInfo !== undefined) {
370
344
  if ((!!removalInfo && !(0, mergeTreeNodes_js_1.seqLTE)(removalInfo.removedSeq, this.collabWindow.minSeq)) ||
@@ -382,7 +356,9 @@ class MergeTree {
382
356
  }
383
357
  (0, internal_1.assert)(refSeq !== undefined, 0x398 /* localSeq provided for local length without refSeq */);
384
358
  (0, internal_1.assert)(segment.seq !== undefined, 0x399 /* segment with no seq in mergeTree */);
385
- const { seq, removedSeq, localRemovedSeq, movedSeq, localMovedSeq } = segment;
359
+ const { seq } = segment;
360
+ const { removedSeq, localRemovedSeq } = removalInfo ?? {};
361
+ const { movedSeq, localMovedSeq } = moveInfo ?? {};
386
362
  if (seq === constants_js_1.UnassignedSequenceNumber) {
387
363
  (0, internal_1.assert)(segment.localSeq !== undefined, 0x39a /* unacked segment with undefined localSeq */);
388
364
  // inserted locally, still un-acked
@@ -418,7 +394,7 @@ class MergeTree {
418
394
  }
419
395
  addNode(block, node) {
420
396
  const index = block.childCount++;
421
- block.assignChild(node, index, false);
397
+ (0, mergeTreeNodes_js_1.assignChild)(block, node, index, false);
422
398
  return index;
423
399
  }
424
400
  reloadFromSegments(segments) {
@@ -512,12 +488,12 @@ class MergeTree {
512
488
  (0, internal_1.assert)(localSeq === undefined || clientId === this.collabWindow.clientId, 0x39b /* localSeq provided for non-local client */);
513
489
  let segment;
514
490
  let offset;
515
- const leaf = (leafSeg, segpos, _refSeq, _clientId, start) => {
491
+ const leaf = (leafSeg, _, start) => {
516
492
  segment = leafSeg;
517
493
  offset = start;
518
494
  return false;
519
495
  };
520
- this.nodeMap(refSeq, clientId, leaf, undefined, undefined, pos, pos + 1, localSeq);
496
+ this.nodeMap(refSeq, clientId, leaf, undefined, pos, pos + 1, localSeq);
521
497
  return { segment, offset };
522
498
  }
523
499
  /**
@@ -652,7 +628,6 @@ class MergeTree {
652
628
  if (this.localPartialsComputed) {
653
629
  return;
654
630
  }
655
- // eslint-disable-next-line import/no-deprecated
656
631
  const rebaseCollabWindow = new mergeTreeNodes_js_1.CollaborationWindow();
657
632
  rebaseCollabWindow.loadFrom(this.collabWindow);
658
633
  if (refSeq < this.collabWindow.minSeq) {
@@ -682,8 +657,8 @@ class MergeTree {
682
657
  // Sequence number within window
683
658
  if (node.isLeaf()) {
684
659
  const segment = node;
685
- const removalInfo = (0, mergeTreeNodes_js_1.toRemovalInfo)(segment);
686
- const moveInfo = (0, mergeTreeNodes_js_1.toMoveInfo)(segment);
660
+ const removalInfo = (0, segmentInfos_js_1.toRemovalInfo)(segment);
661
+ const moveInfo = (0, segmentInfos_js_1.toMoveInfo)(segment);
687
662
  if (removalInfo !== undefined) {
688
663
  if ((0, mergeTreeNodes_js_1.seqLTE)(removalInfo.removedSeq, this.collabWindow.minSeq)) {
689
664
  return undefined;
@@ -736,24 +711,26 @@ class MergeTree {
736
711
  */
737
712
  referencePositionToLocalPosition(refPos, refSeq = Number.MAX_SAFE_INTEGER, clientId = this.collabWindow.clientId, localSeq = this.collabWindow.localSeq) {
738
713
  const seg = refPos.getSegment();
739
- if (seg?.parent === undefined) {
714
+ if (!(0, mergeTreeNodes_js_1.isSegmentLeaf)(seg)) {
740
715
  // We have no idea where this reference is, because it refers to a segment which is not in the tree.
741
716
  return referencePositions_js_1.DetachedReferencePosition;
742
717
  }
743
718
  if (refPos.isLeaf()) {
744
- return this.getPosition(refPos, refSeq, clientId, localSeq);
719
+ return this.getPosition(seg, refSeq, clientId, localSeq);
745
720
  }
746
721
  if ((0, referencePositions_js_1.refTypeIncludesFlag)(refPos, ops_js_1.ReferenceType.Transient) || seg.localRefs?.has(refPos)) {
747
722
  if (seg !== this.startOfTree &&
748
723
  seg !== this.endOfTree &&
749
724
  !(0, perspective_js_1.isSegmentPresent)(seg, { refSeq, localSeq })) {
750
725
  const forward = refPos.slidingPreference === localReference_js_1.SlidingPreference.FORWARD;
751
- const slideSeq = seg.movedSeq !== constants_js_1.UnassignedSequenceNumber && seg.movedSeq !== undefined
752
- ? seg.movedSeq
753
- : seg.removedSeq !== constants_js_1.UnassignedSequenceNumber && seg.removedSeq !== undefined
754
- ? seg.removedSeq
726
+ const moveInfo = (0, segmentInfos_js_1.toMoveInfo)(seg);
727
+ const removeInfo = (0, segmentInfos_js_1.toRemovalInfo)(seg);
728
+ const slideSeq = moveInfo !== undefined && moveInfo.movedSeq !== constants_js_1.UnassignedSequenceNumber
729
+ ? moveInfo.movedSeq
730
+ : removeInfo !== undefined && removeInfo.removedSeq !== constants_js_1.UnassignedSequenceNumber
731
+ ? removeInfo.removedSeq
755
732
  : refSeq;
756
- const slideLocalSeq = seg.localMovedSeq ?? seg.localRemovedSeq;
733
+ const slideLocalSeq = moveInfo?.localMovedSeq ?? removeInfo?.localRemovedSeq;
757
734
  const perspective = new perspective_js_1.PerspectiveImpl(this, {
758
735
  refSeq: slideSeq,
759
736
  localSeq: slideLocalSeq,
@@ -781,11 +758,10 @@ class MergeTree {
781
758
  searchForMarker(startPos, clientId, markerLabel, forwards = true) {
782
759
  let foundMarker;
783
760
  const { segment } = this.getContainingSegment(startPos, constants_js_1.UniversalSequenceNumber, clientId);
784
- const segWithParent = segment;
785
- if (segWithParent?.parent === undefined) {
761
+ if (!(0, mergeTreeNodes_js_1.isSegmentLeaf)(segment)) {
786
762
  return undefined;
787
763
  }
788
- (0, mergeTreeNodeWalk_js_1.depthFirstNodeWalk)(segWithParent.parent, segWithParent, (node) => {
764
+ (0, mergeTreeNodeWalk_js_1.depthFirstNodeWalk)(segment.parent, segment, (node) => {
789
765
  if (node.isLeaf()) {
790
766
  if (mergeTreeNodes_js_1.Marker.is(node) && (0, referencePositions_js_1.refHasTileLabel)(node, markerLabel)) {
791
767
  foundMarker = node;
@@ -807,8 +783,8 @@ class MergeTree {
807
783
  updateRoot(splitNode) {
808
784
  if (splitNode !== undefined) {
809
785
  const newRoot = this.makeBlock(2);
810
- newRoot.assignChild(this.root, 0, false);
811
- newRoot.assignChild(splitNode, 1, false);
786
+ (0, mergeTreeNodes_js_1.assignChild)(newRoot, this.root, 0, false);
787
+ (0, mergeTreeNodes_js_1.assignChild)(newRoot, splitNode, 1, false);
812
788
  this.root = newRoot;
813
789
  this.nodeUpdateOrdinals(this.root);
814
790
  this.nodeUpdateLengthNewStructure(this.root);
@@ -864,9 +840,7 @@ class MergeTree {
864
840
  (0, zamboni_js_1.zamboniSegments)(this);
865
841
  }
866
842
  }
867
- addToPendingList(segment,
868
- // eslint-disable-next-line import/no-deprecated
869
- segmentGroup, localSeq, previousProps) {
843
+ addToPendingList(segment, segmentGroup, localSeq, previousProps) {
870
844
  let _segmentGroup = segmentGroup;
871
845
  if (_segmentGroup === undefined) {
872
846
  _segmentGroup = {
@@ -886,7 +860,6 @@ class MergeTree {
886
860
  if (previousProps) {
887
861
  _segmentGroup.previousProps.push(previousProps);
888
862
  }
889
- // eslint-disable-next-line import/no-deprecated
890
863
  const segmentGroups = (segment.segmentGroups ?? (segment.segmentGroups = new segmentGroupCollection_js_1.SegmentGroupCollection(segment)));
891
864
  segmentGroups.enqueue(_segmentGroup);
892
865
  return _segmentGroup;
@@ -895,8 +868,8 @@ class MergeTree {
895
868
  getMarkerFromId(id) {
896
869
  const marker = this.idToMarker.get(id);
897
870
  return marker === undefined ||
898
- isRemoved(marker) ||
899
- (isMoved(marker) && marker.moveDst === undefined)
871
+ (0, segmentInfos_js_1.isRemoved)(marker) ||
872
+ ((0, segmentInfos_js_1.isMoved)(marker) && marker.moveDst === undefined)
900
873
  ? undefined
901
874
  : marker;
902
875
  }
@@ -913,7 +886,7 @@ class MergeTree {
913
886
  if (relativePos.id) {
914
887
  marker = this.getMarkerFromId(relativePos.id);
915
888
  }
916
- if (marker) {
889
+ if ((0, mergeTreeNodes_js_1.isSegmentLeaf)(marker)) {
917
890
  pos = this.getPosition(marker, refseq, clientId);
918
891
  if (relativePos.before) {
919
892
  if (relativePos.offset !== undefined) {
@@ -936,7 +909,7 @@ class MergeTree {
936
909
  // opArgs == undefined => loading snapshot or test code
937
910
  if (opArgs !== undefined) {
938
911
  const deltaSegments = segments
939
- .filter((segment) => !(0, mergeTreeNodes_js_1.toMoveInfo)(segment))
912
+ .filter((segment) => !(0, segmentInfos_js_1.toMoveInfo)(segment))
940
913
  .map((segment) => ({ segment }));
941
914
  if (deltaSegments.length > 0) {
942
915
  this.mergeTreeDeltaCallback?.(opArgs, {
@@ -971,7 +944,7 @@ class MergeTree {
971
944
  }
972
945
  const segmentInfo = this.getContainingSegment(remoteClientPosition, remoteClientRefSeq, remoteClientId);
973
946
  const { currentSeq, clientId } = this.collabWindow;
974
- if (segmentInfo?.segment) {
947
+ if ((0, mergeTreeNodes_js_1.isSegmentLeaf)(segmentInfo?.segment)) {
975
948
  const segmentPosition = this.getPosition(segmentInfo.segment, currentSeq, clientId);
976
949
  return segmentPosition + segmentInfo.offset;
977
950
  }
@@ -992,7 +965,6 @@ class MergeTree {
992
965
  });
993
966
  return siblingExists;
994
967
  };
995
- // eslint-disable-next-line import/no-deprecated
996
968
  let segmentGroup;
997
969
  const saveIfLocal = (locSegment) => {
998
970
  // Save segment so we can assign sequence number when acked by server
@@ -1022,93 +994,95 @@ class MergeTree {
1022
994
  }
1023
995
  return segmentChanges;
1024
996
  };
997
+ const insertInfo = {
998
+ clientId,
999
+ seq,
1000
+ localSeq,
1001
+ };
1025
1002
  // TODO: build tree from segs and insert all at once
1026
1003
  let insertPos = pos;
1027
- for (const newSegment of newSegments) {
1028
- if (newSegment.cachedLength > 0) {
1029
- newSegment.seq = seq;
1030
- newSegment.localSeq = localSeq;
1031
- newSegment.clientId = clientId;
1032
- if (mergeTreeNodes_js_1.Marker.is(newSegment)) {
1033
- const markerId = newSegment.getId();
1034
- if (markerId) {
1035
- this.idToMarker.set(markerId, newSegment);
1036
- }
1004
+ for (const newSegment of newSegments
1005
+ .filter((s) => s.cachedLength > 0)
1006
+ .map((s) => (0, segmentInfos_js_1.overwriteInfo)(s, insertInfo))) {
1007
+ if (mergeTreeNodes_js_1.Marker.is(newSegment)) {
1008
+ const markerId = newSegment.getId();
1009
+ if (markerId) {
1010
+ this.idToMarker.set(markerId, newSegment);
1037
1011
  }
1038
- const splitNode = this.insertingWalk(this.root, insertPos, refSeq, clientId, seq, {
1039
- leaf: onLeaf,
1040
- candidateSegment: newSegment,
1041
- continuePredicate: continueFrom,
1012
+ }
1013
+ const splitNode = this.insertingWalk(this.root, insertPos, refSeq, clientId, seq, {
1014
+ leaf: onLeaf,
1015
+ candidateSegment: newSegment,
1016
+ continuePredicate: continueFrom,
1017
+ });
1018
+ if (!(0, mergeTreeNodes_js_1.isSegmentLeaf)(newSegment)) {
1019
+ // Indicates an attempt to insert past the end of the merge-tree's content.
1020
+ const errorConstructor = localSeq === undefined ? internal_2.DataProcessingError : internal_2.UsageError;
1021
+ throw new errorConstructor("MergeTree insert failed", {
1022
+ currentSeq: this.collabWindow.currentSeq,
1023
+ minSeq: this.collabWindow.minSeq,
1024
+ segSeq: insertInfo.seq,
1042
1025
  });
1043
- if (newSegment.parent === undefined) {
1044
- // Indicates an attempt to insert past the end of the merge-tree's content.
1045
- const errorConstructor = localSeq === undefined ? internal_2.DataProcessingError : internal_2.UsageError;
1046
- throw new errorConstructor("MergeTree insert failed", {
1047
- currentSeq: this.collabWindow.currentSeq,
1048
- minSeq: this.collabWindow.minSeq,
1049
- segSeq: newSegment.seq,
1050
- });
1051
- }
1052
- this.updateRoot(splitNode);
1053
- insertPos += newSegment.cachedLength;
1054
- if (!this.options?.mergeTreeEnableObliterate || this.obliterates.empty()) {
1055
- saveIfLocal(newSegment);
1056
- continue;
1057
- }
1058
- let oldest;
1059
- let normalizedOldestSeq = 0;
1060
- let newest;
1061
- let normalizedNewestSeq = 0;
1062
- const movedClientIds = [];
1063
- const movedSeqs = [];
1064
- for (const ob of this.obliterates.findOverlapping(newSegment)) {
1065
- // compute a normalized seq that takes into account local seqs
1066
- // but is still comparable to remote seqs to keep the checks below easy
1067
- // REMOTE SEQUENCE NUMBERS LOCAL SEQUENCE NUMBERS
1068
- // [0, 1, 2, 3, ..., 100, ..., 1000, ..., (MAX - MaxLocalSeq), L1, L2, L3, L4, ..., L100, ..., L1000, ...(MAX)]
1069
- const normalizedObSeq = ob.seq === constants_js_1.UnassignedSequenceNumber
1070
- ? Number.MAX_SAFE_INTEGER - this.collabWindow.localSeq + ob.localSeq
1071
- : ob.seq;
1072
- if (normalizedObSeq > refSeq) {
1073
- if (oldest === undefined || normalizedOldestSeq > normalizedObSeq) {
1074
- normalizedOldestSeq = normalizedObSeq;
1075
- oldest = ob;
1076
- movedClientIds.unshift(ob.clientId);
1077
- movedSeqs.unshift(ob.seq);
1078
- }
1079
- else {
1080
- movedClientIds.push(ob.clientId);
1081
- movedSeqs.push(ob.seq);
1082
- }
1083
- if (newest === undefined || normalizedNewestSeq < normalizedObSeq) {
1084
- normalizedNewestSeq = normalizedObSeq;
1085
- newest = ob;
1086
- }
1026
+ }
1027
+ this.updateRoot(splitNode);
1028
+ insertPos += newSegment.cachedLength;
1029
+ if (!this.options?.mergeTreeEnableObliterate || this.obliterates.empty()) {
1030
+ saveIfLocal(newSegment);
1031
+ continue;
1032
+ }
1033
+ let oldest;
1034
+ let normalizedOldestSeq = 0;
1035
+ let newest;
1036
+ let normalizedNewestSeq = 0;
1037
+ const movedClientIds = [];
1038
+ const movedSeqs = [];
1039
+ for (const ob of this.obliterates.findOverlapping(newSegment)) {
1040
+ // compute a normalized seq that takes into account local seqs
1041
+ // but is still comparable to remote seqs to keep the checks below easy
1042
+ // REMOTE SEQUENCE NUMBERS LOCAL SEQUENCE NUMBERS
1043
+ // [0, 1, 2, 3, ..., 100, ..., 1000, ..., (MAX - MaxLocalSeq), L1, L2, L3, L4, ..., L100, ..., L1000, ...(MAX)]
1044
+ const normalizedObSeq = ob.seq === constants_js_1.UnassignedSequenceNumber
1045
+ ? Number.MAX_SAFE_INTEGER - this.collabWindow.localSeq + ob.localSeq
1046
+ : ob.seq;
1047
+ if (normalizedObSeq > refSeq) {
1048
+ if (oldest === undefined || normalizedOldestSeq > normalizedObSeq) {
1049
+ normalizedOldestSeq = normalizedObSeq;
1050
+ oldest = ob;
1051
+ movedClientIds.unshift(ob.clientId);
1052
+ movedSeqs.unshift(ob.seq);
1087
1053
  }
1088
- }
1089
- if (oldest && newest?.clientId !== clientId) {
1090
- // eslint-disable-next-line import/no-deprecated
1091
- const moveInfo = {
1092
- movedClientIds,
1093
- movedSeq: oldest.seq,
1094
- movedSeqs,
1095
- localMovedSeq: oldest.localSeq,
1096
- wasMovedOnInsert: oldest.seq !== constants_js_1.UnassignedSequenceNumber,
1097
- };
1098
- markSegmentMoved(newSegment, moveInfo);
1099
- if (moveInfo.localMovedSeq !== undefined) {
1100
- (0, internal_1.assert)(oldest.segmentGroup !== undefined, 0x86c /* expected segment group to exist */);
1101
- this.addToPendingList(newSegment, oldest.segmentGroup);
1054
+ else {
1055
+ movedClientIds.push(ob.clientId);
1056
+ movedSeqs.push(ob.seq);
1102
1057
  }
1103
- if (newSegment.parent) {
1104
- this.blockUpdatePathLengths(newSegment.parent, seq, clientId);
1058
+ if (newest === undefined || normalizedNewestSeq < normalizedObSeq) {
1059
+ normalizedNewestSeq = normalizedObSeq;
1060
+ newest = ob;
1105
1061
  }
1106
1062
  }
1107
- else if (oldest && newest?.clientId === clientId) {
1108
- newSegment.prevObliterateByInserter = newest;
1063
+ }
1064
+ if (oldest && newest?.clientId !== clientId) {
1065
+ // eslint-disable-next-line import/no-deprecated
1066
+ const moveInfo = {
1067
+ movedClientIds,
1068
+ movedSeq: oldest.seq,
1069
+ movedSeqs,
1070
+ localMovedSeq: oldest.localSeq,
1071
+ wasMovedOnInsert: oldest.seq !== constants_js_1.UnassignedSequenceNumber,
1072
+ };
1073
+ (0, segmentInfos_js_1.overwriteInfo)(newSegment, moveInfo);
1074
+ if (moveInfo.localMovedSeq !== undefined) {
1075
+ (0, internal_1.assert)(oldest.segmentGroup !== undefined, 0x86c /* expected segment group to exist */);
1076
+ this.addToPendingList(newSegment, oldest.segmentGroup);
1109
1077
  }
1110
- saveIfLocal(newSegment);
1078
+ if (newSegment.parent) {
1079
+ this.blockUpdatePathLengths(newSegment.parent, seq, clientId);
1080
+ }
1081
+ }
1082
+ else if (oldest && newest?.clientId === clientId) {
1083
+ newSegment.prevObliterateByInserter = newest;
1111
1084
  }
1085
+ saveIfLocal(newSegment);
1112
1086
  }
1113
1087
  }
1114
1088
  ensureIntervalBoundary(pos, refSeq, clientId) {
@@ -1129,10 +1103,8 @@ class MergeTree {
1129
1103
  const newSeq = seq === constants_js_1.UnassignedSequenceNumber ? Number.MAX_SAFE_INTEGER : seq;
1130
1104
  const segSeq = node.seq === constants_js_1.UnassignedSequenceNumber ? Number.MAX_SAFE_INTEGER - 1 : (node.seq ?? 0);
1131
1105
  return (newSeq > segSeq ||
1132
- (node.movedSeq !== undefined &&
1133
- node.movedSeq !== constants_js_1.UnassignedSequenceNumber &&
1134
- node.movedSeq > seq) ||
1135
- (node.removedSeq !== undefined &&
1106
+ ((0, segmentInfos_js_1.isMoved)(node) && node.movedSeq !== constants_js_1.UnassignedSequenceNumber && node.movedSeq > seq) ||
1107
+ ((0, segmentInfos_js_1.isRemoved)(node) &&
1136
1108
  node.removedSeq !== constants_js_1.UnassignedSequenceNumber &&
1137
1109
  node.removedSeq > seq));
1138
1110
  }
@@ -1164,7 +1136,7 @@ class MergeTree {
1164
1136
  const segment = child;
1165
1137
  const segmentChanges = context.leaf(segment, _pos, context);
1166
1138
  if (segmentChanges.replaceCurrent) {
1167
- block.assignChild(segmentChanges.replaceCurrent, childIndex, false);
1139
+ (0, mergeTreeNodes_js_1.assignChild)(block, segmentChanges.replaceCurrent, childIndex, false);
1168
1140
  segmentChanges.replaceCurrent.ordinal = child.ordinal;
1169
1141
  }
1170
1142
  if (segmentChanges.next) {
@@ -1215,7 +1187,7 @@ class MergeTree {
1215
1187
  block.children[i] = block.children[i - 1];
1216
1188
  block.children[i].index = i;
1217
1189
  }
1218
- block.assignChild(newNode, childIndex, false);
1190
+ (0, mergeTreeNodes_js_1.assignChild)(block, newNode, childIndex, false);
1219
1191
  block.childCount++;
1220
1192
  block.setOrdinal(newNode, childIndex);
1221
1193
  if (block.childCount < mergeTreeNodes_js_1.MaxNodesInBlock) {
@@ -1244,7 +1216,7 @@ class MergeTree {
1244
1216
  // Update ordinals to reflect lowered child count
1245
1217
  this.nodeUpdateOrdinals(node);
1246
1218
  for (let i = 0; i < halfCount; i++) {
1247
- newNode.assignChild(node.children[halfCount + i], i, false);
1219
+ (0, mergeTreeNodes_js_1.assignChild)(newNode, node.children[halfCount + i], i, false);
1248
1220
  node.children[halfCount + i] = undefined;
1249
1221
  }
1250
1222
  this.nodeUpdateLengthNewStructure(node);
@@ -1271,9 +1243,7 @@ class MergeTree {
1271
1243
  * @param opArgs - The op args for the annotate op. this is passed to the merge tree callback if there is one
1272
1244
  * @param rollback - Whether this is for a local rollback and what kind
1273
1245
  */
1274
- annotateRange(start, end, propsOrAdjust, refSeq, clientId, seq, opArgs,
1275
- // eslint-disable-next-line import/no-deprecated
1276
- rollback = segmentPropertiesManager_js_1.PropertiesRollback.None) {
1246
+ annotateRange(start, end, propsOrAdjust, refSeq, clientId, seq, opArgs, rollback = segmentPropertiesManager_js_1.PropertiesRollback.None) {
1277
1247
  if (propsOrAdjust.adjust !== undefined) {
1278
1248
  errorIfOptionNotTrue(this.options, "mergeTreeEnableAnnotateAdjust");
1279
1249
  }
@@ -1281,7 +1251,6 @@ class MergeTree {
1281
1251
  this.ensureIntervalBoundary(end, refSeq, clientId);
1282
1252
  const deltaSegments = [];
1283
1253
  const localSeq = seq === constants_js_1.UnassignedSequenceNumber ? ++this.collabWindow.localSeq : undefined;
1284
- // eslint-disable-next-line import/no-deprecated
1285
1254
  let segmentGroup;
1286
1255
  const opObj = propsOrAdjust.props ?? propsOrAdjust.adjust;
1287
1256
  const annotateSegment = (segment) => {
@@ -1305,7 +1274,7 @@ class MergeTree {
1305
1274
  }
1306
1275
  return true;
1307
1276
  };
1308
- this.nodeMap(refSeq, clientId, annotateSegment, undefined, undefined, start, end);
1277
+ this.nodeMap(refSeq, clientId, annotateSegment, undefined, start, end);
1309
1278
  // OpArgs == undefined => test code
1310
1279
  if (deltaSegments.length > 0) {
1311
1280
  this.mergeTreeDeltaCallback?.(opArgs, {
@@ -1326,9 +1295,9 @@ class MergeTree {
1326
1295
  this.ensureIntervalBoundary(endPos, refSeq, clientId);
1327
1296
  let _overwrite = false;
1328
1297
  const localOverlapWithRefs = [];
1298
+ // eslint-disable-next-line import/no-deprecated
1329
1299
  const movedSegments = [];
1330
1300
  const localSeq = seq === constants_js_1.UnassignedSequenceNumber ? ++this.collabWindow.localSeq : undefined;
1331
- // eslint-disable-next-line import/no-deprecated
1332
1301
  const obliterate = {
1333
1302
  clientId,
1334
1303
  end: (0, localReference_js_1.createDetachedLocalReferencePosition)(undefined),
@@ -1340,7 +1309,7 @@ class MergeTree {
1340
1309
  };
1341
1310
  const { segment: startSeg } = this.getContainingSegment(start.pos, refSeq, clientId);
1342
1311
  const { segment: endSeg } = this.getContainingSegment(end.pos, refSeq, clientId);
1343
- (0, internal_1.assert)(startSeg !== undefined && endSeg !== undefined, 0xa3f /* segments cannot be undefined */);
1312
+ (0, internal_1.assert)((0, mergeTreeNodes_js_1.isSegmentLeaf)(startSeg) && (0, mergeTreeNodes_js_1.isSegmentLeaf)(endSeg), 0xa3f /* segments cannot be undefined */);
1344
1313
  obliterate.start = this.createLocalReferencePosition(startSeg, start.side === sequencePlace_js_1.Side.Before ? 0 : Math.max(startSeg.cachedLength - 1, 0), ops_js_1.ReferenceType.StayOnRemove, {
1345
1314
  obliterate,
1346
1315
  });
@@ -1361,7 +1330,7 @@ class MergeTree {
1361
1330
  this.pendingSegments.push(obliterate.segmentGroup);
1362
1331
  }
1363
1332
  this.obliterates.addOrUpdate(obliterate);
1364
- const markMoved = (segment, pos, _start, _end) => {
1333
+ const markMoved = (segment, pos) => {
1365
1334
  if ((start.side === sequencePlace_js_1.Side.After && startPos === pos + segment.cachedLength) || // exclusive start segment
1366
1335
  (end.side === sequencePlace_js_1.Side.Before &&
1367
1336
  endPos === pos &&
@@ -1371,30 +1340,34 @@ class MergeTree {
1371
1340
  // These segments are outside of the obliteration range though, so return true to keep walking.
1372
1341
  return true;
1373
1342
  }
1374
- const existingMoveInfo = (0, mergeTreeNodes_js_1.toMoveInfo)(segment);
1343
+ const existingMoveInfo = (0, segmentInfos_js_1.toMoveInfo)(segment);
1375
1344
  if (segment.prevObliterateByInserter?.seq === constants_js_1.UnassignedSequenceNumber) {
1376
1345
  // We chose to not obliterate this segment because we are aware of an unacked local obliteration.
1377
1346
  // The local obliterate has not been sequenced yet, so it is still the newest obliterate we are aware of.
1378
1347
  // Other clients will also choose not to obliterate this segment because the most recent obliteration has the same clientId
1379
1348
  return true;
1380
1349
  }
1381
- if (clientId !== segment.clientId &&
1350
+ const wasMovedOnInsert = clientId !== segment.clientId &&
1382
1351
  segment.seq !== undefined &&
1383
1352
  seq !== constants_js_1.UnassignedSequenceNumber &&
1384
- (refSeq < segment.seq || segment.seq === constants_js_1.UnassignedSequenceNumber)) {
1385
- segment.wasMovedOnInsert = true;
1386
- }
1353
+ (refSeq < segment.seq || segment.seq === constants_js_1.UnassignedSequenceNumber);
1387
1354
  if (existingMoveInfo === undefined) {
1388
- segment.movedClientIds = [clientId];
1389
- segment.movedSeq = seq;
1390
- segment.localMovedSeq = localSeq;
1391
- segment.movedSeqs = [seq];
1392
- if (!(0, mergeTreeNodes_js_1.toRemovalInfo)(segment)) {
1393
- movedSegments.push({ segment });
1355
+ // eslint-disable-next-line import/no-deprecated
1356
+ const movedSeg = (0, segmentInfos_js_1.overwriteInfo)(segment, {
1357
+ movedClientIds: [clientId],
1358
+ movedSeq: seq,
1359
+ localMovedSeq: localSeq,
1360
+ movedSeqs: [seq],
1361
+ wasMovedOnInsert,
1362
+ });
1363
+ if (!(0, segmentInfos_js_1.toRemovalInfo)(movedSeg)) {
1364
+ movedSegments.push(movedSeg);
1394
1365
  }
1395
1366
  }
1396
1367
  else {
1397
1368
  _overwrite = true;
1369
+ // never move wasMovedOnInsert from true to false
1370
+ existingMoveInfo.wasMovedOnInsert || (existingMoveInfo.wasMovedOnInsert = wasMovedOnInsert);
1398
1371
  if (existingMoveInfo.movedSeq === constants_js_1.UnassignedSequenceNumber) {
1399
1372
  // we moved this locally, but someone else moved it first
1400
1373
  // so put them at the head of the list
@@ -1413,6 +1386,7 @@ class MergeTree {
1413
1386
  existingMoveInfo.movedSeqs.push(seq);
1414
1387
  }
1415
1388
  }
1389
+ (0, segmentInfos_js_1.assertMoved)(segment);
1416
1390
  // Save segment so can assign moved sequence number when acked by server
1417
1391
  if (this.collabWindow.collaborating) {
1418
1392
  if (segment.movedSeq === constants_js_1.UnassignedSequenceNumber &&
@@ -1427,7 +1401,7 @@ class MergeTree {
1427
1401
  }
1428
1402
  return true;
1429
1403
  };
1430
- const afterMarkMoved = (node, pos, _start, _end) => {
1404
+ const afterMarkMoved = (node) => {
1431
1405
  if (_overwrite) {
1432
1406
  this.nodeUpdateLengthNewStructure(node);
1433
1407
  }
@@ -1436,21 +1410,21 @@ class MergeTree {
1436
1410
  }
1437
1411
  return true;
1438
1412
  };
1439
- this.nodeMap(refSeq, clientId, markMoved, undefined, afterMarkMoved, start.pos, end.pos + 1, // include the segment containing the end reference
1413
+ this.nodeMap(refSeq, clientId, markMoved, afterMarkMoved, start.pos, end.pos + 1, // include the segment containing the end reference
1440
1414
  undefined, seq === constants_js_1.UnassignedSequenceNumber ? undefined : seq);
1441
1415
  this.slideAckedRemovedSegmentReferences(localOverlapWithRefs);
1442
1416
  // opArgs == undefined => test code
1443
1417
  if (start.pos !== end.pos || start.side !== end.side) {
1444
1418
  this.mergeTreeDeltaCallback?.(opArgs, {
1445
1419
  operation: ops_js_1.MergeTreeDeltaType.OBLITERATE,
1446
- deltaSegments: movedSegments,
1420
+ deltaSegments: movedSegments.map((segment) => ({ segment })),
1447
1421
  });
1448
1422
  }
1449
1423
  // these events are newly removed
1450
1424
  // so we slide after eventing in case the consumer wants to make reference
1451
1425
  // changes at remove time, like add a ref to track undo redo.
1452
1426
  if (!this.collabWindow.collaborating || clientId !== this.collabWindow.clientId) {
1453
- this.slideAckedRemovedSegmentReferences(movedSegments.map(({ segment }) => segment));
1427
+ this.slideAckedRemovedSegmentReferences(movedSegments);
1454
1428
  }
1455
1429
  if (this.collabWindow.collaborating &&
1456
1430
  seq !== constants_js_1.UnassignedSequenceNumber &&
@@ -1473,19 +1447,22 @@ class MergeTree {
1473
1447
  let _overwrite = false;
1474
1448
  this.ensureIntervalBoundary(start, refSeq, clientId);
1475
1449
  this.ensureIntervalBoundary(end, refSeq, clientId);
1476
- // eslint-disable-next-line import/no-deprecated
1477
1450
  let segmentGroup;
1451
+ // eslint-disable-next-line import/no-deprecated
1478
1452
  const removedSegments = [];
1479
1453
  const localOverlapWithRefs = [];
1480
1454
  const localSeq = seq === constants_js_1.UnassignedSequenceNumber ? ++this.collabWindow.localSeq : undefined;
1481
1455
  const markRemoved = (segment, pos, _start, _end) => {
1482
- const existingRemovalInfo = (0, mergeTreeNodes_js_1.toRemovalInfo)(segment);
1456
+ const existingRemovalInfo = (0, segmentInfos_js_1.toRemovalInfo)(segment);
1483
1457
  if (existingRemovalInfo === undefined) {
1484
- segment.removedClientIds = [clientId];
1485
- segment.removedSeq = seq;
1486
- segment.localRemovedSeq = localSeq;
1487
- if (!(0, mergeTreeNodes_js_1.toMoveInfo)(segment)) {
1488
- removedSegments.push({ segment });
1458
+ // eslint-disable-next-line import/no-deprecated
1459
+ const removed = (0, segmentInfos_js_1.overwriteInfo)(segment, {
1460
+ removedClientIds: [clientId],
1461
+ removedSeq: seq,
1462
+ localRemovedSeq: localSeq,
1463
+ });
1464
+ if (!(0, segmentInfos_js_1.toMoveInfo)(removed)) {
1465
+ removedSegments.push(removed);
1489
1466
  }
1490
1467
  }
1491
1468
  else {
@@ -1506,6 +1483,7 @@ class MergeTree {
1506
1483
  existingRemovalInfo.removedClientIds.push(clientId);
1507
1484
  }
1508
1485
  }
1486
+ (0, segmentInfos_js_1.assertRemoved)(segment);
1509
1487
  // Save segment so we can assign removed sequence number when acked by server
1510
1488
  if (this.collabWindow.collaborating) {
1511
1489
  if (segment.removedSeq === constants_js_1.UnassignedSequenceNumber &&
@@ -1520,7 +1498,7 @@ class MergeTree {
1520
1498
  }
1521
1499
  return true;
1522
1500
  };
1523
- const afterMarkRemoved = (node, pos, _start, _end) => {
1501
+ const afterMarkRemoved = (node) => {
1524
1502
  if (_overwrite) {
1525
1503
  this.nodeUpdateLengthNewStructure(node);
1526
1504
  }
@@ -1529,7 +1507,7 @@ class MergeTree {
1529
1507
  }
1530
1508
  return true;
1531
1509
  };
1532
- this.nodeMap(refSeq, clientId, markRemoved, undefined, afterMarkRemoved, start, end);
1510
+ this.nodeMap(refSeq, clientId, markRemoved, afterMarkRemoved, start, end);
1533
1511
  // these segments are already viewed as being removed locally and are not event-ed
1534
1512
  // so can slide non-StayOnRemove refs immediately
1535
1513
  this.slideAckedRemovedSegmentReferences(localOverlapWithRefs);
@@ -1537,14 +1515,14 @@ class MergeTree {
1537
1515
  if (removedSegments.length > 0) {
1538
1516
  this.mergeTreeDeltaCallback?.(opArgs, {
1539
1517
  operation: ops_js_1.MergeTreeDeltaType.REMOVE,
1540
- deltaSegments: removedSegments,
1518
+ deltaSegments: removedSegments.map((segment) => ({ segment })),
1541
1519
  });
1542
1520
  }
1543
1521
  // these events are newly removed
1544
1522
  // so we slide after eventing in case the consumer wants to make reference
1545
1523
  // changes at remove time, like add a ref to track undo redo.
1546
1524
  if (!this.collabWindow.collaborating || clientId !== this.collabWindow.clientId) {
1547
- this.slideAckedRemovedSegmentReferences(removedSegments.map(({ segment }) => segment));
1525
+ this.slideAckedRemovedSegmentReferences(removedSegments);
1548
1526
  }
1549
1527
  if (this.collabWindow.collaborating &&
1550
1528
  seq !== constants_js_1.UnassignedSequenceNumber &&
@@ -1555,24 +1533,21 @@ class MergeTree {
1555
1533
  /**
1556
1534
  * Revert an unacked local op
1557
1535
  */
1558
- // eslint-disable-next-line import/no-deprecated
1559
1536
  rollback(op, localOpMetadata) {
1560
1537
  if (op.type === ops_js_1.MergeTreeDeltaType.REMOVE) {
1561
- const pendingSegmentGroup = this.pendingSegments.pop?.()?.data;
1538
+ const pendingSegmentGroup = this.pendingSegments.pop()?.data;
1562
1539
  if (pendingSegmentGroup === undefined || pendingSegmentGroup !== localOpMetadata) {
1563
1540
  throw new Error("Rollback op doesn't match last edit");
1564
1541
  }
1565
1542
  // Disabling because a for of loop causes the type of segment to be ISegmentLeaf, which does not have parent information stored
1566
1543
  // eslint-disable-next-line unicorn/no-array-for-each
1567
1544
  pendingSegmentGroup.segments.forEach((segment) => {
1568
- const segmentSegmentGroup = segment?.segmentGroups?.pop?.();
1545
+ const segmentSegmentGroup = segment?.segmentGroups?.pop();
1569
1546
  (0, internal_1.assert)(segmentSegmentGroup === pendingSegmentGroup, 0x3ee /* Unexpected segmentGroup in segment */);
1570
- (0, internal_1.assert)(segment.removedClientIds !== undefined &&
1571
- segment.removedClientIds[0] === this.collabWindow.clientId, 0x39d /* Rollback segment removedClientId does not match local client */);
1572
- segment.removedClientIds = undefined;
1573
- segment.removedSeq = undefined;
1574
- segment.localRemovedSeq = undefined;
1575
- for (let updateNode = segment.parent; updateNode !== undefined; updateNode = updateNode.parent) {
1547
+ (0, internal_1.assert)((0, segmentInfos_js_1.isRemoved)(segment) && segment.removedClientIds[0] === this.collabWindow.clientId, 0x39d /* Rollback segment removedClientId does not match local client */);
1548
+ let updateNode = segment.parent;
1549
+ (0, segmentInfos_js_1.removeRemovalInfo)(segment);
1550
+ for (updateNode; updateNode !== undefined; updateNode = updateNode.parent) {
1576
1551
  this.blockUpdateLength(updateNode, constants_js_1.UnassignedSequenceNumber, this.collabWindow.clientId);
1577
1552
  }
1578
1553
  // Note: optional chaining short-circuits:
@@ -1585,7 +1560,7 @@ class MergeTree {
1585
1560
  }
1586
1561
  else if (op.type === ops_js_1.MergeTreeDeltaType.INSERT ||
1587
1562
  op.type === ops_js_1.MergeTreeDeltaType.ANNOTATE) {
1588
- const pendingSegmentGroup = this.pendingSegments.pop?.()?.data;
1563
+ const pendingSegmentGroup = this.pendingSegments.pop()?.data;
1589
1564
  if (pendingSegmentGroup === undefined ||
1590
1565
  pendingSegmentGroup !== localOpMetadata ||
1591
1566
  (op.type === ops_js_1.MergeTreeDeltaType.ANNOTATE && !pendingSegmentGroup.previousProps)) {
@@ -1593,7 +1568,7 @@ class MergeTree {
1593
1568
  }
1594
1569
  let i = 0;
1595
1570
  for (const segment of pendingSegmentGroup.segments) {
1596
- const segmentSegmentGroup = segment?.segmentGroups?.pop?.();
1571
+ const segmentSegmentGroup = segment?.segmentGroups?.pop();
1597
1572
  (0, internal_1.assert)(segmentSegmentGroup === pendingSegmentGroup, 0x3ef /* Unexpected segmentGroup in segment */);
1598
1573
  const start = this.findRollbackPosition(segment);
1599
1574
  if (op.type === ops_js_1.MergeTreeDeltaType.INSERT) {
@@ -1625,7 +1600,7 @@ class MergeTree {
1625
1600
  return false;
1626
1601
  }
1627
1602
  // If not removed, increase position
1628
- if (seg.removedSeq === undefined) {
1603
+ if (!(0, segmentInfos_js_1.isRemoved)(seg)) {
1629
1604
  segmentPosition += seg.cachedLength;
1630
1605
  }
1631
1606
  return true;
@@ -1659,6 +1634,7 @@ class MergeTree {
1659
1634
  segment = this.endOfTree;
1660
1635
  }
1661
1636
  else {
1637
+ (0, mergeTreeNodes_js_1.assertSegmentLeaf)(_segment);
1662
1638
  segment = _segment;
1663
1639
  }
1664
1640
  // eslint-disable-next-line import/no-deprecated
@@ -1689,7 +1665,7 @@ class MergeTree {
1689
1665
  affectedSegments.remove(segmentToSlide);
1690
1666
  affectedSegments.insertAfter(lastLocalSegment, segmentToSlide.data);
1691
1667
  }
1692
- else if (isRemoved(segmentToSlide.data)) {
1668
+ else if ((0, segmentInfos_js_1.isRemoved)(segmentToSlide.data)) {
1693
1669
  (0, internal_1.assert)(segmentToSlide.data.localRemovedSeq !== undefined, 0x54d /* Removed segment that hasnt had its removal acked should be locally removed */);
1694
1670
  // Slide each locally removed item past all segments that have localSeq > lremoveItem.localSeq
1695
1671
  // but not past remotely removed segments;
@@ -1723,7 +1699,7 @@ class MergeTree {
1723
1699
  for (let i = 0; i < newOrder.length; i++) {
1724
1700
  const seg = newOrder[i];
1725
1701
  const { parent, index, ordinal } = currentOrder[i];
1726
- parent?.assignChild(seg, index, false);
1702
+ (0, mergeTreeNodes_js_1.assignChild)(parent, seg, index, false);
1727
1703
  seg.ordinal = ordinal;
1728
1704
  }
1729
1705
  for (const [segment, groups] of perSegmentTrackingGroups.entries()) {
@@ -1783,7 +1759,7 @@ class MergeTree {
1783
1759
  }
1784
1760
  };
1785
1761
  (0, mergeTreeNodeWalk_js_1.walkAllChildSegments)(this.root, (seg) => {
1786
- if (isRemoved(seg) || seg.seq === constants_js_1.UnassignedSequenceNumber) {
1762
+ if ((0, segmentInfos_js_1.isRemoved)(seg) || seg.seq === constants_js_1.UnassignedSequenceNumber) {
1787
1763
  if (isRemovedAndAcked(seg)) {
1788
1764
  rangeContainsRemoteRemovedSegs = true;
1789
1765
  }
@@ -1890,7 +1866,7 @@ class MergeTree {
1890
1866
  this.ensureIntervalBoundary(end, refSeq, clientId);
1891
1867
  }
1892
1868
  }
1893
- this.nodeMap(refSeq, clientId, handler, accum, undefined, start, end, undefined, visibilitySeq);
1869
+ this.nodeMap(refSeq, clientId, (seg, pos, _start, _end) => handler(seg, pos, refSeq, clientId, _start, _end, accum), undefined, start, end, undefined, visibilitySeq);
1894
1870
  }
1895
1871
  /**
1896
1872
  * Map over all visible segments in a given range
@@ -1915,7 +1891,7 @@ class MergeTree {
1915
1891
  * but it will not count as a segment within the range. That is, it will be
1916
1892
  * ignored for the purposes of tracking when traversal should end.
1917
1893
  */
1918
- nodeMap(refSeq, clientId, leaf, accum, post, start = 0, end, localSeq, visibilitySeq = refSeq) {
1894
+ nodeMap(refSeq, clientId, leaf, post, start = 0, end, localSeq, visibilitySeq = refSeq) {
1919
1895
  const endPos = end ?? this.nodeLength(this.root, refSeq, clientId, localSeq) ?? 0;
1920
1896
  if (endPos === start) {
1921
1897
  return;
@@ -1942,14 +1918,12 @@ class MergeTree {
1942
1918
  return mergeTreeNodeWalk_js_1.NodeAction.Skip;
1943
1919
  }
1944
1920
  if (node.isLeaf()) {
1945
- if (leaf(node, pos, refSeq, clientId, start - pos, endPos - pos, accum) === false) {
1921
+ if (leaf(node, pos, start - pos, endPos - pos) === false) {
1946
1922
  return mergeTreeNodeWalk_js_1.NodeAction.Exit;
1947
1923
  }
1948
1924
  pos = nextPos;
1949
1925
  }
1950
- }, undefined, post === undefined
1951
- ? undefined
1952
- : (block) => post(block, pos, refSeq, clientId, start - pos, endPos - pos, accum));
1926
+ }, undefined, post);
1953
1927
  }
1954
1928
  }
1955
1929
  exports.MergeTree = MergeTree;