@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/src/client.ts CHANGED
@@ -73,7 +73,6 @@ import {
73
73
  MergeTreeDeltaType,
74
74
  ReferenceType,
75
75
  } from "./ops.js";
76
- // eslint-disable-next-line import/no-deprecated
77
76
  import { PropertySet, createMap } from "./properties.js";
78
77
  import { DetachedReferencePosition, ReferencePosition } from "./referencePositions.js";
79
78
  import { SnapshotLoader } from "./snapshotLoader.js";
@@ -161,14 +160,15 @@ export class Client extends TypedEventEmitter<IClientEvents> {
161
160
  public readonly specToSegment: (spec: IJSONSegment) => ISegment,
162
161
  public readonly logger: ITelemetryLoggerExt,
163
162
  options?: IMergeTreeOptions & PropertySet,
164
- private readonly getMinInFlightRefSeq: () => number | undefined = () => undefined,
163
+ private readonly getMinInFlightRefSeq: () => number | undefined = (): undefined =>
164
+ undefined,
165
165
  ) {
166
166
  super();
167
167
  this._mergeTree = new MergeTree(options);
168
- this._mergeTree.mergeTreeDeltaCallback = (opArgs, deltaArgs) => {
168
+ this._mergeTree.mergeTreeDeltaCallback = (opArgs, deltaArgs): void => {
169
169
  this.emit("delta", opArgs, deltaArgs, this);
170
170
  };
171
- this._mergeTree.mergeTreeMaintenanceCallback = (args, opArgs) => {
171
+ this._mergeTree.mergeTreeMaintenanceCallback = (args, opArgs): void => {
172
172
  this.emit("maintenance", args, opArgs, this);
173
173
  };
174
174
 
@@ -204,7 +204,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
204
204
  return node?.data;
205
205
  }
206
206
  // eslint-disable-next-line import/no-deprecated
207
- const taken: SegmentGroup[] = new Array(Math.min(count, pending.length));
207
+ const taken: SegmentGroup[] = Array.from({ length: Math.min(count, pending.length) });
208
208
  for (let i = taken.length - 1; i >= 0; i--) {
209
209
  taken[i] = node!.data;
210
210
  node = node!.prev;
@@ -271,6 +271,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
271
271
  }
272
272
 
273
273
  /**
274
+ * Create and insert a segment at the specified position.
274
275
  * @param pos - The position to insert the segment at
275
276
  * @param segment - The segment to insert
276
277
  */
@@ -284,6 +285,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
284
285
  }
285
286
 
286
287
  /**
288
+ * Create and insert a segment at the specified reference position.
287
289
  * @param refPos - The reference position to insert the segment at
288
290
  * @param segment - The segment to insert
289
291
  */
@@ -341,7 +343,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
341
343
  ): boolean {
342
344
  return walkAllChildSegments(
343
345
  this._mergeTree.root,
344
- accum === undefined ? action : (seg) => action(seg, accum),
346
+ accum === undefined ? action : (seg): boolean => action(seg, accum),
345
347
  );
346
348
  }
347
349
 
