@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
@@ -1 +1 @@
1
- {"version":3,"file":"client.apis.spec.js","sourceRoot":"","sources":["../../src/test/client.apis.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable guard-for-in, no-restricted-syntax */\n\nimport { strict as assert } from \"assert\";\n\nimport { Client } from \"../client.js\";\nimport { PropertySet, createMap, matchProperties } from \"../properties.js\";\n\nimport { TestClient } from \"./testClient.js\";\n\nfunction checkGetPropertiesAtPos(\n\tclient: Client,\n\tpos: number,\n\tprops?: PropertySet,\n\tverbose = false,\n) {\n\tconst propsRetrieved = client.getPropertiesAtPosition(pos);\n\tconst result = matchProperties(props, propsRetrieved);\n\tif (!result && verbose) {\n\t\tconsole.log(`At pos: ${pos}`);\n\t\tconsole.log(\"Expected props\");\n\t\tfor (const key in props) {\n\t\t\tconsole.log(`Key: ${key} Value: ${props[key]}`);\n\t\t}\n\n\t\tconsole.log(\"Actual props\");\n\t\tfor (const key1 in propsRetrieved) {\n\t\t\tconsole.log(`Key: ${key1} Value: ${propsRetrieved[key1]}`);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function clientGetPropertiesAtPositionTest() {\n\tconst client = new TestClient();\n\tclient.insertTextLocal(0, \"the cat is on the mat\");\n\tconst props = createMap<any>();\n\tprops.prop1 = 10;\n\tclient.insertTextLocal(4, \"fuzzy, fuzzy \", props);\n\n\tconst testResult1 = checkGetPropertiesAtPos(client, 4, props, true);\n\tconst testResult2 = checkGetPropertiesAtPos(client, 16, props, true);\n\tconst testResult3 = checkGetPropertiesAtPos(client, 3);\n\tconst testResult4 = checkGetPropertiesAtPos(client, 17);\n\n\treturn (((testResult1 === testResult2) === testResult3) === testResult4) === true;\n}\n\nfunction checkGetSegmentExtentsOfPos(\n\tclient: Client,\n\tpos: number,\n\tposStart: number,\n\tposAfterEnd: number,\n\tverbose = false,\n) {\n\tconst segExtents = client.getRangeExtentsOfPosition(pos);\n\tconst result = segExtents.posStart === posStart && segExtents.posAfterEnd === posAfterEnd;\n\tif (!result && verbose) {\n\t\tconsole.log(`At pos: ${pos}`);\n\t\tconsole.log(`Expected extents -> start: ${posStart} end: ${posAfterEnd}`);\n\t\tconsole.log(\n\t\t\t`Actual extents -> start: ${segExtents.posStart} end: ${segExtents.posAfterEnd}`,\n\t\t);\n\t}\n\treturn result;\n}\n\nexport function clientGetSegmentExtentsOfPositionTest() {\n\tconst client = new TestClient();\n\tclient.insertTextLocal(0, \"the cat is on the mat\");\n\tconst props = createMap<any>();\n\tprops.prop1 = 10;\n\tclient.insertTextLocal(4, \"fuzzy, fuzzy \", props);\n\tclient.insertTextLocal(8, \"more fuzzy text\", {});\n\n\tconst testResult1 = checkGetSegmentExtentsOfPos(client, 26, 23, 32);\n\tconst testResult2 = checkGetSegmentExtentsOfPos(client, 6, 4, 8);\n\tconst testResult3 = checkGetSegmentExtentsOfPos(client, 32, 32, 49);\n\treturn ((testResult1 === testResult2) === testResult3) === true;\n}\n\ndescribe(\"client.apis\", () => {\n\tit(\"clientGetPropertiesAtPositionTest\", () => {\n\t\tassert(clientGetPropertiesAtPositionTest() === true);\n\t});\n\n\tit(\"clientGetSegmentExtentsOfPositionTest\", () => {\n\t\tassert(clientGetSegmentExtentsOfPositionTest() === true);\n\t});\n});\n"]}
1
+ {"version":3,"file":"client.apis.spec.js","sourceRoot":"","sources":["../../src/test/client.apis.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable guard-for-in, no-restricted-syntax */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { Client } from \"../client.js\";\nimport { PropertySet, matchProperties } from \"../properties.js\";\n\nimport { TestClient } from \"./testClient.js\";\n\nfunction checkGetPropertiesAtPos(\n\tclient: Client,\n\tpos: number,\n\tprops?: PropertySet,\n\tverbose = false,\n): boolean {\n\tconst propsRetrieved = client.getPropertiesAtPosition(pos);\n\tconst result = matchProperties(props, propsRetrieved);\n\tif (!result && verbose) {\n\t\tconsole.log(`At pos: ${pos}`);\n\t\tconsole.log(\"Expected props\");\n\t\tfor (const key in props) {\n\t\t\tconsole.log(`Key: ${key} Value: ${props[key]}`);\n\t\t}\n\n\t\tconsole.log(\"Actual props\");\n\t\tfor (const key1 in propsRetrieved) {\n\t\t\tconsole.log(`Key: ${key1} Value: ${propsRetrieved[key1]}`);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function clientGetPropertiesAtPositionTest(): boolean {\n\tconst client = new TestClient();\n\tclient.insertTextLocal(0, \"the cat is on the mat\");\n\tconst props: PropertySet = { prop1: 10 };\n\tclient.insertTextLocal(4, \"fuzzy, fuzzy \", props);\n\n\tconst testResult1 = checkGetPropertiesAtPos(client, 4, props, true);\n\tconst testResult2 = checkGetPropertiesAtPos(client, 16, props, true);\n\tconst testResult3 = checkGetPropertiesAtPos(client, 3);\n\tconst testResult4 = checkGetPropertiesAtPos(client, 17);\n\n\treturn (((testResult1 === testResult2) === testResult3) === testResult4) === true;\n}\n\nfunction checkGetSegmentExtentsOfPos(\n\tclient: Client,\n\tpos: number,\n\tposStart: number,\n\tposAfterEnd: number,\n\tverbose = false,\n): boolean {\n\tconst segExtents = client.getRangeExtentsOfPosition(pos);\n\tconst result = segExtents.posStart === posStart && segExtents.posAfterEnd === posAfterEnd;\n\tif (!result && verbose) {\n\t\tconsole.log(`At pos: ${pos}`);\n\t\tconsole.log(`Expected extents -> start: ${posStart} end: ${posAfterEnd}`);\n\t\tconsole.log(\n\t\t\t`Actual extents -> start: ${segExtents.posStart} end: ${segExtents.posAfterEnd}`,\n\t\t);\n\t}\n\treturn result;\n}\n\nexport function clientGetSegmentExtentsOfPositionTest(): boolean {\n\tconst client = new TestClient();\n\tclient.insertTextLocal(0, \"the cat is on the mat\");\n\tconst props: PropertySet = { prop1: 10 };\n\tclient.insertTextLocal(4, \"fuzzy, fuzzy \", props);\n\tclient.insertTextLocal(8, \"more fuzzy text\", {});\n\n\tconst testResult1 = checkGetSegmentExtentsOfPos(client, 26, 23, 32);\n\tconst testResult2 = checkGetSegmentExtentsOfPos(client, 6, 4, 8);\n\tconst testResult3 = checkGetSegmentExtentsOfPos(client, 32, 32, 49);\n\treturn ((testResult1 === testResult2) === testResult3) === true;\n}\n\ndescribe(\"client.apis\", () => {\n\tit(\"clientGetPropertiesAtPositionTest\", () => {\n\t\tassert(clientGetPropertiesAtPositionTest() === true);\n\t});\n\n\tit(\"clientGetSegmentExtentsOfPositionTest\", () => {\n\t\tassert(clientGetSegmentExtentsOfPositionTest() === true);\n\t});\n});\n"]}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
8
- const assert_1 = require("assert");
8
+ const node_assert_1 = require("node:assert");
9
9
  const constants_js_1 = require("../constants.js");
