@fluidframework/merge-tree 2.0.0-rc.2.0.1 → 2.0.0-rc.3.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 (461) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/api-report/merge-tree.api.md +16 -4
  3. package/dist/MergeTreeTextHelper.d.ts.map +1 -1
  4. package/dist/MergeTreeTextHelper.js.map +1 -1
  5. package/dist/attributionCollection.d.ts +1 -1
  6. package/dist/attributionCollection.d.ts.map +1 -1
  7. package/dist/attributionCollection.js +6 -6
  8. package/dist/attributionCollection.js.map +1 -1
  9. package/dist/attributionPolicy.d.ts +2 -2
  10. package/dist/attributionPolicy.d.ts.map +1 -1
  11. package/dist/attributionPolicy.js +5 -5
  12. package/dist/attributionPolicy.js.map +1 -1
  13. package/dist/client.d.ts +8 -8
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +37 -48
  16. package/dist/client.js.map +1 -1
  17. package/dist/collections/list.js +3 -3
  18. package/dist/collections/list.js.map +1 -1
  19. package/dist/endOfTreeSegment.d.ts +5 -5
  20. package/dist/endOfTreeSegment.d.ts.map +1 -1
  21. package/dist/endOfTreeSegment.js +2 -2
  22. package/dist/endOfTreeSegment.js.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +4 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/legacy.d.ts +76 -0
  28. package/dist/localReference.d.ts.map +1 -1
  29. package/dist/localReference.js +7 -7
  30. package/dist/localReference.js.map +1 -1
  31. package/dist/mergeTree.d.ts +8 -8
  32. package/dist/mergeTree.d.ts.map +1 -1
  33. package/dist/mergeTree.js +44 -57
  34. package/dist/mergeTree.js.map +1 -1
  35. package/dist/mergeTreeDeltaCallback.d.ts +1 -1
  36. package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
  37. package/dist/mergeTreeDeltaCallback.js +4 -0
  38. package/dist/mergeTreeDeltaCallback.js.map +1 -1
  39. package/dist/mergeTreeNodeWalk.d.ts +3 -3
  40. package/dist/mergeTreeNodeWalk.d.ts.map +1 -1
  41. package/dist/mergeTreeNodeWalk.js.map +1 -1
  42. package/dist/mergeTreeNodes.d.ts +37 -55
  43. package/dist/mergeTreeNodes.d.ts.map +1 -1
  44. package/dist/mergeTreeNodes.js +40 -19
  45. package/dist/mergeTreeNodes.js.map +1 -1
  46. package/dist/opBuilder.d.ts +1 -1
  47. package/dist/opBuilder.d.ts.map +1 -1
  48. package/dist/opBuilder.js.map +1 -1
  49. package/dist/ordinal.js +2 -2
  50. package/dist/ordinal.js.map +1 -1
  51. package/dist/partialLengths.d.ts +6 -6
  52. package/dist/partialLengths.d.ts.map +1 -1
  53. package/dist/partialLengths.js +13 -13
  54. package/dist/partialLengths.js.map +1 -1
  55. package/dist/public.d.ts +12 -0
  56. package/dist/revertibles.d.ts +1 -1
  57. package/dist/revertibles.d.ts.map +1 -1
  58. package/dist/revertibles.js +15 -15
  59. package/dist/revertibles.js.map +1 -1
  60. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  61. package/dist/segmentPropertiesManager.js +2 -2
  62. package/dist/segmentPropertiesManager.js.map +1 -1
  63. package/dist/snapshotChunks.d.ts +2 -2
  64. package/dist/snapshotChunks.d.ts.map +1 -1
  65. package/dist/snapshotChunks.js.map +1 -1
  66. package/dist/snapshotLoader.d.ts +2 -2
  67. package/dist/snapshotLoader.d.ts.map +1 -1
  68. package/dist/snapshotLoader.js +11 -11
  69. package/dist/snapshotLoader.js.map +1 -1
  70. package/dist/snapshotV1.d.ts +3 -3
  71. package/dist/snapshotV1.d.ts.map +1 -1
  72. package/dist/snapshotV1.js +10 -10
  73. package/dist/snapshotV1.js.map +1 -1
  74. package/dist/snapshotlegacy.d.ts +4 -4
  75. package/dist/snapshotlegacy.d.ts.map +1 -1
  76. package/dist/snapshotlegacy.js +9 -10
  77. package/dist/snapshotlegacy.js.map +1 -1
  78. package/dist/test/Insertion.perf.spec.js.map +1 -1
  79. package/dist/test/PartialLengths.perf.spec.js +1 -1
  80. package/dist/test/PartialLengths.perf.spec.js.map +1 -1
  81. package/dist/test/Removal.perf.spec.js +1 -1
  82. package/dist/test/Removal.perf.spec.js.map +1 -1
  83. package/dist/test/Snapshot.perf.spec.js.map +1 -1
  84. package/dist/test/attributionCollection.perf.spec.js +2 -2
  85. package/dist/test/attributionCollection.perf.spec.js.map +1 -1
  86. package/dist/test/attributionCollection.spec.js.map +1 -1
  87. package/dist/test/attributionPolicy.spec.js.map +1 -1
  88. package/dist/test/beastTest.spec.d.ts.map +1 -1
  89. package/dist/test/beastTest.spec.js +7 -7
  90. package/dist/test/beastTest.spec.js.map +1 -1
  91. package/dist/test/client.annotateMarker.spec.js.map +1 -1
  92. package/dist/test/client.apis.spec.d.ts.map +1 -1
  93. package/dist/test/client.apis.spec.js.map +1 -1
  94. package/dist/test/client.applyMsg.spec.js +2 -2
  95. package/dist/test/client.applyMsg.spec.js.map +1 -1
  96. package/dist/test/client.applyStashedOpFarm.spec.d.ts +1 -1
  97. package/dist/test/client.applyStashedOpFarm.spec.d.ts.map +1 -1
  98. package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -1
  99. package/dist/test/client.attributionFarm.spec.d.ts.map +1 -1
  100. package/dist/test/client.attributionFarm.spec.js +1 -1
  101. package/dist/test/client.attributionFarm.spec.js.map +1 -1
  102. package/dist/test/client.conflictFarm.spec.d.ts.map +1 -1
  103. package/dist/test/client.conflictFarm.spec.js.map +1 -1
  104. package/dist/test/client.getPosition.spec.js +1 -1
  105. package/dist/test/client.getPosition.spec.js.map +1 -1
  106. package/dist/test/client.localReference.spec.js +6 -6
  107. package/dist/test/client.localReference.spec.js.map +1 -1
  108. package/dist/test/client.localReferenceFarm.spec.js +2 -2
  109. package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
  110. package/dist/test/client.rebasePosition.spec.js.map +1 -1
  111. package/dist/test/client.reconnectFarm.spec.d.ts +1 -1
  112. package/dist/test/client.reconnectFarm.spec.d.ts.map +1 -1
  113. package/dist/test/client.reconnectFarm.spec.js +1 -1
  114. package/dist/test/client.reconnectFarm.spec.js.map +1 -1
  115. package/dist/test/client.replay.spec.js +4 -4
  116. package/dist/test/client.replay.spec.js.map +1 -1
  117. package/dist/test/client.rollback.spec.js +2 -2
  118. package/dist/test/client.rollback.spec.js.map +1 -1
  119. package/dist/test/client.rollbackFarm.spec.js.map +1 -1
  120. package/dist/test/client.searchForMarker.spec.js +1 -1
  121. package/dist/test/client.searchForMarker.spec.js.map +1 -1
  122. package/dist/test/client.walkSegments.spec.js.map +1 -1
  123. package/dist/test/collections.list.spec.js.map +1 -1
  124. package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
  125. package/dist/test/mergeTree.annotate.deltaCallback.spec.js +3 -3
  126. package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  127. package/dist/test/mergeTree.annotate.spec.js +1 -1
  128. package/dist/test/mergeTree.annotate.spec.js.map +1 -1
  129. package/dist/test/mergeTree.insert.deltaCallback.spec.js +1 -1
  130. package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  131. package/dist/test/mergeTree.insertingWalk.spec.js +3 -3
  132. package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
  133. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +1 -1
  134. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  135. package/dist/test/mergeTree.markRangeRemoved.spec.js +1 -1
  136. package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  137. package/dist/test/mergeTree.walk.spec.js +2 -2
  138. package/dist/test/mergeTree.walk.spec.js.map +1 -1
  139. package/dist/test/mergeTree.zamboni.spec.js.map +1 -1
  140. package/dist/test/mergeTreeOperationRunner.d.ts +2 -2
  141. package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -1
  142. package/dist/test/mergeTreeOperationRunner.js +3 -3
  143. package/dist/test/mergeTreeOperationRunner.js.map +1 -1
  144. package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -1
  145. package/dist/test/obliterate.concurrent.spec.js +2 -2
  146. package/dist/test/obliterate.concurrent.spec.js.map +1 -1
  147. package/dist/test/obliterate.deltaCallback.spec.js +1 -1
  148. package/dist/test/obliterate.deltaCallback.spec.js.map +1 -1
  149. package/dist/test/obliterate.partialLength.spec.js.map +1 -1
  150. package/dist/test/obliterate.reconnect.spec.js.map +1 -1
  151. package/dist/test/obliterate.spec.js.map +1 -1
  152. package/dist/test/ordinal.spec.d.ts +4 -0
  153. package/dist/test/ordinal.spec.d.ts.map +1 -1
  154. package/dist/test/ordinal.spec.js +4 -4
  155. package/dist/test/ordinal.spec.js.map +1 -1
  156. package/dist/test/partialLength.spec.js.map +1 -1
  157. package/dist/test/properties.spec.js.map +1 -1
  158. package/dist/test/reconnectHelper.d.ts +1 -1
  159. package/dist/test/reconnectHelper.d.ts.map +1 -1
  160. package/dist/test/reconnectHelper.js.map +1 -1
  161. package/dist/test/resetPendingSegmentsToOp.spec.js +1 -1
  162. package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  163. package/dist/test/revertibleFarm.spec.js +1 -1
  164. package/dist/test/revertibleFarm.spec.js.map +1 -1
  165. package/dist/test/revertibles.spec.d.ts.map +1 -1
  166. package/dist/test/revertibles.spec.js +1 -1
  167. package/dist/test/revertibles.spec.js.map +1 -1
  168. package/dist/test/segmentGroupCollection.spec.js.map +1 -1
  169. package/dist/test/snapshot.spec.js +1 -1
  170. package/dist/test/snapshot.spec.js.map +1 -1
  171. package/dist/test/snapshot.utils.d.ts +1 -1
  172. package/dist/test/snapshot.utils.d.ts.map +1 -1
  173. package/dist/test/snapshot.utils.js +3 -3
  174. package/dist/test/snapshot.utils.js.map +1 -1
  175. package/dist/test/snapshotlegacy.spec.js +8 -8
  176. package/dist/test/snapshotlegacy.spec.js.map +1 -1
  177. package/dist/test/sortedSegmentSet.spec.js +2 -2
  178. package/dist/test/sortedSegmentSet.spec.js.map +1 -1
  179. package/dist/test/testClient.d.ts +5 -5
  180. package/dist/test/testClient.d.ts.map +1 -1
  181. package/dist/test/testClient.js +11 -11
  182. package/dist/test/testClient.js.map +1 -1
  183. package/dist/test/testClientLogger.d.ts +1 -1
  184. package/dist/test/testClientLogger.d.ts.map +1 -1
  185. package/dist/test/testClientLogger.js +10 -8
  186. package/dist/test/testClientLogger.js.map +1 -1
  187. package/dist/test/testSerializer.d.ts.map +1 -1
  188. package/dist/test/testSerializer.js +2 -2
  189. package/dist/test/testSerializer.js.map +1 -1
  190. package/dist/test/testServer.d.ts +1 -1
  191. package/dist/test/testServer.d.ts.map +1 -1
  192. package/dist/test/testServer.js +4 -4
  193. package/dist/test/testServer.js.map +1 -1
  194. package/dist/test/testUtils.d.ts +5 -5
  195. package/dist/test/testUtils.d.ts.map +1 -1
  196. package/dist/test/testUtils.js +3 -3
  197. package/dist/test/testUtils.js.map +1 -1
  198. package/dist/test/text.d.ts +1 -1
  199. package/dist/test/text.d.ts.map +1 -1
  200. package/dist/test/text.js.map +1 -1
  201. package/dist/test/tracking.spec.js.map +1 -1
  202. package/dist/test/wordUnitTests.spec.d.ts.map +1 -1
  203. package/dist/test/wordUnitTests.spec.js +2 -2
  204. package/dist/test/wordUnitTests.spec.js.map +1 -1
  205. package/dist/textSegment.d.ts.map +1 -1
  206. package/dist/textSegment.js +2 -2
  207. package/dist/textSegment.js.map +1 -1
  208. package/dist/zamboni.d.ts +2 -2
  209. package/dist/zamboni.d.ts.map +1 -1
  210. package/dist/zamboni.js.map +1 -1
  211. package/internal.d.ts +11 -0
  212. package/legacy.d.ts +11 -0
  213. package/lib/MergeTreeTextHelper.d.ts.map +1 -1
  214. package/lib/MergeTreeTextHelper.js.map +1 -1
  215. package/lib/attributionCollection.d.ts +1 -1
  216. package/lib/attributionCollection.d.ts.map +1 -1
  217. package/lib/attributionCollection.js +1 -1
  218. package/lib/attributionCollection.js.map +1 -1
  219. package/lib/attributionPolicy.d.ts +2 -2
  220. package/lib/attributionPolicy.d.ts.map +1 -1
  221. package/lib/attributionPolicy.js +4 -4
  222. package/lib/attributionPolicy.js.map +1 -1
  223. package/lib/client.d.ts +8 -8
  224. package/lib/client.d.ts.map +1 -1
  225. package/lib/client.js +14 -25
  226. package/lib/client.js.map +1 -1
  227. package/lib/collections/list.js +1 -1
  228. package/lib/collections/list.js.map +1 -1
  229. package/lib/endOfTreeSegment.d.ts +5 -5
  230. package/lib/endOfTreeSegment.d.ts.map +1 -1
  231. package/lib/endOfTreeSegment.js +2 -2
  232. package/lib/endOfTreeSegment.js.map +1 -1
  233. package/lib/index.d.ts +1 -1
  234. package/lib/index.d.ts.map +1 -1
  235. package/lib/index.js +1 -1
  236. package/lib/index.js.map +1 -1
  237. package/lib/legacy.d.ts +76 -0
  238. package/lib/localReference.d.ts.map +1 -1
  239. package/lib/localReference.js +2 -2
  240. package/lib/localReference.js.map +1 -1
  241. package/lib/mergeTree.d.ts +8 -8
  242. package/lib/mergeTree.d.ts.map +1 -1
  243. package/lib/mergeTree.js +23 -36
  244. package/lib/mergeTree.js.map +1 -1
  245. package/lib/mergeTreeDeltaCallback.d.ts +1 -1
  246. package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
  247. package/lib/mergeTreeDeltaCallback.js +4 -0
  248. package/lib/mergeTreeDeltaCallback.js.map +1 -1
  249. package/lib/mergeTreeNodeWalk.d.ts +3 -3
  250. package/lib/mergeTreeNodeWalk.d.ts.map +1 -1
  251. package/lib/mergeTreeNodeWalk.js.map +1 -1
  252. package/lib/mergeTreeNodes.d.ts +37 -55
  253. package/lib/mergeTreeNodes.d.ts.map +1 -1
  254. package/lib/mergeTreeNodes.js +28 -8
  255. package/lib/mergeTreeNodes.js.map +1 -1
  256. package/lib/opBuilder.d.ts +1 -1
  257. package/lib/opBuilder.d.ts.map +1 -1
  258. package/lib/opBuilder.js.map +1 -1
  259. package/lib/ordinal.js +1 -1
  260. package/lib/ordinal.js.map +1 -1
  261. package/lib/partialLengths.d.ts +6 -6
  262. package/lib/partialLengths.d.ts.map +1 -1
  263. package/lib/partialLengths.js +3 -3
  264. package/lib/partialLengths.js.map +1 -1
  265. package/lib/public.d.ts +12 -0
  266. package/lib/revertibles.d.ts +1 -1
  267. package/lib/revertibles.d.ts.map +1 -1
  268. package/lib/revertibles.js +4 -4
  269. package/lib/revertibles.js.map +1 -1
  270. package/lib/segmentPropertiesManager.d.ts.map +1 -1
  271. package/lib/segmentPropertiesManager.js +1 -1
  272. package/lib/segmentPropertiesManager.js.map +1 -1
  273. package/lib/snapshotChunks.d.ts +2 -2
  274. package/lib/snapshotChunks.d.ts.map +1 -1
  275. package/lib/snapshotChunks.js.map +1 -1
  276. package/lib/snapshotLoader.d.ts +2 -2
  277. package/lib/snapshotLoader.d.ts.map +1 -1
  278. package/lib/snapshotLoader.js +2 -2
  279. package/lib/snapshotLoader.js.map +1 -1
  280. package/lib/snapshotV1.d.ts +3 -3
  281. package/lib/snapshotV1.d.ts.map +1 -1
  282. package/lib/snapshotV1.js +5 -5
  283. package/lib/snapshotV1.js.map +1 -1
  284. package/lib/snapshotlegacy.d.ts +4 -4
  285. package/lib/snapshotlegacy.d.ts.map +1 -1
  286. package/lib/snapshotlegacy.js +3 -4
  287. package/lib/snapshotlegacy.js.map +1 -1
  288. package/lib/test/Insertion.perf.spec.js +1 -1
  289. package/lib/test/Insertion.perf.spec.js.map +1 -1
  290. package/lib/test/PartialLengths.perf.spec.js +2 -2
  291. package/lib/test/PartialLengths.perf.spec.js.map +1 -1
  292. package/lib/test/Removal.perf.spec.js +2 -2
  293. package/lib/test/Removal.perf.spec.js.map +1 -1
  294. package/lib/test/Snapshot.perf.spec.js +2 -2
  295. package/lib/test/Snapshot.perf.spec.js.map +1 -1
  296. package/lib/test/attributionCollection.perf.spec.js +4 -4
  297. package/lib/test/attributionCollection.perf.spec.js.map +1 -1
  298. package/lib/test/attributionCollection.spec.js.map +1 -1
  299. package/lib/test/attributionPolicy.spec.js.map +1 -1
  300. package/lib/test/beastTest.spec.d.ts.map +1 -1
  301. package/lib/test/beastTest.spec.js +8 -8
  302. package/lib/test/beastTest.spec.js.map +1 -1
  303. package/lib/test/client.annotateMarker.spec.js.map +1 -1
  304. package/lib/test/client.apis.spec.d.ts.map +1 -1
  305. package/lib/test/client.apis.spec.js.map +1 -1
  306. package/lib/test/client.applyMsg.spec.js +3 -3
  307. package/lib/test/client.applyMsg.spec.js.map +1 -1
  308. package/lib/test/client.applyStashedOpFarm.spec.d.ts +1 -1
  309. package/lib/test/client.applyStashedOpFarm.spec.d.ts.map +1 -1
  310. package/lib/test/client.applyStashedOpFarm.spec.js +1 -1
  311. package/lib/test/client.applyStashedOpFarm.spec.js.map +1 -1
  312. package/lib/test/client.attributionFarm.spec.d.ts.map +1 -1
  313. package/lib/test/client.attributionFarm.spec.js +2 -2
  314. package/lib/test/client.attributionFarm.spec.js.map +1 -1
  315. package/lib/test/client.conflictFarm.spec.d.ts.map +1 -1
  316. package/lib/test/client.conflictFarm.spec.js +1 -1
  317. package/lib/test/client.conflictFarm.spec.js.map +1 -1
  318. package/lib/test/client.getPosition.spec.js.map +1 -1
  319. package/lib/test/client.localReference.spec.js +5 -5
  320. package/lib/test/client.localReference.spec.js.map +1 -1
  321. package/lib/test/client.localReferenceFarm.spec.js +2 -2
  322. package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
  323. package/lib/test/client.rebasePosition.spec.js.map +1 -1
  324. package/lib/test/client.reconnectFarm.spec.d.ts +1 -1
  325. package/lib/test/client.reconnectFarm.spec.d.ts.map +1 -1
  326. package/lib/test/client.reconnectFarm.spec.js +2 -2
  327. package/lib/test/client.reconnectFarm.spec.js.map +1 -1
  328. package/lib/test/client.replay.spec.js +3 -3
  329. package/lib/test/client.replay.spec.js.map +1 -1
  330. package/lib/test/client.rollback.spec.js +1 -1
  331. package/lib/test/client.rollback.spec.js.map +1 -1
  332. package/lib/test/client.rollbackFarm.spec.js +1 -1
  333. package/lib/test/client.rollbackFarm.spec.js.map +1 -1
  334. package/lib/test/client.searchForMarker.spec.js +2 -2
  335. package/lib/test/client.searchForMarker.spec.js.map +1 -1
  336. package/lib/test/client.walkSegments.spec.js.map +1 -1
  337. package/lib/test/collections.list.spec.js.map +1 -1
  338. package/lib/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -1
  339. package/lib/test/mergeTree.annotate.deltaCallback.spec.js +3 -3
  340. package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  341. package/lib/test/mergeTree.annotate.spec.js +1 -1
  342. package/lib/test/mergeTree.annotate.spec.js.map +1 -1
  343. package/lib/test/mergeTree.insert.deltaCallback.spec.js +1 -1
  344. package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  345. package/lib/test/mergeTree.insertingWalk.spec.js +3 -3
  346. package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
  347. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +1 -1
  348. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  349. package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  350. package/lib/test/mergeTree.walk.spec.js +2 -2
  351. package/lib/test/mergeTree.walk.spec.js.map +1 -1
  352. package/lib/test/mergeTree.zamboni.spec.js +1 -1
  353. package/lib/test/mergeTree.zamboni.spec.js.map +1 -1
  354. package/lib/test/mergeTreeOperationRunner.d.ts +2 -2
  355. package/lib/test/mergeTreeOperationRunner.d.ts.map +1 -1
  356. package/lib/test/mergeTreeOperationRunner.js +3 -3
  357. package/lib/test/mergeTreeOperationRunner.js.map +1 -1
  358. package/lib/test/mergeTreeOperationRunner.spec.js.map +1 -1
  359. package/lib/test/obliterate.concurrent.spec.js +1 -1
  360. package/lib/test/obliterate.concurrent.spec.js.map +1 -1
  361. package/lib/test/obliterate.deltaCallback.spec.js +1 -1
  362. package/lib/test/obliterate.deltaCallback.spec.js.map +1 -1
  363. package/lib/test/obliterate.partialLength.spec.js.map +1 -1
  364. package/lib/test/obliterate.reconnect.spec.js.map +1 -1
  365. package/lib/test/obliterate.spec.js.map +1 -1
  366. package/lib/test/ordinal.spec.d.ts +4 -0
  367. package/lib/test/ordinal.spec.d.ts.map +1 -1
  368. package/lib/test/ordinal.spec.js.map +1 -1
  369. package/lib/test/partialLength.spec.js.map +1 -1
  370. package/lib/test/properties.spec.js.map +1 -1
  371. package/lib/test/reconnectHelper.d.ts +1 -1
  372. package/lib/test/reconnectHelper.d.ts.map +1 -1
  373. package/lib/test/reconnectHelper.js +1 -1
  374. package/lib/test/reconnectHelper.js.map +1 -1
  375. package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  376. package/lib/test/revertibleFarm.spec.js +3 -3
  377. package/lib/test/revertibleFarm.spec.js.map +1 -1
  378. package/lib/test/revertibles.spec.d.ts.map +1 -1
  379. package/lib/test/revertibles.spec.js +2 -2
  380. package/lib/test/revertibles.spec.js.map +1 -1
  381. package/lib/test/segmentGroupCollection.spec.js.map +1 -1
  382. package/lib/test/snapshot.spec.js +2 -2
  383. package/lib/test/snapshot.spec.js.map +1 -1
  384. package/lib/test/snapshot.utils.d.ts +1 -1
  385. package/lib/test/snapshot.utils.d.ts.map +1 -1
  386. package/lib/test/snapshot.utils.js +2 -2
  387. package/lib/test/snapshot.utils.js.map +1 -1
  388. package/lib/test/snapshotlegacy.spec.js +4 -4
  389. package/lib/test/snapshotlegacy.spec.js.map +1 -1
  390. package/lib/test/sortedSegmentSet.spec.js +2 -2
  391. package/lib/test/sortedSegmentSet.spec.js.map +1 -1
  392. package/lib/test/testClient.d.ts +5 -5
  393. package/lib/test/testClient.d.ts.map +1 -1
  394. package/lib/test/testClient.js +7 -7
  395. package/lib/test/testClient.js.map +1 -1
  396. package/lib/test/testClientLogger.d.ts +1 -1
  397. package/lib/test/testClientLogger.d.ts.map +1 -1
  398. package/lib/test/testClientLogger.js +9 -7
  399. package/lib/test/testClientLogger.js.map +1 -1
  400. package/lib/test/testSerializer.d.ts.map +1 -1
  401. package/lib/test/testSerializer.js +1 -1
  402. package/lib/test/testSerializer.js.map +1 -1
  403. package/lib/test/testServer.d.ts +1 -1
  404. package/lib/test/testServer.d.ts.map +1 -1
  405. package/lib/test/testServer.js +2 -2
  406. package/lib/test/testServer.js.map +1 -1
  407. package/lib/test/testUtils.d.ts +5 -5
  408. package/lib/test/testUtils.d.ts.map +1 -1
  409. package/lib/test/testUtils.js +3 -3
  410. package/lib/test/testUtils.js.map +1 -1
  411. package/lib/test/text.d.ts +1 -1
  412. package/lib/test/text.d.ts.map +1 -1
  413. package/lib/test/text.js.map +1 -1
  414. package/lib/test/tracking.spec.js.map +1 -1
  415. package/lib/test/wordUnitTests.spec.d.ts.map +1 -1
  416. package/lib/test/wordUnitTests.spec.js +2 -2
  417. package/lib/test/wordUnitTests.spec.js.map +1 -1
  418. package/lib/textSegment.d.ts.map +1 -1
  419. package/lib/textSegment.js +1 -1
  420. package/lib/textSegment.js.map +1 -1
  421. package/lib/zamboni.d.ts +2 -2
  422. package/lib/zamboni.d.ts.map +1 -1
  423. package/lib/zamboni.js.map +1 -1
  424. package/package.json +37 -58
  425. package/src/MergeTreeTextHelper.ts +1 -1
  426. package/src/attributionCollection.ts +4 -3
  427. package/src/attributionPolicy.ts +7 -6
  428. package/src/client.ts +32 -45
  429. package/src/collections/list.ts +1 -1
  430. package/src/endOfTreeSegment.ts +5 -4
  431. package/src/index.ts +5 -1
  432. package/src/localReference.ts +4 -3
  433. package/src/mergeTree.ts +66 -84
  434. package/src/mergeTreeDeltaCallback.ts +3 -1
  435. package/src/mergeTreeNodeWalk.ts +6 -6
  436. package/src/mergeTreeNodes.ts +59 -61
  437. package/src/opBuilder.ts +3 -3
  438. package/src/ordinal.ts +1 -1
  439. package/src/partialLengths.ts +11 -10
  440. package/src/revertibles.ts +6 -5
  441. package/src/segmentPropertiesManager.ts +3 -2
  442. package/src/snapshotChunks.ts +3 -2
  443. package/src/snapshotLoader.ts +10 -12
  444. package/src/snapshotV1.ts +15 -12
  445. package/src/snapshotlegacy.ts +8 -6
  446. package/src/textSegment.ts +2 -1
  447. package/src/zamboni.ts +7 -7
  448. package/api-extractor-cjs.json +0 -8
  449. package/dist/merge-tree-alpha.d.ts +0 -1558
  450. package/dist/merge-tree-beta.d.ts +0 -230
  451. package/dist/merge-tree-public.d.ts +0 -230
  452. package/dist/merge-tree-untrimmed.d.ts +0 -1894
  453. package/lib/merge-tree-alpha.d.ts +0 -1558
  454. package/lib/merge-tree-beta.d.ts +0 -230
  455. package/lib/merge-tree-public.d.ts +0 -230
  456. package/lib/merge-tree-untrimmed.d.ts +0 -1894
  457. package/lib/test/types/validateMergeTreePrevious.generated.d.ts +0 -2
  458. package/lib/test/types/validateMergeTreePrevious.generated.d.ts.map +0 -1
  459. package/lib/test/types/validateMergeTreePrevious.generated.js +0 -228
  460. package/lib/test/types/validateMergeTreePrevious.generated.js.map +0 -1
  461. /package/{dist → lib}/tsdoc-metadata.json +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/collections/list.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qEAA6D;AAc7D,MAAM,QAAQ;IAKb,YAAY,IAAqC;QAJ1C,UAAK,GAA8B,IAAI,CAAC;QACxC,UAAK,GAA8B,IAAI,CAAC;QACxC,aAAQ,GAAgB,IAAI,CAAC;QAGnC,IAAI,IAAI,EAAE;YACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SAClB;IACF,CAAC;IACD,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,KAAqB,CAAC;IAC/E,CAAC;IACD,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,KAAqB,CAAC;IAC/E,CAAC;IACD,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC5B,CAAC;CACD;AAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAM,SAAS,CAAC,CAAC;AAE9C,MAAM,QAAY,SAAQ,QAAW;IACpC,YACC,QAAqB,EACL,IAAO;QAEvB,KAAK,CAAC,SAAS,CAAC,CAAC;QAFD,SAAI,GAAJ,IAAI,CAAG;QAGvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;CACD;AAED,SAAS,WAAW,CAAI,IAA+B,EAAE,KAAU;IAClE,IAAI,YAAY,GAAG,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC;IACnC,IAAI,QAAsC,CAAC;IAC3C,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC3B,QAAQ,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SAC7C;aAAM;YACN,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;SACxB;QACD,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;QAC7B,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC;QAC7B,YAAY,GAAG,OAAO,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;IAC7B,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC;IAC7B,oEAAoE;IACpE,oFAAoF;IACpF,yEAAyE;IACzE,iEAAiE;IACjE,8EAA8E;IAC9E,IAAI,QAAQ,KAAK,SAAS,EAAE;QAC3B,MAAM,IAAI,4BAAU,CAAC,yBAAyB,CAAC,CAAC;KAChD;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAa,gBAAgB;IAA7B;QA8IS,SAAI,GAAW,CAAC,CAAC;QACR,aAAQ,GAA8B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAc3E,CAAC;IAtJA,IAAI,CACH,SAAoE;QAEpE,IAAI,KAA8B,CAAC;QACnC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;gBAC1B,KAAK,GAAG,IAAI,CAAC;gBACb,OAAO,KAAK,CAAC;aACb;QACF,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACd,CAAC;IAED,GAAG,CAAI,UAAqC;QAC3C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACtB,MAAM,QAAQ,GAAwB;YACrC,IAAI;gBACH,IAAI,IAAI,KAAK,SAAS,EAAE;oBACvB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;iBACxC;gBACD,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACrD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACjB,OAAO,GAAG,CAAC;YACZ,CAAC;YACD,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAChB,OAAO,IAAI,CAAC;YACb,CAAC;SACD,CAAC;QACF,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,SAAsB,EAAE,GAAG,KAAU;QAChD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;SACzC;QACD,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QAC1B,OAAO,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,GAAG;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,GAAG,KAAU;QACjB,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClC,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,GAAG,KAAU;QACpB,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QAC1B,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAkB,EAAE,UAAiC;QAC3D,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAK,CAAC;QAC1C,QAAQ,CACP,IAAI,EACJ,CAAC,IAAI,EAAE,EAAE;YACR,oEAAoE;YACpE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC;YACxC,6CAA6C;YAC7C,qDAAqD;YACrD,uCAAuC;YACvC,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACxC,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;YACrC,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC;YAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC;YACrC,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE;gBACzD,OAAO,KAAK,CAAC;aACb;QACF,CAAC,EACD,KAAK,CACL,CAAC;QACF,OAAO,OAAO,CAAC;IAChB,CAAC;IAEM,QAAQ,CAAC,IAA6B;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,SAAS,CAAC,IAA6B;QAC9C,OAAO,IAAI,YAAY,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;IACpE,CAAC;IAEO,OAAO,CAAC,IAA6B;QAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACnD,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;SACZ;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAEM,MAAM,CAAC,IAA6B;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,MAAM,QAAQ,GAAkC;YAC/C,IAAI;gBACH,IAAI,KAAK,KAAK,SAAS,EAAE;oBACxB,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;oBACnC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;oBACnB,OAAO,GAAG,CAAC;iBACX;gBACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACzC,CAAC;YACD,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAChB,OAAO,IAAI,CAAC;YACb,CAAC;SACD,CAAC;QACF,OAAO,QAAQ,CAAC;IACjB,CAAC;IAID,IAAW,MAAM;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,IAAW,KAAK;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3B,CAAC;CACD;AA7JD,4CA6JC;AAED,SAAgB,QAAQ,CACvB,IAAyB,EACzB,OAA8C,EAC9C,KAAmB,EACnB,UAAmB,IAAI;IAEvB,IAAI,OAAgC,CAAC;IACrC,IAAI,KAAK,EAAE;QACV,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,IAAI,4BAAU,CAAC,oCAAoC,CAAC,CAAC;SAC3D;QACD,OAAO,GAAG,KAAK,CAAC;KAChB;SAAM;QACN,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KAC3C;IACD,2DAA2D;IAC3D,8BAA8B;IAC9B,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC;IACnD,OAAO,OAAO,KAAK,SAAS,EAAE;QAC7B,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE;YAC/B,OAAO,KAAK,CAAC;SACb;QACD,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;KACzC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AA1BD,4BA0BC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UsageError } from \"@fluidframework/telemetry-utils\";\n\nexport interface ListNode<T> {\n\treadonly list: DoublyLinkedList<T> | undefined;\n\treadonly data: T;\n\treadonly next: ListNode<T> | undefined;\n\treadonly prev: ListNode<T> | undefined;\n}\n\nexport interface ListNodeRange<T> {\n\tfirst: ListNode<T>;\n\tlast: ListNode<T>;\n}\n\nclass HeadNode<T> {\n\tpublic _next: HeadNode<T> | DataNode<T> = this;\n\tpublic _prev: HeadNode<T> | DataNode<T> = this;\n\tpublic headNode: HeadNode<T> = this;\n\tprivate readonly _list?: DoublyLinkedList<T>;\n\tconstructor(list: DoublyLinkedList<T> | undefined) {\n\t\tif (list) {\n\t\t\tthis._list = list;\n\t\t}\n\t}\n\tpublic get next(): DataNode<T> | undefined {\n\t\treturn this._next === this.headNode ? undefined : (this._next as DataNode<T>);\n\t}\n\tpublic get prev(): DataNode<T> | undefined {\n\t\treturn this._prev === this.headNode ? undefined : (this._prev as DataNode<T>);\n\t}\n\tpublic get list() {\n\t\treturn this.headNode._list;\n\t}\n}\n\nconst DeadHead = new HeadNode<any>(undefined);\n\nclass DataNode<T> extends HeadNode<T> implements ListNode<T> {\n\tconstructor(\n\t\theadNode: HeadNode<T>,\n\t\tpublic readonly data: T,\n\t) {\n\t\tsuper(undefined);\n\t\tthis.headNode = headNode;\n\t}\n}\n\nfunction insertAfter<T>(node: DataNode<T> | HeadNode<T>, items: T[]): ListNodeRange<T> {\n\tlet previousNode = node;\n\tconst oldNext = previousNode._next;\n\tlet newRange: ListNodeRange<T> | undefined;\n\titems.forEach((n) => {\n\t\tconst newNode = new DataNode<T>(node.headNode, n);\n\t\tif (newRange === undefined) {\n\t\t\tnewRange = { first: newNode, last: newNode };\n\t\t} else {\n\t\t\tnewRange.last = newNode;\n\t\t}\n\t\tnewNode._prev = previousNode;\n\t\tpreviousNode._next = newNode;\n\t\tpreviousNode = newNode;\n\t});\n\toldNext._prev = previousNode;\n\tpreviousNode._next = oldNext;\n\t// explicitly prevent newRange from being undefined without casting,\n\t// and without additional conditionals, as this is used in some perf critical areas.\n\t// i could have just asserted, but that throws a non-user friendly error,\n\t// so i went with a more user-friendly error, which describes the\n\t// only condition that could lead to this being undefined in the current code.\n\tif (newRange === undefined) {\n\t\tthrow new UsageError(\"items must not be empty\");\n\t}\n\treturn newRange;\n}\n\nexport class DoublyLinkedList<T>\n\timplements\n\t\tIterable<ListNode<T>>,\n\t\tPartial<ListNodeRange<T>>,\n\t\t// try to match array signature and semantics where possible\n\t\tPick<ListNode<T>[], \"pop\" | \"shift\" | \"length\" | \"includes\">\n{\n\tfind(\n\t\tpredicate: (value: ListNode<T>, obj: DoublyLinkedList<T>) => unknown,\n\t): ListNode<T> | undefined {\n\t\tlet found: ListNode<T> | undefined;\n\t\twalkList(this, (node) => {\n\t\t\tif (predicate(node, this)) {\n\t\t\t\tfound = node;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn found;\n\t}\n\n\tmap<U>(callbackfn: (value: ListNode<T>) => U): Iterable<U> {\n\t\tlet node = this.first;\n\t\tconst iterator: IterableIterator<U> = {\n\t\t\tnext(): IteratorResult<U> {\n\t\t\t\tif (node === undefined) {\n\t\t\t\t\treturn { done: true, value: undefined };\n\t\t\t\t}\n\t\t\t\tconst rtn = { value: callbackfn(node), done: false };\n\t\t\t\tnode = node.next;\n\t\t\t\treturn rtn;\n\t\t\t},\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t};\n\t\treturn iterator;\n\t}\n\n\tinsertAfter(preceding: ListNode<T>, ...items: T[]): ListNodeRange<T> {\n\t\tif (!this._includes(preceding)) {\n\t\t\tthrow new Error(\"preceding not in list\");\n\t\t}\n\t\tthis._len += items.length;\n\t\treturn insertAfter(preceding, items);\n\t}\n\n\tpop(): ListNode<T> | undefined {\n\t\treturn this.remove(this.last);\n\t}\n\n\tpush(...items: T[]): ListNodeRange<T> {\n\t\tthis._len += items.length;\n\t\tconst start = this.headNode._prev;\n\t\treturn insertAfter(start, items);\n\t}\n\n\t/**\n\t * Remove and return the first element\n\t */\n\tshift(): ListNode<T> | undefined {\n\t\treturn this.remove(this.first);\n\t}\n\n\t/**\n\t * Insert `items` at start of list\n\t */\n\tunshift(...items: T[]): ListNodeRange<T> {\n\t\tthis._len += items.length;\n\t\treturn insertAfter(this.headNode, items);\n\t}\n\n\t/**\n\t * Remove nodes starting at `start` until either the `end` node is reached\n\t * or until `count` nodes have been removed. Returns the removed nodes as\n\t * a separate linked list\n\t */\n\tsplice(start: ListNode<T>, countOrEnd?: ListNode<T> | number): DoublyLinkedList<T> {\n\t\tconst newList = new DoublyLinkedList<T>();\n\t\twalkList(\n\t\t\tthis,\n\t\t\t(node) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst removedNode = this._remove(node)!;\n\t\t\t\t// whats special here is we preserve the node\n\t\t\t\t// this allow looking up the old node in the new list\n\t\t\t\t// when something preserves a reference\n\t\t\t\tremovedNode.headNode = newList.headNode;\n\t\t\t\tremovedNode._next = newList.headNode;\n\t\t\t\tremovedNode._prev = newList.headNode._prev;\n\t\t\t\tnewList.headNode._prev._next = removedNode;\n\t\t\t\tnewList.headNode._prev = removedNode;\n\t\t\t\tnewList._len++;\n\t\t\t\tif (node === countOrEnd || newList.length === countOrEnd) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tstart,\n\t\t);\n\t\treturn newList;\n\t}\n\n\tpublic includes(node: ListNode<T> | undefined): node is ListNode<T> {\n\t\treturn this._includes(node);\n\t}\n\n\tprivate _includes(node: ListNode<T> | undefined): node is DataNode<T> {\n\t\treturn node instanceof DataNode && node.headNode === this.headNode;\n\t}\n\n\tprivate _remove(node: ListNode<T> | undefined): DataNode<T> | undefined {\n\t\tif (this._includes(node)) {\n\t\t\tnode._prev._next = node._next;\n\t\t\tnode._next._prev = node._prev;\n\t\t\tnode.headNode = node._next = node._prev = DeadHead;\n\t\t\tthis._len--;\n\t\t\treturn node;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic remove(node: ListNode<T> | undefined): ListNode<T> | undefined {\n\t\treturn this._remove(node);\n\t}\n\n\tpublic [Symbol.iterator](): IterableIterator<ListNode<T>> {\n\t\tlet value = this.first;\n\t\tconst iterator: IterableIterator<ListNode<T>> = {\n\t\t\tnext(): IteratorResult<ListNode<T>> {\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\tconst rtn = { value, done: false };\n\t\t\t\t\tvalue = value.next;\n\t\t\t\t\treturn rtn;\n\t\t\t\t}\n\t\t\t\treturn { value: undefined, done: true };\n\t\t\t},\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t};\n\t\treturn iterator;\n\t}\n\n\tprivate _len: number = 0;\n\tprivate readonly headNode: HeadNode<T> | DataNode<T> = new HeadNode(this);\n\tpublic get length() {\n\t\treturn this._len;\n\t}\n\tpublic get empty() {\n\t\treturn this._len === 0;\n\t}\n\tpublic get first(): ListNode<T> | undefined {\n\t\treturn this.headNode.next;\n\t}\n\n\tpublic get last(): ListNode<T> | undefined {\n\t\treturn this.headNode.prev;\n\t}\n}\n\nexport function walkList<T>(\n\tlist: DoublyLinkedList<T>,\n\tvisitor: (node: ListNode<T>) => boolean | void,\n\tstart?: ListNode<T>,\n\tforward: boolean = true,\n) {\n\tlet current: ListNode<T> | undefined;\n\tif (start) {\n\t\tif (!list.includes(start)) {\n\t\t\tthrow new UsageError(\"start must be in the provided list\");\n\t\t}\n\t\tcurrent = start;\n\t} else {\n\t\tcurrent = forward ? list.first : list.last;\n\t}\n\t// cache the next node, incase the visitor mutates the list\n\t// need this to support splice\n\tlet next = forward ? current?.next : current?.prev;\n\twhile (current !== undefined) {\n\t\tif (visitor(current) === false) {\n\t\t\treturn false;\n\t\t}\n\t\tcurrent = next;\n\t\tnext = forward ? next?.next : next?.prev;\n\t}\n\treturn true;\n}\n"]}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/collections/list.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 { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nexport interface ListNode<T> {\n\treadonly list: DoublyLinkedList<T> | undefined;\n\treadonly data: T;\n\treadonly next: ListNode<T> | undefined;\n\treadonly prev: ListNode<T> | undefined;\n}\n\nexport interface ListNodeRange<T> {\n\tfirst: ListNode<T>;\n\tlast: ListNode<T>;\n}\n\nclass HeadNode<T> {\n\tpublic _next: HeadNode<T> | DataNode<T> = this;\n\tpublic _prev: HeadNode<T> | DataNode<T> = this;\n\tpublic headNode: HeadNode<T> = this;\n\tprivate readonly _list?: DoublyLinkedList<T>;\n\tconstructor(list: DoublyLinkedList<T> | undefined) {\n\t\tif (list) {\n\t\t\tthis._list = list;\n\t\t}\n\t}\n\tpublic get next(): DataNode<T> | undefined {\n\t\treturn this._next === this.headNode ? undefined : (this._next as DataNode<T>);\n\t}\n\tpublic get prev(): DataNode<T> | undefined {\n\t\treturn this._prev === this.headNode ? undefined : (this._prev as DataNode<T>);\n\t}\n\tpublic get list() {\n\t\treturn this.headNode._list;\n\t}\n}\n\nconst DeadHead = new HeadNode<any>(undefined);\n\nclass DataNode<T> extends HeadNode<T> implements ListNode<T> {\n\tconstructor(\n\t\theadNode: HeadNode<T>,\n\t\tpublic readonly data: T,\n\t) {\n\t\tsuper(undefined);\n\t\tthis.headNode = headNode;\n\t}\n}\n\nfunction insertAfter<T>(node: DataNode<T> | HeadNode<T>, items: T[]): ListNodeRange<T> {\n\tlet previousNode = node;\n\tconst oldNext = previousNode._next;\n\tlet newRange: ListNodeRange<T> | undefined;\n\titems.forEach((n) => {\n\t\tconst newNode = new DataNode<T>(node.headNode, n);\n\t\tif (newRange === undefined) {\n\t\t\tnewRange = { first: newNode, last: newNode };\n\t\t} else {\n\t\t\tnewRange.last = newNode;\n\t\t}\n\t\tnewNode._prev = previousNode;\n\t\tpreviousNode._next = newNode;\n\t\tpreviousNode = newNode;\n\t});\n\toldNext._prev = previousNode;\n\tpreviousNode._next = oldNext;\n\t// explicitly prevent newRange from being undefined without casting,\n\t// and without additional conditionals, as this is used in some perf critical areas.\n\t// i could have just asserted, but that throws a non-user friendly error,\n\t// so i went with a more user-friendly error, which describes the\n\t// only condition that could lead to this being undefined in the current code.\n\tif (newRange === undefined) {\n\t\tthrow new UsageError(\"items must not be empty\");\n\t}\n\treturn newRange;\n}\n\nexport class DoublyLinkedList<T>\n\timplements\n\t\tIterable<ListNode<T>>,\n\t\tPartial<ListNodeRange<T>>,\n\t\t// try to match array signature and semantics where possible\n\t\tPick<ListNode<T>[], \"pop\" | \"shift\" | \"length\" | \"includes\">\n{\n\tfind(\n\t\tpredicate: (value: ListNode<T>, obj: DoublyLinkedList<T>) => unknown,\n\t): ListNode<T> | undefined {\n\t\tlet found: ListNode<T> | undefined;\n\t\twalkList(this, (node) => {\n\t\t\tif (predicate(node, this)) {\n\t\t\t\tfound = node;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn found;\n\t}\n\n\tmap<U>(callbackfn: (value: ListNode<T>) => U): Iterable<U> {\n\t\tlet node = this.first;\n\t\tconst iterator: IterableIterator<U> = {\n\t\t\tnext(): IteratorResult<U> {\n\t\t\t\tif (node === undefined) {\n\t\t\t\t\treturn { done: true, value: undefined };\n\t\t\t\t}\n\t\t\t\tconst rtn = { value: callbackfn(node), done: false };\n\t\t\t\tnode = node.next;\n\t\t\t\treturn rtn;\n\t\t\t},\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t};\n\t\treturn iterator;\n\t}\n\n\tinsertAfter(preceding: ListNode<T>, ...items: T[]): ListNodeRange<T> {\n\t\tif (!this._includes(preceding)) {\n\t\t\tthrow new Error(\"preceding not in list\");\n\t\t}\n\t\tthis._len += items.length;\n\t\treturn insertAfter(preceding, items);\n\t}\n\n\tpop(): ListNode<T> | undefined {\n\t\treturn this.remove(this.last);\n\t}\n\n\tpush(...items: T[]): ListNodeRange<T> {\n\t\tthis._len += items.length;\n\t\tconst start = this.headNode._prev;\n\t\treturn insertAfter(start, items);\n\t}\n\n\t/**\n\t * Remove and return the first element\n\t */\n\tshift(): ListNode<T> | undefined {\n\t\treturn this.remove(this.first);\n\t}\n\n\t/**\n\t * Insert `items` at start of list\n\t */\n\tunshift(...items: T[]): ListNodeRange<T> {\n\t\tthis._len += items.length;\n\t\treturn insertAfter(this.headNode, items);\n\t}\n\n\t/**\n\t * Remove nodes starting at `start` until either the `end` node is reached\n\t * or until `count` nodes have been removed. Returns the removed nodes as\n\t * a separate linked list\n\t */\n\tsplice(start: ListNode<T>, countOrEnd?: ListNode<T> | number): DoublyLinkedList<T> {\n\t\tconst newList = new DoublyLinkedList<T>();\n\t\twalkList(\n\t\t\tthis,\n\t\t\t(node) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst removedNode = this._remove(node)!;\n\t\t\t\t// whats special here is we preserve the node\n\t\t\t\t// this allow looking up the old node in the new list\n\t\t\t\t// when something preserves a reference\n\t\t\t\tremovedNode.headNode = newList.headNode;\n\t\t\t\tremovedNode._next = newList.headNode;\n\t\t\t\tremovedNode._prev = newList.headNode._prev;\n\t\t\t\tnewList.headNode._prev._next = removedNode;\n\t\t\t\tnewList.headNode._prev = removedNode;\n\t\t\t\tnewList._len++;\n\t\t\t\tif (node === countOrEnd || newList.length === countOrEnd) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tstart,\n\t\t);\n\t\treturn newList;\n\t}\n\n\tpublic includes(node: ListNode<T> | undefined): node is ListNode<T> {\n\t\treturn this._includes(node);\n\t}\n\n\tprivate _includes(node: ListNode<T> | undefined): node is DataNode<T> {\n\t\treturn node instanceof DataNode && node.headNode === this.headNode;\n\t}\n\n\tprivate _remove(node: ListNode<T> | undefined): DataNode<T> | undefined {\n\t\tif (this._includes(node)) {\n\t\t\tnode._prev._next = node._next;\n\t\t\tnode._next._prev = node._prev;\n\t\t\tnode.headNode = node._next = node._prev = DeadHead;\n\t\t\tthis._len--;\n\t\t\treturn node;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic remove(node: ListNode<T> | undefined): ListNode<T> | undefined {\n\t\treturn this._remove(node);\n\t}\n\n\tpublic [Symbol.iterator](): IterableIterator<ListNode<T>> {\n\t\tlet value = this.first;\n\t\tconst iterator: IterableIterator<ListNode<T>> = {\n\t\t\tnext(): IteratorResult<ListNode<T>> {\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\tconst rtn = { value, done: false };\n\t\t\t\t\tvalue = value.next;\n\t\t\t\t\treturn rtn;\n\t\t\t\t}\n\t\t\t\treturn { value: undefined, done: true };\n\t\t\t},\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t};\n\t\treturn iterator;\n\t}\n\n\tprivate _len: number = 0;\n\tprivate readonly headNode: HeadNode<T> | DataNode<T> = new HeadNode(this);\n\tpublic get length() {\n\t\treturn this._len;\n\t}\n\tpublic get empty() {\n\t\treturn this._len === 0;\n\t}\n\tpublic get first(): ListNode<T> | undefined {\n\t\treturn this.headNode.next;\n\t}\n\n\tpublic get last(): ListNode<T> | undefined {\n\t\treturn this.headNode.prev;\n\t}\n}\n\nexport function walkList<T>(\n\tlist: DoublyLinkedList<T>,\n\tvisitor: (node: ListNode<T>) => boolean | void,\n\tstart?: ListNode<T>,\n\tforward: boolean = true,\n) {\n\tlet current: ListNode<T> | undefined;\n\tif (start) {\n\t\tif (!list.includes(start)) {\n\t\t\tthrow new UsageError(\"start must be in the provided list\");\n\t\t}\n\t\tcurrent = start;\n\t} else {\n\t\tcurrent = forward ? list.first : list.last;\n\t}\n\t// cache the next node, incase the visitor mutates the list\n\t// need this to support splice\n\tlet next = forward ? current?.next : current?.prev;\n\twhile (current !== undefined) {\n\t\tif (visitor(current) === false) {\n\t\t\treturn false;\n\t\t}\n\t\tcurrent = next;\n\t\tnext = forward ? next?.next : next?.prev;\n\t}\n\treturn true;\n}\n"]}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { LocalReferenceCollection } from "./localReference.js";
6
6
  import { MergeTree } from "./mergeTree.js";
7
- import { IMergeBlock, IRemovalInfo, ISegment } from "./mergeTreeNodes.js";
7
+ import { IRemovalInfo, ISegment, type MergeBlock } from "./mergeTreeNodes.js";
8
8
  /**
9
9
  * This is a special segment that is not bound or known by the merge tree itself,
10
10
  * but the segment itself pretends to be a removed segment at an endpoint of the
@@ -41,11 +41,11 @@ declare abstract class BaseEndpointSegment {
41
41
  cachedLength: number;
42
42
  isLeaf(): this is ISegment;
43
43
  protected abstract endpointSegmentProps(): {
44
- parent: IMergeBlock;
44
+ parent: MergeBlock;
45
45
  index: number;
46
46
  depth: number;
47
47
  };
48
- get parent(): IMergeBlock;
48
+ get parent(): MergeBlock;
49
49
  get index(): number;
50
50
  abstract get ordinal(): string;
51
51
  localRefs?: LocalReferenceCollection;
@@ -70,7 +70,7 @@ export declare class StartOfTreeSegment extends BaseEndpointSegment implements I
70
70
  * so compute the necessary properties to pretend to be that segment.
71
71
  */
72
72
  protected endpointSegmentProps(): {
73
- parent: IMergeBlock;
73
+ parent: MergeBlock;
74
74
  index: number;
75
75
  depth: number;
76
76
  };
@@ -87,7 +87,7 @@ export declare class EndOfTreeSegment extends BaseEndpointSegment implements ISe
87
87
  * so compute the necessary properties to pretend to be that segment.
88
88
  */
89
89
  protected endpointSegmentProps(): {
90
- parent: IMergeBlock;
90
+ parent: MergeBlock;
91
91
  index: number;
92
92
  depth: number;
93
93
  };
@@ -1 +1 @@
1
- {"version":3,"file":"endOfTreeSegment.d.ts","sourceRoot":"","sources":["../src/endOfTreeSegment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAgB,MAAM,qBAAqB,CAAC;AAGxF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uBAAe,mBAAmB;IACrB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS;gBAApB,SAAS,EAAE,SAAS;IAOnD,UAAU,EAAE,MAAM,CAAK;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAmB;IAC7C,WAAW,EAAE,SAAS,CAAC;IACvB,eAAe,EAAE,SAAS,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,eAAe,EAAE,SAAS,CAAC;IAC3B,UAAU,EAAE,SAAS,CAAC;IACtB,GAAG,SAAK;IACR,QAAQ,SAAiB;IACzB,YAAY,SAAK;IAEjB,MAAM,IAAI,IAAI,IAAI,QAAQ;IAI1B,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI;QAC1C,MAAM,EAAE,WAAW,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACd;IAED,IAAI,MAAM,gBAET;IAED,IAAI,KAAK,WAER;IAED,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC;IAE/B,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAMrC,IAAI,aAAa,UAEhB;IACD,IAAI,kBAAkB,UAErB;IACD,aAAa,cAAgB;IAC7B,KAAK,cAAgB;IACrB,SAAS,cAAgB;IACzB,MAAM,cAAgB;IACtB,OAAO,cAAgB;IACvB,YAAY,cAAgB;IAC5B,GAAG,cAAgB;CACnB;AAMD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,mBAAoB,YAAW,QAAQ,EAAE,YAAY;IAC5F,IAAI,EAAE,MAAM,CAAwB;IACpC,QAAQ,CAAC,YAAY,WAAW;IAEhC;;;OAGG;IACH,SAAS,CAAC,oBAAoB;;;;;IA2B9B,IAAI,OAAO,WAEV;CACD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,mBAAoB,YAAW,QAAQ,EAAE,YAAY;IAC1F,IAAI,EAAE,MAAM,CAAsB;IAClC,QAAQ,CAAC,YAAY,SAAS;IAE9B;;;OAGG;IACH,SAAS,CAAC,oBAAoB;;;;;IA2B9B,IAAI,OAAO,WAMV;CACD"}
1
+ {"version":3,"file":"endOfTreeSegment.d.ts","sourceRoot":"","sources":["../src/endOfTreeSegment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAgB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uBAAe,mBAAmB;IACrB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS;gBAApB,SAAS,EAAE,SAAS;IAOnD,UAAU,EAAE,MAAM,CAAK;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAmB;IAC7C,WAAW,EAAE,SAAS,CAAC;IACvB,eAAe,EAAE,SAAS,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,eAAe,EAAE,SAAS,CAAC;IAC3B,UAAU,EAAE,SAAS,CAAC;IACtB,GAAG,SAAK;IACR,QAAQ,SAAiB;IACzB,YAAY,SAAK;IAEjB,MAAM,IAAI,IAAI,IAAI,QAAQ;IAI1B,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI;QAC1C,MAAM,EAAE,UAAU,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACd;IAED,IAAI,MAAM,eAET;IAED,IAAI,KAAK,WAER;IAED,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC;IAE/B,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAMrC,IAAI,aAAa,UAEhB;IACD,IAAI,kBAAkB,UAErB;IACD,aAAa,cAAgB;IAC7B,KAAK,cAAgB;IACrB,SAAS,cAAgB;IACzB,MAAM,cAAgB;IACtB,OAAO,cAAgB;IACvB,YAAY,cAAgB;IAC5B,GAAG,cAAgB;CACnB;AAMD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,mBAAoB,YAAW,QAAQ,EAAE,YAAY;IAC5F,IAAI,EAAE,MAAM,CAAwB;IACpC,QAAQ,CAAC,YAAY,WAAW;IAEhC;;;OAGG;IACH,SAAS,CAAC,oBAAoB;;;;;IA2B9B,IAAI,OAAO,WAEV;CACD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,mBAAoB,YAAW,QAAQ,EAAE,YAAY;IAC1F,IAAI,EAAE,MAAM,CAAsB;IAClC,QAAQ,CAAC,YAAY,SAAS;IAE9B;;;OAGG;IACH,SAAS,CAAC,oBAAoB;;;;;IA2B9B,IAAI,OAAO,WAMV;CACD"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.EndOfTreeSegment = exports.StartOfTreeSegment = void 0;
8
- const core_utils_1 = require("@fluidframework/core-utils");
8
+ const internal_1 = require("@fluidframework/core-utils/internal");
9
9
  const constants_js_1 = require("./constants.js");
10
10
  const mergeTreeNodeWalk_js_1 = require("./mergeTreeNodeWalk.js");
11
11
  /**
@@ -72,7 +72,7 @@ class BaseEndpointSegment {
72
72
  }
73
73
  }
74
74
  const notSupported = () => {
75
- (0, core_utils_1.assert)(false, 0x3ed /* operation not supported */);
75
+ (0, internal_1.assert)(false, 0x3ed /* operation not supported */);
76
76
  };
77
77
  /**
78
78
  * The position immediately prior to the start of the tree
@@ -1 +1 @@
1
- {"version":3,"file":"endOfTreeSegment.js","sourceRoot":"","sources":["../src/endOfTreeSegment.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils\";\nimport { LocalClientId } from \"./constants.js\";\nimport { LocalReferenceCollection } from \"./localReference.js\";\nimport { MergeTree } from \"./mergeTree.js\";\nimport { IMergeBlock, IRemovalInfo, ISegment, ISegmentLeaf } from \"./mergeTreeNodes.js\";\nimport { depthFirstNodeWalk, NodeAction } from \"./mergeTreeNodeWalk.js\";\n\n/**\n * This is a special segment that is not bound or known by the merge tree itself,\n * but the segment itself pretends to be a removed segment at an endpoint of the\n * tree. It is removed so it appears as a undefined/0 length segment. This segment\n * adds the capability to hold local references that have been detached from the\n * real merge tree, and give the appearance that they exist at an endpoint of the\n * tree.\n *\n * This is useful today in 2 cases: detached references and interval stickiness.\n *\n * In general, local references only become detached when the tree becomes empty\n * and the EndOfTreeSegment allows us to gracefully handle that case by giving\n * those references a place to live.\n *\n * In the case of interval stickiness, it is desirable to be able to refer to\n * the position immediately after or before a segment, in order for the endpoint\n * of an interval to be exclusive. This means that in order to support intervals\n * that are exclusive and also include the first or last segment of the tree, it\n * must be possible in some way to refer to a position before or after the tree\n * respectively. The endpoint segments allow us to support such behavior.\n */\nabstract class BaseEndpointSegment {\n\tconstructor(protected readonly mergeTree: MergeTree) {}\n\t/*\n\t * segments must be of at least length one, but\n\t * removed segments will have a calculated length\n\t * of undefined/0. we leverage this to create\n\t * a 0 length segment for an endpoint of the tree\n\t */\n\tremovedSeq: number = 0;\n\tremovedClientIds: number[] = [LocalClientId];\n\tattribution: undefined;\n\tpropertyManager: undefined;\n\tlocalSeq: undefined;\n\tlocalRemovedSeq: undefined;\n\tproperties: undefined;\n\tseq = 0;\n\tclientId = LocalClientId;\n\tcachedLength = 1;\n\n\tisLeaf(): this is ISegment {\n\t\treturn true;\n\t}\n\n\tprotected abstract endpointSegmentProps(): {\n\t\tparent: IMergeBlock;\n\t\tindex: number;\n\t\tdepth: number;\n\t};\n\n\tget parent() {\n\t\treturn this.endpointSegmentProps().parent;\n\t}\n\n\tget index() {\n\t\treturn this.endpointSegmentProps().index;\n\t}\n\n\tabstract get ordinal(): string;\n\n\tlocalRefs?: LocalReferenceCollection;\n\n\t/*\n\t * since this segment isn't real, throw on any segment\n\t * operation that isn't expected\n\t */\n\tget segmentGroups() {\n\t\treturn notSupported();\n\t}\n\tget trackingCollection() {\n\t\treturn notSupported();\n\t}\n\taddProperties = notSupported;\n\tclone = notSupported;\n\tcanAppend = notSupported;\n\tappend = notSupported;\n\tsplitAt = notSupported;\n\ttoJSONObject = notSupported;\n\tack = notSupported;\n}\n\nconst notSupported = () => {\n\tassert(false, 0x3ed /* operation not supported */);\n};\n\n/**\n * The position immediately prior to the start of the tree\n */\nexport class StartOfTreeSegment extends BaseEndpointSegment implements ISegment, IRemovalInfo {\n\ttype: string = \"StartOfTreeSegment\";\n\treadonly endpointType = \"start\";\n\n\t/**\n\t * this segment pretends to be a sibling of the first real segment.\n\t * so compute the necessary properties to pretend to be that segment.\n\t */\n\tprotected endpointSegmentProps() {\n\t\tlet firstSegment: ISegmentLeaf | undefined;\n\t\tlet depth = 1;\n\t\tconst root = this.mergeTree.root;\n\t\tdepthFirstNodeWalk(\n\t\t\troot,\n\t\t\troot.children[0],\n\t\t\t(node) => {\n\t\t\t\tdepth++;\n\t\t\t\tif (node?.isLeaf()) {\n\t\t\t\t\tfirstSegment = node;\n\t\t\t\t\treturn NodeAction.Exit;\n\t\t\t\t}\n\t\t\t},\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t);\n\t\tconst parent = firstSegment?.parent ?? root;\n\t\tconst index = 0;\n\t\treturn {\n\t\t\tparent,\n\t\t\tindex,\n\t\t\tdepth,\n\t\t};\n\t}\n\n\tget ordinal() {\n\t\treturn String.fromCharCode(0x00);\n\t}\n}\n\n/**\n * The position immediately after the end of the tree\n */\nexport class EndOfTreeSegment extends BaseEndpointSegment implements ISegment, IRemovalInfo {\n\ttype: string = \"EndOfTreeSegment\";\n\treadonly endpointType = \"end\";\n\n\t/**\n\t * this segment pretends to be a sibling of the last real segment.\n\t * so compute the necessary properties to pretend to be that segment.\n\t */\n\tprotected endpointSegmentProps() {\n\t\tlet lastSegment: ISegmentLeaf | undefined;\n\t\tlet depth = 1;\n\t\tconst root = this.mergeTree.root;\n\t\tdepthFirstNodeWalk(\n\t\t\troot,\n\t\t\troot.children[root.childCount - 1],\n\t\t\t(node) => {\n\t\t\t\tdepth++;\n\t\t\t\tif (node?.isLeaf()) {\n\t\t\t\t\tlastSegment = node;\n\t\t\t\t\treturn NodeAction.Exit;\n\t\t\t\t}\n\t\t\t},\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t);\n\t\tconst parent = lastSegment?.parent ?? root;\n\t\tconst index = parent.childCount;\n\t\treturn {\n\t\t\tparent,\n\t\t\tindex,\n\t\t\tdepth,\n\t\t};\n\t}\n\n\tget ordinal() {\n\t\t// just compute an arbitrarily big ordinal\n\t\t// we base it on the depth of the tree\n\t\t// to ensure it is bigger than all ordinals in\n\t\t// the tree, as each layer appends to the previous\n\t\treturn String.fromCharCode(0xffff).repeat(this.endpointSegmentProps().depth);\n\t}\n}\n"]}
1
+ {"version":3,"file":"endOfTreeSegment.js","sourceRoot":"","sources":["../src/endOfTreeSegment.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { LocalClientId } from \"./constants.js\";\nimport { LocalReferenceCollection } from \"./localReference.js\";\nimport { MergeTree } from \"./mergeTree.js\";\nimport { NodeAction, depthFirstNodeWalk } from \"./mergeTreeNodeWalk.js\";\nimport { IRemovalInfo, ISegment, ISegmentLeaf, type MergeBlock } from \"./mergeTreeNodes.js\";\n\n/**\n * This is a special segment that is not bound or known by the merge tree itself,\n * but the segment itself pretends to be a removed segment at an endpoint of the\n * tree. It is removed so it appears as a undefined/0 length segment. This segment\n * adds the capability to hold local references that have been detached from the\n * real merge tree, and give the appearance that they exist at an endpoint of the\n * tree.\n *\n * This is useful today in 2 cases: detached references and interval stickiness.\n *\n * In general, local references only become detached when the tree becomes empty\n * and the EndOfTreeSegment allows us to gracefully handle that case by giving\n * those references a place to live.\n *\n * In the case of interval stickiness, it is desirable to be able to refer to\n * the position immediately after or before a segment, in order for the endpoint\n * of an interval to be exclusive. This means that in order to support intervals\n * that are exclusive and also include the first or last segment of the tree, it\n * must be possible in some way to refer to a position before or after the tree\n * respectively. The endpoint segments allow us to support such behavior.\n */\nabstract class BaseEndpointSegment {\n\tconstructor(protected readonly mergeTree: MergeTree) {}\n\t/*\n\t * segments must be of at least length one, but\n\t * removed segments will have a calculated length\n\t * of undefined/0. we leverage this to create\n\t * a 0 length segment for an endpoint of the tree\n\t */\n\tremovedSeq: number = 0;\n\tremovedClientIds: number[] = [LocalClientId];\n\tattribution: undefined;\n\tpropertyManager: undefined;\n\tlocalSeq: undefined;\n\tlocalRemovedSeq: undefined;\n\tproperties: undefined;\n\tseq = 0;\n\tclientId = LocalClientId;\n\tcachedLength = 1;\n\n\tisLeaf(): this is ISegment {\n\t\treturn true;\n\t}\n\n\tprotected abstract endpointSegmentProps(): {\n\t\tparent: MergeBlock;\n\t\tindex: number;\n\t\tdepth: number;\n\t};\n\n\tget parent() {\n\t\treturn this.endpointSegmentProps().parent;\n\t}\n\n\tget index() {\n\t\treturn this.endpointSegmentProps().index;\n\t}\n\n\tabstract get ordinal(): string;\n\n\tlocalRefs?: LocalReferenceCollection;\n\n\t/*\n\t * since this segment isn't real, throw on any segment\n\t * operation that isn't expected\n\t */\n\tget segmentGroups() {\n\t\treturn notSupported();\n\t}\n\tget trackingCollection() {\n\t\treturn notSupported();\n\t}\n\taddProperties = notSupported;\n\tclone = notSupported;\n\tcanAppend = notSupported;\n\tappend = notSupported;\n\tsplitAt = notSupported;\n\ttoJSONObject = notSupported;\n\tack = notSupported;\n}\n\nconst notSupported = () => {\n\tassert(false, 0x3ed /* operation not supported */);\n};\n\n/**\n * The position immediately prior to the start of the tree\n */\nexport class StartOfTreeSegment extends BaseEndpointSegment implements ISegment, IRemovalInfo {\n\ttype: string = \"StartOfTreeSegment\";\n\treadonly endpointType = \"start\";\n\n\t/**\n\t * this segment pretends to be a sibling of the first real segment.\n\t * so compute the necessary properties to pretend to be that segment.\n\t */\n\tprotected endpointSegmentProps() {\n\t\tlet firstSegment: ISegmentLeaf | undefined;\n\t\tlet depth = 1;\n\t\tconst root = this.mergeTree.root;\n\t\tdepthFirstNodeWalk(\n\t\t\troot,\n\t\t\troot.children[0],\n\t\t\t(node) => {\n\t\t\t\tdepth++;\n\t\t\t\tif (node?.isLeaf()) {\n\t\t\t\t\tfirstSegment = node;\n\t\t\t\t\treturn NodeAction.Exit;\n\t\t\t\t}\n\t\t\t},\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t);\n\t\tconst parent = firstSegment?.parent ?? root;\n\t\tconst index = 0;\n\t\treturn {\n\t\t\tparent,\n\t\t\tindex,\n\t\t\tdepth,\n\t\t};\n\t}\n\n\tget ordinal() {\n\t\treturn String.fromCharCode(0x00);\n\t}\n}\n\n/**\n * The position immediately after the end of the tree\n */\nexport class EndOfTreeSegment extends BaseEndpointSegment implements ISegment, IRemovalInfo {\n\ttype: string = \"EndOfTreeSegment\";\n\treadonly endpointType = \"end\";\n\n\t/**\n\t * this segment pretends to be a sibling of the last real segment.\n\t * so compute the necessary properties to pretend to be that segment.\n\t */\n\tprotected endpointSegmentProps() {\n\t\tlet lastSegment: ISegmentLeaf | undefined;\n\t\tlet depth = 1;\n\t\tconst root = this.mergeTree.root;\n\t\tdepthFirstNodeWalk(\n\t\t\troot,\n\t\t\troot.children[root.childCount - 1],\n\t\t\t(node) => {\n\t\t\t\tdepth++;\n\t\t\t\tif (node?.isLeaf()) {\n\t\t\t\t\tlastSegment = node;\n\t\t\t\t\treturn NodeAction.Exit;\n\t\t\t\t}\n\t\t\t},\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t);\n\t\tconst parent = lastSegment?.parent ?? root;\n\t\tconst index = parent.childCount;\n\t\treturn {\n\t\t\tparent,\n\t\t\tindex,\n\t\t\tdepth,\n\t\t};\n\t}\n\n\tget ordinal() {\n\t\t// just compute an arbitrarily big ordinal\n\t\t// we base it on the depth of the tree\n\t\t// to ensure it is bigger than all ordinals in\n\t\t// the tree, as each layer appends to the previous\n\t\treturn String.fromCharCode(0xffff).repeat(this.endpointSegmentProps().depth);\n\t}\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  export { IAttributionCollection, IAttributionCollectionSerializer, IAttributionCollectionSpec, SerializedAttributionCollection, SequenceOffsets, } from "./attributionCollection.js";
6
- export { createInsertOnlyAttributionPolicy } from "./attributionPolicy.js";
6
+ export { createInsertOnlyAttributionPolicy, createPropertyTrackingAttributionPolicyFactory, createPropertyTrackingAndInsertionAttributionPolicyFactory, } from "./attributionPolicy.js";
7
7
  export { Client, IClientEvents } from "./client.js";
8
8
  export { ConflictAction, Dictionary, IRBAugmentation, IRBMatcher, KeyComparer, Property, PropertyAction, QProperty, RBColor, RBNode, RBNodeActions, RedBlackTree, SortedDictionary, } from "./collections/index.js";
9
9
  export { UnassignedSequenceNumber, UniversalSequenceNumber } from "./constants.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,sBAAsB,EACtB,gCAAgC,EAChC,0BAA0B,EAC1B,+BAA+B,EAC/B,eAAe,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACN,cAAc,EACd,UAAU,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,QAAQ,EACR,cAAc,EACd,SAAS,EACT,OAAO,EACP,MAAM,EACN,aAAa,EACb,YAAY,EACZ,gBAAgB,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EACN,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,iBAAiB,EACjB,4BAA4B,EAC5B,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,4BAA4B,EAC5B,2BAA2B,EAC3B,qBAAqB,EACrB,iCAAiC,EACjC,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,2BAA2B,EAC3B,YAAY,EACZ,aAAa,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,SAAS,EACT,aAAa,EACb,cAAc,EACd,uBAAuB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,uBAAuB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EACN,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EACN,iCAAiC,EACjC,+BAA+B,EAC/B,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,+BAA+B,GAC/B,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,sBAAsB,EACtB,gCAAgC,EAChC,0BAA0B,EAC1B,+BAA+B,EAC/B,eAAe,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACN,iCAAiC,EACjC,8CAA8C,EAC9C,0DAA0D,GAC1D,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACN,cAAc,EACd,UAAU,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,QAAQ,EACR,cAAc,EACd,SAAS,EACT,OAAO,EACP,MAAM,EACN,aAAa,EACb,YAAY,EACZ,gBAAgB,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EACN,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,iBAAiB,EACjB,4BAA4B,EAC5B,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,4BAA4B,EAC5B,2BAA2B,EAC3B,qBAAqB,EACrB,iCAAiC,EACjC,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,2BAA2B,EAC3B,YAAY,EACZ,aAAa,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,SAAS,EACT,aAAa,EACb,cAAc,EACd,uBAAuB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,uBAAuB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EACN,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EACN,iCAAiC,EACjC,+BAA+B,EAC/B,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,+BAA+B,GAC/B,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -4,10 +4,12 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.discardMergeTreeDeltaRevertible = exports.appendToMergeTreeDeltaRevertibles = exports.TextSegment = exports.SortedSegmentSet = exports.SortedSet = exports.PropertiesRollback = exports.PropertiesManager = exports.SegmentGroupCollection = exports.reservedTileLabelsKey = exports.reservedRangeLabelsKey = exports.refTypeIncludesFlag = exports.refHasTileLabels = exports.refHasTileLabel = exports.refGetTileLabels = exports.minReferencePosition = exports.maxReferencePosition = exports.DetachedReferencePosition = exports.compareReferencePositions = exports.matchProperties = exports.createMap = exports.addProperties = exports.ReferenceType = exports.MergeTreeDeltaType = exports.createObliterateRangeOp = exports.createRemoveRangeOp = exports.createInsertSegmentOp = exports.createInsertOp = exports.createGroupOp = exports.createAnnotateRangeOp = exports.TrackingGroupCollection = exports.TrackingGroup = exports.toRemovalInfo = exports.reservedMarkerSimpleTypeKey = exports.reservedMarkerIdKey = exports.MergeNode = exports.Marker = exports.debugMarkerToString = exports.CollaborationWindow = exports.BaseSegment = exports.MergeTreeMaintenanceType = exports.getSlideToSegoff = exports.SlidingPreference = exports.LocalReferenceCollection = exports.createDetachedLocalReferencePosition = exports.UniversalSequenceNumber = exports.UnassignedSequenceNumber = exports.RedBlackTree = exports.RBColor = exports.Client = exports.createInsertOnlyAttributionPolicy = void 0;
8
- exports.revertMergeTreeDeltaRevertibles = exports.isMergeTreeDeltaRevertible = void 0;
7
+ exports.TextSegment = exports.SortedSegmentSet = exports.SortedSet = exports.PropertiesRollback = exports.PropertiesManager = exports.SegmentGroupCollection = exports.reservedTileLabelsKey = exports.reservedRangeLabelsKey = exports.refTypeIncludesFlag = exports.refHasTileLabels = exports.refHasTileLabel = exports.refGetTileLabels = exports.minReferencePosition = exports.maxReferencePosition = exports.DetachedReferencePosition = exports.compareReferencePositions = exports.matchProperties = exports.createMap = exports.addProperties = exports.ReferenceType = exports.MergeTreeDeltaType = exports.createObliterateRangeOp = exports.createRemoveRangeOp = exports.createInsertSegmentOp = exports.createInsertOp = exports.createGroupOp = exports.createAnnotateRangeOp = exports.TrackingGroupCollection = exports.TrackingGroup = exports.toRemovalInfo = exports.reservedMarkerSimpleTypeKey = exports.reservedMarkerIdKey = exports.MergeNode = exports.Marker = exports.debugMarkerToString = exports.CollaborationWindow = exports.BaseSegment = exports.MergeTreeMaintenanceType = exports.getSlideToSegoff = exports.SlidingPreference = exports.LocalReferenceCollection = exports.createDetachedLocalReferencePosition = exports.UniversalSequenceNumber = exports.UnassignedSequenceNumber = exports.RedBlackTree = exports.RBColor = exports.Client = exports.createPropertyTrackingAndInsertionAttributionPolicyFactory = exports.createPropertyTrackingAttributionPolicyFactory = exports.createInsertOnlyAttributionPolicy = void 0;
8
+ exports.revertMergeTreeDeltaRevertibles = exports.isMergeTreeDeltaRevertible = exports.discardMergeTreeDeltaRevertible = exports.appendToMergeTreeDeltaRevertibles = void 0;
9
9
  var attributionPolicy_js_1 = require("./attributionPolicy.js");
10
10
  Object.defineProperty(exports, "createInsertOnlyAttributionPolicy", { enumerable: true, get: function () { return attributionPolicy_js_1.createInsertOnlyAttributionPolicy; } });
11
+ Object.defineProperty(exports, "createPropertyTrackingAttributionPolicyFactory", { enumerable: true, get: function () { return attributionPolicy_js_1.createPropertyTrackingAttributionPolicyFactory; } });
12
+ Object.defineProperty(exports, "createPropertyTrackingAndInsertionAttributionPolicyFactory", { enumerable: true, get: function () { return attributionPolicy_js_1.createPropertyTrackingAndInsertionAttributionPolicyFactory; } });
11
13
  var client_js_1 = require("./client.js");
12
14
  Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_js_1.Client; } });
13
15
  var index_js_1 = require("./collections/index.js");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AASH,+DAA2E;AAAlE,yIAAA,iCAAiC,OAAA;AAC1C,yCAAoD;AAA3C,mGAAA,MAAM,OAAA;AACf,mDAcgC;AAL/B,mGAAA,OAAO,OAAA;AAGP,wGAAA,YAAY,OAAA;AAGb,+CAAmF;AAA1E,wHAAA,wBAAwB,OAAA;AAAE,uHAAA,uBAAuB,OAAA;AAC1D,yDAK6B;AAJ5B,yIAAA,oCAAoC,OAAA;AACpC,6HAAA,wBAAwB,OAAA;AAExB,sHAAA,iBAAiB,OAAA;AAElB,+CAKwB;AADvB,gHAAA,gBAAgB,OAAA;AAEjB,yEASqC;AADpC,qIAAA,wBAAwB,OAAA;AAEzB,yDAgB6B;AAf5B,gHAAA,WAAW,OAAA;AACX,wHAAA,mBAAmB,OAAA;AACnB,wHAAA,mBAAmB,OAAA;AAOnB,2GAAA,MAAM,OAAA;AACN,8GAAA,SAAS,OAAA;AACT,wHAAA,mBAAmB,OAAA;AACnB,gIAAA,2BAA2B,OAAA;AAE3B,kHAAA,aAAa,OAAA;AAEd,+DAKgC;AAH/B,qHAAA,aAAa,OAAA;AAEb,+HAAA,uBAAuB,OAAA;AAExB,+CAOwB;AANvB,qHAAA,qBAAqB,OAAA;AACrB,6GAAA,aAAa,OAAA;AACb,8GAAA,cAAc,OAAA;AACd,qHAAA,qBAAqB,OAAA;AACrB,mHAAA,mBAAmB,OAAA;AACnB,uHAAA,uBAAuB,OAAA;AAExB,mCAckB;AAHjB,4GAAA,kBAAkB,OAAA;AAClB,uGAAA,aAAa,OAAA;AAGd,iDAAkG;AAAzF,8GAAA,aAAa,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAW,gHAAA,eAAe,OAAA;AAC3D,iEAYiC;AAXhC,kIAAA,yBAAyB,OAAA;AACzB,kIAAA,yBAAyB,OAAA;AACzB,6HAAA,oBAAoB,OAAA;AACpB,6HAAA,oBAAoB,OAAA;AAEpB,yHAAA,gBAAgB,OAAA;AAChB,wHAAA,eAAe,OAAA;AACf,yHAAA,gBAAgB,OAAA;AAChB,4HAAA,mBAAmB,OAAA;AACnB,+HAAA,sBAAsB,OAAA;AACtB,8HAAA,qBAAqB,OAAA;AAEtB,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAC/B,6EAAsF;AAA7E,gIAAA,iBAAiB,OAAA;AAAE,iIAAA,kBAAkB,OAAA;AAC9C,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,6DAA+E;AAAtE,uHAAA,gBAAgB,OAAA;AACzB,mDAAuF;AAAtC,6GAAA,WAAW,OAAA;AAC5D,mDAO0B;AANzB,mIAAA,iCAAiC,OAAA;AACjC,iIAAA,+BAA+B,OAAA;AAC/B,4HAAA,0BAA0B,OAAA;AAG1B,iIAAA,+BAA+B,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tIAttributionCollection,\n\tIAttributionCollectionSerializer,\n\tIAttributionCollectionSpec,\n\tSerializedAttributionCollection,\n\tSequenceOffsets,\n} from \"./attributionCollection.js\";\nexport { createInsertOnlyAttributionPolicy } from \"./attributionPolicy.js\";\nexport { Client, IClientEvents } from \"./client.js\";\nexport {\n\tConflictAction,\n\tDictionary,\n\tIRBAugmentation,\n\tIRBMatcher,\n\tKeyComparer,\n\tProperty,\n\tPropertyAction,\n\tQProperty,\n\tRBColor,\n\tRBNode,\n\tRBNodeActions,\n\tRedBlackTree,\n\tSortedDictionary,\n} from \"./collections/index.js\";\nexport { UnassignedSequenceNumber, UniversalSequenceNumber } from \"./constants.js\";\nexport {\n\tcreateDetachedLocalReferencePosition,\n\tLocalReferenceCollection,\n\tLocalReferencePosition,\n\tSlidingPreference,\n} from \"./localReference.js\";\nexport {\n\tAttributionPolicy,\n\tIMergeTreeAttributionOptions,\n\tIMergeTreeOptions,\n\tgetSlideToSegoff,\n} from \"./mergeTree.js\";\nexport {\n\tIMergeTreeClientSequenceArgs,\n\tIMergeTreeDeltaCallbackArgs,\n\tIMergeTreeDeltaOpArgs,\n\tIMergeTreeMaintenanceCallbackArgs,\n\tIMergeTreeSegmentDelta,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaOperationTypes,\n\tMergeTreeMaintenanceType,\n} from \"./mergeTreeDeltaCallback.js\";\nexport {\n\tBaseSegment,\n\tCollaborationWindow,\n\tdebugMarkerToString,\n\tIJSONMarkerSegment,\n\tIMergeNodeCommon,\n\tIMoveInfo,\n\tIRemovalInfo,\n\tISegment,\n\tISegmentAction,\n\tMarker,\n\tMergeNode,\n\treservedMarkerIdKey,\n\treservedMarkerSimpleTypeKey,\n\tSegmentGroup,\n\ttoRemovalInfo,\n} from \"./mergeTreeNodes.js\";\nexport {\n\tTrackable,\n\tTrackingGroup,\n\tITrackingGroup,\n\tTrackingGroupCollection,\n} from \"./mergeTreeTracking.js\";\nexport {\n\tcreateAnnotateRangeOp,\n\tcreateGroupOp,\n\tcreateInsertOp,\n\tcreateInsertSegmentOp,\n\tcreateRemoveRangeOp,\n\tcreateObliterateRangeOp,\n} from \"./opBuilder.js\";\nexport {\n\tIJSONSegment,\n\tIMarkerDef,\n\tIMergeTreeAnnotateMsg,\n\tIMergeTreeDelta,\n\tIMergeTreeDeltaOp,\n\tIMergeTreeGroupMsg,\n\tIMergeTreeInsertMsg,\n\tIMergeTreeOp,\n\tIMergeTreeRemoveMsg,\n\tIRelativePosition,\n\tMergeTreeDeltaType,\n\tReferenceType,\n\tIMergeTreeObliterateMsg,\n} from \"./ops.js\";\nexport { addProperties, createMap, MapLike, matchProperties, PropertySet } from \"./properties.js\";\nexport {\n\tcompareReferencePositions,\n\tDetachedReferencePosition,\n\tmaxReferencePosition,\n\tminReferencePosition,\n\tReferencePosition,\n\trefGetTileLabels,\n\trefHasTileLabel,\n\trefHasTileLabels,\n\trefTypeIncludesFlag,\n\treservedRangeLabelsKey,\n\treservedTileLabelsKey,\n} from \"./referencePositions.js\";\nexport { SegmentGroupCollection } from \"./segmentGroupCollection.js\";\nexport { PropertiesManager, PropertiesRollback } from \"./segmentPropertiesManager.js\";\nexport { SortedSet } from \"./sortedSet.js\";\nexport { SortedSegmentSet, SortedSegmentSetItem } from \"./sortedSegmentSet.js\";\nexport { IJSONTextSegment, IMergeTreeTextHelper, TextSegment } from \"./textSegment.js\";\nexport {\n\tappendToMergeTreeDeltaRevertibles,\n\tdiscardMergeTreeDeltaRevertible,\n\tisMergeTreeDeltaRevertible,\n\tMergeTreeDeltaRevertible,\n\tMergeTreeRevertibleDriver,\n\trevertMergeTreeDeltaRevertibles,\n} from \"./revertibles.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AASH,+DAIgC;AAH/B,yIAAA,iCAAiC,OAAA;AACjC,sJAAA,8CAA8C,OAAA;AAC9C,kKAAA,0DAA0D,OAAA;AAE3D,yCAAoD;AAA3C,mGAAA,MAAM,OAAA;AACf,mDAcgC;AAL/B,mGAAA,OAAO,OAAA;AAGP,wGAAA,YAAY,OAAA;AAGb,+CAAmF;AAA1E,wHAAA,wBAAwB,OAAA;AAAE,uHAAA,uBAAuB,OAAA;AAC1D,yDAK6B;AAJ5B,yIAAA,oCAAoC,OAAA;AACpC,6HAAA,wBAAwB,OAAA;AAExB,sHAAA,iBAAiB,OAAA;AAElB,+CAKwB;AADvB,gHAAA,gBAAgB,OAAA;AAEjB,yEASqC;AADpC,qIAAA,wBAAwB,OAAA;AAEzB,yDAgB6B;AAf5B,gHAAA,WAAW,OAAA;AACX,wHAAA,mBAAmB,OAAA;AACnB,wHAAA,mBAAmB,OAAA;AAOnB,2GAAA,MAAM,OAAA;AACN,8GAAA,SAAS,OAAA;AACT,wHAAA,mBAAmB,OAAA;AACnB,gIAAA,2BAA2B,OAAA;AAE3B,kHAAA,aAAa,OAAA;AAEd,+DAKgC;AAH/B,qHAAA,aAAa,OAAA;AAEb,+HAAA,uBAAuB,OAAA;AAExB,+CAOwB;AANvB,qHAAA,qBAAqB,OAAA;AACrB,6GAAA,aAAa,OAAA;AACb,8GAAA,cAAc,OAAA;AACd,qHAAA,qBAAqB,OAAA;AACrB,mHAAA,mBAAmB,OAAA;AACnB,uHAAA,uBAAuB,OAAA;AAExB,mCAckB;AAHjB,4GAAA,kBAAkB,OAAA;AAClB,uGAAA,aAAa,OAAA;AAGd,iDAAkG;AAAzF,8GAAA,aAAa,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAW,gHAAA,eAAe,OAAA;AAC3D,iEAYiC;AAXhC,kIAAA,yBAAyB,OAAA;AACzB,kIAAA,yBAAyB,OAAA;AACzB,6HAAA,oBAAoB,OAAA;AACpB,6HAAA,oBAAoB,OAAA;AAEpB,yHAAA,gBAAgB,OAAA;AAChB,wHAAA,eAAe,OAAA;AACf,yHAAA,gBAAgB,OAAA;AAChB,4HAAA,mBAAmB,OAAA;AACnB,+HAAA,sBAAsB,OAAA;AACtB,8HAAA,qBAAqB,OAAA;AAEtB,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAC/B,6EAAsF;AAA7E,gIAAA,iBAAiB,OAAA;AAAE,iIAAA,kBAAkB,OAAA;AAC9C,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,6DAA+E;AAAtE,uHAAA,gBAAgB,OAAA;AACzB,mDAAuF;AAAtC,6GAAA,WAAW,OAAA;AAC5D,mDAO0B;AANzB,mIAAA,iCAAiC,OAAA;AACjC,iIAAA,+BAA+B,OAAA;AAC/B,4HAAA,0BAA0B,OAAA;AAG1B,iIAAA,+BAA+B,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tIAttributionCollection,\n\tIAttributionCollectionSerializer,\n\tIAttributionCollectionSpec,\n\tSerializedAttributionCollection,\n\tSequenceOffsets,\n} from \"./attributionCollection.js\";\nexport {\n\tcreateInsertOnlyAttributionPolicy,\n\tcreatePropertyTrackingAttributionPolicyFactory,\n\tcreatePropertyTrackingAndInsertionAttributionPolicyFactory,\n} from \"./attributionPolicy.js\";\nexport { Client, IClientEvents } from \"./client.js\";\nexport {\n\tConflictAction,\n\tDictionary,\n\tIRBAugmentation,\n\tIRBMatcher,\n\tKeyComparer,\n\tProperty,\n\tPropertyAction,\n\tQProperty,\n\tRBColor,\n\tRBNode,\n\tRBNodeActions,\n\tRedBlackTree,\n\tSortedDictionary,\n} from \"./collections/index.js\";\nexport { UnassignedSequenceNumber, UniversalSequenceNumber } from \"./constants.js\";\nexport {\n\tcreateDetachedLocalReferencePosition,\n\tLocalReferenceCollection,\n\tLocalReferencePosition,\n\tSlidingPreference,\n} from \"./localReference.js\";\nexport {\n\tAttributionPolicy,\n\tIMergeTreeAttributionOptions,\n\tIMergeTreeOptions,\n\tgetSlideToSegoff,\n} from \"./mergeTree.js\";\nexport {\n\tIMergeTreeClientSequenceArgs,\n\tIMergeTreeDeltaCallbackArgs,\n\tIMergeTreeDeltaOpArgs,\n\tIMergeTreeMaintenanceCallbackArgs,\n\tIMergeTreeSegmentDelta,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaOperationTypes,\n\tMergeTreeMaintenanceType,\n} from \"./mergeTreeDeltaCallback.js\";\nexport {\n\tBaseSegment,\n\tCollaborationWindow,\n\tdebugMarkerToString,\n\tIJSONMarkerSegment,\n\tIMergeNodeCommon,\n\tIMoveInfo,\n\tIRemovalInfo,\n\tISegment,\n\tISegmentAction,\n\tMarker,\n\tMergeNode,\n\treservedMarkerIdKey,\n\treservedMarkerSimpleTypeKey,\n\tSegmentGroup,\n\ttoRemovalInfo,\n} from \"./mergeTreeNodes.js\";\nexport {\n\tTrackable,\n\tTrackingGroup,\n\tITrackingGroup,\n\tTrackingGroupCollection,\n} from \"./mergeTreeTracking.js\";\nexport {\n\tcreateAnnotateRangeOp,\n\tcreateGroupOp,\n\tcreateInsertOp,\n\tcreateInsertSegmentOp,\n\tcreateRemoveRangeOp,\n\tcreateObliterateRangeOp,\n} from \"./opBuilder.js\";\nexport {\n\tIJSONSegment,\n\tIMarkerDef,\n\tIMergeTreeAnnotateMsg,\n\tIMergeTreeDelta,\n\tIMergeTreeDeltaOp,\n\tIMergeTreeGroupMsg,\n\tIMergeTreeInsertMsg,\n\tIMergeTreeOp,\n\tIMergeTreeRemoveMsg,\n\tIRelativePosition,\n\tMergeTreeDeltaType,\n\tReferenceType,\n\tIMergeTreeObliterateMsg,\n} from \"./ops.js\";\nexport { addProperties, createMap, MapLike, matchProperties, PropertySet } from \"./properties.js\";\nexport {\n\tcompareReferencePositions,\n\tDetachedReferencePosition,\n\tmaxReferencePosition,\n\tminReferencePosition,\n\tReferencePosition,\n\trefGetTileLabels,\n\trefHasTileLabel,\n\trefHasTileLabels,\n\trefTypeIncludesFlag,\n\treservedRangeLabelsKey,\n\treservedTileLabelsKey,\n} from \"./referencePositions.js\";\nexport { SegmentGroupCollection } from \"./segmentGroupCollection.js\";\nexport { PropertiesManager, PropertiesRollback } from \"./segmentPropertiesManager.js\";\nexport { SortedSet } from \"./sortedSet.js\";\nexport { SortedSegmentSet, SortedSegmentSetItem } from \"./sortedSegmentSet.js\";\nexport { IJSONTextSegment, IMergeTreeTextHelper, TextSegment } from \"./textSegment.js\";\nexport {\n\tappendToMergeTreeDeltaRevertibles,\n\tdiscardMergeTreeDeltaRevertible,\n\tisMergeTreeDeltaRevertible,\n\tMergeTreeDeltaRevertible,\n\tMergeTreeRevertibleDriver,\n\trevertMergeTreeDeltaRevertibles,\n} from \"./revertibles.js\";\n"]}
