@fluidframework/merge-tree 2.0.0-rc.1.0.4 → 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 +2 -2
  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 +72 -72
  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} +3 -2
  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 +3 -3
  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 +1 @@
1
- {"version":3,"file":"zamboni.js","sourceRoot":"","sources":["../src/zamboni.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/no-non-null-assertion */\n\nimport { UnassignedSequenceNumber } from \"./constants\";\nimport { MergeTree } from \"./mergeTree\";\nimport { MergeTreeMaintenanceType } from \"./mergeTreeDeltaCallback\";\nimport {\n\tIMergeBlock,\n\tIMergeNode,\n\tISegment,\n\tMarker,\n\tMaxNodesInBlock,\n\tseqLTE,\n\ttoMoveInfo,\n\ttoRemovalInfo,\n} from \"./mergeTreeNodes\";\nimport { matchProperties } from \"./properties\";\n\nexport const zamboniSegmentsMax = 2;\nfunction underflow(node: IMergeBlock) {\n\treturn node.childCount < MaxNodesInBlock / 2;\n}\n\nexport function zamboniSegments(\n\tmergeTree: MergeTree,\n\tzamboniSegmentsMaxCount = zamboniSegmentsMax,\n) {\n\tif (!mergeTree.collabWindow.collaborating) {\n\t\treturn;\n\t}\n\n\tfor (let i = 0; i < zamboniSegmentsMaxCount; i++) {\n\t\tlet segmentToScour = mergeTree.segmentsToScour.peek()?.value;\n\t\tif (!segmentToScour || segmentToScour.maxSeq > mergeTree.collabWindow.minSeq) {\n\t\t\tbreak;\n\t\t}\n\t\tsegmentToScour = mergeTree.segmentsToScour.get()!;\n\t\t// Only skip scouring if needs scour is explicitly false, not true or undefined\n\t\tif (segmentToScour.segment!.parent && segmentToScour.segment!.parent.needsScour !== false) {\n\t\t\tconst block = segmentToScour.segment!.parent;\n\t\t\tconst childrenCopy: IMergeNode[] = [];\n\t\t\tscourNode(block, childrenCopy, mergeTree);\n\t\t\t// This will avoid the cost of re-scouring nodes\n\t\t\t// that have recently been scoured\n\t\t\tblock.needsScour = false;\n\n\t\t\tconst newChildCount = childrenCopy.length;\n\n\t\t\tif (newChildCount < block.childCount) {\n\t\t\t\tblock.childCount = newChildCount;\n\t\t\t\tblock.children = childrenCopy;\n\t\t\t\tfor (let j = 0; j < newChildCount; j++) {\n\t\t\t\t\tblock.assignChild(childrenCopy[j], j, false);\n\t\t\t\t}\n\n\t\t\t\tif (underflow(block) && block.parent) {\n\t\t\t\t\tpackParent(block.parent, mergeTree);\n\t\t\t\t} else {\n\t\t\t\t\tmergeTree.nodeUpdateOrdinals(block);\n\t\t\t\t\tmergeTree.blockUpdatePathLengths(block, UnassignedSequenceNumber, -1, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Interior node with all node children\nexport function packParent(parent: IMergeBlock, mergeTree: MergeTree) {\n\tconst children = parent.children;\n\tlet childIndex: number;\n\tlet childBlock: IMergeBlock;\n\tconst holdNodes: IMergeNode[] = [];\n\tfor (childIndex = 0; childIndex < parent.childCount; childIndex++) {\n\t\t// Debug assert not isLeaf()\n\t\tchildBlock = children[childIndex] as IMergeBlock;\n\t\tscourNode(childBlock, holdNodes, mergeTree);\n\t\t// Will replace this block with a packed block\n\t\tchildBlock.parent = undefined;\n\t}\n\tif (holdNodes.length > 0) {\n\t\tconst totalNodeCount = holdNodes.length;\n\t\tconst halfOfMaxNodeCount = MaxNodesInBlock / 2;\n\t\tlet childCount = Math.min(\n\t\t\tMaxNodesInBlock - 1,\n\t\t\tMath.floor(totalNodeCount / halfOfMaxNodeCount),\n\t\t);\n\t\tif (childCount < 1) {\n\t\t\tchildCount = 1;\n\t\t}\n\t\tconst baseNodesInBlockCount = Math.floor(totalNodeCount / childCount);\n\t\tlet remainderCount = totalNodeCount % childCount;\n\t\tconst packedBlocks = new Array<IMergeBlock>(MaxNodesInBlock);\n\t\tlet childrenPackedCount = 0;\n\t\tfor (let nodeIndex = 0; nodeIndex < childCount; nodeIndex++) {\n\t\t\tlet nodeCount = baseNodesInBlockCount;\n\t\t\tif (remainderCount > 0) {\n\t\t\t\tnodeCount++;\n\t\t\t\tremainderCount--;\n\t\t\t}\n\t\t\tconst packedBlock = mergeTree.makeBlock(nodeCount);\n\t\t\tfor (let packedNodeIndex = 0; packedNodeIndex < nodeCount; packedNodeIndex++) {\n\t\t\t\tconst nodeToPack = holdNodes[childrenPackedCount++];\n\t\t\t\tpackedBlock.assignChild(nodeToPack, packedNodeIndex, false);\n\t\t\t}\n\t\t\tpackedBlock.parent = parent;\n\t\t\tpackedBlocks[nodeIndex] = packedBlock;\n\t\t\tmergeTree.nodeUpdateLengthNewStructure(packedBlock);\n\t\t}\n\t\tparent.children = packedBlocks;\n\t\tfor (let j = 0; j < childCount; j++) {\n\t\t\tparent.assignChild(packedBlocks[j], j, false);\n\t\t}\n\t\tparent.childCount = childCount;\n\t} else {\n\t\tparent.children = [];\n\t\tparent.childCount = 0;\n\t}\n\tif (underflow(parent) && parent.parent) {\n\t\tpackParent(parent.parent, mergeTree);\n\t} else {\n\t\tmergeTree.nodeUpdateOrdinals(parent);\n\t\tmergeTree.blockUpdatePathLengths(parent, UnassignedSequenceNumber, -1, true);\n\t}\n}\n\nfunction scourNode(node: IMergeBlock, holdNodes: IMergeNode[], mergeTree: MergeTree) {\n\t// The previous segment is tracked while scouring for the purposes of merging adjacent segments\n\t// when possible.\n\tlet prevSegment: ISegment | undefined;\n\tfor (let k = 0; k < node.childCount; k++) {\n\t\tconst childNode = node.children[k];\n\t\tif (!childNode.isLeaf() || !childNode.segmentGroups.empty) {\n\t\t\tholdNodes.push(childNode);\n\t\t\tprevSegment = undefined;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst segment = childNode;\n\t\tconst removalInfo = toRemovalInfo(segment);\n\t\tconst moveInfo = toMoveInfo(segment);\n\t\tif (removalInfo !== undefined || moveInfo !== undefined) {\n\t\t\t// If the segment's removal is below the MSN and it's not being held onto by a tracking group,\n\t\t\t// it can be unlinked (i.e. removed from the merge-tree)\n\t\t\tif (\n\t\t\t\t((!!removalInfo && seqLTE(removalInfo.removedSeq, mergeTree.collabWindow.minSeq)) ||\n\t\t\t\t\t(!!moveInfo && seqLTE(moveInfo.movedSeq, mergeTree.collabWindow.minSeq))) &&\n\t\t\t\tsegment.trackingCollection.empty\n\t\t\t) {\n\t\t\t\tmergeTree.mergeTreeMaintenanceCallback?.(\n\t\t\t\t\t{\n\t\t\t\t\t\toperation: MergeTreeMaintenanceType.UNLINK,\n\t\t\t\t\t\tdeltaSegments: [{ segment }],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\n\t\t\t\tsegment.parent = undefined;\n\n\t\t\t\tif (Marker.is(segment)) {\n\t\t\t\t\tmergeTree.unlinkMarker(segment);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tholdNodes.push(segment);\n\t\t\t}\n\n\t\t\tprevSegment = undefined;\n\t\t} else {\n\t\t\tif (segment.seq! <= mergeTree.collabWindow.minSeq) {\n\t\t\t\tconst segmentHasPositiveLength = (mergeTree.localNetLength(segment) ?? 0) > 0;\n\t\t\t\tconst canAppend =\n\t\t\t\t\tprevSegment?.canAppend(segment) &&\n\t\t\t\t\tmatchProperties(prevSegment.properties, segment.properties) &&\n\t\t\t\t\tprevSegment.trackingCollection.matches(segment.trackingCollection) &&\n\t\t\t\t\tsegmentHasPositiveLength;\n\n\t\t\t\tif (canAppend) {\n\t\t\t\t\tprevSegment!.append(segment);\n\t\t\t\t\tmergeTree.mergeTreeMaintenanceCallback?.(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\toperation: MergeTreeMaintenanceType.APPEND,\n\t\t\t\t\t\t\tdeltaSegments: [{ segment: prevSegment! }, { segment }],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t);\n\n\t\t\t\t\tsegment.parent = undefined;\n\t\t\t\t\tsegment.trackingCollection.trackingGroups.forEach((tg) => tg.unlink(segment));\n\t\t\t\t} else {\n\t\t\t\t\tholdNodes.push(segment);\n\t\t\t\t\tprevSegment = segmentHasPositiveLength ? segment : undefined;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tholdNodes.push(segment);\n\t\t\t\tprevSegment = undefined;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"zamboni.js","sourceRoot":"","sources":["../src/zamboni.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/no-non-null-assertion */\n\nimport { UnassignedSequenceNumber } from \"./constants.js\";\nimport { MergeTree } from \"./mergeTree.js\";\nimport { MergeTreeMaintenanceType } from \"./mergeTreeDeltaCallback.js\";\nimport {\n\tIMergeBlock,\n\tIMergeNode,\n\tISegment,\n\tMarker,\n\tMaxNodesInBlock,\n\tseqLTE,\n\ttoMoveInfo,\n\ttoRemovalInfo,\n} from \"./mergeTreeNodes.js\";\nimport { matchProperties } from \"./properties.js\";\n\nexport const zamboniSegmentsMax = 2;\nfunction underflow(node: IMergeBlock) {\n\treturn node.childCount < MaxNodesInBlock / 2;\n}\n\nexport function zamboniSegments(\n\tmergeTree: MergeTree,\n\tzamboniSegmentsMaxCount = zamboniSegmentsMax,\n) {\n\tif (!mergeTree.collabWindow.collaborating) {\n\t\treturn;\n\t}\n\n\tfor (let i = 0; i < zamboniSegmentsMaxCount; i++) {\n\t\tlet segmentToScour = mergeTree.segmentsToScour.peek()?.value;\n\t\tif (!segmentToScour || segmentToScour.maxSeq > mergeTree.collabWindow.minSeq) {\n\t\t\tbreak;\n\t\t}\n\t\tsegmentToScour = mergeTree.segmentsToScour.get()!;\n\t\t// Only skip scouring if needs scour is explicitly false, not true or undefined\n\t\tif (segmentToScour?.segment?.parent && segmentToScour.segment.parent.needsScour !== false) {\n\t\t\tconst block = segmentToScour.segment.parent;\n\t\t\tconst childrenCopy: IMergeNode[] = [];\n\t\t\tscourNode(block, childrenCopy, mergeTree);\n\t\t\t// This will avoid the cost of re-scouring nodes\n\t\t\t// that have recently been scoured\n\t\t\tblock.needsScour = false;\n\n\t\t\tconst newChildCount = childrenCopy.length;\n\n\t\t\tif (newChildCount < block.childCount) {\n\t\t\t\tblock.childCount = newChildCount;\n\t\t\t\tblock.children = childrenCopy;\n\t\t\t\tfor (let j = 0; j < newChildCount; j++) {\n\t\t\t\t\tblock.assignChild(childrenCopy[j], j, false);\n\t\t\t\t}\n\n\t\t\t\tif (underflow(block) && block.parent) {\n\t\t\t\t\tpackParent(block.parent, mergeTree);\n\t\t\t\t} else {\n\t\t\t\t\tmergeTree.nodeUpdateOrdinals(block);\n\t\t\t\t\tmergeTree.blockUpdatePathLengths(block, UnassignedSequenceNumber, -1, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Interior node with all node children\nexport function packParent(parent: IMergeBlock, mergeTree: MergeTree) {\n\tconst children = parent.children;\n\tlet childIndex: number;\n\tlet childBlock: IMergeBlock;\n\tconst holdNodes: IMergeNode[] = [];\n\tfor (childIndex = 0; childIndex < parent.childCount; childIndex++) {\n\t\t// Debug assert not isLeaf()\n\t\tchildBlock = children[childIndex] as IMergeBlock;\n\t\tscourNode(childBlock, holdNodes, mergeTree);\n\t\t// Will replace this block with a packed block\n\t\tchildBlock.parent = undefined;\n\t}\n\tif (holdNodes.length > 0) {\n\t\tconst totalNodeCount = holdNodes.length;\n\t\tconst halfOfMaxNodeCount = MaxNodesInBlock / 2;\n\t\tlet childCount = Math.min(\n\t\t\tMaxNodesInBlock - 1,\n\t\t\tMath.floor(totalNodeCount / halfOfMaxNodeCount),\n\t\t);\n\t\tif (childCount < 1) {\n\t\t\tchildCount = 1;\n\t\t}\n\t\tconst baseNodesInBlockCount = Math.floor(totalNodeCount / childCount);\n\t\tlet remainderCount = totalNodeCount % childCount;\n\t\tconst packedBlocks = new Array<IMergeBlock>(MaxNodesInBlock);\n\t\tlet childrenPackedCount = 0;\n\t\tfor (let nodeIndex = 0; nodeIndex < childCount; nodeIndex++) {\n\t\t\tlet nodeCount = baseNodesInBlockCount;\n\t\t\tif (remainderCount > 0) {\n\t\t\t\tnodeCount++;\n\t\t\t\tremainderCount--;\n\t\t\t}\n\t\t\tconst packedBlock = mergeTree.makeBlock(nodeCount);\n\t\t\tfor (let packedNodeIndex = 0; packedNodeIndex < nodeCount; packedNodeIndex++) {\n\t\t\t\tconst nodeToPack = holdNodes[childrenPackedCount++];\n\t\t\t\tpackedBlock.assignChild(nodeToPack, packedNodeIndex, false);\n\t\t\t}\n\t\t\tpackedBlock.parent = parent;\n\t\t\tpackedBlocks[nodeIndex] = packedBlock;\n\t\t\tmergeTree.nodeUpdateLengthNewStructure(packedBlock);\n\t\t}\n\t\tparent.children = packedBlocks;\n\t\tfor (let j = 0; j < childCount; j++) {\n\t\t\tparent.assignChild(packedBlocks[j], j, false);\n\t\t}\n\t\tparent.childCount = childCount;\n\t} else {\n\t\tparent.children = [];\n\t\tparent.childCount = 0;\n\t}\n\tif (underflow(parent) && parent.parent) {\n\t\tpackParent(parent.parent, mergeTree);\n\t} else {\n\t\tmergeTree.nodeUpdateOrdinals(parent);\n\t\tmergeTree.blockUpdatePathLengths(parent, UnassignedSequenceNumber, -1, true);\n\t}\n}\n\nfunction scourNode(node: IMergeBlock, holdNodes: IMergeNode[], mergeTree: MergeTree) {\n\t// The previous segment is tracked while scouring for the purposes of merging adjacent segments\n\t// when possible.\n\tlet prevSegment: ISegment | undefined;\n\tfor (let k = 0; k < node.childCount; k++) {\n\t\tconst childNode = node.children[k];\n\t\tif (!childNode.isLeaf() || !childNode.segmentGroups.empty) {\n\t\t\tholdNodes.push(childNode);\n\t\t\tprevSegment = undefined;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst segment = childNode;\n\t\tconst removalInfo = toRemovalInfo(segment);\n\t\tconst moveInfo = toMoveInfo(segment);\n\t\tif (removalInfo !== undefined || moveInfo !== undefined) {\n\t\t\t// If the segment's removal is below the MSN and it's not being held onto by a tracking group,\n\t\t\t// it can be unlinked (i.e. removed from the merge-tree)\n\t\t\tif (\n\t\t\t\t((!!removalInfo && seqLTE(removalInfo.removedSeq, mergeTree.collabWindow.minSeq)) ||\n\t\t\t\t\t(!!moveInfo && seqLTE(moveInfo.movedSeq, mergeTree.collabWindow.minSeq))) &&\n\t\t\t\tsegment.trackingCollection.empty\n\t\t\t) {\n\t\t\t\tmergeTree.mergeTreeMaintenanceCallback?.(\n\t\t\t\t\t{\n\t\t\t\t\t\toperation: MergeTreeMaintenanceType.UNLINK,\n\t\t\t\t\t\tdeltaSegments: [{ segment }],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\n\t\t\t\tsegment.parent = undefined;\n\n\t\t\t\tif (Marker.is(segment)) {\n\t\t\t\t\tmergeTree.unlinkMarker(segment);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tholdNodes.push(segment);\n\t\t\t}\n\n\t\t\tprevSegment = undefined;\n\t\t} else {\n\t\t\tif (segment.seq! <= mergeTree.collabWindow.minSeq) {\n\t\t\t\tconst segmentHasPositiveLength = (mergeTree.localNetLength(segment) ?? 0) > 0;\n\t\t\t\tconst canAppend =\n\t\t\t\t\tprevSegment?.canAppend(segment) &&\n\t\t\t\t\tmatchProperties(prevSegment.properties, segment.properties) &&\n\t\t\t\t\tprevSegment.trackingCollection.matches(segment.trackingCollection) &&\n\t\t\t\t\tsegmentHasPositiveLength;\n\n\t\t\t\tif (canAppend) {\n\t\t\t\t\tprevSegment!.append(segment);\n\t\t\t\t\tmergeTree.mergeTreeMaintenanceCallback?.(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\toperation: MergeTreeMaintenanceType.APPEND,\n\t\t\t\t\t\t\tdeltaSegments: [{ segment: prevSegment! }, { segment }],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t);\n\n\t\t\t\t\tsegment.parent = undefined;\n\t\t\t\t\tsegment.trackingCollection.trackingGroups.forEach((tg) => tg.unlink(segment));\n\t\t\t\t} else {\n\t\t\t\t\tholdNodes.push(segment);\n\t\t\t\t\tprevSegment = segmentHasPositiveLength ? segment : undefined;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tholdNodes.push(segment);\n\t\t\t\tprevSegment = undefined;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -2,12 +2,12 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { MergeTree } from "./mergeTree.mjs";
6
- import { IMergeTreeTextHelper } from "./textSegment.mjs";
5
+ import { MergeTree } from "./mergeTree.js";
6
+ import { IMergeTreeTextHelper } from "./textSegment.js";
7
7
  export declare class MergeTreeTextHelper implements IMergeTreeTextHelper {
8
8
  private readonly mergeTree;
9
9
  constructor(mergeTree: MergeTree);
10
10
  getText(refSeq: number, clientId: number, placeholder?: string, start?: number, end?: number): string;
11
11
  private getValidRange;
12
12
  }
13
- //# sourceMappingURL=MergeTreeTextHelper.d.mts.map
13
+ //# sourceMappingURL=MergeTreeTextHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MergeTreeTextHelper.d.ts","sourceRoot":"","sources":["../src/MergeTreeTextHelper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAe,MAAM,kBAAkB,CAAC;AASrE,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"}
@@ -2,7 +2,8 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { TextSegment } from "./textSegment.mjs";
5
+ // eslint-disable-next-line import/no-deprecated
6
+ import { TextSegment } from "./textSegment.js";
6
7
  // eslint-disable-next-line import/no-deprecated
7
8
  export class MergeTreeTextHelper {
8
9
  constructor(mergeTree) {
@@ -42,4 +43,4 @@ function gatherText(segment, pos, refSeq, clientId, start, end, { textSegment, p
42
43
  }
43
44
  return true;
44
45
  }
45
- //# sourceMappingURL=MergeTreeTextHelper.mjs.map
46
+ //# sourceMappingURL=MergeTreeTextHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MergeTreeTextHelper.js","sourceRoot":"","sources":["../src/MergeTreeTextHelper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,gDAAgD;AAChD,OAAO,EAAwB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQrE,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.js\";\nimport { ISegment } from \"./mergeTreeNodes.js\";\nimport { MergeTree } from \"./mergeTree.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { IMergeTreeTextHelper, TextSegment } from \"./textSegment.js\";\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"]}
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { AttributionKey } from "@fluidframework/runtime-definitions";
6
- import { ISegment } from "./mergeTreeNodes.mjs";
6
+ import { ISegment } from "./mergeTreeNodes.js";
7
7
  /**
8
8
  * @alpha
9
9
  */
@@ -136,4 +136,4 @@ export declare class AttributionCollection implements IAttributionCollection<Att
136
136
  cachedLength: number;
137
137
  }>): SerializedAttributionCollection;
138
138
  }
139
- //# sourceMappingURL=attributionCollection.d.mts.map
139
+ //# sourceMappingURL=attributionCollection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributionCollection.d.ts","sourceRoot":"","sources":["../src/attributionCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,cAAc,EAGd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C;;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"}
@@ -258,4 +258,4 @@ export class AttributionCollection {
258
258
  return blobContents;
259
259
  }
260
260
  }