10
10
  const mergeTreeNodeWalk_js_1 = require("../mergeTreeNodeWalk.js");
11
11
  const mergeTreeTracking_js_1 = require("../mergeTreeTracking.js");
@@ -23,7 +23,7 @@ describe("client.applyMsg", () => {
23
23
  });
24
24
  it("Interleaved inserts, annotates, and deletes", () => {
25
25
  const changes = new Map();
26
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
26
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
27
27
  for (let i = 0; i < 100; i++) {
28
28
  const len = client.getLength();
29
29
  const pos1 = Math.floor(len / 2);
@@ -53,58 +53,61 @@ describe("client.applyMsg", () => {
53
53
  changes.set(i, { msg, segmentGroup: client.peekPendingSegmentGroups() });
54
54
  break;
55
55
  }
56
- default:
57
- assert_1.strict.fail("all cases should be handled");
56
+ default: {
57
+ node_assert_1.strict.fail("all cases should be handled");
58
+ }
58
59
  }
59
60
  }
60
61
  for (let i = 0; i < 100; i++) {
61
62
  const msg = changes.get(i).msg;
62
63
  client.applyMsg(msg);
63
64
  const segmentGroup = changes.get(i)?.segmentGroup;
64
- (0, assert_1.strict)(!Array.isArray(segmentGroup) && segmentGroup !== undefined, "segment group should be defined and not an array");
65
+ (0, node_assert_1.strict)(!Array.isArray(segmentGroup) && segmentGroup !== undefined, "segment group should be defined and not an array");
65
66
  for (const seg of segmentGroup.segments) {
66
67
  switch (i % 6) {
67
68
  case 0:
68
- case 5:
69
- assert_1.strict.equal(seg.removedSeq, msg.sequenceNumber, "removed segment has unexpected id");
69
+ case 5: {
70
+ node_assert_1.strict.equal(seg.removedSeq, msg.sequenceNumber, "removed segment has unexpected id");
70
71
  break;
72
+ }
71
73
  case 1:
72
- case 4:
73
- assert_1.strict.equal(seg.seq, msg.sequenceNumber, "inserted segment has unexpected id");
74
+ case 4: {
75
+ node_assert_1.strict.equal(seg.seq, msg.sequenceNumber, "inserted segment has unexpected id");
74
76
  break;
77
+ }
75
78
  default:
76
79
  }
77
80
  }
78
81
  }
79
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
82
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
80
83
  for (let i = 0; i < client.getText().length; i++) {
81
84
  const segmentInfo = client.getContainingSegment(i);
82
- assert_1.strict.notEqual(segmentInfo.segment?.seq, constants_js_1.UnassignedSequenceNumber, "all segments should be acked");
83
- (0, assert_1.strict)(segmentInfo.segment?.segmentGroups.empty, "there should be no outstanding segmentGroups");
85
+ node_assert_1.strict.notEqual(segmentInfo.segment?.seq, constants_js_1.UnassignedSequenceNumber, "all segments should be acked");
86
+ (0, node_assert_1.strict)(segmentInfo.segment?.segmentGroups.empty, "there should be no outstanding segmentGroups");
84
87
  }
85
88
  });