@@ -0,0 +1,76 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
+ */
10
+
11
+ export {
12
+ // alpha APIs
13
+ AttributionPolicy,
14
+ BaseSegment,
15
+ Client,
16
+ CollaborationWindow,
17
+ IAttributionCollection,
18
+ IAttributionCollectionSerializer,
19
+ IAttributionCollectionSpec,
20
+ IClientEvents,
21
+ IJSONMarkerSegment,
22
+ IJSONSegment,
23
+ IJSONTextSegment,
24
+ IMarkerDef,
25
+ IMergeNodeCommon,
26
+ IMergeTreeAnnotateMsg,
27
+ IMergeTreeAttributionOptions,
28
+ IMergeTreeDelta,
29
+ IMergeTreeDeltaCallbackArgs,
30
+ IMergeTreeDeltaOp,
31
+ IMergeTreeDeltaOpArgs,
32
+ IMergeTreeGroupMsg,
33
+ IMergeTreeInsertMsg,
34
+ IMergeTreeMaintenanceCallbackArgs,
35
+ IMergeTreeObliterateMsg,
36
+ IMergeTreeOp,
37
+ IMergeTreeOptions,
38
+ IMergeTreeRemoveMsg,
39
+ IMergeTreeSegmentDelta,
40
+ IMergeTreeTextHelper,
41
+ IMoveInfo,
42
+ IRelativePosition,
43
+ IRemovalInfo,
44
+ ISegment,
45
+ ISegmentAction,
46
+ ITrackingGroup,
47
+ LocalReferenceCollection,
48
+ LocalReferencePosition,
49
+ MapLike,
50
+ Marker,
51
+ MergeNode,
52
+ MergeTreeDeltaOperationType,
53
+ MergeTreeDeltaOperationTypes,
54
+ MergeTreeDeltaRevertible,
55
+ MergeTreeDeltaType,
56
+ MergeTreeMaintenanceType,
57
+ MergeTreeRevertibleDriver,
58
+ PropertiesManager,
59
+ PropertiesRollback,
60
+ PropertySet,
61
+ ReferencePosition,
62
+ ReferenceType,
63
+ SegmentGroup,
64
+ SegmentGroupCollection,
65
+ SequenceOffsets,
66
+ SerializedAttributionCollection,
67
+ SlidingPreference,
68
+ TextSegment,
69
+ Trackable,
70
+ TrackingGroup,
71
+ TrackingGroupCollection,
72
+ appendToMergeTreeDeltaRevertibles,
73
+ discardMergeTreeDeltaRevertible,
74
+ reservedMarkerIdKey,
75
+ revertMergeTreeDeltaRevertibles
76
+ } from "./index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.LocalReferenceCollection = exports.setValidateRefCount = exports.filterLocalReferencePositions = exports.anyLocalReferencePosition = exports.createDetachedLocalReferencePosition = exports.SlidingPreference = void 0;
8
- const core_utils_1 = require("@fluidframework/core-utils");
9
- const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
8
+ const internal_1 = require("@fluidframework/core-utils/internal");
9
+ const internal_2 = require("@fluidframework/telemetry-utils/internal");
10
10
  const index_js_1 = require("./collections/index.js");