261
- //# sourceMappingURL=attributionCollection.mjs.map
261
+ //# sourceMappingURL=attributionCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributionCollection.js","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.js\";\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"]}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { AttributionPolicy } from "./mergeTree.mjs";
5
+ import { AttributionPolicy } from "./mergeTree.js";
6
6
  /**
7
7
  * @returns An {@link AttributionPolicy} which tracks only insertion of content.
8
8
  * @internal
@@ -33,4 +33,4 @@ export declare function createPropertyTrackingAttributionPolicyFactory(...propNa
33
33
  * @alpha
34
34
  */
35
35
  export declare function createPropertyTrackingAndInsertionAttributionPolicyFactory(...propNames: string[]): () => AttributionPolicy;
36
- //# sourceMappingURL=attributionPolicy.d.mts.map
36
+ //# sourceMappingURL=attributionPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributionPolicy.d.ts","sourceRoot":"","sources":["../src/attributionPolicy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA6LnD;;;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"}
@@ -3,9 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { assert } from "@fluidframework/core-utils";
6
- import { MergeTreeMaintenanceType, } from "./mergeTreeDeltaCallback.mjs";
7
- import { MergeTreeDeltaType } from "./ops.mjs";
8
- import { AttributionCollection } from "./attributionCollection.mjs";
6
+ import { MergeTreeMaintenanceType, } from "./mergeTreeDeltaCallback.js";
7
+ import { MergeTreeDeltaType } from "./ops.js";
8
+ import { AttributionCollection } from "./attributionCollection.js";
9
9
  function createAttributionPolicyFromCallbacks({ delta, maintenance, }) {
10
10
  let unsubscribe;
11
11
  return {
@@ -157,4 +157,4 @@ export function createPropertyTrackingAndInsertionAttributionPolicyFactory(...pr
157
157
  createPropertyTrackingMergeTreeCallbacks(...propNames),
158
158
  ]));
