@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
@@ -89,7 +89,7 @@ export function serializeAsMinSupportedVersion(
89
89
  options: PropertySet | undefined,
90
90
  serializer: IFluidSerializer,
91
91
  bind: IFluidHandle,
92
- ) {
92
+ ): string {
93
93
  let targetChuck: MergeTreeChunkLegacy;
94
94
 
95
95
  if (chunk.version !== undefined) {
@@ -102,7 +102,7 @@ export function serializeAsMinSupportedVersion(
102
102
  }
103
103
 
104
104
  switch (chunk.version) {
105
- case undefined:
105
+ case undefined: {
106
106
  targetChuck = chunk as MergeTreeChunkLegacy;
107
107
  targetChuck.headerMetadata = buildHeaderMetadataForLegacyChunk(
108
108
  path,
@@ -110,8 +110,9 @@ export function serializeAsMinSupportedVersion(
110
110
  options,
111
111
  );
112
112
  break;
113
+ }
113
114
 
114
- case "1":
115
+ case "1": {
115
116
  const chunkV1 = chunk as MergeTreeChunkV1;
116
117
  const headerMetadata =
117
118
  path === SnapshotLegacy.header ? chunkV1.headerMetadata : undefined;
@@ -128,9 +129,11 @@ export function serializeAsMinSupportedVersion(
128
129
  headerMetadata,
129
130
  };
130
131
  break;
132
+ }
131
133
 
132
- default:
134
+ default: {
133
135
  throw new Error(`Unsupported chunk path: ${path} version: ${chunk.version}`);
136
+ }
134
137
  }
135
138
  return serializer.stringify(targetChuck, bind);
136
139
  }
@@ -142,7 +145,7 @@ export function serializeAsMaxSupportedVersion(
142
145
  options: PropertySet | undefined,
143
146
  serializer: IFluidSerializer,
144
147
  bind: IFluidHandle,
145
- ) {
148
+ ): string {
146
149
  const targetChuck = toLatestVersion(path, chunk, logger, options);
147
150
  return serializer.stringify(targetChuck, bind);
148
151
  }
@@ -166,11 +169,13 @@ export function toLatestVersion(
166
169
  attribution: chunkLegacy.attribution,
167
170
  };
168
171
  }
169
- case "1":
172
+ case "1": {
170
173
  return chunk as MergeTreeChunkV1;
174
+ }
171
175
 
172
- default:
176
+ default: {
173
177
  throw new Error(`Unsupported chunk path: ${path} version: ${chunk.version}`);
178
+ }
174
179
  }
175
180
  }
176
181
 
