@fluidframework/merge-tree 2.0.0-rc.1.0.3 → 2.0.0-rc.2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (770) hide show
  1. package/{.eslintrc.js → .eslintrc.cjs} +4 -1
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +4 -0
  4. package/api-extractor-cjs.json +8 -0
  5. package/api-extractor-lint.json +1 -1
  6. package/api-extractor.json +1 -9
  7. package/api-report/merge-tree.api.md +6 -12
  8. package/dist/MergeTreeTextHelper.d.ts +2 -2
  9. package/dist/MergeTreeTextHelper.d.ts.map +1 -1
  10. package/dist/MergeTreeTextHelper.js +3 -3
  11. package/dist/MergeTreeTextHelper.js.map +1 -1
  12. package/dist/attributionCollection.d.ts +1 -1
  13. package/dist/attributionCollection.d.ts.map +1 -1
  14. package/dist/attributionCollection.js.map +1 -1
  15. package/dist/attributionPolicy.d.ts +1 -1
  16. package/dist/attributionPolicy.d.ts.map +1 -1
  17. package/dist/attributionPolicy.js +15 -15
  18. package/dist/attributionPolicy.js.map +1 -1
  19. package/dist/client.d.ts +31 -12
  20. package/dist/client.d.ts.map +1 -1
  21. package/dist/client.js +103 -92
  22. package/dist/client.js.map +1 -1
  23. package/dist/collections/index.d.ts +2 -2
  24. package/dist/collections/index.d.ts.map +1 -1
  25. package/dist/collections/index.js +6 -6
  26. package/dist/collections/index.js.map +1 -1
  27. package/dist/endOfTreeSegment.d.ts +3 -3
  28. package/dist/endOfTreeSegment.d.ts.map +1 -1
  29. package/dist/endOfTreeSegment.js +8 -8
  30. package/dist/endOfTreeSegment.js.map +1 -1
  31. package/dist/index.d.ts +20 -20
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +71 -71
  34. package/dist/index.js.map +1 -1
  35. package/dist/localReference.d.ts +9 -39
  36. package/dist/localReference.d.ts.map +1 -1
  37. package/dist/localReference.js +29 -24
  38. package/dist/localReference.js.map +1 -1
  39. package/dist/merge-tree-alpha.d.ts +28 -450
  40. package/dist/merge-tree-beta.d.ts +0 -438
  41. package/dist/merge-tree-public.d.ts +0 -438
  42. package/dist/merge-tree-untrimmed.d.ts +28 -787
  43. package/dist/mergeTree.d.ts +11 -19
  44. package/dist/mergeTree.d.ts.map +1 -1
  45. package/dist/mergeTree.js +201 -189
  46. package/dist/mergeTree.js.map +1 -1
  47. package/dist/mergeTreeDeltaCallback.d.ts +3 -7
  48. package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
  49. package/dist/mergeTreeDeltaCallback.js.map +1 -1
  50. package/dist/mergeTreeNodeWalk.d.ts +1 -1
  51. package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
  52. package/dist/mergeTreeNodeWalk.js.map +1 -1
  53. package/dist/mergeTreeNodes.d.ts +17 -14
  54. package/dist/mergeTreeNodes.d.ts.map +1 -1
  55. package/dist/mergeTreeNodes.js +32 -32
  56. package/dist/mergeTreeNodes.js.map +1 -1
  57. package/dist/mergeTreeTracking.d.ts +2 -2
  58. package/dist/mergeTreeTracking.d.ts.map +1 -1
  59. package/dist/mergeTreeTracking.js +2 -2
  60. package/dist/mergeTreeTracking.js.map +1 -1
  61. package/dist/opBuilder.d.ts +3 -3
  62. package/dist/opBuilder.d.ts.map +1 -1
  63. package/dist/opBuilder.js +7 -7
  64. package/dist/opBuilder.js.map +1 -1
  65. package/dist/package.json +3 -0
  66. package/dist/partialLengths.d.ts +5 -5
  67. package/dist/partialLengths.d.ts.map +1 -1
  68. package/dist/partialLengths.js +29 -29
  69. package/dist/partialLengths.js.map +1 -1
  70. package/dist/referencePositions.d.ts +4 -4
  71. package/dist/referencePositions.d.ts.map +1 -1
  72. package/dist/referencePositions.js +2 -2
  73. package/dist/referencePositions.js.map +1 -1
  74. package/dist/revertibles.d.ts +7 -7
  75. package/dist/revertibles.d.ts.map +1 -1
  76. package/dist/revertibles.js +39 -39
  77. package/dist/revertibles.js.map +1 -1
  78. package/dist/segmentGroupCollection.d.ts +1 -1
  79. package/dist/segmentGroupCollection.d.ts.map +1 -1
  80. package/dist/segmentGroupCollection.js +3 -3
  81. package/dist/segmentGroupCollection.js.map +1 -1
  82. package/dist/segmentPropertiesManager.d.ts +2 -2
  83. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  84. package/dist/segmentPropertiesManager.js +8 -8
  85. package/dist/segmentPropertiesManager.js.map +1 -1
  86. package/dist/snapshotChunks.d.ts +3 -3
  87. package/dist/snapshotChunks.d.ts.map +1 -1
  88. package/dist/snapshotChunks.js +5 -5
  89. package/dist/snapshotChunks.js.map +1 -1
  90. package/dist/snapshotLoader.d.ts +3 -3
  91. package/dist/snapshotLoader.d.ts.map +1 -1
  92. package/dist/snapshotLoader.js +19 -19
  93. package/dist/snapshotLoader.js.map +1 -1
  94. package/dist/snapshotV1.d.ts +3 -3
  95. package/dist/snapshotV1.d.ts.map +1 -1
  96. package/dist/snapshotV1.js +35 -18
  97. package/dist/snapshotV1.js.map +1 -1
  98. package/dist/snapshotlegacy.d.ts +2 -2
  99. package/dist/snapshotlegacy.d.ts.map +1 -1
  100. package/dist/snapshotlegacy.js +22 -10
  101. package/dist/snapshotlegacy.js.map +1 -1
  102. package/dist/sortedSegmentSet.d.ts +3 -3
  103. package/dist/sortedSegmentSet.d.ts.map +1 -1
  104. package/dist/sortedSegmentSet.js +7 -5
  105. package/dist/sortedSegmentSet.js.map +1 -1
  106. package/dist/test/Insertion.perf.spec.js +15 -15
  107. package/dist/test/Insertion.perf.spec.js.map +1 -1
  108. package/dist/test/PartialLengths.perf.spec.js +13 -13
  109. package/dist/test/PartialLengths.perf.spec.js.map +1 -1
  110. package/dist/test/Removal.perf.spec.js +25 -25
  111. package/dist/test/Removal.perf.spec.js.map +1 -1
  112. package/dist/test/Snapshot.perf.spec.js +3 -3
  113. package/dist/test/Snapshot.perf.spec.js.map +1 -1
  114. package/dist/test/attributionCollection.perf.spec.js +9 -9
  115. package/dist/test/attributionCollection.perf.spec.js.map +1 -1
  116. package/dist/test/attributionCollection.spec.js +46 -46
  117. package/dist/test/attributionCollection.spec.js.map +1 -1
  118. package/dist/test/attributionPolicy.spec.js +13 -13
  119. package/dist/test/attributionPolicy.spec.js.map +1 -1
  120. package/dist/test/{beastTest.d.ts → beastTest.spec.d.ts} +3 -3
  121. package/dist/test/beastTest.spec.d.ts.map +1 -0
  122. package/dist/test/{beastTest.js → beastTest.spec.js} +120 -119
  123. package/dist/test/beastTest.spec.js.map +1 -0
  124. package/dist/test/client.annotateMarker.spec.js +13 -13
  125. package/dist/test/client.annotateMarker.spec.js.map +1 -1
  126. package/dist/test/{client.apis.d.ts → client.apis.spec.d.ts} +1 -1
  127. package/dist/test/client.apis.spec.d.ts.map +1 -0
  128. package/dist/test/{client.apis.js → client.apis.spec.js} +8 -8
  129. package/dist/test/client.apis.spec.js.map +1 -0
  130. package/dist/test/client.applyMsg.spec.js +106 -43
  131. package/dist/test/client.applyMsg.spec.js.map +1 -1
  132. package/dist/test/client.applyStashedOpFarm.spec.d.ts +1 -1
  133. package/dist/test/client.applyStashedOpFarm.spec.d.ts.map +1 -1
  134. package/dist/test/client.applyStashedOpFarm.spec.js +33 -21
  135. package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
  136. package/dist/test/client.attributionFarm.spec.d.ts +1 -1
  137. package/dist/test/client.attributionFarm.spec.d.ts.map +1 -1
  138. package/dist/test/client.attributionFarm.spec.js +13 -13
  139. package/dist/test/client.attributionFarm.spec.js.map +1 -1
  140. package/dist/test/client.conflictFarm.spec.d.ts +1 -1
  141. package/dist/test/client.conflictFarm.spec.d.ts.map +1 -1
  142. package/dist/test/client.conflictFarm.spec.js +9 -9
  143. package/dist/test/client.conflictFarm.spec.js.map +1 -1
  144. package/dist/test/client.getPosition.spec.js +4 -4
  145. package/dist/test/client.getPosition.spec.js.map +1 -1
  146. package/dist/test/client.localReference.spec.js +140 -109
  147. package/dist/test/client.localReference.spec.js.map +1 -1
  148. package/dist/test/client.localReferenceFarm.spec.js +18 -18
  149. package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
  150. package/dist/test/client.rebasePosition.spec.js +2 -2
  151. package/dist/test/client.rebasePosition.spec.js.map +1 -1
  152. package/dist/test/client.reconnectFarm.spec.d.ts +1 -1
  153. package/dist/test/client.reconnectFarm.spec.d.ts.map +1 -1
  154. package/dist/test/client.reconnectFarm.spec.js +10 -10
  155. package/dist/test/client.reconnectFarm.spec.js.map +1 -1
  156. package/dist/test/client.replay.spec.js +11 -11
  157. package/dist/test/client.replay.spec.js.map +1 -1
  158. package/dist/test/client.rollback.spec.js +83 -83
  159. package/dist/test/client.rollback.spec.js.map +1 -1
  160. package/dist/test/client.rollbackFarm.spec.js +9 -9
  161. package/dist/test/client.rollbackFarm.spec.js.map +1 -1
  162. package/dist/test/client.searchForMarker.spec.js +137 -137
  163. package/dist/test/client.searchForMarker.spec.js.map +1 -1
  164. package/dist/test/client.walkSegments.spec.js +2 -2
  165. package/dist/test/client.walkSegments.spec.js.map +1 -1
  166. package/dist/test/collections.list.spec.js +4 -4
  167. package/dist/test/collections.list.spec.js.map +1 -1
  168. package/dist/test/createInsertOnlyAttributionPolicy.spec.js +4 -4
  169. package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
  170. package/dist/test/dirname.cjs +16 -0
  171. package/dist/test/dirname.cjs.map +1 -0
  172. package/dist/test/dirname.d.cts +6 -0
  173. package/dist/test/dirname.d.cts.map +1 -0
  174. package/dist/test/index.d.ts +8 -8
  175. package/dist/test/index.d.ts.map +1 -1
  176. package/dist/test/index.js +82 -81
  177. package/dist/test/index.js.map +1 -1
  178. package/dist/test/mergeTree.annotate.deltaCallback.spec.js +39 -39
  179. package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  180. package/dist/test/mergeTree.annotate.spec.js +39 -39
  181. package/dist/test/mergeTree.annotate.spec.js.map +1 -1
  182. package/dist/test/mergeTree.insert.deltaCallback.spec.js +35 -35
  183. package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  184. package/dist/test/mergeTree.insertingWalk.spec.js +77 -77
  185. package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
  186. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +42 -42
  187. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  188. package/dist/test/mergeTree.markRangeRemoved.spec.js +15 -15
  189. package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  190. package/dist/test/mergeTree.walk.spec.js +14 -14
  191. package/dist/test/mergeTree.walk.spec.js.map +1 -1
  192. package/dist/test/mergeTree.zamboni.spec.js +9 -9
  193. package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
  194. package/dist/test/mergeTreeOperationRunner.d.ts +4 -4
  195. package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
  196. package/dist/test/mergeTreeOperationRunner.js +16 -15
  197. package/dist/test/mergeTreeOperationRunner.js.map +1 -1
  198. package/dist/test/mergeTreeOperationRunner.spec.js +5 -5
  199. package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
  200. package/dist/test/obliterate.concurrent.spec.js +85 -88
  201. package/dist/test/obliterate.concurrent.spec.js.map +1 -1
  202. package/dist/test/obliterate.deltaCallback.spec.d.ts +6 -0
  203. package/dist/test/obliterate.deltaCallback.spec.d.ts.map +1 -0
  204. package/dist/test/obliterate.deltaCallback.spec.js +146 -0
  205. package/dist/test/obliterate.deltaCallback.spec.js.map +1 -0
  206. package/dist/test/obliterate.partialLength.spec.js +39 -44
  207. package/dist/test/obliterate.partialLength.spec.js.map +1 -1
  208. package/dist/test/obliterate.reconnect.spec.js +15 -18
  209. package/dist/test/obliterate.reconnect.spec.js.map +1 -1
  210. package/dist/test/obliterate.spec.js +16 -16
  211. package/dist/test/obliterate.spec.js.map +1 -1
  212. package/dist/test/ordinal.spec.js +5 -5
  213. package/dist/test/ordinal.spec.js.map +1 -1
  214. package/dist/test/partialLength.spec.js +58 -64
  215. package/dist/test/partialLength.spec.js.map +1 -1
  216. package/dist/test/properties.spec.js +15 -15
  217. package/dist/test/properties.spec.js.map +1 -1
  218. package/dist/test/reconnectHelper.d.ts +8 -8
  219. package/dist/test/reconnectHelper.d.ts.map +1 -1
  220. package/dist/test/reconnectHelper.js +3 -3
  221. package/dist/test/reconnectHelper.js.map +1 -1
  222. package/dist/test/resetPendingSegmentsToOp.spec.js +18 -18
  223. package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  224. package/dist/test/revertibleFarm.spec.js +21 -21
  225. package/dist/test/revertibleFarm.spec.js.map +1 -1
  226. package/dist/test/revertibles.spec.js +67 -67
  227. package/dist/test/revertibles.spec.js.map +1 -1
  228. package/dist/test/segmentGroupCollection.spec.js +3 -3
  229. package/dist/test/segmentGroupCollection.spec.js.map +1 -1
  230. package/dist/test/snapshot.spec.js +16 -16
  231. package/dist/test/snapshot.spec.js.map +1 -1
  232. package/dist/test/snapshot.utils.d.ts +4 -4
  233. package/dist/test/snapshot.utils.d.ts.map +1 -1
  234. package/dist/test/snapshot.utils.js +11 -11
  235. package/dist/test/snapshot.utils.js.map +1 -1
  236. package/dist/test/snapshotlegacy.spec.js +22 -22
  237. package/dist/test/snapshotlegacy.spec.js.map +1 -1
  238. package/dist/test/sortedSegmentSet.spec.js +9 -9
  239. package/dist/test/sortedSegmentSet.spec.js.map +1 -1
  240. package/dist/test/testClient.d.ts +13 -16
  241. package/dist/test/testClient.d.ts.map +1 -1
  242. package/dist/test/testClient.js +57 -59
  243. package/dist/test/testClient.js.map +1 -1
  244. package/dist/test/testClientLogger.d.ts +3 -3
  245. package/dist/test/testClientLogger.d.ts.map +1 -1
  246. package/dist/test/testClientLogger.js +19 -19
  247. package/dist/test/testClientLogger.js.map +1 -1
  248. package/dist/test/testServer.d.ts +3 -3
  249. package/dist/test/testServer.d.ts.map +1 -1
  250. package/dist/test/testServer.js +8 -8
  251. package/dist/test/testServer.js.map +1 -1
  252. package/dist/test/testUtils.d.ts +14 -6
  253. package/dist/test/testUtils.d.ts.map +1 -1
  254. package/dist/test/testUtils.js +36 -17
  255. package/dist/test/testUtils.js.map +1 -1
  256. package/dist/test/text.d.ts +2 -2
  257. package/dist/test/text.d.ts.map +1 -1
  258. package/dist/test/text.js +10 -10
  259. package/dist/test/text.js.map +1 -1
  260. package/dist/test/tracking.spec.js +12 -12
  261. package/dist/test/tracking.spec.js.map +1 -1
  262. package/dist/test/{wordUnitTests.d.ts → wordUnitTests.spec.d.ts} +1 -1
  263. package/dist/test/wordUnitTests.spec.d.ts.map +1 -0
  264. package/dist/test/{wordUnitTests.js → wordUnitTests.spec.js} +16 -15
  265. package/dist/test/wordUnitTests.spec.js.map +1 -0
  266. package/dist/textSegment.d.ts +3 -3
  267. package/dist/textSegment.d.ts.map +1 -1
  268. package/dist/textSegment.js +2 -2
  269. package/dist/textSegment.js.map +1 -1
  270. package/dist/tsdoc-metadata.json +1 -1
  271. package/dist/zamboni.d.ts +2 -2
  272. package/dist/zamboni.d.ts.map +1 -1
  273. package/dist/zamboni.js +19 -19
  274. package/dist/zamboni.js.map +1 -1
  275. package/lib/{MergeTreeTextHelper.d.mts → MergeTreeTextHelper.d.ts} +3 -3
  276. package/lib/MergeTreeTextHelper.d.ts.map +1 -0
  277. package/lib/{MergeTreeTextHelper.mjs → MergeTreeTextHelper.js} +3 -2
  278. package/lib/MergeTreeTextHelper.js.map +1 -0
  279. package/lib/{attributionCollection.d.mts → attributionCollection.d.ts} +2 -2
  280. package/lib/attributionCollection.d.ts.map +1 -0
  281. package/lib/{attributionCollection.mjs → attributionCollection.js} +1 -1
  282. package/lib/attributionCollection.js.map +1 -0
  283. package/lib/{attributionPolicy.d.mts → attributionPolicy.d.ts} +2 -2
  284. package/lib/attributionPolicy.d.ts.map +1 -0
  285. package/lib/{attributionPolicy.mjs → attributionPolicy.js} +4 -4
  286. package/lib/attributionPolicy.js.map +1 -0
  287. package/lib/{client.d.mts → client.d.ts} +32 -13
  288. package/lib/client.d.ts.map +1 -0
  289. package/lib/{client.mjs → client.js} +42 -31
  290. package/lib/client.js.map +1 -0
  291. package/lib/collections/{index.d.mts → index.d.ts} +3 -3
  292. package/lib/collections/index.d.ts.map +1 -0
  293. package/lib/collections/index.js +7 -0
  294. package/lib/collections/index.js.map +1 -0
  295. package/lib/collections/{list.d.mts → list.d.ts} +1 -1
  296. package/lib/collections/list.d.ts.map +1 -0
  297. package/lib/collections/{list.mjs → list.js} +1 -1
  298. package/lib/collections/list.js.map +1 -0
  299. package/lib/collections/{rbTree.d.mts → rbTree.d.ts} +1 -1
  300. package/lib/collections/rbTree.d.ts.map +1 -0
  301. package/lib/collections/{rbTree.mjs → rbTree.js} +1 -1
  302. package/lib/collections/rbTree.js.map +1 -0
  303. package/lib/{constants.d.mts → constants.d.ts} +1 -1
  304. package/lib/constants.d.ts.map +1 -0
  305. package/lib/{constants.mjs → constants.js} +1 -1
  306. package/lib/constants.js.map +1 -0
  307. package/lib/{endOfTreeSegment.d.mts → endOfTreeSegment.d.ts} +4 -4
  308. package/lib/endOfTreeSegment.d.ts.map +1 -0
  309. package/lib/{endOfTreeSegment.mjs → endOfTreeSegment.js} +3 -3
  310. package/lib/endOfTreeSegment.js.map +1 -0
  311. package/lib/{index.d.mts → index.d.ts} +21 -21
  312. package/lib/index.d.ts.map +1 -0
  313. package/lib/{index.mjs → index.js} +20 -20
  314. package/lib/index.js.map +1 -0
  315. package/lib/{localReference.d.mts → localReference.d.ts} +10 -40
  316. package/lib/localReference.d.ts.map +1 -0
  317. package/lib/{localReference.mjs → localReference.js} +12 -6
  318. package/lib/localReference.js.map +1 -0
  319. package/lib/{merge-tree-alpha.d.mts → merge-tree-alpha.d.ts} +28 -450
  320. package/lib/merge-tree-beta.d.ts +230 -0
  321. package/lib/merge-tree-public.d.ts +230 -0
  322. package/lib/{merge-tree-untrimmed.d.mts → merge-tree-untrimmed.d.ts} +28 -787
  323. package/lib/{mergeTree.d.mts → mergeTree.d.ts} +12 -20
  324. package/lib/mergeTree.d.ts.map +1 -0
  325. package/lib/{mergeTree.mjs → mergeTree.js} +47 -32
  326. package/lib/mergeTree.js.map +1 -0
  327. package/lib/{mergeTreeDeltaCallback.d.mts → mergeTreeDeltaCallback.d.ts} +8 -8
  328. package/lib/mergeTreeDeltaCallback.d.ts.map +1 -0
  329. package/lib/{mergeTreeDeltaCallback.mjs → mergeTreeDeltaCallback.js} +1 -1
  330. package/lib/mergeTreeDeltaCallback.js.map +1 -0
  331. package/lib/{mergeTreeNodeWalk.d.mts → mergeTreeNodeWalk.d.ts} +2 -2
  332. package/lib/mergeTreeNodeWalk.d.ts.map +1 -0
  333. package/lib/{mergeTreeNodeWalk.mjs → mergeTreeNodeWalk.js} +1 -1
  334. package/lib/mergeTreeNodeWalk.js.map +1 -0
  335. package/lib/{mergeTreeNodes.d.mts → mergeTreeNodes.d.ts} +18 -15
  336. package/lib/mergeTreeNodes.d.ts.map +1 -0
  337. package/lib/{mergeTreeNodes.mjs → mergeTreeNodes.js} +12 -10
  338. package/lib/mergeTreeNodes.js.map +1 -0
  339. package/lib/{mergeTreeTracking.d.mts → mergeTreeTracking.d.ts} +3 -3
  340. package/lib/mergeTreeTracking.d.ts.map +1 -0
  341. package/lib/{mergeTreeTracking.mjs → mergeTreeTracking.js} +3 -2
  342. package/lib/mergeTreeTracking.js.map +1 -0
  343. package/lib/{opBuilder.d.mts → opBuilder.d.ts} +4 -4
  344. package/lib/{opBuilder.d.mts.map → opBuilder.d.ts.map} +1 -1
  345. package/lib/{opBuilder.mjs → opBuilder.js} +2 -2
  346. package/lib/opBuilder.js.map +1 -0
  347. package/lib/{ops.d.mts → ops.d.ts} +1 -1
  348. package/lib/ops.d.ts.map +1 -0
  349. package/lib/{ops.mjs → ops.js} +1 -1
  350. package/lib/ops.js.map +1 -0
  351. package/lib/{ordinal.d.mts → ordinal.d.ts} +1 -1
  352. package/lib/ordinal.d.ts.map +1 -0
  353. package/lib/{ordinal.mjs → ordinal.js} +2 -1
  354. package/lib/ordinal.js.map +1 -0
  355. package/lib/{partialLengths.d.mts → partialLengths.d.ts} +6 -6
  356. package/lib/partialLengths.d.ts.map +1 -0
  357. package/lib/{partialLengths.mjs → partialLengths.js} +11 -10
  358. package/lib/partialLengths.js.map +1 -0
  359. package/lib/{properties.d.mts → properties.d.ts} +1 -1
  360. package/lib/properties.d.ts.map +1 -0
  361. package/lib/{properties.mjs → properties.js} +1 -1
  362. package/lib/properties.js.map +1 -0
  363. package/lib/{referencePositions.d.mts → referencePositions.d.ts} +5 -5
  364. package/lib/referencePositions.d.ts.map +1 -0
  365. package/lib/{referencePositions.mjs → referencePositions.js} +2 -2
  366. package/lib/referencePositions.js.map +1 -0
  367. package/lib/{revertibles.d.mts → revertibles.d.ts} +8 -8
  368. package/lib/revertibles.d.ts.map +1 -0
  369. package/lib/{revertibles.mjs → revertibles.js} +13 -13
  370. package/lib/revertibles.js.map +1 -0
  371. package/lib/{segmentGroupCollection.d.mts → segmentGroupCollection.d.ts} +2 -2
  372. package/lib/segmentGroupCollection.d.ts.map +1 -0
  373. package/lib/{segmentGroupCollection.mjs → segmentGroupCollection.js} +2 -2
  374. package/lib/segmentGroupCollection.js.map +1 -0
  375. package/lib/{segmentPropertiesManager.d.mts → segmentPropertiesManager.d.ts} +3 -3
  376. package/lib/segmentPropertiesManager.d.ts.map +1 -0
  377. package/lib/{segmentPropertiesManager.mjs → segmentPropertiesManager.js} +5 -3
  378. package/lib/segmentPropertiesManager.js.map +1 -0
  379. package/lib/{snapshotChunks.d.mts → snapshotChunks.d.ts} +4 -4
  380. package/lib/snapshotChunks.d.ts.map +1 -0
  381. package/lib/{snapshotChunks.mjs → snapshotChunks.js} +2 -2
  382. package/lib/snapshotChunks.js.map +1 -0
  383. package/lib/{snapshotLoader.d.mts → snapshotLoader.d.ts} +4 -4
  384. package/lib/snapshotLoader.d.ts.map +1 -0
  385. package/lib/{snapshotLoader.mjs → snapshotLoader.js} +10 -9
  386. package/lib/snapshotLoader.js.map +1 -0
  387. package/lib/{snapshotV1.d.mts → snapshotV1.d.ts} +4 -4
  388. package/lib/snapshotV1.d.ts.map +1 -0
  389. package/lib/{snapshotV1.mjs → snapshotV1.js} +24 -7
  390. package/lib/snapshotV1.js.map +1 -0
  391. package/lib/{snapshotlegacy.d.mts → snapshotlegacy.d.ts} +3 -3
  392. package/lib/snapshotlegacy.d.ts.map +1 -0
  393. package/lib/{snapshotlegacy.mjs → snapshotlegacy.js} +17 -4
  394. package/lib/snapshotlegacy.js.map +1 -0
  395. package/lib/{sortedSegmentSet.d.mts → sortedSegmentSet.d.ts} +4 -4
  396. package/lib/sortedSegmentSet.d.ts.map +1 -0
  397. package/lib/{sortedSegmentSet.mjs → sortedSegmentSet.js} +8 -5
  398. package/lib/sortedSegmentSet.js.map +1 -0
  399. package/lib/{sortedSet.d.mts → sortedSet.d.ts} +1 -1
  400. package/lib/sortedSet.d.ts.map +1 -0
  401. package/lib/{sortedSet.mjs → sortedSet.js} +1 -1
  402. package/lib/sortedSet.js.map +1 -0
  403. package/lib/test/Insertion.perf.spec.d.ts +6 -0
  404. package/lib/test/Insertion.perf.spec.d.ts.map +1 -0
  405. package/lib/test/Insertion.perf.spec.js +111 -0
  406. package/lib/test/Insertion.perf.spec.js.map +1 -0
  407. package/lib/test/PartialLengths.perf.spec.d.ts +6 -0
  408. package/lib/test/PartialLengths.perf.spec.d.ts.map +1 -0
  409. package/lib/test/PartialLengths.perf.spec.js +65 -0
  410. package/lib/test/PartialLengths.perf.spec.js.map +1 -0
  411. package/lib/test/Removal.perf.spec.d.ts +6 -0
  412. package/lib/test/Removal.perf.spec.d.ts.map +1 -0
  413. package/lib/test/Removal.perf.spec.js +164 -0
  414. package/lib/test/Removal.perf.spec.js.map +1 -0
  415. package/lib/test/Snapshot.perf.spec.d.ts +6 -0
  416. package/lib/test/Snapshot.perf.spec.d.ts.map +1 -0
  417. package/lib/test/Snapshot.perf.spec.js +31 -0
  418. package/lib/test/Snapshot.perf.spec.js.map +1 -0
  419. package/lib/test/attributionCollection.perf.spec.d.ts +6 -0
  420. package/lib/test/attributionCollection.perf.spec.d.ts.map +1 -0
  421. package/lib/test/attributionCollection.perf.spec.js +229 -0
  422. package/lib/test/attributionCollection.perf.spec.js.map +1 -0
  423. package/lib/test/attributionCollection.spec.d.ts +6 -0
  424. package/lib/test/attributionCollection.spec.d.ts.map +1 -0
  425. package/lib/test/attributionCollection.spec.js +484 -0
  426. package/lib/test/attributionCollection.spec.js.map +1 -0
  427. package/lib/test/attributionPolicy.spec.d.ts +6 -0
  428. package/lib/test/attributionPolicy.spec.d.ts.map +1 -0
  429. package/lib/test/attributionPolicy.spec.js +187 -0
  430. package/lib/test/attributionPolicy.spec.js.map +1 -0
  431. package/lib/test/beastTest.spec.d.ts +54 -0
  432. package/lib/test/beastTest.spec.d.ts.map +1 -0
  433. package/lib/test/beastTest.spec.js +1318 -0
  434. package/lib/test/beastTest.spec.js.map +1 -0
  435. package/lib/test/client.annotateMarker.spec.d.ts +6 -0
  436. package/lib/test/client.annotateMarker.spec.d.ts.map +1 -0
  437. package/lib/test/client.annotateMarker.spec.js +43 -0
  438. package/lib/test/client.annotateMarker.spec.js.map +1 -0
  439. package/lib/test/client.apis.spec.d.ts +7 -0
  440. package/lib/test/client.apis.spec.d.ts.map +1 -0
  441. package/lib/test/client.apis.spec.js +67 -0
  442. package/lib/test/client.apis.spec.js.map +1 -0
  443. package/lib/test/client.applyMsg.spec.d.ts +6 -0
  444. package/lib/test/client.applyMsg.spec.d.ts.map +1 -0
  445. package/lib/test/client.applyMsg.spec.js +561 -0
  446. package/lib/test/client.applyMsg.spec.js.map +1 -0
  447. package/lib/test/client.applyStashedOpFarm.spec.d.ts +12 -0
  448. package/lib/test/client.applyStashedOpFarm.spec.d.ts.map +1 -0
  449. package/lib/test/client.applyStashedOpFarm.spec.js +153 -0
  450. package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -0
  451. package/lib/test/client.attributionFarm.spec.d.ts +7 -0
  452. package/lib/test/client.attributionFarm.spec.d.ts.map +1 -0
  453. package/lib/test/client.attributionFarm.spec.js +92 -0
  454. package/lib/test/client.attributionFarm.spec.js.map +1 -0
  455. package/lib/test/client.conflictFarm.spec.d.ts +15 -0
  456. package/lib/test/client.conflictFarm.spec.d.ts.map +1 -0
  457. package/lib/test/client.conflictFarm.spec.js +85 -0
  458. package/lib/test/client.conflictFarm.spec.js.map +1 -0
  459. package/lib/test/client.getPosition.spec.d.ts +6 -0
  460. package/lib/test/client.getPosition.spec.d.ts.map +1 -0
  461. package/lib/test/client.getPosition.spec.js +52 -0
  462. package/lib/test/client.getPosition.spec.js.map +1 -0
  463. package/lib/test/client.localReference.spec.d.ts +6 -0
  464. package/lib/test/client.localReference.spec.d.ts.map +1 -0
  465. package/lib/test/client.localReference.spec.js +468 -0
  466. package/lib/test/client.localReference.spec.js.map +1 -0
  467. package/lib/test/client.localReferenceFarm.spec.d.ts +6 -0
  468. package/lib/test/client.localReferenceFarm.spec.d.ts.map +1 -0
  469. package/lib/test/client.localReferenceFarm.spec.js +86 -0
  470. package/lib/test/client.localReferenceFarm.spec.js.map +1 -0
  471. package/lib/test/client.rebasePosition.spec.d.ts +6 -0
  472. package/lib/test/client.rebasePosition.spec.d.ts.map +1 -0
  473. package/lib/test/client.rebasePosition.spec.js +100 -0
  474. package/lib/test/client.rebasePosition.spec.js.map +1 -0
  475. package/lib/test/client.reconnectFarm.spec.d.ts +12 -0
  476. package/lib/test/client.reconnectFarm.spec.d.ts.map +1 -0
  477. package/lib/test/client.reconnectFarm.spec.js +88 -0
  478. package/lib/test/client.reconnectFarm.spec.js.map +1 -0
  479. package/lib/test/client.replay.spec.d.ts +6 -0
  480. package/lib/test/client.replay.spec.d.ts.map +1 -0
  481. package/lib/test/client.replay.spec.js +57 -0
  482. package/lib/test/client.replay.spec.js.map +1 -0
  483. package/lib/test/client.rollback.spec.d.ts +6 -0
  484. package/lib/test/client.rollback.spec.d.ts.map +1 -0
  485. package/lib/test/client.rollback.spec.js +451 -0
  486. package/lib/test/client.rollback.spec.js.map +1 -0
  487. package/lib/test/client.rollbackFarm.spec.d.ts +6 -0
  488. package/lib/test/client.rollbackFarm.spec.d.ts.map +1 -0
  489. package/lib/test/client.rollbackFarm.spec.js +46 -0
  490. package/lib/test/client.rollbackFarm.spec.js.map +1 -0
  491. package/lib/test/client.searchForMarker.spec.d.ts +6 -0
  492. package/lib/test/client.searchForMarker.spec.d.ts.map +1 -0
  493. package/lib/test/client.searchForMarker.spec.js +495 -0
  494. package/lib/test/client.searchForMarker.spec.js.map +1 -0
  495. package/lib/test/client.walkSegments.spec.d.ts +6 -0
  496. package/lib/test/client.walkSegments.spec.d.ts.map +1 -0
  497. package/lib/test/client.walkSegments.spec.js +52 -0
  498. package/lib/test/client.walkSegments.spec.js.map +1 -0
  499. package/lib/test/collections.list.spec.d.ts +6 -0
  500. package/lib/test/collections.list.spec.d.ts.map +1 -0
  501. package/lib/test/collections.list.spec.js +82 -0
  502. package/lib/test/collections.list.spec.js.map +1 -0
  503. package/lib/test/createInsertOnlyAttributionPolicy.spec.d.ts +6 -0
  504. package/lib/test/createInsertOnlyAttributionPolicy.spec.d.ts.map +1 -0
  505. package/lib/test/createInsertOnlyAttributionPolicy.spec.js +33 -0
  506. package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -0
  507. package/lib/test/dirname.cjs +16 -0
  508. package/lib/test/dirname.cjs.map +1 -0
  509. package/lib/test/dirname.d.cts +6 -0
  510. package/lib/test/dirname.d.cts.map +1 -0
  511. package/lib/test/index.d.ts +13 -0
  512. package/lib/test/index.d.ts.map +1 -0
  513. package/lib/test/index.js +13 -0
  514. package/lib/test/index.js.map +1 -0
  515. package/lib/test/mergeTree.annotate.deltaCallback.spec.d.ts +6 -0
  516. package/lib/test/mergeTree.annotate.deltaCallback.spec.d.ts.map +1 -0
  517. package/lib/test/mergeTree.annotate.deltaCallback.spec.js +140 -0
  518. package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -0
  519. package/lib/test/mergeTree.annotate.spec.d.ts +6 -0
  520. package/lib/test/mergeTree.annotate.spec.d.ts.map +1 -0
  521. package/lib/test/mergeTree.annotate.spec.js +446 -0
  522. package/lib/test/mergeTree.annotate.spec.js.map +1 -0
  523. package/lib/test/mergeTree.insert.deltaCallback.spec.d.ts +6 -0
  524. package/lib/test/mergeTree.insert.deltaCallback.spec.d.ts.map +1 -0
  525. package/lib/test/mergeTree.insert.deltaCallback.spec.js +124 -0
  526. package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -0
  527. package/lib/test/mergeTree.insertingWalk.spec.d.ts +6 -0
  528. package/lib/test/mergeTree.insertingWalk.spec.d.ts.map +1 -0
  529. package/lib/test/mergeTree.insertingWalk.spec.js +277 -0
  530. package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -0
  531. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts +6 -0
  532. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts.map +1 -0
  533. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +176 -0
  534. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -0
  535. package/lib/test/mergeTree.markRangeRemoved.spec.d.ts +6 -0
  536. package/lib/test/mergeTree.markRangeRemoved.spec.d.ts.map +1 -0
  537. package/lib/test/mergeTree.markRangeRemoved.spec.js +128 -0
  538. package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -0
  539. package/lib/test/mergeTree.walk.spec.d.ts +6 -0
  540. package/lib/test/mergeTree.walk.spec.d.ts.map +1 -0
  541. package/lib/test/mergeTree.walk.spec.js +61 -0
  542. package/lib/test/mergeTree.walk.spec.js.map +1 -0
  543. package/lib/test/mergeTree.zamboni.spec.d.ts +6 -0
  544. package/lib/test/mergeTree.zamboni.spec.d.ts.map +1 -0
  545. package/lib/test/mergeTree.zamboni.spec.js +50 -0
  546. package/lib/test/mergeTree.zamboni.spec.js.map +1 -0
  547. package/lib/test/mergeTreeOperationRunner.d.ts +63 -0
  548. package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -0
  549. package/lib/test/mergeTreeOperationRunner.js +207 -0
  550. package/lib/test/mergeTreeOperationRunner.js.map +1 -0
  551. package/lib/test/mergeTreeOperationRunner.spec.d.ts +6 -0
  552. package/lib/test/mergeTreeOperationRunner.spec.d.ts.map +1 -0
  553. package/lib/test/mergeTreeOperationRunner.spec.js +154 -0
  554. package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -0
  555. package/lib/test/obliterate.concurrent.spec.d.ts +6 -0
  556. package/lib/test/obliterate.concurrent.spec.d.ts.map +1 -0
  557. package/lib/test/obliterate.concurrent.spec.js +1441 -0
  558. package/lib/test/obliterate.concurrent.spec.js.map +1 -0
  559. package/lib/test/obliterate.deltaCallback.spec.d.ts +6 -0
  560. package/lib/test/obliterate.deltaCallback.spec.d.ts.map +1 -0
  561. package/lib/test/obliterate.deltaCallback.spec.js +144 -0
  562. package/lib/test/obliterate.deltaCallback.spec.js.map +1 -0
  563. package/lib/test/obliterate.partialLength.spec.d.ts +6 -0
  564. package/lib/test/obliterate.partialLength.spec.d.ts.map +1 -0
  565. package/lib/test/obliterate.partialLength.spec.js +272 -0
  566. package/lib/test/obliterate.partialLength.spec.js.map +1 -0
  567. package/lib/test/obliterate.reconnect.spec.d.ts +6 -0
  568. package/lib/test/obliterate.reconnect.spec.d.ts.map +1 -0
  569. package/lib/test/obliterate.reconnect.spec.js +159 -0
  570. package/lib/test/obliterate.reconnect.spec.js.map +1 -0
  571. package/lib/test/obliterate.spec.d.ts +6 -0
  572. package/lib/test/obliterate.spec.d.ts.map +1 -0
  573. package/lib/test/obliterate.spec.js +160 -0
  574. package/lib/test/obliterate.spec.js.map +1 -0
  575. package/lib/test/ordinal.spec.d.ts +2 -0
  576. package/lib/test/ordinal.spec.d.ts.map +1 -0
  577. package/lib/test/ordinal.spec.js +38 -0
  578. package/lib/test/ordinal.spec.js.map +1 -0
  579. package/lib/test/partialLength.spec.d.ts +6 -0
  580. package/lib/test/partialLength.spec.d.ts.map +1 -0
  581. package/lib/test/partialLength.spec.js +274 -0
  582. package/lib/test/partialLength.spec.js.map +1 -0
  583. package/lib/test/properties.spec.d.ts +6 -0
  584. package/lib/test/properties.spec.d.ts.map +1 -0
  585. package/lib/test/properties.spec.js +53 -0
  586. package/lib/test/properties.spec.js.map +1 -0
  587. package/lib/test/reconnectHelper.d.ts +48 -0
  588. package/lib/test/reconnectHelper.d.ts.map +1 -0
  589. package/lib/test/reconnectHelper.js +82 -0
  590. package/lib/test/reconnectHelper.js.map +1 -0
  591. package/lib/test/resetPendingSegmentsToOp.spec.d.ts +6 -0
  592. package/lib/test/resetPendingSegmentsToOp.spec.d.ts.map +1 -0
  593. package/lib/test/resetPendingSegmentsToOp.spec.js +235 -0
  594. package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -0
  595. package/lib/test/revertibleFarm.spec.d.ts +6 -0
  596. package/lib/test/revertibleFarm.spec.d.ts.map +1 -0
  597. package/lib/test/revertibleFarm.spec.js +119 -0
  598. package/lib/test/revertibleFarm.spec.js.map +1 -0
  599. package/lib/test/revertibles.spec.d.ts +17 -0
  600. package/lib/test/revertibles.spec.d.ts.map +1 -0
  601. package/lib/test/revertibles.spec.js +381 -0
  602. package/lib/test/revertibles.spec.js.map +1 -0
  603. package/lib/test/segmentGroupCollection.spec.d.ts +6 -0
  604. package/lib/test/segmentGroupCollection.spec.d.ts.map +1 -0
  605. package/lib/test/segmentGroupCollection.spec.js +58 -0
  606. package/lib/test/segmentGroupCollection.spec.js.map +1 -0
  607. package/lib/test/snapshot.spec.d.ts +6 -0
  608. package/lib/test/snapshot.spec.d.ts.map +1 -0
  609. package/lib/test/snapshot.spec.js +176 -0
  610. package/lib/test/snapshot.spec.js.map +1 -0
  611. package/lib/test/snapshot.utils.d.ts +33 -0
  612. package/lib/test/snapshot.utils.d.ts.map +1 -0
  613. package/lib/test/snapshot.utils.js +104 -0
  614. package/lib/test/snapshot.utils.js.map +1 -0
  615. package/lib/test/snapshotlegacy.spec.d.ts +6 -0
  616. package/lib/test/snapshotlegacy.spec.d.ts.map +1 -0
  617. package/lib/test/snapshotlegacy.spec.js +137 -0
  618. package/lib/test/snapshotlegacy.spec.js.map +1 -0
  619. package/lib/test/sortedSegmentSet.spec.d.ts +6 -0
  620. package/lib/test/sortedSegmentSet.spec.d.ts.map +1 -0
  621. package/lib/test/sortedSegmentSet.spec.js +93 -0
  622. package/lib/test/sortedSegmentSet.spec.js.map +1 -0
  623. package/lib/test/testClient.d.ts +116 -0
  624. package/lib/test/testClient.d.ts.map +1 -0
  625. package/lib/test/testClient.js +430 -0
  626. package/lib/test/testClient.js.map +1 -0
  627. package/lib/test/testClientLogger.d.ts +44 -0
  628. package/lib/test/testClientLogger.d.ts.map +1 -0
  629. package/lib/test/testClientLogger.js +282 -0
  630. package/lib/test/testClientLogger.js.map +1 -0
  631. package/lib/test/testSerializer.d.ts +18 -0
  632. package/lib/test/testSerializer.d.ts.map +1 -0
  633. package/lib/test/testSerializer.js +29 -0
  634. package/lib/test/testSerializer.js.map +1 -0
  635. package/lib/test/testServer.d.ts +36 -0
  636. package/lib/test/testServer.d.ts.map +1 -0
  637. package/lib/test/testServer.js +133 -0
  638. package/lib/test/testServer.js.map +1 -0
  639. package/lib/test/testUtils.d.ts +77 -0
  640. package/lib/test/testUtils.d.ts.map +1 -0
  641. package/lib/test/testUtils.js +151 -0
  642. package/lib/test/testUtils.js.map +1 -0
  643. package/lib/test/text.d.ts +9 -0
  644. package/lib/test/text.d.ts.map +1 -0
  645. package/lib/test/text.js +71 -0
  646. package/lib/test/text.js.map +1 -0
  647. package/lib/test/tracking.spec.d.ts +6 -0
  648. package/lib/test/tracking.spec.d.ts.map +1 -0
  649. package/lib/test/tracking.spec.js +118 -0
  650. package/lib/test/tracking.spec.js.map +1 -0
  651. package/lib/test/types/validateMergeTreePrevious.generated.d.ts +2 -0
  652. package/lib/test/types/validateMergeTreePrevious.generated.d.ts.map +1 -0
  653. package/lib/test/types/validateMergeTreePrevious.generated.js +228 -0
  654. package/lib/test/types/validateMergeTreePrevious.generated.js.map +1 -0
  655. package/lib/test/wordUnitTests.spec.d.ts +6 -0
  656. package/lib/test/wordUnitTests.spec.d.ts.map +1 -0
  657. package/lib/test/wordUnitTests.spec.js +166 -0
  658. package/lib/test/wordUnitTests.spec.js.map +1 -0
  659. package/lib/{textSegment.d.mts → textSegment.d.ts} +4 -4
  660. package/lib/textSegment.d.ts.map +1 -0
  661. package/lib/{textSegment.mjs → textSegment.js} +2 -2
  662. package/lib/textSegment.js.map +1 -0
  663. package/lib/{zamboni.d.mts → zamboni.d.ts} +3 -3
  664. package/lib/zamboni.d.ts.map +1 -0
  665. package/lib/{zamboni.mjs → zamboni.js} +7 -6
  666. package/lib/zamboni.js.map +1 -0
  667. package/package.json +50 -57
  668. package/src/MergeTreeTextHelper.ts +4 -4
  669. package/src/attributionCollection.ts +1 -1
  670. package/src/attributionPolicy.ts +5 -5
  671. package/src/client.ts +50 -41
  672. package/src/collections/index.ts +2 -2
  673. package/src/endOfTreeSegment.ts +5 -5
  674. package/src/index.ts +20 -20
  675. package/src/localReference.ts +13 -7
  676. package/src/mergeTree.ts +53 -44
  677. package/src/mergeTreeDeltaCallback.ts +3 -8
  678. package/src/mergeTreeNodeWalk.ts +1 -1
  679. package/src/mergeTreeNodes.ts +21 -19
  680. package/src/mergeTreeTracking.ts +3 -3
  681. package/src/opBuilder.ts +3 -3
  682. package/src/partialLengths.ts +10 -10
  683. package/src/referencePositions.ts +4 -4
  684. package/src/revertibles.ts +14 -18
  685. package/src/segmentGroupCollection.ts +2 -2
  686. package/src/segmentPropertiesManager.ts +3 -3
  687. package/src/snapshotChunks.ts +4 -4
  688. package/src/snapshotLoader.ts +14 -11
  689. package/src/snapshotV1.ts +29 -9
  690. package/src/snapshotlegacy.ts +19 -5
  691. package/src/sortedSegmentSet.ts +8 -6
  692. package/src/textSegment.ts +3 -3
  693. package/src/zamboni.ts +7 -7
  694. package/tsconfig.cjs.json +7 -0
  695. package/tsconfig.json +2 -5
  696. package/api-extractor-esm.json +0 -17
  697. package/dist/test/beastTest.d.ts.map +0 -1
  698. package/dist/test/beastTest.js.map +0 -1
  699. package/dist/test/client.apis.d.ts.map +0 -1
  700. package/dist/test/client.apis.js.map +0 -1
  701. package/dist/test/wordUnitTests.d.ts.map +0 -1
  702. package/dist/test/wordUnitTests.js.map +0 -1
  703. package/lib/MergeTreeTextHelper.d.mts.map +0 -1
  704. package/lib/MergeTreeTextHelper.mjs.map +0 -1
  705. package/lib/attributionCollection.d.mts.map +0 -1
  706. package/lib/attributionCollection.mjs.map +0 -1
  707. package/lib/attributionPolicy.d.mts.map +0 -1
  708. package/lib/attributionPolicy.mjs.map +0 -1
  709. package/lib/client.d.mts.map +0 -1
  710. package/lib/client.mjs.map +0 -1
  711. package/lib/collections/index.d.mts.map +0 -1
  712. package/lib/collections/index.mjs +0 -7
  713. package/lib/collections/index.mjs.map +0 -1
  714. package/lib/collections/list.d.mts.map +0 -1
  715. package/lib/collections/list.mjs.map +0 -1
  716. package/lib/collections/rbTree.d.mts.map +0 -1
  717. package/lib/collections/rbTree.mjs.map +0 -1
  718. package/lib/constants.d.mts.map +0 -1
  719. package/lib/constants.mjs.map +0 -1
  720. package/lib/endOfTreeSegment.d.mts.map +0 -1
  721. package/lib/endOfTreeSegment.mjs.map +0 -1
  722. package/lib/index.d.mts.map +0 -1
  723. package/lib/index.mjs.map +0 -1
  724. package/lib/localReference.d.mts.map +0 -1
  725. package/lib/localReference.mjs.map +0 -1
  726. package/lib/merge-tree-beta.d.mts +0 -668
  727. package/lib/merge-tree-public.d.mts +0 -668
  728. package/lib/mergeTree.d.mts.map +0 -1
  729. package/lib/mergeTree.mjs.map +0 -1
  730. package/lib/mergeTreeDeltaCallback.d.mts.map +0 -1
  731. package/lib/mergeTreeDeltaCallback.mjs.map +0 -1
  732. package/lib/mergeTreeNodeWalk.d.mts.map +0 -1
  733. package/lib/mergeTreeNodeWalk.mjs.map +0 -1
  734. package/lib/mergeTreeNodes.d.mts.map +0 -1
  735. package/lib/mergeTreeNodes.mjs.map +0 -1
  736. package/lib/mergeTreeTracking.d.mts.map +0 -1
  737. package/lib/mergeTreeTracking.mjs.map +0 -1
  738. package/lib/opBuilder.mjs.map +0 -1
  739. package/lib/ops.d.mts.map +0 -1
  740. package/lib/ops.mjs.map +0 -1
  741. package/lib/ordinal.d.mts.map +0 -1
  742. package/lib/ordinal.mjs.map +0 -1
  743. package/lib/partialLengths.d.mts.map +0 -1
  744. package/lib/partialLengths.mjs.map +0 -1
  745. package/lib/properties.d.mts.map +0 -1
  746. package/lib/properties.mjs.map +0 -1
  747. package/lib/referencePositions.d.mts.map +0 -1
  748. package/lib/referencePositions.mjs.map +0 -1
  749. package/lib/revertibles.d.mts.map +0 -1
  750. package/lib/revertibles.mjs.map +0 -1
  751. package/lib/segmentGroupCollection.d.mts.map +0 -1
  752. package/lib/segmentGroupCollection.mjs.map +0 -1
  753. package/lib/segmentPropertiesManager.d.mts.map +0 -1
  754. package/lib/segmentPropertiesManager.mjs.map +0 -1
  755. package/lib/snapshotChunks.d.mts.map +0 -1
  756. package/lib/snapshotChunks.mjs.map +0 -1
  757. package/lib/snapshotLoader.d.mts.map +0 -1
  758. package/lib/snapshotLoader.mjs.map +0 -1
  759. package/lib/snapshotV1.d.mts.map +0 -1
  760. package/lib/snapshotV1.mjs.map +0 -1
  761. package/lib/snapshotlegacy.d.mts.map +0 -1
  762. package/lib/snapshotlegacy.mjs.map +0 -1
  763. package/lib/sortedSegmentSet.d.mts.map +0 -1
  764. package/lib/sortedSegmentSet.mjs.map +0 -1
  765. package/lib/sortedSet.d.mts.map +0 -1
  766. package/lib/sortedSet.mjs.map +0 -1
  767. package/lib/textSegment.d.mts.map +0 -1
  768. package/lib/textSegment.mjs.map +0 -1
  769. package/lib/zamboni.d.mts.map +0 -1
  770. package/lib/zamboni.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.searchForMarker.spec.d.ts","sourceRoot":"","sources":["../../src/test/client.searchForMarker.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,495 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { strict as assert } from "assert";