159
159
  }
160
- //# sourceMappingURL=attributionPolicy.mjs.map
160
+ //# sourceMappingURL=attributionPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributionPolicy.js","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.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { Client } from \"./client.js\";\nimport {\n\tIMergeTreeDeltaCallbackArgs,\n\tIMergeTreeDeltaOpArgs,\n\tIMergeTreeMaintenanceCallbackArgs,\n\tIMergeTreeSegmentDelta,\n\tMergeTreeMaintenanceType,\n} from \"./mergeTreeDeltaCallback.js\";\nimport { MergeTreeDeltaType } from \"./ops.js\";\nimport { AttributionCollection } from \"./attributionCollection.js\";\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"]}
@@ -9,14 +9,14 @@ import { IFluidDataStoreRuntime, IChannelStorageService } from "@fluidframework/
9
9
  import { ISummaryTreeWithStats } from "@fluidframework/runtime-definitions";
10
10
  import { TypedEventEmitter } from "@fluid-internal/client-utils";
11
11
  import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
12
- import { LocalReferencePosition, SlidingPreference } from "./localReference.mjs";
13
- import { CollaborationWindow, ISegment, ISegmentAction, Marker, SegmentGroup } from "./mergeTreeNodes.mjs";
14
- import { IJSONSegment, IMergeTreeAnnotateMsg, IMergeTreeDeltaOp, IMergeTreeGroupMsg, IMergeTreeInsertMsg, IMergeTreeRemoveMsg, IMergeTreeOp, IRelativePosition, ReferenceType, IMergeTreeObliterateMsg } from "./ops.mjs";
15
- import { PropertySet } from "./properties.mjs";
16
- import { IMergeTreeTextHelper } from "./textSegment.mjs";
17
- import { ReferencePosition } from "./referencePositions.mjs";
18
- import { IMergeTreeOptions } from "./mergeTree.mjs";
19
- import { IMergeTreeDeltaCallbackArgs, IMergeTreeDeltaOpArgs, IMergeTreeMaintenanceCallbackArgs } from "./index.mjs";
12
+ import { LocalReferencePosition, SlidingPreference } from "./localReference.js";
13
+ import { CollaborationWindow, ISegment, ISegmentAction, Marker, SegmentGroup } from "./mergeTreeNodes.js";
14
+ import { IJSONSegment, IMergeTreeAnnotateMsg, IMergeTreeGroupMsg, IMergeTreeInsertMsg, IMergeTreeRemoveMsg, IMergeTreeOp, IRelativePosition, ReferenceType, IMergeTreeObliterateMsg } from "./ops.js";
15
+ import { PropertySet } from "./properties.js";
16
+ import { IMergeTreeTextHelper } from "./textSegment.js";
17
+ import { ReferencePosition } from "./referencePositions.js";
18
+ import { IMergeTreeOptions } from "./mergeTree.js";
19
+ import { IMergeTreeDeltaCallbackArgs, IMergeTreeDeltaOpArgs, IMergeTreeMaintenanceCallbackArgs } from "./index.js";
20
20
  /**
21
21
  * A range [start, end)
22
22
  * @internal
@@ -43,11 +43,27 @@ export interface IClientEvents {
43
43
  export declare class Client extends TypedEventEmitter<IClientEvents> {
44
44
  readonly specToSegment: (spec: IJSONSegment) => ISegment;
45
45
  readonly logger: ITelemetryLoggerExt;
46
+ private readonly getMinInFlightRefSeq;
46
47
  longClientId: string | undefined;
47
48
  private readonly _mergeTree;
48
49
  private readonly clientNameToIds;
49
50
  private readonly shortClientIdMap;
50
- constructor(specToSegment: (spec: IJSONSegment) => ISegment, logger: ITelemetryLoggerExt, options?: IMergeTreeOptions & PropertySet);
51
+ /**
52
+ * @param specToSegment - Rehydrates a segment from its JSON representation
53
+ * @param logger - Telemetry logger for diagnostics
54
+ * @param options - Options for this client. See {@link IMergeTreeOptions} for details.
55
+ * @param getMinInFlightRefSeq - Upon applying a message (see {@link Client.applyMsg}), client purges collab-window information which
56
+ * is no longer necessary based on that message's minimum sequence number.
57
+ * However, if the user of this client has in-flight messages which refer to positions in this Client,
58
+ * they may wish to preserve additional merge information.
59
+ * The effective minimum sequence number will be the minimum of the message's minimumSequenceNumber and the result of this function.
60
+ * If this function returns undefined, the message's minimumSequenceNumber will be used.
61
+ *
62
+ * @privateRemarks
63
+ * - Passing specToSegment would be unnecessary if Client were merged with SharedSegmentSequence
64
+ * - AB#6866 tracks a more unified approach to collab window min seq handling.
65
+ */
66
+ constructor(specToSegment: (spec: IJSONSegment) => ISegment, logger: ITelemetryLoggerExt, options?: IMergeTreeOptions & PropertySet, getMinInFlightRefSeq?: () => number | undefined);
51
67
  /**
52
68
  * The merge tree maintains a queue of segment groups for each local operation.
53
69
  * These segment groups track segments modified by an operation.
@@ -131,6 +147,11 @@ export declare class Client extends TypedEventEmitter<IClientEvents> {
131
147
  removeLocalReferencePosition(lref: LocalReferencePosition): LocalReferencePosition | undefined;
132
148
  /**
133
149
  * Resolves a `ReferencePosition` into a character position using this client's perspective.
150
+ *
151
+ * Reference positions that point to a character that has been removed will
152
+ * always return the position of the nearest non-removed character, regardless
153
+ * of {@link ReferenceType}. To handle this case specifically, one may wish
154
+ * to look at the segment returned by {@link ReferencePosition.getSegment}.
134
155
  */