86
89
  it("insertTextLocal", () => {
87
90
  const op = client.insertTextLocal(0, "abc");
88
91
  const segmentInfo = client.getContainingSegment(0);
89
- assert_1.strict.equal(segmentInfo.segment?.seq, constants_js_1.UnassignedSequenceNumber);
92
+ node_assert_1.strict.equal(segmentInfo.segment?.seq, constants_js_1.UnassignedSequenceNumber);
90
93
  client.applyMsg(client.makeOpMessage(op, 17));
91
- assert_1.strict.equal(segmentInfo.segment?.seq, 17);
94
+ node_assert_1.strict.equal(segmentInfo.segment?.seq, 17);
92
95
  });
93
96
  it("removeRangeLocal", () => {
94
97
  const segmentInfo = client.getContainingSegment(0);
95
98
  const removeOp = client.removeRangeLocal(0, 1);
96
- assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
99
+ node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
97
100
  client.applyMsg(client.makeOpMessage(removeOp, 17));
98
- assert_1.strict.equal(segmentInfo.segment?.removedSeq, 17);
101
+ node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, 17);
99
102
  });
100
103
  it("annotateSegmentLocal", () => {
101
104
  const props = {
102
105
  foo: "bar",
103
106
  };
104
107
  const op = client.annotateRangeLocal(0, 1, props);
105
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 1);
108
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 1);
106
109
  client.applyMsg(client.makeOpMessage(op, 17));
107
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
110
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
108
111
  });
109
112
  it("annotateSegmentLocal then removeRangeLocal", () => {
110
113
  const segmentInfo = client.getContainingSegment(0);
@@ -114,16 +117,16 @@ describe("client.applyMsg", () => {
114
117
  foo: "bar",
115
118
  };
116
119
  const annotateOp = client.annotateRangeLocal(start, end, props);
117
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 1);
120
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 1);
118
121
  const removeOp = client.removeRangeLocal(start, end);
119
- assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
120
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 2);
122
+ node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
123
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 2);
121
124
  client.applyMsg(client.makeOpMessage(annotateOp, 17));