@@ -434,7 +436,9 @@ export class Client extends TypedEventEmitter<IClientEvents> {
434
436
  /**
435
437
  * Removes a `LocalReferencePosition` from this client.
436
438
  */
437
- public removeLocalReferencePosition(lref: LocalReferencePosition) {
439
+ public removeLocalReferencePosition(
440
+ lref: LocalReferencePosition,
441
+ ): LocalReferencePosition | undefined {
438
442
  return this._mergeTree.removeLocalReferencePosition(lref);
439
443
  }
440
444
 
@@ -455,7 +459,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
455
459
  * and convert the position to a character position.
456
460
  * @param relativePos - Id of marker (may be indirect) and whether position is before or after marker.
457
461
  */
458
- public posFromRelativePos(relativePos: IRelativePosition) {
462
+ public posFromRelativePos(relativePos: IRelativePosition): number {
459
463
  return this._mergeTree.posFromRelativePos(relativePos);
460
464
  }
461
465
 
@@ -466,7 +470,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
466
470
  /**
467
471
  * Revert an op
468
472
  */
469
- public rollback?(op: any, localOpMetadata: unknown) {
473
+ public rollback?(op: unknown, localOpMetadata: unknown): void {
470
474
  // eslint-disable-next-line import/no-deprecated
471
475
  this._mergeTree.rollback(op as IMergeTreeDeltaOp, localOpMetadata as SegmentGroup);
472
476
  }
@@ -553,6 +557,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
553
557
  const clientArgs = this.getClientSequenceArgs(opArgs);
554
558
  const range = this.getValidOpRange(op, clientArgs);
555
559
 
560
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
556
561
  const segments = [this.specToSegment(op.seg)];
557
562
 
558
563
  this._mergeTree.insertSegments(
@@ -615,10 +620,11 @@ export class Client extends TypedEventEmitter<IClientEvents> {
615
620
  }
616
621
  // Validate end if not insert, or insert has end
617
622
  //
618
- if (op.type !== MergeTreeDeltaType.INSERT || end !== undefined) {
619
- if (end === undefined || end <= start!) {
620
- invalidPositions.push("end");
621
- }
623
+ if (
624
+ (op.type !== MergeTreeDeltaType.INSERT || end !== undefined) &&
625
+ (end === undefined || end <= start!)
626
+ ) {
627
+ invalidPositions.push("end");
622
628
  }
623
629
 
624
630
  if (op.type === MergeTreeDeltaType.OBLITERATE && end !== undefined && end > length) {
@@ -654,18 +660,15 @@ export class Client extends TypedEventEmitter<IClientEvents> {
654
660
  | ISequencedDocumentMessage
655
661
  | Pick<ISequencedDocumentMessage, "referenceSequenceNumber" | "clientId">
656
662
  | undefined,
657
- ) {
663
+ ): {
664
+ clientId: number;
665
+ referenceSequenceNumber: number;
666
+ sequenceNumber: number;
667
+ } {
658
668
  // If there this no sequenced message, then the op is local
659
669
  // and unacked, so use this clients sequenced args
660
670
  //
661
- if (!sequencedMessage) {
662
- const segWindow = this.getCollabWindow();
663
- return {
664
- clientId: segWindow.clientId,
665
- referenceSequenceNumber: segWindow.currentSeq,
666
- sequenceNumber: this.getLocalSequenceNumber(),
667
- };
668
- } else {
671
+ if (sequencedMessage) {
669
672
  return {
670
673
  clientId: this.getOrAddShortClientIdFromMessage(sequencedMessage),
671
674
  referenceSequenceNumber: sequencedMessage.referenceSequenceNumber,
@@ -673,6 +676,13 @@ export class Client extends TypedEventEmitter<IClientEvents> {
673
676
  // return value isn't expected to have it either.
674
677
  sequenceNumber: (sequencedMessage as ISequencedDocumentMessage).sequenceNumber,
675
678
  };
679
+ } else {
680
+ const segWindow = this.getCollabWindow();
681
+ return {
682
+ clientId: segWindow.clientId,
683
+ referenceSequenceNumber: segWindow.currentSeq,
684
+ sequenceNumber: this.getLocalSequenceNumber(),
685
+ };
676
686
  }
677
687
  }
678
688
 
@@ -684,7 +694,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
684
694
  return this.getClientSequenceArgsForMessage(opArgs.sequencedMessage);
685
695
  }
686
696
 
687
- private ackPendingSegment(opArgs: IMergeTreeDeltaRemoteOpArgs) {
697
+ private ackPendingSegment(opArgs: IMergeTreeDeltaRemoteOpArgs): void {
688
698
  if (opArgs.op.type === MergeTreeDeltaType.GROUP) {
689
699
  for (const memberOp of opArgs.op.ops) {
690
700
  this._mergeTree.ackPendingSegment({
@@ -698,27 +708,29 @@ export class Client extends TypedEventEmitter<IClientEvents> {
698
708
  }
699
709
  }
700
710
 
701
- getOrAddShortClientId(longClientId: string) {
711
+ getOrAddShortClientId(longClientId: string): number {
702
712
  if (!this.clientNameToIds.get(longClientId)) {
703
713
  this.addLongClientId(longClientId);
704
714
  }
705
715
  return this.getShortClientId(longClientId);
706
716
  }
707
717
 
708
- protected getShortClientId(longClientId: string) {
718
+ protected getShortClientId(longClientId: string): number {
709
719
  return this.clientNameToIds.get(longClientId)!.data;
710
720
  }
711
721
 
712
- getLongClientId(shortClientId: number) {
713
- return shortClientId >= 0 ? this.shortClientIdMap[shortClientId] : "original";
722
+ getLongClientId(shortClientId: number): string {
723
+ return shortClientId >= 0 ? this.shortClientIdMap[shortClientId]! : "original";
714
724
  }
715
725
 
716
- addLongClientId(longClientId: string) {
726
+ addLongClientId(longClientId: string): void {
717
727
  this.clientNameToIds.put(longClientId, this.shortClientIdMap.length);
718
728
  this.shortClientIdMap.push(longClientId);
719
729
  }
720
730
 
721
- private getOrAddShortClientIdFromMessage(msg: Pick<ISequencedDocumentMessage, "clientId">) {
731
+ private getOrAddShortClientIdFromMessage(
732
+ msg: Pick<ISequencedDocumentMessage, "clientId">,
733
+ ): number {
722
734
  return this.getOrAddShortClientId(msg.clientId ?? "server");
723
735
  }
724
736
 
@@ -731,7 +743,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
731
743
  * @param segment - The segment to find the position for
732
744
  * @param localSeq - The localSeq to find the position of the segment at
733
745
  */
734
- public findReconnectionPosition(segment: ISegment, localSeq: number) {
746
+ public findReconnectionPosition(segment: ISegment, localSeq: number): number {
735
747
  assert(
736
748
  localSeq <= this._mergeTree.collabWindow.localSeq,
737
749
  0x032 /* "localSeq greater than collab window" */,
@@ -783,7 +795,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
783
795
  const segmentPosition = this.findReconnectionPosition(segment, segmentGroup.localSeq);
784
796
  let newOp: IMergeTreeDeltaOp | undefined;
785
797
  switch (resetOp.type) {
786
- case MergeTreeDeltaType.ANNOTATE:
798
+ case MergeTreeDeltaType.ANNOTATE: {
787
799
  assert(
788
800
  segment.propertyManager?.hasPendingProperties(resetOp.props) === true,
789
801
  0x036 /* "Segment has no pending properties" */,
@@ -806,17 +818,20 @@ export class Client extends TypedEventEmitter<IClientEvents> {
806
818
  );
807
819
  }
808
820
  break;
821
+ }
809
822
 
810
- case MergeTreeDeltaType.INSERT:
823
+ case MergeTreeDeltaType.INSERT: {
811
824
  assert(
812
825
  segment.seq === UnassignedSequenceNumber,
813
826
  0x037 /* "Segment already has assigned sequence number" */,
814
827
  );
815
828
  let segInsertOp = segment;
829
+ // The suppression is needed because the segment needs to have a type of any.
830
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
816
831
  if (typeof resetOp.seg === "object" && resetOp.seg.props !== undefined) {
817
832
  segInsertOp = segment.clone();
818
- // eslint-disable-next-line import/no-deprecated
819
833
  segInsertOp.properties = createMap();
834
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
820
835
  segInsertOp.addProperties(resetOp.seg.props);
821
836
  }
822
837
  if (segment.movedSeq !== UnassignedSequenceNumber) {
@@ -824,8 +839,9 @@ export class Client extends TypedEventEmitter<IClientEvents> {
824
839
  }
825
840
  newOp = createInsertSegmentOp(segmentPosition, segInsertOp);
826
841
  break;
842
+ }
827
843
 
828
- case MergeTreeDeltaType.REMOVE:
844
+ case MergeTreeDeltaType.REMOVE: {
829
845
  if (
830
846
  segment.localRemovedSeq !== undefined &&
831
847
  segment.removedSeq === UnassignedSequenceNumber &&
@@ -839,7 +855,8 @@ export class Client extends TypedEventEmitter<IClientEvents> {
839
855
  );
840
856
  }
841
857
  break;
842
- case MergeTreeDeltaType.OBLITERATE:
858
+ }
859
+ case MergeTreeDeltaType.OBLITERATE: {
843
860
  if (
844
861
  segment.localMovedSeq !== undefined &&
845
862
  segment.movedSeq === UnassignedSequenceNumber &&
@@ -853,8 +870,10 @@ export class Client extends TypedEventEmitter<IClientEvents> {
853
870
  );
854
871
  }
855
872
  break;
856
- default:
873
+ }
874
+ default: {
857
875
  throw new Error(`Invalid op type`);
876
+ }
858
877
  }
859
878
 
860
879
  if (newOp && resetOp.type === MergeTreeDeltaType.OBLITERATE) {
@@ -892,23 +911,27 @@ export class Client extends TypedEventEmitter<IClientEvents> {
892
911
  return opList;
893
912
  }
894
913
 
895
- private applyRemoteOp(opArgs: IMergeTreeDeltaRemoteOpArgs) {
914
+ private applyRemoteOp(opArgs: IMergeTreeDeltaRemoteOpArgs): void {
896
915
  const op = opArgs.op;
897
916
  const msg = opArgs.sequencedMessage;
898
917
  this.getOrAddShortClientIdFromMessage(msg);
899
918
  switch (op.type) {
900
- case MergeTreeDeltaType.INSERT:
919
+ case MergeTreeDeltaType.INSERT: {
901
920
  this.applyInsertOp(opArgs);
902
921
  break;
903
- case MergeTreeDeltaType.REMOVE:
922
+ }
923
+ case MergeTreeDeltaType.REMOVE: {
904
924
  this.applyRemoveRangeOp(opArgs);
905
925
  break;
906
- case MergeTreeDeltaType.ANNOTATE:
926
+ }
927
+ case MergeTreeDeltaType.ANNOTATE: {
907
928
  this.applyAnnotateRangeOp(opArgs);
908
929
  break;
909
- case MergeTreeDeltaType.OBLITERATE:
930
+ }
931
+ case MergeTreeDeltaType.OBLITERATE: {
910
932
  this.applyObliterateRangeOp(opArgs);
911
933
  break;
934
+ }
912
935
  case MergeTreeDeltaType.GROUP: {
913
936
  for (const memberOp of op.ops) {
914
937
  this.applyRemoteOp({
@@ -919,34 +942,41 @@ export class Client extends TypedEventEmitter<IClientEvents> {
919
942
  }
920
943
  break;
921
944
  }
922
- default:
945
+ default: {
923
946
  break;
947
+ }
924
948
  }
925
949
  }
926
950
 
927
951
  public applyStashedOp(op: IMergeTreeOp): void {
928
952
  switch (op.type) {
929
- case MergeTreeDeltaType.INSERT:
953
+ case MergeTreeDeltaType.INSERT: {
930
954
  this.applyInsertOp({ op });
931
955
  break;
932
- case MergeTreeDeltaType.REMOVE:
956
+ }
957
+ case MergeTreeDeltaType.REMOVE: {
933
958
  this.applyRemoveRangeOp({ op });
934
959
  break;
935
- case MergeTreeDeltaType.ANNOTATE:
960
+ }
961
+ case MergeTreeDeltaType.ANNOTATE: {
936
962
  this.applyAnnotateRangeOp({ op });
937
963
  break;
938
- case MergeTreeDeltaType.OBLITERATE:
964
+ }
965
+ case MergeTreeDeltaType.OBLITERATE: {
939
966
  this.applyObliterateRangeOp({ op });
940
967
  break;
941
- case MergeTreeDeltaType.GROUP:
968
+ }
969
+ case MergeTreeDeltaType.GROUP: {
942
970
  op.ops.map((o) => this.applyStashedOp(o));
943
971
  break;
944
- default:
972
+ }
973
+ default: {
945
974
  unreachableCase(op, "unrecognized op type");
975
+ }
946
976
  }
947
977
  }
948
978
 
949
- public applyMsg(msg: ISequencedDocumentMessage, local: boolean = false) {
979
+ public applyMsg(msg: ISequencedDocumentMessage, local: boolean = false): void {
950
980
  // Ensure client ID is registered
951
981
  this.getOrAddShortClientIdFromMessage(msg);
952
982
  // Apply if an operation message
@@ -969,7 +999,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
969
999
  this.updateSeqNumbers(min, msg.sequenceNumber);
970
1000
  }
971
1001
 
972
- private updateSeqNumbers(min: number, seq: number) {
1002
+ private updateSeqNumbers(min: number, seq: number): void {
973
1003
  const collabWindow = this.getCollabWindow();
974
1004
  // Equal is fine here due to SharedSegmentSequence<>.snapshotContent() potentially updating with same #
975
1005
  assert(
@@ -1027,7 +1057,8 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1027
1057
  // eslint-disable-next-line import/no-deprecated
1028
1058
  return createGroupOp();
1029
1059
  }
1030
- firstGroup = segmentGroup[0];
1060
+ // TODO Non null asserting, why is this not null?
1061
+ firstGroup = segmentGroup[0]!;
1031
1062
  } else {
1032
1063
  firstGroup = segmentGroup;
1033
1064
  }
@@ -1057,7 +1088,8 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1057
1088
  );
1058
1089
 
1059
1090
  for (let i = 0; i < resetOp.ops.length; i++) {
1060
- opList.push(...this.resetPendingDeltaToOps(resetOp.ops[i], segmentGroup[i]));
1091
+ // Non null asserting because resetOp and segmentGroup are arrays of same length and loop is length of resetOp
1092
+ opList.push(...this.resetPendingDeltaToOps(resetOp.ops[i]!, segmentGroup[i]!));
1061
1093
  }
1062
1094
  } else {
1063
1095
  // A group op containing a single op will pass a direct reference to 'segmentGroup'
@@ -1066,11 +1098,12 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1066
1098
  resetOp.ops.length === 1,
1067
1099
  0x03b /* "Number of ops in 'resetOp' must match the number of segment groups provided." */,
1068
1100
  );
1069
- opList.push(...this.resetPendingDeltaToOps(resetOp.ops[0], segmentGroup));
1101
+ // Non null asserting because of length assert above
1102
+ opList.push(...this.resetPendingDeltaToOps(resetOp.ops[0]!, segmentGroup));
1070
1103
  }
1071
1104
  } else {
1072
1105
  assert(
1073
- (resetOp.type as any) !== MergeTreeDeltaType.GROUP,
1106
+ (resetOp.type as unknown) !== MergeTreeDeltaType.GROUP,
1074
1107
  0x03c /* "Reset op has 'group' delta type!" */,
1075
1108
  );
1076
1109
  assert(
@@ -1079,8 +1112,9 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1079
1112
  );
1080
1113
  opList.push(...this.resetPendingDeltaToOps(resetOp, segmentGroup));
1081
1114
  }
1115
+ // TODO why are we non null asserting here?
1082
1116
  // eslint-disable-next-line import/no-deprecated
1083
- return opList.length === 1 ? opList[0] : createGroupOp(...opList);
1117
+ return opList.length === 1 ? opList[0]! : createGroupOp(...opList);
1084
1118
  }
1085
1119
 
1086
1120
  // eslint-disable-next-line import/no-deprecated
@@ -1139,38 +1173,43 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1139
1173
  return loader.initialize(storage);
1140
1174
  }
1141
1175
 
1142
- private getLocalSequenceNumber() {
1176
+ private getLocalSequenceNumber(): number {
1143
1177
  const segWindow = this.getCollabWindow();
1144
1178
  return segWindow.collaborating ? UnassignedSequenceNumber : UniversalSequenceNumber;
1145
1179
  }
1146
1180
 
1147
1181
  // eslint-disable-next-line import/no-deprecated
1148
- localTransaction(groupOp: IMergeTreeGroupMsg) {
1182
+ localTransaction(groupOp: IMergeTreeGroupMsg): void {
1149
1183
  for (const op of groupOp.ops) {
1150
1184
  const opArgs: IMergeTreeDeltaOpArgs = {
1151
1185
  op,
1152
1186
  groupOp,
1153
1187
  };
1154
1188
  switch (op.type) {
1155
- case MergeTreeDeltaType.INSERT:
1189
+ case MergeTreeDeltaType.INSERT: {
1156
1190
  this.applyInsertOp(opArgs);
1157
1191
  break;
1158
- case MergeTreeDeltaType.ANNOTATE:
1192
+ }
1193
+ case MergeTreeDeltaType.ANNOTATE: {
1159
1194
  this.applyAnnotateRangeOp(opArgs);
1160
1195
  break;
1161
- case MergeTreeDeltaType.REMOVE:
1196
+ }
1197
+ case MergeTreeDeltaType.REMOVE: {
1162
1198
  this.applyRemoveRangeOp(opArgs);
1163
1199
  break;
1164
- case MergeTreeDeltaType.OBLITERATE:
1200
+ }
1201
+ case MergeTreeDeltaType.OBLITERATE: {
1165
1202
  this.applyObliterateRangeOp(opArgs);
1166
1203
  break;
1167
- default:
1204
+ }
1205
+ default: {
1168
1206
  break;
1207
+ }
1169
1208
  }
1170
1209
  }
1171
1210
  }
1172
1211
 
1173
- updateMinSeq(minSeq: number) {
1212
+ updateMinSeq(minSeq: number): void {
1174
1213
  this._mergeTree.setMinSeq(minSeq);
1175
1214
  }
1176
1215
 
@@ -1178,7 +1217,10 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1178
1217
  pos: number,
1179
1218
  sequenceArgs?: Pick<ISequencedDocumentMessage, "referenceSequenceNumber" | "clientId">,
1180
1219
  localSeq?: number,
1181
- ) {
1220
+ ): {
1221
+ segment: T | undefined;
1222
+ offset: number | undefined;
1223
+ } {
1182
1224
  const { referenceSequenceNumber, clientId } =
1183
1225
  this.getClientSequenceArgsForMessage(sequenceArgs);
1184
1226
  return this._mergeTree.getContainingSegment<T>(
@@ -1189,7 +1231,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1189
1231
  );
1190
1232
  }
1191
1233
 
1192
- getPropertiesAtPosition(pos: number) {
1234
+ getPropertiesAtPosition(pos: number): PropertySet | undefined {
1193
1235
  let propertiesAtPosition: PropertySet | undefined;
1194
1236
  const segoff = this.getContainingSegment(pos);
1195
1237
  const seg = segoff.segment;
@@ -1199,7 +1241,10 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1199
1241
  return propertiesAtPosition;
1200
1242
  }
1201
1243
 
1202
- getRangeExtentsOfPosition(pos: number) {
1244
+ getRangeExtentsOfPosition(pos: number): {
1245
+ posStart: number | undefined;
1246
+ posAfterEnd: number | undefined;
1247
+ } {
1203
1248
  let posStart: number | undefined;
1204
1249
  let posAfterEnd: number | undefined;
1205
1250
 
@@ -1212,19 +1257,23 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1212
1257
  return { posStart, posAfterEnd };
1213
1258
  }
1214
1259
 
1215
- getCurrentSeq() {
1260
+ getCurrentSeq(): number {
1216
1261
  return this.getCollabWindow().currentSeq;
1217
1262
  }
1218
1263
 
1219
- getClientId() {
1264
+ getClientId(): number {
1220
1265
  return this.getCollabWindow().clientId;
1221
1266
  }
1222
1267
 
1223
- getLength() {
1268
+ getLength(): number {
1224
1269
  return this._mergeTree.length ?? 0;
1225
1270
  }
1226
1271
 
1227
- startOrUpdateCollaboration(longClientId: string | undefined, minSeq = 0, currentSeq = 0) {
1272
+ startOrUpdateCollaboration(
1273
+ longClientId: string | undefined,
1274
+ minSeq = 0,
1275
+ currentSeq = 0,
1276
+ ): void {
1228
1277
  // we should always have a client id if we are collaborating
1229
1278
  // if the client id is undefined we are likely bound to a detached
1230
1279
  // container, so we should keep going in local mode. once
@@ -1258,7 +1307,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1258
1307
  * @param markerLabel - Label of the marker to search for
1259
1308
  * @param forwards - Whether the desired marker comes before (false) or after (true) `startPos`
1260
1309
  */
1261
- searchForMarker(startPos: number, markerLabel: string, forwards = true) {
1310
+ searchForMarker(startPos: number, markerLabel: string, forwards = true): Marker | undefined {
1262
1311
  const clientId = this.getClientId();
1263
1312
  return this._mergeTree.searchForMarker(startPos, clientId, markerLabel, forwards);
1264
1313
  }
@@ -33,11 +33,13 @@ class HeadNode<T> {
33
33
  public get prev(): DataNode<T> | undefined {
34
34
  return this._prev === this.headNode ? undefined : (this._prev as DataNode<T>);
35
35
  }
36
- public get list() {
36
+ public get list(): DoublyLinkedList<T> | undefined {
37
37
  return this.headNode._list;
38
38
  }
39
39
  }
40
40
 
41
+ // The any is needed for use in the remove function, where the nodes are defined with a generic type.
42
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
43
  const DeadHead = new HeadNode<any>(undefined);
42
44
 
43
45
  class DataNode<T> extends HeadNode<T> implements ListNode<T> {
@@ -54,7 +56,7 @@ function insertAfter<T>(node: DataNode<T> | HeadNode<T>, items: T[]): ListNodeRa
54
56
  let previousNode = node;
55
57
  const oldNext = previousNode._next;
56
58
  let newRange: ListNodeRange<T> | undefined;
57
- items.forEach((n) => {
59
+ for (const n of items) {
58
60
  const newNode = new DataNode<T>(node.headNode, n);
59
61
  if (newRange === undefined) {
60
62
  newRange = { first: newNode, last: newNode };
@@ -64,7 +66,7 @@ function insertAfter<T>(node: DataNode<T> | HeadNode<T>, items: T[]): ListNodeRa
64
66
  newNode._prev = previousNode;
65
67
  previousNode._next = newNode;
66
68
  previousNode = newNode;
67
- });
69
+ }
68
70
  oldNext._prev = previousNode;
69
71
  previousNode._next = oldNext;
70
72
  // explicitly prevent newRange from being undefined without casting,
@@ -191,6 +193,7 @@ export class DoublyLinkedList<T>
191
193
  if (this._includes(node)) {
192
194
  node._prev._next = node._next;
193
195
  node._next._prev = node._prev;
196
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
194
197
  node.headNode = node._next = node._prev = DeadHead;
195
198
  this._len--;
196
199
  return node;
@@ -222,10 +225,10 @@ export class DoublyLinkedList<T>
222
225
 
223
226
  private _len: number = 0;
224
227
  private readonly headNode: HeadNode<T> | DataNode<T> = new HeadNode(this);
225
- public get length() {
228
+ public get length(): number {
226
229
  return this._len;
227
230
  }
228
- public get empty() {
231
+ public get empty(): boolean {
229
232
  return this._len === 0;
230
233
  }
231
234
  public get first(): ListNode<T> | undefined {
@@ -242,7 +245,7 @@ export function walkList<T>(
242
245
  visitor: (node: ListNode<T>) => boolean | void,
243
246
  start?: ListNode<T>,
244
247
  forward: boolean = true,
245
- ) {
248
+ ): boolean {
246
249
  let current: ListNode<T> | undefined;
247
250
  if (start) {
248
251
  if (!list.includes(start)) {