135
156
  localReferencePositionToPosition(lref: ReferencePosition): number;
136
157
  /**
@@ -195,9 +216,7 @@ export declare class Client extends TypedEventEmitter<IClientEvents> {
195
216
  findReconnectionPosition(segment: ISegment, localSeq: number): number;
196
217
  private resetPendingDeltaToOps;
197
218
  private applyRemoteOp;
198
- applyStashedOp(op: IMergeTreeDeltaOp): SegmentGroup;
199
- applyStashedOp(op: IMergeTreeGroupMsg): SegmentGroup[];
200
- applyStashedOp(op: IMergeTreeOp): SegmentGroup | SegmentGroup[];
219
+ applyStashedOp(op: IMergeTreeOp): void;
201
220
  applyMsg(msg: ISequencedDocumentMessage, local?: boolean): void;
202
221
  private updateSeqNumbers;
203
222
  /**
@@ -250,4 +269,4 @@ export declare class Client extends TypedEventEmitter<IClientEvents> {
250
269
  */
251
270
  searchForMarker(startPos: number, markerLabel: string, forwards?: boolean): Marker | undefined;
252
271
  }
253
- //# sourceMappingURL=client.d.mts.map
272
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -6,20 +6,20 @@ import { MessageType } from "@fluidframework/protocol-definitions";
6
6
  import { assert, unreachableCase } from "@fluidframework/core-utils";