11
11
  const mergeTreeTracking_js_1 = require("./mergeTreeTracking.js");
12
12
  const ops_js_1 = require("./ops.js");
@@ -40,7 +40,7 @@ function _validateReferenceType(refType) {
40
40
  ++exclusiveCount;
41
41
  }
42
42
  if (exclusiveCount > 1) {
43
- throw new telemetry_utils_1.UsageError("Reference types can only be one of Transient, SlideOnRemove, and StayOnRemove");
43
+ throw new internal_2.UsageError("Reference types can only be one of Transient, SlideOnRemove, and StayOnRemove");
44
44
  }
45
45
  }
46
46
  /**
@@ -103,7 +103,7 @@ function createDetachedLocalReferencePosition(refType) {
103
103
  }
104
104
  exports.createDetachedLocalReferencePosition = createDetachedLocalReferencePosition;
105
105
  function assertLocalReferences(lref) {
106
- (0, core_utils_1.assert)(lref instanceof LocalReference, 0x2e0 /* "lref not a Local Reference" */);
106
+ (0, internal_1.assert)(lref instanceof LocalReference, 0x2e0 /* "lref not a Local Reference" */);
107
107
  }
108
108
  /**
109
109
  * @returns true if `func` returns true for any position within the collection
@@ -152,7 +152,7 @@ class LocalReferenceCollection {
152
152
  if (!seg1.localRefs) {
153
153
  seg1.localRefs = new LocalReferenceCollection(seg1);
154
154
  }
155
- (0, core_utils_1.assert)(seg1.localRefs.refsByOffset.length === seg1.cachedLength, 0x2be /* "LocalReferences array contains a gap" */);
155
+ (0, internal_1.assert)(seg1.localRefs.refsByOffset.length === seg1.cachedLength, 0x2be /* "LocalReferences array contains a gap" */);
156
156
  seg1.localRefs.append(seg2.localRefs);
