@fluidframework/merge-tree 2.1.0-276985 → 2.1.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 (524) hide show
  1. package/.eslintrc.cjs +2 -4
  2. package/CHANGELOG.md +15 -0
  3. package/README.md +109 -1
  4. package/api-extractor/api-extractor.current.json +5 -0
  5. package/api-extractor/api-extractor.legacy.json +1 -1
  6. package/api-extractor.json +1 -1
  7. package/api-report/merge-tree.legacy.alpha.api.md +10 -22
  8. package/api-report/merge-tree.legacy.public.api.md +9 -0
  9. package/dist/MergeTreeTextHelper.d.ts.map +1 -1
  10. package/dist/MergeTreeTextHelper.js +1 -1
  11. package/dist/MergeTreeTextHelper.js.map +1 -1
  12. package/dist/attributionCollection.d.ts.map +1 -1
  13. package/dist/attributionCollection.js +65 -17
  14. package/dist/attributionCollection.js.map +1 -1
  15. package/dist/attributionPolicy.d.ts +2 -1
  16. package/dist/attributionPolicy.d.ts.map +1 -1
  17. package/dist/attributionPolicy.js +10 -3
  18. package/dist/attributionPolicy.js.map +1 -1
  19. package/dist/client.d.ts +3 -1
  20. package/dist/client.d.ts.map +1 -1
  21. package/dist/client.js +65 -37
  22. package/dist/client.js.map +1 -1
  23. package/dist/collections/list.d.ts.map +1 -1
  24. package/dist/collections/list.js +5 -2
  25. package/dist/collections/list.js.map +1 -1
  26. package/dist/collections/rbTree.d.ts +2 -2
  27. package/dist/collections/rbTree.d.ts.map +1 -1
  28. package/dist/collections/rbTree.js +23 -35
  29. package/dist/collections/rbTree.js.map +1 -1
  30. package/dist/endOfTreeSegment.d.ts.map +1 -1
  31. package/dist/endOfTreeSegment.js +4 -1
  32. package/dist/endOfTreeSegment.js.map +1 -1
  33. package/dist/legacy.d.ts +1 -1
  34. package/dist/localReference.d.ts +16 -6
  35. package/dist/localReference.d.ts.map +1 -1
  36. package/dist/localReference.js +31 -20
  37. package/dist/localReference.js.map +1 -1
  38. package/dist/mergeTree.d.ts +0 -1
  39. package/dist/mergeTree.d.ts.map +1 -1
  40. package/dist/mergeTree.js +127 -112
  41. package/dist/mergeTree.js.map +1 -1
  42. package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
  43. package/dist/mergeTreeNodeWalk.js +1 -1
  44. package/dist/mergeTreeNodeWalk.js.map +1 -1
  45. package/dist/mergeTreeNodes.d.ts +6 -5
  46. package/dist/mergeTreeNodes.d.ts.map +1 -1
  47. package/dist/mergeTreeNodes.js +29 -20
  48. package/dist/mergeTreeNodes.js.map +1 -1
  49. package/dist/mergeTreeTracking.js +3 -3
  50. package/dist/mergeTreeTracking.js.map +1 -1
  51. package/dist/opBuilder.d.ts +6 -1
  52. package/dist/opBuilder.d.ts.map +1 -1
  53. package/dist/opBuilder.js +5 -0
  54. package/dist/opBuilder.js.map +1 -1
  55. package/dist/ops.d.ts.map +1 -1
  56. package/dist/ops.js.map +1 -1
  57. package/dist/ordinal.d.ts.map +1 -1
  58. package/dist/ordinal.js +7 -0
  59. package/dist/ordinal.js.map +1 -1
  60. package/dist/partialLengths.d.ts +4 -2
  61. package/dist/partialLengths.d.ts.map +1 -1
  62. package/dist/partialLengths.js +101 -53
  63. package/dist/partialLengths.js.map +1 -1
  64. package/dist/perspective.d.ts +4 -1
  65. package/dist/perspective.d.ts.map +1 -1
  66. package/dist/perspective.js +7 -6
  67. package/dist/perspective.js.map +1 -1
  68. package/dist/properties.d.ts +13 -10
  69. package/dist/properties.d.ts.map +1 -1
  70. package/dist/properties.js +22 -11
  71. package/dist/properties.js.map +1 -1
  72. package/dist/public.d.ts +1 -1
  73. package/dist/referencePositions.d.ts +7 -0
  74. package/dist/referencePositions.d.ts.map +1 -1
  75. package/dist/referencePositions.js +7 -0
  76. package/dist/referencePositions.js.map +1 -1
  77. package/dist/revertibles.d.ts +6 -0
  78. package/dist/revertibles.d.ts.map +1 -1
  79. package/dist/revertibles.js +50 -21
  80. package/dist/revertibles.js.map +1 -1
  81. package/dist/segmentGroupCollection.d.ts.map +1 -1
  82. package/dist/segmentGroupCollection.js +2 -0
  83. package/dist/segmentGroupCollection.js.map +1 -1
  84. package/dist/segmentPropertiesManager.d.ts +7 -3
  85. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  86. package/dist/segmentPropertiesManager.js +20 -15
  87. package/dist/segmentPropertiesManager.js.map +1 -1
  88. package/dist/snapshotChunks.d.ts.map +1 -1
  89. package/dist/snapshotChunks.js +10 -5
  90. package/dist/snapshotChunks.js.map +1 -1
  91. package/dist/snapshotLoader.d.ts.map +1 -1
  92. package/dist/snapshotLoader.js +14 -10
  93. package/dist/snapshotLoader.js.map +1 -1
  94. package/dist/snapshotV1.d.ts.map +1 -1
  95. package/dist/snapshotV1.js +20 -8
  96. package/dist/snapshotV1.js.map +1 -1
  97. package/dist/snapshotlegacy.d.ts.map +1 -1
  98. package/dist/snapshotlegacy.js +4 -2
  99. package/dist/snapshotlegacy.js.map +1 -1
  100. package/dist/sortedSegmentSet.d.ts.map +1 -1
  101. package/dist/sortedSegmentSet.js +8 -1
  102. package/dist/sortedSegmentSet.js.map +1 -1
  103. package/dist/sortedSet.d.ts.map +1 -1
  104. package/dist/sortedSet.js +4 -0
  105. package/dist/sortedSet.js.map +1 -1
  106. package/dist/test/Insertion.perf.spec.js.map +1 -1
  107. package/dist/test/Removal.perf.spec.js.map +1 -1
  108. package/dist/test/Snapshot.perf.spec.js +1 -0
  109. package/dist/test/Snapshot.perf.spec.js.map +1 -1
  110. package/dist/test/attributionCollection.perf.spec.js +3 -1
  111. package/dist/test/attributionCollection.perf.spec.js.map +1 -1
  112. package/dist/test/attributionCollection.spec.js +69 -68
  113. package/dist/test/attributionCollection.spec.js.map +1 -1
  114. package/dist/test/attributionPolicy.spec.js +29 -27
  115. package/dist/test/attributionPolicy.spec.js.map +1 -1
  116. package/dist/test/beastTest.spec.d.ts +1 -4
  117. package/dist/test/beastTest.spec.d.ts.map +1 -1
  118. package/dist/test/beastTest.spec.js +32 -30
  119. package/dist/test/beastTest.spec.js.map +1 -1
  120. package/dist/test/client.annotateMarker.spec.js +5 -5
  121. package/dist/test/client.annotateMarker.spec.js.map +1 -1
  122. package/dist/test/client.apis.spec.d.ts.map +1 -1
  123. package/dist/test/client.apis.spec.js +5 -7
  124. package/dist/test/client.apis.spec.js.map +1 -1
  125. package/dist/test/client.applyMsg.spec.js +125 -103
  126. package/dist/test/client.applyMsg.spec.js.map +1 -1
  127. package/dist/test/client.applyStashedOpFarm.spec.js +18 -10
  128. package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
  129. package/dist/test/client.attributionFarm.spec.js +13 -8
  130. package/dist/test/client.attributionFarm.spec.js.map +1 -1
  131. package/dist/test/client.conflictFarm.spec.js +4 -2
  132. package/dist/test/client.conflictFarm.spec.js.map +1 -1
  133. package/dist/test/client.getPosition.spec.js +10 -10
  134. package/dist/test/client.getPosition.spec.js.map +1 -1
  135. package/dist/test/client.localReference.spec.js +111 -104
  136. package/dist/test/client.localReference.spec.js.map +1 -1
  137. package/dist/test/client.localReferenceFarm.spec.js +14 -10
  138. package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
  139. package/dist/test/client.rebasePosition.spec.js +12 -12
  140. package/dist/test/client.rebasePosition.spec.js.map +1 -1
  141. package/dist/test/client.reconnectFarm.spec.js +12 -9
  142. package/dist/test/client.reconnectFarm.spec.js.map +1 -1
  143. package/dist/test/client.replay.spec.js +11 -10
  144. package/dist/test/client.replay.spec.js.map +1 -1
  145. package/dist/test/client.rollback.spec.js +87 -84
  146. package/dist/test/client.rollback.spec.js.map +1 -1
  147. package/dist/test/client.rollbackFarm.spec.js +3 -1
  148. package/dist/test/client.rollbackFarm.spec.js.map +1 -1
  149. package/dist/test/client.searchForMarker.spec.js +122 -112
  150. package/dist/test/client.searchForMarker.spec.js.map +1 -1
  151. package/dist/test/client.walkSegments.spec.js +7 -7
  152. package/dist/test/client.walkSegments.spec.js.map +1 -1
  153. package/dist/test/collections.list.spec.js +14 -14
  154. package/dist/test/collections.list.spec.js.map +1 -1
  155. package/dist/test/createInsertOnlyAttributionPolicy.spec.js +3 -3
  156. package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
  157. package/dist/test/dirname.cjs +1 -0
  158. package/dist/test/dirname.cjs.map +1 -1
  159. package/dist/test/dirname.d.cts.map +1 -1
  160. package/dist/test/mergeTree.annotate.deltaCallback.spec.js +7 -7
  161. package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  162. package/dist/test/mergeTree.annotate.spec.js +87 -87
  163. package/dist/test/mergeTree.annotate.spec.js.map +1 -1
  164. package/dist/test/mergeTree.insert.deltaCallback.spec.js +6 -6
  165. package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  166. package/dist/test/mergeTree.insertingWalk.spec.js +24 -24
  167. package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
  168. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +6 -6
  169. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  170. package/dist/test/mergeTree.markRangeRemoved.spec.js +23 -23
  171. package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  172. package/dist/test/mergeTree.walk.spec.js +3 -3
  173. package/dist/test/mergeTree.walk.spec.js.map +1 -1
  174. package/dist/test/mergeTree.zamboni.spec.js +10 -10
  175. package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
  176. package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
  177. package/dist/test/mergeTreeOperationRunner.js +28 -16
  178. package/dist/test/mergeTreeOperationRunner.js.map +1 -1
  179. package/dist/test/mergeTreeOperationRunner.spec.js +9 -5
  180. package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
  181. package/dist/test/obliterate.concurrent.spec.js +165 -165
  182. package/dist/test/obliterate.concurrent.spec.js.map +1 -1
  183. package/dist/test/obliterate.deltaCallback.spec.js +20 -21
  184. package/dist/test/obliterate.deltaCallback.spec.js.map +1 -1
  185. package/dist/test/obliterate.partialLength.spec.js +7 -7
  186. package/dist/test/obliterate.partialLength.spec.js.map +1 -1
  187. package/dist/test/obliterate.reconnect.spec.js +13 -13
  188. package/dist/test/obliterate.reconnect.spec.js.map +1 -1
  189. package/dist/test/obliterate.spec.js +9 -9
  190. package/dist/test/obliterate.spec.js.map +1 -1
  191. package/dist/test/ordinal.spec.js +10 -4
  192. package/dist/test/ordinal.spec.js.map +1 -1
  193. package/dist/test/partialLength.spec.js.map +1 -1
  194. package/dist/test/properties.spec.js +15 -15
  195. package/dist/test/properties.spec.js.map +1 -1
  196. package/dist/test/reconnectHelper.d.ts +4 -4
  197. package/dist/test/reconnectHelper.d.ts.map +1 -1
  198. package/dist/test/reconnectHelper.js +28 -20
  199. package/dist/test/reconnectHelper.js.map +1 -1
  200. package/dist/test/resetPendingSegmentsToOp.spec.js +35 -29
  201. package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  202. package/dist/test/revertibleFarm.spec.js +11 -10
  203. package/dist/test/revertibleFarm.spec.js.map +1 -1
  204. package/dist/test/revertibles.spec.d.ts.map +1 -1
  205. package/dist/test/revertibles.spec.js +96 -57
  206. package/dist/test/revertibles.spec.js.map +1 -1
  207. package/dist/test/segmentGroupCollection.spec.js +17 -17
  208. package/dist/test/segmentGroupCollection.spec.js.map +1 -1
  209. package/dist/test/snapshot.spec.js +5 -5
  210. package/dist/test/snapshot.spec.js.map +1 -1
  211. package/dist/test/snapshot.utils.d.ts.map +1 -1
  212. package/dist/test/snapshot.utils.js +6 -6
  213. package/dist/test/snapshot.utils.js.map +1 -1
  214. package/dist/test/snapshotlegacy.spec.js +18 -13
  215. package/dist/test/snapshotlegacy.spec.js.map +1 -1
  216. package/dist/test/sortedSegmentSet.spec.js +22 -18
  217. package/dist/test/sortedSegmentSet.spec.js.map +1 -1
  218. package/dist/test/testClient.d.ts +6 -5
  219. package/dist/test/testClient.d.ts.map +1 -1
  220. package/dist/test/testClient.js +30 -32
  221. package/dist/test/testClient.js.map +1 -1
  222. package/dist/test/testClientLogger.d.ts.map +1 -1
  223. package/dist/test/testClientLogger.js +39 -38
  224. package/dist/test/testClientLogger.js.map +1 -1
  225. package/dist/test/testSerializer.d.ts +5 -5
  226. package/dist/test/testSerializer.d.ts.map +1 -1
  227. package/dist/test/testSerializer.js +0 -1
  228. package/dist/test/testSerializer.js.map +1 -1
  229. package/dist/test/testServer.d.ts.map +1 -1
  230. package/dist/test/testServer.js.map +1 -1
  231. package/dist/test/testUtils.d.ts +1 -1
  232. package/dist/test/testUtils.d.ts.map +1 -1
  233. package/dist/test/testUtils.js +15 -17
  234. package/dist/test/testUtils.js.map +1 -1
  235. package/dist/test/text.d.ts.map +1 -1
  236. package/dist/test/text.js +1 -1
  237. package/dist/test/text.js.map +1 -1
  238. package/dist/test/tracking.spec.js +50 -46
  239. package/dist/test/tracking.spec.js.map +1 -1
  240. package/dist/test/wordUnitTests.spec.d.ts.map +1 -1
  241. package/dist/test/wordUnitTests.spec.js +10 -10
  242. package/dist/test/wordUnitTests.spec.js.map +1 -1
  243. package/dist/textSegment.d.ts +1 -1
  244. package/dist/textSegment.d.ts.map +1 -1
  245. package/dist/textSegment.js +3 -3
  246. package/dist/textSegment.js.map +1 -1
  247. package/dist/zamboni.d.ts.map +1 -1
  248. package/dist/zamboni.js +7 -2
  249. package/dist/zamboni.js.map +1 -1
  250. package/internal.d.ts +1 -1
  251. package/legacy.d.ts +1 -1
  252. package/lib/MergeTreeTextHelper.d.ts.map +1 -1
  253. package/lib/MergeTreeTextHelper.js +1 -1
  254. package/lib/MergeTreeTextHelper.js.map +1 -1
  255. package/lib/attributionCollection.d.ts.map +1 -1
  256. package/lib/attributionCollection.js +65 -17
  257. package/lib/attributionCollection.js.map +1 -1
  258. package/lib/attributionPolicy.d.ts +2 -1
  259. package/lib/attributionPolicy.d.ts.map +1 -1
  260. package/lib/attributionPolicy.js +10 -3
  261. package/lib/attributionPolicy.js.map +1 -1
  262. package/lib/client.d.ts +3 -1
  263. package/lib/client.d.ts.map +1 -1
  264. package/lib/client.js +65 -37
  265. package/lib/client.js.map +1 -1
  266. package/lib/collections/list.d.ts.map +1 -1
  267. package/lib/collections/list.js +5 -2
  268. package/lib/collections/list.js.map +1 -1
  269. package/lib/collections/rbTree.d.ts +2 -2
  270. package/lib/collections/rbTree.d.ts.map +1 -1
  271. package/lib/collections/rbTree.js +23 -35
  272. package/lib/collections/rbTree.js.map +1 -1
  273. package/lib/endOfTreeSegment.d.ts.map +1 -1
  274. package/lib/endOfTreeSegment.js +4 -1
  275. package/lib/endOfTreeSegment.js.map +1 -1
  276. package/lib/legacy.d.ts +1 -1
  277. package/lib/localReference.d.ts +16 -6
  278. package/lib/localReference.d.ts.map +1 -1
  279. package/lib/localReference.js +31 -20
  280. package/lib/localReference.js.map +1 -1
  281. package/lib/mergeTree.d.ts +0 -1
  282. package/lib/mergeTree.d.ts.map +1 -1
  283. package/lib/mergeTree.js +127 -112
  284. package/lib/mergeTree.js.map +1 -1
  285. package/lib/mergeTreeNodeWalk.d.ts.map +1 -1
  286. package/lib/mergeTreeNodeWalk.js +1 -1
  287. package/lib/mergeTreeNodeWalk.js.map +1 -1
  288. package/lib/mergeTreeNodes.d.ts +6 -5
  289. package/lib/mergeTreeNodes.d.ts.map +1 -1
  290. package/lib/mergeTreeNodes.js +29 -20
  291. package/lib/mergeTreeNodes.js.map +1 -1
  292. package/lib/mergeTreeTracking.js +3 -3
  293. package/lib/mergeTreeTracking.js.map +1 -1
  294. package/lib/opBuilder.d.ts +6 -1
  295. package/lib/opBuilder.d.ts.map +1 -1
  296. package/lib/opBuilder.js +5 -0
  297. package/lib/opBuilder.js.map +1 -1
  298. package/lib/ops.d.ts.map +1 -1
  299. package/lib/ops.js.map +1 -1
  300. package/lib/ordinal.d.ts.map +1 -1
  301. package/lib/ordinal.js +7 -0
  302. package/lib/ordinal.js.map +1 -1
  303. package/lib/partialLengths.d.ts +4 -2
  304. package/lib/partialLengths.d.ts.map +1 -1
  305. package/lib/partialLengths.js +101 -53
  306. package/lib/partialLengths.js.map +1 -1
  307. package/lib/perspective.d.ts +4 -1
  308. package/lib/perspective.d.ts.map +1 -1
  309. package/lib/perspective.js +7 -6
  310. package/lib/perspective.js.map +1 -1
  311. package/lib/properties.d.ts +13 -10
  312. package/lib/properties.d.ts.map +1 -1
  313. package/lib/properties.js +22 -11
  314. package/lib/properties.js.map +1 -1
  315. package/lib/public.d.ts +1 -1
  316. package/lib/referencePositions.d.ts +7 -0
  317. package/lib/referencePositions.d.ts.map +1 -1
  318. package/lib/referencePositions.js +7 -0
  319. package/lib/referencePositions.js.map +1 -1
  320. package/lib/revertibles.d.ts +6 -0
  321. package/lib/revertibles.d.ts.map +1 -1
  322. package/lib/revertibles.js +50 -21
  323. package/lib/revertibles.js.map +1 -1
  324. package/lib/segmentGroupCollection.d.ts.map +1 -1
  325. package/lib/segmentGroupCollection.js +2 -0
  326. package/lib/segmentGroupCollection.js.map +1 -1
  327. package/lib/segmentPropertiesManager.d.ts +7 -3
  328. package/lib/segmentPropertiesManager.d.ts.map +1 -1
  329. package/lib/segmentPropertiesManager.js +20 -15
  330. package/lib/segmentPropertiesManager.js.map +1 -1
  331. package/lib/snapshotChunks.d.ts.map +1 -1
  332. package/lib/snapshotChunks.js +10 -5
  333. package/lib/snapshotChunks.js.map +1 -1
  334. package/lib/snapshotLoader.d.ts.map +1 -1
  335. package/lib/snapshotLoader.js +14 -10
  336. package/lib/snapshotLoader.js.map +1 -1
  337. package/lib/snapshotV1.d.ts.map +1 -1
  338. package/lib/snapshotV1.js +20 -8
  339. package/lib/snapshotV1.js.map +1 -1
  340. package/lib/snapshotlegacy.d.ts.map +1 -1
  341. package/lib/snapshotlegacy.js +4 -2
  342. package/lib/snapshotlegacy.js.map +1 -1
  343. package/lib/sortedSegmentSet.d.ts.map +1 -1
  344. package/lib/sortedSegmentSet.js +8 -1
  345. package/lib/sortedSegmentSet.js.map +1 -1
  346. package/lib/sortedSet.d.ts.map +1 -1
  347. package/lib/sortedSet.js +4 -0
  348. package/lib/sortedSet.js.map +1 -1
  349. package/lib/test/Insertion.perf.spec.js.map +1 -1
  350. package/lib/test/Removal.perf.spec.js.map +1 -1
  351. package/lib/test/Snapshot.perf.spec.js +1 -0
  352. package/lib/test/Snapshot.perf.spec.js.map +1 -1
  353. package/lib/test/attributionCollection.perf.spec.js +3 -1
  354. package/lib/test/attributionCollection.perf.spec.js.map +1 -1
  355. package/lib/test/attributionCollection.spec.js +3 -2
  356. package/lib/test/attributionCollection.spec.js.map +1 -1
  357. package/lib/test/attributionPolicy.spec.js +3 -1
  358. package/lib/test/attributionPolicy.spec.js.map +1 -1
  359. package/lib/test/beastTest.spec.d.ts +1 -4
  360. package/lib/test/beastTest.spec.d.ts.map +1 -1
  361. package/lib/test/beastTest.spec.js +26 -24
  362. package/lib/test/beastTest.spec.js.map +1 -1
  363. package/lib/test/client.annotateMarker.spec.js +1 -1
  364. package/lib/test/client.annotateMarker.spec.js.map +1 -1
  365. package/lib/test/client.apis.spec.d.ts.map +1 -1
  366. package/lib/test/client.apis.spec.js +4 -6
  367. package/lib/test/client.apis.spec.js.map +1 -1
  368. package/lib/test/client.applyMsg.spec.js +72 -50
  369. package/lib/test/client.applyMsg.spec.js.map +1 -1
  370. package/lib/test/client.applyStashedOpFarm.spec.js +18 -10
  371. package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -1
  372. package/lib/test/client.attributionFarm.spec.js +12 -7
  373. package/lib/test/client.attributionFarm.spec.js.map +1 -1
  374. package/lib/test/client.conflictFarm.spec.js +4 -2
  375. package/lib/test/client.conflictFarm.spec.js.map +1 -1
  376. package/lib/test/client.getPosition.spec.js +1 -1
  377. package/lib/test/client.getPosition.spec.js.map +1 -1
  378. package/lib/test/client.localReference.spec.js +14 -7
  379. package/lib/test/client.localReference.spec.js.map +1 -1
  380. package/lib/test/client.localReferenceFarm.spec.js +13 -9
  381. package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
  382. package/lib/test/client.rebasePosition.spec.js +1 -1
  383. package/lib/test/client.rebasePosition.spec.js.map +1 -1
  384. package/lib/test/client.reconnectFarm.spec.js +11 -8
  385. package/lib/test/client.reconnectFarm.spec.js.map +1 -1
  386. package/lib/test/client.replay.spec.js +8 -7
  387. package/lib/test/client.replay.spec.js.map +1 -1
  388. package/lib/test/client.rollback.spec.js +14 -11
  389. package/lib/test/client.rollback.spec.js.map +1 -1
  390. package/lib/test/client.rollbackFarm.spec.js +3 -1
  391. package/lib/test/client.rollbackFarm.spec.js.map +1 -1
  392. package/lib/test/client.searchForMarker.spec.js +29 -19
  393. package/lib/test/client.searchForMarker.spec.js.map +1 -1
  394. package/lib/test/client.walkSegments.spec.js +1 -1
  395. package/lib/test/client.walkSegments.spec.js.map +1 -1
  396. package/lib/test/collections.list.spec.js +1 -1
  397. package/lib/test/collections.list.spec.js.map +1 -1
  398. package/lib/test/createInsertOnlyAttributionPolicy.spec.js +1 -1
  399. package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
  400. package/lib/test/dirname.cjs +1 -0
  401. package/lib/test/dirname.cjs.map +1 -1
  402. package/lib/test/dirname.d.cts.map +1 -1
  403. package/lib/test/mergeTree.annotate.deltaCallback.spec.js +1 -1
  404. package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  405. package/lib/test/mergeTree.annotate.spec.js +1 -1
  406. package/lib/test/mergeTree.annotate.spec.js.map +1 -1
  407. package/lib/test/mergeTree.insert.deltaCallback.spec.js +1 -1
  408. package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  409. package/lib/test/mergeTree.insertingWalk.spec.js +8 -8
  410. package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
  411. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +1 -1
  412. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  413. package/lib/test/mergeTree.markRangeRemoved.spec.js +1 -1
  414. package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  415. package/lib/test/mergeTree.walk.spec.js +1 -1
  416. package/lib/test/mergeTree.walk.spec.js.map +1 -1
  417. package/lib/test/mergeTree.zamboni.spec.js +1 -1
  418. package/lib/test/mergeTree.zamboni.spec.js.map +1 -1
  419. package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -1
  420. package/lib/test/mergeTreeOperationRunner.js +27 -15
  421. package/lib/test/mergeTreeOperationRunner.js.map +1 -1
  422. package/lib/test/mergeTreeOperationRunner.spec.js +5 -1
  423. package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -1
  424. package/lib/test/obliterate.concurrent.spec.js +4 -4
  425. package/lib/test/obliterate.concurrent.spec.js.map +1 -1
  426. package/lib/test/obliterate.deltaCallback.spec.js +2 -3
  427. package/lib/test/obliterate.deltaCallback.spec.js.map +1 -1
  428. package/lib/test/obliterate.partialLength.spec.js +1 -1
  429. package/lib/test/obliterate.partialLength.spec.js.map +1 -1
  430. package/lib/test/obliterate.reconnect.spec.js +1 -1
  431. package/lib/test/obliterate.reconnect.spec.js.map +1 -1
  432. package/lib/test/obliterate.spec.js +1 -1
  433. package/lib/test/obliterate.spec.js.map +1 -1
  434. package/lib/test/ordinal.spec.js +7 -1
  435. package/lib/test/ordinal.spec.js.map +1 -1
  436. package/lib/test/partialLength.spec.js.map +1 -1
  437. package/lib/test/properties.spec.js +1 -1
  438. package/lib/test/properties.spec.js.map +1 -1
  439. package/lib/test/reconnectHelper.d.ts +4 -4
  440. package/lib/test/reconnectHelper.d.ts.map +1 -1
  441. package/lib/test/reconnectHelper.js +22 -14
  442. package/lib/test/reconnectHelper.js.map +1 -1
  443. package/lib/test/resetPendingSegmentsToOp.spec.js +8 -2
  444. package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  445. package/lib/test/revertibleFarm.spec.js +8 -7
  446. package/lib/test/revertibleFarm.spec.js.map +1 -1
  447. package/lib/test/revertibles.spec.d.ts.map +1 -1
  448. package/lib/test/revertibles.spec.js +93 -54
  449. package/lib/test/revertibles.spec.js.map +1 -1
  450. package/lib/test/segmentGroupCollection.spec.js +1 -1
  451. package/lib/test/segmentGroupCollection.spec.js.map +1 -1
  452. package/lib/test/snapshot.spec.js +1 -1
  453. package/lib/test/snapshot.spec.js.map +1 -1
  454. package/lib/test/snapshot.utils.d.ts.map +1 -1
  455. package/lib/test/snapshot.utils.js +1 -1
  456. package/lib/test/snapshot.utils.js.map +1 -1
  457. package/lib/test/snapshotlegacy.spec.js +10 -5
  458. package/lib/test/snapshotlegacy.spec.js.map +1 -1
  459. package/lib/test/sortedSegmentSet.spec.js +6 -2
  460. package/lib/test/sortedSegmentSet.spec.js.map +1 -1
  461. package/lib/test/testClient.d.ts +6 -5
  462. package/lib/test/testClient.d.ts.map +1 -1
  463. package/lib/test/testClient.js +25 -27
  464. package/lib/test/testClient.js.map +1 -1
  465. package/lib/test/testClientLogger.d.ts.map +1 -1
  466. package/lib/test/testClientLogger.js +37 -36
  467. package/lib/test/testClientLogger.js.map +1 -1
  468. package/lib/test/testSerializer.d.ts +5 -5
  469. package/lib/test/testSerializer.d.ts.map +1 -1
  470. package/lib/test/testSerializer.js +0 -1
  471. package/lib/test/testSerializer.js.map +1 -1
  472. package/lib/test/testServer.d.ts.map +1 -1
  473. package/lib/test/testServer.js.map +1 -1
  474. package/lib/test/testUtils.d.ts +1 -1
  475. package/lib/test/testUtils.d.ts.map +1 -1
  476. package/lib/test/testUtils.js +6 -8
  477. package/lib/test/testUtils.js.map +1 -1
  478. package/lib/test/text.d.ts.map +1 -1
  479. package/lib/test/text.js +1 -1
  480. package/lib/test/text.js.map +1 -1
  481. package/lib/test/tracking.spec.js +9 -5
  482. package/lib/test/tracking.spec.js.map +1 -1
  483. package/lib/test/wordUnitTests.spec.d.ts.map +1 -1
  484. package/lib/test/wordUnitTests.spec.js +9 -9
  485. package/lib/test/wordUnitTests.spec.js.map +1 -1
  486. package/lib/textSegment.d.ts +1 -1
  487. package/lib/textSegment.d.ts.map +1 -1
  488. package/lib/textSegment.js +3 -3
  489. package/lib/textSegment.js.map +1 -1
  490. package/lib/zamboni.d.ts.map +1 -1
  491. package/lib/zamboni.js +7 -2
  492. package/lib/zamboni.js.map +1 -1
  493. package/package.json +29 -27
  494. package/src/MergeTreeTextHelper.ts +2 -2
  495. package/src/attributionCollection.ts +71 -28
  496. package/src/attributionPolicy.ts +14 -9
  497. package/src/client.ts +120 -71
  498. package/src/collections/list.ts +9 -6
  499. package/src/collections/rbTree.ts +62 -71
  500. package/src/endOfTreeSegment.ts +21 -10
  501. package/src/localReference.ts +61 -43
  502. package/src/mergeTree.ts +229 -178
  503. package/src/mergeTreeNodeWalk.ts +2 -1
  504. package/src/mergeTreeNodes.ts +59 -46
  505. package/src/mergeTreeTracking.ts +3 -3
  506. package/src/opBuilder.ts +6 -1
  507. package/src/ops.ts +5 -0
  508. package/src/ordinal.ts +8 -1
  509. package/src/partialLengths.ts +143 -87
  510. package/src/perspective.ts +10 -7
  511. package/src/properties.ts +36 -18
  512. package/src/referencePositions.ts +7 -0
  513. package/src/revertibles.ts +71 -41
  514. package/src/segmentGroupCollection.ts +8 -6
  515. package/src/segmentPropertiesManager.ts +28 -24
  516. package/src/snapshotChunks.ts +12 -7
  517. package/src/snapshotLoader.ts +20 -17
  518. package/src/snapshotV1.ts +36 -18
  519. package/src/snapshotlegacy.ts +7 -5
  520. package/src/sortedSegmentSet.ts +9 -3
  521. package/src/sortedSet.ts +7 -3
  522. package/src/textSegment.ts +9 -9
  523. package/src/zamboni.ts +14 -10
  524. package/tsconfig.json +0 -1