6
+ import { makeRandom } from "@fluid-private/stochastic-test-utils";
7
+ import { UniversalSequenceNumber } from "../constants.js";
8
+ import { reservedMarkerIdKey, MaxNodesInBlock } from "../mergeTreeNodes.js";
9
+ import { MergeTreeDeltaType, ReferenceType } from "../ops.js";
10
+ import { reservedTileLabelsKey } from "../referencePositions.js";
11
+ import { TextSegment } from "../textSegment.js";
12
+ import { TestClient } from "./testClient.js";
13
+ import { insertSegments } from "./testUtils.js";
14
+ import { createClientsAtInitialState } from "./testClientLogger.js";
15
+ describe("TestClient", () => {
16
+ const localUserLongId = "localUser";
17
+ let client;
18
+ beforeEach(() => {
19
+ client = new TestClient();
20
+ insertSegments({
21
+ mergeTree: client.mergeTree,
22
+ pos: 0,
23
+ segments: [TextSegment.make("")],
24
+ refSeq: UniversalSequenceNumber,
25
+ clientId: client.getClientId(),
26
+ seq: UniversalSequenceNumber,
27
+ opArgs: undefined,
28
+ });
29
+ client.startOrUpdateCollaboration(localUserLongId);
30
+ });
31
+ describe(".searchForMarker", () => {
32
+ it("Should return marker at the search position in either direction", () => {
33
+ client.insertTextLocal(0, "abcdefg");
34
+ client.insertMarkerLocal(4, ReferenceType.Tile, {
35
+ [reservedMarkerIdKey]: "marker",
36
+ [reservedTileLabelsKey]: ["Eop"],
37
+ });
38
+ assert.equal(client.getLength(), 8);
39
+ const marker1 = client.searchForMarker(4, "Eop", true);
40
+ assert(marker1, "Returned marker undefined.");
41
+ let exp = client.mergeTree.referencePositionToLocalPosition(marker1, UniversalSequenceNumber, client.getClientId());
42
+ assert.equal(exp, 4, "Marker with label not at expected position");
43
+ const marker2 = client.searchForMarker(4, "Eop", false);
44
+ assert(marker2, "Returned marker undefined.");
45
+ exp = client.mergeTree.referencePositionToLocalPosition(marker2, UniversalSequenceNumber, client.getClientId());
46
+ assert.equal(exp, 4, "Marker with label not at expected position");
47
+ });
48
+ it("Should return the marker at the search position in either direction from multiple blocks", () => {
49
+ client.insertTextLocal(0, "abcd");
50
+ client.insertTextLocal(4, "efg");
51
+ client.insertMarkerLocal(4, ReferenceType.Tile, {
52
+ [reservedMarkerIdKey]: "marker",
53
+ [reservedTileLabelsKey]: ["Eop"],
54
+ });
55
+ assert.equal(client.getLength(), 8);
56
+ const marker1 = client.searchForMarker(4, "Eop", true);
57
+ assert(marker1, "Returned marker undefined.");
58
+ let exp = client.mergeTree.referencePositionToLocalPosition(marker1, UniversalSequenceNumber, client.getClientId());
59
+ assert.equal(exp, 4, "Marker with label not at expected position");
60
+ const marker2 = client.searchForMarker(4, "Eop", false);
61
+ assert(marker2, "Returned marker undefined.");
62
+ exp = client.mergeTree.referencePositionToLocalPosition(marker2, UniversalSequenceNumber, client.getClientId());
63
+ assert.equal(exp, 4, "Marker with label not at expected position");
64
+ });
65
+ it("Should be able to find forward marker position based on label", () => {
66
+ const markerLabel = "EOP";
67
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
68
+ [reservedTileLabelsKey]: [markerLabel],
69
+ [reservedMarkerIdKey]: "some-id",
70
+ });
71
+ client.insertTextLocal(0, "abc");
72
+ assert.equal(client.getLength(), 4, "length not expected");
73
+ const marker = client.searchForMarker(0, markerLabel, true);
74
+ assert(marker, "Returned marker undefined.");
75
+ const exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
76
+ assert.equal(exp, 3, "Marker with label not at expected position");
77
+ });
78
+ it("Should be able to find forward marker position based on label from client with single marker", () => {
79
+ const markerLabel = "EOP";
80
+ client.insertTextLocal(0, "abc d");
81
+ client.insertMarkerLocal(1, ReferenceType.Tile, {
82
+ [reservedTileLabelsKey]: [markerLabel],
83
+ [reservedMarkerIdKey]: "some-id",
84
+ });
85
+ assert.equal(client.getLength(), 6, "length not expected");
86
+ const marker = client.searchForMarker(0, markerLabel, true);
87
+ assert(marker, "Returned marker undefined.");
88
+ const exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
89
+ assert.equal(exp, 1, "Marker with label not at expected position");
90
+ });
91
+ it("Should be able to find backward marker position based on label from client with multiple marker", () => {
92
+ const markerLabel = "EOP";
93
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
94
+ [reservedTileLabelsKey]: [markerLabel],
95
+ [reservedMarkerIdKey]: "some-id",
96
+ });
97
+ client.insertTextLocal(0, "abc d");
98
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
99
+ [reservedTileLabelsKey]: [markerLabel],
100
+ [reservedMarkerIdKey]: "some-id",
101
+ });
102
+ client.insertTextLocal(7, "ef");
103
+ client.insertMarkerLocal(8, ReferenceType.Tile, {
104
+ [reservedTileLabelsKey]: [markerLabel],
105
+ [reservedMarkerIdKey]: "some-id",
106
+ });
107
+ assert.equal(client.getLength(), 10, "length not expected");
108
+ const marker = client.searchForMarker(5, markerLabel, false);
109
+ assert(marker, "Returned marker undefined.");
110
+ const exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
111
+ assert.equal(exp, 0, "Marker with label not at expected position");
112
+ });
113
+ it("Should be able to find forward marker position from client with multiple marker", () => {
114
+ const markerLabel = "EOP";
115
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
116
+ [reservedTileLabelsKey]: [markerLabel],
117
+ [reservedMarkerIdKey]: "some-id",
118
+ });
119
+ client.insertTextLocal(0, "abc d");
120
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
121
+ [reservedTileLabelsKey]: [markerLabel],
122
+ [reservedMarkerIdKey]: "some-id",
123
+ });
124
+ client.insertTextLocal(7, "ef");
125
+ client.insertMarkerLocal(8, ReferenceType.Tile, {
126
+ [reservedTileLabelsKey]: [markerLabel],
127
+ [reservedMarkerIdKey]: "some-id",
128
+ });
129
+ assert.equal(client.getLength(), 10, "length not expected");
130
+ const marker = client.searchForMarker(5, markerLabel, true);
131
+ assert(marker, "Returned marker undefined.");
132
+ const exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
133
+ assert.equal(exp, 6, "Marker with label not at expected position");
134
+ });
135
+ it("Should be able to find forward marker position with multiple segments and markers", () => {
136
+ const markerLabel = "EOP";
137
+ Array.from({ length: MaxNodesInBlock ** 3 * 2 }).forEach((_, i) => client.insertTextLocal(0, i.toString()));
138
+ // pad the string with markers on both ends so we never get undefined solely for convenience of this test
139
+ for (let i = 0; i <= client.getLength(); i += 3) {
140
+ client.insertMarkerLocal(i, ReferenceType.Tile, {
141
+ [reservedTileLabelsKey]: [markerLabel],
142
+ [reservedMarkerIdKey]: "some-id",
143
+ });
144
+ }
145
+ for (let index = 0; index < client.getLength(); index++) {
146
+ const marker = client.searchForMarker(index, markerLabel, true);
147
+ assert(marker, `Returned marker undefined @ ${index}.`);
148
+ const exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
149
+ const offset = index % 3 === 0 ? index % 3 : 3 - (index % 3);
150
+ assert.equal(exp, index + offset, "Marker with label not at expected position");
151
+ }
152
+ });
153
+ it("Should be able to find backward marker position with multiple segments and markers", () => {
154
+ const markerLabel = "EOP";
155
+ Array.from({ length: MaxNodesInBlock ** 3 * 2 }).forEach((_, i) => client.insertTextLocal(0, i.toString()));
156
+ // pad the string with markers on both ends so we never get undefined solely for convenience of this test
157
+ for (let i = 0; i <= client.getLength(); i += 3) {
158
+ client.insertMarkerLocal(i, ReferenceType.Tile, {
159
+ [reservedTileLabelsKey]: [markerLabel],
160
+ [reservedMarkerIdKey]: "some-id",
161
+ });
162
+ }
163
+ for (let index = client.getLength() - 1; index >= 0; index--) {
164
+ const marker = client.searchForMarker(index, markerLabel, false);
165
+ assert(marker, `Returned marker undefined @ ${index}.`);
166
+ const exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
167
+ assert.equal(exp, index - (index % 3), "Marker with label not at expected position");
168
+ }
169
+ });
170
+ it("Should be able to find distant forward marker", () => {
171
+ const markerLabel = "EOP";
172
+ Array.from({ length: MaxNodesInBlock ** 3 * 2 }).forEach((_, i) => client.insertTextLocal(0, i.toString()));
173
+ for (let i = 10; i > 1; i -= 2) {
174
+ client.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {
175
+ [reservedTileLabelsKey]: [markerLabel],
176
+ [reservedMarkerIdKey]: "some-id",
177
+ });
178
+ }
179
+ for (let index = 0; index < client.getLength(); index++) {
180
+ const exp = client.slowSearchForMarker(index, markerLabel, true);
181
+ const actual = client.searchForMarker(index, markerLabel, true);
182
+ assert.equal(exp, actual, "Marker with label not at expected position");
183
+ }
184
+ });
185
+ it("Should be able to find distant backward marker", () => {
186
+ const markerLabel = "EOP";
187
+ Array.from({ length: MaxNodesInBlock ** 3 * 2 }).forEach((_, i) => client.insertTextLocal(0, i.toString()));
188
+ for (let i = 10; i > 1; i -= 2) {
189
+ client.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {
190
+ [reservedTileLabelsKey]: [markerLabel],
191
+ [reservedMarkerIdKey]: "some-id",
192
+ });
193
+ }
194
+ for (let index = client.getLength() - 1; index >= 0; index--) {
195
+ const exp = client.slowSearchForMarker(index, markerLabel, false);
196
+ const actual = client.searchForMarker(index, markerLabel, false);
197
+ assert.equal(exp, actual, "Marker with label not at expected position");
198
+ }
199
+ });
200
+ it("Should match results from forwardExcursion for many segments", () => {
201
+ const markerLabel = "EOP";
202
+ Array.from({ length: MaxNodesInBlock * 3 }).forEach((_, i) => client.insertTextLocal(0, i.toString()));
203
+ const random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());
204
+ for (let i = 0; i <= client.getLength() / 6; i++) {
205
+ const pos = random.integer(0, client.getLength() - 1);
206
+ client.insertMarkerLocal(pos, ReferenceType.Tile, {
207
+ [reservedTileLabelsKey]: [markerLabel],
208
+ [reservedMarkerIdKey]: "some-id",
209
+ });
210
+ }
211
+ for (let index = 0; index < client.getLength(); index++) {
212
+ const exp = client.slowSearchForMarker(index, markerLabel, true);
213
+ const actual = client.searchForMarker(index, markerLabel, true);
214
+ assert.equal(exp, actual, "Marker with label not at expected position");
215
+ }
216
+ });
217
+ it("Should match results from backwardExcursion for many segments", () => {
218
+ const markerLabel = "EOP";
219
+ Array.from({ length: MaxNodesInBlock * 3 }).forEach((_, i) => client.insertTextLocal(0, i.toString()));
220
+ const random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());
221
+ for (let i = 0; i <= client.getLength() / 6; i++) {
222
+ const pos = random.integer(0, client.getLength() - 1);
223
+ client.insertMarkerLocal(pos, ReferenceType.Tile, {
224
+ [reservedTileLabelsKey]: [markerLabel],
225
+ [reservedMarkerIdKey]: "some-id",
226
+ });
227
+ }
228
+ for (let index = 0; index < client.getLength(); index++) {
229
+ const exp = client.slowSearchForMarker(index, markerLabel, false);
230
+ const actual = client.searchForMarker(index, markerLabel, false);
231
+ assert.equal(exp, actual, "Marker with label not at expected position");
232
+ }
233
+ });
234
+ it("Should be able to find marker from client with text length 1", () => {
235
+ const markerLabel = "EOP";
236
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
237
+ [reservedTileLabelsKey]: [markerLabel],
238
+ [reservedMarkerIdKey]: "some-id",
239
+ });
240
+ assert.equal(client.getLength(), 1, "length not expected");
241
+ const marker = client.searchForMarker(client.getLength() - 1, markerLabel, false);
242
+ assert(marker, "Returned marker undefined.");
243
+ let exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
244
+ assert.equal(exp, 0, "Marker with label not at expected position");
245
+ const marker1 = client.searchForMarker(0, markerLabel, true);
246
+ assert(marker1, "Returned marker undefined.");
247
+ exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
248
+ assert.equal(exp, 0, "Marker with label not at expected position");
249
+ });
250
+ it("Should not be able to find marker position with index out of bound", () => {
251
+ const markerLabel = "EOP";
252
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
253
+ [reservedTileLabelsKey]: [markerLabel],
254
+ [reservedMarkerIdKey]: "some-id",
255
+ });
256
+ client.insertTextLocal(0, "abc");
257
+ assert.equal(client.getLength(), 4, "length not expected");
258
+ const marker = client.searchForMarker(5, markerLabel, true);
259
+ assert.equal(marker, undefined, "Returned marker should be undefined.");
260
+ const marker1 = client.searchForMarker(5, markerLabel, false);
261
+ assert.equal(marker1, undefined, "Returned marker should be undefined.");
262
+ const marker2 = client.searchForMarker(-1, markerLabel, false);
263
+ assert.equal(marker2, undefined, "Returned marker should be undefined.");
264
+ });
265
+ it("Should be able to find a deleted and rolled back marker", () => {
266
+ client.insertTextLocal(0, "abc");
267
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
268
+ [reservedMarkerIdKey]: "marker",
269
+ [reservedTileLabelsKey]: ["Eop"],
270
+ });
271
+ client.removeRangeLocal(0, 1);
272
+ client.rollback?.({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
273
+ const marker = client.searchForMarker(0, "Eop", true);
274
+ assert(marker, "Returned marker undefined.");
275
+ const exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
276
+ assert.equal(exp, 0, "Marker with label not at expected position");
277
+ });
278
+ it("Should not be able to find an inserted and rolled back marker", () => {
279
+ client.insertTextLocal(0, "abc");
280
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
281
+ [reservedMarkerIdKey]: "marker",
282
+ [reservedTileLabelsKey]: ["Eop"],
283
+ });
284
+ client.rollback?.({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
285
+ const marker = client.searchForMarker(0, "Eop", true);
286
+ assert.equal(marker, undefined, "Returned marker should be undefined.");
287
+ });
288
+ it("Should be able to find a marker at 0 searching at 0 in both directions", () => {
289
+ client.insertTextLocal(0, "abc");
290
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
291
+ [reservedMarkerIdKey]: "marker",
292
+ [reservedTileLabelsKey]: ["Eop"],
293
+ });
294
+ assert.equal(client.getLength(), 4);
295
+ const marker = client.searchForMarker(0, "Eop", true);
296
+ assert(marker, "Returned marker undefined.");
297
+ let exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
298
+ assert.equal(exp, 0, "Marker with label not at expected position");
299
+ const marker2 = client.searchForMarker(0, "Eop", false);
300
+ assert(marker2, "Returned marker undefined.");
301
+ exp = client.mergeTree.referencePositionToLocalPosition(marker2, UniversalSequenceNumber, client.getClientId());
302
+ assert.equal(exp, 0, "Marker with label not at expected position");
303
+ });
304
+ it("Should be able to find a marker at length-1 searching at length-1 in both directions", () => {
305
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
306
+ [reservedMarkerIdKey]: "marker",
307
+ [reservedTileLabelsKey]: ["Eop"],
308
+ });
309
+ client.insertTextLocal(0, "abc");
310
+ const length = client.getLength();
311
+ assert.equal(length, 4);
312
+ const marker = client.searchForMarker(length - 1, "Eop", true);
313
+ assert(marker, "Returned marker undefined.");
314
+ let exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
315
+ assert.equal(exp, length - 1, "Marker with label not at expected position");
316
+ const marker2 = client.searchForMarker(length - 1, "Eop", false);
317
+ assert(marker2, "Returned marker undefined.");
318
+ exp = client.mergeTree.referencePositionToLocalPosition(marker2, UniversalSequenceNumber, client.getClientId());
319
+ assert.equal(exp, length - 1, "Marker with label not at expected position");
320
+ });
321
+ it("Should return undefined when searching past the end of a string length 1", () => {
322
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
323
+ [reservedMarkerIdKey]: "marker",
324
+ [reservedTileLabelsKey]: ["Eop"],
325
+ });
326
+ assert.equal(client.getLength(), 1);
327
+ const marker = client.searchForMarker(client.getLength(), "Eop", true);
328
+ assert.equal(marker, undefined, "Returned marker should be undefined.");
329
+ });
330
+ it("Should return undefined when searching before the start of a string length 1", () => {
331
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
332
+ [reservedMarkerIdKey]: "marker",
333
+ [reservedTileLabelsKey]: ["Eop"],
334
+ });
335
+ assert.equal(client.getLength(), 1);
336
+ const marker = client.searchForMarker(-1, "Eop", false);
337
+ assert.equal(marker, undefined, "Returned marker should be undefined.");
338
+ });
339
+ it("Should return undefined when searching past the end of a string length > 1", () => {
340
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
341
+ [reservedMarkerIdKey]: "marker",
342
+ [reservedTileLabelsKey]: ["Eop"],
343
+ });
344
+ client.insertTextLocal(0, "abc");
345
+ assert.equal(client.getLength(), 4);
346
+ const marker = client.searchForMarker(client.getLength(), "Eop", true);
347
+ assert.equal(marker, undefined, "Returned marker should be undefined.");
348
+ });
349
+ it("Should return undefined when searching before the start of a string length > 1", () => {
350
+ client.insertTextLocal(0, "abc");
351
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
352
+ [reservedMarkerIdKey]: "marker",
353
+ [reservedTileLabelsKey]: ["Eop"],
354
+ });
355
+ assert.equal(client.getLength(), 4);
356
+ const marker = client.searchForMarker(-1, "Eop", false);
357
+ assert.equal(marker, undefined, "Returned marker should be undefined.");
358
+ });
359
+ it("Should return undefined when trying to find marker from text without the specified marker", () => {
360
+ const markerLabel = "EOP";
361
+ client.insertTextLocal(0, "abc");
362
+ assert.equal(client.getLength(), 3, "length not expected");
363
+ const marker = client.searchForMarker(1, markerLabel);
364
+ assert.equal(marker, undefined, "Returned marker should be undefined.");
365
+ const marker1 = client.searchForMarker(1, markerLabel, false);
366
+ assert.equal(marker1, undefined, "Returned marker should be undefined.");
367
+ });
368
+ it("Should return undefined when trying to find marker from null text", () => {
369
+ const markerLabel = "EOP";
370
+ const marker = client.searchForMarker(1, markerLabel);
371
+ assert.equal(marker, undefined, "Returned marker should be undefined.");
372
+ const marker1 = client.searchForMarker(1, markerLabel, false);
373
+ assert.equal(marker1, undefined, "Returned marker should be undefined.");
374
+ });
375
+ it("Should return undefined when trying to find a removed marker", () => {
376
+ client.insertTextLocal(0, "abc");
377
+ client.insertMarkerLocal(0, ReferenceType.Tile, {
378
+ [reservedMarkerIdKey]: "marker",
379
+ [reservedTileLabelsKey]: ["Eop"],
380
+ });
381
+ assert.equal(client.getLength(), 4, "length not expected");
382
+ client.removeRangeLocal(0, 1);
383
+ assert.equal(client.getLength(), 3, "length not expected");
384
+ const marker = client.searchForMarker(0, "Eop", true);
385
+ assert.equal(marker, undefined, "Returned marker should be undefined");
386
+ });
387
+ describe("with remote client", () => {
388
+ const remoteUserLongId = "remoteUser";
389
+ let client2;
390
+ beforeEach(() => {
391
+ client2 = new TestClient();
392
+ insertSegments({
393
+ mergeTree: client2.mergeTree,
394
+ pos: 0,
395
+ segments: [TextSegment.make("")],
396
+ refSeq: UniversalSequenceNumber,
397
+ clientId: client2.getClientId(),
398
+ seq: UniversalSequenceNumber,
399
+ opArgs: undefined,
400
+ });
401
+ client2.startOrUpdateCollaboration(remoteUserLongId);
402
+ });
403
+ it("Should be able to find remotely inserted marker", () => {
404
+ let seq = 0;
405
+ const textMsg = client.makeOpMessage(client.insertTextLocal(0, "abc"), ++seq);
406
+ const markerMsg = client2.makeOpMessage(client2.insertMarkerLocal(0, ReferenceType.Tile, {
407
+ [reservedMarkerIdKey]: "marker",
408
+ [reservedTileLabelsKey]: ["Eop"],
409
+ }), ++seq);
410
+ client.applyMsg(textMsg);
411
+ client2.applyMsg(textMsg);
412
+ client.applyMsg(markerMsg);
413
+ client2.applyMsg(markerMsg);
414
+ assert.equal(client.getLength(), 4, "length not expected - client");
415
+ assert.equal(client2.getLength(), 4, "length not expected - client 2");
416
+ const marker = client.searchForMarker(0, "Eop", true);
417
+ assert(marker, "Returned marker undefined");
418
+ const exp = client.mergeTree.referencePositionToLocalPosition(marker, UniversalSequenceNumber, client.getClientId());
419
+ assert.equal(exp, 0, "Marker with label not at expected position");
420
+ });
421
+ it("Should not be able to find remotely removed marker", () => {
422
+ let seq = 0;
423
+ const textMsg = client.makeOpMessage(client.insertTextLocal(0, "abc"), ++seq);
424
+ const mInsertMsg = client.makeOpMessage(client.insertMarkerLocal(0, ReferenceType.Tile, {
425
+ [reservedMarkerIdKey]: "marker",
426
+ [reservedTileLabelsKey]: ["Eop"],
427
+ }), seq);
428
+ client.applyMsg(textMsg);
429
+ client2.applyMsg(textMsg);
430
+ client.applyMsg(mInsertMsg);
431
+ client2.applyMsg(mInsertMsg);
432
+ assert.equal(client.getLength(), 4, "length not expected - client");
433
+ assert.equal(client2.getLength(), 4, "length not expected - client 2");
434
+ const mRemoveMsg = client2.makeOpMessage(client2.removeRangeLocal(0, 1), seq);
435
+ client.applyMsg(mRemoveMsg);
436
+ client2.applyMsg(mRemoveMsg);
437
+ assert.equal(client.getLength(), 3, "length not expected - client");
438
+ assert.equal(client2.getLength(), 3, "length not expected - client 2");
439
+ const marker = client.searchForMarker(0, "Eop", true);
440
+ assert.equal(marker, undefined, "Returned marker should be undefined.");
441
+ });
442
+ });
443
+ });
444
+ describe(".getMarkerById", () => {
445
+ it("removed marker", () => {
446
+ const clients = createClientsAtInitialState({ initialState: "hello world" }, "A", "B");
447
+ const randomMarkerKey = "randomKey1";
448
+ assert(!clients.A.getMarkerFromId(randomMarkerKey), "local client before insert");
449
+ const ops = [
450
+ clients.A.makeOpMessage(clients.A.insertMarkerLocal(5, ReferenceType.Simple, {
451
+ [reservedMarkerIdKey]: randomMarkerKey,
452
+ }), 1),
453
+ ];
454
+ assert(clients.A.getMarkerFromId(randomMarkerKey), "local client after insert before ack");
455
+ ops.splice(0).forEach((op) => {
456
+ clients.all.forEach((c) => c.applyMsg(op));
457
+ });
458
+ assert(clients.A.getMarkerFromId(randomMarkerKey), "local client after insert after ack");
459
+ assert(clients.B.getMarkerFromId(randomMarkerKey), "remote client after insert after ack");
460
+ ops.push(clients.A.makeOpMessage(clients.A.removeRangeLocal(5, 6), 1));
461
+ assert(!clients.A.getMarkerFromId(randomMarkerKey), "local client after remove before ack");
462
+ assert(clients.B.getMarkerFromId(randomMarkerKey), "remote client after remove before ack");
463
+ ops.splice(0).forEach((op) => {
464
+ clients.all.forEach((c) => c.applyMsg(op));
465
+ });
466
+ assert(!clients.A.getMarkerFromId(randomMarkerKey), "local client after remove after ack");
467
+ assert(!clients.B.getMarkerFromId(randomMarkerKey), "remote client after remove after ack");
468
+ });
469
+ it("obliterate marker", () => {
470
+ const clients = createClientsAtInitialState({ initialState: "hello world", options: { mergeTreeEnableObliterate: true } }, "A", "B");
471
+ const randomMarkerKey = "randomKey1";
472
+ assert(!clients.A.getMarkerFromId(randomMarkerKey), "local client before insert");
473
+ const ops = [
474
+ clients.A.makeOpMessage(clients.A.insertMarkerLocal(5, ReferenceType.Simple, {
475
+ [reservedMarkerIdKey]: randomMarkerKey,
476
+ }), 1),
477
+ ];
478
+ assert(clients.A.getMarkerFromId(randomMarkerKey), "local client after insert before ack");
479
+ ops.splice(0).forEach((op) => {
480
+ clients.all.forEach((c) => c.applyMsg(op));
481
+ });
482
+ assert(clients.A.getMarkerFromId(randomMarkerKey), "local client after insert after ack");
483
+ assert(clients.B.getMarkerFromId(randomMarkerKey), "remote client after insert after ack");
484
+ ops.push(clients.A.makeOpMessage(clients.A.obliterateRangeLocal(5, 6), 1));
485
+ assert(!clients.A.getMarkerFromId(randomMarkerKey), "local client after obliterate before ack");
486
+ assert(clients.B.getMarkerFromId(randomMarkerKey), "remote client after obliterate before ack");
487
+ ops.splice(0).forEach((op) => {
488
+ clients.all.forEach((c) => c.applyMsg(op));
489
+ });
490
+ assert(!clients.A.getMarkerFromId(randomMarkerKey), "local client after obliterate after ack");
491
+ assert(!clients.B.getMarkerFromId(randomMarkerKey), "remote client after obliterate after ack");
492
+ });
493
+ });
494
+ });
495
+ //# sourceMappingURL=client.searchForMarker.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.searchForMarker.spec.js","sourceRoot":"","sources":["../../src/test/client.searchForMarker.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 { makeRandom } from \"@fluid-private/stochastic-test-utils\";\nimport { UniversalSequenceNumber } from \"../constants.js\";\nimport { reservedMarkerIdKey, MaxNodesInBlock } from \"../mergeTreeNodes.js\";\nimport { MergeTreeDeltaType, ReferenceType } from \"../ops.js\";\nimport { reservedTileLabelsKey } from \"../referencePositions.js\";\nimport { TextSegment } from \"../textSegment.js\";\nimport { TestClient } from \"./testClient.js\";\nimport { insertSegments } from \"./testUtils.js\";\nimport { createClientsAtInitialState } from \"./testClientLogger.js\";\n\ndescribe(\"TestClient\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tinsertSegments({\n\t\t\tmergeTree: client.mergeTree,\n\t\t\tpos: 0,\n\t\t\tsegments: [TextSegment.make(\"\")],\n\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\tclientId: client.getClientId(),\n\t\t\tseq: UniversalSequenceNumber,\n\t\t\topArgs: undefined,\n\t\t});\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tdescribe(\".searchForMarker\", () => {\n\t\tit(\"Should return marker at the search position in either direction\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return the marker at the search position in either direction from multiple blocks\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcd\");\n\t\t\tclient.insertTextLocal(4, \"efg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 3, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label from client with single marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(1, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 6, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\t\t\tassert.equal(exp, 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position based on label from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 6, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tArray.from({ length: MaxNodesInBlock ** 3 * 2 }).forEach((_, i) =>\n\t\t\t\tclient.insertTextLocal(0, i.toString()),\n\t\t\t);\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tconst offset = index % 3 === 0 ? index % 3 : 3 - (index % 3);\n\t\t\t\tassert.equal(exp, index + offset, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tArray.from({ length: MaxNodesInBlock ** 3 * 2 }).forEach((_, i) =>\n\t\t\t\tclient.insertTextLocal(0, i.toString()),\n\t\t\t);\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(\n\t\t\t\t\texp,\n\t\t\t\t\tindex - (index % 3),\n\t\t\t\t\t\"Marker with label not at expected position\",\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant forward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tArray.from({ length: MaxNodesInBlock ** 3 * 2 }).forEach((_, i) =>\n\t\t\t\tclient.insertTextLocal(0, i.toString()),\n\t\t\t);\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant backward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tArray.from({ length: MaxNodesInBlock ** 3 * 2 }).forEach((_, i) =>\n\t\t\t\tclient.insertTextLocal(0, i.toString()),\n\t\t\t);\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from forwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tArray.from({ length: MaxNodesInBlock * 3 }).forEach((_, i) =>\n\t\t\t\tclient.insertTextLocal(0, i.toString()),\n\t\t\t);\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from backwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tArray.from({ length: MaxNodesInBlock * 3 }).forEach((_, i) =>\n\t\t\t\tclient.insertTextLocal(0, i.toString()),\n\t\t\t);\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find marker from client with text length 1\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(client.getLength() - 1, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker1 = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find marker position with index out of bound\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker2 = client.searchForMarker(-1, markerLabel, false);\n\n\t\t\tassert.equal(marker2, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a deleted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tclient.rollback?.(\n\t\t\t\t{ type: MergeTreeDeltaType.REMOVE },\n\t\t\t\tclient.peekPendingSegmentGroups(),\n\t\t\t);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find an inserted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.rollback?.(\n\t\t\t\t{ type: MergeTreeDeltaType.INSERT },\n\t\t\t\tclient.peekPendingSegmentGroups(),\n\t\t\t);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at 0 searching at 0 in both directions\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(0, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at length-1 searching at length-1 in both directions\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tconst length = client.getLength();\n\t\t\tassert.equal(length, 4);\n\n\t\t\tconst marker = client.searchForMarker(length - 1, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(length - 1, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length > 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length > 1\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from text without the specified marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from null text\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find a removed marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined\");\n\t\t});\n\n\t\tdescribe(\"with remote client\", () => {\n\t\t\tconst remoteUserLongId = \"remoteUser\";\n\t\t\tlet client2: TestClient;\n\t\t\tbeforeEach(() => {\n\t\t\t\tclient2 = new TestClient();\n\t\t\t\tinsertSegments({\n\t\t\t\t\tmergeTree: client2.mergeTree,\n\t\t\t\t\tpos: 0,\n\t\t\t\t\tsegments: [TextSegment.make(\"\")],\n\t\t\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\t\t\tclientId: client2.getClientId(),\n\t\t\t\t\tseq: UniversalSequenceNumber,\n\t\t\t\t\topArgs: undefined,\n\t\t\t\t});\n\t\t\t\tclient2.startOrUpdateCollaboration(remoteUserLongId);\n\t\t\t});\n\n\t\t\tit(\"Should be able to find remotely inserted marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst markerMsg = client2.makeOpMessage(\n\t\t\t\t\tclient2.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(markerMsg);\n\t\t\t\tclient2.applyMsg(markerMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert(marker, \"Returned marker undefined\");\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t\t});\n\n\t\t\tit(\"Should not be able to find remotely removed marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst mInsertMsg = client.makeOpMessage(\n\t\t\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\tseq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(mInsertMsg);\n\t\t\t\tclient2.applyMsg(mInsertMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst mRemoveMsg = client2.makeOpMessage(client2.removeRangeLocal(0, 1), seq);\n\t\t\t\tclient.applyMsg(mRemoveMsg);\n\t\t\t\tclient2.applyMsg(mRemoveMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 3, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 3, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\".getMarkerById\", () => {\n\t\tit(\"removed marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState({ initialState: \"hello world\" }, \"A\", \"B\");\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tops.splice(0).forEach((op) => {\n\t\t\t\tclients.all.forEach((c) => c.applyMsg(op));\n\t\t\t});\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.removeRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove before ack\",\n\t\t\t);\n\n\t\t\tops.splice(0).forEach((op) => {\n\t\t\t\tclients.all.forEach((c) => c.applyMsg(op));\n\t\t\t});\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove after ack\",\n\t\t\t);\n\t\t});\n\t\tit(\"obliterate marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"hello world\", options: { mergeTreeEnableObliterate: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t);\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tops.splice(0).forEach((op) => {\n\t\t\t\tclients.all.forEach((c) => c.applyMsg(op));\n\t\t\t});\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.obliterateRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate before ack\",\n\t\t\t);\n\n\t\t\tops.splice(0).forEach((op) => {\n\t\t\t\tclients.all.forEach((c) => c.applyMsg(op));\n\t\t\t});\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate after ack\",\n\t\t\t);\n\t\t});\n\t});\n});\n"]}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=client.walkSegments.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.walkSegments.spec.d.ts","sourceRoot":"","sources":["../../src/test/client.walkSegments.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}