@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
@@ -31,8 +31,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
31
31
  };
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
33
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
34
- const assert_1 = __importDefault(require("assert"));
35
- const fs = __importStar(require("fs"));
34
+ const node_assert_1 = __importDefault(require("node:assert"));
35
+ const fs = __importStar(require("node:fs"));
36
36
  const opBuilder_js_1 = require("../opBuilder.js");
37
37
  const ops_js_1 = require("../ops.js");
38
38
  const mergeTreeOperationRunner_js_1 = require("./mergeTreeOperationRunner.js");
@@ -49,7 +49,7 @@ describe("MergeTree.Client", () => {
49
49
  originalClient.startOrUpdateCollaboration("A");
50
50
  for (const group of file) {
51
51
  for (const msg of group.msgs) {
52
- (0, assert_1.default)(msg.clientId, "expected clientId to be defined");
52
+ (0, node_assert_1.default)(msg.clientId, "expected clientId to be defined");
53
53
  if (!msgClients.has(msg.clientId)) {
54
54
  const client = await testClient_js_1.TestClient.createFromClientSnapshot(originalClient, msg.clientId);
55
55
  msgClients.set(msg.clientId, { client, msgs: [] });
@@ -59,7 +59,7 @@ describe("MergeTree.Client", () => {
59
59
  for (const group of file) {
60
60
  const logger = new testClientLogger_js_1.TestClientLogger([...msgClients.values()].map((mc) => mc.client));
61
61
  const initialText = logger.validate();
62
- assert_1.default.strictEqual(initialText, group.initialText, "Initial text not as expected");
62
+ node_assert_1.default.strictEqual(initialText, group.initialText, "Initial text not as expected");
63
63
  for (const msg of group.msgs) {
64
64
  const msgClient = msgClients.get(msg.clientId);
65
65
  while (msgClient.msgs.length > 0 &&
@@ -68,15 +68,16 @@ describe("MergeTree.Client", () => {
68
68
  }
69
69
  const op = msg.contents;
70
70
  msgClient.client.localTransaction(op.type === ops_js_1.MergeTreeDeltaType.GROUP ? op : (0, opBuilder_js_1.createGroupOp)(op));
71
- msgClients.forEach((mc) => mc.msgs.push(msg));
71
+ for (const mc of msgClients)
72
+ mc[1].msgs.push(msg);
72
73
  }
73
- msgClients.forEach((mc) => {
74
- while (mc.msgs.length > 0) {
75
- mc.client.applyMsg(mc.msgs.shift());
74
+ for (const mc of msgClients) {
75
+ while (mc[1].msgs.length > 0) {
76
+ mc[1].client.applyMsg(mc[1].msgs.shift());
76
77
  }
77
- });
78
+ }
78
79
  const result = logger.validate();
79
- assert_1.default.strictEqual(result, group.resultText, "Result text not as expected");
80
+ node_assert_1.default.strictEqual(result, group.resultText, "Result text not as expected");
80
81
  logger.dispose();
81
82
  }
82
83
  }).timeout(30 * 10000);
@@ -1 +1 @@
1
- {"version":3,"file":"client.replay.spec.js","sourceRoot":"","sources":["../../src/test/client.replay.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6DAA6D;AAE7D,oDAA4B;AAC5B,uCAAyB;AAIzB,kDAAgD;AAChD,sCAA6D;AAE7D,+EAA+E;AAC/E,mDAA6C;AAC7C,+DAAyD;AAEzD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,WAAW,CAAC,+CAAiB,CAAC,EAAE,CAAC;QAC1D,EAAE,CAAC,UAAU,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,IAAI,GAAkB,IAAI,CAAC,KAAK,CACrC,EAAE,CAAC,YAAY,CAAC,GAAG,+CAAiB,IAAI,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAC9D,CAAC;YACF,MAAM,UAAU,GAAG,IAAI,GAAG,EAGvB,CAAC;YACJ,MAAM,cAAc,GAAG,IAAI,0BAAU,EAAE,CAAC;YACxC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1D,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACvD,cAAc,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;YAC/C,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBAC1B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC9B,IAAA,gBAAM,EAAC,GAAG,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;oBACxD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACnC,MAAM,MAAM,GAAG,MAAM,0BAAU,CAAC,wBAAwB,CACvD,cAAc,EACd,GAAG,CAAC,QAAQ,CACZ,CAAC;wBACF,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;oBACpD,CAAC;gBACF,CAAC;YACF,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,IAAI,sCAAgB,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBACrF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,gBAAM,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,8BAA8B,CAAC,CAAC;gBACnF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAS,CAAE,CAAC;oBACjD,OACC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;wBACzB,GAAG,CAAC,uBAAuB,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,EAC7D,CAAC;wBACF,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAG,CAAC,CAAC;oBACpD,CAAC;oBACD,MAAM,EAAE,GAAG,GAAG,CAAC,QAAwB,CAAC;oBACxC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAChC,EAAE,CAAC,IAAI,KAAK,2BAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,4BAAa,EAAC,EAAE,CAAC,CAC7D,CAAC;oBACF,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBAED,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBACzB,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAG,CAAC,CAAC;oBACtC,CAAC;gBACF,CAAC,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACjC,gBAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAC;gBAC5E,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC;QACF,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IACxB,CAAC;AACF,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport assert from \"assert\";\nimport * as fs from \"fs\";\n\nimport { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\n\nimport { createGroupOp } from \"../opBuilder.js\";\nimport { IMergeTreeOp, MergeTreeDeltaType } from \"../ops.js\";\n\nimport { ReplayGroup, replayResultsPath } from \"./mergeTreeOperationRunner.js\";\nimport { TestClient } from \"./testClient.js\";\nimport { TestClientLogger } from \"./testClientLogger.js\";\n\ndescribe(\"MergeTree.Client\", () => {\n\tfor (const filePath of fs.readdirSync(replayResultsPath)) {\n\t\tit(`Replay ${filePath}`, async () => {\n\t\t\tconst file: ReplayGroup[] = JSON.parse(\n\t\t\t\tfs.readFileSync(`${replayResultsPath}/${filePath}`).toString(),\n\t\t\t);\n\t\t\tconst msgClients = new Map<\n\t\t\t\tstring,\n\t\t\t\t{ client: TestClient; msgs: ISequencedDocumentMessage[] }\n\t\t\t>();\n\t\t\tconst originalClient = new TestClient();\n\t\t\tmsgClients.set(\"A\", { client: originalClient, msgs: [] });\n\t\t\toriginalClient.insertTextLocal(0, file[0].initialText);\n\t\t\toriginalClient.startOrUpdateCollaboration(\"A\");\n\t\t\tfor (const group of file) {\n\t\t\t\tfor (const msg of group.msgs) {\n\t\t\t\t\tassert(msg.clientId, \"expected clientId to be defined\");\n\t\t\t\t\tif (!msgClients.has(msg.clientId)) {\n\t\t\t\t\t\tconst client = await TestClient.createFromClientSnapshot(\n\t\t\t\t\t\t\toriginalClient,\n\t\t\t\t\t\t\tmsg.clientId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmsgClients.set(msg.clientId, { client, msgs: [] });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const group of file) {\n\t\t\t\tconst logger = new TestClientLogger([...msgClients.values()].map((mc) => mc.client));\n\t\t\t\tconst initialText = logger.validate();\n\t\t\t\tassert.strictEqual(initialText, group.initialText, \"Initial text not as expected\");\n\t\t\t\tfor (const msg of group.msgs) {\n\t\t\t\t\tconst msgClient = msgClients.get(msg.clientId!)!;\n\t\t\t\t\twhile (\n\t\t\t\t\t\tmsgClient.msgs.length > 0 &&\n\t\t\t\t\t\tmsg.referenceSequenceNumber > msgClient.client.getCurrentSeq()\n\t\t\t\t\t) {\n\t\t\t\t\t\tmsgClient.client.applyMsg(msgClient.msgs.shift()!);\n\t\t\t\t\t}\n\t\t\t\t\tconst op = msg.contents as IMergeTreeOp;\n\t\t\t\t\tmsgClient.client.localTransaction(\n\t\t\t\t\t\top.type === MergeTreeDeltaType.GROUP ? op : createGroupOp(op),\n\t\t\t\t\t);\n\t\t\t\t\tmsgClients.forEach((mc) => mc.msgs.push(msg));\n\t\t\t\t}\n\n\t\t\t\tmsgClients.forEach((mc) => {\n\t\t\t\t\twhile (mc.msgs.length > 0) {\n\t\t\t\t\t\tmc.client.applyMsg(mc.msgs.shift()!);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconst result = logger.validate();\n\t\t\t\tassert.strictEqual(result, group.resultText, \"Result text not as expected\");\n\t\t\t\tlogger.dispose();\n\t\t\t}\n\t\t}).timeout(30 * 10000);\n\t}\n});\n"]}
1
+ {"version":3,"file":"client.replay.spec.js","sourceRoot":"","sources":["../../src/test/client.replay.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6DAA6D;AAE7D,8DAAiC;AACjC,4CAA8B;AAI9B,kDAAgD;AAChD,sCAA6D;AAE7D,+EAA+E;AAC/E,mDAA6C;AAC7C,+DAAyD;AAEzD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,WAAW,CAAC,+CAAiB,CAAC,EAAE,CAAC;QAC1D,EAAE,CAAC,UAAU,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,IAAI,GAAkB,IAAI,CAAC,KAAK,CACrC,EAAE,CAAC,YAAY,CAAC,GAAG,+CAAiB,IAAI,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAC7C,CAAC;YACnB,MAAM,UAAU,GAAG,IAAI,GAAG,EAGvB,CAAC;YACJ,MAAM,cAAc,GAAG,IAAI,0BAAU,EAAE,CAAC;YACxC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1D,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACvD,cAAc,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;YAC/C,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBAC1B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC9B,IAAA,qBAAM,EAAC,GAAG,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;oBACxD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACnC,MAAM,MAAM,GAAG,MAAM,0BAAU,CAAC,wBAAwB,CACvD,cAAc,EACd,GAAG,CAAC,QAAQ,CACZ,CAAC;wBACF,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;oBACpD,CAAC;gBACF,CAAC;YACF,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,IAAI,sCAAgB,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBACrF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,qBAAM,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,8BAA8B,CAAC,CAAC;gBACnF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAS,CAAE,CAAC;oBACjD,OACC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;wBACzB,GAAG,CAAC,uBAAuB,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,EAC7D,CAAC;wBACF,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAG,CAAC,CAAC;oBACpD,CAAC;oBACD,MAAM,EAAE,GAAG,GAAG,CAAC,QAAwB,CAAC;oBACxC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAChC,EAAE,CAAC,IAAI,KAAK,2BAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,4BAAa,EAAC,EAAE,CAAC,CAC7D,CAAC;oBACF,KAAK,MAAM,EAAE,IAAI,UAAU;wBAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnD,CAAC;gBAED,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;oBAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9B,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAG,CAAC,CAAC;oBAC5C,CAAC;gBACF,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACjC,qBAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAC;gBAC5E,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC;QACF,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IACxB,CAAC;AACF,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport assert from \"node:assert\";\nimport * as fs from \"node:fs\";\n\nimport { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\n\nimport { createGroupOp } from \"../opBuilder.js\";\nimport { IMergeTreeOp, MergeTreeDeltaType } from \"../ops.js\";\n\nimport { ReplayGroup, replayResultsPath } from \"./mergeTreeOperationRunner.js\";\nimport { TestClient } from \"./testClient.js\";\nimport { TestClientLogger } from \"./testClientLogger.js\";\n\ndescribe(\"MergeTree.Client\", () => {\n\tfor (const filePath of fs.readdirSync(replayResultsPath)) {\n\t\tit(`Replay ${filePath}`, async () => {\n\t\t\tconst file: ReplayGroup[] = JSON.parse(\n\t\t\t\tfs.readFileSync(`${replayResultsPath}/${filePath}`).toString(),\n\t\t\t) as ReplayGroup[];\n\t\t\tconst msgClients = new Map<\n\t\t\t\tstring,\n\t\t\t\t{ client: TestClient; msgs: ISequencedDocumentMessage[] }\n\t\t\t>();\n\t\t\tconst originalClient = new TestClient();\n\t\t\tmsgClients.set(\"A\", { client: originalClient, msgs: [] });\n\t\t\toriginalClient.insertTextLocal(0, file[0].initialText);\n\t\t\toriginalClient.startOrUpdateCollaboration(\"A\");\n\t\t\tfor (const group of file) {\n\t\t\t\tfor (const msg of group.msgs) {\n\t\t\t\t\tassert(msg.clientId, \"expected clientId to be defined\");\n\t\t\t\t\tif (!msgClients.has(msg.clientId)) {\n\t\t\t\t\t\tconst client = await TestClient.createFromClientSnapshot(\n\t\t\t\t\t\t\toriginalClient,\n\t\t\t\t\t\t\tmsg.clientId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmsgClients.set(msg.clientId, { client, msgs: [] });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const group of file) {\n\t\t\t\tconst logger = new TestClientLogger([...msgClients.values()].map((mc) => mc.client));\n\t\t\t\tconst initialText = logger.validate();\n\t\t\t\tassert.strictEqual(initialText, group.initialText, \"Initial text not as expected\");\n\t\t\t\tfor (const msg of group.msgs) {\n\t\t\t\t\tconst msgClient = msgClients.get(msg.clientId!)!;\n\t\t\t\t\twhile (\n\t\t\t\t\t\tmsgClient.msgs.length > 0 &&\n\t\t\t\t\t\tmsg.referenceSequenceNumber > msgClient.client.getCurrentSeq()\n\t\t\t\t\t) {\n\t\t\t\t\t\tmsgClient.client.applyMsg(msgClient.msgs.shift()!);\n\t\t\t\t\t}\n\t\t\t\t\tconst op = msg.contents as IMergeTreeOp;\n\t\t\t\t\tmsgClient.client.localTransaction(\n\t\t\t\t\t\top.type === MergeTreeDeltaType.GROUP ? op : createGroupOp(op),\n\t\t\t\t\t);\n\t\t\t\t\tfor (const mc of msgClients) mc[1].msgs.push(msg);\n\t\t\t\t}\n\n\t\t\t\tfor (const mc of msgClients) {\n\t\t\t\t\twhile (mc[1].msgs.length > 0) {\n\t\t\t\t\t\tmc[1].client.applyMsg(mc[1].msgs.shift()!);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst result = logger.validate();\n\t\t\t\tassert.strictEqual(result, group.resultText, \"Result text not as expected\");\n\t\t\t\tlogger.dispose();\n\t\t\t}\n\t\t}).timeout(30 * 10000);\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 mergeTreeNodes_js_1 = require("../mergeTreeNodes.js");
11
11
  const ops_js_1 = require("../ops.js");
@@ -32,7 +32,7 @@ describe("client.rollback", () => {
32
32
  it("Should rollback insert on empty string", () => {
33
33
  client.insertTextLocal(0, "abcd");
34
34
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
35
- assert_1.strict.equal(client.getText(), "");
35
+ node_assert_1.strict.equal(client.getText(), "");
36
36
  });
37
37
  it("Should rollback insert marker", () => {
38
38
  client.insertTextLocal(0, "abc");
@@ -40,19 +40,19 @@ describe("client.rollback", () => {
40
40
  [mergeTreeNodes_js_1.reservedMarkerIdKey]: "markerId",
41
41
  });
42
42
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
43
- assert_1.strict.equal(client.getText(), "abc");
43
+ node_assert_1.strict.equal(client.getText(), "abc");
44
44
  const marker = client.getMarkerFromId("markerId");
45
- assert_1.strict.equal(marker, undefined);
45
+ node_assert_1.strict.equal(marker, undefined);
46
46
  });
47
47
  it("Should rollback insert and validate the partial lengths", () => {
48
48
  client.insertTextLocal(0, "ghi");
49
49
  client.insertTextLocal(0, "def");
50
50
  client.insertTextLocal(0, "abc");
51
51
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
52
- assert_1.strict.equal(client.getText(), "defghi");
52
+ node_assert_1.strict.equal(client.getText(), "defghi");
53
53
  (0, testUtils_js_1.validatePartialLengths)(client.getClientId(), client.mergeTree);
54
54
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
55
- assert_1.strict.equal(client.getText(), "ghi");
55
+ node_assert_1.strict.equal(client.getText(), "ghi");
56
56
  (0, testUtils_js_1.validatePartialLengths)(client.getClientId(), client.mergeTree);
57
57
  });
58
58
  it("Should rollback multiple inserts with split segments", () => {
@@ -61,7 +61,7 @@ describe("client.rollback", () => {
61
61
  client.insertTextLocal(2, "c");
62
62
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
63
63
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
64
- assert_1.strict.equal(client.getText(), "aefg");
64
+ node_assert_1.strict.equal(client.getText(), "aefg");
65
65
  (0, testUtils_js_1.validatePartialLengths)(client.getClientId(), client.mergeTree);
66
66
  });
67
67
  it("Should zamboni rolled back insert", () => {
@@ -74,7 +74,7 @@ describe("client.rollback", () => {
74
74
  for (const c of "hello world") {
75
75
  client.applyMsg(client.makeOpMessage(client.insertTextLocal(client.getLength(), c), client.getCurrentSeq() + 1, client.getCurrentSeq(), undefined, client.getCurrentSeq()));
76
76
  }
77
- assert_1.strict.equal(segment.parent, undefined);
77
+ node_assert_1.strict.equal(segment.parent, undefined);
78
78
  });
79
79
  it("Should rollback annotate marker", () => {
80
80
  client.insertMarkerLocal(0, ops_js_1.ReferenceType.Simple, {
@@ -84,7 +84,7 @@ describe("client.rollback", () => {
84
84
  client.annotateMarker(marker, { foo: "bar" });
85
85
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
86
86
  const properties = marker.getProperties();
87
- assert_1.strict.equal(properties?.foo, undefined);
87
+ node_assert_1.strict.equal(properties?.foo, undefined);
88
88
  });
89
89
  it("Should rollback annotate marker overwriting property", () => {
90
90
  client.insertMarkerLocal(0, ops_js_1.ReferenceType.Simple, {
@@ -95,7 +95,7 @@ describe("client.rollback", () => {
95
95
  client.annotateMarker(marker, { foo: "baz" });
96
96
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
97
97
  const properties = marker.getProperties();
98
- assert_1.strict.equal(properties?.foo, "bar");
98
+ node_assert_1.strict.equal(properties?.foo, "bar");
99
99
  });
100
100
  it("Should rollback annotate marker removing property", () => {
101
101
  client.insertMarkerLocal(0, ops_js_1.ReferenceType.Simple, {
@@ -103,10 +103,11 @@ describe("client.rollback", () => {
103
103
  foo: "bar",
104
104
  });
105
105
  const marker = client.getMarkerFromId("markerId");
106
+ // eslint-disable-next-line unicorn/no-null
106
107
  client.annotateMarker(marker, { foo: null });
107
108
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
108
109
  const properties = marker.getProperties();
109
- assert_1.strict.equal(properties?.foo, "bar");
110
+ node_assert_1.strict.equal(properties?.foo, "bar");
110
111
  });
111
112
  it("Should rollback annotate marker rewrite", () => {
112
113
  client.insertMarkerLocal(0, ops_js_1.ReferenceType.Simple, {
@@ -117,8 +118,8 @@ describe("client.rollback", () => {
117
118
  client.annotateMarker(marker, { [mergeTreeNodes_js_1.reservedMarkerIdKey]: "markerId", abc: "def" });
118
119
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
119
120
  const properties = marker.getProperties();
120
- assert_1.strict.equal(properties?.foo, "bar");
121
- assert_1.strict.equal(properties?.abc, undefined);
121
+ node_assert_1.strict.equal(properties?.foo, "bar");
122
+ node_assert_1.strict.equal(properties?.abc, undefined);
122
123
  });
123
124
  it("Should rollback annotate rewrite with explicit null", () => {
124
125
  client.insertMarkerLocal(0, ops_js_1.ReferenceType.Simple, {
@@ -129,12 +130,13 @@ describe("client.rollback", () => {
129
130
  client.annotateMarker(marker, {
130
131
  [mergeTreeNodes_js_1.reservedMarkerIdKey]: "markerId",
131
132
  abc: "def",
133
+ // eslint-disable-next-line unicorn/no-null
132
134
  foo: null,
133
135
  });
134
136
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
135
137
  const properties = marker.getProperties();
136
- assert_1.strict.equal(properties?.foo, "bar");
137
- assert_1.strict.equal(properties?.abc, undefined);
138
+ node_assert_1.strict.equal(properties?.foo, "bar");
139
+ node_assert_1.strict.equal(properties?.abc, undefined);
138
140
  });
139
141
  it("Should rollback annotate causes split string", () => {
140
142
  client.insertTextLocal(0, "abcdefg");
@@ -142,7 +144,7 @@ describe("client.rollback", () => {
142
144
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
143
145
  for (let i = 0; i < 4; i++) {
144
146
  const props = client.getPropertiesAtPosition(i);
145
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
147
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
146
148
  }
147
149
  });
148
150
  it("Should rollback annotate over split string", () => {
@@ -152,7 +154,7 @@ describe("client.rollback", () => {
152
154
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
153
155
  for (let i = 0; i < 7; i++) {
154
156
  const props = client.getPropertiesAtPosition(i);
155
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
157
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
156
158
  }
157
159
  });
158
160
  it("Should rollback annotate that later gets split", () => {
@@ -161,10 +163,10 @@ describe("client.rollback", () => {
161
163
  client.insertTextLocal(1, "cde");
162
164
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
163
165
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
164
- assert_1.strict.equal(client.getText(), "abfg");
166
+ node_assert_1.strict.equal(client.getText(), "abfg");
165
167
  for (let i = 0; i < 4; i++) {
166
168
  const props = client.getPropertiesAtPosition(i);
167
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
169
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
168
170
  }
169
171
  });
170
172
  it("Should rollback annotates with multiple previous property sets", () => {
@@ -175,32 +177,32 @@ describe("client.rollback", () => {
175
177
  client.insertTextLocal(1, "b");
176
178
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
177
179
  let props = client.getPropertiesAtPosition(3);
178
- (0, assert_1.strict)(props !== undefined && props.foo === "two");
180
+ (0, node_assert_1.strict)(props !== undefined && props.foo === "two");
179
181
  for (let i = 0; i < 3; i++) {
180
182
  props = client.getPropertiesAtPosition(i);
181
- (0, assert_1.strict)(props !== undefined && props.foo === "three");
183
+ (0, node_assert_1.strict)(props !== undefined && props.foo === "three");
182
184
  }
183
185
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
184
186
  for (let i = 0; i < 2; i++) {
185
187
  props = client.getPropertiesAtPosition(i);
186
- (0, assert_1.strict)(props !== undefined && props.foo === "one");
188
+ (0, node_assert_1.strict)(props !== undefined && props.foo === "one");
187
189
  }
188
190
  for (let i = 2; i < 4; i++) {
189
191
  props = client.getPropertiesAtPosition(i);
190
- (0, assert_1.strict)(props !== undefined && props.foo === "two");
192
+ (0, node_assert_1.strict)(props !== undefined && props.foo === "two");
191
193
  }
192
194
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
193
195
  props = client.getPropertiesAtPosition(3);
194
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
196
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
195
197
  for (let i = 0; i < 3; i++) {
196
198
  props = client.getPropertiesAtPosition(i);
197
- (0, assert_1.strict)(props !== undefined && props.foo === "one");
199
+ (0, node_assert_1.strict)(props !== undefined && props.foo === "one");
198
200
  }
199
201
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
200
- assert_1.strict.equal(client.getText(), "acde");
202
+ node_assert_1.strict.equal(client.getText(), "acde");
201
203
  for (let i = 0; i < 4; i++) {
202
204
  props = client.getPropertiesAtPosition(i);
203
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
205
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
204
206
  }
205
207
  });
206
208
  it("Should rollback annotate with same prop", () => {
@@ -211,10 +213,10 @@ describe("client.rollback", () => {
211
213
  for (let i = 0; i < 5; i++) {
212
214
  const props = client.getPropertiesAtPosition(i);
213
215
  if (i === 2) {
214
- assert_1.strict.equal(props?.foo, "bar");
216
+ node_assert_1.strict.equal(props?.foo, "bar");
215
217
  }
216
218
  else {
217
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
219
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
218
220
  }
219
221
  }
220
222
  });
@@ -228,26 +230,26 @@ describe("client.rollback", () => {
228
230
  for (const c of "hello world") {
229
231
  client.applyMsg(client.makeOpMessage(client.insertTextLocal(client.getLength(), c), client.getCurrentSeq() + 1, client.getCurrentSeq(), undefined, client.getCurrentSeq()));
230
232
  }
231
- assert_1.strict.equal(segment.parent, undefined);
233
+ node_assert_1.strict.equal(segment.parent, undefined);
232
234
  });
233
235
  it("Should rollback delete on single segment", () => {
234
236
  client.insertTextLocal(0, "abcd");
235
237
  client.removeRangeLocal(0, 4);
236
238
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
237
- assert_1.strict.equal(client.getText(), "abcd");
239
+ node_assert_1.strict.equal(client.getText(), "abcd");
238
240
  });
239
241
  it("Should rollback delete which causes split segments", () => {
240
242
  client.insertTextLocal(0, "abcde");
241
243
  client.removeRangeLocal(1, 4);
242
244
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
243
- assert_1.strict.equal(client.getText(), "abcde");
245
+ node_assert_1.strict.equal(client.getText(), "abcde");
244
246
  });
245
247
  it("Should rollback delete across split segments", () => {
246
248
  client.insertTextLocal(0, "abcde");
247
249
  client.annotateRangeLocal(2, 3, { foo: "bar" });
248
250
  client.removeRangeLocal(1, 4);
249
251
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
250
- assert_1.strict.equal(client.getText(), "abcde");
252
+ node_assert_1.strict.equal(client.getText(), "abcde");
251
253
  });
252
254
  it("Should rollback delete and update blocks", () => {
253
255
  const text = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()";
@@ -258,8 +260,8 @@ describe("client.rollback", () => {
258
260
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
259
261
  // The insertion position calculation will be wrong if the blocks aren't updated correctly
260
262
  client.insertTextLocal(text.length - 1, "+");
261
- const expectedText = `${text.substring(0, text.length - 1)}+${text[text.length - 1]}`;
262
- assert_1.strict.equal(client.getText(), expectedText, client.getText());
263
+ const expectedText = `${text.slice(0, Math.max(0, text.length - 1))}+${text[text.length - 1]}`;
264
+ node_assert_1.strict.equal(client.getText(), expectedText, client.getText());
263
265
  });
264
266
  it("Should rollback delete and restore local references", () => {
265
267
  client.insertTextLocal(0, "efg");
@@ -273,17 +275,17 @@ describe("client.rollback", () => {
273
275
  const refStay = client.createLocalReferencePosition(segInfo3.segment, 1, ops_js_1.ReferenceType.StayOnRemove, undefined);
274
276
  client.removeRangeLocal(0, 7);
275
277
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
276
- assert_1.strict.equal(client.getText(), "abcdefg");
278
+ node_assert_1.strict.equal(client.getText(), "abcdefg");
277
279
  const segInfo1After = client.getContainingSegment(2);
278
- assert_1.strict.notEqual(segInfo1After, undefined);
279
- assert_1.strict.notEqual(segInfo1After.segment?.localRefs, undefined);
280
- (0, assert_1.strict)(segInfo1After.segment?.localRefs.has(ref1));
281
- (0, assert_1.strict)(segInfo1After.segment?.localRefs.has(refSlide));
280
+ node_assert_1.strict.notEqual(segInfo1After, undefined);
281
+ node_assert_1.strict.notEqual(segInfo1After.segment?.localRefs, undefined);
282
+ (0, node_assert_1.strict)(segInfo1After.segment?.localRefs.has(ref1));
283
+ (0, node_assert_1.strict)(segInfo1After.segment?.localRefs.has(refSlide));
282
284
  const segInfo3After = client.getContainingSegment(5);
283
- assert_1.strict.notEqual(segInfo3After, undefined);
284
- assert_1.strict.notEqual(segInfo3After.segment?.localRefs, undefined);
285
- (0, assert_1.strict)(segInfo3After.segment?.localRefs.has(ref2));
286
- (0, assert_1.strict)(segInfo3After.segment?.localRefs.has(refStay));
285
+ node_assert_1.strict.notEqual(segInfo3After, undefined);
286
+ node_assert_1.strict.notEqual(segInfo3After.segment?.localRefs, undefined);
287
+ (0, node_assert_1.strict)(segInfo3After.segment?.localRefs.has(ref2));
288
+ (0, node_assert_1.strict)(segInfo3After.segment?.localRefs.has(refStay));
287
289
  });
288
290
  it("Should zamboni rolled back remove", () => {
289
291
  client.applyMsg(client.makeOpMessage(client.insertTextLocal(0, "abcde", { color: "red" }), client.getCurrentSeq() + 1, client.getCurrentSeq(), undefined, client.getCurrentSeq()));
@@ -295,7 +297,7 @@ describe("client.rollback", () => {
295
297
  for (const c of "hello world") {
296
298
  client.applyMsg(client.makeOpMessage(client.insertTextLocal(client.getLength(), c), client.getCurrentSeq() + 1, client.getCurrentSeq(), undefined, client.getCurrentSeq()));
297
299
  }
298
- assert_1.strict.equal(segment.parent, undefined);
300
+ node_assert_1.strict.equal(segment.parent, undefined);
299
301
  });
300
302
  it("Should rollback multiple overlapping edits", () => {
301
303
  client.insertTextLocal(0, "abcdefg");
@@ -303,25 +305,25 @@ describe("client.rollback", () => {
303
305
  client.annotateRangeLocal(2, 5, { foo: "bar" });
304
306
  client.removeRangeLocal(3, 7);
305
307
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
306
- assert_1.strict.equal(client.getText(), "abc123defg");
308
+ node_assert_1.strict.equal(client.getText(), "abc123defg");
307
309
  for (let i = 0; i < client.getText().length; i++) {
308
310
  const props = client.getPropertiesAtPosition(i);
309
311
  if (i >= 2 && i < 5) {
310
- assert_1.strict.equal(props?.foo, "bar");
312
+ node_assert_1.strict.equal(props?.foo, "bar");
311
313
  }
312
314
  else {
313
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
315
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
314
316
  }
315
317
  }
316
318
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
317
319
  for (let i = 0; i < client.getText().length; i++) {
318
320
  const props = client.getPropertiesAtPosition(i);
319
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
321
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
320
322
  }
321
323
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
322
- assert_1.strict.equal(client.getText(), "abcdefg");
324
+ node_assert_1.strict.equal(client.getText(), "abcdefg");
323
325
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
324
- assert_1.strict.equal(client.getText(), "");
326
+ node_assert_1.strict.equal(client.getText(), "");
325
327
  });
326
328
  it("Should rollback multiple removes across split segments", () => {
327
329
  client.insertTextLocal(0, "abcde");
@@ -331,43 +333,43 @@ describe("client.rollback", () => {
331
333
  client.removeRangeLocal(3, 7);
332
334
  client.removeRangeLocal(2, 4);
333
335
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
334
- assert_1.strict.equal(client.getText(), "abye");
336
+ node_assert_1.strict.equal(client.getText(), "abye");
335
337
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
336
- assert_1.strict.equal(client.getText(), "abyz23de");
338
+ node_assert_1.strict.equal(client.getText(), "abyz23de");
337
339
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
338
- assert_1.strict.equal(client.getText(), "abc1xyz23de");
340
+ node_assert_1.strict.equal(client.getText(), "abc1xyz23de");
339
341
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
340
- assert_1.strict.equal(client.getText(), "abc123de");
342
+ node_assert_1.strict.equal(client.getText(), "abc123de");
341
343
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
342
- assert_1.strict.equal(client.getText(), "abcde");
344
+ node_assert_1.strict.equal(client.getText(), "abcde");
343
345
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
344
- assert_1.strict.equal(client.getText(), "");
346
+ node_assert_1.strict.equal(client.getText(), "");
345
347
  });
346
348
  it("Should annotate a previously removed range", () => {
347
349
  client.insertTextLocal(0, "abcdefg");
348
350
  client.insertTextLocal(3, "123");
349
351
  client.removeRangeLocal(2, 8);
350
352
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
351
- assert_1.strict.equal(client.getText(), "abc123defg");
353
+ node_assert_1.strict.equal(client.getText(), "abc123defg");
352
354
  client.annotateRangeLocal(2, 8, { foo: "bar" });
353
355
  for (let i = 0; i < client.getText().length; i++) {
354
356
  const props = client.getPropertiesAtPosition(i);
355
357
  if (i >= 2 && i < 8) {
356
- assert_1.strict.equal(props?.foo, "bar");
358
+ node_assert_1.strict.equal(props?.foo, "bar");
357
359
  }
358
360
  else {
359
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
361
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
360
362
  }
361
363
  }
362
364
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
363
365
  for (let i = 0; i < client.getText().length; i++) {
364
366
  const props = client.getPropertiesAtPosition(i);
365
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
367
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
366
368
  }
367
369
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
368
- assert_1.strict.equal(client.getText(), "abcdefg");
370
+ node_assert_1.strict.equal(client.getText(), "abcdefg");
369
371
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
370
- assert_1.strict.equal(client.getText(), "");
372
+ node_assert_1.strict.equal(client.getText(), "");
371
373
  });
372
374
  it("Should rollback overlapping annotates and remove", () => {
373
375
  client.insertTextLocal(0, "abc123defg");
@@ -375,44 +377,44 @@ describe("client.rollback", () => {
375
377
  client.annotateRangeLocal(5, 10, { foo: "two" });
376
378
  client.removeRangeLocal(4, 8);
377
379
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
378
- assert_1.strict.equal(client.getPropertiesAtPosition(4)?.foo, "one");
379
- assert_1.strict.equal(client.getPropertiesAtPosition(5)?.foo, "two");
380
+ node_assert_1.strict.equal(client.getPropertiesAtPosition(4)?.foo, "one");
381
+ node_assert_1.strict.equal(client.getPropertiesAtPosition(5)?.foo, "two");
380
382
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
381
383
  for (let i = 0; i < client.getText().length; i++) {
382
384
  const props = client.getPropertiesAtPosition(i);
383
385
  if (i >= 0 && i < 6) {
384
- assert_1.strict.equal(props?.foo, "one");
386
+ node_assert_1.strict.equal(props?.foo, "one");
385
387
  }
386
388
  else {
387
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
389
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
388
390
  }
389
391
  }
390
392
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.ANNOTATE }, client.peekPendingSegmentGroups());
391
393
  for (let i = 0; i < client.getText().length; i++) {
392
394
  const props = client.getPropertiesAtPosition(i);
393
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
395
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
394
396
  }
395
397
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
396
- assert_1.strict.equal(client.getText(), "");
398
+ node_assert_1.strict.equal(client.getText(), "");
397
399
  });
398
400
  it("Should function properly after rollback with local ops", () => {
399
401
  client.insertTextLocal(0, "abcdefg");
400
402
  client.removeRangeLocal(1, 5);
401
403
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
402
404
  client.removeRangeLocal(2, 4);
403
- assert_1.strict.equal(client.getText(), "abefg");
405
+ node_assert_1.strict.equal(client.getText(), "abefg");
404
406
  client.annotateRangeLocal(2, 5, { foo: "bar" });
405
407
  for (let i = 0; i < client.getText().length; i++) {
406
408
  const props = client.getPropertiesAtPosition(i);
407
409
  if (i >= 2 && i < 5) {
408
- assert_1.strict.equal(props?.foo, "bar");
410
+ node_assert_1.strict.equal(props?.foo, "bar");
409
411
  }
410
412
  else {
411
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
413
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
412
414
  }
413
415
  }
414
416
  client.insertTextLocal(1, "123");
415
- assert_1.strict.equal(client.getText(), "a123befg");
417
+ node_assert_1.strict.equal(client.getText(), "a123befg");
416
418
  });
417
419
  it("Should function properly after rollback with external ops", () => {
418
420
  const remoteClient = new testClient_js_1.TestClient();
@@ -422,35 +424,36 @@ describe("client.rollback", () => {
422
424
  const logger = new testClientLogger_js_1.TestClientLogger(clients);
423
425
  logger.validate();
424
426
  let msg = remoteClient.makeOpMessage(remoteClient.insertTextLocal(0, "12345"), ++seq);
425
- clients.forEach((c) => c.applyMsg(msg));
427
+ for (const c of clients)
428
+ c.applyMsg(msg);
426
429
  logger.validate({ baseText: "12345" });
427
430
  client.removeRangeLocal(1, 4);
428
431
  client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
429
432
  msg = remoteClient.makeOpMessage(remoteClient.removeRangeLocal(2, 3), ++seq);
430
- clients.forEach((c) => {
433
+ for (const c of clients) {
431
434
  c.applyMsg(msg);
432
- });
435
+ }
433
436
  logger.validate({ baseText: "1245" });
434
437
  msg = remoteClient.makeOpMessage(remoteClient.annotateRangeLocal(0, 3, { foo: "bar" }), ++seq);
435
- clients.forEach((c) => {
438
+ for (const c of clients) {
436
439
  c.applyMsg(msg);
437
- });
440
+ }
438
441
  logger.validate({ baseText: "1245" });
439
- clients.forEach((c) => {
442
+ for (const c of clients) {
440
443
  for (let i = 0; i < c.getText().length; i++) {
441
444
  const props = c.getPropertiesAtPosition(i);
442
445
  if (i >= 0 && i < 3) {
443
- assert_1.strict.equal(props?.foo, "bar");
446
+ node_assert_1.strict.equal(props?.foo, "bar");
444
447
  }
445
448
  else {
446
- (0, assert_1.strict)(props === undefined || props.foo === undefined);
449
+ (0, node_assert_1.strict)(props === undefined || props.foo === undefined);
447
450
  }
448
451
  }
449
- });
452
+ }
450
453
  msg = remoteClient.makeOpMessage(remoteClient.insertTextLocal(3, "abc"), ++seq);
451
- clients.forEach((c) => {
454
+ for (const c of clients) {
452
455
  c.applyMsg(msg);
453
- });
456
+ }
454
457
  logger.validate({ baseText: "124abc5" });
455
458
  });
456
459
  });