@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/properties.ts CHANGED
@@ -23,12 +23,18 @@ export interface MapLike<T> {
23
23
  * @legacy
24
24
  * @alpha
25
25
  */
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
27
  export type PropertySet = MapLike<any>;
27
28
 
28
29
  /**
30
+ * Compares two PropertySets for equality.
31
+ *
29
32
  * @internal
30
33
  */
31
- export function matchProperties(a: PropertySet | undefined, b: PropertySet | undefined) {
34
+ export function matchProperties(
35
+ a: PropertySet | undefined,
36
+ b: PropertySet | undefined,
37
+ ): boolean {
32
38
  if (!a && !b) {
33
39
  return true;
34
40
  }
@@ -44,6 +50,7 @@ export function matchProperties(a: PropertySet | undefined, b: PropertySet | und
44
50
  if (b?.[key] === undefined) {
45
51
  return false;
46
52
  } else if (typeof b[key] === "object") {
53
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
47
54
  if (!matchProperties(a?.[key], b[key])) {
48
55
  return false;
49
56
  }
@@ -56,20 +63,23 @@ export function matchProperties(a: PropertySet | undefined, b: PropertySet | und
56
63
  }
57
64
 
58
65
  /**
59
- * @deprecated This functionality was not intended for public export and will
60
- * be removed in a future release.
66
+ * Adds properties from one PropertySet to another.
67
+ *
61
68
  * @internal
62
69
  */
63
- export function extend<T>(base: MapLike<T>, extension: MapLike<T> | undefined) {
70
+ export function extend<T>(base: MapLike<T>, extension: MapLike<T> | undefined): MapLike<T> {
64
71
  if (extension !== undefined) {
65
72
  // eslint-disable-next-line guard-for-in, no-restricted-syntax
66
73
  for (const key in extension) {
67
74
  const v = extension[key];
75
+ // TODO Non null asserting, why is this not null?
68
76
  if (v === null) {
69
77
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
70
78
  delete base[key];
71
79
  } else {
72
- base[key] = v;
80
+ // Non null aseerting here since we are checking if v is not null
81
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
82
+ base[key] = v!;
73
83
  }
74
84
  }
75
85
  }
@@ -77,11 +87,11 @@ export function extend<T>(base: MapLike<T>, extension: MapLike<T> | undefined) {
77
87
  }
78
88
 
79
89
  /**
80
- * @deprecated This functionality was not intended for public export and will
81
- * be removed in a future release.
90
+ * Clones properties in a given PropertySet into a new PropertySet.
91
+ *
82
92
  * @internal
83
93
  */
84
- export function clone<T>(extension: MapLike<T> | undefined) {
94
+ export function clone<T>(extension: MapLike<T> | undefined): MapLike<T> | undefined {
85
95
  if (extension === undefined) {
86
96
  return undefined;
87
97
  }
@@ -90,37 +100,46 @@ export function clone<T>(extension: MapLike<T> | undefined) {
90
100
  for (const key in extension) {
91
101
  const v = extension[key];
92
102
  if (v !== null) {
93
- cloneMap[key] = v;
103
+ // If `v` is undefined, undefined must have been assignable to `T`.
104
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
105
+ cloneMap[key] = v!;
94
106
  }
95
107
  }
96
108
  return cloneMap;
97
109
  }
98
110
 
99
111
  /**
100
- * @deprecated This functionality was not intended for public export and will
101
- * be removed in a future release.
112
+ * Add properties in one PropertySet to another PropertySet. If the PropertySet we are adding
113
+ * to does not exist, create one.
114
+ *
102
115
  * @internal
103
116
  */
104
117
  export function addProperties(
105
118
  oldProps: PropertySet | undefined,
106
119
  newProps: PropertySet,
107
120
  ): PropertySet {
121
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
122
  const _oldProps = oldProps ?? createMap<any>();
109
123
  extend(_oldProps, newProps);
110
124
  return { ..._oldProps };
111
125
  }
112
126
 
113
127
  /**
114
- * @deprecated This functionality was not intended for public export and will
115
- * be removed in a future release.
128
+ * Replace values of undefined in one PropertySet with values for the same key from another PropertySet.
129
+ *
116
130
  * @internal
117
131
  */
118
- export function extendIfUndefined<T>(base: MapLike<T>, extension: MapLike<T> | undefined) {
132
+ export function extendIfUndefined<T>(
133
+ base: MapLike<T>,
134
+ extension: MapLike<T> | undefined,
135
+ ): MapLike<T> {
119
136
  if (extension !== undefined) {
120
137
  // eslint-disable-next-line no-restricted-syntax
121
138
  for (const key in extension) {
122
139
  if (base[key] === undefined) {
123
- base[key] = extension[key];
140
+ // TODO Non null asserting, why is this not null?
141
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
142
+ base[key] = extension[key]!;
124
143
  }
125
144
  }
126
145
  }
@@ -128,11 +147,10 @@ export function extendIfUndefined<T>(base: MapLike<T>, extension: MapLike<T> | u
128
147
  }
129
148
 
130
149
  /**
131
- * @deprecated This functionality was not intended for public export and will
132
- * be removed in a future release.
150
+ * Create a MapLike with good performance.
151
+ *
133
152
  * @internal
134
153
  */
135
- // Create a MapLike with good performance.
136
154
  export function createMap<T>(): MapLike<T> {
137
155
  return Object.create(null) as MapLike<T>;
138
156
  }
@@ -18,6 +18,7 @@ export const reservedTileLabelsKey = "referenceTileLabels";
18
18
  export const reservedRangeLabelsKey = "referenceRangeLabels";
19
19
 
20
20
  /**
21
+ * Determines if the given reference type includes the given flags.
21
22
  * @internal
22
23
  */
23
24
  export function refTypeIncludesFlag(
@@ -30,6 +31,7 @@ export function refTypeIncludesFlag(
30
31
  }
31
32
 
32
33
  /**
34
+ * Gets the tile labels stored in the given reference position.
33
35
  * @legacy
34
36
  * @alpha
35
37
  */
@@ -39,6 +41,7 @@ export const refGetTileLabels = (refPos: ReferencePosition): string[] | undefine
39
41
  : undefined;
40
42
 
41
43
  /**
44
+ * Determines if a reference position has the given tile label.
42
45
  * @legacy
43
46
  * @alpha
44
47
  */
@@ -48,6 +51,7 @@ export function refHasTileLabel(refPos: ReferencePosition, label: string): boole
48
51
  }
49
52
 
50
53
  /**
54
+ * Determines if a reference position has any tile labels.
51
55
  * @internal
52
56
  */
53
57
  export function refHasTileLabels(refPos: ReferencePosition): boolean {
@@ -108,6 +112,7 @@ export interface ReferencePosition {
108
112
  export const DetachedReferencePosition = -1;
109
113
 
110
114
  /**
115
+ * Finds the minimum reference position.
111
116
  * @internal
112
117
  */
113
118
  export function minReferencePosition<T extends ReferencePosition>(a: T, b: T): T {
@@ -115,6 +120,7 @@ export function minReferencePosition<T extends ReferencePosition>(a: T, b: T): T
115
120
  }
116
121
 
117
122
  /**
123
+ * Finds the maximum reference position.
118
124
  * @internal
119
125
  */
120
126
  export function maxReferencePosition<T extends ReferencePosition>(a: T, b: T): T {
@@ -122,6 +128,7 @@ export function maxReferencePosition<T extends ReferencePosition>(a: T, b: T): T
122
128
  }
123
129
 
124
130
  /**
131
+ * Compares two reference positions.
125
132
  * @internal
126
133
  */
127
134
  export function compareReferencePositions(a: ReferencePosition, b: ReferencePosition): number {
@@ -114,15 +114,17 @@ function findMergeTreeWithRevert(trackable: Trackable): MergeTreeWithRevert {
114
114
  function appendLocalInsertToRevertibles(
115
115
  deltaArgs: IMergeTreeDeltaCallbackArgs,
116
116
  revertibles: MergeTreeDeltaRevertible[],
117
- ) {
117
+ ): MergeTreeDeltaRevertible[] {
118
118
  if (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.INSERT) {
119
119
  revertibles.push({
120
120
  operation: MergeTreeDeltaType.INSERT,
121
121
  trackingGroup: new UnorderedTrackingGroup(),
122
122
  });
123
123
  }
124
- const last = revertibles[revertibles.length - 1];
125
- deltaArgs.deltaSegments.forEach((t) => last.trackingGroup.link(t.segment));
124
+ // TODO Non null asserting, why is this not null?
125
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
126
+ const last = revertibles[revertibles.length - 1]!;
127
+ for (const t of deltaArgs.deltaSegments) last.trackingGroup.link(t.segment);
126
128
 
127
129
  return revertibles;
128
130
  }
@@ -130,20 +132,24 @@ function appendLocalInsertToRevertibles(
130
132
  function appendLocalRemoveToRevertibles(
131
133
  deltaArgs: IMergeTreeDeltaCallbackArgs,
132
134
  revertibles: MergeTreeDeltaRevertible[],
133
- ) {
135
+ ): MergeTreeDeltaRevertible[] {
134
136
  if (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.REMOVE) {
135
137
  revertibles.push({
136
138
  operation: MergeTreeDeltaType.REMOVE,
137
139
  trackingGroup: new UnorderedTrackingGroup(),
138
140
  });
139
141
  }
140
- const last = revertibles[revertibles.length - 1];
142
+ // TODO Non null asserting, why is this not null?
143
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
144
+ const last = revertibles[revertibles.length - 1]!;
141
145
 
142
- const mergeTreeWithRevert = findMergeTreeWithRevert(deltaArgs.deltaSegments[0].segment);
146
+ // TODO Non null asserting, why is this not null?
147
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
148
+ const mergeTreeWithRevert = findMergeTreeWithRevert(deltaArgs.deltaSegments[0]!.segment);
143
149
 
144
- deltaArgs.deltaSegments.forEach((t) => {
150
+ for (const t of deltaArgs.deltaSegments) {
145
151
  const props: RemoveSegmentRefProperties = {
146
- segSpec: t.segment.toJSONObject(),
152
+ segSpec: t.segment.toJSONObject() as IJSONSegment,
147
153
  referenceSpace: "mergeTreeDeltaRevertible",
148
154
  };
149
155
  const ref = mergeTreeWithRevert.createLocalReferencePosition(
@@ -153,22 +159,22 @@ function appendLocalRemoveToRevertibles(
153
159
  props,
154
160
  );
155
161
  ref.callbacks = mergeTreeWithRevert.__mergeTreeRevertible.refCallbacks;
156
- t.segment.trackingCollection.trackingGroups.forEach((tg) => {
162
+ for (const tg of t.segment.trackingCollection.trackingGroups) {
157
163
  tg.link(ref);
158
164
  tg.unlink(t.segment);
159
- });
165
+ }
160
166
 
161
167
  last.trackingGroup.link(ref);
162
- });
168
+ }
163
169
  return revertibles;
164
170
  }
165
171
 
166
172
  function appendLocalAnnotateToRevertibles(
167
173
  deltaArgs: IMergeTreeDeltaCallbackArgs,
168
174
  revertibles: MergeTreeDeltaRevertible[],
169
- ) {
175
+ ): MergeTreeDeltaRevertible[] {
170
176
  let last = revertibles[revertibles.length - 1];
171
- deltaArgs.deltaSegments.forEach((ds) => {
177
+ for (const ds of deltaArgs.deltaSegments) {
172
178
  const propertyDeltas = ds.propertyDeltas;
173
179
  if (propertyDeltas) {
174
180
  if (
@@ -186,64 +192,76 @@ function appendLocalAnnotateToRevertibles(
186
192
  revertibles.push(last);
187
193
  }
188
194
  }
189
- });
195
+ }
190
196
  return revertibles;
191
197
  }
192
198
 
193
199
  /**
200
+ * Appends a merge tree delta to the list of revertibles.
201
+ *
194
202
  * @legacy
195
203
  * @alpha
196
204
  */
197
205
  export function appendToMergeTreeDeltaRevertibles(
198
206
  deltaArgs: IMergeTreeDeltaCallbackArgs,
199
207
  revertibles: MergeTreeDeltaRevertible[],
200
- ) {
208
+ ): void {
201
209
  if (deltaArgs.deltaSegments.length === 0) {
202
210
  return;
203
211
  }
204
212
  switch (deltaArgs.operation) {
205
- case MergeTreeDeltaType.INSERT:
213
+ case MergeTreeDeltaType.INSERT: {
206
214
  appendLocalInsertToRevertibles(deltaArgs, revertibles);
207
215
  break;
216
+ }
208
217
 
209
- case MergeTreeDeltaType.REMOVE:
218
+ case MergeTreeDeltaType.REMOVE: {
210
219
  appendLocalRemoveToRevertibles(deltaArgs, revertibles);
211
220
  break;
221
+ }
212
222
 
213
- case MergeTreeDeltaType.ANNOTATE:
223
+ case MergeTreeDeltaType.ANNOTATE: {
214
224
  appendLocalAnnotateToRevertibles(deltaArgs, revertibles);
215
225
  break;
226
+ }
216
227
 
217
- default:
228
+ default: {
218
229
  throw new UsageError("Unsupported event delta type", {
219
230
  operation: deltaArgs.operation,
220
231
  });
232
+ }
221
233
  }
222
234
  }
223
235
 
224
236
  /**
237
+ * Removes all revertibles from the list of revertibles.
238
+ *
225
239
  * @legacy
226
240
  * @alpha
227
241
  */
228
- export function discardMergeTreeDeltaRevertible(revertibles: MergeTreeDeltaRevertible[]) {
229
- revertibles.forEach((r) => {
230
- r.trackingGroup.tracked.forEach((t) => {
242
+ export function discardMergeTreeDeltaRevertible(
243
+ revertibles: MergeTreeDeltaRevertible[],
244
+ ): void {
245
+ for (const r of revertibles) {
246
+ for (const t of r.trackingGroup.tracked) {
231
247
  t.trackingCollection.unlink(r.trackingGroup);
232
248
  // remove untracked local references
233
249
  if (t.trackingCollection.empty && !t.isLeaf()) {
234
250
  t.getSegment()?.localRefs?.removeLocalRef(t);
235
251
  }
236
- });
237
- });
252
+ }
253
+ }
238
254
  }
239
255
 
240
256
  function revertLocalInsert(
241
257
  driver: MergeTreeRevertibleDriver,
242
258
  mergeTreeWithRevert: MergeTreeWithRevert,
243
259
  revertible: TypedRevertible<typeof MergeTreeDeltaType.INSERT>,
244
- ) {
260
+ ): void {
245
261
  while (revertible.trackingGroup.size > 0) {
246
- const tracked = revertible.trackingGroup.tracked[0];
262
+ // TODO Non null asserting, why is this not null?
263
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
264
+ const tracked = revertible.trackingGroup.tracked[0]!;
247
265
  assert(
248
266
  tracked.trackingCollection.unlink(revertible.trackingGroup),
249
267
  0x3f1 /* tracking group removed */,
@@ -260,9 +278,11 @@ function revertLocalRemove(
260
278
  driver: MergeTreeRevertibleDriver,
261
279
  mergeTreeWithRevert: MergeTreeWithRevert,
262
280
  revertible: TypedRevertible<typeof MergeTreeDeltaType.REMOVE>,
263
- ) {
281
+ ): void {
264
282
  while (revertible.trackingGroup.size > 0) {
265
- const tracked = revertible.trackingGroup.tracked[0];
283
+ // TODO Non null asserting, why is this not null?
284
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
285
+ const tracked = revertible.trackingGroup.tracked[0]!;
266
286
 
267
287
  assert(
268
288
  tracked.trackingCollection.unlink(revertible.trackingGroup),
@@ -295,7 +315,7 @@ function revertLocalRemove(
295
315
  ).segment;
296
316
  assert(insertSegment !== undefined, 0x3f5 /* insert segment must exist at position */);
297
317
 
298
- const localSlideFilter = (lref: LocalReferencePosition) =>
318
+ const localSlideFilter = (lref: LocalReferencePosition): boolean =>
299
319
  (lref.properties as Partial<RemoveSegmentRefProperties>)?.referenceSpace ===
300
320
  "mergeTreeDeltaRevertible";
301
321
 
@@ -303,7 +323,7 @@ function revertLocalRemove(
303
323
  Record<"before" | "after", DoublyLinkedList<LocalReferencePosition>>
304
324
  > = {};
305
325
  const forward = insertSegment.ordinal < refSeg.ordinal;
306
- const refHandler = (lref: LocalReferencePosition) => {
326
+ const refHandler = (lref: LocalReferencePosition): false | undefined => {
307
327
  // once we reach it keep the original reference where it is
308
328
  // we'll move tracking groups, and remove it as a last step.
309
329
  if (tracked === lref) {
@@ -352,10 +372,10 @@ function revertLocalRemove(
352
372
  }
353
373
  }
354
374
 
355
- tracked.trackingCollection.trackingGroups.forEach((tg) => {
375
+ for (const tg of tracked.trackingCollection.trackingGroups) {
356
376
  tg.link(insertSegment);
357
377
  tg.unlink(tracked);
358
- });
378
+ }
359
379
  tracked.getSegment()?.localRefs?.removeLocalRef(tracked);
360
380
  }
361
381
  }
@@ -364,9 +384,11 @@ function revertLocalAnnotate(
364
384
  driver: MergeTreeRevertibleDriver,
365
385
  mergeTreeWithRevert: MergeTreeWithRevert,
366
386
  revertible: TypedRevertible<typeof MergeTreeDeltaType.ANNOTATE>,
367
- ) {
387
+ ): void {
368
388
  while (revertible.trackingGroup.size > 0) {
369
- const tracked = revertible.trackingGroup.tracked[0];
389
+ // TODO Non null asserting, why is this not null?
390
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
391
+ const tracked = revertible.trackingGroup.tracked[0]!;
370
392
  const unlinked = tracked.trackingCollection.unlink(revertible.trackingGroup);
371
393
  assert(unlinked && tracked.isLeaf(), 0x3f7 /* annotates must track segments */);
372
394
  if (toRemovalInfo(tracked) === undefined) {
@@ -376,7 +398,7 @@ function revertLocalAnnotate(
376
398
  }
377
399
  }
378
400
 
379
- function getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegment) {
401
+ function getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegment): number {
380
402
  return mergeTreeWithRevert.getPosition(
381
403
  segment,
382
404
  mergeTreeWithRevert.collabWindow.currentSeq,
@@ -385,13 +407,15 @@ function getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegment
385
407
  }
386
408
 
387
409
  /**
410
+ * Reverts all operations in the list of revertibles.
411
+ *
388
412
  * @legacy
389
413
  * @alpha
390
414
  */
391
415
  export function revertMergeTreeDeltaRevertibles(
392
416
  driver: MergeTreeRevertibleDriver,
393
417
  revertibles: MergeTreeDeltaRevertible[],
394
- ) {
418
+ ): void {
395
419
  let mergeTreeWithRevert: MergeTreeWithRevert | undefined;
396
420
 
397
421
  while (revertibles.length > 0) {
@@ -399,19 +423,25 @@ export function revertMergeTreeDeltaRevertibles(
399
423
  const r = revertibles.pop()!;
400
424
  const operation = r.operation;
401
425
  if (r.trackingGroup.size > 0) {
402
- mergeTreeWithRevert ??= findMergeTreeWithRevert(r.trackingGroup.tracked[0]);
426
+ // TODO Non null asserting, why is this not null?
427
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
428
+ mergeTreeWithRevert ??= findMergeTreeWithRevert(r.trackingGroup.tracked[0]!);
403
429
  switch (operation) {
404
- case MergeTreeDeltaType.INSERT:
430
+ case MergeTreeDeltaType.INSERT: {
405
431
  revertLocalInsert(driver, mergeTreeWithRevert, r);
406
432
  break;
407
- case MergeTreeDeltaType.REMOVE:
433
+ }
434
+ case MergeTreeDeltaType.REMOVE: {
408
435
  revertLocalRemove(driver, mergeTreeWithRevert, r);
409
436
  break;
410
- case MergeTreeDeltaType.ANNOTATE:
437
+ }
438
+ case MergeTreeDeltaType.ANNOTATE: {
411
439
  revertLocalAnnotate(driver, mergeTreeWithRevert, r);
412
440
  break;
413
- default:
441
+ }
442
+ default: {
414
443
  unreachableCase(operation);
444
+ }
415
445
  }
416
446
  }
417
447
  }
@@ -20,16 +20,16 @@ export class SegmentGroupCollection {
20
20
  this.segmentGroups = new DoublyLinkedList<SegmentGroup>();
21
21
  }
22
22
 
23
- public get size() {
23
+ public get size(): number {
24
24
  return this.segmentGroups.length;
25
25
  }
26
26
 
27
- public get empty() {
27
+ public get empty(): boolean {
28
28
  return this.segmentGroups.empty;
29
29
  }
30
30
 
31
31
  // eslint-disable-next-line import/no-deprecated
32
- public enqueue(segmentGroup: SegmentGroup) {
32
+ public enqueue(segmentGroup: SegmentGroup): void {
33
33
  this.segmentGroups.push(segmentGroup);
34
34
  segmentGroup.segments.push(this.segment);
35
35
  }
@@ -54,20 +54,22 @@ export class SegmentGroupCollection {
54
54
  return this.segmentGroups.pop ? this.segmentGroups.pop()?.data : undefined;
55
55
  }
56
56
 
57
- public copyTo(segment: ISegment) {
57
+ public copyTo(segment: ISegment): void {
58
58
  walkList(this.segmentGroups, (sg) =>
59
59
  segment.segmentGroups.enqueueOnCopy(sg.data, this.segment),
60
60
  );
61
61
  }
62
62
 
63
63
  // eslint-disable-next-line import/no-deprecated
64
- private enqueueOnCopy(segmentGroup: SegmentGroup, sourceSegment: ISegment) {
64
+ private enqueueOnCopy(segmentGroup: SegmentGroup, sourceSegment: ISegment): void {
65
65
  this.enqueue(segmentGroup);
66
66
  if (segmentGroup.previousProps) {
67
67
  // duplicate the previousProps for this segment
68
68
  const index = segmentGroup.segments.indexOf(sourceSegment);
69
69
  if (index !== -1) {
70
- segmentGroup.previousProps.push(segmentGroup.previousProps[index]);
70
+ // TODO Non null asserting, why is this not null?
71
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
72
+ segmentGroup.previousProps.push(segmentGroup.previousProps[index]!);
71
73
  }
72
74
  }
73
75
  }
@@ -9,7 +9,6 @@ import { assert } from "@fluidframework/core-utils/internal";
9
9
 
10
10
  import { UnassignedSequenceNumber, UniversalSequenceNumber } from "./constants.js";
11
11
  import { IMergeTreeAnnotateMsg } from "./ops.js";
12
- // eslint-disable-next-line import/no-deprecated
13
12
  import { MapLike, PropertySet, createMap } from "./properties.js";
14
13
 
15
14
  /**
@@ -17,10 +16,14 @@ import { MapLike, PropertySet, createMap } from "./properties.js";
17
16
  * @alpha
18
17
  */
19
18
  export enum PropertiesRollback {
20
- /** Not in a rollback */
19
+ /**
20
+ * Not in a rollback
21
+ */
21
22
  None,
22
23
 
23
- /** Rollback */
24
+ /**
25
+ * Rollback
26
+ */
24
27
  Rollback,
25
28
  }
26
29
 
@@ -31,23 +34,22 @@ export enum PropertiesRollback {
31
34
  export class PropertiesManager {
32
35
  private pendingKeyUpdateCount: MapLike<number> | undefined;
33
36
 
34
- public ackPendingProperties(annotateOp: IMergeTreeAnnotateMsg) {
37
+ public ackPendingProperties(annotateOp: IMergeTreeAnnotateMsg): void {
35
38
  this.decrementPendingCounts(annotateOp.props);
36
39
  }
37
40
 
38
- private decrementPendingCounts(props: PropertySet) {
41
+ private decrementPendingCounts(props: PropertySet): void {
39
42
  for (const [key, value] of Object.entries(props)) {
40
- if (value !== undefined) {
41
- if (this.pendingKeyUpdateCount?.[key] !== undefined) {
42
- assert(
43
- this.pendingKeyUpdateCount[key] > 0,
44
- 0x05c /* "Trying to update more annotate props than do exist!" */,
45
- );
46
- this.pendingKeyUpdateCount[key]--;
47
- if (this.pendingKeyUpdateCount?.[key] === 0) {
48
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
49
- delete this.pendingKeyUpdateCount[key];
50
- }
43
+ if (value !== undefined && this.pendingKeyUpdateCount?.[key] !== undefined) {
44
+ assert(
45
+ // TODO Non null asserting, why is this not null?
46
+ this.pendingKeyUpdateCount[key]! > 0,
47
+ 0x05c /* "Trying to update more annotate props than do exist!" */,
48
+ );
49
+ this.pendingKeyUpdateCount[key]--;
50
+ if (this.pendingKeyUpdateCount?.[key] === 0) {
51
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
52
+ delete this.pendingKeyUpdateCount[key];
51
53
  }
52
54
  }
53
55
  }
@@ -60,7 +62,6 @@ export class PropertiesManager {
60
62
  collaborating: boolean = false,
61
63
  rollback: PropertiesRollback = PropertiesRollback.None,
62
64
  ): PropertySet {
63
- // eslint-disable-next-line import/no-deprecated
64
65
  this.pendingKeyUpdateCount ??= createMap<number>();
65
66
 
66
67
  // Clean up counts for rolled back edits before modifying oldProps
@@ -97,13 +98,15 @@ export class PropertiesManager {
97
98
  }
98
99
  }
99
100
 
100
- const previousValue: any = oldProps[key];
101
+ const previousValue: unknown = oldProps[key];
101
102
  // The delta should be null if undefined, as that's how we encode delete
103
+ // eslint-disable-next-line unicorn/no-null
102
104
  deltas[key] = previousValue === undefined ? null : previousValue;
103
105
  if (newValue === null) {
104
106
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
105
107
  delete oldProps[key];
106
108
  } else {
109
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
107
110
  oldProps[key] = newValue;
108
111
  }
109
112
  }
@@ -117,27 +120,28 @@ export class PropertiesManager {
117
120
  newManager: PropertiesManager,
118
121
  ): PropertySet | undefined {
119
122
  if (oldProps) {
120
- // eslint-disable-next-line no-param-reassign, import/no-deprecated
121
- newProps ??= createMap<any>();
123
+ // eslint-disable-next-line no-param-reassign
124
+ newProps ??= createMap<unknown>();
122
125
  if (!newManager) {
123
126
  throw new Error("Must provide new PropertyManager");
124
127
  }
125
128
  for (const key of Object.keys(oldProps)) {
129
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
126
130
  newProps[key] = oldProps[key];
127
131
  }
128
- // eslint-disable-next-line import/no-deprecated
129
132
  newManager.pendingKeyUpdateCount = createMap<number>();
130
133
  for (const key of Object.keys(this.pendingKeyUpdateCount!)) {
131
- newManager.pendingKeyUpdateCount[key] = this.pendingKeyUpdateCount![key];
134
+ // TODO Non null asserting, why is this not null?
135
+ newManager.pendingKeyUpdateCount[key] = this.pendingKeyUpdateCount![key]!;
132
136
  }
133
137
  }
134
138
  return newProps;
135
139
  }
136
140
 
137
141
  /**
138
- * @returns whether all valid (i.e. defined) entries of the property bag are pending
142
+ * Determines if all of the defined properties in a given property set are pending.
139
143
  */
140
- public hasPendingProperties(props: PropertySet) {
144
+ public hasPendingProperties(props: PropertySet): boolean {
141
145
  for (const [key, value] of Object.entries(props)) {
142
146
  if (value !== undefined && this.pendingKeyUpdateCount?.[key] === undefined) {
143
147
  return false;