package/dist/mergeTree.js CHANGED
@@ -20,7 +20,6 @@ const opBuilder_js_1 = require("./opBuilder.js");
20
20
  const ops_js_1 = require("./ops.js");
21
21
  const partialLengths_js_1 = require("./partialLengths.js");
22
22
  const perspective_js_1 = require("./perspective.js");
23
- // eslint-disable-next-line import/no-deprecated
24
23
  const properties_js_1 = require("./properties.js");
25
24
  const referencePositions_js_1 = require("./referencePositions.js");
26
25
  const segmentPropertiesManager_js_1 = require("./segmentPropertiesManager.js");
@@ -31,7 +30,7 @@ function wasRemovedAfter(seg, seq) {
31
30
  }
32
31
  function markSegmentMoved(seg, moveInfo) {
33
32
  seg.moveDst = moveInfo.moveDst;
34
- seg.movedClientIds = moveInfo.movedClientIds.slice();
33
+ seg.movedClientIds = [...moveInfo.movedClientIds];
35
34
  seg.movedSeqs = [moveInfo.movedSeq];
36
35
  seg.movedSeq = moveInfo.movedSeq;
37
36
  seg.localMovedSeq = moveInfo.localMovedSeq;
@@ -77,18 +76,19 @@ function findRootMergeBlock(segmentOrNode) {
77
76
  while (maybeRoot?.parent !== undefined) {
78
77
  maybeRoot = maybeRoot.parent;
79
78
  }
80
- return maybeRoot?.mergeTree !== undefined ? maybeRoot : undefined;
79
+ return maybeRoot?.mergeTree === undefined ? undefined : maybeRoot;
81
80
  }
82
81
  exports.findRootMergeBlock = findRootMergeBlock;
83
82
  /**
83
+ * Find the segment to which a reference will slide if it needs to slide, or undefined if there
84
+ * is no valid segment (i.e. the tree is empty).
85
+ *
84
86
  * @param segment - The segment to slide from.
85
87
  * @param cache - Optional cache mapping segments to their sliding destinations.
86
88
  * Excursions will be avoided for segments in the cache, and the cache will be populated with
87
89
  * entries for all segments visited during excursion.
88
90
  * This can reduce the number of times the tree needs to be scanned if a range containing many
89
91
  * SlideOnRemove references is removed.
90
- * @returns The segment a SlideOnRemove reference should slide to, or undefined if there is no
91
- * valid segment (i.e. the tree is empty).
92
92
  * @internal
93
93
  */
94
94
  function getSlideToSegment(segment, slidingPreference = localReference_js_1.SlidingPreference.FORWARD, cache, useNewSlidingBehavior = false) {
@@ -170,6 +170,8 @@ function getSlideToSegoff(segoff, slidingPreference = localReference_js_1.Slidin
170
170
  };
171
171
  }
172
172
  exports.getSlideToSegoff = getSlideToSegoff;
173
+ const forwardPred = (ref) => ref.slidingPreference !== localReference_js_1.SlidingPreference.BACKWARD;
174
+ const backwardPred = (ref) => ref.slidingPreference === localReference_js_1.SlidingPreference.BACKWARD;
173
175
  /**
174
176
  * @internal
175
177
  */
@@ -277,7 +279,18 @@ class MergeTree {
277
279
  (0, internal_1.assert)(refSeq !== undefined, 0x398 /* localSeq provided for local length without refSeq */);
278
280
  (0, internal_1.assert)(segment.seq !== undefined, 0x399 /* segment with no seq in mergeTree */);
279
281
  const { seq, removedSeq, localRemovedSeq, movedSeq, localMovedSeq } = segment;
280
- if (seq !== constants_js_1.UnassignedSequenceNumber) {
282
+ if (seq === constants_js_1.UnassignedSequenceNumber) {
283
+ (0, internal_1.assert)(segment.localSeq !== undefined, 0x39a /* unacked segment with undefined localSeq */);
284
+ // inserted locally, still un-acked
285
+ if (segment.localSeq > localSeq ||
286
+ (localRemovedSeq !== undefined && localRemovedSeq <= localSeq) ||
287
+ (localMovedSeq !== undefined && localMovedSeq <= localSeq)) {
288
+ return 0;
289
+ }
290
+ const { cachedLength } = segment;
291
+ return cachedLength;
292
+ }
293
+ else {
281
294
  // inserted remotely
282
295
  if (seq > refSeq ||
283
296
  (removedSeq !== undefined &&
@@ -292,16 +305,6 @@ class MergeTree {
292
305
  }
293
306
  return segment.cachedLength;
294
307
  }
295
- else {
296
- (0, internal_1.assert)(segment.localSeq !== undefined, 0x39a /* unacked segment with undefined localSeq */);
297
- // inserted locally, still un-acked
298
- if (segment.localSeq > localSeq ||
299
- (localRemovedSeq !== undefined && localRemovedSeq <= localSeq) ||
300
- (localMovedSeq !== undefined && localMovedSeq <= localSeq)) {
301
- return 0;
302
- }
303
- return segment.cachedLength;
304
- }
305
308
  }
306
309
  unlinkMarker(marker) {
307
310
  const id = marker.getId();
@@ -321,7 +324,7 @@ class MergeTree {
321
324
  // Starting with the leaf segments, recursively builds the B-Tree layer by layer from the bottom up.
322
325
  const buildMergeBlock = (nodes) => {
323
326
  const blockCount = Math.ceil(nodes.length / maxChildren); // Compute # blocks require for this level of B-Tree
324
- const blocks = new Array(blockCount); // Pre-alloc array to collect nodes
327
+ const blocks = Array.from({ length: blockCount }); // Pre-alloc array to collect nodes
325
328
  // For each block in this level of the B-Tree...
326
329
  for (let nodeIndex = 0, blockIndex = 0; // Start with the first block and first node
327
330
  blockIndex < blockCount; // If we have more blocks, we also have more nodes to insert
@@ -334,6 +337,7 @@ class MergeTree {
334
337
  childIndex++, nodeIndex++ // Advance to next child & node
335
338
  ) {
336
339
  // Insert the next node into the current block
340
+ // TODO Non null asserting, why is this not null?
337
341
  this.addNode(block, nodes[nodeIndex]);
338
342
  }
339
343
  // Calculate this block's info. Previously this was inlined into the above loop as a micro-optimization,
@@ -342,7 +346,8 @@ class MergeTree {
342
346
  this.blockUpdate(block);
343
347
  }
344
348
  return blocks.length === 1 // If there is only one block at this layer...
345
- ? blocks[0] // ...then we're done. Return the root.
349
+ ? // Non null asserting here because of the length check above
350
+ blocks[0] // ...then we're done. Return the root.
346
351
  : buildMergeBlock(blocks); // ...otherwise recursively build the next layer above blocks.
347
352
  };
348
353
  if (segments.length > 0) {
@@ -390,6 +395,7 @@ class MergeTree {
390
395
  while (parent) {
391
396
  const children = parent.children;
392
397
  for (let childIndex = 0; childIndex < parent.childCount; childIndex++) {
398
+ // TODO Non null asserting, why is this not null?
393
399
  const child = children[childIndex];
394
400
  if ((!!prevParent && child === prevParent) || child === node) {
395
401
  break;
@@ -440,11 +446,9 @@ class MergeTree {
440
446
  let currentForwardMaybeEndpoint;
441
447
  let currentForwardSlideDestination;
442
448
  let currentForwardSlideIsForward;
443
- const forwardPred = (ref) => ref.slidingPreference !== localReference_js_1.SlidingPreference.BACKWARD;
444
449
  let currentBackwardMaybeEndpoint;
445
450
  let currentBackwardSlideDestination;
446
451
  let currentBackwardSlideIsForward;
447
- const backwardPred = (ref) => ref.slidingPreference === localReference_js_1.SlidingPreference.BACKWARD;
448
452
  const slideGroup = (currentSlideDestination, currentSlideIsForward, currentSlideGroup, pred, maybeEndpoint) => {
449
453
  if (currentSlideIsForward === undefined) {
450
454
  return;
@@ -461,16 +465,7 @@ class MergeTree {
461
465
  localRefs.addAfterTombstones(...endpointRefsToAdd);
462
466
  }
463
467
  }
464
- if (currentSlideDestination !== undefined) {
465
- const localRefs = localReference_js_1.LocalReferenceCollection.setOrGet(currentSlideDestination);
466
- if (currentSlideIsForward) {
467
- localRefs.addBeforeTombstones(...nonEndpointRefsToAdd);
468
- }
469
- else {
470
- localRefs.addAfterTombstones(...nonEndpointRefsToAdd);
471
- }
472
- }
473
- else {
468
+ if (currentSlideDestination === undefined) {
474
469
  for (const collection of currentSlideGroup) {
475
470
  for (const ref of collection) {
476
471
  if (pred(ref) && !(0, referencePositions_js_1.refTypeIncludesFlag)(ref, ops_js_1.ReferenceType.StayOnRemove)) {
@@ -481,6 +476,15 @@ class MergeTree {
481
476
  }
482
477
  }
483
478
  }
479
+ else {
480
+ const localRefs = localReference_js_1.LocalReferenceCollection.setOrGet(currentSlideDestination);
481
+ if (currentSlideIsForward) {
482
+ localRefs.addBeforeTombstones(...nonEndpointRefsToAdd);
483
+ }
484
+ else {
485
+ localRefs.addAfterTombstones(...nonEndpointRefsToAdd);
486
+ }
487
+ }
484
488
  };
485
489
  const trySlideSegment = (segment, currentSlideDestination, currentSlideIsForward, currentSlideGroup, pred, slidingPreference, currentMaybeEndpoint, reassign) => {
486
490
  // avoid sliding logic if this segment doesn't have any references
@@ -567,12 +571,7 @@ class MergeTree {
567
571
  }
568
572
  else {
569
573
  // Sequence number within window
570
- if (!node.isLeaf()) {
571
- const partialLen = node.partialLengths.getPartialLength(refSeq, clientId);
572
- partialLengths_js_1.PartialSequenceLengths.options.verifyExpected?.(this, node, refSeq, clientId);
573
- return partialLen;
574
- }
575
- else {
574
+ if (node.isLeaf()) {
576
575
  const segment = node;
577
576
  const removalInfo = (0, mergeTreeNodes_js_1.toRemovalInfo)(segment);
578
577
  const moveInfo = (0, mergeTreeNodes_js_1.toMoveInfo)(segment);
@@ -598,6 +597,11 @@ class MergeTree {
598
597
  ? segment.cachedLength
599
598
  : 0;
600
599
  }
600
+ else {
601
+ const partialLen = node.partialLengths.getPartialLength(refSeq, clientId);
602
+ partialLengths_js_1.PartialSequenceLengths.options.verifyExpected?.(this, node, refSeq, clientId);
603
+ return partialLen;
604
+ }
601
605
  }
602
606
  }
603
607
  setMinSeq(minSeq) {
@@ -621,7 +625,6 @@ class MergeTree {
621
625
  * Defaults to including all edits which have been applied.
622
626
  * @param clientId - The ID of the client from whose perspective to resolve this reference. Defaults to the current client.
623
627
  * @param localSeq - The local sequence number to consider. Defaults to including all local edits.
624
- * @returns the count of elements before the given reference position in the given perspective.
625
628
  */
626
629
  referencePositionToLocalPosition(refPos, refSeq = Number.MAX_SAFE_INTEGER, clientId = this.collabWindow.clientId, localSeq = this.collabWindow.localSeq) {
627
630
  const seg = refPos.getSegment();
@@ -689,7 +692,7 @@ class MergeTree {
689
692
  foundMarker = marker;
690
693
  }
691
694
  }
692
- return foundMarker !== undefined ? mergeTreeNodeWalk_js_1.NodeAction.Exit : mergeTreeNodeWalk_js_1.NodeAction.Skip;
695
+ return foundMarker === undefined ? mergeTreeNodeWalk_js_1.NodeAction.Skip : mergeTreeNodeWalk_js_1.NodeAction.Exit;
693
696
  }, undefined, undefined, forwards);
694
697
  return foundMarker;
695
698
  }
@@ -721,6 +724,8 @@ class MergeTree {
721
724
  if (opArgs.op.type === ops_js_1.MergeTreeDeltaType.OBLITERATE && localMovedSeq !== undefined) {
722
725
  const locallyMovedSegments = this.locallyMovedSegments.get(localMovedSeq);
723
726
  if (locallyMovedSegments) {
727
+ // Disabling because a for of loop causes the type of segment to be ISegment, which does not have parent information stored
728
+ // eslint-disable-next-line unicorn/no-array-for-each
724
729
  locallyMovedSegments.segments.forEach((segment) => {
725
730
  segment.localMovedSeq = undefined;
726
731
  if (!nodesToUpdate.includes(segment.parent)) {
@@ -821,15 +826,15 @@ class MergeTree {
821
826
  }
822
827
  if (marker) {
823
828
  pos = this.getPosition(marker, refseq, clientId);
824
- if (!relativePos.before) {
825
- pos += marker.cachedLength;
829
+ if (relativePos.before) {
826
830
  if (relativePos.offset !== undefined) {
827
- pos += relativePos.offset;
831
+ pos -= relativePos.offset;
828
832
  }
829
833
  }
830
834
  else {
835
+ pos += marker.cachedLength;
831
836
  if (relativePos.offset !== undefined) {
832
- pos -= relativePos.offset;
837
+ pos += relativePos.offset;
833
838
  }
834
839
  }
835
840
  }
@@ -888,6 +893,8 @@ class MergeTree {
888
893
  }
889
894
  }
890
895
  blockInsert(pos, refSeq, clientId, seq, localSeq, newSegments) {
896
+ // Keeping this function within the scope of blockInsert for readability.
897
+ // eslint-disable-next-line unicorn/consistent-function-scoping
891
898
  const continueFrom = (node) => {
892
899
  let siblingExists = false;
893
900
  (0, mergeTreeNodeWalk_js_1.forwardExcursion)(node, () => {
@@ -946,7 +953,7 @@ class MergeTree {
946
953
  });
947
954
  if (newSegment.parent === undefined) {
948
955
  // Indicates an attempt to insert past the end of the merge-tree's content.
949
- const errorConstructor = localSeq !== undefined ? internal_2.UsageError : internal_2.DataProcessingError;
956
+ const errorConstructor = localSeq === undefined ? internal_2.DataProcessingError : internal_2.UsageError;
950
957
  throw new errorConstructor("MergeTree insert failed", {
951
958
  currentSeq: this.collabWindow.currentSeq,
952
959
  minSeq: this.collabWindow.minSeq,
@@ -1088,6 +1095,7 @@ class MergeTree {
1088
1095
  let newNode;
1089
1096
  let fromSplit;
1090
1097
  for (childIndex = 0; childIndex < block.childCount; childIndex++) {
1098
+ // TODO Non null asserting, why is this not null?
1091
1099
  child = children[childIndex];
1092
1100
  // ensure we walk down the far edge of the tree, even if all sub-tree is eligible for zamboni
1093
1101
  const isLastNonLeafBlock = isLastChildBlock && !child.isLeaf() && childIndex === block.childCount - 1;
@@ -1100,7 +1108,23 @@ class MergeTree {
1100
1108
  (0, internal_1.assert)(len >= 0, 0x4bc /* Length should not be negative */);
1101
1109
  if (_pos < len || (_pos === len && this.breakTie(_pos, child, seq))) {
1102
1110
  // Found entry containing pos
1103
- if (!child.isLeaf()) {
1111
+ if (child.isLeaf()) {
1112
+ const segment = child;
1113
+ const segmentChanges = context.leaf(segment, _pos, context);
1114
+ if (segmentChanges.replaceCurrent) {
1115
+ block.assignChild(segmentChanges.replaceCurrent, childIndex, false);
1116
+ segmentChanges.replaceCurrent.ordinal = child.ordinal;
1117
+ }
1118
+ if (segmentChanges.next) {
1119
+ newNode = segmentChanges.next;
1120
+ childIndex++; // Insert after
1121
+ }
1122
+ else {
1123
+ // No change
1124
+ return undefined;
1125
+ }
1126
+ }
1127
+ else {
1104
1128
  const childBlock = child;
1105
1129
  // Internal node
1106
1130
  const splitNode = this.insertingWalk(childBlock, _pos, refSeq, clientId, seq, context, isLastNonLeafBlock);
@@ -1118,43 +1142,27 @@ class MergeTree {
1118
1142
  childIndex++; // Insert after
1119
1143
  }
1120
1144
  }
1121
- else {
1122
- const segment = child;
1123
- const segmentChanges = context.leaf(segment, _pos, context);
1124
- if (segmentChanges.replaceCurrent) {
1125
- block.assignChild(segmentChanges.replaceCurrent, childIndex, false);
1126
- segmentChanges.replaceCurrent.ordinal = child.ordinal;
1127
- }
1128
- if (segmentChanges.next) {
1129
- newNode = segmentChanges.next;
1130
- childIndex++; // Insert after
1131
- }
1132
- else {
1133
- // No change
1134
- return undefined;
1135
- }
1136
- }
1137
1145
  break;
1138
1146
  }
1139
1147
  else {
1140
1148
  _pos -= len;
1141
1149
  }
1142
1150
  }
1143
- if (!newNode) {
1144
- if (_pos === 0) {
1145
- if (context.continuePredicate?.(block)) {
1146
- return MergeTree.theUnfinishedNode;
1147
- }
1148
- else {
1149
- const segmentChanges = context.leaf(undefined, _pos, context);
1150
- newNode = segmentChanges.next;
1151
- // Assert segmentChanges.replaceCurrent === undefined
1152
- }
1151
+ if (!newNode && _pos === 0) {
1152
+ if (context.continuePredicate?.(block)) {
1153
+ return MergeTree.theUnfinishedNode;
1154
+ }
1155
+ else {
1156
+ const segmentChanges = context.leaf(undefined, _pos, context);
1157
+ newNode = segmentChanges.next;
1158
+ // Assert segmentChanges.replaceCurrent === undefined
1153
1159
  }
1154
1160
  }
1155
1161
  if (newNode) {
1156
1162
  for (let i = block.childCount; i > childIndex; i--) {
1163
+ // TODO Non null asserting, why is this not null?
1157
1164
  block.children[i] = block.children[i - 1];
1165
+ // TODO Non null asserting, why is this not null?
1158
1166
  block.children[i].index = i;
1159
1167
  }
1160
1168
  block.assignChild(newNode, childIndex, false);
@@ -1186,6 +1194,7 @@ class MergeTree {
1186
1194
  // Update ordinals to reflect lowered child count
1187
1195
  this.nodeUpdateOrdinals(node);
1188
1196
  for (let i = 0; i < halfCount; i++) {
1197
+ // TODO Non null asserting, why is this not null?
1189
1198
  newNode.assignChild(node.children[halfCount + i], i, false);
1190
1199
  node.children[halfCount + i] = undefined;
1191
1200
  }
@@ -1195,6 +1204,7 @@ class MergeTree {
1195
1204
  }
1196
1205
  nodeUpdateOrdinals(block) {
1197
1206
  for (let i = 0; i < block.childCount; i++) {
1207
+ // TODO Non null asserting, why is this not null?
1198
1208
  const child = block.children[i];
1199
1209
  block.setOrdinal(child, i);
1200
1210
  if (!child.isLeaf()) {
@@ -1248,10 +1258,10 @@ class MergeTree {
1248
1258
  deltaSegments,
1249
1259
  });
1250
1260
  }
1251
- if (this.collabWindow.collaborating && seq !== constants_js_1.UnassignedSequenceNumber) {
1252
- if (MergeTree.options.zamboniSegments) {
1253
- (0, zamboni_js_1.zamboniSegments)(this);
1254
- }
1261
+ if (this.collabWindow.collaborating &&
1262
+ seq !== constants_js_1.UnassignedSequenceNumber &&
1263
+ MergeTree.options.zamboniSegments) {
1264
+ (0, zamboni_js_1.zamboniSegments)(this);
1255
1265
  }
1256
1266
  }
1257
1267
  obliterateRange(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
@@ -1280,7 +1290,16 @@ class MergeTree {
1280
1290
  (refSeq < segment.seq || segment.seq === constants_js_1.UnassignedSequenceNumber)) {
1281
1291
  segment.wasMovedOnInsert = true;
1282
1292
  }
1283
- if (existingMoveInfo !== undefined) {
1293
+ if (existingMoveInfo === undefined) {
1294
+ segment.movedClientIds = [clientId];
1295
+ segment.movedSeq = seq;
1296
+ segment.localMovedSeq = localSeq;
1297
+ segment.movedSeqs = [seq];
1298
+ if (!(0, mergeTreeNodes_js_1.toRemovalInfo)(segment)) {
1299
+ movedSegments.push({ segment });
1300
+ }
1301
+ }
1302
+ else {
1284
1303
  _overwrite = true;
1285
1304
  if (existingMoveInfo.movedSeq === constants_js_1.UnassignedSequenceNumber) {
1286
1305
  // we moved this locally, but someone else moved it first
@@ -1300,15 +1319,6 @@ class MergeTree {
1300
1319
  existingMoveInfo.movedSeqs.push(seq);
1301
1320
  }
1302
1321
  }
1303
- else {
1304
- segment.movedClientIds = [clientId];
1305
- segment.movedSeq = seq;
1306
- segment.localMovedSeq = localSeq;
1307
- segment.movedSeqs = [seq];
1308
- if (!(0, mergeTreeNodes_js_1.toRemovalInfo)(segment)) {
1309
- movedSegments.push({ segment });
1310
- }
1311
- }
1312
1322
  // Save segment so can assign moved sequence number when acked by server
1313
1323
  if (this.collabWindow.collaborating) {
1314
1324
  if (segment.movedSeq === constants_js_1.UnassignedSequenceNumber &&
@@ -1332,7 +1342,7 @@ class MergeTree {
1332
1342
  }
1333
1343
  return true;
1334
1344
  };
1335
- this.nodeMap(refSeq, clientId, markMoved, undefined, afterMarkMoved, start, end, undefined, seq !== constants_js_1.UnassignedSequenceNumber ? seq : undefined);
1345
+ this.nodeMap(refSeq, clientId, markMoved, undefined, afterMarkMoved, start, end, undefined, seq === constants_js_1.UnassignedSequenceNumber ? undefined : seq);
1336
1346
  this.slideAckedRemovedSegmentReferences(localOverlapWithRefs);
1337
1347
  // opArgs == undefined => test code
1338
1348
  if (movedSegments.length > 0) {
@@ -1350,10 +1360,10 @@ class MergeTree {
1350
1360
  if (!this.collabWindow.collaborating || clientId !== this.collabWindow.clientId) {
1351
1361
  this.slideAckedRemovedSegmentReferences(movedSegments.map(({ segment }) => segment));
1352
1362
  }
1353
- if (this.collabWindow.collaborating && seq !== constants_js_1.UnassignedSequenceNumber) {
1354
- if (MergeTree.options.zamboniSegments) {
1355
- (0, zamboni_js_1.zamboniSegments)(this);
1356
- }
1363
+ if (this.collabWindow.collaborating &&
1364
+ seq !== constants_js_1.UnassignedSequenceNumber &&
1365
+ MergeTree.options.zamboniSegments) {
1366
+ (0, zamboni_js_1.zamboniSegments)(this);
1357
1367
  }
1358
1368
  }
1359
1369
  markRangeRemoved(start, end, refSeq, clientId, seq, overwrite = false, opArgs) {
@@ -1367,7 +1377,15 @@ class MergeTree {
1367
1377
  const localSeq = seq === constants_js_1.UnassignedSequenceNumber ? ++this.collabWindow.localSeq : undefined;
1368
1378
  const markRemoved = (segment, pos, _start, _end) => {
1369
1379
  const existingRemovalInfo = (0, mergeTreeNodes_js_1.toRemovalInfo)(segment);
1370
- if (existingRemovalInfo !== undefined) {
1380
+ if (existingRemovalInfo === undefined) {
1381
+ segment.removedClientIds = [clientId];
1382
+ segment.removedSeq = seq;
1383
+ segment.localRemovedSeq = localSeq;
1384
+ if (!(0, mergeTreeNodes_js_1.toMoveInfo)(segment)) {
1385
+ removedSegments.push({ segment });
1386
+ }
1387
+ }
1388
+ else {
1371
1389
  _overwrite = true;
1372
1390
  if (existingRemovalInfo.removedSeq === constants_js_1.UnassignedSequenceNumber) {
1373
1391
  // we removed this locally, but someone else removed it first
@@ -1385,14 +1403,6 @@ class MergeTree {
1385
1403
  existingRemovalInfo.removedClientIds.push(clientId);
1386
1404
  }
1387
1405
  }
1388
- else {
1389
- segment.removedClientIds = [clientId];
1390
- segment.removedSeq = seq;
1391
- segment.localRemovedSeq = localSeq;
1392
- if (!(0, mergeTreeNodes_js_1.toMoveInfo)(segment)) {
1393
- removedSegments.push({ segment });
1394
- }
1395
- }
1396
1406
  // Save segment so we can assign removed sequence number when acked by server
1397
1407
  if (this.collabWindow.collaborating) {
1398
1408
  if (segment.removedSeq === constants_js_1.UnassignedSequenceNumber &&
@@ -1433,10 +1443,10 @@ class MergeTree {
1433
1443
  if (!this.collabWindow.collaborating || clientId !== this.collabWindow.clientId) {
1434
1444
  this.slideAckedRemovedSegmentReferences(removedSegments.map(({ segment }) => segment));
1435
1445
  }
1436
- if (this.collabWindow.collaborating && seq !== constants_js_1.UnassignedSequenceNumber) {
1437
- if (MergeTree.options.zamboniSegments) {
1438
- (0, zamboni_js_1.zamboniSegments)(this);
1439
- }
1446
+ if (this.collabWindow.collaborating &&
1447
+ seq !== constants_js_1.UnassignedSequenceNumber &&
1448
+ MergeTree.options.zamboniSegments) {
1449
+ (0, zamboni_js_1.zamboniSegments)(this);
1440
1450
  }
1441
1451
  }
1442
1452
  /**
@@ -1449,6 +1459,8 @@ class MergeTree {
1449
1459
  if (pendingSegmentGroup === undefined || pendingSegmentGroup !== localOpMetadata) {
1450
1460
  throw new Error("Rollback op doesn't match last edit");
1451
1461
  }
1462
+ // Disabling because a for of loop causes the type of segment to be ISegment, which does not have parent information stored
1463
+ // eslint-disable-next-line unicorn/no-array-for-each
1452
1464
  pendingSegmentGroup.segments.forEach((segment) => {
1453
1465
  const segmentSegmentGroup = segment.segmentGroups?.pop?.();
1454
1466
  (0, internal_1.assert)(segmentSegmentGroup === pendingSegmentGroup, 0x3ee /* Unexpected segmentGroup in segment */);
@@ -1488,6 +1500,7 @@ class MergeTree {
1488
1500
  this.markRangeRemoved(start, start + segment.cachedLength, constants_js_1.UniversalSequenceNumber, this.collabWindow.clientId, constants_js_1.UniversalSequenceNumber, false, { op: removeOp });
1489
1501
  } /* op.type === MergeTreeDeltaType.ANNOTATE */
1490
1502
  else {
1503
+ // TODO Non null asserting, why is this not null?
1491
1504
  const props = pendingSegmentGroup.previousProps[i];
1492
1505
  const annotateOp = (0, opBuilder_js_1.createAnnotateRangeOp)(start, start + segment.cachedLength, props);
1493
1506
  this.annotateRange(start, start + segment.cachedLength, props, constants_js_1.UniversalSequenceNumber, this.collabWindow.clientId, constants_js_1.UniversalSequenceNumber, { op: annotateOp }, segmentPropertiesManager_js_1.PropertiesRollback.Rollback);
@@ -1592,18 +1605,20 @@ class MergeTree {
1592
1605
  }
1593
1606
  }
1594
1607
  }
1595
- const newOrder = Array.from(affectedSegments.map(({ data }) => data));
1596
- newOrder.forEach((seg) => seg.localRefs?.walkReferences((lref) => lref.callbacks?.beforeSlide?.(lref)));
1608
+ const newOrder = Array.from(affectedSegments, ({ data }) => data);
1609
+ for (const seg of newOrder)
1610
+ seg.localRefs?.walkReferences((lref) => lref.callbacks?.beforeSlide?.(lref));
1597
1611
  const perSegmentTrackingGroups = new Map();
1598
1612
  for (const segment of newOrder) {
1599
1613
  const { trackingCollection } = segment;
1600
- const trackingGroups = Array.from(trackingCollection.trackingGroups);
1614
+ const trackingGroups = [...trackingCollection.trackingGroups];
1601
1615
  perSegmentTrackingGroups.set(segment, trackingGroups);
1602
1616
  for (const group of trackingCollection.trackingGroups) {
1603
1617
  trackingCollection.unlink(group);
1604
1618
  }
1605
1619
  }
1606
1620
  for (let i = 0; i < newOrder.length; i++) {
1621
+ // TODO Non null asserting, why is this not null?
1607
1622
  const seg = newOrder[i];
1608
1623
  const { parent, index, ordinal } = currentOrder[i];
1609
1624
  parent?.assignChild(seg, index, false);
@@ -1623,13 +1638,16 @@ class MergeTree {
1623
1638
  }
1624
1639
  return depths.get(block);
1625
1640
  };
1626
- newOrder.forEach(computeDepth);
1627
- for (const [node] of Array.from(depths.entries()).sort((a, b) => b[1] - a[1])) {
1641
+ for (const element of newOrder) {
1642
+ computeDepth(element);
1643
+ }
1644
+ for (const [node] of [...depths.entries()].sort((a, b) => b[1] - a[1])) {
1628
1645
  if (!node.isLeaf()) {
1629
1646
  this.nodeUpdateLengthNewStructure(node);
1630
1647
  }
1631
1648
  }
1632
- newOrder.forEach((seg) => seg.localRefs?.walkReferences((lref) => lref.callbacks?.afterSlide?.(lref)));
1649
+ for (const seg of newOrder)
1650
+ seg.localRefs?.walkReferences((lref) => lref.callbacks?.afterSlide?.(lref));
1633
1651
  }
1634
1652
  /**
1635
1653
  * Normalizes the segments nearby `segmentGroup` to be ordered as they would if the op submitting `segmentGroup`
@@ -1684,11 +1702,10 @@ class MergeTree {
1684
1702
  }
1685
1703
  blockUpdate(block) {
1686
1704
  let len;
1687
- // eslint-disable-next-line import/no-deprecated
1688
1705
  const rightmostTiles = (0, properties_js_1.createMap)();
1689
- // eslint-disable-next-line import/no-deprecated
1690
1706
  const leftmostTiles = (0, properties_js_1.createMap)();
1691
1707
  for (let i = 0; i < block.childCount; i++) {
1708
+ // TODO Non null asserting, why is this not null?
1692
1709
  const node = block.children[i];
1693
1710
  const nodeLength = nodeTotalLength(this, node);
1694
1711
  if (nodeLength !== undefined) {
@@ -1719,9 +1736,7 @@ class MergeTree {
1719
1736
  }
1720
1737
  }
1721
1738
  else {
1722
- // eslint-disable-next-line import/no-deprecated
1723
1739
  (0, properties_js_1.extend)(rightmostTiles, node.rightmostTiles);
1724
- // eslint-disable-next-line import/no-deprecated
1725
1740
  (0, properties_js_1.extendIfUndefined)(leftmostTiles, node.leftmostTiles);
1726
1741
  }
1727
1742
  }