122
- assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
123
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 1);
125
+ node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
126
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 1);
124
127
  client.applyMsg(client.makeOpMessage(removeOp, 18, 0));
125
- assert_1.strict.equal(segmentInfo.segment?.removedSeq, 18);
126
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
128
+ node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, 18);
129
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
127
130
  });
128
131
  it("multiple interleaved annotateSegmentLocal", () => {
129
132
  let annotateEnd = client.getText().length;
@@ -138,11 +141,11 @@ describe("client.applyMsg", () => {
138
141
  messages.push(client.makeOpMessage(annotateOp, ++sequenceNumber));
139
142
  annotateEnd = Math.floor(annotateEnd / 2);
140
143
  }
141
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, messages.length);
144
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, messages.length);
142
145
  for (const msg of messages) {
143
146
  client.applyMsg(msg);
144
147
  }
145
- assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
148
+ node_assert_1.strict.equal(client.mergeTree.pendingSegments?.length, 0);
146
149
  });
147
150
  it("overlapping deletes", () => {
148
151
  const segmentInfo = client.getContainingSegment(0);
@@ -150,21 +153,21 @@ describe("client.applyMsg", () => {
150
153
  const end = 5;
151
154
  const initialText = client.getText();
152
155
  const initialLength = initialText.length;
153
- assert_1.strict.equal(segmentInfo.segment?.removedSeq, undefined);
154
- (0, assert_1.strict)(segmentInfo.segment?.segmentGroups.empty);
156
+ node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, undefined);
157
+ (0, node_assert_1.strict)(segmentInfo.segment?.segmentGroups.empty);
155
158
  const removeOp = client.removeRangeLocal(start, end);
156
- assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
157
- assert_1.strict.equal(segmentInfo.segment?.segmentGroups.size, 1);
159
+ node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, constants_js_1.UnassignedSequenceNumber);
160
+ node_assert_1.strict.equal(segmentInfo.segment?.segmentGroups.size, 1);
158
161
  const remoteMessage = client.makeOpMessage(removeOp, 17);
159
162
  remoteMessage.clientId = "remoteClient";
160
163
  client.applyMsg(remoteMessage);
161
- assert_1.strict.equal(segmentInfo.segment?.removedSeq, remoteMessage.sequenceNumber);
162
- assert_1.strict.equal(segmentInfo.segment?.segmentGroups.size, 1);
164
+ node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, remoteMessage.sequenceNumber);
165
+ node_assert_1.strict.equal(segmentInfo.segment?.segmentGroups.size, 1);
163
166
  client.applyMsg(client.makeOpMessage(removeOp, 18, 0));
164
- assert_1.strict.equal(segmentInfo.segment?.removedSeq, remoteMessage.sequenceNumber);
165
- (0, assert_1.strict)(segmentInfo.segment?.segmentGroups.empty);
166
- assert_1.strict.equal(client.getLength(), initialLength - (end - start));
167
- assert_1.strict.equal(client.getText(), initialText.substring(0, start) + initialText.substring(end));
167
+ node_assert_1.strict.equal(segmentInfo.segment?.removedSeq, remoteMessage.sequenceNumber);
168
+ (0, node_assert_1.strict)(segmentInfo.segment?.segmentGroups.empty);
169
+ node_assert_1.strict.equal(client.getLength(), initialLength - (end - start));
170
+ node_assert_1.strict.equal(client.getText(), initialText.slice(0, Math.max(0, start)) + initialText.slice(Math.max(0, end)));
168
171
  });
