@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
@@ -5,27 +5,27 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const assert_1 = require("assert");
8
- const snapshotV1_1 = require("../snapshotV1");
9
- const attributionPolicy_1 = require("../attributionPolicy");
10
- const snapshot_utils_1 = require("./snapshot.utils");
8
+ const snapshotV1_js_1 = require("../snapshotV1.js");
9
+ const attributionPolicy_js_1 = require("../attributionPolicy.js");
10
+ const snapshot_utils_js_1 = require("./snapshot.utils.js");
11
11
  function makeSnapshotSuite(options) {
12
12
  describe("from an empty initial state", () => {
13
13
  let str;
14
14
  beforeEach(() => {
15
- str = new snapshot_utils_1.TestString("fakeId", options);
15
+ str = new snapshot_utils_js_1.TestString("fakeId", options);
16
16
  });
17
17
  afterEach(async () => {
18
18
  // Paranoid check that ensures `str` roundtrips through snapshot/load. This helps to catch
19
19
  // bugs that might be missed if the test case forgets to call/await `str.expect()`.
20
20
  await str.checkSnapshot({
21
- attribution: { policyFactory: attributionPolicy_1.createInsertOnlyAttributionPolicy },
21
+ attribution: { policyFactory: attributionPolicy_js_1.createInsertOnlyAttributionPolicy },
22
22
  });
23
23
  });
24
24
  it("excludes un-acked segments", async () => {
25
25
  str.append("0", /* increaseMsn: */ false);
26
26
  // Invoke `load/getSnapshot()` directly instead of `str.expect()` to avoid ACKing the
27
27
  // pending insert op.
28
- const client2 = await (0, snapshot_utils_1.loadSnapshot)(str.getSummary(), options);
28
+ const client2 = await (0, snapshot_utils_js_1.loadSnapshot)(str.getSummary(), options);
29
29
  // Original client has inserted text, but the one loaded from the snapshot should be empty.
30
30
  // This is because un-ACKed ops are not included in snapshots. Instead, these ops are
31
31
  // retransmitted and applied after the snapshot has loaded.
@@ -106,13 +106,13 @@ function makeSnapshotSuite(options) {
106
106
  await str.expect("0123");
107
107
  });
108
108
  it("includes ACKed segments below MSN in body", async () => {
109
- for (let i = 0; i < snapshotV1_1.SnapshotV1.chunkSize + 10; i++) {
109
+ for (let i = 0; i < snapshotV1_js_1.SnapshotV1.chunkSize + 10; i++) {
110
110
  str.append(`${i % 10}`, /* increaseMsn: */ true);
111
111
  }
112
112
  await str.checkSnapshot();
113
113
  });
114
114
  it("includes ACKed segments above MSN in body", async () => {
115
- for (let i = 0; i < snapshotV1_1.SnapshotV1.chunkSize + 10; i++) {
115
+ for (let i = 0; i < snapshotV1_js_1.SnapshotV1.chunkSize + 10; i++) {
116
116
  str.append(`${i % 10}`, /* increaseMsn: */ false);
117
117
  }
118
118
  await str.checkSnapshot();
@@ -125,7 +125,7 @@ function makeSnapshotSuite(options) {
125
125
  });
126
126
  describe("from a non-empty initial state", () => {
127
127
  it("includes segments submitted while detached", async () => {
128
- const str = new snapshot_utils_1.TestString("A", options, "starting text");
128
+ const str = new snapshot_utils_js_1.TestString("A", options, "starting text");
129
129
  await str.expect("starting text");
130
130
  });
131
131
  });
@@ -133,7 +133,7 @@ function makeSnapshotSuite(options) {
133
133
  describe("snapshot", () => {
134
134
  describe("with attribution", () => {
135
135
  makeSnapshotSuite({
136
- attribution: { track: true, policyFactory: attributionPolicy_1.createInsertOnlyAttributionPolicy },
136
+ attribution: { track: true, policyFactory: attributionPolicy_js_1.createInsertOnlyAttributionPolicy },
137
137
  mergeTreeEnableObliterate: true,
138
138
  });
139
139
  });
@@ -141,7 +141,7 @@ describe("snapshot", () => {
141
141
  makeSnapshotSuite({
142
142
  attribution: {
143
143
  track: true,
144
- policyFactory: (0, attributionPolicy_1.createPropertyTrackingAttributionPolicyFactory)("foo"),
144
+ policyFactory: (0, attributionPolicy_js_1.createPropertyTrackingAttributionPolicyFactory)("foo"),
145
145
  },
146
146
  mergeTreeEnableObliterate: true,
147
147
  });
@@ -153,22 +153,22 @@ describe("snapshot", () => {
153
153
  });
154
154
  });
155
155
  it("presence of attribution overrides merge-tree initialization value", async () => {
156
- const str = new snapshot_utils_1.TestString("id", {
157
- attribution: { track: true, policyFactory: attributionPolicy_1.createInsertOnlyAttributionPolicy },
156
+ const str = new snapshot_utils_js_1.TestString("id", {
157
+ attribution: { track: true, policyFactory: attributionPolicy_js_1.createInsertOnlyAttributionPolicy },
158
158
  });
159
159
  str.append("hello world", /* increaseMsn: */ true);
160
160
  await str.checkSnapshot({
161
- attribution: { track: false, policyFactory: attributionPolicy_1.createInsertOnlyAttributionPolicy },
161
+ attribution: { track: false, policyFactory: attributionPolicy_js_1.createInsertOnlyAttributionPolicy },
162
162
  });
163
163
  str.insert(0, "should have attribution", false);
164
164
  str.applyPendingOps();
165
165
  (0, assert_1.strict)(str.getSegment(0).attribution !== undefined, "Attribution should be created on new segments");
166
166
  });
167
167
  it("lack of attribution overrides merge-tree initialization", async () => {
168
- const str = new snapshot_utils_1.TestString("id", { attribution: { track: false } });
168
+ const str = new snapshot_utils_js_1.TestString("id", { attribution: { track: false } });
169
169
  str.append("hello world", /* increaseMsn: */ true);
170
170
  await str.checkSnapshot({
171
- attribution: { track: true, policyFactory: attributionPolicy_1.createInsertOnlyAttributionPolicy },
171
+ attribution: { track: true, policyFactory: attributionPolicy_js_1.createInsertOnlyAttributionPolicy },
172
172
  });
173
173
  str.insert(0, "should not have attribution", false);
174
174
  str.applyPendingOps();
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.spec.js","sourceRoot":"","sources":["../../src/test/snapshot.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,mCAA0C;AAC1C,8CAA2C;AAE3C,4DAG8B;AAC9B,qDAA4D;AAE5D,SAAS,iBAAiB,CAAC,OAA2B;IACrD,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC5C,IAAI,GAAe,CAAC;QACpB,UAAU,CAAC,GAAG,EAAE;YACf,GAAG,GAAG,IAAI,2BAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,IAAI,EAAE;YACpB,2FAA2F;YAC3F,mFAAmF;YACnF,MAAM,GAAG,CAAC,aAAa,CAAC;gBACvB,WAAW,EAAE,EAAE,aAAa,EAAE,qDAAiC,EAAE;aACjE,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC3C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAE1C,qFAAqF;YACrF,qBAAqB;YACrB,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAY,EAAC,GAAG,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;YAE9D,2FAA2F;YAC3F,sFAAsF;YACtF,2DAA2D;YAC3D,eAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;YACjC,eAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC5C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACtD,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC5D,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC3C,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YAC1E,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1C,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YAClE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1C,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAChE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC3C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAChD,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACrF,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC3C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAEhD,qGAAqG;YACrG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC7E,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1C,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACtE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1C,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACpE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC3C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACpD,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACzF,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC3C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAEpD,qGAAqG;YACrG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAU,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gBACnD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;aACjD;YAED,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAU,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gBACnD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;aAClD;YAED,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC5C,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACzB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAEtC,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC/C,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,GAAG,GAAG,IAAI,2BAAU,CAAC,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAC1D,MAAM,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACzB,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QACjC,iBAAiB,CAAC;YACjB,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,qDAAiC,EAAE;YAC9E,yBAAyB,EAAE,IAAI;SAC/B,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACrD,iBAAiB,CAAC;YACjB,WAAW,EAAE;gBACZ,KAAK,EAAE,IAAI;gBACX,aAAa,EAAE,IAAA,kEAA8C,EAAC,KAAK,CAAC;aACpE;YACD,yBAAyB,EAAE,IAAI;SAC/B,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACpC,iBAAiB,CAAC;YACjB,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7B,yBAAyB,EAAE,IAAI;SAC/B,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,GAAG,GAAG,IAAI,2BAAU,CAAC,IAAI,EAAE;YAChC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,qDAAiC,EAAE;SAC9E,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,GAAG,CAAC,aAAa,CAAC;YACvB,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,qDAAiC,EAAE;SAC/E,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,GAAG,CAAC,eAAe,EAAE,CAAC;QACtB,IAAA,eAAM,EACL,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,EAC3C,+CAA+C,CAC/C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,GAAG,GAAG,IAAI,2BAAU,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACpE,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,GAAG,CAAC,aAAa,CAAC;YACvB,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,qDAAiC,EAAE;SAC9E,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,GAAG,CAAC,eAAe,EAAE,CAAC;QACtB,IAAA,eAAM,EACL,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,EAC3C,kDAAkD,CAClD,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { SnapshotV1 } from \"../snapshotV1\";\nimport { IMergeTreeOptions } from \"../mergeTree\";\nimport {\n\tcreateInsertOnlyAttributionPolicy,\n\tcreatePropertyTrackingAttributionPolicyFactory,\n} from \"../attributionPolicy\";\nimport { loadSnapshot, TestString } from \"./snapshot.utils\";\n\nfunction makeSnapshotSuite(options?: IMergeTreeOptions): void {\n\tdescribe(\"from an empty initial state\", () => {\n\t\tlet str: TestString;\n\t\tbeforeEach(() => {\n\t\t\tstr = new TestString(\"fakeId\", options);\n\t\t});\n\n\t\tafterEach(async () => {\n\t\t\t// Paranoid check that ensures `str` roundtrips through snapshot/load. This helps to catch\n\t\t\t// bugs that might be missed if the test case forgets to call/await `str.expect()`.\n\t\t\tawait str.checkSnapshot({\n\t\t\t\tattribution: { policyFactory: createInsertOnlyAttributionPolicy },\n\t\t\t});\n\t\t});\n\n\t\tit(\"excludes un-acked segments\", async () => {\n\t\t\tstr.append(\"0\", /* increaseMsn: */ false);\n\n\t\t\t// Invoke `load/getSnapshot()` directly instead of `str.expect()` to avoid ACKing the\n\t\t\t// pending insert op.\n\t\t\tconst client2 = await loadSnapshot(str.getSummary(), options);\n\n\t\t\t// Original client has inserted text, but the one loaded from the snapshot should be empty.\n\t\t\t// This is because un-ACKed ops are not included in snapshots. Instead, these ops are\n\t\t\t// retransmitted and applied after the snapshot has loaded.\n\t\t\tassert.equal(str.getText(), \"0\");\n\t\t\tassert.equal(client2.getText(), \"\");\n\t\t});\n\n\t\tit(\"includes segments below MSN\", async () => {\n\t\t\tstr.append(\"0\", /* increaseMsn: */ true);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"includes ACKed segments above the MSN\", async () => {\n\t\t\tstr.append(\"0\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"includes removals of segments above the MSN\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"includes removals above the MSN of segments below the MSN\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ true);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"can insert segments after loading removed segment\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ true);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t\tstr.append(\"1\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"01\");\n\t\t});\n\n\t\tit(\"can insert segments relative to removed segment\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"2\", /* increaseMsn: */ false);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\t\t\tstr.insert(1, \"1\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"3\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0123\");\n\t\t});\n\n\t\tit(\"can insert segments relative to removed segment loaded from snapshot\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"2\", /* increaseMsn: */ false);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\n\t\t\t// Note that calling str.expect() switches the underlying client to the one loaded from the snapshot.\n\t\t\tawait str.expect(\"02\");\n\n\t\t\tstr.insert(1, \"1\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"3\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0123\");\n\t\t});\n\n\t\tit(\"includes obliterates above the MSN of segments below the MSN\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ true);\n\t\t\tstr.obliterateRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"can insert segments after loading obliterated segment\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ true);\n\t\t\tstr.obliterateRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t\tstr.append(\"1\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"01\");\n\t\t});\n\n\t\tit(\"can insert segments relative to obliterated segment\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"2\", /* increaseMsn: */ false);\n\t\t\tstr.obliterateRange(1, 2, /* increaseMsn: */ false);\n\t\t\tstr.insert(1, \"1\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"3\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0123\");\n\t\t});\n\n\t\tit(\"can insert segments relative to obliterated segment loaded from snapshot\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"2\", /* increaseMsn: */ false);\n\t\t\tstr.obliterateRange(1, 2, /* increaseMsn: */ false);\n\n\t\t\t// Note that calling str.expect() switches the underlying client to the one loaded from the snapshot.\n\t\t\tawait str.expect(\"02\");\n\n\t\t\tstr.insert(1, \"1\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"3\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0123\");\n\t\t});\n\n\t\tit(\"includes ACKed segments below MSN in body\", async () => {\n\t\t\tfor (let i = 0; i < SnapshotV1.chunkSize + 10; i++) {\n\t\t\t\tstr.append(`${i % 10}`, /* increaseMsn: */ true);\n\t\t\t}\n\n\t\t\tawait str.checkSnapshot();\n\t\t});\n\n\t\tit(\"includes ACKed segments above MSN in body\", async () => {\n\t\t\tfor (let i = 0; i < SnapshotV1.chunkSize + 10; i++) {\n\t\t\t\tstr.append(`${i % 10}`, /* increaseMsn: */ false);\n\t\t\t}\n\n\t\t\tawait str.checkSnapshot();\n\t\t});\n\n\t\tit(\"recovers annotated segments\", async () => {\n\t\t\tstr.append(\"123\", false);\n\t\t\tstr.annotate(1, 2, { foo: 1 }, false);\n\n\t\t\tawait str.checkSnapshot();\n\t\t});\n\t});\n\n\tdescribe(\"from a non-empty initial state\", () => {\n\t\tit(\"includes segments submitted while detached\", async () => {\n\t\t\tconst str = new TestString(\"A\", options, \"starting text\");\n\t\t\tawait str.expect(\"starting text\");\n\t\t});\n\t});\n}\n\ndescribe(\"snapshot\", () => {\n\tdescribe(\"with attribution\", () => {\n\t\tmakeSnapshotSuite({\n\t\t\tattribution: { track: true, policyFactory: createInsertOnlyAttributionPolicy },\n\t\t\tmergeTreeEnableObliterate: true,\n\t\t});\n\t});\n\n\tdescribe(\"with attribution and custom channels\", () => {\n\t\tmakeSnapshotSuite({\n\t\t\tattribution: {\n\t\t\t\ttrack: true,\n\t\t\t\tpolicyFactory: createPropertyTrackingAttributionPolicyFactory(\"foo\"),\n\t\t\t},\n\t\t\tmergeTreeEnableObliterate: true,\n\t\t});\n\t});\n\n\tdescribe(\"without attribution\", () => {\n\t\tmakeSnapshotSuite({\n\t\t\tattribution: { track: false },\n\t\t\tmergeTreeEnableObliterate: true,\n\t\t});\n\t});\n\n\tit(\"presence of attribution overrides merge-tree initialization value\", async () => {\n\t\tconst str = new TestString(\"id\", {\n\t\t\tattribution: { track: true, policyFactory: createInsertOnlyAttributionPolicy },\n\t\t});\n\t\tstr.append(\"hello world\", /* increaseMsn: */ true);\n\t\tawait str.checkSnapshot({\n\t\t\tattribution: { track: false, policyFactory: createInsertOnlyAttributionPolicy },\n\t\t});\n\t\tstr.insert(0, \"should have attribution\", false);\n\t\tstr.applyPendingOps();\n\t\tassert(\n\t\t\tstr.getSegment(0).attribution !== undefined,\n\t\t\t\"Attribution should be created on new segments\",\n\t\t);\n\t});\n\n\tit(\"lack of attribution overrides merge-tree initialization\", async () => {\n\t\tconst str = new TestString(\"id\", { attribution: { track: false } });\n\t\tstr.append(\"hello world\", /* increaseMsn: */ true);\n\t\tawait str.checkSnapshot({\n\t\t\tattribution: { track: true, policyFactory: createInsertOnlyAttributionPolicy },\n\t\t});\n\t\tstr.insert(0, \"should not have attribution\", false);\n\t\tstr.applyPendingOps();\n\t\tassert(\n\t\t\tstr.getSegment(0).attribution === undefined,\n\t\t\t\"No attribution should be created on new segments\",\n\t\t);\n\t});\n});\n"]}
1
+ {"version":3,"file":"snapshot.spec.js","sourceRoot":"","sources":["../../src/test/snapshot.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { SnapshotV1 } from \"../snapshotV1.js\";\nimport { IMergeTreeOptions } from \"../mergeTree.js\";\nimport {\n\tcreateInsertOnlyAttributionPolicy,\n\tcreatePropertyTrackingAttributionPolicyFactory,\n} from \"../attributionPolicy.js\";\nimport { loadSnapshot, TestString } from \"./snapshot.utils.js\";\n\nfunction makeSnapshotSuite(options?: IMergeTreeOptions): void {\n\tdescribe(\"from an empty initial state\", () => {\n\t\tlet str: TestString;\n\t\tbeforeEach(() => {\n\t\t\tstr = new TestString(\"fakeId\", options);\n\t\t});\n\n\t\tafterEach(async () => {\n\t\t\t// Paranoid check that ensures `str` roundtrips through snapshot/load. This helps to catch\n\t\t\t// bugs that might be missed if the test case forgets to call/await `str.expect()`.\n\t\t\tawait str.checkSnapshot({\n\t\t\t\tattribution: { policyFactory: createInsertOnlyAttributionPolicy },\n\t\t\t});\n\t\t});\n\n\t\tit(\"excludes un-acked segments\", async () => {\n\t\t\tstr.append(\"0\", /* increaseMsn: */ false);\n\n\t\t\t// Invoke `load/getSnapshot()` directly instead of `str.expect()` to avoid ACKing the\n\t\t\t// pending insert op.\n\t\t\tconst client2 = await loadSnapshot(str.getSummary(), options);\n\n\t\t\t// Original client has inserted text, but the one loaded from the snapshot should be empty.\n\t\t\t// This is because un-ACKed ops are not included in snapshots. Instead, these ops are\n\t\t\t// retransmitted and applied after the snapshot has loaded.\n\t\t\tassert.equal(str.getText(), \"0\");\n\t\t\tassert.equal(client2.getText(), \"\");\n\t\t});\n\n\t\tit(\"includes segments below MSN\", async () => {\n\t\t\tstr.append(\"0\", /* increaseMsn: */ true);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"includes ACKed segments above the MSN\", async () => {\n\t\t\tstr.append(\"0\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"includes removals of segments above the MSN\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"includes removals above the MSN of segments below the MSN\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ true);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"can insert segments after loading removed segment\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ true);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t\tstr.append(\"1\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"01\");\n\t\t});\n\n\t\tit(\"can insert segments relative to removed segment\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"2\", /* increaseMsn: */ false);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\t\t\tstr.insert(1, \"1\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"3\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0123\");\n\t\t});\n\n\t\tit(\"can insert segments relative to removed segment loaded from snapshot\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"2\", /* increaseMsn: */ false);\n\t\t\tstr.removeRange(1, 2, /* increaseMsn: */ false);\n\n\t\t\t// Note that calling str.expect() switches the underlying client to the one loaded from the snapshot.\n\t\t\tawait str.expect(\"02\");\n\n\t\t\tstr.insert(1, \"1\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"3\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0123\");\n\t\t});\n\n\t\tit(\"includes obliterates above the MSN of segments below the MSN\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ true);\n\t\t\tstr.obliterateRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t});\n\n\t\tit(\"can insert segments after loading obliterated segment\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ true);\n\t\t\tstr.obliterateRange(1, 2, /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0\");\n\t\t\tstr.append(\"1\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"01\");\n\t\t});\n\n\t\tit(\"can insert segments relative to obliterated segment\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"2\", /* increaseMsn: */ false);\n\t\t\tstr.obliterateRange(1, 2, /* increaseMsn: */ false);\n\t\t\tstr.insert(1, \"1\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"3\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0123\");\n\t\t});\n\n\t\tit(\"can insert segments relative to obliterated segment loaded from snapshot\", async () => {\n\t\t\tstr.append(\"0x\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"2\", /* increaseMsn: */ false);\n\t\t\tstr.obliterateRange(1, 2, /* increaseMsn: */ false);\n\n\t\t\t// Note that calling str.expect() switches the underlying client to the one loaded from the snapshot.\n\t\t\tawait str.expect(\"02\");\n\n\t\t\tstr.insert(1, \"1\", /* increaseMsn: */ false);\n\t\t\tstr.append(\"3\", /* increaseMsn: */ false);\n\t\t\tawait str.expect(\"0123\");\n\t\t});\n\n\t\tit(\"includes ACKed segments below MSN in body\", async () => {\n\t\t\tfor (let i = 0; i < SnapshotV1.chunkSize + 10; i++) {\n\t\t\t\tstr.append(`${i % 10}`, /* increaseMsn: */ true);\n\t\t\t}\n\n\t\t\tawait str.checkSnapshot();\n\t\t});\n\n\t\tit(\"includes ACKed segments above MSN in body\", async () => {\n\t\t\tfor (let i = 0; i < SnapshotV1.chunkSize + 10; i++) {\n\t\t\t\tstr.append(`${i % 10}`, /* increaseMsn: */ false);\n\t\t\t}\n\n\t\t\tawait str.checkSnapshot();\n\t\t});\n\n\t\tit(\"recovers annotated segments\", async () => {\n\t\t\tstr.append(\"123\", false);\n\t\t\tstr.annotate(1, 2, { foo: 1 }, false);\n\n\t\t\tawait str.checkSnapshot();\n\t\t});\n\t});\n\n\tdescribe(\"from a non-empty initial state\", () => {\n\t\tit(\"includes segments submitted while detached\", async () => {\n\t\t\tconst str = new TestString(\"A\", options, \"starting text\");\n\t\t\tawait str.expect(\"starting text\");\n\t\t});\n\t});\n}\n\ndescribe(\"snapshot\", () => {\n\tdescribe(\"with attribution\", () => {\n\t\tmakeSnapshotSuite({\n\t\t\tattribution: { track: true, policyFactory: createInsertOnlyAttributionPolicy },\n\t\t\tmergeTreeEnableObliterate: true,\n\t\t});\n\t});\n\n\tdescribe(\"with attribution and custom channels\", () => {\n\t\tmakeSnapshotSuite({\n\t\t\tattribution: {\n\t\t\t\ttrack: true,\n\t\t\t\tpolicyFactory: createPropertyTrackingAttributionPolicyFactory(\"foo\"),\n\t\t\t},\n\t\t\tmergeTreeEnableObliterate: true,\n\t\t});\n\t});\n\n\tdescribe(\"without attribution\", () => {\n\t\tmakeSnapshotSuite({\n\t\t\tattribution: { track: false },\n\t\t\tmergeTreeEnableObliterate: true,\n\t\t});\n\t});\n\n\tit(\"presence of attribution overrides merge-tree initialization value\", async () => {\n\t\tconst str = new TestString(\"id\", {\n\t\t\tattribution: { track: true, policyFactory: createInsertOnlyAttributionPolicy },\n\t\t});\n\t\tstr.append(\"hello world\", /* increaseMsn: */ true);\n\t\tawait str.checkSnapshot({\n\t\t\tattribution: { track: false, policyFactory: createInsertOnlyAttributionPolicy },\n\t\t});\n\t\tstr.insert(0, \"should have attribution\", false);\n\t\tstr.applyPendingOps();\n\t\tassert(\n\t\t\tstr.getSegment(0).attribution !== undefined,\n\t\t\t\"Attribution should be created on new segments\",\n\t\t);\n\t});\n\n\tit(\"lack of attribution overrides merge-tree initialization\", async () => {\n\t\tconst str = new TestString(\"id\", { attribution: { track: false } });\n\t\tstr.append(\"hello world\", /* increaseMsn: */ true);\n\t\tawait str.checkSnapshot({\n\t\t\tattribution: { track: true, policyFactory: createInsertOnlyAttributionPolicy },\n\t\t});\n\t\tstr.insert(0, \"should not have attribution\", false);\n\t\tstr.applyPendingOps();\n\t\tassert(\n\t\t\tstr.getSegment(0).attribution === undefined,\n\t\t\t\"No attribution should be created on new segments\",\n\t\t);\n\t});\n});\n"]}
@@ -3,10 +3,10 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { ISummaryTree } from "@fluidframework/protocol-definitions";
6
- import { IMergeTreeOptions } from "../mergeTree";
7
- import { PropertySet } from "../properties";
8
- import { ISegment } from "../mergeTreeNodes";
9
- import { TestClient } from "./testClient";
6
+ import { IMergeTreeOptions } from "../mergeTree.js";
7
+ import { PropertySet } from "../properties.js";
8
+ import { ISegment } from "../mergeTreeNodes.js";
9
+ import { TestClient } from "./testClient.js";
10
10
  export declare function loadSnapshot(summary: ISummaryTree, options?: IMergeTreeOptions): Promise<TestClient>;
11
11
  export declare class TestString {
12
12
  private readonly options?;
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.utils.d.ts","sourceRoot":"","sources":["../../src/test/snapshot.utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAA6B,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAK/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,iBAAiB,uBAepF;AAGD,qBAAa,UAAU;IAQrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAP1B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,MAAM,CAAK;gBAGlB,EAAE,EAAE,MAAM,EACO,OAAO,CAAC,+BAAmB,EAC5C,YAAY,GAAE,MAAW;IAMnB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAOtD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO;IAI7E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAIzC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAS9C,YAAY,CAAC,WAAW,EAAE,OAAO;IAIjC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAI5D,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAO1D,MAAM,CAAC,QAAQ,EAAE,MAAM;IAWvB,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB;IA8B/C,UAAU;IASV,OAAO;IAIP,eAAe;IAOtB,OAAO,CAAC,KAAK;IAeN,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;CAKxC"}
1
+ {"version":3,"file":"snapshot.utils.d.ts","sourceRoot":"","sources":["../../src/test/snapshot.utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAA6B,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAK/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,iBAAiB,uBAepF;AAGD,qBAAa,UAAU;IAQrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAP1B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,MAAM,CAAK;gBAGlB,EAAE,EAAE,MAAM,EACO,OAAO,CAAC,+BAAmB,EAC5C,YAAY,GAAE,MAAW;IAMnB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAOtD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO;IAI7E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAIzC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAS9C,YAAY,CAAC,WAAW,EAAE,OAAO;IAIjC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAI5D,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IAO1D,MAAM,CAAC,QAAQ,EAAE,MAAM;IAWvB,aAAa,CAAC,OAAO,CAAC,EAAE,iBAAiB;IA8B/C,UAAU,IAAI,YAAY;IAS1B,OAAO;IAIP,eAAe;IAOtB,OAAO,CAAC,KAAK;IAeN,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;CAKxC"}
@@ -8,20 +8,20 @@ exports.TestString = exports.loadSnapshot = void 0;
8
8
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
9
9
  const assert_1 = require("assert");
10
10
  const test_runtime_utils_1 = require("@fluidframework/test-runtime-utils");
11
- const ops_1 = require("../ops");
12
- const snapshotV1_1 = require("../snapshotV1");
13
- const testClientLogger_1 = require("./testClientLogger");
14
- const testSerializer_1 = require("./testSerializer");
15
- const testClient_1 = require("./testClient");
11
+ const ops_js_1 = require("../ops.js");
12
+ const snapshotV1_js_1 = require("../snapshotV1.js");
13
+ const testClientLogger_js_1 = require("./testClientLogger.js");
14
+ const testSerializer_js_1 = require("./testSerializer.js");
15
+ const testClient_js_1 = require("./testClient.js");
16
16
  // Reconstitutes a MergeTree client from a summary
17
17
  async function loadSnapshot(summary, options) {
18
18
  const services = test_runtime_utils_1.MockStorage.createFromSummary(summary);
19
- const client2 = new testClient_1.TestClient(options);
19
+ const client2 = new testClient_js_1.TestClient(options);
20
20
  const runtime = {
21
21
  logger: client2.logger,
22
22
  clientId: "1",
23
23
  };
24
- const { catchupOpsP } = await client2.load(runtime, services, new testSerializer_1.TestSerializer());
24
+ const { catchupOpsP } = await client2.load(runtime, services, new testSerializer_js_1.TestSerializer());
25
25
  await catchupOpsP;
26
26
  return client2;
27
27
  }
@@ -33,7 +33,7 @@ class TestString {
33
33
  this.pending = [];
34
34
  this.seq = 0;
35
35
  this.minSeq = 0;
36
- this.client = (0, testClientLogger_1.createClientsAtInitialState)({ initialState, options }, id)[id];
36
+ this.client = (0, testClientLogger_js_1.createClientsAtInitialState)({ initialState, options }, id)[id];
37
37
  this.client.startOrUpdateCollaboration(id);
38
38
  }
39
39
  insert(pos, text, increaseMsn) {
@@ -46,7 +46,7 @@ class TestString {
46
46
  this.insert(this.client.getLength(), text, increaseMsn);
47
47
  }
48
48
  insertMarker(pos, increaseMsn) {
49
- this.queue(this.client.insertMarkerLocal(pos, ops_1.ReferenceType.Simple, {
49
+ this.queue(this.client.insertMarkerLocal(pos, ops_js_1.ReferenceType.Simple, {
50
50
  segment: this.pending.length,
51
51
  }), increaseMsn);
52
52
  }
@@ -81,9 +81,9 @@ class TestString {
81
81
  this.client = client2;
82
82
  }
83
83
  getSummary() {
84
- const snapshot = new snapshotV1_1.SnapshotV1(this.client.mergeTree, this.client.logger, (id) => this.client.getLongClientId(id));
84
+ const snapshot = new snapshotV1_js_1.SnapshotV1(this.client.mergeTree, this.client.logger, (id) => this.client.getLongClientId(id));
85
85
  snapshot.extractSync();
86
- return snapshot.emit(testClient_1.TestClient.serializer, undefined).summary;
86
+ return snapshot.emit(testClient_js_1.TestClient.serializer, undefined).summary;
87
87
  }
88
88
  getText() {
89
89
  return this.client.getText();
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.utils.js","sourceRoot":"","sources":["../../src/test/snapshot.utils.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 { strict as assert } from \"assert\";\nimport { ISequencedDocumentMessage, ISummaryTree } from \"@fluidframework/protocol-definitions\";\nimport { IFluidDataStoreRuntime } from \"@fluidframework/datastore-definitions\";\nimport { MockStorage } from \"@fluidframework/test-runtime-utils\";\nimport { IMergeTreeOp, ReferenceType } from \"../ops\";\nimport { SnapshotV1 } from \"../snapshotV1\";\nimport { IMergeTreeOptions } from \"../mergeTree\";\nimport { PropertySet } from \"../properties\";\nimport { ISegment } from \"../mergeTreeNodes\";\nimport { createClientsAtInitialState } from \"./testClientLogger\";\nimport { TestSerializer } from \"./testSerializer\";\nimport { TestClient } from \"./testClient\";\n\n// Reconstitutes a MergeTree client from a summary\nexport async function loadSnapshot(summary: ISummaryTree, options?: IMergeTreeOptions) {\n\tconst services = MockStorage.createFromSummary(summary);\n\tconst client2 = new TestClient(options);\n\tconst runtime: Partial<IFluidDataStoreRuntime> = {\n\t\tlogger: client2.logger,\n\t\tclientId: \"1\",\n\t};\n\n\tconst { catchupOpsP } = await client2.load(\n\t\truntime as IFluidDataStoreRuntime,\n\t\tservices,\n\t\tnew TestSerializer(),\n\t);\n\tawait catchupOpsP;\n\treturn client2;\n}\n\n// Wrapper around MergeTree client that provides a convenient SharedString-like API for tests.\nexport class TestString {\n\tprivate client: TestClient;\n\tprivate readonly pending: ISequencedDocumentMessage[] = [];\n\tprivate seq = 0;\n\tprivate minSeq = 0;\n\n\tconstructor(\n\t\tid: string,\n\t\tprivate readonly options?: IMergeTreeOptions,\n\t\tinitialState: string = \"\",\n\t) {\n\t\tthis.client = createClientsAtInitialState({ initialState, options }, id)[id];\n\t\tthis.client.startOrUpdateCollaboration(id);\n\t}\n\n\tpublic insert(pos: number, text: string, increaseMsn: boolean) {\n\t\tthis.queue(\n\t\t\tthis.client.insertTextLocal(pos, text, { segment: this.pending.length })!,\n\t\t\tincreaseMsn,\n\t\t);\n\t}\n\n\tpublic annotate(start: number, end: number, props: PropertySet, increaseMsn: boolean) {\n\t\tthis.queue(this.client.annotateRangeLocal(start, end, props)!, increaseMsn);\n\t}\n\n\tpublic append(text: string, increaseMsn: boolean) {\n\t\tthis.insert(this.client.getLength(), text, increaseMsn);\n\t}\n\n\tpublic insertMarker(pos: number, increaseMsn: boolean) {\n\t\tthis.queue(\n\t\t\tthis.client.insertMarkerLocal(pos, ReferenceType.Simple, {\n\t\t\t\tsegment: this.pending.length,\n\t\t\t})!,\n\t\t\tincreaseMsn,\n\t\t);\n\t}\n\n\tpublic appendMarker(increaseMsn: boolean) {\n\t\tthis.insertMarker(this.client.getLength(), increaseMsn);\n\t}\n\n\tpublic removeRange(start: number, end: number, increaseMsn: boolean) {\n\t\tthis.queue(this.client.removeRangeLocal(start, end)!, increaseMsn);\n\t}\n\n\tpublic obliterateRange(start: number, end: number, increaseMsn: boolean) {\n\t\tthis.queue(this.client.obliterateRangeLocal(start, end)!, increaseMsn);\n\t}\n\n\t// Ensures the client's text matches the `expected` string and round-trips through a snapshot\n\t// into a new client. The current client is then replaced with the loaded client in the hope\n\t// that it will help detect corruption bugs as further ops are applied.\n\tpublic async expect(expected: string) {\n\t\tassert.equal(\n\t\t\tthis.client.getText(),\n\t\t\texpected,\n\t\t\t\"MergeTree must contain the expected text prior to applying ops.\",\n\t\t);\n\n\t\tawait this.checkSnapshot(this.options);\n\t}\n\n\t// Ensures the MergeTree client's contents successfully roundtrip through a snapshot.\n\tpublic async checkSnapshot(options?: IMergeTreeOptions) {\n\t\tthis.applyPendingOps();\n\t\tconst expectedAttributionKeys = this.client.getAllAttributionSeqs();\n\t\tconst summary = this.getSummary();\n\t\tconst client2 = await loadSnapshot(summary, options ?? this.options);\n\n\t\tassert.equal(\n\t\t\tthis.client.getText(),\n\t\t\tclient2.getText(),\n\t\t\t\"Snapshot must produce a MergeTree with the same text as the original\",\n\t\t);\n\n\t\t// Also check the length as weak test for non-TextSegments.\n\t\tassert.equal(\n\t\t\tthis.client.getLength(),\n\t\t\tclient2.getLength(),\n\t\t\t\"Snapshot must produce a MergeTree with the same length as the original\",\n\t\t);\n\n\t\tconst actualAttributionKeys = client2.getAllAttributionSeqs();\n\t\tassert.deepEqual(\n\t\t\tactualAttributionKeys,\n\t\t\texpectedAttributionKeys,\n\t\t\t\"Snapshot must produce a MergeTree with identical attribution as the original\",\n\t\t);\n\n\t\t// Replace our client with the one loaded by the snapshot.\n\t\tthis.client = client2;\n\t}\n\n\tpublic getSummary() {\n\t\tconst snapshot = new SnapshotV1(this.client.mergeTree, this.client.logger, (id) =>\n\t\t\tthis.client.getLongClientId(id),\n\t\t);\n\n\t\tsnapshot.extractSync();\n\t\treturn snapshot.emit(TestClient.serializer, undefined!).summary;\n\t}\n\n\tpublic getText() {\n\t\treturn this.client.getText();\n\t}\n\n\tpublic applyPendingOps() {\n\t\tfor (const msg of this.pending) {\n\t\t\tthis.client.applyMsg(msg);\n\t\t}\n\t\tthis.pending.splice(0, this.pending.length);\n\t}\n\n\tprivate queue(op: IMergeTreeOp, increaseMsn: boolean) {\n\t\tconst refSeq = this.seq;\n\t\tconst seq = ++this.seq;\n\n\t\tthis.pending.push(\n\t\t\tthis.client.makeOpMessage(\n\t\t\t\top,\n\t\t\t\tseq,\n\t\t\t\trefSeq,\n\t\t\t\tthis.client.longClientId,\n\t\t\t\t(this.minSeq = increaseMsn ? seq : this.minSeq),\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic getSegment(pos: number): ISegment {\n\t\tconst { segment } = this.client.getContainingSegment(pos);\n\t\tassert(segment !== undefined);\n\t\treturn segment;\n\t}\n}\n"]}
1
+ {"version":3,"file":"snapshot.utils.js","sourceRoot":"","sources":["../../src/test/snapshot.utils.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 { strict as assert } from \"assert\";\nimport { ISequencedDocumentMessage, ISummaryTree } from \"@fluidframework/protocol-definitions\";\nimport { IFluidDataStoreRuntime } from \"@fluidframework/datastore-definitions\";\nimport { MockStorage } from \"@fluidframework/test-runtime-utils\";\nimport { IMergeTreeOp, ReferenceType } from \"../ops.js\";\nimport { SnapshotV1 } from \"../snapshotV1.js\";\nimport { IMergeTreeOptions } from \"../mergeTree.js\";\nimport { PropertySet } from \"../properties.js\";\nimport { ISegment } from \"../mergeTreeNodes.js\";\nimport { createClientsAtInitialState } from \"./testClientLogger.js\";\nimport { TestSerializer } from \"./testSerializer.js\";\nimport { TestClient } from \"./testClient.js\";\n\n// Reconstitutes a MergeTree client from a summary\nexport async function loadSnapshot(summary: ISummaryTree, options?: IMergeTreeOptions) {\n\tconst services = MockStorage.createFromSummary(summary);\n\tconst client2 = new TestClient(options);\n\tconst runtime: Partial<IFluidDataStoreRuntime> = {\n\t\tlogger: client2.logger,\n\t\tclientId: \"1\",\n\t};\n\n\tconst { catchupOpsP } = await client2.load(\n\t\truntime as IFluidDataStoreRuntime,\n\t\tservices,\n\t\tnew TestSerializer(),\n\t);\n\tawait catchupOpsP;\n\treturn client2;\n}\n\n// Wrapper around MergeTree client that provides a convenient SharedString-like API for tests.\nexport class TestString {\n\tprivate client: TestClient;\n\tprivate readonly pending: ISequencedDocumentMessage[] = [];\n\tprivate seq = 0;\n\tprivate minSeq = 0;\n\n\tconstructor(\n\t\tid: string,\n\t\tprivate readonly options?: IMergeTreeOptions,\n\t\tinitialState: string = \"\",\n\t) {\n\t\tthis.client = createClientsAtInitialState({ initialState, options }, id)[id];\n\t\tthis.client.startOrUpdateCollaboration(id);\n\t}\n\n\tpublic insert(pos: number, text: string, increaseMsn: boolean) {\n\t\tthis.queue(\n\t\t\tthis.client.insertTextLocal(pos, text, { segment: this.pending.length })!,\n\t\t\tincreaseMsn,\n\t\t);\n\t}\n\n\tpublic annotate(start: number, end: number, props: PropertySet, increaseMsn: boolean) {\n\t\tthis.queue(this.client.annotateRangeLocal(start, end, props)!, increaseMsn);\n\t}\n\n\tpublic append(text: string, increaseMsn: boolean) {\n\t\tthis.insert(this.client.getLength(), text, increaseMsn);\n\t}\n\n\tpublic insertMarker(pos: number, increaseMsn: boolean) {\n\t\tthis.queue(\n\t\t\tthis.client.insertMarkerLocal(pos, ReferenceType.Simple, {\n\t\t\t\tsegment: this.pending.length,\n\t\t\t})!,\n\t\t\tincreaseMsn,\n\t\t);\n\t}\n\n\tpublic appendMarker(increaseMsn: boolean) {\n\t\tthis.insertMarker(this.client.getLength(), increaseMsn);\n\t}\n\n\tpublic removeRange(start: number, end: number, increaseMsn: boolean) {\n\t\tthis.queue(this.client.removeRangeLocal(start, end)!, increaseMsn);\n\t}\n\n\tpublic obliterateRange(start: number, end: number, increaseMsn: boolean) {\n\t\tthis.queue(this.client.obliterateRangeLocal(start, end)!, increaseMsn);\n\t}\n\n\t// Ensures the client's text matches the `expected` string and round-trips through a snapshot\n\t// into a new client. The current client is then replaced with the loaded client in the hope\n\t// that it will help detect corruption bugs as further ops are applied.\n\tpublic async expect(expected: string) {\n\t\tassert.equal(\n\t\t\tthis.client.getText(),\n\t\t\texpected,\n\t\t\t\"MergeTree must contain the expected text prior to applying ops.\",\n\t\t);\n\n\t\tawait this.checkSnapshot(this.options);\n\t}\n\n\t// Ensures the MergeTree client's contents successfully roundtrip through a snapshot.\n\tpublic async checkSnapshot(options?: IMergeTreeOptions) {\n\t\tthis.applyPendingOps();\n\t\tconst expectedAttributionKeys = this.client.getAllAttributionSeqs();\n\t\tconst summary = this.getSummary();\n\t\tconst client2 = await loadSnapshot(summary, options ?? this.options);\n\n\t\tassert.equal(\n\t\t\tthis.client.getText(),\n\t\t\tclient2.getText(),\n\t\t\t\"Snapshot must produce a MergeTree with the same text as the original\",\n\t\t);\n\n\t\t// Also check the length as weak test for non-TextSegments.\n\t\tassert.equal(\n\t\t\tthis.client.getLength(),\n\t\t\tclient2.getLength(),\n\t\t\t\"Snapshot must produce a MergeTree with the same length as the original\",\n\t\t);\n\n\t\tconst actualAttributionKeys = client2.getAllAttributionSeqs();\n\t\tassert.deepEqual(\n\t\t\tactualAttributionKeys,\n\t\t\texpectedAttributionKeys,\n\t\t\t\"Snapshot must produce a MergeTree with identical attribution as the original\",\n\t\t);\n\n\t\t// Replace our client with the one loaded by the snapshot.\n\t\tthis.client = client2;\n\t}\n\n\tpublic getSummary(): ISummaryTree {\n\t\tconst snapshot = new SnapshotV1(this.client.mergeTree, this.client.logger, (id) =>\n\t\t\tthis.client.getLongClientId(id),\n\t\t);\n\n\t\tsnapshot.extractSync();\n\t\treturn snapshot.emit(TestClient.serializer, undefined!).summary;\n\t}\n\n\tpublic getText() {\n\t\treturn this.client.getText();\n\t}\n\n\tpublic applyPendingOps() {\n\t\tfor (const msg of this.pending) {\n\t\t\tthis.client.applyMsg(msg);\n\t\t}\n\t\tthis.pending.splice(0, this.pending.length);\n\t}\n\n\tprivate queue(op: IMergeTreeOp, increaseMsn: boolean) {\n\t\tconst refSeq = this.seq;\n\t\tconst seq = ++this.seq;\n\n\t\tthis.pending.push(\n\t\t\tthis.client.makeOpMessage(\n\t\t\t\top,\n\t\t\t\tseq,\n\t\t\t\trefSeq,\n\t\t\t\tthis.client.longClientId,\n\t\t\t\t(this.minSeq = increaseMsn ? seq : this.minSeq),\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic getSegment(pos: number): ISegment {\n\t\tconst { segment } = this.client.getContainingSegment(pos);\n\t\tassert(segment !== undefined);\n\t\treturn segment;\n\t}\n}\n"]}
@@ -7,27 +7,27 @@
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  const assert_1 = require("assert");
9
9
  const test_runtime_utils_1 = require("@fluidframework/test-runtime-utils");
10
- const snapshotlegacy_1 = require("../snapshotlegacy");
11
- const attributionPolicy_1 = require("../attributionPolicy");
12
- const testSerializer_1 = require("./testSerializer");
13
- const testClientLogger_1 = require("./testClientLogger");
14
- const testClient_1 = require("./testClient");
10
+ const snapshotlegacy_js_1 = require("../snapshotlegacy.js");
11
+ const attributionPolicy_js_1 = require("../attributionPolicy.js");
12
+ const testSerializer_js_1 = require("./testSerializer.js");
13
+ const testClientLogger_js_1 = require("./testClientLogger.js");
14
+ const testClient_js_1 = require("./testClient.js");
15
15
  describe("snapshot", () => {
16
16
  it("header only", async () => {
17
- const client1 = new testClient_1.TestClient();
17
+ const client1 = new testClient_js_1.TestClient();
18
18
  client1.startOrUpdateCollaboration("0");
19
- for (let i = 0; i < snapshotlegacy_1.SnapshotLegacy.sizeOfFirstChunk; i++) {
19
+ for (let i = 0; i < snapshotlegacy_js_1.SnapshotLegacy.sizeOfFirstChunk; i++) {
20
20
  const op = client1.insertTextLocal(client1.getLength(), `${i % 10}`, { segment: i });
21
21
  const msg = client1.makeOpMessage(op, i + 1);
22
22
  msg.minimumSequenceNumber = i + 1;
23
23
  client1.applyMsg(msg);
24
24
  }
25
- const serializer = new testSerializer_1.TestSerializer();
26
- const snapshot = new snapshotlegacy_1.SnapshotLegacy(client1.mergeTree, client1.logger);
25
+ const serializer = new testSerializer_js_1.TestSerializer();
26
+ const snapshot = new snapshotlegacy_js_1.SnapshotLegacy(client1.mergeTree, client1.logger);
27
27
  snapshot.extractSync();
28
28
  const summaryTree = snapshot.emit([], serializer, undefined);
29
29
  const services = test_runtime_utils_1.MockStorage.createFromSummary(summaryTree.summary);
30
- const client2 = new testClient_1.TestClient(undefined);
30
+ const client2 = new testClient_js_1.TestClient(undefined);
31
31
  const runtime = {
32
32
  logger: client2.logger,
33
33
  clientId: "1",
@@ -37,9 +37,9 @@ describe("snapshot", () => {
37
37
  assert_1.strict.equal(client2.getText(), client1.getText());
38
38
  }).timeout(5000);
39
39
  it("header and body", async () => {
40
- const clients = [new testClient_1.TestClient(), new testClient_1.TestClient(), new testClient_1.TestClient()];
40
+ const clients = [new testClient_js_1.TestClient(), new testClient_js_1.TestClient(), new testClient_js_1.TestClient()];
41
41
  clients[0].startOrUpdateCollaboration("0");
42
- for (let i = 0; i < snapshotlegacy_1.SnapshotLegacy.sizeOfFirstChunk + 10; i++) {
42
+ for (let i = 0; i < snapshotlegacy_js_1.SnapshotLegacy.sizeOfFirstChunk + 10; i++) {
43
43
  const op = clients[0].insertTextLocal(clients[0].getLength(), `${i % 10}`, {
44
44
  segment: i,
45
45
  });
@@ -47,11 +47,11 @@ describe("snapshot", () => {
47
47
  msg.minimumSequenceNumber = i + 1;
48
48
  clients[0].applyMsg(msg);
49
49
  }
50
- const serializer = new testSerializer_1.TestSerializer();
50
+ const serializer = new testSerializer_js_1.TestSerializer();
51
51
  for (let i = 0; i < clients.length - 1; i++) {
52
52
  const client1 = clients[i];
53
53
  const client2 = clients[i + 1];
54
- const snapshot = new snapshotlegacy_1.SnapshotLegacy(client1.mergeTree, client1.logger);
54
+ const snapshot = new snapshotlegacy_js_1.SnapshotLegacy(client1.mergeTree, client1.logger);
55
55
  snapshot.extractSync();
56
56
  const summaryTree = snapshot.emit([], serializer, undefined);
57
57
  const services = test_runtime_utils_1.MockStorage.createFromSummary(summaryTree.summary);
@@ -62,7 +62,7 @@ describe("snapshot", () => {
62
62
  await client2.load(runtime, services, serializer);
63
63
  const client2Len = client2.getLength();
64
64
  assert_1.strict.equal(client2Len, client1.getLength(), `client${client2.longClientId} and client${client1.longClientId} lengths don't match`);
65
- assert_1.strict.equal(client2.getText(snapshotlegacy_1.SnapshotLegacy.sizeOfFirstChunk - 1), client1.getText(snapshotlegacy_1.SnapshotLegacy.sizeOfFirstChunk - 1));
65
+ assert_1.strict.equal(client2.getText(snapshotlegacy_js_1.SnapshotLegacy.sizeOfFirstChunk - 1), client1.getText(snapshotlegacy_js_1.SnapshotLegacy.sizeOfFirstChunk - 1));
66
66
  }
67
67
  }).timeout(5000);
68
68
  async function assertAttributionKeysMatch(client, expected) {
@@ -70,17 +70,17 @@ describe("snapshot", () => {
70
70
  for (const [channel, channelExpectation] of Object.entries(expected.channels ?? {})) {
71
71
  assert_1.strict.deepEqual(client.getAllAttributionSeqs(channel), channelExpectation, `Keys for channel ${channel} don't match before round-trip.`);
72
72
  }
73
- const serializer = new testSerializer_1.TestSerializer();
73
+ const serializer = new testSerializer_js_1.TestSerializer();
74
74
  // This avoids necessitating handling catchup ops.
75
75
  client.mergeTree.setMinSeq(client.mergeTree.collabWindow.currentSeq);
76
- const snapshot = new snapshotlegacy_1.SnapshotLegacy(client.mergeTree, client.logger);
76
+ const snapshot = new snapshotlegacy_js_1.SnapshotLegacy(client.mergeTree, client.logger);
77
77
  snapshot.extractSync();
78
78
  const summaryTree = snapshot.emit([], serializer, undefined);
79
79
  const services = test_runtime_utils_1.MockStorage.createFromSummary(summaryTree.summary);
80
- const roundTripClient = new testClient_1.TestClient({
80
+ const roundTripClient = new testClient_js_1.TestClient({
81
81
  attribution: {
82
82
  track: true,
83
- policyFactory: attributionPolicy_1.createInsertOnlyAttributionPolicy,
83
+ policyFactory: attributionPolicy_js_1.createInsertOnlyAttributionPolicy,
84
84
  },
85
85
  });
86
86
  const runtime = {
@@ -94,12 +94,12 @@ describe("snapshot", () => {
94
94
  }
95
95
  }
96
96
  it("preserves attribution information", async () => {
97
- const clients = (0, testClientLogger_1.createClientsAtInitialState)({
97
+ const clients = (0, testClientLogger_js_1.createClientsAtInitialState)({
98
98
  initialState: "",
99
99
  options: {
100
100
  attribution: {
101
101
  track: true,
102
- policyFactory: (0, attributionPolicy_1.createPropertyTrackingAndInsertionAttributionPolicyFactory)("foo"),
102
+ policyFactory: (0, attributionPolicy_js_1.createPropertyTrackingAndInsertionAttributionPolicyFactory)("foo"),
103
103
  },
104
104
  },
105
105
  }, "A", "B");
@@ -123,7 +123,7 @@ describe("snapshot", () => {
123
123
  });
124
124
  });
125
125
  it("doesn't include attribution information when attribution tracking is false on doc creation", async () => {
126
- const clients = (0, testClientLogger_1.createClientsAtInitialState)({
126
+ const clients = (0, testClientLogger_js_1.createClientsAtInitialState)({
127
127
  initialState: "",
128
128
  options: { attribution: { track: false } },
129
129
  }, "A");
@@ -1 +1 @@
1
- {"version":3,"file":"snapshotlegacy.spec.js","sourceRoot":"","sources":["../../src/test/snapshotlegacy.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { strict as assert } from \"assert\";\nimport { IFluidDataStoreRuntime } from \"@fluidframework/datastore-definitions\";\nimport { MockStorage } from \"@fluidframework/test-runtime-utils\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { SnapshotLegacy } from \"../snapshotlegacy\";\nimport {\n\tcreateInsertOnlyAttributionPolicy,\n\tcreatePropertyTrackingAndInsertionAttributionPolicyFactory,\n} from \"../attributionPolicy\";\nimport { TestSerializer } from \"./testSerializer\";\nimport { createClientsAtInitialState } from \"./testClientLogger\";\nimport { TestClient } from \"./testClient\";\n\ndescribe(\"snapshot\", () => {\n\tit(\"header only\", async () => {\n\t\tconst client1 = new TestClient();\n\t\tclient1.startOrUpdateCollaboration(\"0\");\n\t\tfor (let i = 0; i < SnapshotLegacy.sizeOfFirstChunk; i++) {\n\t\t\tconst op = client1.insertTextLocal(client1.getLength(), `${i % 10}`, { segment: i });\n\t\t\tconst msg = client1.makeOpMessage(op, i + 1);\n\t\t\tmsg.minimumSequenceNumber = i + 1;\n\t\t\tclient1.applyMsg(msg);\n\t\t}\n\n\t\tconst serializer = new TestSerializer();\n\n\t\tconst snapshot = new SnapshotLegacy(client1.mergeTree, client1.logger);\n\t\tsnapshot.extractSync();\n\t\tconst summaryTree = snapshot.emit([], serializer, undefined!);\n\t\tconst services = MockStorage.createFromSummary(summaryTree.summary);\n\n\t\tconst client2 = new TestClient(undefined);\n\t\tconst runtime: Partial<IFluidDataStoreRuntime> = {\n\t\t\tlogger: client2.logger,\n\t\t\tclientId: \"1\",\n\t\t};\n\t\tawait client2.load(runtime as IFluidDataStoreRuntime, services, serializer);\n\n\t\tassert.equal(client2.getLength(), client1.getLength());\n\t\tassert.equal(client2.getText(), client1.getText());\n\t}).timeout(5000);\n\n\tit(\"header and body\", async () => {\n\t\tconst clients = [new TestClient(), new TestClient(), new TestClient()];\n\t\tclients[0].startOrUpdateCollaboration(\"0\");\n\t\tfor (let i = 0; i < SnapshotLegacy.sizeOfFirstChunk + 10; i++) {\n\t\t\tconst op = clients[0].insertTextLocal(clients[0].getLength(), `${i % 10}`, {\n\t\t\t\tsegment: i,\n\t\t\t})!;\n\t\t\tconst msg = clients[0].makeOpMessage(op, i + 1);\n\t\t\tmsg.minimumSequenceNumber = i + 1;\n\t\t\tclients[0].applyMsg(msg);\n\t\t}\n\n\t\tconst serializer = new TestSerializer();\n\t\tfor (let i = 0; i < clients.length - 1; i++) {\n\t\t\tconst client1 = clients[i];\n\t\t\tconst client2 = clients[i + 1];\n\t\t\tconst snapshot = new SnapshotLegacy(client1.mergeTree, client1.logger);\n\t\t\tsnapshot.extractSync();\n\t\t\tconst summaryTree = snapshot.emit([], serializer, undefined!);\n\t\t\tconst services = MockStorage.createFromSummary(summaryTree.summary);\n\t\t\tconst runtime: Partial<IFluidDataStoreRuntime> = {\n\t\t\t\tlogger: client2.logger,\n\t\t\t\tclientId: (i + 1).toString(),\n\t\t\t};\n\t\t\tawait client2.load(runtime as IFluidDataStoreRuntime, services, serializer);\n\n\t\t\tconst client2Len = client2.getLength();\n\t\t\tassert.equal(\n\t\t\t\tclient2Len,\n\t\t\t\tclient1.getLength(),\n\t\t\t\t`client${client2.longClientId} and client${client1.longClientId} lengths don't match`,\n\t\t\t);\n\n\t\t\tassert.equal(\n\t\t\t\tclient2.getText(SnapshotLegacy.sizeOfFirstChunk - 1),\n\t\t\t\tclient1.getText(SnapshotLegacy.sizeOfFirstChunk - 1),\n\t\t\t);\n\t\t}\n\t}).timeout(5000);\n\n\tasync function assertAttributionKeysMatch(\n\t\tclient: TestClient,\n\t\texpected: {\n\t\t\troot: (number | undefined)[];\n\t\t\tchannels?: { [name: string]: (number | undefined)[] };\n\t\t},\n\t): Promise<void> {\n\t\tassert.deepEqual(\n\t\t\tclient.getAllAttributionSeqs(),\n\t\t\texpected.root,\n\t\t\t\"Keys don't match before round-tripping\",\n\t\t);\n\t\tfor (const [channel, channelExpectation] of Object.entries(expected.channels ?? {})) {\n\t\t\tassert.deepEqual(\n\t\t\t\tclient.getAllAttributionSeqs(channel),\n\t\t\t\tchannelExpectation,\n\t\t\t\t`Keys for channel ${channel} don't match before round-trip.`,\n\t\t\t);\n\t\t}\n\t\tconst serializer = new TestSerializer();\n\t\t// This avoids necessitating handling catchup ops.\n\t\tclient.mergeTree.setMinSeq(client.mergeTree.collabWindow.currentSeq);\n\t\tconst snapshot = new SnapshotLegacy(client.mergeTree, client.logger);\n\t\tsnapshot.extractSync();\n\t\tconst summaryTree = snapshot.emit([], serializer, undefined!);\n\t\tconst services = MockStorage.createFromSummary(summaryTree.summary);\n\n\t\tconst roundTripClient = new TestClient({\n\t\t\tattribution: {\n\t\t\t\ttrack: true,\n\t\t\t\tpolicyFactory: createInsertOnlyAttributionPolicy,\n\t\t\t},\n\t\t});\n\t\tconst runtime: Partial<IFluidDataStoreRuntime> = {\n\t\t\tlogger: roundTripClient.logger,\n\t\t\tclientId: \"round-trips summary\",\n\t\t};\n\t\tawait roundTripClient.load(runtime as IFluidDataStoreRuntime, services, serializer);\n\t\tassert.deepEqual(\n\t\t\troundTripClient.getAllAttributionSeqs(),\n\t\t\texpected.root,\n\t\t\t\"Keys don't match after round-tripping\",\n\t\t);\n\t\tfor (const [channel, channelExpectation] of Object.entries(expected.channels ?? {})) {\n\t\t\tassert.deepEqual(\n\t\t\t\troundTripClient.getAllAttributionSeqs(channel),\n\t\t\t\tchannelExpectation,\n\t\t\t\t`Keys for channel ${channel} don't match after round-trip.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tit(\"preserves attribution information\", async () => {\n\t\tconst clients = createClientsAtInitialState(\n\t\t\t{\n\t\t\t\tinitialState: \"\",\n\t\t\t\toptions: {\n\t\t\t\t\tattribution: {\n\t\t\t\t\t\ttrack: true,\n\t\t\t\t\t\tpolicyFactory:\n\t\t\t\t\t\t\tcreatePropertyTrackingAndInsertionAttributionPolicyFactory(\"foo\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"A\",\n\t\t\t\"B\",\n\t\t);\n\n\t\tconst ops: ISequencedDocumentMessage[] = [];\n\t\tconst applyAllOps = () =>\n\t\t\tops.splice(0).forEach((op) => clients.all.map((client) => client.applyMsg(op)));\n\n\t\tops.push(clients.A.makeOpMessage(clients.A.insertTextLocal(0, \"hello world\"), /* seq */ 1));\n\n\t\tapplyAllOps();\n\n\t\tops.push(\n\t\t\tclients.B.makeOpMessage(\n\t\t\t\tclients.B.insertTextLocal(6, \"new \"),\n\t\t\t\t/* seq */ 2,\n\t\t\t\t/* refSeq */ 1,\n\t\t\t),\n\t\t);\n\n\t\tops.push(\n\t\t\tclients.B.makeOpMessage(\n\t\t\t\tclients.B.annotateRangeLocal(0, 14, { foo: \"bar\" }),\n\t\t\t\t/* seq */ 3,\n\t\t\t\t/* refSeq */ 2,\n\t\t\t),\n\t\t);\n\n\t\tapplyAllOps();\n\n\t\tawait assertAttributionKeysMatch(clients.A, {\n\t\t\t// \"hello \" has key 1 (i.e. seq 1), \"new \" has key 2 (i.e. seq 2), \"world\" has key 1.\n\t\t\troot: [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1],\n\t\t\tchannels: {\n\t\t\t\tfoo: Array.from({ length: \"hello new world\".length }, (_, i) =>\n\t\t\t\t\ti < 14 ? 3 : undefined,\n\t\t\t\t),\n\t\t\t},\n\t\t});\n\t});\n\n\tit(\"doesn't include attribution information when attribution tracking is false on doc creation\", async () => {\n\t\tconst clients = createClientsAtInitialState(\n\t\t\t{\n\t\t\t\tinitialState: \"\",\n\t\t\t\toptions: { attribution: { track: false } },\n\t\t\t},\n\t\t\t\"A\",\n\t\t);\n\n\t\tconst ops: ISequencedDocumentMessage[] = [];\n\t\tconst applyAllOps = () =>\n\t\t\tops.splice(0).forEach((op) => clients.all.map((client) => client.applyMsg(op)));\n\n\t\tops.push(clients.A.makeOpMessage(clients.A.insertTextLocal(0, \"hello world\"), /* seq */ 1));\n\n\t\tapplyAllOps();\n\n\t\tawait assertAttributionKeysMatch(clients.A, {\n\t\t\troot: Array.from({ length: \"hello world\".length }, () => undefined),\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"snapshotlegacy.spec.js","sourceRoot":"","sources":["../../src/test/snapshotlegacy.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { strict as assert } from \"assert\";\nimport { IFluidDataStoreRuntime } from \"@fluidframework/datastore-definitions\";\nimport { MockStorage } from \"@fluidframework/test-runtime-utils\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { SnapshotLegacy } from \"../snapshotlegacy.js\";\nimport {\n\tcreateInsertOnlyAttributionPolicy,\n\tcreatePropertyTrackingAndInsertionAttributionPolicyFactory,\n} from \"../attributionPolicy.js\";\nimport { TestSerializer } from \"./testSerializer.js\";\nimport { createClientsAtInitialState } from \"./testClientLogger.js\";\nimport { TestClient } from \"./testClient.js\";\n\ndescribe(\"snapshot\", () => {\n\tit(\"header only\", async () => {\n\t\tconst client1 = new TestClient();\n\t\tclient1.startOrUpdateCollaboration(\"0\");\n\t\tfor (let i = 0; i < SnapshotLegacy.sizeOfFirstChunk; i++) {\n\t\t\tconst op = client1.insertTextLocal(client1.getLength(), `${i % 10}`, { segment: i });\n\t\t\tconst msg = client1.makeOpMessage(op, i + 1);\n\t\t\tmsg.minimumSequenceNumber = i + 1;\n\t\t\tclient1.applyMsg(msg);\n\t\t}\n\n\t\tconst serializer = new TestSerializer();\n\n\t\tconst snapshot = new SnapshotLegacy(client1.mergeTree, client1.logger);\n\t\tsnapshot.extractSync();\n\t\tconst summaryTree = snapshot.emit([], serializer, undefined!);\n\t\tconst services = MockStorage.createFromSummary(summaryTree.summary);\n\n\t\tconst client2 = new TestClient(undefined);\n\t\tconst runtime: Partial<IFluidDataStoreRuntime> = {\n\t\t\tlogger: client2.logger,\n\t\t\tclientId: \"1\",\n\t\t};\n\t\tawait client2.load(runtime as IFluidDataStoreRuntime, services, serializer);\n\n\t\tassert.equal(client2.getLength(), client1.getLength());\n\t\tassert.equal(client2.getText(), client1.getText());\n\t}).timeout(5000);\n\n\tit(\"header and body\", async () => {\n\t\tconst clients = [new TestClient(), new TestClient(), new TestClient()];\n\t\tclients[0].startOrUpdateCollaboration(\"0\");\n\t\tfor (let i = 0; i < SnapshotLegacy.sizeOfFirstChunk + 10; i++) {\n\t\t\tconst op = clients[0].insertTextLocal(clients[0].getLength(), `${i % 10}`, {\n\t\t\t\tsegment: i,\n\t\t\t})!;\n\t\t\tconst msg = clients[0].makeOpMessage(op, i + 1);\n\t\t\tmsg.minimumSequenceNumber = i + 1;\n\t\t\tclients[0].applyMsg(msg);\n\t\t}\n\n\t\tconst serializer = new TestSerializer();\n\t\tfor (let i = 0; i < clients.length - 1; i++) {\n\t\t\tconst client1 = clients[i];\n\t\t\tconst client2 = clients[i + 1];\n\t\t\tconst snapshot = new SnapshotLegacy(client1.mergeTree, client1.logger);\n\t\t\tsnapshot.extractSync();\n\t\t\tconst summaryTree = snapshot.emit([], serializer, undefined!);\n\t\t\tconst services = MockStorage.createFromSummary(summaryTree.summary);\n\t\t\tconst runtime: Partial<IFluidDataStoreRuntime> = {\n\t\t\t\tlogger: client2.logger,\n\t\t\t\tclientId: (i + 1).toString(),\n\t\t\t};\n\t\t\tawait client2.load(runtime as IFluidDataStoreRuntime, services, serializer);\n\n\t\t\tconst client2Len = client2.getLength();\n\t\t\tassert.equal(\n\t\t\t\tclient2Len,\n\t\t\t\tclient1.getLength(),\n\t\t\t\t`client${client2.longClientId} and client${client1.longClientId} lengths don't match`,\n\t\t\t);\n\n\t\t\tassert.equal(\n\t\t\t\tclient2.getText(SnapshotLegacy.sizeOfFirstChunk - 1),\n\t\t\t\tclient1.getText(SnapshotLegacy.sizeOfFirstChunk - 1),\n\t\t\t);\n\t\t}\n\t}).timeout(5000);\n\n\tasync function assertAttributionKeysMatch(\n\t\tclient: TestClient,\n\t\texpected: {\n\t\t\troot: (number | undefined)[];\n\t\t\tchannels?: { [name: string]: (number | undefined)[] };\n\t\t},\n\t): Promise<void> {\n\t\tassert.deepEqual(\n\t\t\tclient.getAllAttributionSeqs(),\n\t\t\texpected.root,\n\t\t\t\"Keys don't match before round-tripping\",\n\t\t);\n\t\tfor (const [channel, channelExpectation] of Object.entries(expected.channels ?? {})) {\n\t\t\tassert.deepEqual(\n\t\t\t\tclient.getAllAttributionSeqs(channel),\n\t\t\t\tchannelExpectation,\n\t\t\t\t`Keys for channel ${channel} don't match before round-trip.`,\n\t\t\t);\n\t\t}\n\t\tconst serializer = new TestSerializer();\n\t\t// This avoids necessitating handling catchup ops.\n\t\tclient.mergeTree.setMinSeq(client.mergeTree.collabWindow.currentSeq);\n\t\tconst snapshot = new SnapshotLegacy(client.mergeTree, client.logger);\n\t\tsnapshot.extractSync();\n\t\tconst summaryTree = snapshot.emit([], serializer, undefined!);\n\t\tconst services = MockStorage.createFromSummary(summaryTree.summary);\n\n\t\tconst roundTripClient = new TestClient({\n\t\t\tattribution: {\n\t\t\t\ttrack: true,\n\t\t\t\tpolicyFactory: createInsertOnlyAttributionPolicy,\n\t\t\t},\n\t\t});\n\t\tconst runtime: Partial<IFluidDataStoreRuntime> = {\n\t\t\tlogger: roundTripClient.logger,\n\t\t\tclientId: \"round-trips summary\",\n\t\t};\n\t\tawait roundTripClient.load(runtime as IFluidDataStoreRuntime, services, serializer);\n\t\tassert.deepEqual(\n\t\t\troundTripClient.getAllAttributionSeqs(),\n\t\t\texpected.root,\n\t\t\t\"Keys don't match after round-tripping\",\n\t\t);\n\t\tfor (const [channel, channelExpectation] of Object.entries(expected.channels ?? {})) {\n\t\t\tassert.deepEqual(\n\t\t\t\troundTripClient.getAllAttributionSeqs(channel),\n\t\t\t\tchannelExpectation,\n\t\t\t\t`Keys for channel ${channel} don't match after round-trip.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tit(\"preserves attribution information\", async () => {\n\t\tconst clients = createClientsAtInitialState(\n\t\t\t{\n\t\t\t\tinitialState: \"\",\n\t\t\t\toptions: {\n\t\t\t\t\tattribution: {\n\t\t\t\t\t\ttrack: true,\n\t\t\t\t\t\tpolicyFactory:\n\t\t\t\t\t\t\tcreatePropertyTrackingAndInsertionAttributionPolicyFactory(\"foo\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"A\",\n\t\t\t\"B\",\n\t\t);\n\n\t\tconst ops: ISequencedDocumentMessage[] = [];\n\t\tconst applyAllOps = () =>\n\t\t\tops.splice(0).forEach((op) => clients.all.map((client) => client.applyMsg(op)));\n\n\t\tops.push(clients.A.makeOpMessage(clients.A.insertTextLocal(0, \"hello world\"), /* seq */ 1));\n\n\t\tapplyAllOps();\n\n\t\tops.push(\n\t\t\tclients.B.makeOpMessage(\n\t\t\t\tclients.B.insertTextLocal(6, \"new \"),\n\t\t\t\t/* seq */ 2,\n\t\t\t\t/* refSeq */ 1,\n\t\t\t),\n\t\t);\n\n\t\tops.push(\n\t\t\tclients.B.makeOpMessage(\n\t\t\t\tclients.B.annotateRangeLocal(0, 14, { foo: \"bar\" }),\n\t\t\t\t/* seq */ 3,\n\t\t\t\t/* refSeq */ 2,\n\t\t\t),\n\t\t);\n\n\t\tapplyAllOps();\n\n\t\tawait assertAttributionKeysMatch(clients.A, {\n\t\t\t// \"hello \" has key 1 (i.e. seq 1), \"new \" has key 2 (i.e. seq 2), \"world\" has key 1.\n\t\t\troot: [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1],\n\t\t\tchannels: {\n\t\t\t\tfoo: Array.from({ length: \"hello new world\".length }, (_, i) =>\n\t\t\t\t\ti < 14 ? 3 : undefined,\n\t\t\t\t),\n\t\t\t},\n\t\t});\n\t});\n\n\tit(\"doesn't include attribution information when attribution tracking is false on doc creation\", async () => {\n\t\tconst clients = createClientsAtInitialState(\n\t\t\t{\n\t\t\t\tinitialState: \"\",\n\t\t\t\toptions: { attribution: { track: false } },\n\t\t\t},\n\t\t\t\"A\",\n\t\t);\n\n\t\tconst ops: ISequencedDocumentMessage[] = [];\n\t\tconst applyAllOps = () =>\n\t\t\tops.splice(0).forEach((op) => clients.all.map((client) => client.applyMsg(op)));\n\n\t\tops.push(clients.A.makeOpMessage(clients.A.insertTextLocal(0, \"hello world\"), /* seq */ 1));\n\n\t\tapplyAllOps();\n\n\t\tawait assertAttributionKeysMatch(clients.A, {\n\t\t\troot: Array.from({ length: \"hello world\".length }, () => undefined),\n\t\t});\n\t});\n});\n"]}
@@ -5,10 +5,10 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const assert_1 = require("assert");
8
- const sortedSegmentSet_1 = require("../sortedSegmentSet");
9
- const ops_1 = require("../ops");
10
- const mergeTreeTracking_1 = require("../mergeTreeTracking");
11
- const testClient_1 = require("./testClient");
8
+ const sortedSegmentSet_js_1 = require("../sortedSegmentSet.js");
9
+ const ops_js_1 = require("../ops.js");
10
+ const mergeTreeTracking_js_1 = require("../mergeTreeTracking.js");
11
+ const testClient_js_1 = require("./testClient.js");
12
12
  const segmentCount = 15;
13
13
  function validateSorted(set, getOrdinal, prefix) {
14
14
  for (let i = 0; i < set.size - 1; i++) {
@@ -38,14 +38,14 @@ describe("SortedSegmentSet", () => {
38
38
  const localUserLongId = "localUser";
39
39
  let client;
40
40
  beforeEach(() => {
41
- client = new testClient_1.TestClient();
41
+ client = new testClient_js_1.TestClient();
42
42
  for (let i = 0; i < segmentCount; i++) {
43
43
  client.insertTextLocal(client.getLength(), i.toString()[0].repeat(i + 1));
44
44
  }
45
45
  client.startOrUpdateCollaboration(localUserLongId);
46
46
  });
47
47
  it("SortedSegmentSet of objects with segments", () => {
48
- const set = new sortedSegmentSet_1.SortedSegmentSet();
48
+ const set = new sortedSegmentSet_js_1.SortedSegmentSet();
49
49
  for (let i = 0; i < client.getLength(); i++) {
50
50
  for (const pos of [i, client.getLength() - 1 - i]) {
51
51
  const segment = client.getContainingSegment(pos).segment;
@@ -60,7 +60,7 @@ describe("SortedSegmentSet", () => {
60
60
  validateSet(client, set, (i) => i.segment.ordinal);
61
61
  });
62
62
  it("SortedSegmentSet of segments", () => {
63
- const set = new sortedSegmentSet_1.SortedSegmentSet();
63
+ const set = new sortedSegmentSet_js_1.SortedSegmentSet();
64
64
  for (let i = 0; i < client.getLength(); i++) {
65
65
  for (const pos of [i, client.getLength() - 1 - i]) {
66
66
  const segment = client.getContainingSegment(pos).segment;
@@ -77,12 +77,12 @@ describe("SortedSegmentSet", () => {
77
77
  // as we don't correctly split, or merge, so leverage
78
78
  // the tracking group for correct behavior in those case
79
79
  // and spy it's internal set
80
- const set = new mergeTreeTracking_1.TrackingGroup();
80
+ const set = new mergeTreeTracking_js_1.TrackingGroup();
81
81
  for (let i = 0; i < client.getLength(); i++) {
82
82
  for (const pos of [i, client.getLength() - 1 - i]) {
83
83
  const segmentInfo = client.getContainingSegment(pos);
84
84
  (0, assert_1.strict)(segmentInfo?.segment);
85
- const lref = client.createLocalReferencePosition(segmentInfo.segment, segmentInfo.offset, ops_1.ReferenceType.SlideOnRemove, undefined);
85
+ const lref = client.createLocalReferencePosition(segmentInfo.segment, segmentInfo.offset, ops_js_1.ReferenceType.SlideOnRemove, undefined);
86
86
  assert_1.strict.equal(set.has(lref), false);
87
87
  set.link(lref);
88
88
  assert_1.strict.equal(set.has(lref), true);
@@ -1 +1 @@
1
- {"version":3,"file":"sortedSegmentSet.spec.js","sourceRoot":"","sources":["../../src/test/sortedSegmentSet.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { SortedSegmentSet, SortedSegmentSetItem } from \"../sortedSegmentSet\";\nimport { ISegment } from \"../mergeTreeNodes\";\nimport { LocalReferencePosition } from \"../localReference\";\nimport { ReferenceType } from \"../ops\";\nimport { TrackingGroup } from \"../mergeTreeTracking\";\nimport { TestClient } from \"./testClient\";\nconst segmentCount = 15;\n\nfunction validateSorted<T extends SortedSegmentSetItem>(\n\tset: SortedSegmentSet<T>,\n\tgetOrdinal: (item: T) => string | undefined,\n\tprefix: string,\n) {\n\tfor (let i = 0; i < set.size - 1; i++) {\n\t\tconst a = getOrdinal(set.items[i]);\n\t\tconst b = getOrdinal(set.items[i + 1]);\n\t\tassert(a !== undefined, `${prefix}: Undefined ordinal ${i}`);\n\t\tassert(b !== undefined, `${prefix}: Undefined ordinal ${i + 1}`);\n\t\tassert(a <= b, `${prefix}: Not sorted at item ${i}`);\n\t}\n}\n\nfunction validateSet<T extends SortedSegmentSetItem>(\n\tclient: TestClient,\n\tset: SortedSegmentSet<T>,\n\tgetOrdinal: (item: T) => string | undefined,\n) {\n\tvalidateSorted(set, getOrdinal, \"initial\");\n\n\t// add content to shift ordinals in tree\n\tfor (let i = 0; i < segmentCount * 5; i++) {\n\t\tclient.insertTextLocal((i * 3) % client.getLength(), `X`);\n\t}\n\tvalidateSorted(set, getOrdinal, \"after insert\");\n\n\tfor (let i = set.size; set.size > 0; i += set.size) {\n\t\t// jump around the list a bit, so its not just an in-order remove\n\t\tconst item = set.items[i % set.size];\n\t\tassert.equal(set.remove(item), true, \"remove failed\");\n\t\tassert.equal(set.has(item), false);\n\t\tvalidateSorted(set, getOrdinal, \"during remove\");\n\t}\n}\n\ndescribe(\"SortedSegmentSet\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tfor (let i = 0; i < segmentCount; i++) {\n\t\t\tclient.insertTextLocal(client.getLength(), i.toString()[0].repeat(i + 1));\n\t\t}\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tit(\"SortedSegmentSet of objects with segments\", () => {\n\t\tconst set = new SortedSegmentSet<{ segment: ISegment }>();\n\t\tfor (let i = 0; i < client.getLength(); i++) {\n\t\t\tfor (const pos of [i, client.getLength() - 1 - i]) {\n\t\t\t\tconst segment = client.getContainingSegment(pos).segment;\n\t\t\t\tassert(segment);\n\t\t\t\tconst item = { segment };\n\t\t\t\tassert.equal(set.has(item), false);\n\t\t\t\tset.addOrUpdate(item);\n\t\t\t\tassert.equal(set.has(item), true);\n\t\t\t}\n\t\t}\n\t\tassert.equal(set.size, client.getLength() * 2);\n\t\tvalidateSet(client, set, (i) => i.segment.ordinal);\n\t});\n\n\tit(\"SortedSegmentSet of segments\", () => {\n\t\tconst set = new SortedSegmentSet();\n\t\tfor (let i = 0; i < client.getLength(); i++) {\n\t\t\tfor (const pos of [i, client.getLength() - 1 - i]) {\n\t\t\t\tconst segment = client.getContainingSegment(pos).segment;\n\t\t\t\tassert(segment);\n\t\t\t\tset.addOrUpdate(segment);\n\t\t\t\tassert.equal(set.has(segment), true);\n\t\t\t}\n\t\t}\n\t\tassert.equal(set.size, segmentCount);\n\t\tvalidateSet(client, set, (i) => i.ordinal);\n\t});\n\n\tit(\"SortedSegmentSet of local references\", () => {\n\t\t// using a sorted segment set directly creates problems,\n\t\t// as we don't correctly split, or merge, so leverage\n\t\t// the tracking group for correct behavior in those case\n\t\t// and spy it's internal set\n\t\tconst set = new TrackingGroup();\n\t\tfor (let i = 0; i < client.getLength(); i++) {\n\t\t\tfor (const pos of [i, client.getLength() - 1 - i]) {\n\t\t\t\tconst segmentInfo = client.getContainingSegment(pos);\n\t\t\t\tassert(segmentInfo?.segment);\n\t\t\t\tconst lref = client.createLocalReferencePosition(\n\t\t\t\t\tsegmentInfo.segment,\n\t\t\t\t\tsegmentInfo.offset,\n\t\t\t\t\tReferenceType.SlideOnRemove,\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t\tassert.equal(set.has(lref), false);\n\t\t\t\tset.link(lref);\n\t\t\t\tassert.equal(set.has(lref), true);\n\t\t\t}\n\t\t}\n\t\tassert.equal(set.size, client.getLength() * 2);\n\t\tvalidateSet<LocalReferencePosition>(\n\t\t\tclient,\n\t\t\t(set as any).trackedSet,\n\t\t\t(i) => i.getSegment()?.ordinal,\n\t\t);\n\t});\n});\n"]}
1
+ {"version":3,"file":"sortedSegmentSet.spec.js","sourceRoot":"","sources":["../../src/test/sortedSegmentSet.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { SortedSegmentSet, SortedSegmentSetItem } from \"../sortedSegmentSet.js\";\nimport { ISegment } from \"../mergeTreeNodes.js\";\nimport { LocalReferencePosition } from \"../localReference.js\";\nimport { ReferenceType } from \"../ops.js\";\nimport { TrackingGroup } from \"../mergeTreeTracking.js\";\nimport { TestClient } from \"./testClient.js\";\nconst segmentCount = 15;\n\nfunction validateSorted<T extends SortedSegmentSetItem>(\n\tset: SortedSegmentSet<T>,\n\tgetOrdinal: (item: T) => string | undefined,\n\tprefix: string,\n) {\n\tfor (let i = 0; i < set.size - 1; i++) {\n\t\tconst a = getOrdinal(set.items[i]);\n\t\tconst b = getOrdinal(set.items[i + 1]);\n\t\tassert(a !== undefined, `${prefix}: Undefined ordinal ${i}`);\n\t\tassert(b !== undefined, `${prefix}: Undefined ordinal ${i + 1}`);\n\t\tassert(a <= b, `${prefix}: Not sorted at item ${i}`);\n\t}\n}\n\nfunction validateSet<T extends SortedSegmentSetItem>(\n\tclient: TestClient,\n\tset: SortedSegmentSet<T>,\n\tgetOrdinal: (item: T) => string | undefined,\n) {\n\tvalidateSorted(set, getOrdinal, \"initial\");\n\n\t// add content to shift ordinals in tree\n\tfor (let i = 0; i < segmentCount * 5; i++) {\n\t\tclient.insertTextLocal((i * 3) % client.getLength(), `X`);\n\t}\n\tvalidateSorted(set, getOrdinal, \"after insert\");\n\n\tfor (let i = set.size; set.size > 0; i += set.size) {\n\t\t// jump around the list a bit, so its not just an in-order remove\n\t\tconst item = set.items[i % set.size];\n\t\tassert.equal(set.remove(item), true, \"remove failed\");\n\t\tassert.equal(set.has(item), false);\n\t\tvalidateSorted(set, getOrdinal, \"during remove\");\n\t}\n}\n\ndescribe(\"SortedSegmentSet\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tfor (let i = 0; i < segmentCount; i++) {\n\t\t\tclient.insertTextLocal(client.getLength(), i.toString()[0].repeat(i + 1));\n\t\t}\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tit(\"SortedSegmentSet of objects with segments\", () => {\n\t\tconst set = new SortedSegmentSet<{ segment: ISegment }>();\n\t\tfor (let i = 0; i < client.getLength(); i++) {\n\t\t\tfor (const pos of [i, client.getLength() - 1 - i]) {\n\t\t\t\tconst segment = client.getContainingSegment(pos).segment;\n\t\t\t\tassert(segment);\n\t\t\t\tconst item = { segment };\n\t\t\t\tassert.equal(set.has(item), false);\n\t\t\t\tset.addOrUpdate(item);\n\t\t\t\tassert.equal(set.has(item), true);\n\t\t\t}\n\t\t}\n\t\tassert.equal(set.size, client.getLength() * 2);\n\t\tvalidateSet(client, set, (i) => i.segment.ordinal);\n\t});\n\n\tit(\"SortedSegmentSet of segments\", () => {\n\t\tconst set = new SortedSegmentSet();\n\t\tfor (let i = 0; i < client.getLength(); i++) {\n\t\t\tfor (const pos of [i, client.getLength() - 1 - i]) {\n\t\t\t\tconst segment = client.getContainingSegment(pos).segment;\n\t\t\t\tassert(segment);\n\t\t\t\tset.addOrUpdate(segment);\n\t\t\t\tassert.equal(set.has(segment), true);\n\t\t\t}\n\t\t}\n\t\tassert.equal(set.size, segmentCount);\n\t\tvalidateSet(client, set, (i) => i.ordinal);\n\t});\n\n\tit(\"SortedSegmentSet of local references\", () => {\n\t\t// using a sorted segment set directly creates problems,\n\t\t// as we don't correctly split, or merge, so leverage\n\t\t// the tracking group for correct behavior in those case\n\t\t// and spy it's internal set\n\t\tconst set = new TrackingGroup();\n\t\tfor (let i = 0; i < client.getLength(); i++) {\n\t\t\tfor (const pos of [i, client.getLength() - 1 - i]) {\n\t\t\t\tconst segmentInfo = client.getContainingSegment(pos);\n\t\t\t\tassert(segmentInfo?.segment);\n\t\t\t\tconst lref = client.createLocalReferencePosition(\n\t\t\t\t\tsegmentInfo.segment,\n\t\t\t\t\tsegmentInfo.offset,\n\t\t\t\t\tReferenceType.SlideOnRemove,\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t\tassert.equal(set.has(lref), false);\n\t\t\t\tset.link(lref);\n\t\t\t\tassert.equal(set.has(lref), true);\n\t\t\t}\n\t\t}\n\t\tassert.equal(set.size, client.getLength() * 2);\n\t\tvalidateSet<LocalReferencePosition>(\n\t\t\tclient,\n\t\t\t(set as any).trackedSet,\n\t\t\t(i) => i.getSegment()?.ordinal,\n\t\t);\n\t});\n});\n"]}