@@ -58,8 +58,8 @@ export class SnapshotLoader {
58
58
 
59
59
  const catchupOpsP = this.loadBodyAndCatchupOps(headerLoadedP, services);
60
60
 
61
- catchupOpsP.catch((err) =>
62
- this.logger.sendErrorEvent({ eventName: "CatchupOpsLoadFailure" }, err),
61
+ catchupOpsP.catch((error) =>
62
+ this.logger.sendErrorEvent({ eventName: "CatchupOpsLoadFailure" }, error),
63
63
  );
64
64
 
65
65
  await headerLoadedP;
@@ -80,22 +80,24 @@ export class SnapshotLoader {
80
80
 
81
81
  const blobs = await blobsP;
82
82
  if (blobs.length === headerChunk.headerMetadata!.orderedChunkMetadata.length + 1) {
83
- headerChunk.headerMetadata!.orderedChunkMetadata.forEach((md) =>
84
- blobs.splice(blobs.indexOf(md.id), 1),
85
- );
83
+ for (const md of headerChunk.headerMetadata!.orderedChunkMetadata)
84
+ blobs.splice(blobs.indexOf(md.id), 1);
86
85
  assert(blobs.length === 1, 0x060 /* There should be only one blob with catch up ops */);
87
86
 
88
87
  // TODO: The 'Snapshot.catchupOps' tree entry is purely for backwards compatibility.
89
88
  // (See https://github.com/microsoft/FluidFramework/issues/84)
90
89
 
91
- return this.loadCatchupOps(services.readBlob(blobs[0]), this.serializer);
90
+ // TODO Non null asserting, why is this not null?
91
+ return this.loadCatchupOps(services.readBlob(blobs[0]!), this.serializer);
92
92
  } else if (blobs.length !== headerChunk.headerMetadata!.orderedChunkMetadata.length) {
93
93
  throw new Error("Unexpected blobs in snapshot");
94
94
  }
95
95
  return [];
96
96
  }
97
97
 
98
- private readonly specToSegment = (spec: IJSONSegment | IJSONSegmentWithMergeInfo) => {
98
+ private readonly specToSegment = (
99
+ spec: IJSONSegment | IJSONSegmentWithMergeInfo,
100
+ ): ISegment => {
99
101
  let seg: ISegment;
100
102
 
101
103
  if (hasMergeInfo(spec)) {
@@ -104,9 +106,9 @@ export class SnapshotLoader {
104
106
  // `specToSegment()` initializes `seg` with the LocalClientId. Overwrite this with
105
107
  // the `spec` client (if specified). Otherwise overwrite with `NonCollabClient`.
106
108
  seg.clientId =
107
- spec.client !== undefined
108
- ? this.client.getOrAddShortClientId(spec.client)
109
- : NonCollabClient;
109
+ spec.client === undefined
110
+ ? NonCollabClient
111
+ : this.client.getOrAddShortClientId(spec.client);
110
112
 
111
113
  seg.seq = spec.seq ?? UniversalSequenceNumber;
112
114
 
@@ -159,7 +161,7 @@ export class SnapshotLoader {
159
161
  this.mergeTree.options,
160
162
  this.serializer,
161
163
  );
162
- const segs = chunk.segments.map(this.specToSegment);
164
+ const segs = chunk.segments.map((element) => this.specToSegment(element));
163
165
  this.extractAttribution(segs, chunk);
164
166
 
165
167
  this.mergeTree.reloadFromSegments(segs);
@@ -205,7 +207,7 @@ export class SnapshotLoader {
205
207
  return;
206
208
  }
207
209
 
208
- let chunksWithAttribution = chunk1.attribution !== undefined ? 1 : 0;
210
+ let chunksWithAttribution = chunk1.attribution === undefined ? 0 : 1;
209
211
  const segs: ISegment[] = [];
210
212
  let lengthSofar = chunk1.length;
211
213
  for (
@@ -215,16 +217,17 @@ export class SnapshotLoader {
215
217
  ) {
216
218
  const chunk = await SnapshotV1.loadChunk(
217
219
  services,
218
- headerMetadata.orderedChunkMetadata[chunkIndex].id,
220
+ // TODO Non null asserting, why is this not null?
221
+ headerMetadata.orderedChunkMetadata[chunkIndex]!.id,
219
222
  this.logger,
220
223
  this.mergeTree.options,
221
224
  this.serializer,
222
225
  );
223
226
  lengthSofar += chunk.length;
224
227
  // Deserialize each chunk segment and append it to the end of the MergeTree.
225
- const newSegs = chunk.segments.map(this.specToSegment);
228
+ const newSegs = chunk.segments.map((element) => this.specToSegment(element));
226
229
  this.extractAttribution(newSegs, chunk);
227
- chunksWithAttribution += chunk.attribution !== undefined ? 1 : 0;
230
+ chunksWithAttribution += chunk.attribution === undefined ? 0 : 1;
228
231
  segs.push(...newSegs);
229
232
  }
230
233
 
@@ -243,7 +246,7 @@ export class SnapshotLoader {
243
246
 
244
247
  // Helper to insert segments at the end of the MergeTree.
245
248
  const mergeTree = this.mergeTree;
246
- const append = (segments: ISegment[], cli: number, seq: number) => {
249
+ const append = (segments: ISegment[], cli: number, seq: number): void => {
247
250
  mergeTree.insertSegments(
248
251
  mergeTree.root.cachedLength ?? 0,
249
252
  segments,
@@ -256,7 +259,7 @@ export class SnapshotLoader {
256
259
 
257
260
  // Helpers to batch-insert segments that are below the min seq
258
261
  const batch: ISegment[] = [];
259
- const flushBatch = () => {
262
+ const flushBatch = (): void => {
260
263
  if (batch.length > 0) {
261
264
  append(batch, NonCollabClient, UniversalSequenceNumber);
262
265
  }
package/src/snapshotV1.ts CHANGED
@@ -23,6 +23,7 @@ import { UnassignedSequenceNumber } from "./constants.js";
23
23
  import { MergeTree } from "./mergeTree.js";
24
24
  import { walkAllChildSegments } from "./mergeTreeNodeWalk.js";
25
25
  import { ISegment } from "./mergeTreeNodes.js";
26
+ import type { IJSONSegment } from "./ops.js";
26
27
  import { PropertySet, matchProperties } from "./properties.js";
27
28
  import {
28
29
  IJSONSegmentWithMergeInfo,
@@ -31,6 +32,7 @@ import {
31
32
  MergeTreeHeaderMetadata,
32
33
  serializeAsMaxSupportedVersion,
33
34
  toLatestVersion,
35
+ type VersionedMergeTreeChunk,
34
36
  } from "./snapshotChunks.js";
35
37
  import { SnapshotLegacy } from "./snapshotlegacy.js";
36
38
 
@@ -90,14 +92,22 @@ export class SnapshotV1 {
90
92
  let segmentCount = 0;
91
93
  let hasAttribution = false;
92
94
  while (length < approxSequenceLength && startIndex + segmentCount < allSegments.length) {
93
- const pseg = allSegments[startIndex + segmentCount];
95
+ // TODO Non null asserting, why is this not null?
96
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
97
+ const pseg = allSegments[startIndex + segmentCount]!;
94
98
  segments.push(pseg);
95
- length += allLengths[startIndex + segmentCount];
99
+ // TODO Non null asserting, why is this not null?
100
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
101
+ length += allLengths[startIndex + segmentCount]!;
96
102
  if (attributionCollections[startIndex + segmentCount]) {
97
103
  hasAttribution = true;
98
104
  collections.push({
99
- attribution: attributionCollections[startIndex + segmentCount],
100
- cachedLength: allLengths[startIndex + segmentCount],
105
+ // TODO Non null asserting, why is this not null?
106
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
107
+ attribution: attributionCollections[startIndex + segmentCount]!,
108
+ // TODO Non null asserting, why is this not null?
109
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
110
+ cachedLength: allLengths[startIndex + segmentCount]!,
101
111
  });
102
112
  }
103
113
  segmentCount++;
@@ -149,7 +159,7 @@ export class SnapshotV1 {
149
159
  headerChunk.headerMetadata = this.header;
150
160
  headerChunk.headerMetadata.orderedChunkMetadata = [{ id: SnapshotLegacy.header }];
151
161
  const blobs: [key: string, content: string][] = [];
152
- chunks.forEach((chunk, index) => {
162
+ for (const [index, chunk] of chunks.entries()) {
153
163
  const id = `${SnapshotLegacy.body}_${index}`;
154
164
  this.header.orderedChunkMetadata.push({ id });
155
165
  blobs.push([
@@ -163,7 +173,7 @@ export class SnapshotV1 {
163
173
  bind,
164
174
  ),
165
175
  ]);
166
- });
176
+ }
167
177
 
168
178
  const builder = new SummaryTreeBuilder();
169
179
  builder.addBlob(
@@ -177,14 +187,14 @@ export class SnapshotV1 {
177
187
  bind,
178
188
  ),
179
189
  );
180
- blobs.forEach((value) => {
190
+ for (const value of blobs) {
181
191
  builder.addBlob(value[0], value[1]);
182
- });
192
+ }
183
193
 
184
194
  return builder.getSummaryTree();
185
195
  }
186
196
 
187
- extractSync() {
197
+ extractSync(): JsonSegmentSpecs[] {
188
198
  const mergeTree = this.mergeTree;
189
199
  const minSeq = this.header.minSequenceNumber;
190
200
 
@@ -196,7 +206,7 @@ export class SnapshotV1 {
196
206
  json: JsonSegmentSpecs,
197
207
  length: number,
198
208
  attribution: IAttributionCollection<AttributionKey> | undefined,
199
- ) => {
209
+ ): void => {
200
210
  segmentsAfterCombine += 1;
201
211
  this.segments.push(json);
202
212
  this.segmentLengths.push(length);
@@ -206,18 +216,22 @@ export class SnapshotV1 {
206
216
  };
207
217
 
208
218
  // Helper to serialize the given `segment` and add it to the snapshot (if a segment is provided).
209
- const pushSeg = (segment?: ISegment) => {
219
+ const pushSeg = (segment?: ISegment): void => {
210
220
  if (segment) {
211
221
  if (segment.properties !== undefined && Object.keys(segment.properties).length === 0) {
212
222
  segment.properties = undefined;
213
223
  segment.propertyManager = undefined;
214
224
  }
215
- pushSegRaw(segment.toJSONObject(), segment.cachedLength, segment.attribution);
225
+ pushSegRaw(
226
+ segment.toJSONObject() as JsonSegmentSpecs,
227
+ segment.cachedLength,
228
+ segment.attribution,
229
+ );
216
230
  }
217
231
  };
218
232
 
219
233
  let prev: ISegment | undefined;
220
- const extractSegment = (segment: ISegment) => {
234
+ const extractSegment = (segment: ISegment): boolean => {
221
235
  // Elide segments that do not need to be included in the snapshot. A segment may be elided if
222
236
  // either condition is true:
223
237
  // a) The segment has not yet been ACKed. We do not need to snapshot unACKed segments because
@@ -279,7 +293,7 @@ export class SnapshotV1 {
279
293
  segment.propertyManager = undefined;
280
294
  }
281
295
  const raw: IJSONSegmentWithMergeInfo & { removedClient?: string } = {
282
- json: segment.toJSONObject(),
296
+ json: segment.toJSONObject() as IJSONSegment,
283
297
  };
284
298
  // If the segment insertion is above the MSN, record the insertion merge info.
285
299
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -298,9 +312,11 @@ export class SnapshotV1 {
298
312
 
299
313
  // back compat for when we split overlap and removed client
300
314
  raw.removedClient =
301
- segment.removedClientIds !== undefined
302
- ? this.getLongClientId(segment.removedClientIds[0])
303
- : undefined;
315
+ segment.removedClientIds === undefined
316
+ ? undefined
317
+ : // TODO Non null asserting, why is this not null?
318
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
319
+ this.getLongClientId(segment.removedClientIds[0]!);
304
320
 
305
321
  raw.removedClientIds = segment.removedClientIds?.map((id) =>
306
322
  this.getLongClientId(id),
@@ -373,7 +389,9 @@ export class SnapshotV1 {
373
389
  options: PropertySet | undefined,
374
390
  serializer?: IFluidSerializer,
375
391
  ): MergeTreeChunkV1 {
376
- const chunkObj = serializer ? serializer.parse(chunk) : JSON.parse(chunk);
392
+ const chunkObj: VersionedMergeTreeChunk = serializer
393
+ ? (serializer.parse(chunk) as VersionedMergeTreeChunk)
394
+ : (JSON.parse(chunk) as VersionedMergeTreeChunk);
377
395
  return toLatestVersion(path, chunkObj, logger, options);
378
396
  }
379
397
  }
@@ -83,7 +83,8 @@ export class SnapshotLegacy {
83
83
  sequenceLength < approxSequenceLength &&
84
84
  startIndex + segCount < allSegments.length
85
85
  ) {
86
- const pseg = allSegments[startIndex + segCount];
86
+ // TODO Non null asserting, why is this not null?
87
+ const pseg = allSegments[startIndex + segCount]!;
87
88
  segs.push(pseg);
88
89
  if (pseg.attribution) {
89
90
  segsWithAttribution++;
@@ -178,9 +179,10 @@ export class SnapshotLegacy {
178
179
  // Messages used to have a "term" property which has since been removed.
179
180
  // It is benign so it doesn't really need to be deleted here, but doing so permits snapshot tests
180
181
  // to pass with an exact match (and matching the updated definition of ISequencedDocumentMessage).
181
- catchUpMsgs.forEach((message) => {
182
+ for (const message of catchUpMsgs) {
183
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
182
184
  delete (message as any).term;
183
- });
185
+ }
184
186
  builder.addBlob(
185
187
  this.mergeTree.options?.catchUpBlobName ?? SnapshotLegacy.catchupOps,
186
188
  serializer ? serializer.stringify(catchUpMsgs, bind) : JSON.stringify(catchUpMsgs),
@@ -190,7 +192,7 @@ export class SnapshotLegacy {
190
192
  return builder.getSummaryTree();
191
193
  }
192
194
 
193
- extractSync() {
195
+ extractSync(): ISegment[] {
194
196
  const collabWindow = this.mergeTree.collabWindow;
195
197
  this.seq = collabWindow.minSeq;
196
198
  this.header = {
@@ -212,7 +214,7 @@ export class SnapshotLegacy {
212
214
  clientId: number,
213
215
  start: number | undefined,
214
216
  end: number | undefined,
215
- ) => {
217
+ ): boolean => {
216
218
  if (
217
219
  segment.seq !== UnassignedSequenceNumber &&
218
220
  segment.seq! <= this.seq! &&
@@ -65,7 +65,9 @@ export class SortedSegmentSet<T extends SortedSegmentSetItem = ISegment> extends
65
65
 
66
66
  while (start <= end) {
67
67
  index = start + Math.floor((end - start) / 2);
68
- const indexKey = this.getKey(this.keySortedItems[index]);
68
+ // TODO Non null asserting, why is this not null?
69
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
70
+ const indexKey = this.getKey(this.keySortedItems[index]!);
69
71
  if (indexKey > itemKey) {
70
72
  if (start === index) {
71
73
  return { exists: false, index };
@@ -85,7 +87,9 @@ export class SortedSegmentSet<T extends SortedSegmentSetItem = ISegment> extends
85
87
  }
86
88
  for (
87
89
  let b = index - 1;
88
- b >= 0 && this.getKey(this.keySortedItems[b]) === itemKey;
90
+ // TODO Non null asserting, why is this not null?
91
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
92
+ b >= 0 && this.getKey(this.keySortedItems[b]!) === itemKey;
89
93
  b--
90
94
  ) {
91
95
  if (this.keySortedItems[b] === item) {
@@ -95,7 +99,9 @@ export class SortedSegmentSet<T extends SortedSegmentSetItem = ISegment> extends
95
99
  for (
96
100
  index + 1;
97
101
  index < this.keySortedItems.length &&
98
- this.getKey(this.keySortedItems[index]) === itemKey;
102
+ // TODO Non null asserting, why is this not null?
103
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
104
+ this.getKey(this.keySortedItems[index]!) === itemKey;
99
105
  index++
100
106
  ) {
101
107
  if (this.keySortedItems[index] === item) {
package/src/sortedSet.ts CHANGED
@@ -20,10 +20,12 @@ export abstract class SortedSet<T, U extends string | number> {
20
20
  return this.keySortedItems;
21
21
  }
22
22
 
23
- public addOrUpdate(newItem: T, update?: (existingItem: T, newItem: T) => void) {
23
+ public addOrUpdate(newItem: T, update?: (existingItem: T, newItem: T) => void): void {
24
24
  const position = this.findItemPosition(newItem);
25
25
  if (position.exists) {
26
- update?.(this.keySortedItems[position.index], newItem);
26
+ // Non null asserting here because we know the item exists
27
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
28
+ update?.(this.keySortedItems[position.index]!, newItem);
27
29
  } else {
28
30
  this.keySortedItems.splice(position.index, 0, newItem);
29
31
  }
@@ -54,7 +56,9 @@ export abstract class SortedSet<T, U extends string | number> {
54
56
 
55
57
  while (start <= end) {
56
58
  index = start + Math.floor((end - start) / 2);
57
- const indexKey = this.getKey(this.keySortedItems[index]);
59
+ // TODO Non null asserting, why is this not null?
60
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
61
+ const indexKey = this.getKey(this.keySortedItems[index]!);
58
62
  if (indexKey > itemKey) {
59
63
  if (start === index) {
60
64
  return { exists: false, index };
@@ -40,7 +40,7 @@ export class TextSegment extends BaseSegment {
40
40
  return segment.type === TextSegment.type;
41
41
  }
42
42
 
43
- public static make(text: string, props?: PropertySet) {
43
+ public static make(text: string, props?: PropertySet): TextSegment {
44
44
  const seg = new TextSegment(text);
45
45
  if (props) {
46
46
  seg.addProperties(props);
@@ -48,7 +48,7 @@ export class TextSegment extends BaseSegment {
48
48
  return seg;
49
49
  }
50
50
 
51
- public static fromJSONObject(spec: any) {
51
+ public static fromJSONObject(spec: string | IJSONSegment): TextSegment | undefined {
52
52
  if (typeof spec === "string") {
53
53
  return new TextSegment(spec);
54
54
  } else if (spec && typeof spec === "object" && "text" in spec) {
@@ -69,8 +69,8 @@ export class TextSegment extends BaseSegment {
69
69
  return this.properties ? { text: this.text, props: { ...this.properties } } : this.text;
70
70
  }
71
71
 
72
- public clone(start = 0, end?: number) {
73
- const text = this.text.substring(start, end);
72
+ public clone(start = 0, end?: number): TextSegment {
73
+ const text = this.text.slice(start, end);
74
74
  const b = TextSegment.make(text, this.properties);
75
75
  this.cloneInto(b);
76
76
  return b;
@@ -85,20 +85,20 @@ export class TextSegment extends BaseSegment {
85
85
  );
86
86
  }
87
87
 
88
- public toString() {
88
+ public toString(): string {
89
89
  return this.text;
90
90
  }
91
91
 
92
- public append(segment: ISegment) {
92
+ public append(segment: ISegment): void {
93
93
  assert(TextSegment.is(segment), 0x447 /* can only append text segment */);
94
94
  super.append(segment);
95
95
  this.text += segment.text;
96
96
  }
97
97
 
98
- protected createSplitSegmentAt(pos: number) {
98
+ protected createSplitSegmentAt(pos: number): TextSegment | undefined {
99
99
  if (pos > 0) {
100
- const remainingText = this.text.substring(pos);
101
- this.text = this.text.substring(0, pos);
100
+ const remainingText = this.text.slice(Math.max(0, pos));
101
+ this.text = this.text.slice(0, Math.max(0, pos));
102
102
  this.cachedLength = this.text.length;
103
103
  const leafSegment = new TextSegment(remainingText);
104
104
  return leafSegment;
package/src/zamboni.ts CHANGED
@@ -21,14 +21,14 @@ import {
21
21
  import { matchProperties } from "./properties.js";
22
22
 
23
23
  export const zamboniSegmentsMax = 2;
24
- function underflow(node: MergeBlock) {
24
+ function underflow(node: MergeBlock): boolean {
25
25
  return node.childCount < MaxNodesInBlock / 2;
26
26
  }
27
27
 
28
28
  export function zamboniSegments(
29
29
  mergeTree: MergeTree,
30
30
  zamboniSegmentsMaxCount = zamboniSegmentsMax,
31
- ) {
31
+ ): void {
32
32
  if (!mergeTree.collabWindow.collaborating) {
33
33
  return;
34
34
  }
@@ -57,7 +57,8 @@ export function zamboniSegments(
57
57
  block.childCount = newChildCount;
58
58
  block.children = childrenCopy;
59
59
  for (let j = 0; j < newChildCount; j++) {
60
- block.assignChild(childrenCopy[j], j, false);
60
+ // Non null asserting here since its looping though childrenCopy.length so j at childrenCopy will always exist
61
+ block.assignChild(childrenCopy[j]!, j, false);
61
62
  }
62
63
 
63
64
  if (underflow(block) && block.parent) {
@@ -72,7 +73,7 @@ export function zamboniSegments(
72
73
  }
73
74
 
74
75
  // Interior node with all node children
75
- export function packParent(parent: MergeBlock, mergeTree: MergeTree) {
76
+ export function packParent(parent: MergeBlock, mergeTree: MergeTree): void {
76
77
  const children = parent.children;
77
78
  let childIndex: number;
78
79
  let childBlock: MergeBlock;
@@ -96,7 +97,7 @@ export function packParent(parent: MergeBlock, mergeTree: MergeTree) {
96
97
  }
97
98
  const baseNodesInBlockCount = Math.floor(totalNodeCount / childCount);
98
99
  let remainderCount = totalNodeCount % childCount;
99
- const packedBlocks = new Array<MergeBlock>(MaxNodesInBlock);
100
+ const packedBlocks: IMergeNode[] = Array.from({ length: MaxNodesInBlock });
100
101
  let childrenPackedCount = 0;
101
102
  for (let nodeIndex = 0; nodeIndex < childCount; nodeIndex++) {
102
103
  let nodeCount = baseNodesInBlockCount;
@@ -106,7 +107,8 @@ export function packParent(parent: MergeBlock, mergeTree: MergeTree) {
106
107
  }
107
108
  const packedBlock = mergeTree.makeBlock(nodeCount);
108
109
  for (let packedNodeIndex = 0; packedNodeIndex < nodeCount; packedNodeIndex++) {
109
- const nodeToPack = holdNodes[childrenPackedCount++];
110
+ // TODO Non null asserting, why is this not null?
111
+ const nodeToPack = holdNodes[childrenPackedCount++]!;
110
112
  packedBlock.assignChild(nodeToPack, packedNodeIndex, false);
111
113
  }
112
114
  packedBlock.parent = parent;
@@ -115,7 +117,8 @@ export function packParent(parent: MergeBlock, mergeTree: MergeTree) {
115
117
  }
116
118
  parent.children = packedBlocks;
117
119
  for (let j = 0; j < childCount; j++) {
118
- parent.assignChild(packedBlocks[j], j, false);
120
+ // TODO Non null asserting, why is this not null?
121
+ parent.assignChild(packedBlocks[j]!, j, false);
119
122
  }
120
123
  parent.childCount = childCount;
121
124
  } else {
@@ -130,12 +133,13 @@ export function packParent(parent: MergeBlock, mergeTree: MergeTree) {
130
133
  }
131
134
  }
132
135
 
133
- function scourNode(node: MergeBlock, holdNodes: IMergeNode[], mergeTree: MergeTree) {
136
+ function scourNode(node: MergeBlock, holdNodes: IMergeNode[], mergeTree: MergeTree): void {
134
137
  // The previous segment is tracked while scouring for the purposes of merging adjacent segments
135
138
  // when possible.
136
139
  let prevSegment: ISegment | undefined;
137
140
  for (let k = 0; k < node.childCount; k++) {
138
- const childNode = node.children[k];
141
+ // TODO Non null asserting, why is this not null?
142
+ const childNode = node.children[k]!;
139
143
  if (!childNode.isLeaf() || !childNode.segmentGroups.empty) {
140
144
  holdNodes.push(childNode);
141
145
  prevSegment = undefined;
@@ -191,7 +195,7 @@ function scourNode(node: MergeBlock, holdNodes: IMergeNode[], mergeTree: MergeTr
191
195
  );
192
196
 
193
197
  segment.parent = undefined;
194
- segment.trackingCollection.trackingGroups.forEach((tg) => tg.unlink(segment));
198
+ for (const tg of segment.trackingCollection.trackingGroups) tg.unlink(segment);
195
199
  } else {
196
200
  holdNodes.push(segment);
197
201
  prevSegment = segmentHasPositiveLength ? segment : undefined;
package/tsconfig.json CHANGED
@@ -7,7 +7,6 @@
7
7
  "outDir": "./lib",
8
8
  "preserveConstEnums": true,
9
9
  "noImplicitAny": true,
10
- "noUncheckedIndexedAccess": false,
11
10
  "exactOptionalPropertyTypes": false,
12
11
  },
13
12
  }