169
172
  it("overlapping insert and delete", () => {
170
173
  const remoteClient = new testClient_js_1.TestClient();
@@ -174,7 +177,8 @@ describe("client.applyMsg", () => {
174
177
  const logger = new testClientLogger_js_1.TestClientLogger(clients);
175
178
  let seq = 0;
176
179
  const initialMsg = client.makeOpMessage(client.insertTextLocal(0, "-"), ++seq);
177
- clients.forEach((c) => c.applyMsg(initialMsg));
180
+ for (const c of clients)
181
+ c.applyMsg(initialMsg);
178
182
  logger.validate({ baseText: "-hello world" });
179
183
  const messages = [
180
184
  client.makeOpMessage(client.insertTextLocal(0, "L"), ++seq),
@@ -184,7 +188,8 @@ describe("client.applyMsg", () => {
184
188
  ];
185
189
  while (messages.length > 0) {
186
190
  const msg = messages.shift();
187
- clients.forEach((c) => c.applyMsg(msg));
191
+ for (const c of clients)
192
+ c.applyMsg(msg);
188
193
  }
189
194
  logger.validate({ baseText: "RLhello world" });
190
195
  });
@@ -200,7 +205,8 @@ describe("client.applyMsg", () => {
200
205
  ];
201
206
  while (messages.length > 0) {
202
207
  const msg = messages.shift();
203
- clients.all.forEach((c) => c.applyMsg(msg));
208
+ for (const c of clients.all)
209
+ c.applyMsg(msg);
204
210
  }
205
211
  logger.validate({ baseText: "cb" });
206
212
  });
@@ -215,7 +221,8 @@ describe("client.applyMsg", () => {
215
221
  ];
216
222
  while (messages.length > 0) {
217
223
  const msg = messages.shift();
218
- clients.all.forEach((c) => c.applyMsg(msg));
224
+ for (const c of clients.all)
225
+ c.applyMsg(msg);
219
226
  }
220
227
  logger.validate({ baseText: "CB" });
221
228
  });
@@ -231,7 +238,8 @@ describe("client.applyMsg", () => {
231
238
  const logger = new testClientLogger_js_1.TestClientLogger(clients.all);
232
239
  while (messages.length > 0) {
233
240
  const msg = messages.shift();
234
- clients.all.forEach((c) => c.applyMsg(msg));
241
+ for (const c of clients.all)
242
+ c.applyMsg(msg);
235
243
  }
236
244
  logger.validate({ baseText: "cb" });
237
245
  });
@@ -246,7 +254,8 @@ describe("client.applyMsg", () => {
246
254
  const logger = new testClientLogger_js_1.TestClientLogger(clients.all);
247
255
  while (messages.length > 0) {
248
256
  const msg = messages.shift();
249
- clients.all.forEach((c) => c.applyMsg(msg));
257
+ for (const c of clients.all)
258
+ c.applyMsg(msg);
250
259
  }
251
260
  logger.validate({ baseText: "bc" });
252
261
  });
@@ -259,16 +268,17 @@ describe("client.applyMsg", () => {
259
268
  ];
260
269
  while (messages.length > 0) {
261
270
  const msg = messages.shift();
262
- clients.all.forEach((c) => {
271
+ for (const c of clients.all) {
263
272
  c.applyMsg(msg);
264
- });
273
+ }
265
274
  }
266
275
  const logger = new testClientLogger_js_1.TestClientLogger(clients.all);
267
276
  logger.validate({ baseText: "CC" });
268
277
  messages.push(clients.C.makeOpMessage(clients.C.removeRangeLocal(0, 1), ++seq), clients.C.makeOpMessage(clients.C.insertTextLocal(0, "CC"), ++seq), clients.B.makeOpMessage(clients.B.insertTextLocal(1, "BBB"), ++seq));
269
278
  while (messages.length > 0) {
270
279
  const msg = messages.shift();
271
- clients.all.forEach((c) => c.applyMsg(msg));
280
+ for (const c of clients.all)
281
+ c.applyMsg(msg);
272
282
  }
273
283
  logger.validate({ baseText: "CCBBBC" });
274
284
  });
@@ -286,7 +296,8 @@ describe("client.applyMsg", () => {
286
296
  const messages = [op2, op3, op4];
287
297
  while (messages.length > 0) {
288
298
  const msg = messages.shift();
289
- clients.all.forEach((c) => c.applyMsg(msg));
299
+ for (const c of clients.all)
300
+ c.applyMsg(msg);
290
301
  }
291
302
  logger.validate({ baseText: "CB" });
292
303
  });
@@ -303,7 +314,8 @@ describe("client.applyMsg", () => {
303
314
  const messages = [op2, op3];
304
315
  while (messages.length > 0) {
305
316
  const msg = messages.shift();
306
- clients.all.forEach((c) => c.applyMsg(msg));
317
+ for (const c of clients.all)
318
+ c.applyMsg(msg);
307
319
  }
308
320
  logger.validate({ baseText: "CB" });
309
321
  });
@@ -312,18 +324,16 @@ describe("client.applyMsg", () => {
312
324
  const logger = new testClientLogger_js_1.TestClientLogger(clients.all);
313
325
  let seq = 0;
314
326
  const ops = [];
315
- ops.push(clients.B.makeOpMessage(clients.B.insertTextLocal(4, "B"), ++seq));
316
- ops.push(clients.C.makeOpMessage(clients.C.insertTextLocal(4, "CC"), ++seq));
317
- ops.push(clients.C.makeOpMessage(clients.C.removeRangeLocal(2, 8), ++seq));
327
+ ops.push(clients.B.makeOpMessage(clients.B.insertTextLocal(4, "B"), ++seq), clients.C.makeOpMessage(clients.C.insertTextLocal(4, "CC"), ++seq), clients.C.makeOpMessage(clients.C.removeRangeLocal(2, 8), ++seq));
318
328
  clients.B.applyMsg(ops[0]);
319
329
  clients.B.applyMsg(ops[1]);
320
330
  ops.push(clients.B.makeOpMessage(clients.B.removeRangeLocal(5, 8), ++seq));
321
331
  for (const op of ops) {
322
- clients.all.forEach((c) => {
332
+ for (const c of clients.all) {
323
333
  if (c.getCollabWindow().currentSeq < op.sequenceNumber) {
324
334
  c.applyMsg(op);
325
335
  }
326
- });
336
+ }
327
337
  }
328
338
  logger.validate({ baseText: "ab" });
329
339
  });
@@ -340,11 +350,11 @@ describe("client.applyMsg", () => {
340
350
  // which its own ops will be sequenced after
341
351
  ops.push(clients.C.makeOpMessage(clients.C.insertTextLocal(2, "X"), ++seq));
342
352
  for (const op of ops) {
343
- clients.all.forEach((c) => {
353
+ for (const c of clients.all) {
344
354
  if (c.getCollabWindow().currentSeq < op.sequenceNumber) {
345
355
  c.applyMsg(op);
346
356
  }
347
- });
357
+ }
348
358
  }
349
359
  logger.validate({ baseText: "ayzXd" });
350
360
  });
@@ -361,8 +371,8 @@ describe("client.applyMsg", () => {
361
371
  const removeOp = clientB.makeOpMessage(clientB.removeRangeLocal(0, clientB.getLength()), ++seq);
362
372
  [clientA, clientB].map((c) => c.applyMsg(removeOp));
363
373
  const regeneratedOp = clientA.regeneratePendingOp(annotateOp, seg);
364
- (0, assert_1.strict)(regeneratedOp.type === ops_js_1.MergeTreeDeltaType.GROUP);
365
- assert_1.strict.strictEqual(regeneratedOp.ops.length, 0);
374
+ (0, node_assert_1.strict)(regeneratedOp.type === ops_js_1.MergeTreeDeltaType.GROUP);
375
+ node_assert_1.strict.strictEqual(regeneratedOp.ops.length, 0);
366
376
  });
367
377
  it("getContainingSegment with op", () => {
368
378
  const clientA = new testClient_js_1.TestClient();
@@ -382,15 +392,15 @@ describe("client.applyMsg", () => {
382
392
  referenceSequenceNumber: insertMessage2.referenceSequenceNumber,
383
393
  clientId: insertMessage2.clientId,
384
394
  });
385
- assert_1.strict.notStrictEqual(seg.segment, undefined);
386
- assert_1.strict.strictEqual(seg.segment.text, "C");
395
+ node_assert_1.strict.notStrictEqual(seg.segment, undefined);
396
+ node_assert_1.strict.strictEqual(seg.segment.text, "C");
387
397
  // op with reference sequence >= remove op sequence should not count removed segment
388
398
  const insertMessage3 = clientB.makeOpMessage(insertOp2, seq, removeSequence);
389
399
  seg = clientA.getContainingSegment(2, {
390
400
  referenceSequenceNumber: insertMessage3.referenceSequenceNumber,
391
401
  clientId: insertMessage3.clientId,
392
402
  });
393
- assert_1.strict.strictEqual(seg.segment, undefined);
403
+ node_assert_1.strict.strictEqual(seg.segment, undefined);
394
404
  });
395
405
  /**
396
406
  * Regression test for an issue whereby reconnected clients could have segment orders that yielded
@@ -437,21 +447,30 @@ describe("client.applyMsg", () => {
437
447
  let seq = 0;
438
448
  const ops = [];
439
449
  const perClientOps = clients.all.map(() => []);
440
- ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DD"), ++seq));
441
- ops.push(clients.C.makeOpMessage(clients.C.insertTextLocal(0, "C"), ++seq));
442
- ops.splice(0).forEach((op) => clients.all.forEach((c) => c.applyMsg(op)));
443
- ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DDD"), ++seq));
444
- ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "D"), ++seq));
450
+ ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DD"), ++seq), clients.C.makeOpMessage(clients.C.insertTextLocal(0, "C"), ++seq));
451
+ for (const op of ops.splice(0))
452
+ for (const c of clients.all)
453
+ c.applyMsg(op);
454
+ ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DDD"), ++seq), clients.D.makeOpMessage(clients.D.insertTextLocal(0, "D"), ++seq));
445
455
  // disconnect B(1)
446
- ops
447
- .splice(0)
448
- .forEach((op) => clients.all.forEach((c, i) => (i === 1 ? perClientOps[i].push(op) : c.applyMsg(op))));
449
- ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DDD"), ++seq));
450
- ops.push(clients.D.makeOpMessage(clients.D.removeRangeLocal(6, 9), ++seq));
456
+ for (const op of ops.splice(0))
457
+ for (const [i, c] of clients.all.entries())
458
+ if (i === 1) {
459
+ perClientOps[i].push(op);
460
+ }
461
+ else {
462
+ c.applyMsg(op);
463
+ }
464
+ ops.push(clients.D.makeOpMessage(clients.D.insertTextLocal(0, "DDD"), ++seq), clients.D.makeOpMessage(clients.D.removeRangeLocal(6, 9), ++seq));
451
465
  // disconnect B(1) and C(2)
452
- ops
453
- .splice(0)
454
- .forEach((op) => clients.all.forEach((c, i) => i === 1 || i === 2 ? perClientOps[i].push(op) : c.applyMsg(op)));
466
+ for (const op of ops.splice(0))
467
+ for (const [i, c] of clients.all.entries())
468
+ if (i === 1 || i === 2) {
469
+ perClientOps[i].push(op);
470
+ }
471
+ else {
472
+ c.applyMsg(op);
473
+ }
455
474
  // apply changes to disconnected clients
456
475
  const bOp = {
457
476
  op: clients.B.insertTextLocal(1, "b"),
@@ -463,22 +482,24 @@ describe("client.applyMsg", () => {
463
482
  };
464
483
  // TODO: tracking group
465
484
  const { segment, offset } = clients.C.getContainingSegment(5);
466
- (0, assert_1.strict)(segment !== undefined, "expected segment");
485
+ (0, node_assert_1.strict)(segment !== undefined, "expected segment");
467
486
  const ref = clients.C.createLocalReferencePosition(segment, offset, ops_js_1.ReferenceType.Simple, undefined);
468
487
  let beforeSlides = 0;
469
488
  let afterSlides = 0;
470
489
  ref.callbacks = {
471
490
  beforeSlide: (lref) => {
472
- (0, assert_1.strict)(lref === ref, "wrong ref slid");
491
+ (0, node_assert_1.strict)(lref === ref, "wrong ref slid");
473
492
  beforeSlides++;
474
493
  },
475
494
  afterSlide: (lref) => {
476
- (0, assert_1.strict)(lref === ref, "wrong ref slid");
495
+ (0, node_assert_1.strict)(lref === ref, "wrong ref slid");
477
496
  afterSlides++;
478
497
  },
479
498
  };
480
499
  // catch up disconnected clients
481
- perClientOps.forEach((clientOps, i) => clientOps.splice(0).forEach((op) => clients.all[i].applyMsg(op)));
500
+ for (const [i, clientOps] of perClientOps.entries())
501
+ for (const op of clientOps.splice(0))
502
+ clients.all[i].applyMsg(op);
482
503
  // rebase and resubmit disconnected client ops
483
504
  ops.push(clients.B.makeOpMessage(clients.B.regeneratePendingOp(bOp.op, bOp.sg), ++seq));
484
505
  const trackingGroup = new mergeTreeTracking_js_1.TrackingGroup();
@@ -487,18 +508,19 @@ describe("client.applyMsg", () => {
487
508
  trackedSegs.push(seg);
488
509
  trackingGroup.link(seg);
489
510
  });
490
- assert_1.strict.equal(beforeSlides, 0, "should be no slides");
491
- assert_1.strict.equal(afterSlides, 0, "should be no slides");
511
+ node_assert_1.strict.equal(beforeSlides, 0, "should be no slides");
512
+ node_assert_1.strict.equal(afterSlides, 0, "should be no slides");
492
513
  ops.push(clients.C.makeOpMessage(clients.C.regeneratePendingOp(cOp.op, cOp.sg), ++seq));
493
- assert_1.strict.equal(beforeSlides, 1, "should be 1 slide");
494
- assert_1.strict.equal(afterSlides, 1, "should be 1 slide");
495
- trackedSegs.forEach((seg) => {
496
- (0, assert_1.strict)(trackingGroup.has(seg), "Tracking group should still have segment.");
497
- });
514
+ node_assert_1.strict.equal(beforeSlides, 1, "should be 1 slide");
515
+ node_assert_1.strict.equal(afterSlides, 1, "should be 1 slide");
516
+ for (const seg of trackedSegs) {
517
+ (0, node_assert_1.strict)(trackingGroup.has(seg), "Tracking group should still have segment.");
518
+ }
498
519
  // process the resubmitted ops
499
- ops.splice(0).forEach((op) => clients.all.forEach((c) => {
500
- c.applyMsg(op);
501
- }));
520
+ for (const op of ops.splice(0))
521
+ for (const c of clients.all) {
522
+ c.applyMsg(op);
523
+ }
502
524
  logger.validate({ baseText: "DDDDDDcbD" });
503
525
  });
504
526
  describe("updates minSeq", () => {
@@ -509,22 +531,22 @@ describe("client.applyMsg", () => {
509
531
  localClient.startOrUpdateCollaboration(localUserLongId);
510
532
  remoteClient.startOrUpdateCollaboration(remoteUserLongId);
511
533
  ops.push(localClient.makeOpMessage(localClient.insertTextLocal(0, "hello world"), 1, 0, localUserLongId, 0));
512
- ops.splice(0).forEach((op) => {
534
+ for (const op of ops.splice(0)) {
513
535
  localClient.applyMsg(op);
514
536
  remoteClient.applyMsg(op);
515
- });
516
- assert_1.strict.equal(localClient.getCollabWindow().minSeq, 0);
517
- assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 0);
537
+ }
538
+ node_assert_1.strict.equal(localClient.getCollabWindow().minSeq, 0);
539
+ node_assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 0);
518
540
  ops.push(localClient.makeOpMessage(localClient.insertTextLocal(0, "abc"),
519
541
  /* seq */ 17,
520
542
  /* refSeq */ 16, localUserLongId,
521
543
  /* minSeq */ 16));