157
157
  }
158
158
  else if (seg1.localRefs) {
@@ -238,7 +238,7 @@ class LocalReferenceCollection {
238
238
  */
239
239
  addLocalRef(lref, offset) {
240
240
  assertLocalReferences(lref);
241
- (0, core_utils_1.assert)(offset < this.segment.cachedLength, 0x348 /* offset cannot be beyond segment length */);
241
+ (0, internal_1.assert)(offset < this.segment.cachedLength, 0x348 /* offset cannot be beyond segment length */);
242
242
  if ((0, referencePositions_js_1.refTypeIncludesFlag)(lref, ops_js_1.ReferenceType.Transient)) {
243
243
  lref.link(this.segment, offset, undefined);
244
244
  }
@@ -429,7 +429,7 @@ class LocalReferenceCollection {
429
429
  walkReferences(visitor, start, forward = true) {
430
430
  if (start !== undefined) {
431
431
  if (!this.has(start)) {
432
- throw new telemetry_utils_1.UsageError("start must be in collection");
432
+ throw new internal_2.UsageError("start must be in collection");
433
433
  }
434
434
  assertLocalReferences(start);
435
435
  }
@@ -1 +1 @@
1
- {"version":3,"file":"localReference.js","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils\";\nimport { UsageError } from \"@fluidframework/telemetry-utils\";\nimport { DoublyLinkedList, ListNode, walkList } from \"./collections/index.js\";\nimport { ISegment } from \"./mergeTreeNodes.js\";\nimport { TrackingGroup, TrackingGroupCollection } from \"./mergeTreeTracking.js\";\nimport { ReferenceType } from \"./ops.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { addProperties, PropertySet } from \"./properties.js\";\nimport { ReferencePosition, refTypeIncludesFlag } from \"./referencePositions.js\";\n\n/**\n * Dictates the preferential direction for a {@link ReferencePosition} to slide\n * in a merge-tree\n * @alpha\n */\nexport const SlidingPreference = {\n\t/**\n\t * Prefer sliding towards the start of the tree\n\t */\n\tBACKWARD: 0,\n\t/**\n\t * Prefer sliding towards the end of the tree\n\t */\n\tFORWARD: 1,\n} as const;\n\n/**\n * Dictates the preferential direction for a {@link ReferencePosition} to slide\n * in a merge-tree\n * @alpha\n */\nexport type SlidingPreference = (typeof SlidingPreference)[keyof typeof SlidingPreference];\n\nfunction _validateReferenceType(refType: ReferenceType) {\n\tlet exclusiveCount = 0;\n\tif (refTypeIncludesFlag(refType, ReferenceType.Transient)) {\n\t\t++exclusiveCount;\n\t}\n\tif (refTypeIncludesFlag(refType, ReferenceType.SlideOnRemove)) {\n\t\t++exclusiveCount;\n\t}\n\tif (refTypeIncludesFlag(refType, ReferenceType.StayOnRemove)) {\n\t\t++exclusiveCount;\n\t}\n\tif (exclusiveCount > 1) {\n\t\tthrow new UsageError(\n\t\t\t\"Reference types can only be one of Transient, SlideOnRemove, and StayOnRemove\",\n\t\t);\n\t}\n}\n/**\n * @sealed\n * @alpha\n */\nexport interface LocalReferencePosition extends ReferencePosition {\n\tcallbacks?: Partial<\n\t\tRecord<\"beforeSlide\" | \"afterSlide\", (ref: LocalReferencePosition) => void>\n\t>;\n\treadonly trackingCollection: TrackingGroupCollection;\n\t/**\n\t * Whether or not this reference position can slide onto one of the two\n\t * special segments representing the position before or after the tree\n\t */\n\treadonly canSlideToEndpoint?: boolean;\n}\n\n/**\n * @privateRemarks This should not be exported outside merge tree.\n * @internal\n */\nclass LocalReference implements LocalReferencePosition {\n\tpublic properties: PropertySet | undefined;\n\n\tprivate segment: ISegment | undefined;\n\tprivate offset: number = 0;\n\tprivate listNode: ListNode<LocalReference> | undefined;\n\n\tpublic callbacks?:\n\t\t| Partial<Record<\"beforeSlide\" | \"afterSlide\", (ref: LocalReferencePosition) => void>>\n\t\t| undefined;\n\tprivate _trackingCollection?: TrackingGroupCollection;\n\tpublic get trackingCollection(): TrackingGroupCollection {\n\t\treturn (this._trackingCollection ??= new TrackingGroupCollection(this));\n\t}\n\n\tconstructor(\n\t\tpublic refType = ReferenceType.Simple,\n\t\tproperties?: PropertySet,\n\t\tpublic readonly slidingPreference: SlidingPreference = SlidingPreference.FORWARD,\n\t\tpublic readonly canSlideToEndpoint?: boolean,\n\t) {\n\t\t_validateReferenceType(refType);\n\t\tthis.properties = properties;\n\t}\n\n\tpublic link(\n\t\tsegment: ISegment | undefined,\n\t\toffset: number,\n\t\tlistNode: ListNode<LocalReference> | undefined,\n\t) {\n\t\tif (listNode !== this.listNode && this.listNode !== undefined) {\n\t\t\tthis.segment?.localRefs?.removeLocalRef(this);\n\t\t}\n\t\tthis.listNode = listNode;\n\n\t\tif (segment !== this.segment) {\n\t\t\tconst groups: TrackingGroup[] = [];\n\t\t\tthis.trackingCollection.trackingGroups.forEach((tg) => {\n\t\t\t\ttg.unlink(this);\n\t\t\t\tgroups.push(tg);\n\t\t\t});\n\n\t\t\tthis.segment = segment;\n\n\t\t\tgroups.forEach((tg) => tg.link(this));\n\t\t}\n\t\tthis.offset = offset;\n\t}\n\n\tpublic isLeaf() {\n\t\treturn false;\n\t}\n\n\tpublic addProperties(newProps: PropertySet) {\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tthis.properties = addProperties(this.properties, newProps);\n\t}\n\n\tpublic getSegment() {\n\t\treturn this.segment;\n\t}\n\n\tpublic getOffset() {\n\t\treturn this.offset;\n\t}\n\n\tpublic getListNode() {\n\t\treturn this.listNode;\n\t}\n\n\tpublic getProperties() {\n\t\treturn this.properties;\n\t}\n}\n\n/**\n * @internal\n */\nexport function createDetachedLocalReferencePosition(\n\trefType?: ReferenceType,\n): LocalReferencePosition {\n\treturn new LocalReference(refType, undefined);\n}\n\ninterface IRefsAtOffset {\n\tbefore?: DoublyLinkedList<LocalReference>;\n\tat?: DoublyLinkedList<LocalReference>;\n\tafter?: DoublyLinkedList<LocalReference>;\n}\n\nfunction assertLocalReferences(lref: any): asserts lref is LocalReference {\n\tassert(lref instanceof LocalReference, 0x2e0 /* \"lref not a Local Reference\" */);\n}\n\n/**\n * @returns true if `func` returns true for any position within the collection\n */\nexport function anyLocalReferencePosition(\n\tcollection: LocalReferenceCollection,\n\tfunc: (pos: LocalReferencePosition) => boolean,\n): boolean {\n\tfor (const pos of collection) {\n\t\tif (func(pos)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @returns only the local reference positions for which the `predicate` returns\n * true\n */\nexport function* filterLocalReferencePositions(\n\tcollection: LocalReferenceCollection,\n\tpredicate: (pos: LocalReferencePosition) => boolean,\n): Generator<LocalReferencePosition> {\n\tfor (const pos of collection) {\n\t\tif (predicate(pos)) {\n\t\t\tyield pos;\n\t\t}\n\t}\n}\n\n/**\n * Injectable hook for validating that the refCount property matches the\n * expected value\n */\nlet validateRefCount: ((collection?: LocalReferenceCollection) => void) | undefined;\n\nexport function setValidateRefCount(cb?: (collection?: LocalReferenceCollection) => void) {\n\tvalidateRefCount = cb;\n}\n\n/**\n * Represents a collection of {@link LocalReferencePosition}s associated with\n * one segment in a merge-tree.\n * Represents a collection of {@link LocalReferencePosition}s associated with one segment in a merge-tree.\n * @sealed\n *\n * @alpha\n */\nexport class LocalReferenceCollection {\n\tpublic static append(seg1: ISegment, seg2: ISegment) {\n\t\tif (seg2.localRefs && !seg2.localRefs.empty) {\n\t\t\tif (!seg1.localRefs) {\n\t\t\t\tseg1.localRefs = new LocalReferenceCollection(seg1);\n\t\t\t}\n\t\t\tassert(\n\t\t\t\tseg1.localRefs.refsByOffset.length === seg1.cachedLength,\n\t\t\t\t0x2be /* \"LocalReferences array contains a gap\" */,\n\t\t\t);\n\t\t\tseg1.localRefs.append(seg2.localRefs);\n\t\t} else if (seg1.localRefs) {\n\t\t\t// Since creating the LocalReferenceCollection, we may have appended\n\t\t\t// segments that had no local references. Account for them now by padding the array.\n\t\t\tseg1.localRefs.refsByOffset.length += seg2.cachedLength;\n\t\t}\n\t\tvalidateRefCount?.(seg1.localRefs);\n\t\tvalidateRefCount?.(seg2.localRefs);\n\t}\n\n\tpublic static setOrGet(segment: ISegment) {\n\t\treturn (segment.localRefs ??= new LocalReferenceCollection(segment));\n\t}\n\n\tprivate readonly refsByOffset: (IRefsAtOffset | undefined)[];\n\tprivate refCount: number = 0;\n\n\t/***/\n\tprivate constructor(\n\t\t/** Segment this `LocalReferenceCollection` is associated to. */\n\t\tprivate readonly segment: ISegment,\n\t\tinitialRefsByfOffset = new Array<IRefsAtOffset | undefined>(segment.cachedLength),\n\t) {\n\t\t// Since javascript arrays are sparse the above won't populate any of the\n\t\t// indices, but it will ensure the length property of the array matches\n\t\t// the length of the segment.\n\t\tthis.refsByOffset = initialRefsByfOffset;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic [Symbol.iterator]() {\n\t\tconst subiterators: IterableIterator<ListNode<LocalReferencePosition>>[] = [];\n\t\tfor (const refs of this.refsByOffset) {\n\t\t\tif (refs) {\n\t\t\t\tif (refs.before) {\n\t\t\t\t\tsubiterators.push(refs.before[Symbol.iterator]());\n\t\t\t\t}\n\t\t\t\tif (refs.at) {\n\t\t\t\t\tsubiterators.push(refs.at[Symbol.iterator]());\n\t\t\t\t}\n\t\t\t\tif (refs.after) {\n\t\t\t\t\tsubiterators.push(refs.after[Symbol.iterator]());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst iterator = {\n\t\t\tnext(): IteratorResult<LocalReferencePosition> {\n\t\t\t\twhile (subiterators.length > 0) {\n\t\t\t\t\tconst next = subiterators[0].next();\n\t\t\t\t\tif (next.done === true) {\n\t\t\t\t\t\tsubiterators.shift();\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn { done: next.done, value: next.value.data };\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn { value: undefined, done: true };\n\t\t\t},\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t};\n\t\treturn iterator;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic get empty() {\n\t\tvalidateRefCount?.(this);\n\t\treturn this.refCount === 0;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic createLocalRef(\n\t\toffset: number,\n\t\trefType: ReferenceType,\n\t\tproperties: PropertySet | undefined,\n\t\tslidingPreference?: SlidingPreference,\n\t\tcanSlideToEndpoint?: boolean,\n\t): LocalReferencePosition {\n\t\tconst ref = new LocalReference(refType, properties, slidingPreference, canSlideToEndpoint);\n\t\tref.link(this.segment, offset, undefined);\n\t\tif (!refTypeIncludesFlag(ref, ReferenceType.Transient)) {\n\t\t\tthis.addLocalRef(ref, offset);\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t\treturn ref;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic addLocalRef(lref: LocalReferencePosition, offset: number) {\n\t\tassertLocalReferences(lref);\n\t\tassert(\n\t\t\toffset < this.segment.cachedLength,\n\t\t\t0x348 /* offset cannot be beyond segment length */,\n\t\t);\n\t\tif (refTypeIncludesFlag(lref, ReferenceType.Transient)) {\n\t\t\tlref.link(this.segment, offset, undefined);\n\t\t} else {\n\t\t\tconst refsAtOffset = (this.refsByOffset[offset] = this.refsByOffset[offset] ?? {\n\t\t\t\tat: new DoublyLinkedList(),\n\t\t\t});\n\t\t\tconst atRefs = (refsAtOffset.at = refsAtOffset.at ?? new DoublyLinkedList());\n\n\t\t\tlref.link(this.segment, offset, atRefs.push(lref).last);\n\n\t\t\tthis.refCount++;\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic removeLocalRef(lref: LocalReferencePosition): LocalReferencePosition | undefined {\n\t\tif (this.has(lref)) {\n\t\t\tassertLocalReferences(lref);\n\n\t\t\tconst node = lref.getListNode();\n\t\t\tnode?.list?.remove(node);\n\n\t\t\tlref.link(undefined, 0, undefined);\n\n\t\t\tthis.refCount--;\n\t\t\tvalidateRefCount?.(this);\n\t\t\treturn lref;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * Called by 'append()' implementations to append local refs from the given 'other' segment to the\n\t * end of 'this' segment.\n\t *\n\t * Note: This method should be invoked after the caller has ensured that segments can be merged,\n\t * but before 'this' segment's cachedLength has changed, or the adjustment to the local refs\n\t * will be incorrect.\n\t *\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic append(other: LocalReferenceCollection) {\n\t\tif (!other || other.empty) {\n\t\t\treturn;\n\t\t}\n\t\tthis.refCount += other.refCount;\n\t\tother.refCount = 0;\n\t\tfor (const lref of other) {\n\t\t\tassertLocalReferences(lref);\n\t\t\tlref.link(\n\t\t\t\tthis.segment,\n\t\t\t\tlref.getOffset() + this.refsByOffset.length,\n\t\t\t\tlref.getListNode(),\n\t\t\t);\n\t\t}\n\n\t\tthis.refsByOffset.push(...other.refsByOffset);\n\t\tother.refsByOffset.length = 0;\n\t}\n\t/**\n\t * Returns true of the local reference is in the collection, otherwise false.\n\t *\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic has(lref: ReferencePosition): boolean {\n\t\tif (\n\t\t\t!(lref instanceof LocalReference) ||\n\t\t\trefTypeIncludesFlag(lref, ReferenceType.Transient)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tconst seg = lref.getSegment();\n\t\tif (seg !== this.segment) {\n\t\t\treturn false;\n\t\t}\n\t\t// we should be able to optimize finding the\n\t\t// list head\n\t\tconst listNode = lref.getListNode();\n\t\tif (listNode === undefined) {\n\t\t\treturn false;\n\t\t}\n\t\tconst offset = lref.getOffset();\n\t\tconst refsAtOffset = this.refsByOffset[offset];\n\t\tif (\n\t\t\t!!refsAtOffset?.before?.includes(listNode) ||\n\t\t\t!!refsAtOffset?.at?.includes(listNode) ||\n\t\t\t!!refsAtOffset?.after?.includes(listNode)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Splits this `LocalReferenceCollection` into the intervals [0, offset) and [offset, originalLength).\n\t * Local references in the former half of this split will remain associated with the segment used on construction.\n\t * Local references in the latter half of this split will be transferred to `splitSeg`,\n\t * and its `localRefs` field will be set.\n\t * @param offset - Offset into the original segment at which the collection should be split\n\t * @param splitSeg - Split segment which originally corresponded to the indices [offset, originalLength)\n\t * before splitting.\n\t *\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic split(offset: number, splitSeg: ISegment) {\n\t\tif (!this.empty) {\n\t\t\tconst localRefs = new LocalReferenceCollection(\n\t\t\t\tsplitSeg,\n\t\t\t\tthis.refsByOffset.splice(offset, this.refsByOffset.length - offset),\n\t\t\t);\n\n\t\t\tsplitSeg.localRefs = localRefs;\n\t\t\tfor (const lref of localRefs) {\n\t\t\t\tassertLocalReferences(lref);\n\t\t\t\tlref.link(splitSeg, lref.getOffset() - offset, lref.getListNode());\n\t\t\t\tthis.refCount--;\n\t\t\t\tlocalRefs.refCount++;\n\t\t\t}\n\t\t} else {\n\t\t\t// shrink the offset array when empty and splitting\n\t\t\tthis.refsByOffset.length = offset;\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic addBeforeTombstones(...refs: Iterable<LocalReferencePosition>[]) {\n\t\tconst beforeRefs = this.refsByOffset[0]?.before ?? new DoublyLinkedList();\n\n\t\tif (this.refsByOffset[0]?.before === undefined) {\n\t\t\tconst refsAtOffset = (this.refsByOffset[0] ??= { before: beforeRefs });\n\t\t\trefsAtOffset.before ??= beforeRefs;\n\t\t}\n\n\t\tlet precedingRef: ListNode<LocalReference> | undefined;\n\t\tfor (const iterable of refs) {\n\t\t\tfor (const lref of iterable) {\n\t\t\t\tassertLocalReferences(lref);\n\t\t\t\tif (refTypeIncludesFlag(lref, ReferenceType.StayOnRemove)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (refTypeIncludesFlag(lref, ReferenceType.SlideOnRemove)) {\n\t\t\t\t\tlref.callbacks?.beforeSlide?.(lref);\n\t\t\t\t\tprecedingRef =\n\t\t\t\t\t\tprecedingRef === undefined\n\t\t\t\t\t\t\t? beforeRefs.unshift(lref)?.first\n\t\t\t\t\t\t\t: beforeRefs.insertAfter(precedingRef, lref)?.first;\n\t\t\t\t\tlref.link(this.segment, 0, precedingRef);\n\t\t\t\t\tthis.refCount++;\n\t\t\t\t\tlref.callbacks?.afterSlide?.(lref);\n\t\t\t\t} else {\n\t\t\t\t\tlref.link(undefined, 0, undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t}\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic addAfterTombstones(...refs: Iterable<LocalReferencePosition>[]) {\n\t\tconst lastOffset = this.segment.cachedLength - 1;\n\t\tconst afterRefs = this.refsByOffset[lastOffset]?.after ?? new DoublyLinkedList();\n\n\t\tif (this.refsByOffset[lastOffset]?.after === undefined) {\n\t\t\tconst refsAtOffset = (this.refsByOffset[lastOffset] ??= { after: afterRefs });\n\t\t\trefsAtOffset.after ??= afterRefs;\n\t\t}\n\n\t\tfor (const iterable of refs) {\n\t\t\tfor (const lref of iterable) {\n\t\t\t\tassertLocalReferences(lref);\n\t\t\t\tif (refTypeIncludesFlag(lref, ReferenceType.StayOnRemove)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (refTypeIncludesFlag(lref, ReferenceType.SlideOnRemove)) {\n\t\t\t\t\tlref.callbacks?.beforeSlide?.(lref);\n\t\t\t\t\tafterRefs.push(lref);\n\t\t\t\t\tlref.link(this.segment, lastOffset, afterRefs.last);\n\t\t\t\t\tthis.refCount++;\n\t\t\t\t\tlref.callbacks?.afterSlide?.(lref);\n\t\t\t\t} else {\n\t\t\t\t\tlref.link(undefined, 0, undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic isAfterTombstone(lref: LocalReferencePosition) {\n\t\tconst after = this.refsByOffset[lref.getOffset()]?.after;\n\t\tif (after) {\n\t\t\tassertLocalReferences(lref);\n\t\t\treturn after.includes(lref.getListNode());\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic walkReferences(\n\t\tvisitor: (lref: LocalReferencePosition) => boolean | void | undefined,\n\t\tstart?: LocalReferencePosition,\n\t\tforward: boolean = true,\n\t) {\n\t\tif (start !== undefined) {\n\t\t\tif (!this.has(start)) {\n\t\t\t\tthrow new UsageError(\"start must be in collection\");\n\t\t\t}\n\t\t\tassertLocalReferences(start);\n\t\t}\n\t\tlet offset = start?.getOffset() ?? (forward ? 0 : this.segment.cachedLength - 1);\n\n\t\tconst offsetPositions: DoublyLinkedList<IRefsAtOffset[keyof IRefsAtOffset]> =\n\t\t\tnew DoublyLinkedList();\n\t\toffsetPositions.push(\n\t\t\tthis.refsByOffset[offset]?.before,\n\t\t\tthis.refsByOffset[offset]?.at,\n\t\t\tthis.refsByOffset[offset]?.after,\n\t\t);\n\n\t\tconst startNode = start?.getListNode();\n\t\tconst startList = startNode?.list;\n\n\t\tif (startList !== undefined) {\n\t\t\tif (forward) {\n\t\t\t\twhile (!offsetPositions.empty && offsetPositions.first !== startNode) {\n\t\t\t\t\toffsetPositions.shift();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile (!offsetPositions.empty && offsetPositions.last !== startNode) {\n\t\t\t\t\toffsetPositions.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst listWalker = (pos: DoublyLinkedList<LocalReference>) => {\n\t\t\treturn walkList(\n\t\t\t\tpos,\n\t\t\t\t(node) => visitor(node.data),\n\t\t\t\tstartList === pos ? startNode : undefined,\n\t\t\t\tforward,\n\t\t\t);\n\t\t};\n\t\tconst increment = forward ? 1 : -1;\n\t\twhile (offset >= 0 && offset < this.refsByOffset.length) {\n\t\t\twhile (offsetPositions.length > 0) {\n\t\t\t\tconst offsetPos = forward ? offsetPositions.shift() : offsetPositions.pop();\n\t\t\t\tif (offsetPos?.data !== undefined) {\n\t\t\t\t\tif (listWalker(offsetPos.data) === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset += increment;\n\t\t\toffsetPositions.push(\n\t\t\t\tthis.refsByOffset[offset]?.before,\n\t\t\t\tthis.refsByOffset[offset]?.at,\n\t\t\t\tthis.refsByOffset[offset]?.after,\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t}\n}\n"]}
1
+ {"version":3,"file":"localReference.js","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { DoublyLinkedList, ListNode, walkList } from \"./collections/index.js\";\nimport { ISegment } from \"./mergeTreeNodes.js\";\nimport { TrackingGroup, TrackingGroupCollection } from \"./mergeTreeTracking.js\";\nimport { ReferenceType } from \"./ops.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { PropertySet, addProperties } from \"./properties.js\";\nimport { ReferencePosition, refTypeIncludesFlag } from \"./referencePositions.js\";\n\n/**\n * Dictates the preferential direction for a {@link ReferencePosition} to slide\n * in a merge-tree\n * @alpha\n */\nexport const SlidingPreference = {\n\t/**\n\t * Prefer sliding towards the start of the tree\n\t */\n\tBACKWARD: 0,\n\t/**\n\t * Prefer sliding towards the end of the tree\n\t */\n\tFORWARD: 1,\n} as const;\n\n/**\n * Dictates the preferential direction for a {@link ReferencePosition} to slide\n * in a merge-tree\n * @alpha\n */\nexport type SlidingPreference = (typeof SlidingPreference)[keyof typeof SlidingPreference];\n\nfunction _validateReferenceType(refType: ReferenceType) {\n\tlet exclusiveCount = 0;\n\tif (refTypeIncludesFlag(refType, ReferenceType.Transient)) {\n\t\t++exclusiveCount;\n\t}\n\tif (refTypeIncludesFlag(refType, ReferenceType.SlideOnRemove)) {\n\t\t++exclusiveCount;\n\t}\n\tif (refTypeIncludesFlag(refType, ReferenceType.StayOnRemove)) {\n\t\t++exclusiveCount;\n\t}\n\tif (exclusiveCount > 1) {\n\t\tthrow new UsageError(\n\t\t\t\"Reference types can only be one of Transient, SlideOnRemove, and StayOnRemove\",\n\t\t);\n\t}\n}\n/**\n * @sealed\n * @alpha\n */\nexport interface LocalReferencePosition extends ReferencePosition {\n\tcallbacks?: Partial<\n\t\tRecord<\"beforeSlide\" | \"afterSlide\", (ref: LocalReferencePosition) => void>\n\t>;\n\treadonly trackingCollection: TrackingGroupCollection;\n\t/**\n\t * Whether or not this reference position can slide onto one of the two\n\t * special segments representing the position before or after the tree\n\t */\n\treadonly canSlideToEndpoint?: boolean;\n}\n\n/**\n * @privateRemarks This should not be exported outside merge tree.\n * @internal\n */\nclass LocalReference implements LocalReferencePosition {\n\tpublic properties: PropertySet | undefined;\n\n\tprivate segment: ISegment | undefined;\n\tprivate offset: number = 0;\n\tprivate listNode: ListNode<LocalReference> | undefined;\n\n\tpublic callbacks?:\n\t\t| Partial<Record<\"beforeSlide\" | \"afterSlide\", (ref: LocalReferencePosition) => void>>\n\t\t| undefined;\n\tprivate _trackingCollection?: TrackingGroupCollection;\n\tpublic get trackingCollection(): TrackingGroupCollection {\n\t\treturn (this._trackingCollection ??= new TrackingGroupCollection(this));\n\t}\n\n\tconstructor(\n\t\tpublic refType = ReferenceType.Simple,\n\t\tproperties?: PropertySet,\n\t\tpublic readonly slidingPreference: SlidingPreference = SlidingPreference.FORWARD,\n\t\tpublic readonly canSlideToEndpoint?: boolean,\n\t) {\n\t\t_validateReferenceType(refType);\n\t\tthis.properties = properties;\n\t}\n\n\tpublic link(\n\t\tsegment: ISegment | undefined,\n\t\toffset: number,\n\t\tlistNode: ListNode<LocalReference> | undefined,\n\t) {\n\t\tif (listNode !== this.listNode && this.listNode !== undefined) {\n\t\t\tthis.segment?.localRefs?.removeLocalRef(this);\n\t\t}\n\t\tthis.listNode = listNode;\n\n\t\tif (segment !== this.segment) {\n\t\t\tconst groups: TrackingGroup[] = [];\n\t\t\tthis.trackingCollection.trackingGroups.forEach((tg) => {\n\t\t\t\ttg.unlink(this);\n\t\t\t\tgroups.push(tg);\n\t\t\t});\n\n\t\t\tthis.segment = segment;\n\n\t\t\tgroups.forEach((tg) => tg.link(this));\n\t\t}\n\t\tthis.offset = offset;\n\t}\n\n\tpublic isLeaf() {\n\t\treturn false;\n\t}\n\n\tpublic addProperties(newProps: PropertySet) {\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tthis.properties = addProperties(this.properties, newProps);\n\t}\n\n\tpublic getSegment() {\n\t\treturn this.segment;\n\t}\n\n\tpublic getOffset() {\n\t\treturn this.offset;\n\t}\n\n\tpublic getListNode() {\n\t\treturn this.listNode;\n\t}\n\n\tpublic getProperties() {\n\t\treturn this.properties;\n\t}\n}\n\n/**\n * @internal\n */\nexport function createDetachedLocalReferencePosition(\n\trefType?: ReferenceType,\n): LocalReferencePosition {\n\treturn new LocalReference(refType, undefined);\n}\n\ninterface IRefsAtOffset {\n\tbefore?: DoublyLinkedList<LocalReference>;\n\tat?: DoublyLinkedList<LocalReference>;\n\tafter?: DoublyLinkedList<LocalReference>;\n}\n\nfunction assertLocalReferences(lref: any): asserts lref is LocalReference {\n\tassert(lref instanceof LocalReference, 0x2e0 /* \"lref not a Local Reference\" */);\n}\n\n/**\n * @returns true if `func` returns true for any position within the collection\n */\nexport function anyLocalReferencePosition(\n\tcollection: LocalReferenceCollection,\n\tfunc: (pos: LocalReferencePosition) => boolean,\n): boolean {\n\tfor (const pos of collection) {\n\t\tif (func(pos)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @returns only the local reference positions for which the `predicate` returns\n * true\n */\nexport function* filterLocalReferencePositions(\n\tcollection: LocalReferenceCollection,\n\tpredicate: (pos: LocalReferencePosition) => boolean,\n): Generator<LocalReferencePosition> {\n\tfor (const pos of collection) {\n\t\tif (predicate(pos)) {\n\t\t\tyield pos;\n\t\t}\n\t}\n}\n\n/**\n * Injectable hook for validating that the refCount property matches the\n * expected value\n */\nlet validateRefCount: ((collection?: LocalReferenceCollection) => void) | undefined;\n\nexport function setValidateRefCount(cb?: (collection?: LocalReferenceCollection) => void) {\n\tvalidateRefCount = cb;\n}\n\n/**\n * Represents a collection of {@link LocalReferencePosition}s associated with\n * one segment in a merge-tree.\n * Represents a collection of {@link LocalReferencePosition}s associated with one segment in a merge-tree.\n * @sealed\n *\n * @alpha\n */\nexport class LocalReferenceCollection {\n\tpublic static append(seg1: ISegment, seg2: ISegment) {\n\t\tif (seg2.localRefs && !seg2.localRefs.empty) {\n\t\t\tif (!seg1.localRefs) {\n\t\t\t\tseg1.localRefs = new LocalReferenceCollection(seg1);\n\t\t\t}\n\t\t\tassert(\n\t\t\t\tseg1.localRefs.refsByOffset.length === seg1.cachedLength,\n\t\t\t\t0x2be /* \"LocalReferences array contains a gap\" */,\n\t\t\t);\n\t\t\tseg1.localRefs.append(seg2.localRefs);\n\t\t} else if (seg1.localRefs) {\n\t\t\t// Since creating the LocalReferenceCollection, we may have appended\n\t\t\t// segments that had no local references. Account for them now by padding the array.\n\t\t\tseg1.localRefs.refsByOffset.length += seg2.cachedLength;\n\t\t}\n\t\tvalidateRefCount?.(seg1.localRefs);\n\t\tvalidateRefCount?.(seg2.localRefs);\n\t}\n\n\tpublic static setOrGet(segment: ISegment) {\n\t\treturn (segment.localRefs ??= new LocalReferenceCollection(segment));\n\t}\n\n\tprivate readonly refsByOffset: (IRefsAtOffset | undefined)[];\n\tprivate refCount: number = 0;\n\n\t/***/\n\tprivate constructor(\n\t\t/** Segment this `LocalReferenceCollection` is associated to. */\n\t\tprivate readonly segment: ISegment,\n\t\tinitialRefsByfOffset = new Array<IRefsAtOffset | undefined>(segment.cachedLength),\n\t) {\n\t\t// Since javascript arrays are sparse the above won't populate any of the\n\t\t// indices, but it will ensure the length property of the array matches\n\t\t// the length of the segment.\n\t\tthis.refsByOffset = initialRefsByfOffset;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic [Symbol.iterator]() {\n\t\tconst subiterators: IterableIterator<ListNode<LocalReferencePosition>>[] = [];\n\t\tfor (const refs of this.refsByOffset) {\n\t\t\tif (refs) {\n\t\t\t\tif (refs.before) {\n\t\t\t\t\tsubiterators.push(refs.before[Symbol.iterator]());\n\t\t\t\t}\n\t\t\t\tif (refs.at) {\n\t\t\t\t\tsubiterators.push(refs.at[Symbol.iterator]());\n\t\t\t\t}\n\t\t\t\tif (refs.after) {\n\t\t\t\t\tsubiterators.push(refs.after[Symbol.iterator]());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst iterator = {\n\t\t\tnext(): IteratorResult<LocalReferencePosition> {\n\t\t\t\twhile (subiterators.length > 0) {\n\t\t\t\t\tconst next = subiterators[0].next();\n\t\t\t\t\tif (next.done === true) {\n\t\t\t\t\t\tsubiterators.shift();\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn { done: next.done, value: next.value.data };\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn { value: undefined, done: true };\n\t\t\t},\n\t\t\t[Symbol.iterator]() {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t};\n\t\treturn iterator;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic get empty() {\n\t\tvalidateRefCount?.(this);\n\t\treturn this.refCount === 0;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic createLocalRef(\n\t\toffset: number,\n\t\trefType: ReferenceType,\n\t\tproperties: PropertySet | undefined,\n\t\tslidingPreference?: SlidingPreference,\n\t\tcanSlideToEndpoint?: boolean,\n\t): LocalReferencePosition {\n\t\tconst ref = new LocalReference(refType, properties, slidingPreference, canSlideToEndpoint);\n\t\tref.link(this.segment, offset, undefined);\n\t\tif (!refTypeIncludesFlag(ref, ReferenceType.Transient)) {\n\t\t\tthis.addLocalRef(ref, offset);\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t\treturn ref;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic addLocalRef(lref: LocalReferencePosition, offset: number) {\n\t\tassertLocalReferences(lref);\n\t\tassert(\n\t\t\toffset < this.segment.cachedLength,\n\t\t\t0x348 /* offset cannot be beyond segment length */,\n\t\t);\n\t\tif (refTypeIncludesFlag(lref, ReferenceType.Transient)) {\n\t\t\tlref.link(this.segment, offset, undefined);\n\t\t} else {\n\t\t\tconst refsAtOffset = (this.refsByOffset[offset] = this.refsByOffset[offset] ?? {\n\t\t\t\tat: new DoublyLinkedList(),\n\t\t\t});\n\t\t\tconst atRefs = (refsAtOffset.at = refsAtOffset.at ?? new DoublyLinkedList());\n\n\t\t\tlref.link(this.segment, offset, atRefs.push(lref).last);\n\n\t\t\tthis.refCount++;\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic removeLocalRef(lref: LocalReferencePosition): LocalReferencePosition | undefined {\n\t\tif (this.has(lref)) {\n\t\t\tassertLocalReferences(lref);\n\n\t\t\tconst node = lref.getListNode();\n\t\t\tnode?.list?.remove(node);\n\n\t\t\tlref.link(undefined, 0, undefined);\n\n\t\t\tthis.refCount--;\n\t\t\tvalidateRefCount?.(this);\n\t\t\treturn lref;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * Called by 'append()' implementations to append local refs from the given 'other' segment to the\n\t * end of 'this' segment.\n\t *\n\t * Note: This method should be invoked after the caller has ensured that segments can be merged,\n\t * but before 'this' segment's cachedLength has changed, or the adjustment to the local refs\n\t * will be incorrect.\n\t *\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic append(other: LocalReferenceCollection) {\n\t\tif (!other || other.empty) {\n\t\t\treturn;\n\t\t}\n\t\tthis.refCount += other.refCount;\n\t\tother.refCount = 0;\n\t\tfor (const lref of other) {\n\t\t\tassertLocalReferences(lref);\n\t\t\tlref.link(\n\t\t\t\tthis.segment,\n\t\t\t\tlref.getOffset() + this.refsByOffset.length,\n\t\t\t\tlref.getListNode(),\n\t\t\t);\n\t\t}\n\n\t\tthis.refsByOffset.push(...other.refsByOffset);\n\t\tother.refsByOffset.length = 0;\n\t}\n\t/**\n\t * Returns true of the local reference is in the collection, otherwise false.\n\t *\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic has(lref: ReferencePosition): boolean {\n\t\tif (\n\t\t\t!(lref instanceof LocalReference) ||\n\t\t\trefTypeIncludesFlag(lref, ReferenceType.Transient)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tconst seg = lref.getSegment();\n\t\tif (seg !== this.segment) {\n\t\t\treturn false;\n\t\t}\n\t\t// we should be able to optimize finding the\n\t\t// list head\n\t\tconst listNode = lref.getListNode();\n\t\tif (listNode === undefined) {\n\t\t\treturn false;\n\t\t}\n\t\tconst offset = lref.getOffset();\n\t\tconst refsAtOffset = this.refsByOffset[offset];\n\t\tif (\n\t\t\t!!refsAtOffset?.before?.includes(listNode) ||\n\t\t\t!!refsAtOffset?.at?.includes(listNode) ||\n\t\t\t!!refsAtOffset?.after?.includes(listNode)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Splits this `LocalReferenceCollection` into the intervals [0, offset) and [offset, originalLength).\n\t * Local references in the former half of this split will remain associated with the segment used on construction.\n\t * Local references in the latter half of this split will be transferred to `splitSeg`,\n\t * and its `localRefs` field will be set.\n\t * @param offset - Offset into the original segment at which the collection should be split\n\t * @param splitSeg - Split segment which originally corresponded to the indices [offset, originalLength)\n\t * before splitting.\n\t *\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic split(offset: number, splitSeg: ISegment) {\n\t\tif (!this.empty) {\n\t\t\tconst localRefs = new LocalReferenceCollection(\n\t\t\t\tsplitSeg,\n\t\t\t\tthis.refsByOffset.splice(offset, this.refsByOffset.length - offset),\n\t\t\t);\n\n\t\t\tsplitSeg.localRefs = localRefs;\n\t\t\tfor (const lref of localRefs) {\n\t\t\t\tassertLocalReferences(lref);\n\t\t\t\tlref.link(splitSeg, lref.getOffset() - offset, lref.getListNode());\n\t\t\t\tthis.refCount--;\n\t\t\t\tlocalRefs.refCount++;\n\t\t\t}\n\t\t} else {\n\t\t\t// shrink the offset array when empty and splitting\n\t\t\tthis.refsByOffset.length = offset;\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic addBeforeTombstones(...refs: Iterable<LocalReferencePosition>[]) {\n\t\tconst beforeRefs = this.refsByOffset[0]?.before ?? new DoublyLinkedList();\n\n\t\tif (this.refsByOffset[0]?.before === undefined) {\n\t\t\tconst refsAtOffset = (this.refsByOffset[0] ??= { before: beforeRefs });\n\t\t\trefsAtOffset.before ??= beforeRefs;\n\t\t}\n\n\t\tlet precedingRef: ListNode<LocalReference> | undefined;\n\t\tfor (const iterable of refs) {\n\t\t\tfor (const lref of iterable) {\n\t\t\t\tassertLocalReferences(lref);\n\t\t\t\tif (refTypeIncludesFlag(lref, ReferenceType.StayOnRemove)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (refTypeIncludesFlag(lref, ReferenceType.SlideOnRemove)) {\n\t\t\t\t\tlref.callbacks?.beforeSlide?.(lref);\n\t\t\t\t\tprecedingRef =\n\t\t\t\t\t\tprecedingRef === undefined\n\t\t\t\t\t\t\t? beforeRefs.unshift(lref)?.first\n\t\t\t\t\t\t\t: beforeRefs.insertAfter(precedingRef, lref)?.first;\n\t\t\t\t\tlref.link(this.segment, 0, precedingRef);\n\t\t\t\t\tthis.refCount++;\n\t\t\t\t\tlref.callbacks?.afterSlide?.(lref);\n\t\t\t\t} else {\n\t\t\t\t\tlref.link(undefined, 0, undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t}\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic addAfterTombstones(...refs: Iterable<LocalReferencePosition>[]) {\n\t\tconst lastOffset = this.segment.cachedLength - 1;\n\t\tconst afterRefs = this.refsByOffset[lastOffset]?.after ?? new DoublyLinkedList();\n\n\t\tif (this.refsByOffset[lastOffset]?.after === undefined) {\n\t\t\tconst refsAtOffset = (this.refsByOffset[lastOffset] ??= { after: afterRefs });\n\t\t\trefsAtOffset.after ??= afterRefs;\n\t\t}\n\n\t\tfor (const iterable of refs) {\n\t\t\tfor (const lref of iterable) {\n\t\t\t\tassertLocalReferences(lref);\n\t\t\t\tif (refTypeIncludesFlag(lref, ReferenceType.StayOnRemove)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (refTypeIncludesFlag(lref, ReferenceType.SlideOnRemove)) {\n\t\t\t\t\tlref.callbacks?.beforeSlide?.(lref);\n\t\t\t\t\tafterRefs.push(lref);\n\t\t\t\t\tlref.link(this.segment, lastOffset, afterRefs.last);\n\t\t\t\t\tthis.refCount++;\n\t\t\t\t\tlref.callbacks?.afterSlide?.(lref);\n\t\t\t\t} else {\n\t\t\t\t\tlref.link(undefined, 0, undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvalidateRefCount?.(this);\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic isAfterTombstone(lref: LocalReferencePosition) {\n\t\tconst after = this.refsByOffset[lref.getOffset()]?.after;\n\t\tif (after) {\n\t\t\tassertLocalReferences(lref);\n\t\t\treturn after.includes(lref.getListNode());\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @remarks This method should only be called by mergeTree.\n\t */\n\tpublic walkReferences(\n\t\tvisitor: (lref: LocalReferencePosition) => boolean | void | undefined,\n\t\tstart?: LocalReferencePosition,\n\t\tforward: boolean = true,\n\t) {\n\t\tif (start !== undefined) {\n\t\t\tif (!this.has(start)) {\n\t\t\t\tthrow new UsageError(\"start must be in collection\");\n\t\t\t}\n\t\t\tassertLocalReferences(start);\n\t\t}\n\t\tlet offset = start?.getOffset() ?? (forward ? 0 : this.segment.cachedLength - 1);\n\n\t\tconst offsetPositions: DoublyLinkedList<IRefsAtOffset[keyof IRefsAtOffset]> =\n\t\t\tnew DoublyLinkedList();\n\t\toffsetPositions.push(\n\t\t\tthis.refsByOffset[offset]?.before,\n\t\t\tthis.refsByOffset[offset]?.at,\n\t\t\tthis.refsByOffset[offset]?.after,\n\t\t);\n\n\t\tconst startNode = start?.getListNode();\n\t\tconst startList = startNode?.list;\n\n\t\tif (startList !== undefined) {\n\t\t\tif (forward) {\n\t\t\t\twhile (!offsetPositions.empty && offsetPositions.first !== startNode) {\n\t\t\t\t\toffsetPositions.shift();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile (!offsetPositions.empty && offsetPositions.last !== startNode) {\n\t\t\t\t\toffsetPositions.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst listWalker = (pos: DoublyLinkedList<LocalReference>) => {\n\t\t\treturn walkList(\n\t\t\t\tpos,\n\t\t\t\t(node) => visitor(node.data),\n\t\t\t\tstartList === pos ? startNode : undefined,\n\t\t\t\tforward,\n\t\t\t);\n\t\t};\n\t\tconst increment = forward ? 1 : -1;\n\t\twhile (offset >= 0 && offset < this.refsByOffset.length) {\n\t\t\twhile (offsetPositions.length > 0) {\n\t\t\t\tconst offsetPos = forward ? offsetPositions.shift() : offsetPositions.pop();\n\t\t\t\tif (offsetPos?.data !== undefined) {\n\t\t\t\t\tif (listWalker(offsetPos.data) === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset += increment;\n\t\t\toffsetPositions.push(\n\t\t\t\tthis.refsByOffset[offset]?.before,\n\t\t\t\tthis.refsByOffset[offset]?.at,\n\t\t\t\tthis.refsByOffset[offset]?.after,\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t}\n}\n"]}
@@ -2,18 +2,18 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { Heap } from "@fluidframework/core-utils";
5
+ import { Heap } from "@fluidframework/core-utils/internal";
6
6
  import { IAttributionCollectionSerializer } from "./attributionCollection.js";
7
+ import { Client } from "./client.js";
7
8
  import { DoublyLinkedList } from "./collections/index.js";
9
+ import { EndOfTreeSegment, StartOfTreeSegment } from "./endOfTreeSegment.js";
8
10
  import { LocalReferencePosition, SlidingPreference } from "./localReference.js";
9
- import { CollaborationWindow, IMergeBlock, ISegmentLeaf, IMergeNode, ISegment, ISegmentAction, Marker, MergeBlock, SegmentGroup } from "./mergeTreeNodes.js";
10
11
  import { IMergeTreeDeltaOpArgs, MergeTreeDeltaCallback, MergeTreeMaintenanceCallback } from "./mergeTreeDeltaCallback.js";
12
+ import { CollaborationWindow, IMergeNode, ISegment, ISegmentAction, ISegmentLeaf, Marker, MergeBlock, SegmentGroup } from "./mergeTreeNodes.js";
11
13
  import { IMergeTreeDeltaOp, IRelativePosition, ReferenceType } from "./ops.js";
12
14
  import { PropertySet } from "./properties.js";
13
15
  import { ReferencePosition } from "./referencePositions.js";
14
16
  import { PropertiesRollback } from "./segmentPropertiesManager.js";
15
- import { Client } from "./client.js";
16
- import { EndOfTreeSegment, StartOfTreeSegment } from "./endOfTreeSegment.js";
17
17
  /**
18
18
  * @alpha
19
19
  */
@@ -114,7 +114,7 @@ export interface LRUSegment {
114
114
  segment?: ISegmentLeaf;
115
115
  maxSeq: number;
116
116
  }
117
- export interface IRootMergeBlock extends IMergeBlock {
117
+ export interface IRootMergeBlock extends MergeBlock {
118
118
  mergeTree?: MergeTree;
119
119
  }
120
120
  export declare function findRootMergeBlock(segmentOrNode: IMergeNode | undefined): IRootMergeBlock | undefined;
@@ -295,7 +295,7 @@ export declare class MergeTree {
295
295
  private getSmallestSeqMoveOp;
296
296
  private insertingWalk;
297
297
  private split;
298
- nodeUpdateOrdinals(block: IMergeBlock): void;
298
+ nodeUpdateOrdinals(block: MergeBlock): void;
299
299
  /**
300
300
  * Annotate a range with properties
301
301
  * @param start - The inclusive start position of the range to annotate
@@ -318,7 +318,7 @@ export declare class MergeTree {
318
318
  * Walk the segments up to the current segment and calculate its position
319
319
  */
320
320
  private findRollbackPosition;
321
- nodeUpdateLengthNewStructure(node: IMergeBlock, recur?: boolean): void;
321
+ nodeUpdateLengthNewStructure(node: MergeBlock, recur?: boolean): void;
322
322
  removeLocalReferencePosition(lref: LocalReferencePosition): LocalReferencePosition | undefined;
323
323
  startOfTree: StartOfTreeSegment;
324
324
  endOfTree: EndOfTreeSegment;
@@ -347,7 +347,7 @@ export declare class MergeTree {
347
347
  normalizeSegmentsOnRebase(): void;
348
348
  private addNodeReferences;
349
349
  private blockUpdate;
350
- blockUpdatePathLengths(startBlock: IMergeBlock | undefined, seq: number, clientId: number, newStructure?: boolean): void;
350
+ blockUpdatePathLengths(startBlock: MergeBlock | undefined, seq: number, clientId: number, newStructure?: boolean): void;
351
351
  private blockUpdateLength;
352
352
  /**
353
353
  * Map over all visible segments in a given range