@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
@@ -129,28 +129,31 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
129
129
  ) {}
130
130
 
131
131
  private makeNode(key: TKey, data: TData, color: RBColor, size: number): RBNode<TKey, TData> {
132
- return { key, data, color, size } as any as RBNode<TKey, TData>;
132
+ return { key, data, color, size } as unknown as RBNode<TKey, TData>;
133
133
  }
134
134
 
135
- private isRed(node: RBNode<TKey, TData> | undefined) {
135
+ private isRed(node: RBNode<TKey, TData> | undefined): boolean {
136
136
  return !!node && node.color === RBColor.RED;
137
137
  }
138
138
 
139
- private nodeSize(node: RBNode<TKey, TData> | undefined) {
139
+ private nodeSize(node: RBNode<TKey, TData> | undefined): number {
140
140
  return node ? node.size : 0;
141
141
  }
142
- public size() {
142
+ public size(): number {
143
143
  return this.nodeSize(this.root);
144
144
  }
145
- public isEmpty() {
145
+ public isEmpty(): boolean {
146
146
  return !this.root;
147
147
  }
148
- public get(key: TKey) {
148
+ public get(key: TKey): RBNode<TKey, TData> | undefined {
149
149
  if (key !== undefined) {
150
150
  return this.nodeGet(this.root, key);
151
151
  }
152
152
  }
153
- private nodeGet(node: RBNode<TKey, TData> | undefined, key: TKey) {
153
+ private nodeGet(
154
+ node: RBNode<TKey, TData> | undefined,
155
+ key: TKey,
156
+ ): RBNode<TKey, TData> | undefined {
154
157
  let _node = node;
155
158
  while (_node) {
156
159
  const cmp = this.compareKeys(key, _node.key);
@@ -163,11 +166,11 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
163
166
  }
164
167
  }
165
168
  }
166
- private contains(key: TKey) {
169
+ private contains(key: TKey): RBNode<TKey, TData> | undefined {
167
170
  return this.get(key);
168
171
  }
169
172
 
170
- public gather(key: TKey, matcher: IRBMatcher<TKey, TData>) {
173
+ public gather(key: TKey, matcher: IRBMatcher<TKey, TData>): RBNode<TKey, TData>[] {
171
174
  const results = [] as RBNode<TKey, TData>[];
172
175
  if (key !== undefined) {
173
176
  this.nodeGather(this.root, results, key, matcher);
@@ -180,7 +183,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
180
183
  results: RBNode<TKey, TData>[],
181
184
  key: TKey,
182
185
  matcher: IRBMatcher<TKey, TData>,
183
- ) {
186
+ ): void {
184
187
  if (node) {
185
188
  if (matcher.continueSubtree(node.left, key)) {
186
189
  this.nodeGather(node.left, results, key, matcher);
@@ -199,7 +202,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
199
202
  actionFn: (node: RBNode<TKey, TData>) => void,
200
203
  continueLeftFn: (number: number) => boolean,
201
204
  continueRightFn: (number: number) => boolean,
202
- ) {
205
+ ): void {
203
206
  this.nodeWalkExactMatchesForward(
204
207
  this.root,
205
208
  compareFn,
@@ -215,7 +218,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
215
218
  actionFn: (node: RBNode<TKey, TData>) => void,
216
219
  continueLeftFn: (number: number) => boolean,
217
220
  continueRightFn: (number: number) => boolean,
218
- ) {
221
+ ): void {
219
222
  if (!node) {
220
223
  return;
221
224
  }
@@ -248,7 +251,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
248
251
  actionFn: (node: RBNode<TKey, TData>) => void,
249
252
  continueLeftFn: (number: number) => boolean,
250
253
  continueRightFn: (number: number) => boolean,
251
- ) {
254
+ ): void {
252
255
  this.nodeWalkExactMatchesBackward(
253
256
  this.root,
254
257
  compareFn,
@@ -264,7 +267,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
264
267
  actionFn: (node: RBNode<TKey, TData>) => void,
265
268
  continueLeftFn: (cmp: number) => boolean,
266
269
  continueRightFn: (cmp: number) => boolean,
267
- ) {
270
+ ): void {
268
271
  if (!node) {
269
272
  return;
270
273
  }
@@ -292,7 +295,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
292
295
  }
293
296
  }
294
297
 
295
- public put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>) {
298
+ public put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>): void {
296
299
  if (key !== undefined) {
297
300
  if (data === undefined) {
298
301
  this.remove(key);
@@ -308,11 +311,9 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
308
311
  key: TKey,
309
312
  data: TData,
310
313
  conflict?: ConflictAction<TKey, TData>,
311
- ) {
314
+ ): RBNode<TKey, TData> {
312
315
  let _node = node;
313
- if (!_node) {
314
- return this.makeNode(key, data, RBColor.RED, 1);
315
- } else {
316
+ if (_node) {
316
317
  const cmp = this.compareKeys(key, _node.key);
317
318
  if (cmp < 0) {
318
319
  _node.left = this.nodePut(_node.left, key, data, conflict);
@@ -324,7 +325,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
324
325
  if (kd.key) {
325
326
  _node.key = kd.key;
326
327
  }
327
- _node.data = kd.data ? kd.data : data;
328
+ _node.data = kd.data ?? data;
328
329
  } else {
329
330
  _node.data = data;
330
331
  }
@@ -344,10 +345,12 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
344
345
  this.updateLocal(_node);
345
346
  }
346
347
  return _node;
348
+ } else {
349
+ return this.makeNode(key, data, RBColor.RED, 1);
347
350
  }
348
351
  }
349
352
 
350
- private updateLocal(node: RBNode<TKey, TData>) {
353
+ private updateLocal(node: RBNode<TKey, TData>): void {
351
354
  if (this.aug) {
352
355
  if (this.isRed(node.left)) {
353
356
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -361,7 +364,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
361
364
  }
362
365
  }
363
366
 
364
- private nodeRemoveMin(node: RBNode<TKey, TData>) {
367
+ private nodeRemoveMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> | undefined {
365
368
  let _node = node;
366
369
  if (_node.left) {
367
370
  if (!this.isRed(_node.left) && !this.isRed(_node.left.left)) {
@@ -374,7 +377,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
374
377
  }
375
378
  }
376
379
 
377
- public remove(key: TKey) {
380
+ public remove(key: TKey): void {
378
381
  if (key !== undefined) {
379
382
  if (!this.contains(key)) {
380
383
  return;
@@ -385,7 +388,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
385
388
  // TODO: error on undefined key
386
389
  }
387
390
 
388
- public removeExisting(key: TKey) {
391
+ public removeExisting(key: TKey): void {
389
392
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
390
393
  if (!this.isRed(this.root!.left) && !this.isRed(this.root!.right)) {
391
394
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -396,7 +399,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
396
399
  this.root = this.nodeRemove(this.root!, key);
397
400
  }
398
401
 
399
- private nodeRemove(node: RBNode<TKey, TData>, key: TKey) {
402
+ private nodeRemove(node: RBNode<TKey, TData>, key: TKey): RBNode<TKey, TData> | undefined {
400
403
  let _node = node;
401
404
  if (this.compareKeys(key, _node.key) < 0) {
402
405
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -432,9 +435,9 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
432
435
  }
433
436
 
434
437
  /**
435
- * @returns The largest node in this tree which compares less than or equal to `key`
438
+ * Finds the largest node that is less than or equal to a given key.
436
439
  */
437
- public floor(key: TKey) {
440
+ public floor(key: TKey): RBNode<TKey, TData> | undefined {
438
441
  if (!this.isEmpty()) {
439
442
  return this.nodeFloor(this.root, key);
440
443
  }
@@ -452,15 +455,15 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
452
455
  return this.nodeFloor(node.left, key);
453
456
  } else {
454
457
  const rightFloor = this.nodeFloor(node.right, key);
455
- return rightFloor ? rightFloor : node;
458
+ return rightFloor ?? node;
456
459
  }
457
460
  }
458
461
  }
459
462
 
460
463
  /**
461
- * @returns The smallest node in this tree which compares greater than or equal to `key`
464
+ * Finds the smallest node that is greater than or equal to a given key.
462
465
  */
463
- public ceil(key: TKey) {
466
+ public ceil(key: TKey): RBNode<TKey, TData> | undefined {
464
467
  if (!this.isEmpty()) {
465
468
  return this.nodeCeil(this.root, key);
466
469
  }
@@ -478,32 +481,32 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
478
481
  return this.nodeCeil(node.right, key);
479
482
  } else {
480
483
  const leftCeil = this.nodeCeil(node.left, key);
481
- return leftCeil ? leftCeil : node;
484
+ return leftCeil ?? node;
482
485
  }
483
486
  }
484
487
  }
485
488
 
486
- public min() {
489
+ public min(): RBNode<TKey, TData> | undefined {
487
490
  if (this.root) {
488
491
  return this.nodeMin(this.root);
489
492
  }
490
493
  }
491
494
 
492
495
  private nodeMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
493
- return !node.left ? node : this.nodeMin(node.left);
496
+ return node.left ? this.nodeMin(node.left) : node;
494
497
  }
495
498
 
496
- public max() {
499
+ public max(): RBNode<TKey, TData> | undefined {
497
500
  if (this.root) {
498
501
  return this.nodeMax(this.root);
499
502
  }
500
503
  }
501
504
 
502
505
  private nodeMax(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
503
- return !node.right ? node : this.nodeMax(node.right);
506
+ return node.right ? this.nodeMax(node.right) : node;
504
507
  }
505
508
 
506
- private rotateRight(node: RBNode<TKey, TData>) {
509
+ private rotateRight(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
507
510
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
508
511
  const leftChild = node.left!;
509
512
  node.left = leftChild.right;
@@ -519,7 +522,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
519
522
  return leftChild;
520
523
  }
521
524
 
522
- private rotateLeft(node: RBNode<TKey, TData>) {
525
+ private rotateLeft(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
523
526
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
524
527
  const rightChild = node.right!;
525
528
  node.right = rightChild.left;
@@ -535,11 +538,11 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
535
538
  return rightChild;
536
539
  }
537
540
 
538
- private oppositeColor(c: RBColor) {
541
+ private oppositeColor(c: RBColor): RBColor {
539
542
  return c === RBColor.BLACK ? RBColor.RED : RBColor.BLACK;
540
543
  }
541
544
 
542
- private flipColors(node: RBNode<TKey, TData>) {
545
+ private flipColors(node: RBNode<TKey, TData>): void {
543
546
  node.color = this.oppositeColor(node.color);
544
547
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
545
548
  node.left!.color = this.oppositeColor(node.left!.color);
@@ -547,7 +550,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
547
550
  node.right!.color = this.oppositeColor(node.right!.color);
548
551
  }
549
552
 
550
- private moveRedLeft(node: RBNode<TKey, TData>) {
553
+ private moveRedLeft(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
551
554
  let _node = node;
552
555
  this.flipColors(_node);
553
556
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -560,7 +563,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
560
563
  return _node;
561
564
  }
562
565
 
563
- private moveRedRight(node: RBNode<TKey, TData>) {
566
+ private moveRedRight(node: RBNode<TKey, TData>): RBNode<TKey, TData> {
564
567
  let _node = node;
565
568
  this.flipColors(_node);
566
569
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -571,7 +574,7 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
571
574
  return _node;
572
575
  }
573
576
 
574
- private balance(input: RBNode<TKey, TData>) {
577
+ private balance(input: RBNode<TKey, TData>): RBNode<TKey, TData> {
575
578
  let node: RBNode<TKey, TData> | undefined = input;
576
579
  if (this.isRed(node.right)) {
577
580
  node = this.rotateLeft(node);
@@ -595,16 +598,16 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
595
598
  accum?: TAccum,
596
599
  start?: TKey,
597
600
  end?: TKey,
598
- ) {
601
+ ): void {
599
602
  this.nodeMap(this.root, action, accum, start, end);
600
603
  }
601
604
 
602
- public map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {
605
+ public map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum): void {
603
606
  // TODO: optimize to avoid comparisons
604
607
  this.nodeMap(this.root, action, accum);
605
608
  }
606
609
 
607
- public keys() {
610
+ public keys(): TKey[] {
608
611
  const keyList: TKey[] = [];
609
612
  const actions: RBNodeActions<TKey, TData> = {
610
613
  showStructure: true,
@@ -622,11 +625,11 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
622
625
  * false, traversal is halted.
623
626
  * @param action - action to apply to each node
624
627
  */
625
- public walk(actions: RBNodeActions<TKey, TData>) {
628
+ public walk(actions: RBNodeActions<TKey, TData>): void {
626
629
  this.nodeWalk(this.root, actions);
627
630
  }
628
631
 
629
- public walkBackward(actions: RBNodeActions<TKey, TData>) {
632
+ public walkBackward(actions: RBNodeActions<TKey, TData>): void {
630
633
  this.nodeWalkBackward(this.root, actions);
631
634
  }
632
635
 
@@ -636,26 +639,20 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
636
639
  ): boolean {
637
640
  let go = true;
638
641
  if (node) {
639
- if (actions.pre) {
640
- if (!!actions.showStructure || node.color === RBColor.BLACK) {
641
- go = actions.pre(node);
642
- }
642
+ if (actions.pre && (!!actions.showStructure || node.color === RBColor.BLACK)) {
643
+ go = actions.pre(node);
643
644
  }
644
645
  if (node.left) {
645
646
  go = this.nodeWalk(node.left, actions);
646
647
  }
647
- if (go && actions.infix) {
648
- if (!!actions.showStructure || node.color === RBColor.BLACK) {
649
- go = actions.infix(node);
650
- }
648
+ if (go && actions.infix && (!!actions.showStructure || node.color === RBColor.BLACK)) {
649
+ go = actions.infix(node);
651
650
  }
652
651
  if (go) {
653
652
  go = this.nodeWalk(node.right, actions);
654
653
  }
655
- if (go && actions.post) {
656
- if (!!actions.showStructure || node.color === RBColor.BLACK) {
657
- go = actions.post(node);
658
- }
654
+ if (go && actions.post && (!!actions.showStructure || node.color === RBColor.BLACK)) {
655
+ go = actions.post(node);
659
656
  }
660
657
  }
661
658
  return go;
@@ -667,26 +664,20 @@ export class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData>
667
664
  ): boolean {
668
665
  let go = true;
669
666
  if (node) {
670
- if (actions.pre) {
671
- if (!!actions.showStructure || node.color === RBColor.BLACK) {
672
- go = actions.pre(node);
673
- }
667
+ if (actions.pre && (!!actions.showStructure || node.color === RBColor.BLACK)) {
668
+ go = actions.pre(node);
674
669
  }
675
670
  if (node.right) {
676
671
  go = this.nodeWalkBackward(node.right, actions);
677
672
  }
678
- if (go && actions.infix) {
679
- if (!!actions.showStructure || node.color === RBColor.BLACK) {
680
- go = actions.infix(node);
681
- }
673
+ if (go && actions.infix && (!!actions.showStructure || node.color === RBColor.BLACK)) {
674
+ go = actions.infix(node);
682
675
  }
683
676
  if (go) {
684
677
  go = this.nodeWalkBackward(node.left, actions);
685
678
  }
686
- if (go && actions.post) {
687
- if (!!actions.showStructure || node.color === RBColor.BLACK) {
688
- go = actions.post(node);
689
- }
679
+ if (go && actions.post && (!!actions.showStructure || node.color === RBColor.BLACK)) {
680
+ go = actions.post(node);
690
681
  }
691
682
  }
692
683
  return go;
@@ -61,11 +61,11 @@ abstract class BaseEndpointSegment {
61
61
  depth: number;
62
62
  };
63
63
 
64
- get parent() {
64
+ get parent(): MergeBlock {
65
65
  return this.endpointSegmentProps().parent;
66
66
  }
67
67
 
68
- get index() {
68
+ get index(): number {
69
69
  return this.endpointSegmentProps().index;
70
70
  }
71
71
 
@@ -77,10 +77,10 @@ abstract class BaseEndpointSegment {
77
77
  * since this segment isn't real, throw on any segment
78
78
  * operation that isn't expected
79
79
  */
80
- get segmentGroups() {
80
+ get segmentGroups(): never {
81
81
  return notSupported();
82
82
  }
83
- get trackingCollection() {
83
+ get trackingCollection(): never {
84
84
  return notSupported();
85
85
  }
86
86
  addProperties = notSupported;
@@ -92,7 +92,7 @@ abstract class BaseEndpointSegment {
92
92
  ack = notSupported;
93
93
  }
94
94
 
95
- const notSupported = () => {
95
+ const notSupported = (): never => {
96
96
  assert(false, 0x3ed /* operation not supported */);
97
97
  };
98
98
 
@@ -107,7 +107,11 @@ export class StartOfTreeSegment extends BaseEndpointSegment implements ISegment,
107
107
  * this segment pretends to be a sibling of the first real segment.
108
108
  * so compute the necessary properties to pretend to be that segment.
109
109
  */
110
- protected endpointSegmentProps() {
110
+ protected endpointSegmentProps(): {
111
+ parent: MergeBlock;
112
+ index: number;
113
+ depth: number;
114
+ } {
111
115
  let firstSegment: ISegmentLeaf | undefined;
112
116
  let depth = 1;
113
117
  const root = this.mergeTree.root;
@@ -134,7 +138,10 @@ export class StartOfTreeSegment extends BaseEndpointSegment implements ISegment,
134
138
  };
135
139
  }
136
140
 
137
- get ordinal() {
141
+ get ordinal(): string {
142
+ // Ordinals exist purely for lexicographical sort order and use a small set of valid bytes for each string character.
143
+ // The extra handling fromCodePoint has for things like surrogate pairs is therefore unnecessary.
144
+ // eslint-disable-next-line unicorn/prefer-code-point
138
145
  return String.fromCharCode(0x00);
139
146
  }
140
147
  }
@@ -150,7 +157,11 @@ export class EndOfTreeSegment extends BaseEndpointSegment implements ISegment, I
150
157
  * this segment pretends to be a sibling of the last real segment.
151
158
  * so compute the necessary properties to pretend to be that segment.
152
159
  */
153
- protected endpointSegmentProps() {
160
+ protected endpointSegmentProps(): {
161
+ parent: MergeBlock;
162
+ index: number;
163
+ depth: number;
164
+ } {
154
165
  let lastSegment: ISegmentLeaf | undefined;
155
166
  let depth = 1;
156
167
  const root = this.mergeTree.root;
@@ -177,11 +188,11 @@ export class EndOfTreeSegment extends BaseEndpointSegment implements ISegment, I
177
188
  };
178
189
  }
179
190
 
180
- get ordinal() {
191
+ get ordinal(): string {
181
192
  // just compute an arbitrarily big ordinal
182
193
  // we base it on the depth of the tree
183
194
  // to ensure it is bigger than all ordinals in
184
195
  // the tree, as each layer appends to the previous
185
- return String.fromCharCode(0xffff).repeat(this.endpointSegmentProps().depth);
196
+ return String.fromCodePoint(0xffff).repeat(this.endpointSegmentProps().depth);
186
197
  }
187
198
  }