7
7
  import { TypedEventEmitter } from "@fluid-internal/client-utils";
8
8
  import { LoggingError, UsageError } from "@fluidframework/telemetry-utils";
9
- import { RedBlackTree } from "./collections/index.mjs";
10
- import { UnassignedSequenceNumber, UniversalSequenceNumber } from "./constants.mjs";
11
- import { compareStrings, } from "./mergeTreeNodes.mjs";
9
+ import { RedBlackTree } from "./collections/index.js";
10
+ import { UnassignedSequenceNumber, UniversalSequenceNumber } from "./constants.js";
11
+ import { compareStrings, } from "./mergeTreeNodes.js";
12
12
  import { createAnnotateMarkerOp, createAnnotateRangeOp,
13
13
  // eslint-disable-next-line import/no-deprecated
14
- createGroupOp, createInsertSegmentOp, createObliterateRangeOp, createRemoveRangeOp, } from "./opBuilder.mjs";
15
- import { MergeTreeDeltaType, } from "./ops.mjs";
16
- import { SnapshotLegacy } from "./snapshotlegacy.mjs";
17
- import { SnapshotLoader } from "./snapshotLoader.mjs";
18
- import { SnapshotV1 } from "./snapshotV1.mjs";
19
- import { DetachedReferencePosition } from "./referencePositions.mjs";
20
- import { MergeTree } from "./mergeTree.mjs";
21
- import { MergeTreeTextHelper } from "./MergeTreeTextHelper.mjs";
22
- import { walkAllChildSegments } from "./mergeTreeNodeWalk.mjs";
14
+ createGroupOp, createInsertSegmentOp, createObliterateRangeOp, createRemoveRangeOp, } from "./opBuilder.js";
15
+ import { MergeTreeDeltaType, } from "./ops.js";
16
+ import { SnapshotLegacy } from "./snapshotlegacy.js";
17
+ import { SnapshotLoader } from "./snapshotLoader.js";
18
+ import { SnapshotV1 } from "./snapshotV1.js";
19
+ import { DetachedReferencePosition } from "./referencePositions.js";
20
+ import { MergeTree } from "./mergeTree.js";
21
+ import { MergeTreeTextHelper } from "./MergeTreeTextHelper.js";
22
+ import { walkAllChildSegments } from "./mergeTreeNodeWalk.js";
23
23
  function removeMoveInfo(segment) {
24
24
  delete segment.movedSeq;
25
25
  delete segment.movedSeqs;
@@ -32,12 +32,26 @@ function removeMoveInfo(segment) {
32
32
  * @alpha
33
33
  */
34
34
  export class Client extends TypedEventEmitter {
35
- constructor(
36
- // Passing this callback would be unnecessary if Client were merged with SharedSegmentSequence
37
- specToSegment, logger, options) {
35
+ /**
36
+ * @param specToSegment - Rehydrates a segment from its JSON representation
37
+ * @param logger - Telemetry logger for diagnostics
38
+ * @param options - Options for this client. See {@link IMergeTreeOptions} for details.
39
+ * @param getMinInFlightRefSeq - Upon applying a message (see {@link Client.applyMsg}), client purges collab-window information which
40
+ * is no longer necessary based on that message's minimum sequence number.
41
+ * However, if the user of this client has in-flight messages which refer to positions in this Client,
42
+ * they may wish to preserve additional merge information.
43
+ * The effective minimum sequence number will be the minimum of the message's minimumSequenceNumber and the result of this function.
44
+ * If this function returns undefined, the message's minimumSequenceNumber will be used.
45
+ *
46
+ * @privateRemarks
47
+ * - Passing specToSegment would be unnecessary if Client were merged with SharedSegmentSequence
48
+ * - AB#6866 tracks a more unified approach to collab window min seq handling.
49
+ */
50
+ constructor(specToSegment, logger, options, getMinInFlightRefSeq = () => undefined) {
38
51
  super();
39
52
  this.specToSegment = specToSegment;
40
53
  this.logger = logger;
54
+ this.getMinInFlightRefSeq = getMinInFlightRefSeq;
41
55
  this.clientNameToIds = new RedBlackTree(compareStrings);
42
56
  this.shortClientIdMap = [];
43
57
  this.lastNormalizationRefSeq = 0;
@@ -219,6 +233,11 @@ export class Client extends TypedEventEmitter {
219
233
  }
220
234
  /**
221
235
  * Resolves a `ReferencePosition` into a character position using this client's perspective.
236
+ *
237
+ * Reference positions that point to a character that has been removed will
238
+ * always return the position of the nearest non-removed character, regardless
239
+ * of {@link ReferenceType}. To handle this case specifically, one may wish
240
+ * to look at the segment returned by {@link ReferencePosition.getSegment}.
222
241
  */
223
242
  localReferencePositionToPosition(lref) {
224
243
  return this._mergeTree.referencePositionToLocalPosition(lref);
@@ -558,35 +577,26 @@ export class Client extends TypedEventEmitter {
558
577
  break;
559
578
  }
560
579
  }
561
- // eslint-disable-next-line import/no-deprecated
562
580
  applyStashedOp(op) {
563
- // eslint-disable-next-line import/no-deprecated
564
- let metadata;
565
- const stashed = true;
566
581
  switch (op.type) {
567
582
  case MergeTreeDeltaType.INSERT:
568
- this.applyInsertOp({ op, stashed });
569
- metadata = this.peekPendingSegmentGroups();
583
+ this.applyInsertOp({ op });
570
584
  break;
571
585
  case MergeTreeDeltaType.REMOVE:
572
- this.applyRemoveRangeOp({ op, stashed });
573
- metadata = this.peekPendingSegmentGroups();
586
+ this.applyRemoveRangeOp({ op });
574
587
  break;
575
588
  case MergeTreeDeltaType.ANNOTATE:
576
- this.applyAnnotateRangeOp({ op, stashed });
577
- metadata = this.peekPendingSegmentGroups();
589
+ this.applyAnnotateRangeOp({ op });
578
590
  break;
579
591
  case MergeTreeDeltaType.OBLITERATE:
580
592
  this.applyObliterateRangeOp({ op });
581
- metadata = this.peekPendingSegmentGroups();
582
593
  break;
583
594
  case MergeTreeDeltaType.GROUP:
584
- return op.ops.map((o) => this.applyStashedOp(o));
595
+ op.ops.map((o) => this.applyStashedOp(o));
596
+ break;
585
597
  default:
586
598
  unreachableCase(op, "unrecognized op type");
587
599
  }
588
- assert(!!metadata, 0x2db /* "Applying op must generate a pending segment" */);
589
- return metadata;
590
600
  }
591
601
  applyMsg(msg, local = false) {
592
602
  // Ensure client ID is registered
@@ -604,7 +614,8 @@ export class Client extends TypedEventEmitter {
604
614
  this.applyRemoteOp(opArgs);
605
615
  }
606
616
  }
607
- this.updateSeqNumbers(msg.minimumSequenceNumber, msg.sequenceNumber);
617
+ const min = Math.min(this.getMinInFlightRefSeq() ?? Number.POSITIVE_INFINITY, msg.minimumSequenceNumber);
618
+ this.updateSeqNumbers(min, msg.sequenceNumber);
608
619
  }
609
620
  updateSeqNumbers(min, seq) {
610
621
  const collabWindow = this.getCollabWindow();
@@ -814,4 +825,4 @@ export class Client extends TypedEventEmitter {
814
825
  return this._mergeTree.searchForMarker(startPos, clientId, markerLabel, forwards);
815
826
  }
816
827
  }
817
- //# sourceMappingURL=client.mjs.map
828
+ //# sourceMappingURL=client.js.map