@fluidframework/merge-tree 2.0.0-rc.1.0.3 → 2.0.0-rc.2.0.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 (770) hide show
  1. package/{.eslintrc.js → .eslintrc.cjs} +4 -1
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +4 -0
  4. package/api-extractor-cjs.json +8 -0
  5. package/api-extractor-lint.json +1 -1
  6. package/api-extractor.json +1 -9
  7. package/api-report/merge-tree.api.md +6 -12
  8. package/dist/MergeTreeTextHelper.d.ts +2 -2
  9. package/dist/MergeTreeTextHelper.d.ts.map +1 -1
  10. package/dist/MergeTreeTextHelper.js +3 -3
  11. package/dist/MergeTreeTextHelper.js.map +1 -1
  12. package/dist/attributionCollection.d.ts +1 -1
  13. package/dist/attributionCollection.d.ts.map +1 -1
  14. package/dist/attributionCollection.js.map +1 -1
  15. package/dist/attributionPolicy.d.ts +1 -1
  16. package/dist/attributionPolicy.d.ts.map +1 -1
  17. package/dist/attributionPolicy.js +15 -15
  18. package/dist/attributionPolicy.js.map +1 -1
  19. package/dist/client.d.ts +31 -12
  20. package/dist/client.d.ts.map +1 -1
  21. package/dist/client.js +103 -92
  22. package/dist/client.js.map +1 -1
  23. package/dist/collections/index.d.ts +2 -2
  24. package/dist/collections/index.d.ts.map +1 -1
  25. package/dist/collections/index.js +6 -6
  26. package/dist/collections/index.js.map +1 -1
  27. package/dist/endOfTreeSegment.d.ts +3 -3
  28. package/dist/endOfTreeSegment.d.ts.map +1 -1
  29. package/dist/endOfTreeSegment.js +8 -8
  30. package/dist/endOfTreeSegment.js.map +1 -1
  31. package/dist/index.d.ts +20 -20
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +71 -71
  34. package/dist/index.js.map +1 -1
  35. package/dist/localReference.d.ts +9 -39
  36. package/dist/localReference.d.ts.map +1 -1
  37. package/dist/localReference.js +29 -24
  38. package/dist/localReference.js.map +1 -1
  39. package/dist/merge-tree-alpha.d.ts +28 -450
  40. package/dist/merge-tree-beta.d.ts +0 -438
  41. package/dist/merge-tree-public.d.ts +0 -438
  42. package/dist/merge-tree-untrimmed.d.ts +28 -787
  43. package/dist/mergeTree.d.ts +11 -19
  44. package/dist/mergeTree.d.ts.map +1 -1
  45. package/dist/mergeTree.js +201 -189
  46. package/dist/mergeTree.js.map +1 -1
  47. package/dist/mergeTreeDeltaCallback.d.ts +3 -7
  48. package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
  49. package/dist/mergeTreeDeltaCallback.js.map +1 -1
  50. package/dist/mergeTreeNodeWalk.d.ts +1 -1
  51. package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
  52. package/dist/mergeTreeNodeWalk.js.map +1 -1
  53. package/dist/mergeTreeNodes.d.ts +17 -14
  54. package/dist/mergeTreeNodes.d.ts.map +1 -1
  55. package/dist/mergeTreeNodes.js +32 -32
  56. package/dist/mergeTreeNodes.js.map +1 -1
  57. package/dist/mergeTreeTracking.d.ts +2 -2
  58. package/dist/mergeTreeTracking.d.ts.map +1 -1
  59. package/dist/mergeTreeTracking.js +2 -2
  60. package/dist/mergeTreeTracking.js.map +1 -1
  61. package/dist/opBuilder.d.ts +3 -3
  62. package/dist/opBuilder.d.ts.map +1 -1
  63. package/dist/opBuilder.js +7 -7
  64. package/dist/opBuilder.js.map +1 -1
  65. package/dist/package.json +3 -0
  66. package/dist/partialLengths.d.ts +5 -5
  67. package/dist/partialLengths.d.ts.map +1 -1
  68. package/dist/partialLengths.js +29 -29
  69. package/dist/partialLengths.js.map +1 -1
  70. package/dist/referencePositions.d.ts +4 -4
  71. package/dist/referencePositions.d.ts.map +1 -1
  72. package/dist/referencePositions.js +2 -2
  73. package/dist/referencePositions.js.map +1 -1
  74. package/dist/revertibles.d.ts +7 -7
  75. package/dist/revertibles.d.ts.map +1 -1
  76. package/dist/revertibles.js +39 -39
  77. package/dist/revertibles.js.map +1 -1
  78. package/dist/segmentGroupCollection.d.ts +1 -1
  79. package/dist/segmentGroupCollection.d.ts.map +1 -1
  80. package/dist/segmentGroupCollection.js +3 -3
  81. package/dist/segmentGroupCollection.js.map +1 -1
  82. package/dist/segmentPropertiesManager.d.ts +2 -2
  83. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  84. package/dist/segmentPropertiesManager.js +8 -8
  85. package/dist/segmentPropertiesManager.js.map +1 -1
  86. package/dist/snapshotChunks.d.ts +3 -3
  87. package/dist/snapshotChunks.d.ts.map +1 -1
  88. package/dist/snapshotChunks.js +5 -5
  89. package/dist/snapshotChunks.js.map +1 -1
  90. package/dist/snapshotLoader.d.ts +3 -3
  91. package/dist/snapshotLoader.d.ts.map +1 -1
  92. package/dist/snapshotLoader.js +19 -19
  93. package/dist/snapshotLoader.js.map +1 -1
  94. package/dist/snapshotV1.d.ts +3 -3
  95. package/dist/snapshotV1.d.ts.map +1 -1
  96. package/dist/snapshotV1.js +35 -18
  97. package/dist/snapshotV1.js.map +1 -1
  98. package/dist/snapshotlegacy.d.ts +2 -2
  99. package/dist/snapshotlegacy.d.ts.map +1 -1
  100. package/dist/snapshotlegacy.js +22 -10
  101. package/dist/snapshotlegacy.js.map +1 -1
  102. package/dist/sortedSegmentSet.d.ts +3 -3
  103. package/dist/sortedSegmentSet.d.ts.map +1 -1
  104. package/dist/sortedSegmentSet.js +7 -5
  105. package/dist/sortedSegmentSet.js.map +1 -1
  106. package/dist/test/Insertion.perf.spec.js +15 -15
  107. package/dist/test/Insertion.perf.spec.js.map +1 -1
  108. package/dist/test/PartialLengths.perf.spec.js +13 -13
  109. package/dist/test/PartialLengths.perf.spec.js.map +1 -1
  110. package/dist/test/Removal.perf.spec.js +25 -25
  111. package/dist/test/Removal.perf.spec.js.map +1 -1
  112. package/dist/test/Snapshot.perf.spec.js +3 -3
  113. package/dist/test/Snapshot.perf.spec.js.map +1 -1
  114. package/dist/test/attributionCollection.perf.spec.js +9 -9
  115. package/dist/test/attributionCollection.perf.spec.js.map +1 -1
  116. package/dist/test/attributionCollection.spec.js +46 -46
  117. package/dist/test/attributionCollection.spec.js.map +1 -1
  118. package/dist/test/attributionPolicy.spec.js +13 -13
  119. package/dist/test/attributionPolicy.spec.js.map +1 -1
  120. package/dist/test/{beastTest.d.ts → beastTest.spec.d.ts} +3 -3
  121. package/dist/test/beastTest.spec.d.ts.map +1 -0
  122. package/dist/test/{beastTest.js → beastTest.spec.js} +120 -119
  123. package/dist/test/beastTest.spec.js.map +1 -0
  124. package/dist/test/client.annotateMarker.spec.js +13 -13
  125. package/dist/test/client.annotateMarker.spec.js.map +1 -1
  126. package/dist/test/{client.apis.d.ts → client.apis.spec.d.ts} +1 -1
  127. package/dist/test/client.apis.spec.d.ts.map +1 -0
  128. package/dist/test/{client.apis.js → client.apis.spec.js} +8 -8
  129. package/dist/test/client.apis.spec.js.map +1 -0
  130. package/dist/test/client.applyMsg.spec.js +106 -43
  131. package/dist/test/client.applyMsg.spec.js.map +1 -1
  132. package/dist/test/client.applyStashedOpFarm.spec.d.ts +1 -1
  133. package/dist/test/client.applyStashedOpFarm.spec.d.ts.map +1 -1
  134. package/dist/test/client.applyStashedOpFarm.spec.js +33 -21
  135. package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
  136. package/dist/test/client.attributionFarm.spec.d.ts +1 -1
  137. package/dist/test/client.attributionFarm.spec.d.ts.map +1 -1
  138. package/dist/test/client.attributionFarm.spec.js +13 -13
  139. package/dist/test/client.attributionFarm.spec.js.map +1 -1
  140. package/dist/test/client.conflictFarm.spec.d.ts +1 -1
  141. package/dist/test/client.conflictFarm.spec.d.ts.map +1 -1
  142. package/dist/test/client.conflictFarm.spec.js +9 -9
  143. package/dist/test/client.conflictFarm.spec.js.map +1 -1
  144. package/dist/test/client.getPosition.spec.js +4 -4
  145. package/dist/test/client.getPosition.spec.js.map +1 -1
  146. package/dist/test/client.localReference.spec.js +140 -109
  147. package/dist/test/client.localReference.spec.js.map +1 -1
  148. package/dist/test/client.localReferenceFarm.spec.js +18 -18
  149. package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
  150. package/dist/test/client.rebasePosition.spec.js +2 -2
  151. package/dist/test/client.rebasePosition.spec.js.map +1 -1
  152. package/dist/test/client.reconnectFarm.spec.d.ts +1 -1
  153. package/dist/test/client.reconnectFarm.spec.d.ts.map +1 -1
  154. package/dist/test/client.reconnectFarm.spec.js +10 -10
  155. package/dist/test/client.reconnectFarm.spec.js.map +1 -1
  156. package/dist/test/client.replay.spec.js +11 -11
  157. package/dist/test/client.replay.spec.js.map +1 -1
  158. package/dist/test/client.rollback.spec.js +83 -83
  159. package/dist/test/client.rollback.spec.js.map +1 -1
  160. package/dist/test/client.rollbackFarm.spec.js +9 -9
  161. package/dist/test/client.rollbackFarm.spec.js.map +1 -1
  162. package/dist/test/client.searchForMarker.spec.js +137 -137
  163. package/dist/test/client.searchForMarker.spec.js.map +1 -1
  164. package/dist/test/client.walkSegments.spec.js +2 -2
  165. package/dist/test/client.walkSegments.spec.js.map +1 -1
  166. package/dist/test/collections.list.spec.js +4 -4
  167. package/dist/test/collections.list.spec.js.map +1 -1
  168. package/dist/test/createInsertOnlyAttributionPolicy.spec.js +4 -4
  169. package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
  170. package/dist/test/dirname.cjs +16 -0
  171. package/dist/test/dirname.cjs.map +1 -0
  172. package/dist/test/dirname.d.cts +6 -0
  173. package/dist/test/dirname.d.cts.map +1 -0
  174. package/dist/test/index.d.ts +8 -8
  175. package/dist/test/index.d.ts.map +1 -1
  176. package/dist/test/index.js +82 -81
  177. package/dist/test/index.js.map +1 -1
  178. package/dist/test/mergeTree.annotate.deltaCallback.spec.js +39 -39
  179. package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  180. package/dist/test/mergeTree.annotate.spec.js +39 -39
  181. package/dist/test/mergeTree.annotate.spec.js.map +1 -1
  182. package/dist/test/mergeTree.insert.deltaCallback.spec.js +35 -35
  183. package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  184. package/dist/test/mergeTree.insertingWalk.spec.js +77 -77
  185. package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
  186. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +42 -42
  187. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  188. package/dist/test/mergeTree.markRangeRemoved.spec.js +15 -15
  189. package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  190. package/dist/test/mergeTree.walk.spec.js +14 -14
  191. package/dist/test/mergeTree.walk.spec.js.map +1 -1
  192. package/dist/test/mergeTree.zamboni.spec.js +9 -9
  193. package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
  194. package/dist/test/mergeTreeOperationRunner.d.ts +4 -4
  195. package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
  196. package/dist/test/mergeTreeOperationRunner.js +16 -15
  197. package/dist/test/mergeTreeOperationRunner.js.map +1 -1
  198. package/dist/test/mergeTreeOperationRunner.spec.js +5 -5
  199. package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
  200. package/dist/test/obliterate.concurrent.spec.js +85 -88
  201. package/dist/test/obliterate.concurrent.spec.js.map +1 -1
  202. package/dist/test/obliterate.deltaCallback.spec.d.ts +6 -0
  203. package/dist/test/obliterate.deltaCallback.spec.d.ts.map +1 -0
  204. package/dist/test/obliterate.deltaCallback.spec.js +146 -0
  205. package/dist/test/obliterate.deltaCallback.spec.js.map +1 -0
  206. package/dist/test/obliterate.partialLength.spec.js +39 -44
  207. package/dist/test/obliterate.partialLength.spec.js.map +1 -1
  208. package/dist/test/obliterate.reconnect.spec.js +15 -18
  209. package/dist/test/obliterate.reconnect.spec.js.map +1 -1
  210. package/dist/test/obliterate.spec.js +16 -16
  211. package/dist/test/obliterate.spec.js.map +1 -1
  212. package/dist/test/ordinal.spec.js +5 -5
  213. package/dist/test/ordinal.spec.js.map +1 -1
  214. package/dist/test/partialLength.spec.js +58 -64
  215. package/dist/test/partialLength.spec.js.map +1 -1
  216. package/dist/test/properties.spec.js +15 -15
  217. package/dist/test/properties.spec.js.map +1 -1
  218. package/dist/test/reconnectHelper.d.ts +8 -8
  219. package/dist/test/reconnectHelper.d.ts.map +1 -1
  220. package/dist/test/reconnectHelper.js +3 -3
  221. package/dist/test/reconnectHelper.js.map +1 -1
  222. package/dist/test/resetPendingSegmentsToOp.spec.js +18 -18
  223. package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  224. package/dist/test/revertibleFarm.spec.js +21 -21
  225. package/dist/test/revertibleFarm.spec.js.map +1 -1
  226. package/dist/test/revertibles.spec.js +67 -67
  227. package/dist/test/revertibles.spec.js.map +1 -1
  228. package/dist/test/segmentGroupCollection.spec.js +3 -3
  229. package/dist/test/segmentGroupCollection.spec.js.map +1 -1
  230. package/dist/test/snapshot.spec.js +16 -16
  231. package/dist/test/snapshot.spec.js.map +1 -1
  232. package/dist/test/snapshot.utils.d.ts +4 -4
  233. package/dist/test/snapshot.utils.d.ts.map +1 -1
  234. package/dist/test/snapshot.utils.js +11 -11
  235. package/dist/test/snapshot.utils.js.map +1 -1
  236. package/dist/test/snapshotlegacy.spec.js +22 -22
  237. package/dist/test/snapshotlegacy.spec.js.map +1 -1
  238. package/dist/test/sortedSegmentSet.spec.js +9 -9
  239. package/dist/test/sortedSegmentSet.spec.js.map +1 -1
  240. package/dist/test/testClient.d.ts +13 -16
  241. package/dist/test/testClient.d.ts.map +1 -1
  242. package/dist/test/testClient.js +57 -59
  243. package/dist/test/testClient.js.map +1 -1
  244. package/dist/test/testClientLogger.d.ts +3 -3
  245. package/dist/test/testClientLogger.d.ts.map +1 -1
  246. package/dist/test/testClientLogger.js +19 -19
  247. package/dist/test/testClientLogger.js.map +1 -1
  248. package/dist/test/testServer.d.ts +3 -3
  249. package/dist/test/testServer.d.ts.map +1 -1
  250. package/dist/test/testServer.js +8 -8
  251. package/dist/test/testServer.js.map +1 -1
  252. package/dist/test/testUtils.d.ts +14 -6
  253. package/dist/test/testUtils.d.ts.map +1 -1
  254. package/dist/test/testUtils.js +36 -17
  255. package/dist/test/testUtils.js.map +1 -1
  256. package/dist/test/text.d.ts +2 -2
  257. package/dist/test/text.d.ts.map +1 -1
  258. package/dist/test/text.js +10 -10
  259. package/dist/test/text.js.map +1 -1
  260. package/dist/test/tracking.spec.js +12 -12
  261. package/dist/test/tracking.spec.js.map +1 -1
  262. package/dist/test/{wordUnitTests.d.ts → wordUnitTests.spec.d.ts} +1 -1
  263. package/dist/test/wordUnitTests.spec.d.ts.map +1 -0
  264. package/dist/test/{wordUnitTests.js → wordUnitTests.spec.js} +16 -15
  265. package/dist/test/wordUnitTests.spec.js.map +1 -0
  266. package/dist/textSegment.d.ts +3 -3
  267. package/dist/textSegment.d.ts.map +1 -1
  268. package/dist/textSegment.js +2 -2
  269. package/dist/textSegment.js.map +1 -1
  270. package/dist/tsdoc-metadata.json +1 -1
  271. package/dist/zamboni.d.ts +2 -2
  272. package/dist/zamboni.d.ts.map +1 -1
  273. package/dist/zamboni.js +19 -19
  274. package/dist/zamboni.js.map +1 -1
  275. package/lib/{MergeTreeTextHelper.d.mts → MergeTreeTextHelper.d.ts} +3 -3
  276. package/lib/MergeTreeTextHelper.d.ts.map +1 -0
  277. package/lib/{MergeTreeTextHelper.mjs → MergeTreeTextHelper.js} +3 -2
  278. package/lib/MergeTreeTextHelper.js.map +1 -0
  279. package/lib/{attributionCollection.d.mts → attributionCollection.d.ts} +2 -2
  280. package/lib/attributionCollection.d.ts.map +1 -0
  281. package/lib/{attributionCollection.mjs → attributionCollection.js} +1 -1
  282. package/lib/attributionCollection.js.map +1 -0
  283. package/lib/{attributionPolicy.d.mts → attributionPolicy.d.ts} +2 -2
  284. package/lib/attributionPolicy.d.ts.map +1 -0
  285. package/lib/{attributionPolicy.mjs → attributionPolicy.js} +4 -4
  286. package/lib/attributionPolicy.js.map +1 -0
  287. package/lib/{client.d.mts → client.d.ts} +32 -13
  288. package/lib/client.d.ts.map +1 -0
  289. package/lib/{client.mjs → client.js} +42 -31
  290. package/lib/client.js.map +1 -0
  291. package/lib/collections/{index.d.mts → index.d.ts} +3 -3
  292. package/lib/collections/index.d.ts.map +1 -0
  293. package/lib/collections/index.js +7 -0
  294. package/lib/collections/index.js.map +1 -0
  295. package/lib/collections/{list.d.mts → list.d.ts} +1 -1
  296. package/lib/collections/list.d.ts.map +1 -0
  297. package/lib/collections/{list.mjs → list.js} +1 -1
  298. package/lib/collections/list.js.map +1 -0
  299. package/lib/collections/{rbTree.d.mts → rbTree.d.ts} +1 -1
  300. package/lib/collections/rbTree.d.ts.map +1 -0
  301. package/lib/collections/{rbTree.mjs → rbTree.js} +1 -1
  302. package/lib/collections/rbTree.js.map +1 -0
  303. package/lib/{constants.d.mts → constants.d.ts} +1 -1
  304. package/lib/constants.d.ts.map +1 -0
  305. package/lib/{constants.mjs → constants.js} +1 -1
  306. package/lib/constants.js.map +1 -0
  307. package/lib/{endOfTreeSegment.d.mts → endOfTreeSegment.d.ts} +4 -4
  308. package/lib/endOfTreeSegment.d.ts.map +1 -0
  309. package/lib/{endOfTreeSegment.mjs → endOfTreeSegment.js} +3 -3
  310. package/lib/endOfTreeSegment.js.map +1 -0
  311. package/lib/{index.d.mts → index.d.ts} +21 -21
  312. package/lib/index.d.ts.map +1 -0
  313. package/lib/{index.mjs → index.js} +20 -20
  314. package/lib/index.js.map +1 -0
  315. package/lib/{localReference.d.mts → localReference.d.ts} +10 -40
  316. package/lib/localReference.d.ts.map +1 -0
  317. package/lib/{localReference.mjs → localReference.js} +12 -6
  318. package/lib/localReference.js.map +1 -0
  319. package/lib/{merge-tree-alpha.d.mts → merge-tree-alpha.d.ts} +28 -450
  320. package/lib/merge-tree-beta.d.ts +230 -0
  321. package/lib/merge-tree-public.d.ts +230 -0
  322. package/lib/{merge-tree-untrimmed.d.mts → merge-tree-untrimmed.d.ts} +28 -787
  323. package/lib/{mergeTree.d.mts → mergeTree.d.ts} +12 -20
  324. package/lib/mergeTree.d.ts.map +1 -0
  325. package/lib/{mergeTree.mjs → mergeTree.js} +47 -32
  326. package/lib/mergeTree.js.map +1 -0
  327. package/lib/{mergeTreeDeltaCallback.d.mts → mergeTreeDeltaCallback.d.ts} +8 -8
  328. package/lib/mergeTreeDeltaCallback.d.ts.map +1 -0
  329. package/lib/{mergeTreeDeltaCallback.mjs → mergeTreeDeltaCallback.js} +1 -1
  330. package/lib/mergeTreeDeltaCallback.js.map +1 -0
  331. package/lib/{mergeTreeNodeWalk.d.mts → mergeTreeNodeWalk.d.ts} +2 -2
  332. package/lib/mergeTreeNodeWalk.d.ts.map +1 -0
  333. package/lib/{mergeTreeNodeWalk.mjs → mergeTreeNodeWalk.js} +1 -1
  334. package/lib/mergeTreeNodeWalk.js.map +1 -0
  335. package/lib/{mergeTreeNodes.d.mts → mergeTreeNodes.d.ts} +18 -15
  336. package/lib/mergeTreeNodes.d.ts.map +1 -0
  337. package/lib/{mergeTreeNodes.mjs → mergeTreeNodes.js} +12 -10
  338. package/lib/mergeTreeNodes.js.map +1 -0
  339. package/lib/{mergeTreeTracking.d.mts → mergeTreeTracking.d.ts} +3 -3
  340. package/lib/mergeTreeTracking.d.ts.map +1 -0
  341. package/lib/{mergeTreeTracking.mjs → mergeTreeTracking.js} +3 -2
  342. package/lib/mergeTreeTracking.js.map +1 -0
  343. package/lib/{opBuilder.d.mts → opBuilder.d.ts} +4 -4
  344. package/lib/{opBuilder.d.mts.map → opBuilder.d.ts.map} +1 -1
  345. package/lib/{opBuilder.mjs → opBuilder.js} +2 -2
  346. package/lib/opBuilder.js.map +1 -0
  347. package/lib/{ops.d.mts → ops.d.ts} +1 -1
  348. package/lib/ops.d.ts.map +1 -0
  349. package/lib/{ops.mjs → ops.js} +1 -1
  350. package/lib/ops.js.map +1 -0
  351. package/lib/{ordinal.d.mts → ordinal.d.ts} +1 -1
  352. package/lib/ordinal.d.ts.map +1 -0
  353. package/lib/{ordinal.mjs → ordinal.js} +2 -1
  354. package/lib/ordinal.js.map +1 -0
  355. package/lib/{partialLengths.d.mts → partialLengths.d.ts} +6 -6
  356. package/lib/partialLengths.d.ts.map +1 -0
  357. package/lib/{partialLengths.mjs → partialLengths.js} +11 -10
  358. package/lib/partialLengths.js.map +1 -0
  359. package/lib/{properties.d.mts → properties.d.ts} +1 -1
  360. package/lib/properties.d.ts.map +1 -0
  361. package/lib/{properties.mjs → properties.js} +1 -1
  362. package/lib/properties.js.map +1 -0
  363. package/lib/{referencePositions.d.mts → referencePositions.d.ts} +5 -5
  364. package/lib/referencePositions.d.ts.map +1 -0
  365. package/lib/{referencePositions.mjs → referencePositions.js} +2 -2
  366. package/lib/referencePositions.js.map +1 -0
  367. package/lib/{revertibles.d.mts → revertibles.d.ts} +8 -8
  368. package/lib/revertibles.d.ts.map +1 -0
  369. package/lib/{revertibles.mjs → revertibles.js} +13 -13
  370. package/lib/revertibles.js.map +1 -0
  371. package/lib/{segmentGroupCollection.d.mts → segmentGroupCollection.d.ts} +2 -2
  372. package/lib/segmentGroupCollection.d.ts.map +1 -0
  373. package/lib/{segmentGroupCollection.mjs → segmentGroupCollection.js} +2 -2
  374. package/lib/segmentGroupCollection.js.map +1 -0
  375. package/lib/{segmentPropertiesManager.d.mts → segmentPropertiesManager.d.ts} +3 -3
  376. package/lib/segmentPropertiesManager.d.ts.map +1 -0
  377. package/lib/{segmentPropertiesManager.mjs → segmentPropertiesManager.js} +5 -3
  378. package/lib/segmentPropertiesManager.js.map +1 -0
  379. package/lib/{snapshotChunks.d.mts → snapshotChunks.d.ts} +4 -4
  380. package/lib/snapshotChunks.d.ts.map +1 -0
  381. package/lib/{snapshotChunks.mjs → snapshotChunks.js} +2 -2
  382. package/lib/snapshotChunks.js.map +1 -0
  383. package/lib/{snapshotLoader.d.mts → snapshotLoader.d.ts} +4 -4
  384. package/lib/snapshotLoader.d.ts.map +1 -0
  385. package/lib/{snapshotLoader.mjs → snapshotLoader.js} +10 -9
  386. package/lib/snapshotLoader.js.map +1 -0
  387. package/lib/{snapshotV1.d.mts → snapshotV1.d.ts} +4 -4
  388. package/lib/snapshotV1.d.ts.map +1 -0
  389. package/lib/{snapshotV1.mjs → snapshotV1.js} +24 -7
  390. package/lib/snapshotV1.js.map +1 -0
  391. package/lib/{snapshotlegacy.d.mts → snapshotlegacy.d.ts} +3 -3
  392. package/lib/snapshotlegacy.d.ts.map +1 -0
  393. package/lib/{snapshotlegacy.mjs → snapshotlegacy.js} +17 -4
  394. package/lib/snapshotlegacy.js.map +1 -0
  395. package/lib/{sortedSegmentSet.d.mts → sortedSegmentSet.d.ts} +4 -4
  396. package/lib/sortedSegmentSet.d.ts.map +1 -0
  397. package/lib/{sortedSegmentSet.mjs → sortedSegmentSet.js} +8 -5
  398. package/lib/sortedSegmentSet.js.map +1 -0
  399. package/lib/{sortedSet.d.mts → sortedSet.d.ts} +1 -1
  400. package/lib/sortedSet.d.ts.map +1 -0
  401. package/lib/{sortedSet.mjs → sortedSet.js} +1 -1
  402. package/lib/sortedSet.js.map +1 -0
  403. package/lib/test/Insertion.perf.spec.d.ts +6 -0
  404. package/lib/test/Insertion.perf.spec.d.ts.map +1 -0
  405. package/lib/test/Insertion.perf.spec.js +111 -0
  406. package/lib/test/Insertion.perf.spec.js.map +1 -0
  407. package/lib/test/PartialLengths.perf.spec.d.ts +6 -0
  408. package/lib/test/PartialLengths.perf.spec.d.ts.map +1 -0
  409. package/lib/test/PartialLengths.perf.spec.js +65 -0
  410. package/lib/test/PartialLengths.perf.spec.js.map +1 -0
  411. package/lib/test/Removal.perf.spec.d.ts +6 -0
  412. package/lib/test/Removal.perf.spec.d.ts.map +1 -0
  413. package/lib/test/Removal.perf.spec.js +164 -0
  414. package/lib/test/Removal.perf.spec.js.map +1 -0
  415. package/lib/test/Snapshot.perf.spec.d.ts +6 -0
  416. package/lib/test/Snapshot.perf.spec.d.ts.map +1 -0
  417. package/lib/test/Snapshot.perf.spec.js +31 -0
  418. package/lib/test/Snapshot.perf.spec.js.map +1 -0
  419. package/lib/test/attributionCollection.perf.spec.d.ts +6 -0
  420. package/lib/test/attributionCollection.perf.spec.d.ts.map +1 -0
  421. package/lib/test/attributionCollection.perf.spec.js +229 -0
  422. package/lib/test/attributionCollection.perf.spec.js.map +1 -0
  423. package/lib/test/attributionCollection.spec.d.ts +6 -0
  424. package/lib/test/attributionCollection.spec.d.ts.map +1 -0
  425. package/lib/test/attributionCollection.spec.js +484 -0
  426. package/lib/test/attributionCollection.spec.js.map +1 -0
  427. package/lib/test/attributionPolicy.spec.d.ts +6 -0
  428. package/lib/test/attributionPolicy.spec.d.ts.map +1 -0
  429. package/lib/test/attributionPolicy.spec.js +187 -0
  430. package/lib/test/attributionPolicy.spec.js.map +1 -0
  431. package/lib/test/beastTest.spec.d.ts +54 -0
  432. package/lib/test/beastTest.spec.d.ts.map +1 -0
  433. package/lib/test/beastTest.spec.js +1318 -0
  434. package/lib/test/beastTest.spec.js.map +1 -0
  435. package/lib/test/client.annotateMarker.spec.d.ts +6 -0
  436. package/lib/test/client.annotateMarker.spec.d.ts.map +1 -0
  437. package/lib/test/client.annotateMarker.spec.js +43 -0
  438. package/lib/test/client.annotateMarker.spec.js.map +1 -0
  439. package/lib/test/client.apis.spec.d.ts +7 -0
  440. package/lib/test/client.apis.spec.d.ts.map +1 -0
  441. package/lib/test/client.apis.spec.js +67 -0
  442. package/lib/test/client.apis.spec.js.map +1 -0
  443. package/lib/test/client.applyMsg.spec.d.ts +6 -0
  444. package/lib/test/client.applyMsg.spec.d.ts.map +1 -0
  445. package/lib/test/client.applyMsg.spec.js +561 -0
  446. package/lib/test/client.applyMsg.spec.js.map +1 -0
  447. package/lib/test/client.applyStashedOpFarm.spec.d.ts +12 -0
  448. package/lib/test/client.applyStashedOpFarm.spec.d.ts.map +1 -0
  449. package/lib/test/client.applyStashedOpFarm.spec.js +153 -0
  450. package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -0
  451. package/lib/test/client.attributionFarm.spec.d.ts +7 -0
  452. package/lib/test/client.attributionFarm.spec.d.ts.map +1 -0
  453. package/lib/test/client.attributionFarm.spec.js +92 -0
  454. package/lib/test/client.attributionFarm.spec.js.map +1 -0
  455. package/lib/test/client.conflictFarm.spec.d.ts +15 -0
  456. package/lib/test/client.conflictFarm.spec.d.ts.map +1 -0
  457. package/lib/test/client.conflictFarm.spec.js +85 -0
  458. package/lib/test/client.conflictFarm.spec.js.map +1 -0
  459. package/lib/test/client.getPosition.spec.d.ts +6 -0
  460. package/lib/test/client.getPosition.spec.d.ts.map +1 -0
  461. package/lib/test/client.getPosition.spec.js +52 -0
  462. package/lib/test/client.getPosition.spec.js.map +1 -0
  463. package/lib/test/client.localReference.spec.d.ts +6 -0
  464. package/lib/test/client.localReference.spec.d.ts.map +1 -0
  465. package/lib/test/client.localReference.spec.js +468 -0
  466. package/lib/test/client.localReference.spec.js.map +1 -0
  467. package/lib/test/client.localReferenceFarm.spec.d.ts +6 -0
  468. package/lib/test/client.localReferenceFarm.spec.d.ts.map +1 -0
  469. package/lib/test/client.localReferenceFarm.spec.js +86 -0
  470. package/lib/test/client.localReferenceFarm.spec.js.map +1 -0
  471. package/lib/test/client.rebasePosition.spec.d.ts +6 -0
  472. package/lib/test/client.rebasePosition.spec.d.ts.map +1 -0
  473. package/lib/test/client.rebasePosition.spec.js +100 -0
  474. package/lib/test/client.rebasePosition.spec.js.map +1 -0
  475. package/lib/test/client.reconnectFarm.spec.d.ts +12 -0
  476. package/lib/test/client.reconnectFarm.spec.d.ts.map +1 -0
  477. package/lib/test/client.reconnectFarm.spec.js +88 -0
  478. package/lib/test/client.reconnectFarm.spec.js.map +1 -0
  479. package/lib/test/client.replay.spec.d.ts +6 -0
  480. package/lib/test/client.replay.spec.d.ts.map +1 -0
  481. package/lib/test/client.replay.spec.js +57 -0
  482. package/lib/test/client.replay.spec.js.map +1 -0
  483. package/lib/test/client.rollback.spec.d.ts +6 -0
  484. package/lib/test/client.rollback.spec.d.ts.map +1 -0
  485. package/lib/test/client.rollback.spec.js +451 -0
  486. package/lib/test/client.rollback.spec.js.map +1 -0
  487. package/lib/test/client.rollbackFarm.spec.d.ts +6 -0
  488. package/lib/test/client.rollbackFarm.spec.d.ts.map +1 -0
  489. package/lib/test/client.rollbackFarm.spec.js +46 -0
  490. package/lib/test/client.rollbackFarm.spec.js.map +1 -0
  491. package/lib/test/client.searchForMarker.spec.d.ts +6 -0
  492. package/lib/test/client.searchForMarker.spec.d.ts.map +1 -0
  493. package/lib/test/client.searchForMarker.spec.js +495 -0
  494. package/lib/test/client.searchForMarker.spec.js.map +1 -0
  495. package/lib/test/client.walkSegments.spec.d.ts +6 -0
  496. package/lib/test/client.walkSegments.spec.d.ts.map +1 -0
  497. package/lib/test/client.walkSegments.spec.js +52 -0
  498. package/lib/test/client.walkSegments.spec.js.map +1 -0
  499. package/lib/test/collections.list.spec.d.ts +6 -0
  500. package/lib/test/collections.list.spec.d.ts.map +1 -0
  501. package/lib/test/collections.list.spec.js +82 -0
  502. package/lib/test/collections.list.spec.js.map +1 -0
  503. package/lib/test/createInsertOnlyAttributionPolicy.spec.d.ts +6 -0
  504. package/lib/test/createInsertOnlyAttributionPolicy.spec.d.ts.map +1 -0
  505. package/lib/test/createInsertOnlyAttributionPolicy.spec.js +33 -0
  506. package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -0
  507. package/lib/test/dirname.cjs +16 -0
  508. package/lib/test/dirname.cjs.map +1 -0
  509. package/lib/test/dirname.d.cts +6 -0
  510. package/lib/test/dirname.d.cts.map +1 -0
  511. package/lib/test/index.d.ts +13 -0
  512. package/lib/test/index.d.ts.map +1 -0
  513. package/lib/test/index.js +13 -0
  514. package/lib/test/index.js.map +1 -0
  515. package/lib/test/mergeTree.annotate.deltaCallback.spec.d.ts +6 -0
  516. package/lib/test/mergeTree.annotate.deltaCallback.spec.d.ts.map +1 -0
  517. package/lib/test/mergeTree.annotate.deltaCallback.spec.js +140 -0
  518. package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -0
  519. package/lib/test/mergeTree.annotate.spec.d.ts +6 -0
  520. package/lib/test/mergeTree.annotate.spec.d.ts.map +1 -0
  521. package/lib/test/mergeTree.annotate.spec.js +446 -0
  522. package/lib/test/mergeTree.annotate.spec.js.map +1 -0
  523. package/lib/test/mergeTree.insert.deltaCallback.spec.d.ts +6 -0
  524. package/lib/test/mergeTree.insert.deltaCallback.spec.d.ts.map +1 -0
  525. package/lib/test/mergeTree.insert.deltaCallback.spec.js +124 -0
  526. package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -0
  527. package/lib/test/mergeTree.insertingWalk.spec.d.ts +6 -0
  528. package/lib/test/mergeTree.insertingWalk.spec.d.ts.map +1 -0
  529. package/lib/test/mergeTree.insertingWalk.spec.js +277 -0
  530. package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -0
  531. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts +6 -0
  532. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts.map +1 -0
  533. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +176 -0
  534. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -0
  535. package/lib/test/mergeTree.markRangeRemoved.spec.d.ts +6 -0
  536. package/lib/test/mergeTree.markRangeRemoved.spec.d.ts.map +1 -0
  537. package/lib/test/mergeTree.markRangeRemoved.spec.js +128 -0
  538. package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -0
  539. package/lib/test/mergeTree.walk.spec.d.ts +6 -0
  540. package/lib/test/mergeTree.walk.spec.d.ts.map +1 -0
  541. package/lib/test/mergeTree.walk.spec.js +61 -0
  542. package/lib/test/mergeTree.walk.spec.js.map +1 -0
  543. package/lib/test/mergeTree.zamboni.spec.d.ts +6 -0
  544. package/lib/test/mergeTree.zamboni.spec.d.ts.map +1 -0
  545. package/lib/test/mergeTree.zamboni.spec.js +50 -0
  546. package/lib/test/mergeTree.zamboni.spec.js.map +1 -0
  547. package/lib/test/mergeTreeOperationRunner.d.ts +63 -0
  548. package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -0
  549. package/lib/test/mergeTreeOperationRunner.js +207 -0
  550. package/lib/test/mergeTreeOperationRunner.js.map +1 -0
  551. package/lib/test/mergeTreeOperationRunner.spec.d.ts +6 -0
  552. package/lib/test/mergeTreeOperationRunner.spec.d.ts.map +1 -0
  553. package/lib/test/mergeTreeOperationRunner.spec.js +154 -0
  554. package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -0
  555. package/lib/test/obliterate.concurrent.spec.d.ts +6 -0
  556. package/lib/test/obliterate.concurrent.spec.d.ts.map +1 -0
  557. package/lib/test/obliterate.concurrent.spec.js +1441 -0
  558. package/lib/test/obliterate.concurrent.spec.js.map +1 -0
  559. package/lib/test/obliterate.deltaCallback.spec.d.ts +6 -0
  560. package/lib/test/obliterate.deltaCallback.spec.d.ts.map +1 -0
  561. package/lib/test/obliterate.deltaCallback.spec.js +144 -0
  562. package/lib/test/obliterate.deltaCallback.spec.js.map +1 -0
  563. package/lib/test/obliterate.partialLength.spec.d.ts +6 -0
  564. package/lib/test/obliterate.partialLength.spec.d.ts.map +1 -0
  565. package/lib/test/obliterate.partialLength.spec.js +272 -0
  566. package/lib/test/obliterate.partialLength.spec.js.map +1 -0
  567. package/lib/test/obliterate.reconnect.spec.d.ts +6 -0
  568. package/lib/test/obliterate.reconnect.spec.d.ts.map +1 -0
  569. package/lib/test/obliterate.reconnect.spec.js +159 -0
  570. package/lib/test/obliterate.reconnect.spec.js.map +1 -0
  571. package/lib/test/obliterate.spec.d.ts +6 -0
  572. package/lib/test/obliterate.spec.d.ts.map +1 -0
  573. package/lib/test/obliterate.spec.js +160 -0
  574. package/lib/test/obliterate.spec.js.map +1 -0
  575. package/lib/test/ordinal.spec.d.ts +2 -0
  576. package/lib/test/ordinal.spec.d.ts.map +1 -0
  577. package/lib/test/ordinal.spec.js +38 -0
  578. package/lib/test/ordinal.spec.js.map +1 -0
  579. package/lib/test/partialLength.spec.d.ts +6 -0
  580. package/lib/test/partialLength.spec.d.ts.map +1 -0
  581. package/lib/test/partialLength.spec.js +274 -0
  582. package/lib/test/partialLength.spec.js.map +1 -0
  583. package/lib/test/properties.spec.d.ts +6 -0
  584. package/lib/test/properties.spec.d.ts.map +1 -0
  585. package/lib/test/properties.spec.js +53 -0
  586. package/lib/test/properties.spec.js.map +1 -0
  587. package/lib/test/reconnectHelper.d.ts +48 -0
  588. package/lib/test/reconnectHelper.d.ts.map +1 -0
  589. package/lib/test/reconnectHelper.js +82 -0
  590. package/lib/test/reconnectHelper.js.map +1 -0
  591. package/lib/test/resetPendingSegmentsToOp.spec.d.ts +6 -0
  592. package/lib/test/resetPendingSegmentsToOp.spec.d.ts.map +1 -0
  593. package/lib/test/resetPendingSegmentsToOp.spec.js +235 -0
  594. package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -0
  595. package/lib/test/revertibleFarm.spec.d.ts +6 -0
  596. package/lib/test/revertibleFarm.spec.d.ts.map +1 -0
  597. package/lib/test/revertibleFarm.spec.js +119 -0
  598. package/lib/test/revertibleFarm.spec.js.map +1 -0
  599. package/lib/test/revertibles.spec.d.ts +17 -0
  600. package/lib/test/revertibles.spec.d.ts.map +1 -0
  601. package/lib/test/revertibles.spec.js +381 -0
  602. package/lib/test/revertibles.spec.js.map +1 -0
  603. package/lib/test/segmentGroupCollection.spec.d.ts +6 -0
  604. package/lib/test/segmentGroupCollection.spec.d.ts.map +1 -0
  605. package/lib/test/segmentGroupCollection.spec.js +58 -0
  606. package/lib/test/segmentGroupCollection.spec.js.map +1 -0
  607. package/lib/test/snapshot.spec.d.ts +6 -0
  608. package/lib/test/snapshot.spec.d.ts.map +1 -0
  609. package/lib/test/snapshot.spec.js +176 -0
  610. package/lib/test/snapshot.spec.js.map +1 -0
  611. package/lib/test/snapshot.utils.d.ts +33 -0
  612. package/lib/test/snapshot.utils.d.ts.map +1 -0
  613. package/lib/test/snapshot.utils.js +104 -0
  614. package/lib/test/snapshot.utils.js.map +1 -0
  615. package/lib/test/snapshotlegacy.spec.d.ts +6 -0
  616. package/lib/test/snapshotlegacy.spec.d.ts.map +1 -0
  617. package/lib/test/snapshotlegacy.spec.js +137 -0
  618. package/lib/test/snapshotlegacy.spec.js.map +1 -0
  619. package/lib/test/sortedSegmentSet.spec.d.ts +6 -0
  620. package/lib/test/sortedSegmentSet.spec.d.ts.map +1 -0
  621. package/lib/test/sortedSegmentSet.spec.js +93 -0
  622. package/lib/test/sortedSegmentSet.spec.js.map +1 -0
  623. package/lib/test/testClient.d.ts +116 -0
  624. package/lib/test/testClient.d.ts.map +1 -0
  625. package/lib/test/testClient.js +430 -0
  626. package/lib/test/testClient.js.map +1 -0
  627. package/lib/test/testClientLogger.d.ts +44 -0
  628. package/lib/test/testClientLogger.d.ts.map +1 -0
  629. package/lib/test/testClientLogger.js +282 -0
  630. package/lib/test/testClientLogger.js.map +1 -0
  631. package/lib/test/testSerializer.d.ts +18 -0
  632. package/lib/test/testSerializer.d.ts.map +1 -0
  633. package/lib/test/testSerializer.js +29 -0
  634. package/lib/test/testSerializer.js.map +1 -0
  635. package/lib/test/testServer.d.ts +36 -0
  636. package/lib/test/testServer.d.ts.map +1 -0
  637. package/lib/test/testServer.js +133 -0
  638. package/lib/test/testServer.js.map +1 -0
  639. package/lib/test/testUtils.d.ts +77 -0
  640. package/lib/test/testUtils.d.ts.map +1 -0
  641. package/lib/test/testUtils.js +151 -0
  642. package/lib/test/testUtils.js.map +1 -0
  643. package/lib/test/text.d.ts +9 -0
  644. package/lib/test/text.d.ts.map +1 -0
  645. package/lib/test/text.js +71 -0
  646. package/lib/test/text.js.map +1 -0
  647. package/lib/test/tracking.spec.d.ts +6 -0
  648. package/lib/test/tracking.spec.d.ts.map +1 -0
  649. package/lib/test/tracking.spec.js +118 -0
  650. package/lib/test/tracking.spec.js.map +1 -0
  651. package/lib/test/types/validateMergeTreePrevious.generated.d.ts +2 -0
  652. package/lib/test/types/validateMergeTreePrevious.generated.d.ts.map +1 -0
  653. package/lib/test/types/validateMergeTreePrevious.generated.js +228 -0
  654. package/lib/test/types/validateMergeTreePrevious.generated.js.map +1 -0
  655. package/lib/test/wordUnitTests.spec.d.ts +6 -0
  656. package/lib/test/wordUnitTests.spec.d.ts.map +1 -0
  657. package/lib/test/wordUnitTests.spec.js +166 -0
  658. package/lib/test/wordUnitTests.spec.js.map +1 -0
  659. package/lib/{textSegment.d.mts → textSegment.d.ts} +4 -4
  660. package/lib/textSegment.d.ts.map +1 -0
  661. package/lib/{textSegment.mjs → textSegment.js} +2 -2
  662. package/lib/textSegment.js.map +1 -0
  663. package/lib/{zamboni.d.mts → zamboni.d.ts} +3 -3
  664. package/lib/zamboni.d.ts.map +1 -0
  665. package/lib/{zamboni.mjs → zamboni.js} +7 -6
  666. package/lib/zamboni.js.map +1 -0
  667. package/package.json +50 -57
  668. package/src/MergeTreeTextHelper.ts +4 -4
  669. package/src/attributionCollection.ts +1 -1
  670. package/src/attributionPolicy.ts +5 -5
  671. package/src/client.ts +50 -41
  672. package/src/collections/index.ts +2 -2
  673. package/src/endOfTreeSegment.ts +5 -5
  674. package/src/index.ts +20 -20
  675. package/src/localReference.ts +13 -7
  676. package/src/mergeTree.ts +53 -44
  677. package/src/mergeTreeDeltaCallback.ts +3 -8
  678. package/src/mergeTreeNodeWalk.ts +1 -1
  679. package/src/mergeTreeNodes.ts +21 -19
  680. package/src/mergeTreeTracking.ts +3 -3
  681. package/src/opBuilder.ts +3 -3
  682. package/src/partialLengths.ts +10 -10
  683. package/src/referencePositions.ts +4 -4
  684. package/src/revertibles.ts +14 -18
  685. package/src/segmentGroupCollection.ts +2 -2
  686. package/src/segmentPropertiesManager.ts +3 -3
  687. package/src/snapshotChunks.ts +4 -4
  688. package/src/snapshotLoader.ts +14 -11
  689. package/src/snapshotV1.ts +29 -9
  690. package/src/snapshotlegacy.ts +19 -5
  691. package/src/sortedSegmentSet.ts +8 -6
  692. package/src/textSegment.ts +3 -3
  693. package/src/zamboni.ts +7 -7
  694. package/tsconfig.cjs.json +7 -0
  695. package/tsconfig.json +2 -5
  696. package/api-extractor-esm.json +0 -17
  697. package/dist/test/beastTest.d.ts.map +0 -1
  698. package/dist/test/beastTest.js.map +0 -1
  699. package/dist/test/client.apis.d.ts.map +0 -1
  700. package/dist/test/client.apis.js.map +0 -1
  701. package/dist/test/wordUnitTests.d.ts.map +0 -1
  702. package/dist/test/wordUnitTests.js.map +0 -1
  703. package/lib/MergeTreeTextHelper.d.mts.map +0 -1
  704. package/lib/MergeTreeTextHelper.mjs.map +0 -1
  705. package/lib/attributionCollection.d.mts.map +0 -1
  706. package/lib/attributionCollection.mjs.map +0 -1
  707. package/lib/attributionPolicy.d.mts.map +0 -1
  708. package/lib/attributionPolicy.mjs.map +0 -1
  709. package/lib/client.d.mts.map +0 -1
  710. package/lib/client.mjs.map +0 -1
  711. package/lib/collections/index.d.mts.map +0 -1
  712. package/lib/collections/index.mjs +0 -7
  713. package/lib/collections/index.mjs.map +0 -1
  714. package/lib/collections/list.d.mts.map +0 -1
  715. package/lib/collections/list.mjs.map +0 -1
  716. package/lib/collections/rbTree.d.mts.map +0 -1
  717. package/lib/collections/rbTree.mjs.map +0 -1
  718. package/lib/constants.d.mts.map +0 -1
  719. package/lib/constants.mjs.map +0 -1
  720. package/lib/endOfTreeSegment.d.mts.map +0 -1
  721. package/lib/endOfTreeSegment.mjs.map +0 -1
  722. package/lib/index.d.mts.map +0 -1
  723. package/lib/index.mjs.map +0 -1
  724. package/lib/localReference.d.mts.map +0 -1
  725. package/lib/localReference.mjs.map +0 -1
  726. package/lib/merge-tree-beta.d.mts +0 -668
  727. package/lib/merge-tree-public.d.mts +0 -668
  728. package/lib/mergeTree.d.mts.map +0 -1
  729. package/lib/mergeTree.mjs.map +0 -1
  730. package/lib/mergeTreeDeltaCallback.d.mts.map +0 -1
  731. package/lib/mergeTreeDeltaCallback.mjs.map +0 -1
  732. package/lib/mergeTreeNodeWalk.d.mts.map +0 -1
  733. package/lib/mergeTreeNodeWalk.mjs.map +0 -1
  734. package/lib/mergeTreeNodes.d.mts.map +0 -1
  735. package/lib/mergeTreeNodes.mjs.map +0 -1
  736. package/lib/mergeTreeTracking.d.mts.map +0 -1
  737. package/lib/mergeTreeTracking.mjs.map +0 -1
  738. package/lib/opBuilder.mjs.map +0 -1
  739. package/lib/ops.d.mts.map +0 -1
  740. package/lib/ops.mjs.map +0 -1
  741. package/lib/ordinal.d.mts.map +0 -1
  742. package/lib/ordinal.mjs.map +0 -1
  743. package/lib/partialLengths.d.mts.map +0 -1
  744. package/lib/partialLengths.mjs.map +0 -1
  745. package/lib/properties.d.mts.map +0 -1
  746. package/lib/properties.mjs.map +0 -1
  747. package/lib/referencePositions.d.mts.map +0 -1
  748. package/lib/referencePositions.mjs.map +0 -1
  749. package/lib/revertibles.d.mts.map +0 -1
  750. package/lib/revertibles.mjs.map +0 -1
  751. package/lib/segmentGroupCollection.d.mts.map +0 -1
  752. package/lib/segmentGroupCollection.mjs.map +0 -1
  753. package/lib/segmentPropertiesManager.d.mts.map +0 -1
  754. package/lib/segmentPropertiesManager.mjs.map +0 -1
  755. package/lib/snapshotChunks.d.mts.map +0 -1
  756. package/lib/snapshotChunks.mjs.map +0 -1
  757. package/lib/snapshotLoader.d.mts.map +0 -1
  758. package/lib/snapshotLoader.mjs.map +0 -1
  759. package/lib/snapshotV1.d.mts.map +0 -1
  760. package/lib/snapshotV1.mjs.map +0 -1
  761. package/lib/snapshotlegacy.d.mts.map +0 -1
  762. package/lib/snapshotlegacy.mjs.map +0 -1
  763. package/lib/sortedSegmentSet.d.mts.map +0 -1
  764. package/lib/sortedSegmentSet.mjs.map +0 -1
  765. package/lib/sortedSet.d.mts.map +0 -1
  766. package/lib/sortedSet.mjs.map +0 -1
  767. package/lib/textSegment.d.mts.map +0 -1
  768. package/lib/textSegment.mjs.map +0 -1
  769. package/lib/zamboni.d.mts.map +0 -1
  770. package/lib/zamboni.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"beastTest.js","sourceRoot":"","sources":["../../src/test/beastTest.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 @typescript-eslint/consistent-type-assertions, no-bitwise */\n/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/no-base-to-string */\n\nimport { strict as assert } from \"assert\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { IRandom, makeRandom } from \"@fluid-private/stochastic-test-utils\";\nimport { Trace } from \"@fluid-internal/client-utils\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport JsDiff from \"diff\";\nimport {\n\tKeyComparer,\n\tProperty,\n\tPropertyAction,\n\tRedBlackTree,\n\tSortedDictionary,\n} from \"../collections\";\nimport { LocalClientId, UnassignedSequenceNumber, UniversalSequenceNumber } from \"../constants\";\nimport {\n\tIJSONMarkerSegment,\n\tIMergeNode,\n\tISegment,\n\treservedMarkerIdKey,\n\tcompareNumbers,\n\tcompareStrings,\n} from \"../mergeTreeNodes\";\nimport { IMergeTreeDeltaOpArgs } from \"../mergeTreeDeltaCallback\";\nimport { createRemoveRangeOp } from \"../opBuilder\";\nimport { IMergeTreeOp, MergeTreeDeltaType, ReferenceType } from \"../ops\";\nimport { SnapshotLegacy } from \"../snapshotlegacy\";\nimport { IJSONTextSegment, TextSegment } from \"../textSegment\";\nimport { reservedRangeLabelsKey, reservedTileLabelsKey } from \"../referencePositions\";\nimport { MergeTree } from \"../mergeTree\";\nimport { MergeTreeTextHelper } from \"../MergeTreeTextHelper\";\nimport { JsonSegmentSpecs } from \"../snapshotChunks\";\nimport { getStats, specToSegment, TestClient } from \"./testClient\";\nimport { TestServer } from \"./testServer\";\nimport { insertText, loadTextFromFile, nodeOrdinalsHaveIntegrity } from \"./testUtils\";\n\nfunction LinearDictionary<TKey, TData>(\n\tcompareKeys: KeyComparer<TKey>,\n): SortedDictionary<TKey, TData> {\n\tconst props: Property<TKey, TData>[] = [];\n\tconst compareProps = (a: Property<TKey, TData>, b: Property<TKey, TData>) =>\n\t\tcompareKeys(a.key, b.key);\n\tfunction mapRange<TAccum>(\n\t\taction: PropertyAction<TKey, TData>,\n\t\taccum?: TAccum,\n\t\tstart?: TKey,\n\t\tend?: TKey,\n\t) {\n\t\tlet _start = start;\n\t\tlet _end = end;\n\n\t\tif (props.length !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (_start === undefined) {\n\t\t\t_start = min()!.key;\n\t\t}\n\t\tif (_end === undefined) {\n\t\t\t_end = max()!.key;\n\t\t}\n\t\tfor (let i = 0, len = props.length; i < len; i++) {\n\t\t\tif (compareKeys(_start, props[i].key) <= 0) {\n\t\t\t\tconst ecmp = compareKeys(_end, props[i].key);\n\t\t\t\tif (ecmp < 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!action(props[i], accum)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {\n\t\tmapRange(action, accum);\n\t}\n\n\tfunction min() {\n\t\tif (props.length > 0) {\n\t\t\treturn props[0];\n\t\t}\n\t}\n\tfunction max() {\n\t\tif (props.length > 0) {\n\t\t\treturn props[props.length - 1];\n\t\t}\n\t}\n\n\tfunction get(key: TKey) {\n\t\tfor (let i = 0, len = props.length; i < len; i++) {\n\t\t\tif (props[i].key === key) {\n\t\t\t\treturn props[i];\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction put(key: TKey, data: TData) {\n\t\tif (key !== undefined) {\n\t\t\tif (data === undefined) {\n\t\t\t\tremove(key);\n\t\t\t} else {\n\t\t\t\tprops.push({ key, data });\n\t\t\t\tprops.sort(compareProps); // Go to insertion sort if too slow\n\t\t\t}\n\t\t}\n\t}\n\tfunction remove(key: TKey) {\n\t\tif (key !== undefined) {\n\t\t\tfor (let i = 0, len = props.length; i < len; i++) {\n\t\t\t\tif (props[i].key === key) {\n\t\t\t\t\tprops[i] = props[len - 1];\n\t\t\t\t\tprops.length--;\n\t\t\t\t\tprops.sort(compareProps);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tmin,\n\t\tmax,\n\t\tmap,\n\t\tmapRange,\n\t\tremove,\n\t\tget,\n\t\tput,\n\t};\n}\n\nlet logLines: string[];\nfunction log(message: any) {\n\tif (logLines) {\n\t\tlogLines.push(message.toString());\n\t}\n}\n\nfunction printStringProperty(p?: Property<string, string>) {\n\tlog(`[${p?.key}, ${p?.data}]`);\n\treturn true;\n}\n\nfunction printStringNumProperty(p: Property<string, number>) {\n\tlog(`[${p.key}, ${p.data}]`);\n\treturn true;\n}\n\nexport function simpleTest() {\n\tconst a = [\"Aardvark\", \"cute\", \"Baboon\", \"big\", \"Chameleon\", \"colorful\", \"Dingo\", \"wild\"];\n\n\tconst beast = new RedBlackTree<string, string>(compareStrings);\n\tfor (let i = 0; i < a.length; i += 2) {\n\t\tbeast.put(a[i], a[i + 1]);\n\t}\n\tbeast.map(printStringProperty);\n\tlog(\"Map B D\");\n\tlog(\"Map Aardvark Dingo\");\n\tlog(\"Map Baboon Chameleon\");\n\tprintStringProperty(beast.get(\"Chameleon\"));\n}\n\nconst clock = () => Trace.start();\n\nfunction took(desc: string, trace: Trace) {\n\tconst duration = trace.trace().duration;\n\tlog(`${desc} took ${duration} ms`);\n\treturn duration;\n}\n\nfunction elapsedMicroseconds(trace: Trace) {\n\treturn trace.trace().duration * 1000;\n}\n\nexport function integerTest1() {\n\tconst random = makeRandom(0xdeadbeef, 0xfeedbed);\n\tconst imin = 0;\n\tconst imax = 10000000;\n\tconst intCount = 1100000;\n\tconst beast = new RedBlackTree<number, number>(compareNumbers);\n\n\tconst randInt = () => random.integer(imin, imax);\n\tconst pos = new Array<number>(intCount);\n\tlet i = 0;\n\tlet redo = false;\n\tfunction onConflict(key: number, currentKey: number) {\n\t\tredo = true;\n\t\treturn { data: currentKey };\n\t}\n\tlet conflictCount = 0;\n\tlet start = clock();\n\twhile (i < intCount) {\n\t\tpos[i] = randInt();\n\t\tbeast.put(pos[i], i, onConflict);\n\t\tif (!redo) {\n\t\t\ti++;\n\t\t} else {\n\t\t\tconflictCount++;\n\t\t\tredo = false;\n\t\t}\n\t}\n\ttook(\"test gen\", start);\n\tconst errorCount = 0;\n\tstart = clock();\n\tfor (let j = 0, len = pos.length; j < len; j++) {\n\t\tconst cp = pos[j];\n\t\t/* let prop = */ beast.get(cp);\n\t}\n\tconst getdur = took(\"get all keys\", start);\n\tlog(`cost per get is ${((1000.0 * getdur) / intCount).toFixed(3)} us`);\n\tlog(`duplicates ${conflictCount}, errors ${errorCount}`);\n\treturn errorCount;\n}\n\nexport function fileTest1() {\n\tconst content = fs.readFileSync(\n\t\tpath.join(__dirname, \"../../../public/literature/shakespeare.txt\"),\n\t\t\"utf8\",\n\t);\n\tconst a = content.split(\"\\n\");\n\tconst iterCount = a.length >> 2;\n\tconst removeCount = 10;\n\tlog(`len: ${a.length}`);\n\n\tfor (let k = 0; k < iterCount; k++) {\n\t\tconst beast = new RedBlackTree<string, number>(compareStrings);\n\t\tconst linearBeast = LinearDictionary<string, number>(compareStrings);\n\t\tfor (let i = 0, len = a.length; i < len; i++) {\n\t\t\ta[i] = a[i].trim();\n\t\t\tif (a[i].length > 0) {\n\t\t\t\tbeast.put(a[i], i);\n\t\t\t\tlinearBeast.put(a[i], i);\n\t\t\t}\n\t\t}\n\t\tif (k === 0) {\n\t\t\tbeast.map(printStringNumProperty);\n\t\t\tlog(\"BTREE...\");\n\t\t}\n\t\tconst removedAnimals: string[] = [];\n\t\tfor (let j = 0; j < removeCount; j++) {\n\t\t\tconst removeIndex = Math.floor(Math.random() * a.length);\n\t\t\tlog(`Removing: ${a[removeIndex]} at ${removeIndex}`);\n\t\t\tbeast.remove(a[removeIndex]);\n\t\t\tlinearBeast.remove(a[removeIndex]);\n\t\t\tremovedAnimals.push(a[removeIndex]);\n\t\t}\n\t\tfor (const animal of a) {\n\t\t\tif (animal.length > 0 && !removedAnimals.includes(animal)) {\n\t\t\t\tconst prop = beast.get(animal);\n\t\t\t\tconst linProp = linearBeast.get(animal);\n\t\t\t\t// log(`Trying key ${animal}`);\n\t\t\t\tif (prop) {\n\t\t\t\t\t// printStringNumProperty(prop);\n\t\t\t\t\tif (\n\t\t\t\t\t\tlinProp === undefined ||\n\t\t\t\t\t\tprop.key !== linProp.key ||\n\t\t\t\t\t\tprop.data !== linProp.data\n\t\t\t\t\t) {\n\t\t\t\t\t\tlog(`Linear BST does not match RB BST at key ${animal}`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlog(`hmm...bad key: ${animal}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction printTextSegment(textSegment: ISegment, pos: number) {\n\tlog(textSegment.toString());\n\tlog(`at [${pos}, ${pos + textSegment.cachedLength})`);\n\treturn true;\n}\n\nexport function makeTextSegment(text: string): IMergeNode {\n\treturn new TextSegment(text);\n}\n\nfunction makeCollabTextSegment(text: string) {\n\treturn new TextSegment(text);\n}\n\nfunction editFlat(source: string, s: number, dl: number, nt = \"\") {\n\treturn source.substring(0, s) + nt + source.substring(s + dl, source.length);\n}\n\nlet accumTime = 0;\n\nfunction checkInsertMergeTree(\n\tmergeTree: MergeTree,\n\tpos: number,\n\ttextSegment: TextSegment,\n\tverbose = false,\n) {\n\tlet checkText = new MergeTreeTextHelper(mergeTree).getText(\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t);\n\tcheckText = editFlat(checkText, pos, 0, textSegment.text);\n\tconst clockStart = clock();\n\tinsertText({\n\t\tmergeTree,\n\t\tpos,\n\t\trefSeq: UniversalSequenceNumber,\n\t\tclientId: LocalClientId,\n\t\tseq: UniversalSequenceNumber,\n\t\ttext: textSegment.text,\n\t\tprops: undefined,\n\t\topArgs: undefined,\n\t});\n\taccumTime += elapsedMicroseconds(clockStart);\n\tconst updatedText = new MergeTreeTextHelper(mergeTree).getText(\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t);\n\tconst result = checkText === updatedText;\n\tif (!result && verbose) {\n\t\tlog(`mismatch(o): ${checkText}`);\n\t\tlog(`mismatch(u): ${updatedText}`);\n\t}\n\treturn result;\n}\n\nfunction checkMarkRemoveMergeTree(\n\tmergeTree: MergeTree,\n\tstart: number,\n\tend: number,\n\tverbose = false,\n) {\n\tconst helper = new MergeTreeTextHelper(mergeTree);\n\tconst origText = helper.getText(UniversalSequenceNumber, LocalClientId);\n\tconst checkText = editFlat(origText, start, end - start);\n\tconst clockStart = clock();\n\tmergeTree.markRangeRemoved(\n\t\tstart,\n\t\tend,\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t\tUniversalSequenceNumber,\n\t\tfalse,\n\t\t{ op: createRemoveRangeOp(start, end) },\n\t);\n\taccumTime += elapsedMicroseconds(clockStart);\n\tconst updatedText = helper.getText(UniversalSequenceNumber, LocalClientId);\n\tconst result = checkText === updatedText;\n\tif (!result && verbose) {\n\t\tlog(`mismatch(o): ${origText}`);\n\t\tlog(`mismatch(c): ${checkText}`);\n\t\tlog(`mismatch(u): ${updatedText}`);\n\t}\n\treturn result;\n}\n\nexport function mergeTreeTest1() {\n\tconst mergeTree = new MergeTree();\n\tmergeTree.insertSegments(\n\t\t0,\n\t\t[TextSegment.make(\"the cat is on the mat\")],\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t\tUniversalSequenceNumber,\n\t\tundefined,\n\t);\n\tmergeTree.mapRange(printTextSegment, UniversalSequenceNumber, LocalClientId, undefined);\n\tlet fuzzySeg = makeCollabTextSegment(\"fuzzy, fuzzy \");\n\tcheckInsertMergeTree(mergeTree, 4, fuzzySeg);\n\tfuzzySeg = makeCollabTextSegment(\"fuzzy, fuzzy \");\n\tcheckInsertMergeTree(mergeTree, 4, fuzzySeg);\n\tcheckMarkRemoveMergeTree(mergeTree, 4, 13);\n\t// checkRemoveSegTree(segTree, 4, 13);\n\tcheckInsertMergeTree(mergeTree, 4, makeCollabTextSegment(\"fi\"));\n\tmergeTree.mapRange(printTextSegment, UniversalSequenceNumber, LocalClientId, undefined);\n\tconst segoff = mergeTree.getContainingSegment(4, UniversalSequenceNumber, LocalClientId);\n\tlog(mergeTree.getPosition(segoff.segment!, UniversalSequenceNumber, LocalClientId));\n\tlog(new MergeTreeTextHelper(mergeTree).getText(UniversalSequenceNumber, LocalClientId));\n\tlog(mergeTree.toString());\n\tTestPack().firstTest();\n}\n\nexport function mergeTreeLargeTest() {\n\tconst mergeTree = new MergeTree();\n\tmergeTree.insertSegments(\n\t\t0,\n\t\t[TextSegment.make(\"the cat is on the mat\")],\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t\tUniversalSequenceNumber,\n\t\tundefined,\n\t);\n\tconst insertCount = 1000000;\n\tconst removeCount = 980000;\n\tconst random = makeRandom(0xdeadbeef, 0xfeedbed);\n\tconst imin = 1;\n\tconst imax = 9;\n\tconst randInt = () => random.integer(imin, imax);\n\tfunction randomString(len: number, c: string) {\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tstr += c;\n\t\t}\n\t\treturn str;\n\t}\n\taccumTime = 0;\n\tlet accumTreeSize = 0;\n\tlet treeCount = 0;\n\tfor (let i = 0; i < insertCount; i++) {\n\t\tconst slen = randInt();\n\t\tconst s = randomString(slen, String.fromCharCode(48 + slen));\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\tconst clockStart = clock();\n\t\tinsertText({\n\t\t\tmergeTree,\n\t\t\tpos,\n\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\tclientId: LocalClientId,\n\t\t\tseq: UniversalSequenceNumber,\n\t\t\ttext: s,\n\t\t\tprops: undefined,\n\t\t\topArgs: undefined,\n\t\t});\n\t\taccumTime += elapsedMicroseconds(clockStart);\n\t\tif (i > 0 && 0 === i % 50000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per insert with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\tlog(process.memoryUsage().heapUsed);\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < removeCount; i++) {\n\t\tconst dlen = randInt();\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\t// Log(itree.toString());\n\t\tconst clockStart = clock();\n\t\tmergeTree.markRangeRemoved(\n\t\t\tpos,\n\t\t\tpos + dlen,\n\t\t\tUniversalSequenceNumber,\n\t\t\tLocalClientId,\n\t\t\tUniversalSequenceNumber,\n\t\t\tfalse,\n\t\t\tundefined as any,\n\t\t);\n\t\taccumTime += elapsedMicroseconds(clockStart);\n\n\t\tif (i > 0 && 0 === i % 50000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per del with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function mergeTreeCheckedTest() {\n\tconst mergeTree = new MergeTree();\n\tmergeTree.insertSegments(\n\t\t0,\n\t\t[TextSegment.make(\"the cat is on the mat\")],\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t\tUniversalSequenceNumber,\n\t\tundefined,\n\t);\n\tconst insertCount = 2000;\n\tconst removeCount = 1400;\n\tconst largeRemoveCount = 20;\n\tconst random = makeRandom(0xdeadbeef, 0xfeedbed);\n\n\tconst imin = 1;\n\tconst imax = 9;\n\tconst randInt = () => random.integer(imin, imax);\n\tconst randLargeInt = () => random.integer(10, 1000);\n\tfunction randomString(len: number, c: string) {\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tstr += c;\n\t\t}\n\t\treturn str;\n\t}\n\taccumTime = 0;\n\tlet accumTreeSize = 0;\n\tlet treeCount = 0;\n\tlet errorCount = 0;\n\tfor (let i = 0; i < insertCount; i++) {\n\t\tconst slen = randInt();\n\t\tconst s = randomString(slen, String.fromCharCode(48 + slen));\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\tif (!checkInsertMergeTree(mergeTree, pos, makeCollabTextSegment(s), true)) {\n\t\t\tlog(\n\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} slen: ${slen} s: ${s} itree len: ${mergeTree.getLength(\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tLocalClientId,\n\t\t\t\t)}`,\n\t\t\t);\n\t\t\tlog(mergeTree.toString());\n\t\t\terrorCount++;\n\t\t\tbreak;\n\t\t}\n\t\tif (i > 0 && 0 === i % 1000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per insert with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < largeRemoveCount; i++) {\n\t\tconst dlen = randLargeInt();\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\t// log(itree.toString());\n\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\tlog(\n\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tLocalClientId,\n\t\t\t\t)}`,\n\t\t\t);\n\t\t\tlog(mergeTree.toString());\n\t\t\tbreak;\n\t\t}\n\t\tif (i > 0 && 0 === i % 10) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per large del with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < removeCount; i++) {\n\t\tconst dlen = randInt();\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\t// log(itree.toString());\n\t\tif (i & 1) {\n\t\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\t\tlog(\n\t\t\t\t\t`mr i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\t\tLocalClientId,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t\tlog(mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\t\tlog(\n\t\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\t\tLocalClientId,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t\tlog(mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (i > 0 && 0 === i % 1000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per del with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < insertCount; i++) {\n\t\tconst slen = randInt();\n\t\tconst s = randomString(slen, String.fromCharCode(48 + slen));\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\tif (!checkInsertMergeTree(mergeTree, pos, makeCollabTextSegment(s), true)) {\n\t\t\tlog(\n\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} slen: ${slen} s: ${s} itree len: ${mergeTree.getLength(\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tLocalClientId,\n\t\t\t\t)}`,\n\t\t\t);\n\t\t\tlog(mergeTree.toString());\n\t\t\terrorCount++;\n\t\t\tbreak;\n\t\t}\n\t\tif (i > 0 && 0 === i % 1000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per insert with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < removeCount; i++) {\n\t\tconst dlen = randInt();\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\t// log(itree.toString());\n\t\tif (i & 1) {\n\t\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\t\tlog(\n\t\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\t\tLocalClientId,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t\tlog(mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\t\tlog(\n\t\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\t\tLocalClientId,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t\tlog(mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (i > 0 && 0 === i % 1000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per del with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\treturn errorCount;\n}\n\ntype SharedStringJSONSegment = IJSONTextSegment & IJSONMarkerSegment;\n\nexport function TestPack(verbose = true) {\n\tconst random = makeRandom(0xdeadbeef, 0xfeedbed);\n\tconst minSegCount = 1;\n\tconst maxSegCount = 1000;\n\tconst randSmallSegmentCount = () => random.integer(1, 4);\n\tconst randSegmentCount = () => random.integer(minSegCount, maxSegCount);\n\tconst randTextLength = () => random.integer(1, 5);\n\tconst zedCode = 48;\n\tfunction randomString(len: number, c: string) {\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tstr += c;\n\t\t}\n\t\treturn str;\n\t}\n\n\tlet getTextTime = 0;\n\tlet getTextCalls = 0;\n\tconst catchUpTime = 0;\n\tconst catchUps = 0;\n\n\tfunction reportTiming(client: TestClient) {\n\t\tif (!verbose) {\n\t\t\treturn;\n\t\t}\n\t\tconst aveTime = (client.accumTime / client.accumOps).toFixed(1);\n\t\tconst stats = getStats(client.mergeTree);\n\t\tconst windowTime = stats.windowTime!;\n\t\tconst packTime = stats.packTime;\n\t\tconst aveWindowTime = ((windowTime || 0) / client.accumOps).toFixed(1);\n\t\tconst avePackTime = ((packTime ?? 0) / client.accumOps).toFixed(1);\n\t\tconst aveExtraWindowTime = (client.accumWindowTime / client.accumOps).toFixed(1);\n\t\tconst aveWindow = (client.accumWindow / client.accumOps).toFixed(1);\n\t\tconst adjTime = (\n\t\t\t(client.accumTime - (windowTime - client.accumWindowTime)) /\n\t\t\tclient.accumOps\n\t\t).toFixed(1);\n\t\tconst aveGetTextTime = (getTextTime / getTextCalls).toFixed(1);\n\t\tlet aveCatchUpTime = \"off\";\n\t\tif (catchUps > 0) {\n\t\t\taveCatchUpTime = (catchUpTime / catchUps).toFixed(1);\n\t\t}\n\t\tlog(`get text time: ${aveGetTextTime} catch up ${aveCatchUpTime}`);\n\t\tlog(\n\t\t\t`accum time ${client.accumTime} us ops: ${client.accumOps} ave time ${aveTime} - wtime ${adjTime} pack ${avePackTime} ave window ${aveWindow}`,\n\t\t);\n\t\tlog(\n\t\t\t`accum window time ${client.accumWindowTime} us ave window time total ${aveWindowTime} not in ops ${aveExtraWindowTime}; max ${client.maxWindowTime}`,\n\t\t);\n\t}\n\n\tfunction manyMergeTrees() {\n\t\tconst mergeTreeCount = 2000000;\n\t\tconst a = <MergeTree[]>Array(mergeTreeCount);\n\t\tfor (let i = 0; i < mergeTreeCount; i++) {\n\t\t\ta[i] = new MergeTree();\n\t\t}\n\t\tfor (;;) {}\n\t}\n\n\tfunction clientServer(startFile?: string, initRounds = 1000) {\n\t\tconst clientCount = 5;\n\t\tconst fileSegCount = 0;\n\t\tlet initString = \"\";\n\n\t\tif (!startFile) {\n\t\t\tinitString = \"don't ask for whom the bell tolls; it tolls for thee\";\n\t\t}\n\t\tconst server = new TestServer();\n\t\tserver.insertTextLocal(0, initString);\n\t\tserver.measureOps = true;\n\t\tif (startFile) {\n\t\t\tloadTextFromFile(startFile, server.mergeTree, fileSegCount);\n\t\t}\n\n\t\tconst clients = new Array<TestClient>(clientCount);\n\t\tfor (let i = 0; i < clientCount; i++) {\n\t\t\tclients[i] = new TestClient();\n\t\t\tclients[i].insertTextLocal(0, initString);\n\t\t\tclients[i].measureOps = true;\n\t\t\tif (startFile) {\n\t\t\t\tloadTextFromFile(startFile, clients[i].mergeTree, fileSegCount);\n\t\t\t}\n\t\t\tclients[i].startOrUpdateCollaboration(`Fred${i}`);\n\t\t}\n\t\tserver.startOrUpdateCollaboration(\"theServer\");\n\t\tserver.addClients(clients);\n\n\t\tfunction checkTextMatch() {\n\t\t\t// log(`checking text match @${server.getCurrentSeq()}`);\n\t\t\tconst clockStart = clock();\n\t\t\tconst serverText = server.getText();\n\t\t\tgetTextTime += elapsedMicroseconds(clockStart);\n\t\t\tgetTextCalls++;\n\t\t\tfor (const client of clients) {\n\t\t\t\tconst cliText = client.getText();\n\t\t\t\tif (cliText !== serverText) {\n\t\t\t\t\tlog(\n\t\t\t\t\t\t`mismatch @${server.getCurrentSeq()} client @${client.getCurrentSeq()} id: ${client.getClientId()}`,\n\t\t\t\t\t);\n\t\t\t\t\t// log(serverText);\n\t\t\t\t\t// log(cliText);\n\t\t\t\t\tconst diffParts = JsDiff.diffChars(serverText, cliText);\n\t\t\t\t\tfor (const diffPart of diffParts) {\n\t\t\t\t\t\tlet annotes = \"\";\n\t\t\t\t\t\tif (diffPart.added) {\n\t\t\t\t\t\t\tannotes += \"added \";\n\t\t\t\t\t\t} else if (diffPart.removed) {\n\t\t\t\t\t\t\tannotes += \"removed \";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (diffPart.count) {\n\t\t\t\t\t\t\tannotes += `count: ${diffPart.count}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog(`text: ${diffPart.value} ${annotes}`);\n\t\t\t\t\t}\n\t\t\t\t\tlog(server.mergeTree.toString());\n\t\t\t\t\tlog(client.mergeTree.toString());\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tconst rounds = initRounds;\n\n\t\tfunction clientProcessSome(client: TestClient, all = false) {\n\t\t\tconst cliMsgCount = client.getMessageCount();\n\t\t\tconst countToApply = all\n\t\t\t\t? cliMsgCount\n\t\t\t\t: random.integer(Math.floor((2 * cliMsgCount) / 3), cliMsgCount);\n\t\t\tclient.applyMessages(countToApply);\n\t\t}\n\n\t\tfunction serverProcessSome(_server: TestClient, all = false) {\n\t\t\tconst svrMsgCount = _server.getMessageCount();\n\t\t\tconst countToApply = all\n\t\t\t\t? svrMsgCount\n\t\t\t\t: random.integer(Math.floor((2 * svrMsgCount) / 3), svrMsgCount);\n\t\t\treturn _server.applyMessages(countToApply);\n\t\t}\n\n\t\tfunction randomSpateOfInserts(client: TestClient, charIndex: number) {\n\t\t\tconst textLen = randTextLength();\n\t\t\tconst text = randomString(\n\t\t\t\ttextLen,\n\t\t\t\tString.fromCharCode(zedCode + ((client.getCurrentSeq() + charIndex) % 50)),\n\t\t\t);\n\t\t\tconst preLen = client.getLength();\n\t\t\tconst pos = random.integer(0, preLen);\n\t\t\tconst insertTextOp = client.insertTextLocal(pos, text);\n\t\t\tserver.enqueueMsg(client.makeOpMessage(insertTextOp!, UnassignedSequenceNumber));\n\n\t\t\tif (TestClient.useCheckQ) {\n\t\t\t\tclient.enqueueTestString();\n\t\t\t}\n\t\t}\n\n\t\tfunction randomSpateOfRemoves(client: TestClient) {\n\t\t\tconst dlen = randTextLength();\n\t\t\tconst preLen = client.getLength();\n\t\t\tconst pos = random.integer(0, preLen);\n\t\t\tconst op = client.removeRangeLocal(pos, pos + dlen);\n\t\t\tserver.enqueueMsg(client.makeOpMessage(op!));\n\t\t\tif (TestClient.useCheckQ) {\n\t\t\t\tclient.enqueueTestString();\n\t\t\t}\n\t\t}\n\n\t\tfunction randomWordMove(client: TestClient) {\n\t\t\tconst word1 = client.findRandomWord();\n\t\t\tif (word1) {\n\t\t\t\tconst removeStart = word1.pos;\n\t\t\t\tconst removeEnd = removeStart + word1.text.length;\n\t\t\t\tconst removeOp = client.removeRangeLocal(removeStart, removeEnd);\n\t\t\t\tserver.enqueueMsg(client.makeOpMessage(removeOp!, UnassignedSequenceNumber));\n\t\t\t\tif (TestClient.useCheckQ) {\n\t\t\t\t\tclient.enqueueTestString();\n\t\t\t\t}\n\t\t\t\tlet word2 = client.findRandomWord();\n\t\t\t\twhile (!word2) {\n\t\t\t\t\tword2 = client.findRandomWord();\n\t\t\t\t}\n\t\t\t\tconst pos = word2.pos + word2.text.length;\n\t\t\t\tconst insertOp = client.insertTextLocal(pos, word1.text);\n\t\t\t\tserver.enqueueMsg(client.makeOpMessage(insertOp!, UnassignedSequenceNumber));\n\n\t\t\t\tif (TestClient.useCheckQ) {\n\t\t\t\t\tclient.enqueueTestString();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet errorCount = 0;\n\n\t\tconst extractSnapTime = 0;\n\t\tconst extractSnapOps = 0;\n\t\tfunction finishRound(roundCount: number) {\n\t\t\t// Process remaining messages\n\t\t\tif (serverProcessSome(server, true)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const client of clients) {\n\t\t\t\tclientProcessSome(client, true);\n\t\t\t}\n\n\t\t\tif (0 === roundCount % 100) {\n\t\t\t\tconst clockStart = clock();\n\t\t\t\tif (checkTextMatch()) {\n\t\t\t\t\tlog(`round: ${roundCount} BREAK`);\n\t\t\t\t\terrorCount++;\n\t\t\t\t\treturn errorCount;\n\t\t\t\t}\n\t\t\t\tcheckTime += elapsedMicroseconds(clockStart);\n\t\t\t\tif (verbose) {\n\t\t\t\t\tlog(`wall clock is ${((Date.now() - startTime) / 1000.0).toFixed(1)}`);\n\t\t\t\t}\n\t\t\t\tconst stats = getStats(server.mergeTree);\n\t\t\t\tconst liveAve = (stats.liveCount / stats.nodeCount).toFixed(1);\n\t\t\t\tconst posLeaves = stats.leafCount - stats.removedLeafCount;\n\t\t\t\tlet aveExtractSnapTime = \"off\";\n\t\t\t\tif (extractSnapOps > 0) {\n\t\t\t\t\taveExtractSnapTime = (extractSnapTime / extractSnapOps).toFixed(1);\n\t\t\t\t}\n\t\t\t\tlog(\n\t\t\t\t\t`round: ${roundCount} seq ${\n\t\t\t\t\t\tserver.seq\n\t\t\t\t\t} char count ${server.getLength()} height ${stats.maxHeight} lv ${\n\t\t\t\t\t\tstats.leafCount\n\t\t\t\t\t} rml ${stats.removedLeafCount} p ${posLeaves} nodes ${\n\t\t\t\t\t\tstats.nodeCount\n\t\t\t\t\t} pop ${liveAve} histo ${stats.histo}`,\n\t\t\t\t);\n\t\t\t\tif (extractSnapOps > 0) {\n\t\t\t\t\taveExtractSnapTime = (extractSnapTime / extractSnapOps).toFixed(1);\n\t\t\t\t\tlog(`ave extract snap time ${aveExtractSnapTime}`);\n\t\t\t\t}\n\t\t\t\treportTiming(server);\n\t\t\t\treportTiming(clients[2]);\n\t\t\t\tlet totalTime = server.accumTime + server.accumWindowTime;\n\t\t\t\tfor (const client of clients) {\n\t\t\t\t\ttotalTime += client.accumTime + client.accumWindowTime;\n\t\t\t\t}\n\t\t\t\tif (verbose) {\n\t\t\t\t\tlog(\n\t\t\t\t\t\t`total time ${(totalTime / 1000000.0).toFixed(1)} check time ${(\n\t\t\t\t\t\t\tcheckTime / 1000000.0\n\t\t\t\t\t\t).toFixed(1)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// log(server.getText());\n\t\t\t\t// log(server.mergeTree.toString());\n\t\t\t}\n\t\t\treturn errorCount;\n\t\t}\n\n\t\tfunction round(roundCount: number) {\n\t\t\tfor (const client of clients) {\n\t\t\t\tconst insertSegmentCount = randSmallSegmentCount();\n\t\t\t\tfor (let j = 0; j < insertSegmentCount; j++) {\n\t\t\t\t\tif (startFile) {\n\t\t\t\t\t\trandomWordMove(client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trandomSpateOfInserts(client, j);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (serverProcessSome(server)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tclientProcessSome(client);\n\n\t\t\t\tlet removeSegmentCount = Math.floor((3 * insertSegmentCount) / 4);\n\t\t\t\tif (removeSegmentCount < 1) {\n\t\t\t\t\tremoveSegmentCount = 1;\n\t\t\t\t}\n\t\t\t\tfor (let j = 0; j < removeSegmentCount; j++) {\n\t\t\t\t\tif (startFile) {\n\t\t\t\t\t\trandomWordMove(client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trandomSpateOfRemoves(client);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (serverProcessSome(server)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tclientProcessSome(client);\n\t\t\t}\n\t\t\tfinishRound(roundCount);\n\t\t}\n\n\t\tconst startTime = Date.now();\n\t\tlet checkTime = 0;\n\n\t\tfor (let i = 0; i < rounds; i++) {\n\t\t\tround(i);\n\t\t\tif (errorCount > 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\ttail();\n\n\t\tfunction tail() {\n\t\t\treportTiming(server);\n\t\t\treportTiming(clients[2]);\n\t\t\t// log(server.getText());\n\t\t\t// log(server.mergeTree.toString());\n\t\t}\n\t\treturn errorCount;\n\t}\n\n\tfunction randolicious() {\n\t\tconst insertRounds = 40;\n\t\tconst removeRounds = 32;\n\n\t\tconst cliA = new TestClient();\n\t\tcliA.insertTextLocal(0, \"a stitch in time saves nine\");\n\t\tcliA.startOrUpdateCollaboration(\"FredA\");\n\t\tconst cliB = new TestClient();\n\t\tcliB.insertTextLocal(0, \"a stitch in time saves nine\");\n\t\tcliB.startOrUpdateCollaboration(\"FredB\");\n\t\tfunction checkTextMatch(checkSeq: number) {\n\t\t\tlet error = false;\n\t\t\tif (cliA.getCurrentSeq() !== checkSeq) {\n\t\t\t\tlog(`client A has seq number ${cliA.getCurrentSeq()} mismatch with ${checkSeq}`);\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\tif (cliB.getCurrentSeq() !== checkSeq) {\n\t\t\t\tlog(`client B has seq number ${cliB.getCurrentSeq()} mismatch with ${checkSeq}`);\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\tconst aText = cliA.getText();\n\t\t\tconst bText = cliB.getText();\n\t\t\tif (aText !== bText) {\n\t\t\t\tlog(`mismatch @${checkSeq}:`);\n\t\t\t\tlog(aText);\n\t\t\t\tlog(bText);\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\tif (!nodeOrdinalsHaveIntegrity(cliA.mergeTree.root)) {\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\tif (!nodeOrdinalsHaveIntegrity(cliB.mergeTree.root)) {\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\treturn error;\n\t\t}\n\n\t\tlet min = 0;\n\t\tcliA.accumTime = 0;\n\t\tcliB.accumTime = 0;\n\n\t\tfunction insertTest() {\n\t\t\tfor (let i = 0; i < insertRounds; i++) {\n\t\t\t\tlet insertCount = randSegmentCount();\n\t\t\t\tlet sequenceNumber = cliA.getCurrentSeq() + 1;\n\t\t\t\tlet firstSeq = sequenceNumber;\n\t\t\t\tconst cliAMsgs: ISequencedDocumentMessage[] = [];\n\t\t\t\tfor (let j = 0; j < insertCount; j++) {\n\t\t\t\t\tconst textLen = randTextLength();\n\t\t\t\t\tconst text = randomString(\n\t\t\t\t\t\ttextLen,\n\t\t\t\t\t\tString.fromCharCode(zedCode + (sequenceNumber % 50)),\n\t\t\t\t\t);\n\t\t\t\t\tconst preLen = cliA.getLength();\n\t\t\t\t\tconst pos = random.integer(0, preLen);\n\n\t\t\t\t\tconst msg = cliA.makeOpMessage(\n\t\t\t\t\t\tcliA.insertTextLocal(pos, text)!,\n\t\t\t\t\t\tsequenceNumber++,\n\t\t\t\t\t);\n\t\t\t\t\tmsg.minimumSequenceNumber = min;\n\t\t\t\t\tcliAMsgs.push(msg);\n\t\t\t\t\tcliB.applyMsg(msg);\n\t\t\t\t}\n\t\t\t\tfor (let k = firstSeq; k < sequenceNumber; k++) {\n\t\t\t\t\tcliA.applyMsg(cliAMsgs.shift()!);\n\t\t\t\t}\n\t\t\t\tif (checkTextMatch(sequenceNumber - 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tmin = sequenceNumber - 1;\n\n\t\t\t\tinsertCount = randSegmentCount();\n\t\t\t\tsequenceNumber = cliA.getCurrentSeq() + 1;\n\t\t\t\tfirstSeq = sequenceNumber;\n\t\t\t\tconst cliBMsgs: ISequencedDocumentMessage[] = [];\n\t\t\t\tfor (let j = 0; j < insertCount; j++) {\n\t\t\t\t\tconst textLen = randTextLength();\n\t\t\t\t\tconst text = randomString(\n\t\t\t\t\t\ttextLen,\n\t\t\t\t\t\tString.fromCharCode(zedCode + (sequenceNumber % 50)),\n\t\t\t\t\t);\n\t\t\t\t\tconst preLen = cliB.getLength();\n\t\t\t\t\tconst pos = random.integer(0, preLen);\n\t\t\t\t\tconst msg = cliB.makeOpMessage(\n\t\t\t\t\t\tcliB.insertTextLocal(pos, text)!,\n\t\t\t\t\t\tsequenceNumber++,\n\t\t\t\t\t);\n\t\t\t\t\tmsg.minimumSequenceNumber = min;\n\t\t\t\t\tcliBMsgs.push(msg);\n\t\t\t\t\tcliA.applyMsg(msg);\n\t\t\t\t}\n\t\t\t\tfor (let k = firstSeq; k < sequenceNumber; k++) {\n\t\t\t\t\tcliB.applyMsg(cliBMsgs.shift()!);\n\t\t\t\t}\n\t\t\t\tif (checkTextMatch(sequenceNumber - 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tmin = sequenceNumber - 1;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction removeTest() {\n\t\t\tfor (let i = 0; i < removeRounds; i++) {\n\t\t\t\tlet removeCount = randSegmentCount();\n\t\t\t\tlet sequenceNumber = cliA.getCurrentSeq() + 1;\n\t\t\t\tlet firstSeq = sequenceNumber;\n\t\t\t\tconst cliAMsgs: ISequencedDocumentMessage[] = [];\n\t\t\t\tfor (let j = 0; j < removeCount; j++) {\n\t\t\t\t\tconst dlen = randTextLength();\n\t\t\t\t\tconst maxStartPos = cliA.getLength() - dlen;\n\t\t\t\t\tconst pos = random.integer(0, maxStartPos);\n\t\t\t\t\tconst msg = cliA.makeOpMessage(\n\t\t\t\t\t\tcliA.removeRangeLocal(pos, pos + dlen)!,\n\t\t\t\t\t\tsequenceNumber++,\n\t\t\t\t\t);\n\t\t\t\t\tmsg.minimumSequenceNumber = min;\n\t\t\t\t\tcliAMsgs.push(msg);\n\t\t\t\t\tcliB.applyMsg(msg);\n\t\t\t\t}\n\t\t\t\tfor (let k = firstSeq; k < sequenceNumber; k++) {\n\t\t\t\t\tcliA.applyMsg(cliAMsgs.shift()!);\n\t\t\t\t}\n\t\t\t\tif (checkTextMatch(sequenceNumber - 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tmin = sequenceNumber - 1;\n\n\t\t\t\tremoveCount = randSegmentCount();\n\t\t\t\tsequenceNumber = cliA.getCurrentSeq() + 1;\n\t\t\t\tfirstSeq = sequenceNumber;\n\t\t\t\tconst cliBMsgs: ISequencedDocumentMessage[] = [];\n\t\t\t\tfor (let j = 0; j < removeCount; j++) {\n\t\t\t\t\tconst dlen = randTextLength();\n\t\t\t\t\tconst maxStartPos = cliB.getLength() - dlen;\n\t\t\t\t\tconst pos = random.integer(0, maxStartPos);\n\t\t\t\t\tconst msg = cliB.makeOpMessage(\n\t\t\t\t\t\tcliB.removeRangeLocal(pos, pos + dlen)!,\n\t\t\t\t\t\tsequenceNumber++,\n\t\t\t\t\t);\n\t\t\t\t\tmsg.minimumSequenceNumber = min;\n\t\t\t\t\tcliBMsgs.push(msg);\n\t\t\t\t\tcliA.applyMsg(msg);\n\t\t\t\t}\n\t\t\t\tfor (let k = firstSeq; k < sequenceNumber; k++) {\n\t\t\t\t\tcliB.applyMsg(cliBMsgs.shift()!);\n\t\t\t\t}\n\t\t\t\tif (checkTextMatch(sequenceNumber - 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tmin = sequenceNumber - 1;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tlet errorCount = 0;\n\t\tif (insertTest()) {\n\t\t\tlog(cliA.mergeTree.toString());\n\t\t\tlog(cliB.mergeTree.toString());\n\t\t\terrorCount++;\n\t\t} else {\n\t\t\tlog(`sequence number: ${cliA.getCurrentSeq()} min: ${cliA.getCollabWindow().minSeq}`);\n\t\t\t// log(cliA.mergeTree.toString());\n\n\t\t\tlog(`testing remove at ${cliA.getCurrentSeq()} and ${cliB.getCurrentSeq()}`);\n\t\t\tif (removeTest()) {\n\t\t\t\tlog(cliA.mergeTree.toString());\n\t\t\t\tlog(cliB.mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t}\n\t\t}\n\t\tlog(`sequence number: ${cliA.getCurrentSeq()} min: ${cliA.getCollabWindow().minSeq}`);\n\t\t// log(cliA.mergeTree.toString());\n\t\t// log(cliB.mergeTree.toString());\n\t\t// log(cliA.getText());\n\t\tconst aveWindow = ((minSegCount + maxSegCount) / 2).toFixed(1);\n\t\tconst aveTime = (cliA.accumTime / cliA.accumOps).toFixed(3);\n\t\tconst aveWindowTime = (cliA.accumWindowTime / cliA.accumOps).toFixed(3);\n\t\tif (verbose) {\n\t\t\tlog(\n\t\t\t\t`accum time ${cliA.accumTime} us ops: ${cliA.accumOps} ave window ${aveWindow} ave time ${aveTime}`,\n\t\t\t);\n\t\t\tlog(\n\t\t\t\t`accum window time ${cliA.accumWindowTime} us ave window time ${aveWindowTime}; max ${cliA.maxWindowTime}`,\n\t\t\t);\n\t\t}\n\t\t// log(cliB.getText());\n\t\treturn errorCount;\n\t}\n\n\tconst clientNames = [\"Ed\", \"Ted\", \"Ned\", \"Harv\", \"Marv\", \"Glenda\", \"Susan\"];\n\tfunction firstTest() {\n\t\tlet cli = new TestClient();\n\t\tcli.insertTextLocal(0, \"on the mat.\");\n\t\tcli.startOrUpdateCollaboration(\"Fred1\");\n\t\tfor (const cname of clientNames) {\n\t\t\tcli.addLongClientId(cname);\n\t\t}\n\t\tcli.insertTextRemote(0, \"that \", undefined, 1, 0, \"1\");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tcli.insertTextRemote(0, \"fat \", undefined, 2, 0, \"2\");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tcli.insertTextLocal(5, \"cat \");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tif (verbose) {\n\t\t\tfor (let i = 0; i < 4; i++) {\n\t\t\t\tfor (let j = 0; j < 3; j++) {\n\t\t\t\t\tlog(cli.relText(i, j));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.INSERT, 3));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 4; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli.insertMarkerRemote(\n\t\t\t0,\n\t\t\t{ refType: ReferenceType.Tile },\n\t\t\t{ [reservedTileLabelsKey]: [\"peach\"] },\n\t\t\t5,\n\t\t\t0,\n\t\t\t\"2\",\n\t\t);\n\t\tcli.insertTextRemote(6, \"very \", undefined, 6, 2, \"2\");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 7; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst segs = <SharedStringJSONSegment[]>(\n\t\t\tnew SnapshotLegacy(cli.mergeTree, createChildLogger({ namespace: \"fluid:snapshot\" }))\n\t\t\t\t.extractSync()\n\t\t\t\t.map((seg) => seg.toJSONObject() as JsonSegmentSpecs)\n\t\t);\n\t\tif (verbose) {\n\t\t\tfor (const seg of segs) {\n\t\t\t\tlog(`${specToSegment(seg)}`);\n\t\t\t}\n\t\t}\n\t\tcli = new TestClient();\n\t\tcli.insertTextLocal(0, \" old sock!\");\n\t\tcli.startOrUpdateCollaboration(\"Fred2\");\n\t\tfor (const cname of clientNames) {\n\t\t\tcli.addLongClientId(cname);\n\t\t}\n\t\tcli.insertTextRemote(0, \"abcde\", undefined, 1, 0, \"2\");\n\t\tcli.insertTextRemote(0, \"yyy\", undefined, 2, 0, \"1\");\n\t\tcli.insertTextRemote(2, \"zzz\", undefined, 3, 1, \"3\");\n\t\tcli.insertTextRemote(1, \"EAGLE\", undefined, 4, 1, \"4\");\n\t\tcli.insertTextRemote(4, \"HAS\", undefined, 5, 1, \"5\");\n\t\tcli.insertTextLocal(19, \" LANDED\");\n\t\tcli.insertTextRemote(0, \"yowza: \", undefined, 6, 4, \"2\");\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.INSERT, 7));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 6; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 8; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(3, 5), 8, 6, \"1\"));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 6; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 9; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli = new TestClient();\n\t\tcli.insertTextLocal(0, \"abcdefgh\");\n\t\tcli.startOrUpdateCollaboration(\"Fred3\");\n\t\tfor (const cname of clientNames) {\n\t\t\tcli.addLongClientId(cname);\n\t\t}\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(1, 3), 1, 0, \"3\"));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tcli.insertTextRemote(2, \"zzz\", undefined, 2, 0, \"2\");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tcli.insertTextRemote(9, \" chaser\", undefined, 3, 2, \"3\");\n\t\tcli.removeRangeLocal(12, 14);\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.REMOVE, 4));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 5; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli.insertTextLocal(14, \"*yolumba*\");\n\t\tcli.insertTextLocal(17, \"-zanzibar-\");\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.INSERT, 5));\n\t\tcli.insertTextRemote(2, \"(aaa)\", undefined, 6, 4, \"2\");\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.INSERT, 7));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 8; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t/*\n cli.removeRangeLocal(3,8);\n cli.removeRangeLocal(5,7);\n cli.ackPendingSegment(8);\n cli.ackPendingSegment(9);\n */\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(3, 8), 8, 7, \"2\"));\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(5, 7), 9, 7, \"2\"));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 10; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst removeOp = cli.removeRangeLocal(3, 5);\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(3, 6), 10, 9, \"2\"));\n\t\tcli.applyMsg(cli.makeOpMessage(removeOp!, 11));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 12; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tfirstTest,\n\t\trandolicious,\n\t\tclientServer,\n\t\tmanyMergeTrees,\n\t};\n}\n\nconst createLocalOpArgs = (\n\ttype: MergeTreeDeltaType,\n\tsequenceNumber: number,\n): IMergeTreeDeltaOpArgs => ({\n\top: { type } as IMergeTreeOp,\n\tsequencedMessage: {\n\t\tsequenceNumber,\n\t} as ISequencedDocumentMessage,\n});\n\nexport class RandomPack {\n\trandom: IRandom;\n\tconstructor() {\n\t\tthis.random = makeRandom(0xdeadbeef, 0xfeedbed);\n\t}\n\n\trandInteger(min: number, max: number) {\n\t\treturn this.random.integer(min, max);\n\t}\n\n\trandString(wordCount: number) {\n\t\tconst exampleWords = [\n\t\t\t\"giraffe\",\n\t\t\t\"hut\",\n\t\t\t\"aardvark\",\n\t\t\t\"gold\",\n\t\t\t\"hover\",\n\t\t\t\"yurt\",\n\t\t\t\"hot\",\n\t\t\t\"antelope\",\n\t\t\t\"gift\",\n\t\t\t\"banana\",\n\t\t\t\"book\",\n\t\t\t\"airplane\",\n\t\t\t\"kitten\",\n\t\t\t\"moniker\",\n\t\t\t\"lemma\",\n\t\t\t\"doughnut\",\n\t\t\t\"orange\",\n\t\t\t\"tangerine\",\n\t\t];\n\t\tlet buf = \"\";\n\t\tfor (let i = 0; i < wordCount; i++) {\n\t\t\tconst exampleWord = exampleWords[this.randInteger(0, exampleWords.length - 1)];\n\t\t\tif (i > 0) {\n\t\t\t\tbuf += \" \";\n\t\t\t}\n\t\t\tbuf += exampleWord;\n\t\t}\n\t\treturn buf;\n\t}\n}\n\nexport type DocumentNode = string | DocumentTree;\n/**\n * Generate and model documents from the following tree grammar:\n * Row -\\> row[Box*];\n * Box -\\> box[Content];\n * Content -\\> (Row|Paragraph)*;\n * Paragraph -\\> pgtile text;\n * Document -\\> Content\n */\nexport class DocumentTree {\n\tpos = 0;\n\tids = { box: 0, row: 0 };\n\tid: string | undefined;\n\tstatic randPack = new RandomPack();\n\n\tconstructor(\n\t\tpublic name: string,\n\t\tpublic children: DocumentNode[],\n\t) {}\n\n\taddToMergeTree(client: TestClient, docNode: DocumentNode) {\n\t\tif (typeof docNode === \"string\") {\n\t\t\tconst text = docNode;\n\t\t\tclient.insertTextLocal(this.pos, text);\n\t\t\tthis.pos += text.length;\n\t\t} else {\n\t\t\tlet id: number | undefined;\n\t\t\tif (docNode.name === \"pg\") {\n\t\t\t\tclient.insertMarkerLocal(this.pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [docNode.name],\n\t\t\t\t});\n\t\t\t\tthis.pos++;\n\t\t\t} else {\n\t\t\t\tconst trid = docNode.name + this.ids[docNode.name].toString();\n\t\t\t\tdocNode.id = trid;\n\t\t\t\tid = this.ids[docNode.name]++;\n\t\t\t\tconst props = {\n\t\t\t\t\t[reservedMarkerIdKey]: trid,\n\t\t\t\t\t[reservedRangeLabelsKey]: [docNode.name],\n\t\t\t\t};\n\t\t\t\tlet behaviors = ReferenceType.Simple;\n\t\t\t\tif (docNode.name === \"row\") {\n\t\t\t\t\tprops[reservedTileLabelsKey] = [\"pg\"];\n\t\t\t\t\tbehaviors |= ReferenceType.Tile;\n\t\t\t\t}\n\n\t\t\t\tclient.insertMarkerLocal(this.pos, behaviors, props);\n\t\t\t\tthis.pos++;\n\t\t\t}\n\t\t\tfor (const child of docNode.children) {\n\t\t\t\tthis.addToMergeTree(client, child);\n\t\t\t}\n\t\t\tif (docNode.name !== \"pg\") {\n\t\t\t\tconst etrid = `end-${docNode.name}${id?.toString()}`;\n\t\t\t\tclient.insertMarkerLocal(this.pos, ReferenceType.Simple, {\n\t\t\t\t\t[reservedMarkerIdKey]: etrid,\n\t\t\t\t\t[reservedRangeLabelsKey]: [docNode.name],\n\t\t\t\t});\n\t\t\t\tthis.pos++;\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic generateDocument() {\n\t\tconst tree = new DocumentTree(\"Document\", DocumentTree.generateContent(0.6));\n\t\treturn tree;\n\t}\n\n\tstatic generateContent(rowProbability: number) {\n\t\tlet _rowProbability = rowProbability;\n\t\tconst items = <DocumentNode[]>[];\n\t\tconst docLen = DocumentTree.randPack.randInteger(7, 25);\n\t\tfor (let i = 0; i < docLen; i++) {\n\t\t\tconst rowThreshold = _rowProbability * 1000;\n\t\t\tconst selector = DocumentTree.randPack.randInteger(1, 1000);\n\t\t\tif (selector >= rowThreshold) {\n\t\t\t\tconst pg = DocumentTree.generateParagraph();\n\t\t\t\titems.push(pg);\n\t\t\t} else {\n\t\t\t\t_rowProbability /= 2;\n\t\t\t\tif (_rowProbability < 0.08) {\n\t\t\t\t\t_rowProbability = 0;\n\t\t\t\t}\n\t\t\t\tconst row = DocumentTree.generateRow(_rowProbability);\n\t\t\t\titems.push(row);\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t}\n\n\t// Model pg tile as tree with single child\n\tstatic generateParagraph() {\n\t\tconst wordCount = DocumentTree.randPack.randInteger(1, 6);\n\t\tconst text = DocumentTree.randPack.randString(wordCount);\n\t\tconst pgTree = new DocumentTree(\"pg\", [text]);\n\t\treturn pgTree;\n\t}\n\n\tstatic generateRow(rowProbability: number) {\n\t\tconst items = <DocumentNode[]>[];\n\t\tconst rowLen = DocumentTree.randPack.randInteger(1, 5);\n\t\tfor (let i = 0; i < rowLen; i++) {\n\t\t\tconst item = DocumentTree.generateBox(rowProbability);\n\t\t\titems.push(item);\n\t\t}\n\t\treturn new DocumentTree(\"row\", items);\n\t}\n\n\tstatic generateBox(rowProbability: number) {\n\t\treturn new DocumentTree(\"box\", DocumentTree.generateContent(rowProbability));\n\t}\n}\n\nfunction findReplacePerf(filename: string) {\n\tconst client = new TestClient();\n\tloadTextFromFile(filename, client.mergeTree);\n\n\tconst clockStart = clock();\n\n\tlet cFetches = 0;\n\tlet cReplaces = 0;\n\tfor (let pos = 0; pos < client.getLength(); ) {\n\t\tconst curSegOff = client.getContainingSegment(pos);\n\t\tcFetches++;\n\n\t\tconst curSeg = curSegOff.segment;\n\t\tconst textSeg = <TextSegment>curSeg;\n\t\tif (textSeg !== null) {\n\t\t\tconst text = textSeg.text;\n\t\t\tconst i = text.indexOf(\"the\");\n\t\t\tif (i >= 0) {\n\t\t\t\tclient.mergeTree.markRangeRemoved(\n\t\t\t\t\tpos + i,\n\t\t\t\t\tpos + i + 3,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t\t1,\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined as any,\n\t\t\t\t);\n\t\t\t\tinsertText({\n\t\t\t\t\tmergeTree: client.mergeTree,\n\t\t\t\t\tpos: pos + i,\n\t\t\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\t\t\tclientId: client.getClientId(),\n\t\t\t\t\tseq: 1,\n\t\t\t\t\ttext: \"teh\",\n\t\t\t\t\tprops: undefined,\n\t\t\t\t\topArgs: undefined,\n\t\t\t\t});\n\t\t\t\tpos = pos + i + 3;\n\t\t\t\tcReplaces++;\n\t\t\t} else {\n\t\t\t\tpos += curSeg!.cachedLength - curSegOff!.offset!;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst elapsed = elapsedMicroseconds(clockStart);\n\tlog(`${cFetches} fetches and ${cReplaces} replaces took ${elapsed} microseconds`);\n}\n\nconst baseDir = \"../../src/test/literature\";\nconst testTimeout = 60000;\n\ndescribe(\"Routerlicious\", () => {\n\tdescribe(\"merge-tree\", () => {\n\t\tbeforeEach(() => {\n\t\t\tlogLines = [];\n\t\t});\n\t\tit(\"firstTest\", () => {\n\t\t\tconst testPack = TestPack(true);\n\t\t\ttestPack.firstTest();\n\t\t});\n\n\t\tit(\"randolicious\", () => {\n\t\t\tconst testPack = TestPack(false);\n\t\t\tassert(testPack.randolicious() === 0, logLines.join(\"\\n\"));\n\t\t}).timeout(testTimeout);\n\n\t\tit(\"mergeTreeCheckedTest\", () => {\n\t\t\tassert(mergeTreeCheckedTest() === 0, logLines.join(\"\\n\"));\n\t\t}).timeout(testTimeout);\n\n\t\tit(\"beastTest\", () => {\n\t\t\tconst testPack = TestPack(false);\n\t\t\tconst filename = path.join(__dirname, baseDir, \"pp.txt\");\n\t\t\tassert(testPack.clientServer(filename, 250) === 0, logLines.join(\"\\n\"));\n\t\t}).timeout(testTimeout);\n\n\t\tit(\"findReplPerf\", () => {\n\t\t\tconst filename = path.join(__dirname, baseDir, \"pp10.txt\");\n\t\t\tfindReplacePerf(filename);\n\t\t}).timeout(testTimeout);\n\t});\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.apis.d.ts","sourceRoot":"","sources":["../../src/test/client.apis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgCH,wBAAgB,iCAAiC,YAahD;AAqBD,wBAAgB,qCAAqC,YAYpD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.apis.js","sourceRoot":"","sources":["../../src/test/client.apis.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\";\nimport { Client } from \"../client\";\nimport { createMap, matchProperties, PropertySet } from \"../properties\";\nimport { TestClient } from \"./testClient\";\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 +0,0 @@
1
- {"version":3,"file":"wordUnitTests.d.ts","sourceRoot":"","sources":["../../src/test/wordUnitTests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,wBAAgB,YAAY,SAkG3B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"wordUnitTests.js","sourceRoot":"","sources":["../../src/test/wordUnitTests.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 no-bitwise */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport path from \"path\";\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\nimport { Trace } from \"@fluid-internal/client-utils\";\nimport { ReferenceType } from \"../ops\";\nimport { createMap, extend, MapLike } from \"../properties\";\nimport { ReferencePosition } from \"../referencePositions\";\nimport { TestClient } from \"./testClient\";\nimport { loadTextFromFileWithMarkers } from \"./testUtils\";\n\nconst clock = () => Trace.start();\n\nfunction elapsedMicroseconds(trace: Trace) {\n\treturn trace.trace().duration * 1000;\n}\n\nexport function propertyCopy() {\n\tconst propCount = 2000;\n\tconst iterCount = 1000;\n\tconst map = new Map<string, number>();\n\tconst a: string[] = [];\n\tconst v: number[] = [];\n\tfor (let i = 0; i < propCount; i++) {\n\t\ta[i] = `prop${i}`;\n\t\tv[i] = i;\n\t\tmap.set(a[i], v[i]);\n\t}\n\tlet clockStart = clock();\n\tlet obj: MapLike<number> = {};\n\tfor (let j = 0; j < iterCount; j++) {\n\t\tobj = createMap<number>();\n\t\tfor (let i = 0; i < propCount; i++) {\n\t\t\tobj[a[i]] = v[i];\n\t\t}\n\t}\n\tlet et = elapsedMicroseconds(clockStart);\n\tlet perIter = (et / iterCount).toFixed(3);\n\tlet perProp = (et / (iterCount * propCount)).toFixed(3);\n\tconsole.log(\n\t\t`arr prop init time ${perIter} us per ${propCount} properties; ${perProp} us per property`,\n\t);\n\tclockStart = clock();\n\tfor (let j = 0; j < iterCount; j++) {\n\t\tconst bObj = createMap<number>();\n\t\t// eslint-disable-next-line guard-for-in, no-restricted-syntax\n\t\tfor (const key in obj) {\n\t\t\tbObj[key] = obj[key];\n\t\t}\n\t}\n\tet = elapsedMicroseconds(clockStart);\n\tperIter = (et / iterCount).toFixed(3);\n\tperProp = (et / (iterCount * propCount)).toFixed(3);\n\tconsole.log(\n\t\t`obj prop init time ${perIter} us per ${propCount} properties; ${perProp} us per property`,\n\t);\n\tclockStart = clock();\n\tfor (let j = 0; j < iterCount; j++) {\n\t\tconst bObj = createMap<number>();\n\t\tfor (const [key, value] of map) {\n\t\t\tbObj[key] = value;\n\t\t}\n\t}\n\tet = elapsedMicroseconds(clockStart);\n\tperIter = (et / iterCount).toFixed(3);\n\tperProp = (et / (iterCount * propCount)).toFixed(2);\n\tconsole.log(\n\t\t`map prop init time ${perIter} us per ${propCount} properties; ${perProp} us per property`,\n\t);\n\tclockStart = clock();\n\tfor (let j = 0; j < iterCount; j++) {\n\t\tconst bObj = createMap<number>();\n\t\tmap.forEach((value, key) => {\n\t\t\tbObj[key] = value;\n\t\t});\n\t}\n\tet = elapsedMicroseconds(clockStart);\n\tperIter = (et / iterCount).toFixed(3);\n\tperProp = (et / (iterCount * propCount)).toFixed(2);\n\tconsole.log(\n\t\t`map foreach prop init time ${perIter} us per ${propCount} properties; ${perProp} us per property`,\n\t);\n\tclockStart = clock();\n\tfor (let j = 0; j < iterCount; j++) {\n\t\tconst bmap = new Map<string, number>();\n\t\tmap.forEach((value, key) => {\n\t\t\tbmap.set(key, value);\n\t\t});\n\t}\n\tet = elapsedMicroseconds(clockStart);\n\tperIter = (et / iterCount).toFixed(3);\n\tperProp = (et / (iterCount * propCount)).toFixed(2);\n\tconsole.log(\n\t\t`map to map foreach prop init time ${perIter} us per ${propCount} properties; ${perProp} us per property`,\n\t);\n\tconst diffMap = new Map<string, number>();\n\tmap.forEach((value, key) => {\n\t\tif (Math.random() < 0.5) {\n\t\t\tdiffMap.set(key, value);\n\t\t} else {\n\t\t\tdiffMap.set(key, value * 3);\n\t\t}\n\t});\n\tclockStart = clock();\n\tconst grayMap = new Map<string, number>();\n\tfor (let j = 0; j < iterCount; j++) {\n\t\tmap.forEach((value, key) => {\n\t\t\tif (diffMap.get(key) !== value) {\n\t\t\t\tgrayMap.set(key, 1);\n\t\t\t}\n\t\t});\n\t}\n\tperIter = (et / iterCount).toFixed(3);\n\tperProp = (et / (iterCount * propCount)).toFixed(2);\n\tconsole.log(`diff time ${perIter} us per ${propCount} properties; ${perProp} us per property`);\n}\n\nfunction makeBookmarks(client: TestClient, bookmarkCount: number) {\n\tconst random = makeRandom(0xdeadbeef, 0xfeedbed);\n\tconst bookmarks: ReferencePosition[] = [];\n\tconst len = client.getLength();\n\tfor (let i = 0; i < bookmarkCount; i++) {\n\t\tconst pos = random.integer(0, len - 1);\n\t\tconst segoff = client.getContainingSegment(pos);\n\t\tlet refType = ReferenceType.Simple;\n\t\tif (i & 1) {\n\t\t\trefType = ReferenceType.SlideOnRemove;\n\t\t}\n\t\tconst lref = client.mergeTree.createLocalReferencePosition(\n\t\t\tsegoff.segment!,\n\t\t\tsegoff.offset!,\n\t\t\trefType,\n\t\t\tundefined,\n\t\t);\n\t\tbookmarks.push(lref);\n\t}\n\treturn bookmarks;\n}\n\nfunction measureFetch(startFile: string, withBookmarks = false) {\n\tconst bookmarkCount = 20000;\n\tconst client = new TestClient();\n\tloadTextFromFileWithMarkers(startFile, client.mergeTree);\n\tif (withBookmarks) {\n\t\tmakeBookmarks(client, bookmarkCount);\n\t\tconsole.log(`inserting ${bookmarkCount} refs into text`);\n\t}\n\tconst reps = 20;\n\tconst clockStart = clock();\n\tlet count = 0;\n\tfor (let i = 0; i < reps; i++) {\n\t\tfor (let pos = 0; pos < client.getLength(); ) {\n\t\t\t// curPG.pos is ca end\n\t\t\tconst curPG = client.searchForMarker(pos, \"pg\", true)!;\n\t\t\tconst properties = curPG.properties!;\n\t\t\tconst curSegOff = client.getContainingSegment(pos)!;\n\t\t\tconst curSeg = curSegOff.segment!;\n\t\t\t// Combine paragraph and direct properties\n\t\t\textend(properties, curSeg.properties);\n\t\t\tpos += curSeg.cachedLength - curSegOff.offset!;\n\t\t\tcount++;\n\t\t}\n\t}\n\tconst et = elapsedMicroseconds(clockStart);\n\tconsole.log(\n\t\t`fetch of ${count / reps} runs over ${client.getLength()} total chars took ${(\n\t\t\tet / count\n\t\t).toFixed(1)} microseconds per run`,\n\t);\n}\n\nconst baseDir = \"../../src/test/literature\";\nconst filename = path.join(__dirname, baseDir, \"pp.txt\");\nconst testTimeout = 30000;\n\ndescribe(\"Routerlicious\", () => {\n\tdescribe(\"merge-tree\", () => {\n\t\tit(\"wordUnitTest\", () => {\n\t\t\tpropertyCopy();\n\t\t\tmeasureFetch(filename);\n\t\t\tmeasureFetch(filename, true);\n\t\t\tmeasureFetch(filename);\n\t\t\tmeasureFetch(filename, true);\n\t\t}).timeout(testTimeout);\n\t});\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MergeTreeTextHelper.d.mts","sourceRoot":"","sources":["../src/MergeTreeTextHelper.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAII,EAAE,SAAS,EAAE;OAEb,EAAE,oBAAoB,EAAe;AAS5C,qBAAa,mBAAoB,YAAW,oBAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAE1C,OAAO,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAK,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM;IAiBb,OAAO,CAAC,aAAa;CAYrB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MergeTreeTextHelper.mjs","sourceRoot":"","sources":["../src/MergeTreeTextHelper.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAMI,EAAwB,WAAW,EAAE;AAQ5C,gDAAgD;AAChD,MAAM,OAAO,mBAAmB;IAC/B,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE9C,OAAO,CACb,MAAc,EACd,QAAgB,EAChB,WAAW,GAAG,EAAE,EAChB,KAAc,EACd,GAAY;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE/D,MAAM,KAAK,GAAqB,EAAE,WAAW,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;QAElF,IAAI,CAAC,SAAS,CAAC,QAAQ,CACtB,UAAU,EACV,MAAM,EACN,QAAQ,EACR,KAAK,EACL,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,CACT,CAAC;QACF,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAEO,aAAa,CACpB,KAAyB,EACzB,GAAuB,EACvB,MAAc,EACd,QAAgB;QAEhB,MAAM,KAAK,GAAkB;YAC5B,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;YACtD,KAAK,EAAE,KAAK,IAAI,CAAC;SACjB,CAAC;QACF,OAAO,KAAK,CAAC;IACd,CAAC;CACD;AAED,SAAS,UAAU,CAClB,OAAiB,EACjB,GAAW,EACX,MAAc,EACd,QAAgB,EAChB,KAAa,EACb,GAAW,EACX,EAAE,WAAW,EAAE,WAAW,EAAoB;IAE9C,IAAI,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;QAC5B,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;YAC7C,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;SACjC;aAAM;YACN,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACrC,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7C,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SACzD;KACD;SAAM,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;QACjD,MAAM,eAAe;QACpB,gEAAgE;QAChE,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjF,WAAW,CAAC,IAAI,IAAI,eAAe,CAAC;KACpC;IAED,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IIntegerRange } from \"./client\";\nimport { ISegment } from \"./mergeTreeNodes\";\nimport { MergeTree } from \"./mergeTree\";\n// eslint-disable-next-line import/no-deprecated\nimport { IMergeTreeTextHelper, TextSegment } from \"./textSegment\";\n\ninterface ITextAccumulator {\n\ttextSegment: TextSegment;\n\tplaceholder?: string;\n\tparallelArrays?: boolean;\n}\n\n// eslint-disable-next-line import/no-deprecated\nexport class MergeTreeTextHelper implements IMergeTreeTextHelper {\n\tconstructor(private readonly mergeTree: MergeTree) {}\n\n\tpublic getText(\n\t\trefSeq: number,\n\t\tclientId: number,\n\t\tplaceholder = \"\",\n\t\tstart?: number,\n\t\tend?: number,\n\t) {\n\t\tconst range = this.getValidRange(start, end, refSeq, clientId);\n\n\t\tconst accum: ITextAccumulator = { textSegment: new TextSegment(\"\"), placeholder };\n\n\t\tthis.mergeTree.mapRange<ITextAccumulator>(\n\t\t\tgatherText,\n\t\t\trefSeq,\n\t\t\tclientId,\n\t\t\taccum,\n\t\t\trange.start,\n\t\t\trange.end,\n\t\t);\n\t\treturn accum.textSegment.text;\n\t}\n\n\tprivate getValidRange(\n\t\tstart: number | undefined,\n\t\tend: number | undefined,\n\t\trefSeq: number,\n\t\tclientId: number,\n\t): IIntegerRange {\n\t\tconst range: IIntegerRange = {\n\t\t\tend: end ?? this.mergeTree.getLength(refSeq, clientId),\n\t\t\tstart: start ?? 0,\n\t\t};\n\t\treturn range;\n\t}\n}\n\nfunction gatherText(\n\tsegment: ISegment,\n\tpos: number,\n\trefSeq: number,\n\tclientId: number,\n\tstart: number,\n\tend: number,\n\t{ textSegment, placeholder }: ITextAccumulator,\n): boolean {\n\tif (TextSegment.is(segment)) {\n\t\tif (start <= 0 && end >= segment.text.length) {\n\t\t\ttextSegment.text += segment.text;\n\t\t} else {\n\t\t\tconst seglen = segment.text.length;\n\t\t\tconst _start = start < 0 ? 0 : start;\n\t\t\tconst _end = end >= seglen ? undefined : end;\n\t\t\ttextSegment.text += segment.text.substring(_start, _end);\n\t\t}\n\t} else if (placeholder && placeholder.length > 0) {\n\t\tconst placeholderText =\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\t\tplaceholder === \"*\" ? `\\n${segment}` : placeholder.repeat(segment.cachedLength);\n\t\ttextSegment.text += placeholderText;\n\t}\n\n\treturn true;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributionCollection.d.mts","sourceRoot":"","sources":["../src/attributionCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAGI,EACN,cAAc,EAGd,MAAM,qCAAqC;OACrC,EAAE,QAAQ,EAAE;AAEnB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;;;;;;;;;;OAWG;IAEH,IAAI,EAAE,CAAC,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC;IACzC,cAAc,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,+BAAgC,SAAQ,eAAe;IACvE,QAAQ,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;KAAE,CAAC;IAE/C,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B,CAAC,CAAC;IAE5C,IAAI,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAElD,QAAQ,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAC3E,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,gCAAgC;IAChD,KAAK;IACL,+BAA+B,CAC9B,QAAQ,EAAE,QAAQ,CAAC;QAClB,WAAW,CAAC,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;QACrD,YAAY,EAAE,MAAM,CAAC;KACrB,CAAC,GACA,+BAA+B,CAAC;IAEnC;;OAEG;IACH,8BAA8B,CAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC5B,OAAO,EAAE,+BAA+B,GACtC,IAAI,CAAC;CACR;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACxC;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IAE1E;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAExC;;;;;OAKG;IACH,MAAM,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAExC,KAAK;IACL,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAEhD,KAAK;IACL,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE/C,KAAK;IACL,KAAK,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAEnC;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC3E;AAGD,wBAAgB,uBAAuB,CAEtC,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAEpC,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAClC,OAAO,CAwBT;AAED,qBAAa,qBAAsB,YAAW,sBAAsB,CAAC,cAAc,CAAC;IAWlF,OAAO,CAAC,OAAO;IAVhB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,IAAI,CAAiC;IAE7C,OAAO,CAAC,QAAQ,CAAC,CAA4C;IAE7D,OAAO,KAAK,cAAc,GAEzB;gBAGQ,OAAO,EAAE,MAAM,EAEvB,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI;IAQlC,IAAW,YAAY,IAAI,MAAM,EAAE,CAElC;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAC3C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAU/E,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,GAAG;IAKX,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;OAEG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB;IAsB3C,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IA2B1C,MAAM,IAAI,0BAA0B,CAAC,cAAc,CAAC;IAoBpD,KAAK,IAAI,qBAAqB;IAc9B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,qBAAqB;IAkBtE;;OAEG;WACW,8BAA8B,CAC3C,QAAQ,EAAE,QAAQ,EAAE,EACpB,OAAO,EAAE,+BAA+B,GACtC,IAAI;IAuDP;;;;;OAKG;WACW,+BAA+B,CAC5C,QAAQ,EAAE,QAAQ,CAAC;QAClB,WAAW,CAAC,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;QACrD,YAAY,EAAE,MAAM,CAAC;KACrB,CAAC,GACA,+BAA+B;CA8DlC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributionCollection.mjs","sourceRoot":"","sources":["../src/attributionCollection.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\nimport { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport {\n\tAttributionKey,\n\tOpAttributionKey,\n\tDetachedAttributionKey,\n} from \"@fluidframework/runtime-definitions\";\nimport { ISegment } from \"./mergeTreeNodes\";\n\n/**\n * @alpha\n */\nexport interface SequenceOffsets {\n\t/**\n\t * Parallel array with posBreakpoints which tracks the seq of insertion.\n\t *\n\t * @example\n\t *\n\t * If seqs is [45, 46] and posBreakpoints is [0, 3], the section of the string\n\t * between offsets 0 and 3 was inserted at seq 45 and the section of the string between\n\t * 3 and the length of the string was inserted at seq 46.\n\t *\n\t * @remarks We use null here rather than undefined as round-tripping through JSON converts\n\t * undefineds to null anyway\n\t */\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tseqs: (number | AttributionKey | null)[];\n\tposBreakpoints: number[];\n}\n\n/**\n * @alpha\n */\nexport interface SerializedAttributionCollection extends SequenceOffsets {\n\tchannels?: { [name: string]: SequenceOffsets };\n\t/* Total length; only necessary for validation */\n\tlength: number;\n}\n\n/**\n * @alpha\n */\nexport interface IAttributionCollectionSpec<T> {\n\t// eslint-disable-next-line @rushstack/no-new-null\n\troot: Iterable<{ offset: number; key: T | null }>;\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tchannels?: { [name: string]: Iterable<{ offset: number; key: T | null }> };\n\tlength: number;\n}\n\n/**\n * @alpha\n * @sealed\n */\nexport interface IAttributionCollectionSerializer {\n\t/***/\n\tserializeAttributionCollections(\n\t\tsegments: Iterable<{\n\t\t\tattribution?: IAttributionCollection<AttributionKey>;\n\t\t\tcachedLength: number;\n\t\t}>,\n\t): SerializedAttributionCollection;\n\n\t/**\n\t * Populates attribution information on segments using the provided summary.\n\t */\n\tpopulateAttributionCollections(\n\t\tsegments: Iterable<ISegment>,\n\t\tsummary: SerializedAttributionCollection,\n\t): void;\n}\n\n/**\n * @alpha\n */\nexport interface IAttributionCollection<T> {\n\t/**\n\t * Retrieves the attribution key associated with the provided offset.\n\t * @param channel - When specified, gets an attribution key associated with a particular channel.\n\t */\n\tgetAtOffset(offset: number, channel?: string): AttributionKey | undefined;\n\n\t/**\n\t * Total length of all attribution keys in this collection.\n\t */\n\treadonly length: number;\n\n\treadonly channelNames: Iterable<string>;\n\n\t/**\n\t * Retrieve all key/offset pairs stored on this segment. Entries should be ordered by offset, such that\n\t * the `i`th result's attribution key applies to offsets in the open range between the `i`th offset and the\n\t * `i+1`th offset.\n\t * The last entry's key applies to the open interval from the last entry's offset to this collection's length.\n\t */\n\tgetAll(): IAttributionCollectionSpec<T>;\n\n\t/***/\n\tsplitAt(pos: number): IAttributionCollection<T>;\n\n\t/***/\n\tappend(other: IAttributionCollection<T>): void;\n\n\t/***/\n\tclone(): IAttributionCollection<T>;\n\n\t/**\n\t * Updates this collection with new attribution data.\n\t * @param name - Name of the channel that requires an update. Undefined signifies the root channel.\n\t * Updates apply only to the individual channel (i.e. if an attribution policy needs to update the root\n\t * channel and 4 other channels, it should call `.update` 5 times).\n\t * @param channel - Updated collection for that channel.\n\t */\n\tupdate(name: string | undefined, channel: IAttributionCollection<T>): void;\n}\n\n// note: treats null and undefined as equivalent\nexport function areEqualAttributionKeys(\n\t// eslint-disable-next-line @rushstack/no-new-null\n\ta: AttributionKey | null | undefined,\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tb: AttributionKey | null | undefined,\n): boolean {\n\tif (!a && !b) {\n\t\treturn true;\n\t}\n\n\tif (!a || !b) {\n\t\treturn false;\n\t}\n\n\tif (a.type !== b.type) {\n\t\treturn false;\n\t}\n\n\t// Note: TS can't narrow the type of b inside this switch statement, hence the need for casting.\n\tswitch (a.type) {\n\t\tcase \"op\":\n\t\t\treturn a.seq === (b as OpAttributionKey).seq;\n\t\tcase \"detached\":\n\t\t\treturn a.id === (b as DetachedAttributionKey).id;\n\t\tcase \"local\":\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tunreachableCase(a, \"Unhandled AttributionKey type\");\n\t}\n}\n\nexport class AttributionCollection implements IAttributionCollection<AttributionKey> {\n\tprivate offsets: number[] = [];\n\tprivate keys: (AttributionKey | null)[] = [];\n\n\tprivate channels?: { [name: string]: AttributionCollection };\n\n\tprivate get channelEntries(): [string, AttributionCollection][] {\n\t\treturn Object.entries(this.channels ?? {});\n\t}\n\n\tpublic constructor(\n\t\tprivate _length: number,\n\t\t// eslint-disable-next-line @rushstack/no-new-null\n\t\tbaseEntry?: AttributionKey | null,\n\t) {\n\t\tif (baseEntry !== undefined) {\n\t\t\tthis.offsets.push(0);\n\t\t\tthis.keys.push(baseEntry);\n\t\t}\n\t}\n\n\tpublic get channelNames(): string[] {\n\t\treturn Object.keys(this.channels ?? {});\n\t}\n\n\tpublic getAtOffset(offset: number): AttributionKey;\n\tpublic getAtOffset(offset: number, channel: string): AttributionKey | undefined;\n\tpublic getAtOffset(offset: number, channel?: string): AttributionKey | undefined {\n\t\tif (channel !== undefined) {\n\t\t\tconst subCollection = this.channels?.[channel];\n\t\t\treturn subCollection?.getAtOffset(offset);\n\t\t}\n\t\tassert(offset >= 0 && offset < this._length, 0x443 /* Requested offset should be valid */);\n\t\treturn this.get(this.findIndex(offset));\n\t}\n\n\tprivate findIndex(offset: number): number {\n\t\t// Note: maximum length here is 256 for text segments. Perf testing shows that linear scan beats binary search\n\t\t// for attribution collections with under ~64 entries, and even at maximum size (which would require a maximum\n\t\t// length segment with every offset having different attribution), getAtOffset is on the order of 100ns.\n\t\tlet i = 0;\n\t\twhile (i < this.offsets.length && offset > this.offsets[i]) {\n\t\t\ti++;\n\t\t}\n\t\treturn this.offsets[i] === offset ? i : i - 1;\n\t}\n\n\tprivate get(index: number): AttributionKey | undefined {\n\t\tconst key = this.keys[index];\n\t\treturn key ?? undefined;\n\t}\n\n\tpublic get length(): number {\n\t\treturn this._length;\n\t}\n\n\t/**\n\t * Splits this attribution collection into two with entries for [0, pos) and [pos, length).\n\t */\n\tpublic splitAt(pos: number): AttributionCollection {\n\t\tconst splitIndex = this.findIndex(pos);\n\t\tconst splitCollection = new AttributionCollection(this.length - pos);\n\t\tfor (let i = splitIndex; i < this.keys.length; i++) {\n\t\t\tsplitCollection.offsets.push(Math.max(this.offsets[i] - pos, 0));\n\t\t\tsplitCollection.keys.push(this.keys[i]);\n\t\t}\n\n\t\tif (this.channels) {\n\t\t\tsplitCollection.channels = {};\n\t\t\tfor (const [key, collection] of this.channelEntries) {\n\t\t\t\tsplitCollection.channels[key] = collection.splitAt(pos);\n\t\t\t}\n\t\t}\n\n\t\tconst spliceIndex = this.offsets[splitIndex] === pos ? splitIndex : splitIndex + 1;\n\t\tthis.keys.splice(spliceIndex);\n\t\tthis.offsets.splice(spliceIndex);\n\t\tthis._length = pos;\n\t\treturn splitCollection;\n\t}\n\n\tpublic append(other: AttributionCollection): void {\n\t\tconst lastEntry = this.keys[this.keys.length - 1];\n\t\tfor (let i = 0; i < other.keys.length; i++) {\n\t\t\tif (i !== 0 || !areEqualAttributionKeys(lastEntry, other.keys[i])) {\n\t\t\t\tthis.offsets.push(other.offsets[i] + this.length);\n\t\t\t\tthis.keys.push(other.keys[i]);\n\t\t\t}\n\t\t}\n\n\t\tif (other.channels !== undefined || this.channels !== undefined) {\n\t\t\tthis.channels ??= {};\n\t\t\tfor (const [key, collection] of other.channelEntries) {\n\t\t\t\tconst thisCollection = (this.channels[key] ??= new AttributionCollection(\n\t\t\t\t\tthis.length,\n\t\t\t\t\tnull,\n\t\t\t\t));\n\t\t\t\tthisCollection.append(collection);\n\t\t\t}\n\t\t\tfor (const [key, collection] of this.channelEntries) {\n\t\t\t\tif (other.channels?.[key] === undefined) {\n\t\t\t\t\tcollection.append(new AttributionCollection(other.length, null));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._length += other.length;\n\t}\n\n\tpublic getAll(): IAttributionCollectionSpec<AttributionKey> {\n\t\ttype ExtractGeneric<T> = T extends Iterable<infer Q> ? Q : unknown;\n\t\tconst root: ExtractGeneric<IAttributionCollectionSpec<AttributionKey>[\"root\"]>[] =\n\t\t\tnew Array(this.keys.length);\n\t\tfor (let i = 0; i < this.keys.length; i++) {\n\t\t\troot[i] = { offset: this.offsets[i], key: this.keys[i] };\n\t\t}\n\t\tconst result: IAttributionCollectionSpec<AttributionKey> = {\n\t\t\troot,\n\t\t\tlength: this.length,\n\t\t};\n\t\tif (this.channels !== undefined) {\n\t\t\tresult.channels = {};\n\t\t\tfor (const [key, collection] of this.channelEntries) {\n\t\t\t\tresult.channels[key] = collection.getAll().root;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic clone(): AttributionCollection {\n\t\tconst copy = new AttributionCollection(this.length);\n\t\tcopy.keys = this.keys.slice();\n\t\tcopy.offsets = this.offsets.slice();\n\t\tif (this.channels !== undefined) {\n\t\t\tconst channelsCopy: Record<string, AttributionCollection> = {};\n\t\t\tfor (const [key, collection] of this.channelEntries) {\n\t\t\t\tchannelsCopy[key] = collection.clone();\n\t\t\t}\n\t\t\tcopy.channels = channelsCopy;\n\t\t}\n\t\treturn copy;\n\t}\n\n\tpublic update(name: string | undefined, channel: AttributionCollection) {\n\t\tassert(\n\t\t\tchannel.length === this.length,\n\t\t\t0x5c0 /* AttributionCollection channel update should have consistent segment length */,\n\t\t);\n\t\tif (name === undefined) {\n\t\t\tthis.offsets = [...channel.offsets];\n\t\t\tthis.keys = [...channel.keys];\n\t\t} else {\n\t\t\tthis.channels ??= {};\n\t\t\tif (this.channels[name] !== undefined) {\n\t\t\t\tthis.channels[name].update(undefined, channel);\n\t\t\t} else {\n\t\t\t\tthis.channels[name] = channel;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Rehydrates attribution information from its serialized form into the provided iterable of consecutive segments.\n\t */\n\tpublic static populateAttributionCollections(\n\t\tsegments: ISegment[],\n\t\tsummary: SerializedAttributionCollection,\n\t): void {\n\t\tconst { channels } = summary;\n\t\tassert(\n\t\t\tsummary.seqs.length === summary.posBreakpoints.length,\n\t\t\t0x445 /* Invalid attribution summary blob provided */,\n\t\t);\n\n\t\tconst extractOntoSegments = (\n\t\t\t{ seqs, posBreakpoints }: SequenceOffsets,\n\t\t\tassignToSegment: (collection: AttributionCollection, segment: ISegment) => void,\n\t\t) => {\n\t\t\tlet curIndex = 0;\n\t\t\tlet cumulativeSegPos = 0;\n\n\t\t\tfor (const segment of segments) {\n\t\t\t\tconst attribution = new AttributionCollection(segment.cachedLength);\n\t\t\t\tconst pushEntry = (offset: number, seq: AttributionKey | number | null) => {\n\t\t\t\t\tattribution.offsets.push(offset);\n\t\t\t\t\tattribution.keys.push(\n\t\t\t\t\t\tseq === null ? null : typeof seq === \"object\" ? seq : { type: \"op\", seq },\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\tif (posBreakpoints[curIndex] > cumulativeSegPos) {\n\t\t\t\t\tcurIndex--;\n\t\t\t\t}\n\n\t\t\t\twhile (posBreakpoints[curIndex] < cumulativeSegPos + segment.cachedLength) {\n\t\t\t\t\tconst nextOffset = Math.max(posBreakpoints[curIndex] - cumulativeSegPos, 0);\n\t\t\t\t\tpushEntry(nextOffset, seqs[curIndex]);\n\t\t\t\t\tcurIndex++;\n\t\t\t\t}\n\n\t\t\t\tif (attribution.offsets.length === 0) {\n\t\t\t\t\tpushEntry(0, seqs[curIndex - 1]);\n\t\t\t\t}\n\n\t\t\t\tassignToSegment(attribution, segment);\n\t\t\t\tcumulativeSegPos += segment.cachedLength;\n\t\t\t}\n\t\t};\n\n\t\textractOntoSegments(summary, (collection, segment) => {\n\t\t\tsegment.attribution = collection;\n\t\t});\n\t\tif (channels) {\n\t\t\tfor (const [name, collectionSpec] of Object.entries(channels)) {\n\t\t\t\textractOntoSegments(collectionSpec, (collection, segment) => {\n\t\t\t\t\t// Cast is valid as we just assigned this field above\n\t\t\t\t\t((segment.attribution as AttributionCollection).channels ??= {})[name] =\n\t\t\t\t\t\tcollection;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Condenses attribution information on consecutive segments into a `SerializedAttributionCollection`\n\t *\n\t * Note: this operates on segments rather than attribution collections directly so that it can handle cases\n\t * where only some segments have attribution defined.\n\t */\n\tpublic static serializeAttributionCollections(\n\t\tsegments: Iterable<{\n\t\t\tattribution?: IAttributionCollection<AttributionKey>;\n\t\t\tcachedLength: number;\n\t\t}>,\n\t): SerializedAttributionCollection {\n\t\tconst allCollectionSpecs: IAttributionCollectionSpec<AttributionKey>[] = [];\n\n\t\tconst allChannelNames = new Set<string>();\n\t\tfor (const segment of segments) {\n\t\t\tconst collection =\n\t\t\t\tsegment.attribution ?? new AttributionCollection(segment.cachedLength, null);\n\t\t\tconst spec = collection.getAll();\n\t\t\tallCollectionSpecs.push(spec);\n\t\t\tif (spec.channels) {\n\t\t\t\tfor (const name of Object.keys(spec.channels)) {\n\t\t\t\t\tallChannelNames.add(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst extractSequenceOffsets = (\n\t\t\tgetSpecEntries: (\n\t\t\t\tspec: IAttributionCollectionSpec<AttributionKey>,\n\t\t\t) => Iterable<{ offset: number; key: AttributionKey | null }>,\n\t\t): SerializedAttributionCollection => {\n\t\t\tconst posBreakpoints: number[] = [];\n\t\t\tconst seqs: (number | AttributionKey | null)[] = [];\n\t\t\tlet mostRecentAttributionKey: AttributionKey | null | undefined;\n\t\t\tlet cumulativePos = 0;\n\n\t\t\tfor (const spec of allCollectionSpecs) {\n\t\t\t\tfor (const { offset, key } of getSpecEntries(spec)) {\n\t\t\t\t\tassert(\n\t\t\t\t\t\tkey?.type !== \"local\",\n\t\t\t\t\t\t0x5c1 /* local attribution keys should never be put in summaries */,\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tmostRecentAttributionKey === undefined ||\n\t\t\t\t\t\t!areEqualAttributionKeys(key, mostRecentAttributionKey)\n\t\t\t\t\t) {\n\t\t\t\t\t\tposBreakpoints.push(offset + cumulativePos);\n\t\t\t\t\t\tseqs.push(!key ? null : key.type === \"op\" ? key.seq : key);\n\t\t\t\t\t}\n\t\t\t\t\tmostRecentAttributionKey = key;\n\t\t\t\t}\n\n\t\t\t\tcumulativePos += spec.length;\n\t\t\t}\n\n\t\t\treturn { seqs, posBreakpoints, length: cumulativePos };\n\t\t};\n\n\t\tconst blobContents = extractSequenceOffsets((spec) => spec.root);\n\t\tif (allChannelNames.size > 0) {\n\t\t\tconst channels: { [name: string]: SequenceOffsets } = {};\n\t\t\tfor (const name of allChannelNames) {\n\t\t\t\tconst { posBreakpoints, seqs } = extractSequenceOffsets(\n\t\t\t\t\t(spec) => spec.channels?.[name] ?? [{ offset: 0, key: null }],\n\t\t\t\t);\n\t\t\t\tchannels[name] = { posBreakpoints, seqs };\n\t\t\t}\n\t\t\tblobContents.channels = channels;\n\t\t}\n\n\t\treturn blobContents;\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributionPolicy.d.mts","sourceRoot":"","sources":["../src/attributionPolicy.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAKI,EAAE,iBAAiB,EAAE;AA6L5B;;;GAGG;AACH,wBAAgB,iCAAiC,IAAI,iBAAiB,CAOrE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,8CAA8C,CAC7D,GAAG,SAAS,EAAE,MAAM,EAAE,GACpB,MAAM,iBAAiB,CAQzB;AAED;;;;;GAKG;AACH,wBAAgB,0DAA0D,CACzE,GAAG,SAAS,EAAE,MAAM,EAAE,GACpB,MAAM,iBAAiB,CASzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributionPolicy.mjs","sourceRoot":"","sources":["../src/attributionPolicy.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\nimport { assert } from \"@fluidframework/core-utils\";\nimport { AttributionKey } from \"@fluidframework/runtime-definitions\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { AttributionPolicy } from \"./mergeTree\";\n// eslint-disable-next-line import/no-deprecated\nimport { Client } from \"./client\";\nimport {\n\tIMergeTreeDeltaCallbackArgs,\n\tIMergeTreeDeltaOpArgs,\n\tIMergeTreeMaintenanceCallbackArgs,\n\tIMergeTreeSegmentDelta,\n\tMergeTreeMaintenanceType,\n} from \"./mergeTreeDeltaCallback\";\nimport { MergeTreeDeltaType } from \"./ops\";\nimport { AttributionCollection } from \"./attributionCollection\";\n\n// Note: these thinly wrap MergeTreeDeltaCallback and MergeTreeMaintenanceCallback to provide the client.\n// This is because the base callbacks don't always have enough information to infer whether the op being\n// processed is in a detached or attached state, which may affect the attribution key.\ninterface AttributionCallbacks {\n\tdelta: (\n\t\topArgs: IMergeTreeDeltaOpArgs,\n\t\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tclient: Client,\n\t) => void;\n\tmaintenance: (\n\t\tmaintenanceArgs: IMergeTreeMaintenanceCallbackArgs,\n\t\topArgs: IMergeTreeDeltaOpArgs | undefined,\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tclient: Client,\n\t) => void;\n}\n\nfunction createAttributionPolicyFromCallbacks({\n\tdelta,\n\tmaintenance,\n}: AttributionCallbacks): AttributionPolicy {\n\tlet unsubscribe: undefined | (() => void);\n\treturn {\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tattach: (client: Client) => {\n\t\t\tassert(\n\t\t\t\tunsubscribe === undefined,\n\t\t\t\t0x557 /* cannot attach to multiple clients at once */,\n\t\t\t);\n\n\t\t\tconst deltaSubscribed: AttributionCallbacks[\"delta\"] = (opArgs, deltaArgs) =>\n\t\t\t\tdelta(opArgs, deltaArgs, client);\n\t\t\tconst maintenanceSubscribed: AttributionCallbacks[\"maintenance\"] = (args, opArgs) =>\n\t\t\t\tmaintenance(args, opArgs, client);\n\n\t\t\tclient.on(\"delta\", deltaSubscribed);\n\t\t\tclient.on(\"maintenance\", maintenanceSubscribed);\n\n\t\t\tunsubscribe = () => {\n\t\t\t\tclient.off(\"delta\", deltaSubscribed);\n\t\t\t\tclient.off(\"maintenance\", maintenanceSubscribed);\n\t\t\t};\n\t\t},\n\t\tdetach: () => {\n\t\t\tunsubscribe?.();\n\t\t\tunsubscribe = undefined;\n\t\t},\n\t\tget isAttached() {\n\t\t\treturn unsubscribe !== undefined;\n\t\t},\n\t\tserializer: AttributionCollection,\n\t};\n}\n\nconst ensureAttributionCollectionCallbacks: AttributionCallbacks = {\n\tdelta: ({ op }, { deltaSegments }) => {\n\t\tif (op.type === MergeTreeDeltaType.INSERT) {\n\t\t\tfor (const { segment } of deltaSegments) {\n\t\t\t\tsegment.attribution = new AttributionCollection(segment.cachedLength);\n\t\t\t}\n\t\t}\n\t},\n\tmaintenance: () => {},\n};\n\nconst getAttributionKey = (\n\t// eslint-disable-next-line import/no-deprecated\n\tclient: Client,\n\tmsg: ISequencedDocumentMessage | undefined,\n): AttributionKey => {\n\tif (msg) {\n\t\treturn { type: \"op\", seq: msg.sequenceNumber };\n\t}\n\tconst collabWindow = client.getCollabWindow();\n\treturn collabWindow.collaborating ? { type: \"local\" } : { type: \"detached\", id: 0 };\n};\n\nconst attributeInsertionOnSegments = (\n\tdeltaSegments: IMergeTreeSegmentDelta[],\n\tkey: AttributionKey,\n): void => {\n\tfor (const { segment } of deltaSegments) {\n\t\tif (segment.seq !== undefined) {\n\t\t\tsegment.attribution?.update(\n\t\t\t\tundefined,\n\t\t\t\tnew AttributionCollection(segment.cachedLength, key),\n\t\t\t);\n\t\t}\n\t}\n};\n\nconst insertOnlyAttributionPolicyCallbacks: AttributionCallbacks = {\n\tdelta: (opArgs, { deltaSegments, operation }, client) => {\n\t\tif (operation === MergeTreeDeltaType.INSERT) {\n\t\t\tattributeInsertionOnSegments(\n\t\t\t\tdeltaSegments,\n\t\t\t\tgetAttributionKey(client, opArgs.sequencedMessage),\n\t\t\t);\n\t\t}\n\t},\n\tmaintenance: ({ deltaSegments, operation }, opArgs, client) => {\n\t\tif (\n\t\t\toperation === MergeTreeMaintenanceType.ACKNOWLEDGED &&\n\t\t\topArgs?.op.type === MergeTreeDeltaType.INSERT\n\t\t) {\n\t\t\tattributeInsertionOnSegments(\n\t\t\t\tdeltaSegments,\n\t\t\t\tgetAttributionKey(client, opArgs.sequencedMessage),\n\t\t\t);\n\t\t}\n\t},\n};\n\nfunction createPropertyTrackingMergeTreeCallbacks(...propNames: string[]): AttributionCallbacks {\n\tconst toTrack = propNames.map((entry) => ({ propName: entry, channelName: entry }));\n\tconst attributeAnnotateOnSegments = (\n\t\tdeltaSegments: IMergeTreeSegmentDelta[],\n\t\t{ op, sequencedMessage }: IMergeTreeDeltaOpArgs,\n\t\tkey: AttributionKey,\n\t): void => {\n\t\tfor (const { segment } of deltaSegments) {\n\t\t\tfor (const { propName, channelName } of toTrack) {\n\t\t\t\tconst shouldAttributeInsert =\n\t\t\t\t\top.type === MergeTreeDeltaType.INSERT &&\n\t\t\t\t\tsegment.properties?.[propName] !== undefined;\n\n\t\t\t\tconst isLocal = sequencedMessage === undefined;\n\t\t\t\tconst shouldAttributeAnnotate =\n\t\t\t\t\top.type === MergeTreeDeltaType.ANNOTATE &&\n\t\t\t\t\t// Only attribute annotations which change the tracked property\n\t\t\t\t\top.props[propName] !== undefined &&\n\t\t\t\t\t// Local changes to the tracked property always take effect\n\t\t\t\t\t(isLocal ||\n\t\t\t\t\t\t// Acked changes only take effect if there isn't a pending local change\n\t\t\t\t\t\t(!isLocal && !segment.propertyManager?.hasPendingProperty(propName)));\n\n\t\t\t\tif (shouldAttributeInsert || shouldAttributeAnnotate) {\n\t\t\t\t\tsegment.attribution?.update(\n\t\t\t\t\t\tchannelName,\n\t\t\t\t\t\tnew AttributionCollection(segment.cachedLength, key),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tdelta: (opArgs, { deltaSegments }, client) => {\n\t\t\tconst { op, sequencedMessage } = opArgs;\n\t\t\tif (op.type === MergeTreeDeltaType.ANNOTATE || op.type === MergeTreeDeltaType.INSERT) {\n\t\t\t\tattributeAnnotateOnSegments(\n\t\t\t\t\tdeltaSegments,\n\t\t\t\t\topArgs,\n\t\t\t\t\tgetAttributionKey(client, sequencedMessage),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tmaintenance: ({ deltaSegments, operation }, opArgs, client) => {\n\t\t\tif (operation === MergeTreeMaintenanceType.ACKNOWLEDGED && opArgs !== undefined) {\n\t\t\t\tattributeAnnotateOnSegments(\n\t\t\t\t\tdeltaSegments,\n\t\t\t\t\topArgs,\n\t\t\t\t\tgetAttributionKey(client, opArgs.sequencedMessage),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction combineMergeTreeCallbacks(callbacks: AttributionCallbacks[]): AttributionCallbacks {\n\treturn {\n\t\tdelta: (...args) => callbacks.forEach(({ delta }) => delta(...args)),\n\t\tmaintenance: (...args) => callbacks.forEach(({ maintenance }) => maintenance(...args)),\n\t};\n}\n\n/**\n * @returns An {@link AttributionPolicy} which tracks only insertion of content.\n * @internal\n */\nexport function createInsertOnlyAttributionPolicy(): AttributionPolicy {\n\treturn createAttributionPolicyFromCallbacks(\n\t\tcombineMergeTreeCallbacks([\n\t\t\tensureAttributionCollectionCallbacks,\n\t\t\tinsertOnlyAttributionPolicyCallbacks,\n\t\t]),\n\t);\n}\n\n/**\n * @param propNames - List of property names for which attribution should be tracked.\n * @returns A policy which only attributes annotation of the properties specified.\n * Keys for each property are stored under attribution channels of the same name--see example below.\n *\n * @example\n *\n * ```typescript\n * // Use this policy when creating your merge-tree:\n * const policy = createPropertyTrackingAttributionPolicyFactory(\"bold\", \"italic\");\n * // ... later, you can get attribution keys for the last time the \"bold\" and \"italic\"\n * // properties were changed on a segment using `getAtOffset`:\n * const lastBoldedAttributionKey = segment.attribution?.getAtOffset(0, \"bold\");\n * const lastItalicizedAttributionKey = segment.attribution?.getAtOffset(0, \"italic\");\n * ```\n * @alpha\n */\nexport function createPropertyTrackingAttributionPolicyFactory(\n\t...propNames: string[]\n): () => AttributionPolicy {\n\treturn () =>\n\t\tcreateAttributionPolicyFromCallbacks(\n\t\t\tcombineMergeTreeCallbacks([\n\t\t\t\tensureAttributionCollectionCallbacks,\n\t\t\t\tcreatePropertyTrackingMergeTreeCallbacks(...propNames),\n\t\t\t]),\n\t\t);\n}\n\n/**\n * Creates an attribution policy which tracks insertion as well as annotation of certain property names.\n * This combines the policies creatable using {@link createPropertyTrackingAttributionPolicyFactory} and\n * {@link createInsertOnlyAttributionPolicy}: see there for more details.\n * @alpha\n */\nexport function createPropertyTrackingAndInsertionAttributionPolicyFactory(\n\t...propNames: string[]\n): () => AttributionPolicy {\n\treturn () =>\n\t\tcreateAttributionPolicyFromCallbacks(\n\t\t\tcombineMergeTreeCallbacks([\n\t\t\t\tensureAttributionCollectionCallbacks,\n\t\t\t\tinsertOnlyAttributionPolicyCallbacks,\n\t\t\t\tcreatePropertyTrackingMergeTreeCallbacks(...propNames),\n\t\t\t]),\n\t\t);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.mts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}