522
- ops.splice(0).forEach((op) => {
544
+ for (const op of ops.splice(0)) {
523
545
  localClient.applyMsg(op);
524
546
  remoteClient.applyMsg(op);
525
- });
526
- assert_1.strict.equal(localClient.getCollabWindow().minSeq, 16);
527
- assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 16);
547
+ }
548
+ node_assert_1.strict.equal(localClient.getCollabWindow().minSeq, 16);
549
+ node_assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 16);
528
550
  });
529
551
  it("to the minimum of in-flight messages and the acked message's minSeq", () => {
530
552
  let localInFlightRefSeq;
@@ -544,23 +566,23 @@ describe("client.applyMsg", () => {
544
566
  /* seq */ 17,
545
567
  /* refSeq */ 16, remoteUserLongId,
546
568
  /* minSeq */ 16));
547
- ops.splice(0).forEach((op) => {
569
+ for (const op of ops.splice(0)) {
548
570
  localClient.applyMsg(op);
549
571
  remoteClient.applyMsg(op);
550
- });
551
- assert_1.strict.equal(localClient.getCollabWindow().minSeq, 0);
552
- assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 16);
572
+ }
573
+ node_assert_1.strict.equal(localClient.getCollabWindow().minSeq, 0);
574
+ node_assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 16);
553
575
  ops.push(localClient.makeOpMessage(localClient.regeneratePendingOp(resubmittedOp, localClient.peekPendingSegmentGroups()),
554
576
  /* seq */ 18,
555
577
  /* refSeq */ 16, localUserLongId,
556
578
  /* minSeq */ 16));
557
579
  localInFlightRefSeq = 16;
558
- ops.splice(0).forEach((op) => {
580
+ for (const op of ops.splice(0)) {
559
581
  localClient.applyMsg(op);
560
582
  remoteClient.applyMsg(op);
561
- });
562
- assert_1.strict.equal(localClient.getCollabWindow().minSeq, 16);
563
- assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 16);
583
+ }
584
+ node_assert_1.strict.equal(localClient.getCollabWindow().minSeq, 16);
585
+ node_assert_1.strict.equal(remoteClient.getCollabWindow().minSeq, 16);
564
586
  });
565
587
  });
566
588
  });