@fluidframework/sequence 2.0.0-dev-rc.1.0.0.232845 → 2.0.0-dev-rc.2.0.0.245554

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 (388) hide show
  1. package/.eslintrc.cjs +4 -1
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +8 -0
  4. package/README.md +2 -2
  5. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  6. package/api-extractor.json +1 -1
  7. package/api-report/sequence.api.md +14 -27
  8. package/dist/{localValues.d.ts → IntervalCollectionValues.d.ts} +13 -12
  9. package/dist/IntervalCollectionValues.d.ts.map +1 -0
  10. package/dist/{localValues.js → IntervalCollectionValues.js} +4 -4
  11. package/dist/IntervalCollectionValues.js.map +1 -0
  12. package/dist/index.d.ts +11 -11
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +42 -42
  15. package/dist/index.js.map +1 -1
  16. package/dist/intervalCollection.d.ts +15 -22
  17. package/dist/intervalCollection.d.ts.map +1 -1
  18. package/dist/intervalCollection.js +49 -108
  19. package/dist/intervalCollection.js.map +1 -1
  20. package/dist/{defaultMap.d.ts → intervalCollectionMap.d.ts} +18 -57
  21. package/dist/intervalCollectionMap.d.ts.map +1 -0
  22. package/dist/{defaultMap.js → intervalCollectionMap.js} +77 -129
  23. package/dist/intervalCollectionMap.js.map +1 -0
  24. package/{lib/defaultMapInterfaces.d.mts → dist/intervalCollectionMapInterfaces.d.ts} +16 -22
  25. package/dist/intervalCollectionMapInterfaces.d.ts.map +1 -0
  26. package/dist/{defaultMapInterfaces.js → intervalCollectionMapInterfaces.js} +1 -1
  27. package/dist/intervalCollectionMapInterfaces.js.map +1 -0
  28. package/dist/intervalIndex/endpointInRangeIndex.d.ts +3 -3
  29. package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  30. package/dist/intervalIndex/endpointInRangeIndex.js +8 -8
  31. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  32. package/dist/intervalIndex/endpointIndex.d.ts +3 -3
  33. package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
  34. package/dist/intervalIndex/endpointIndex.js +4 -4
  35. package/dist/intervalIndex/endpointIndex.js.map +1 -1
  36. package/dist/intervalIndex/idIntervalIndex.d.ts +2 -2
  37. package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -1
  38. package/dist/intervalIndex/idIntervalIndex.js +2 -2
  39. package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
  40. package/dist/intervalIndex/index.d.ts +8 -8
  41. package/dist/intervalIndex/index.d.ts.map +1 -1
  42. package/dist/intervalIndex/index.js +16 -16
  43. package/dist/intervalIndex/index.js.map +1 -1
  44. package/dist/intervalIndex/intervalIndex.d.ts +1 -1
  45. package/dist/intervalIndex/intervalIndex.d.ts.map +1 -1
  46. package/dist/intervalIndex/intervalIndex.js.map +1 -1
  47. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +7 -10
  48. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  49. package/dist/intervalIndex/overlappingIntervalsIndex.js +12 -13
  50. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  51. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
  52. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  53. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +7 -7
  54. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  55. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +2 -2
  56. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  57. package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  58. package/dist/intervalIndex/startpointInRangeIndex.d.ts +3 -3
  59. package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  60. package/dist/intervalIndex/startpointInRangeIndex.js +8 -8
  61. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  62. package/dist/intervalTree.d.ts +1 -1
  63. package/dist/intervalTree.d.ts.map +1 -1
  64. package/dist/intervalTree.js.map +1 -1
  65. package/dist/intervals/index.d.ts +3 -3
  66. package/dist/intervals/index.d.ts.map +1 -1
  67. package/dist/intervals/index.js +16 -16
  68. package/dist/intervals/index.js.map +1 -1
  69. package/dist/intervals/interval.d.ts +2 -2
  70. package/dist/intervals/interval.d.ts.map +1 -1
  71. package/dist/intervals/interval.js +2 -2
  72. package/dist/intervals/interval.js.map +1 -1
  73. package/dist/intervals/intervalUtils.d.ts +3 -3
  74. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  75. package/dist/intervals/intervalUtils.js +1 -1
  76. package/dist/intervals/intervalUtils.js.map +1 -1
  77. package/dist/intervals/sequenceInterval.d.ts +2 -2
  78. package/dist/intervals/sequenceInterval.d.ts.map +1 -1
  79. package/dist/intervals/sequenceInterval.js +22 -23
  80. package/dist/intervals/sequenceInterval.js.map +1 -1
  81. package/dist/package.json +3 -0
  82. package/dist/packageVersion.d.ts +1 -1
  83. package/dist/packageVersion.js +1 -1
  84. package/dist/packageVersion.js.map +1 -1
  85. package/dist/revertibles.d.ts +12 -12
  86. package/dist/revertibles.d.ts.map +1 -1
  87. package/dist/revertibles.js +26 -26
  88. package/dist/revertibles.js.map +1 -1
  89. package/dist/sequence-alpha.d.ts +149 -13
  90. package/dist/sequence-beta.d.ts +2 -0
  91. package/dist/sequence-public.d.ts +2 -0
  92. package/dist/sequence-untrimmed.d.ts +50 -14
  93. package/dist/sequence.d.ts +38 -5
  94. package/dist/sequence.d.ts.map +1 -1
  95. package/dist/sequence.js +79 -35
  96. package/dist/sequence.js.map +1 -1
  97. package/dist/sequenceFactory.d.ts +4 -1
  98. package/dist/sequenceFactory.d.ts.map +1 -1
  99. package/dist/sequenceFactory.js +8 -5
  100. package/dist/sequenceFactory.js.map +1 -1
  101. package/dist/sharedIntervalCollection.d.ts +2 -2
  102. package/dist/sharedIntervalCollection.d.ts.map +1 -1
  103. package/dist/sharedIntervalCollection.js +5 -5
  104. package/dist/sharedIntervalCollection.js.map +1 -1
  105. package/dist/sharedSequence.d.ts +1 -1
  106. package/dist/sharedSequence.d.ts.map +1 -1
  107. package/dist/sharedSequence.js +2 -2
  108. package/dist/sharedSequence.js.map +1 -1
  109. package/dist/sharedString.d.ts +2 -2
  110. package/dist/sharedString.d.ts.map +1 -1
  111. package/dist/sharedString.js +6 -6
  112. package/dist/sharedString.js.map +1 -1
  113. package/dist/tsdoc-metadata.json +1 -1
  114. package/lib/{localValues.d.mts → IntervalCollectionValues.d.ts} +13 -12
  115. package/lib/IntervalCollectionValues.d.ts.map +1 -0
  116. package/lib/{localValues.mjs → IntervalCollectionValues.js} +2 -2
  117. package/lib/IntervalCollectionValues.js.map +1 -0
  118. package/lib/{index.d.mts → index.d.ts} +24 -12
  119. package/lib/index.d.ts.map +1 -0
  120. package/lib/{index.mjs → index.js} +11 -11
  121. package/lib/index.js.map +1 -0
  122. package/lib/{intervalCollection.d.mts → intervalCollection.d.ts} +16 -23
  123. package/lib/intervalCollection.d.ts.map +1 -0
  124. package/lib/{intervalCollection.mjs → intervalCollection.js} +13 -72
  125. package/lib/intervalCollection.js.map +1 -0
  126. package/lib/{defaultMap.d.mts → intervalCollectionMap.d.ts} +18 -57
  127. package/lib/intervalCollectionMap.d.ts.map +1 -0
  128. package/lib/{defaultMap.mjs → intervalCollectionMap.js} +75 -127
  129. package/lib/intervalCollectionMap.js.map +1 -0
  130. package/{dist/defaultMapInterfaces.d.ts → lib/intervalCollectionMapInterfaces.d.ts} +16 -22
  131. package/lib/intervalCollectionMapInterfaces.d.ts.map +1 -0
  132. package/lib/{intervalIndex/sequenceIntervalIndexes.mjs → intervalCollectionMapInterfaces.js} +1 -1
  133. package/lib/intervalCollectionMapInterfaces.js.map +1 -0
  134. package/lib/intervalIndex/{endpointInRangeIndex.d.mts → endpointInRangeIndex.d.ts} +4 -4
  135. package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -0
  136. package/lib/intervalIndex/{endpointInRangeIndex.mjs → endpointInRangeIndex.js} +3 -3
  137. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -0
  138. package/lib/intervalIndex/{endpointIndex.d.mts → endpointIndex.d.ts} +4 -4
  139. package/lib/intervalIndex/endpointIndex.d.ts.map +1 -0
  140. package/lib/intervalIndex/{endpointIndex.mjs → endpointIndex.js} +2 -2
  141. package/lib/intervalIndex/endpointIndex.js.map +1 -0
  142. package/lib/intervalIndex/{idIntervalIndex.d.mts → idIntervalIndex.d.ts} +3 -3
  143. package/lib/intervalIndex/idIntervalIndex.d.ts.map +1 -0
  144. package/lib/intervalIndex/{idIntervalIndex.mjs → idIntervalIndex.js} +2 -2
  145. package/lib/intervalIndex/idIntervalIndex.js.map +1 -0
  146. package/lib/intervalIndex/{index.d.mts → index.d.ts} +9 -9
  147. package/lib/intervalIndex/index.d.ts.map +1 -0
  148. package/lib/intervalIndex/{index.mjs → index.js} +7 -7
  149. package/lib/intervalIndex/index.js.map +1 -0
  150. package/lib/intervalIndex/{intervalIndex.d.mts → intervalIndex.d.ts} +2 -2
  151. package/lib/intervalIndex/intervalIndex.d.ts.map +1 -0
  152. package/lib/intervalIndex/{intervalIndex.mjs → intervalIndex.js} +1 -1
  153. package/lib/intervalIndex/intervalIndex.js.map +1 -0
  154. package/lib/intervalIndex/{intervalIndexUtils.d.mts → intervalIndexUtils.d.ts} +1 -1
  155. package/lib/intervalIndex/intervalIndexUtils.d.ts.map +1 -0
  156. package/lib/intervalIndex/{intervalIndexUtils.mjs → intervalIndexUtils.js} +1 -1
  157. package/lib/intervalIndex/intervalIndexUtils.js.map +1 -0
  158. package/lib/intervalIndex/{overlappingIntervalsIndex.d.mts → overlappingIntervalsIndex.d.ts} +8 -11
  159. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -0
  160. package/lib/intervalIndex/{overlappingIntervalsIndex.mjs → overlappingIntervalsIndex.js} +8 -9
  161. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -0
  162. package/lib/intervalIndex/{overlappingSequenceIntervalsIndex.d.mts → overlappingSequenceIntervalsIndex.d.ts} +3 -3
  163. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -0
  164. package/lib/intervalIndex/{overlappingSequenceIntervalsIndex.mjs → overlappingSequenceIntervalsIndex.js} +3 -3
  165. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -0
  166. package/lib/intervalIndex/{sequenceIntervalIndexes.d.mts → sequenceIntervalIndexes.d.ts} +3 -3
  167. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -0
  168. package/lib/{defaultMapInterfaces.mjs → intervalIndex/sequenceIntervalIndexes.js} +1 -1
  169. package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -0
  170. package/lib/intervalIndex/{startpointInRangeIndex.d.mts → startpointInRangeIndex.d.ts} +4 -4
  171. package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -0
  172. package/lib/intervalIndex/{startpointInRangeIndex.mjs → startpointInRangeIndex.js} +3 -3
  173. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -0
  174. package/lib/{intervalTree.d.mts → intervalTree.d.ts} +2 -2
  175. package/lib/intervalTree.d.ts.map +1 -0
  176. package/lib/{intervalTree.mjs → intervalTree.js} +1 -1
  177. package/lib/intervalTree.js.map +1 -0
  178. package/lib/intervals/{index.d.mts → index.d.ts} +4 -4
  179. package/lib/intervals/index.d.ts.map +1 -0
  180. package/lib/intervals/{index.mjs → index.js} +4 -4
  181. package/lib/intervals/index.js.map +1 -0
  182. package/lib/intervals/{interval.d.mts → interval.d.ts} +3 -3
  183. package/lib/intervals/{interval.d.mts.map → interval.d.ts.map} +1 -1
  184. package/lib/intervals/{interval.mjs → interval.js} +2 -2
  185. package/lib/intervals/interval.js.map +1 -0
  186. package/lib/intervals/{intervalUtils.d.mts → intervalUtils.d.ts} +4 -4
  187. package/lib/intervals/intervalUtils.d.ts.map +1 -0
  188. package/lib/intervals/{intervalUtils.mjs → intervalUtils.js} +3 -2
  189. package/lib/intervals/intervalUtils.js.map +1 -0
  190. package/lib/intervals/{sequenceInterval.d.mts → sequenceInterval.d.ts} +3 -3
  191. package/lib/intervals/sequenceInterval.d.ts.map +1 -0
  192. package/lib/intervals/{sequenceInterval.mjs → sequenceInterval.js} +5 -4
  193. package/lib/intervals/{sequenceInterval.mjs.map → sequenceInterval.js.map} +1 -1
  194. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  195. package/lib/packageVersion.d.ts.map +1 -0
  196. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  197. package/lib/packageVersion.js.map +1 -0
  198. package/lib/{revertibles.d.mts → revertibles.d.ts} +13 -13
  199. package/lib/revertibles.d.ts.map +1 -0
  200. package/lib/{revertibles.mjs → revertibles.js} +11 -10
  201. package/lib/revertibles.js.map +1 -0
  202. package/lib/{sequence-alpha.d.mts → sequence-alpha.d.ts} +162 -13
  203. package/lib/{sequence-beta.d.mts → sequence-beta.d.ts} +15 -0
  204. package/lib/{sequence-public.d.mts → sequence-public.d.ts} +15 -0
  205. package/lib/{sequence-untrimmed.d.mts → sequence-untrimmed.d.ts} +63 -14
  206. package/lib/{sequence.d.mts → sequence.d.ts} +39 -6
  207. package/lib/sequence.d.ts.map +1 -0
  208. package/lib/{sequence.mjs → sequence.js} +78 -34
  209. package/lib/sequence.js.map +1 -0
  210. package/lib/{sequenceDeltaEvent.d.mts → sequenceDeltaEvent.d.ts} +1 -1
  211. package/lib/sequenceDeltaEvent.d.ts.map +1 -0
  212. package/lib/{sequenceDeltaEvent.mjs → sequenceDeltaEvent.js} +1 -1
  213. package/lib/sequenceDeltaEvent.js.map +1 -0
  214. package/lib/{sequenceFactory.d.mts → sequenceFactory.d.ts} +5 -2
  215. package/lib/sequenceFactory.d.ts.map +1 -0
  216. package/lib/{sequenceFactory.mjs → sequenceFactory.js} +6 -3
  217. package/lib/sequenceFactory.js.map +1 -0
  218. package/lib/{sharedIntervalCollection.d.mts → sharedIntervalCollection.d.ts} +3 -3
  219. package/lib/sharedIntervalCollection.d.ts.map +1 -0
  220. package/lib/{sharedIntervalCollection.mjs → sharedIntervalCollection.js} +5 -5
  221. package/lib/sharedIntervalCollection.js.map +1 -0
  222. package/lib/{sharedSequence.d.mts → sharedSequence.d.ts} +2 -2
  223. package/lib/sharedSequence.d.ts.map +1 -0
  224. package/lib/{sharedSequence.mjs → sharedSequence.js} +2 -2
  225. package/lib/sharedSequence.js.map +1 -0
  226. package/lib/{sharedString.d.mts → sharedString.d.ts} +3 -3
  227. package/lib/sharedString.d.ts.map +1 -0
  228. package/lib/{sharedString.mjs → sharedString.js} +3 -3
  229. package/lib/sharedString.js.map +1 -0
  230. package/lib/test/collections.intervalTree.js +73 -0
  231. package/lib/test/collections.intervalTree.js.map +1 -0
  232. package/lib/test/createSnapshotFiles.js +15 -0
  233. package/lib/test/createSnapshotFiles.js.map +1 -0
  234. package/lib/test/dirname.cjs +16 -0
  235. package/lib/test/dirname.cjs.map +1 -0
  236. package/lib/test/endpointInRangeIndex.spec.js +182 -0
  237. package/lib/test/endpointInRangeIndex.spec.js.map +1 -0
  238. package/lib/test/fuzz/fuzzUtils.js +362 -0
  239. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  240. package/lib/test/fuzz/intervalCollection.fuzz.spec.js +87 -0
  241. package/lib/test/fuzz/intervalCollection.fuzz.spec.js.map +1 -0
  242. package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js +128 -0
  243. package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js.map +1 -0
  244. package/lib/test/fuzz/sharedString.fuzz.spec.js +91 -0
  245. package/lib/test/fuzz/sharedString.fuzz.spec.js.map +1 -0
  246. package/lib/test/generateSharedStrings.js +138 -0
  247. package/lib/test/generateSharedStrings.js.map +1 -0
  248. package/lib/test/intervalCollection.detached.spec.js +126 -0
  249. package/lib/test/intervalCollection.detached.spec.js.map +1 -0
  250. package/lib/test/intervalCollection.events.spec.js +491 -0
  251. package/lib/test/intervalCollection.events.spec.js.map +1 -0
  252. package/lib/test/intervalCollection.perf.spec.js +88 -0
  253. package/lib/test/intervalCollection.perf.spec.js.map +1 -0
  254. package/lib/test/intervalCollection.snapshot.spec.js +171 -0
  255. package/lib/test/intervalCollection.snapshot.spec.js.map +1 -0
  256. package/lib/test/intervalCollection.spec.js +1660 -0
  257. package/lib/test/intervalCollection.spec.js.map +1 -0
  258. package/lib/test/intervalIndexTestUtils.js +49 -0
  259. package/lib/test/intervalIndexTestUtils.js.map +1 -0
  260. package/lib/test/intervalRebasing.spec.js +589 -0
  261. package/lib/test/intervalRebasing.spec.js.map +1 -0
  262. package/lib/test/intervalStashedOps.spec.js +142 -0
  263. package/lib/test/intervalStashedOps.spec.js.map +1 -0
  264. package/lib/test/intervalTestUtils.js +81 -0
  265. package/lib/test/intervalTestUtils.js.map +1 -0
  266. package/lib/test/marshalling.spec.js +55 -0
  267. package/lib/test/marshalling.spec.js.map +1 -0
  268. package/lib/test/memory/sharedSequence.spec.js +82 -0
  269. package/lib/test/memory/sharedSequence.spec.js.map +1 -0
  270. package/lib/test/memory/sharedString.spec.js +134 -0
  271. package/lib/test/memory/sharedString.spec.js.map +1 -0
  272. package/lib/test/overlappingSequenceIntervalsIndex.spec.js +348 -0
  273. package/lib/test/overlappingSequenceIntervalsIndex.spec.js.map +1 -0
  274. package/lib/test/partialLoad.spec.js +211 -0
  275. package/lib/test/partialLoad.spec.js.map +1 -0
  276. package/lib/test/rebasing.spec.js +81 -0
  277. package/lib/test/rebasing.spec.js.map +1 -0
  278. package/lib/test/reentrancy.spec.js +174 -0
  279. package/lib/test/reentrancy.spec.js.map +1 -0
  280. package/lib/test/revertibles.spec.js +971 -0
  281. package/lib/test/revertibles.spec.js.map +1 -0
  282. package/lib/test/sequenceDeltaEvent.spec.js +2144 -0
  283. package/lib/test/sequenceDeltaEvent.spec.js.map +1 -0
  284. package/lib/test/sharedIntervalCollection.spec.js +159 -0
  285. package/lib/test/sharedIntervalCollection.spec.js.map +1 -0
  286. package/lib/test/sharedString.spec.js +532 -0
  287. package/lib/test/sharedString.spec.js.map +1 -0
  288. package/lib/test/snapshotEmptyProps.spec.js +45 -0
  289. package/lib/test/snapshotEmptyProps.spec.js.map +1 -0
  290. package/lib/test/snapshotVersion.spec.js +149 -0
  291. package/lib/test/snapshotVersion.spec.js.map +1 -0
  292. package/lib/test/startpointInRangeIndex.spec.js +182 -0
  293. package/lib/test/startpointInRangeIndex.spec.js.map +1 -0
  294. package/lib/test/subSequence.spec.js +92 -0
  295. package/lib/test/subSequence.spec.js.map +1 -0
  296. package/lib/test/types/validateSequencePrevious.generated.js +162 -0
  297. package/lib/test/types/validateSequencePrevious.generated.js.map +1 -0
  298. package/lib/test/v1IntervalCollectionHelpers.js +93 -0
  299. package/lib/test/v1IntervalCollectionHelpers.js.map +1 -0
  300. package/package.json +64 -60
  301. package/src/{localValues.ts → IntervalCollectionValues.ts} +23 -17
  302. package/src/index.ts +15 -11
  303. package/src/intervalCollection.ts +33 -104
  304. package/src/{defaultMap.ts → intervalCollectionMap.ts} +120 -211
  305. package/src/{defaultMapInterfaces.ts → intervalCollectionMapInterfaces.ts} +24 -23
  306. package/src/intervalIndex/endpointInRangeIndex.ts +4 -4
  307. package/src/intervalIndex/endpointIndex.ts +3 -3
  308. package/src/intervalIndex/idIntervalIndex.ts +3 -4
  309. package/src/intervalIndex/index.ts +8 -8
  310. package/src/intervalIndex/intervalIndex.ts +1 -1
  311. package/src/intervalIndex/overlappingIntervalsIndex.ts +10 -11
  312. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +4 -4
  313. package/src/intervalIndex/sequenceIntervalIndexes.ts +2 -2
  314. package/src/intervalIndex/startpointInRangeIndex.ts +4 -4
  315. package/src/intervalTree.ts +1 -1
  316. package/src/intervals/index.ts +3 -3
  317. package/src/intervals/interval.ts +2 -4
  318. package/src/intervals/intervalUtils.ts +3 -3
  319. package/src/intervals/sequenceInterval.ts +3 -4
  320. package/src/packageVersion.ts +1 -1
  321. package/src/revertibles.ts +13 -13
  322. package/src/sequence.ts +101 -55
  323. package/src/sequenceFactory.ts +5 -2
  324. package/src/sharedIntervalCollection.ts +7 -11
  325. package/src/sharedSequence.ts +1 -1
  326. package/src/sharedString.ts +2 -2
  327. package/tsconfig.cjs.json +7 -0
  328. package/tsconfig.json +2 -5
  329. package/dist/defaultMap.d.ts.map +0 -1
  330. package/dist/defaultMap.js.map +0 -1
  331. package/dist/defaultMapInterfaces.d.ts.map +0 -1
  332. package/dist/defaultMapInterfaces.js.map +0 -1
  333. package/dist/localValues.d.ts.map +0 -1
  334. package/dist/localValues.js.map +0 -1
  335. package/lib/defaultMap.d.mts.map +0 -1
  336. package/lib/defaultMap.mjs.map +0 -1
  337. package/lib/defaultMapInterfaces.d.mts.map +0 -1
  338. package/lib/defaultMapInterfaces.mjs.map +0 -1
  339. package/lib/index.d.mts.map +0 -1
  340. package/lib/index.mjs.map +0 -1
  341. package/lib/intervalCollection.d.mts.map +0 -1
  342. package/lib/intervalCollection.mjs.map +0 -1
  343. package/lib/intervalIndex/endpointInRangeIndex.d.mts.map +0 -1
  344. package/lib/intervalIndex/endpointInRangeIndex.mjs.map +0 -1
  345. package/lib/intervalIndex/endpointIndex.d.mts.map +0 -1
  346. package/lib/intervalIndex/endpointIndex.mjs.map +0 -1
  347. package/lib/intervalIndex/idIntervalIndex.d.mts.map +0 -1
  348. package/lib/intervalIndex/idIntervalIndex.mjs.map +0 -1
  349. package/lib/intervalIndex/index.d.mts.map +0 -1
  350. package/lib/intervalIndex/index.mjs.map +0 -1
  351. package/lib/intervalIndex/intervalIndex.d.mts.map +0 -1
  352. package/lib/intervalIndex/intervalIndex.mjs.map +0 -1
  353. package/lib/intervalIndex/intervalIndexUtils.d.mts.map +0 -1
  354. package/lib/intervalIndex/intervalIndexUtils.mjs.map +0 -1
  355. package/lib/intervalIndex/overlappingIntervalsIndex.d.mts.map +0 -1
  356. package/lib/intervalIndex/overlappingIntervalsIndex.mjs.map +0 -1
  357. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.mts.map +0 -1
  358. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.mjs.map +0 -1
  359. package/lib/intervalIndex/sequenceIntervalIndexes.d.mts.map +0 -1
  360. package/lib/intervalIndex/sequenceIntervalIndexes.mjs.map +0 -1
  361. package/lib/intervalIndex/startpointInRangeIndex.d.mts.map +0 -1
  362. package/lib/intervalIndex/startpointInRangeIndex.mjs.map +0 -1
  363. package/lib/intervalTree.d.mts.map +0 -1
  364. package/lib/intervalTree.mjs.map +0 -1
  365. package/lib/intervals/index.d.mts.map +0 -1
  366. package/lib/intervals/index.mjs.map +0 -1
  367. package/lib/intervals/interval.mjs.map +0 -1
  368. package/lib/intervals/intervalUtils.d.mts.map +0 -1
  369. package/lib/intervals/intervalUtils.mjs.map +0 -1
  370. package/lib/intervals/sequenceInterval.d.mts.map +0 -1
  371. package/lib/localValues.d.mts.map +0 -1
  372. package/lib/localValues.mjs.map +0 -1
  373. package/lib/packageVersion.d.mts.map +0 -1
  374. package/lib/packageVersion.mjs.map +0 -1
  375. package/lib/revertibles.d.mts.map +0 -1
  376. package/lib/revertibles.mjs.map +0 -1
  377. package/lib/sequence.d.mts.map +0 -1
  378. package/lib/sequence.mjs.map +0 -1
  379. package/lib/sequenceDeltaEvent.d.mts.map +0 -1
  380. package/lib/sequenceDeltaEvent.mjs.map +0 -1
  381. package/lib/sequenceFactory.d.mts.map +0 -1
  382. package/lib/sequenceFactory.mjs.map +0 -1
  383. package/lib/sharedIntervalCollection.d.mts.map +0 -1
  384. package/lib/sharedIntervalCollection.mjs.map +0 -1
  385. package/lib/sharedSequence.d.mts.map +0 -1
  386. package/lib/sharedSequence.mjs.map +0 -1
  387. package/lib/sharedString.d.mts.map +0 -1
  388. package/lib/sharedString.mjs.map +0 -1
@@ -1,3 +1,16 @@
1
+ /**
2
+ * Supports distributed data structures which are list-like.
3
+ *
4
+ * This library's main export is {@link SharedString}, a DDS for storing and simultaneously editing a sequence of
5
+ * text.
6
+ *
7
+ * See the package's README for a high-level introduction to `SharedString`'s feature set.
8
+ * @remarks Note that SharedString is a sequence DDS but it has additional specialized features and behaviors for
9
+ * working with text.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+
1
14
  import { BaseSegment } from '@fluidframework/merge-tree';
2
15
  import { Client } from '@fluidframework/merge-tree';
3
16
  import { Deferred } from '@fluidframework/core-utils';
@@ -44,15 +57,37 @@ import { TextSegment } from '@fluidframework/merge-tree';
44
57
  import { TrackingGroup } from '@fluidframework/merge-tree';
45
58
  import { TypedEventEmitter } from '@fluid-internal/client-utils';
46
59
 
47
- /* Excluded from this release type: appendAddIntervalToRevertibles */
60
+ /**
61
+ * Create revertibles for adding an interval
62
+ * @alpha
63
+ */
64
+ export declare function appendAddIntervalToRevertibles(interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
65
+
66
+ /**
67
+ * Create revertibles for moving endpoints of an interval
68
+ * @alpha
69
+ */
70
+ export declare function appendChangeIntervalToRevertibles(string: SharedString, newInterval: SequenceInterval, previousInterval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
48
71
 
49
- /* Excluded from this release type: appendChangeIntervalToRevertibles */
72
+ /**
73
+ * Create revertibles for deleting an interval
74
+ * @alpha
75
+ */
76
+ export declare function appendDeleteIntervalToRevertibles(string: SharedString, interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
50
77
 
51
- /* Excluded from this release type: appendDeleteIntervalToRevertibles */
78
+ /**
79
+ * Create revertibles for changing properties of an interval
80
+ * @alpha
81
+ */
82
+ export declare function appendIntervalPropertyChangedToRevertibles(interval: SequenceInterval, deltas: PropertySet, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
52
83
 
53
- /* Excluded from this release type: appendIntervalPropertyChangedToRevertibles */
84
+ /**
85
+ * Create revertibles for SharedStringDeltas, handling indirectly modified intervals
86
+ * (e.g. reverting remove of a range that contains an interval will move the interval back)
87
+ * @alpha
88
+ */
89
+ export declare function appendSharedStringDeltaToRevertibles(string: SharedString, delta: SequenceDeltaEvent, revertibles: SharedStringRevertible[]): void;
54
90
 
55
- /* Excluded from this release type: appendSharedStringDeltaToRevertibles */
56
91
  export { BaseSegment }
57
92
 
58
93
  /* Excluded from this release type: createEndpointIndex */
@@ -61,7 +96,10 @@ export { BaseSegment }
61
96
 
62
97
  /* Excluded from this release type: createIdIntervalIndex */
63
98
 
64
- /* Excluded from this release type: createOverlappingIntervalsIndex */
99
+ /**
100
+ * @alpha
101
+ */
102
+ export declare function createOverlappingIntervalsIndex(sharedString: SharedString): IOverlappingIntervalsIndex<SequenceInterval>;
65
103
 
66
104
  /* Excluded from this release type: createOverlappingSequenceIntervalsIndex */
67
105
 
@@ -72,7 +110,11 @@ export { BaseSegment }
72
110
  */
73
111
  export declare type DeserializeCallback = (properties: PropertySet) => void;
74
112
 
75
- /* Excluded from this release type: discardSharedStringRevertibles */
113
+ /**
114
+ * Clean up resources held by revertibles that are no longer needed.
115
+ * @alpha
116
+ */
117
+ export declare function discardSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
76
118
 
77
119
  /* Excluded from this release type: getTextAndMarkers */
78
120
 
@@ -422,9 +464,59 @@ export declare interface IntervalIndex<TInterval extends ISerializableInterval>
422
464
 
423
465
  /* Excluded from this release type: intervalLocatorFromEndpoint */
424
466
 
425
- /* Excluded from this release type: IntervalOpType */
467
+ /**
468
+ * Values are used in revertibles.
469
+ * @alpha
470
+ */
471
+ export declare const IntervalOpType: {
472
+ readonly PROPERTY_CHANGED: "propertyChanged";
473
+ readonly POSITION_REMOVE: "positionRemove";
474
+ readonly ADD: "add";
475
+ readonly DELETE: "delete";
476
+ readonly CHANGE: "change";
477
+ };
478
+
479
+ /**
480
+ * @alpha
481
+ */
482
+ export declare type IntervalOpType = (typeof IntervalOpType)[keyof typeof IntervalOpType];
426
483
 
427
- /* Excluded from this release type: IntervalRevertible */
484
+ /**
485
+ * Data for undoing edits affecting Intervals.
486
+ * @alpha
487
+ */
488
+ export declare type IntervalRevertible = {
489
+ event: typeof IntervalOpType.CHANGE;
490
+ interval: SequenceInterval;
491
+ start: LocalReferencePosition;
492
+ end: LocalReferencePosition;
493
+ } | {
494
+ event: typeof IntervalOpType.ADD;
495
+ interval: SequenceInterval;
496
+ } | {
497
+ event: typeof IntervalOpType.DELETE;
498
+ interval: SequenceInterval;
499
+ start: LocalReferencePosition;
500
+ end: LocalReferencePosition;
501
+ } | {
502
+ event: typeof IntervalOpType.PROPERTY_CHANGED;
503
+ interval: SequenceInterval;
504
+ propertyDeltas: PropertySet;
505
+ } | {
506
+ event: typeof IntervalOpType.POSITION_REMOVE;
507
+ intervals: {
508
+ intervalId: string;
509
+ label: string;
510
+ startOffset?: number;
511
+ endOffset?: number;
512
+ }[];
513
+ revertibleRefs: {
514
+ revertible: IntervalRevertible;
515
+ offset: number;
516
+ isStart: boolean;
517
+ }[];
518
+ mergeTreeRevertible: MergeTreeDeltaRevertible;
519
+ };
428
520
 
429
521
  /**
430
522
  * Determines how an interval should expand when segments are inserted adjacent
@@ -481,7 +573,20 @@ export declare enum IntervalType {
481
573
  /* Excluded from this release type: Transient */
482
574
  }
483
575
 
484
- /* Excluded from this release type: IOverlappingIntervalsIndex */
576
+ /**
577
+ * @alpha
578
+ */
579
+ export declare interface IOverlappingIntervalsIndex<TInterval extends ISerializableInterval> extends IntervalIndex<TInterval> {
580
+ /**
581
+ * @returns an array of all intervals contained in this collection that overlap the range
582
+ * `[start end]`.
583
+ */
584
+ findOverlappingIntervals(start: SequencePlace, end: SequencePlace): TInterval[];
585
+ /**
586
+ * Gathers the interval results based on specified parameters.
587
+ */
588
+ gatherIterationResults(results: TInterval[], iteratesForward: boolean, start?: SequencePlace, end?: SequencePlace): void;
589
+ }
485
590
 
486
591
  export { ISegment }
487
592
 
@@ -668,7 +773,11 @@ export { ReferenceType }
668
773
 
669
774
  /* Excluded from this release type: reservedTileLabelsKey */
670
775
 
671
- /* Excluded from this release type: revertSharedStringRevertibles */
776
+ /**
777
+ * Invoke revertibles to reverse prior edits
778
+ * @alpha
779
+ */
780
+ export declare function revertSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
672
781
 
673
782
  /**
674
783
  * The event object returned on sequenceDelta events.
@@ -927,8 +1036,27 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
927
1036
  * E.g. SharedString submits an op while deltaManager has lastSequenceNumber = 10, but before the runtime
928
1037
  * puts this op over the wire, it processes a client join/leave op with sequence number 11, so the referenceSequenceNumber
929
1038
  * on the SharedString op is 11.
1039
+ *
1040
+ * The reference sequence numbers placed in this queue are also not accurate for stashed ops due to how the applyStashedOp
1041
+ * flow works at the runtime level. This is a legitimate bug, and AB#6602 tracks one way to fix it (stop reaching all the way
1042
+ * to deltaManager's lastSequenceNumber to obtain refSeq, instead leveraging some analogous notion on the container or datastore
1043
+ * runtime).
930
1044
  */
931
1045
  private readonly inFlightRefSeqs;
1046
+ private ongoingResubmitRefSeq;
1047
+ /**
1048
+ * Gets the reference sequence number (i.e. sequence number of the runtime's last processed op) for an op submitted
1049
+ * in the current context.
1050
+ *
1051
+ * This value can be optionally overridden using `useResubmitRefSeq`.
1052
+ * IntervalCollection's resubmit logic currently relies on preserving merge information from when the op was originally submitted,
1053
+ * even if the op is resubmitted more than once. Thus during resubmit, `inFlightRefSeqs` gets populated with the
1054
+ * original refSeq rather than the refSeq at the time of reconnection.
1055
+ *
1056
+ * @remarks - In some not fully understood cases, the runtime may process incoming ops before putting an op that this
1057
+ * DDS submits over the wire. See `inFlightRefSeqs` for more details.
1058
+ */
1059
+ private get currentRefSeq();
932
1060
  protected client: Client;
933
1061
  /** `Deferred` that triggers once the object is loaded */
934
1062
  protected loadedDeferred: Deferred<void>;
@@ -1001,6 +1129,11 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
1001
1129
  createLocalReferencePosition(segment: T, offset: number, refType: ReferenceType, properties: PropertySet | undefined, slidingPreference?: SlidingPreference, canSlideToEndpoint?: boolean): LocalReferencePosition;
1002
1130
  /**
1003
1131
  * Resolves a `ReferencePosition` into a character position using this client's perspective.
1132
+ *
1133
+ * Reference positions that point to a character that has been removed will
1134
+ * always return the position of the nearest non-removed character, regardless
1135
+ * of `ReferenceType`. To handle this case specifically, one may wish
1136
+ * to look at the segment returned by `ReferencePosition.getSegment`.
1004
1137
  */
1005
1138
  localReferencePositionToPosition(lref: ReferencePosition): number;
1006
1139
  /**
@@ -1129,12 +1262,21 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
1129
1262
  /**
1130
1263
  * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}
1131
1264
  */
1132
- protected applyStashedOp(content: any): unknown;
1265
+ protected applyStashedOp(content: any): void;
1133
1266
  private summarizeMergeTree;
1267
+ /**
1268
+ *
1269
+ * @param message - Message with decoded and hydrated handles
1270
+ */
1134
1271
  private processMergeTreeMsg;
1135
1272
  private processMinSequenceNumberChanged;
1136
1273
  private loadFinished;
1137
1274
  private initializeIntervalCollections;
1275
+ /**
1276
+ * Overrides the "currently applicable reference sequence number" for the duration of the callback.
1277
+ * See remarks on `currentRefSeq` for more context.
1278
+ */
1279
+ private useResubmitRefSeq;
1138
1280
  }
1139
1281
 
1140
1282
  /* Excluded from this release type: SharedSequence */
@@ -1254,10 +1396,17 @@ export declare class SharedStringFactory implements IChannelFactory {
1254
1396
  * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}
1255
1397
  */
1256
1398
  load(runtime: IFluidDataStoreRuntime, id: string, services: IChannelServices, attributes: IChannelAttributes): Promise<SharedString>;
1399
+ /**
1400
+ * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.create}
1401
+ */
1257
1402
  create(document: IFluidDataStoreRuntime, id: string): SharedString;
1258
1403
  }
1259
1404
 
1260
- /* Excluded from this release type: SharedStringRevertible */
1405
+ /**
1406
+ * Data for undoing edits on SharedStrings and Intervals.
1407
+ * @alpha
1408
+ */
1409
+ export declare type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;
1261
1410
 
1262
1411
  /**
1263
1412
  * @alpha
@@ -1,3 +1,16 @@
1
+ /**
2
+ * Supports distributed data structures which are list-like.
3
+ *
4
+ * This library's main export is {@link SharedString}, a DDS for storing and simultaneously editing a sequence of
5
+ * text.
6
+ *
7
+ * See the package's README for a high-level introduction to `SharedString`'s feature set.
8
+ * @remarks Note that SharedString is a sequence DDS but it has additional specialized features and behaviors for
9
+ * working with text.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+
1
14
  import { BaseSegment } from '@fluidframework/merge-tree';
2
15
  import { Client } from '@fluidframework/merge-tree';
3
16
  import { Deferred } from '@fluidframework/core-utils';
@@ -206,6 +219,8 @@ import { TypedEventEmitter } from '@fluid-internal/client-utils';
206
219
 
207
220
  /* Excluded from this release type: SharedIntervalCollectionFactory */
208
221
 
222
+ /* Excluded from this release type: SharedObject */
223
+
209
224
  /* Excluded from this release type: SharedSegmentSequence */
210
225
 
211
226
  /* Excluded from this release type: SharedSequence */
@@ -1,3 +1,16 @@
1
+ /**
2
+ * Supports distributed data structures which are list-like.
3
+ *
4
+ * This library's main export is {@link SharedString}, a DDS for storing and simultaneously editing a sequence of
5
+ * text.
6
+ *
7
+ * See the package's README for a high-level introduction to `SharedString`'s feature set.
8
+ * @remarks Note that SharedString is a sequence DDS but it has additional specialized features and behaviors for
9
+ * working with text.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+
1
14
  import { BaseSegment } from '@fluidframework/merge-tree';
2
15
  import { Client } from '@fluidframework/merge-tree';
3
16
  import { Deferred } from '@fluidframework/core-utils';
@@ -206,6 +219,8 @@ import { TypedEventEmitter } from '@fluid-internal/client-utils';
206
219
 
207
220
  /* Excluded from this release type: SharedIntervalCollectionFactory */
208
221
 
222
+ /* Excluded from this release type: SharedObject */
223
+
209
224
  /* Excluded from this release type: SharedSegmentSequence */
210
225
 
211
226
  /* Excluded from this release type: SharedSequence */
@@ -1,3 +1,16 @@
1
+ /**
2
+ * Supports distributed data structures which are list-like.
3
+ *
4
+ * This library's main export is {@link SharedString}, a DDS for storing and simultaneously editing a sequence of
5
+ * text.
6
+ *
7
+ * See the package's README for a high-level introduction to `SharedString`'s feature set.
8
+ * @remarks Note that SharedString is a sequence DDS but it has additional specialized features and behaviors for
9
+ * working with text.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+
1
14
  import { BaseSegment } from '@fluidframework/merge-tree';
2
15
  import { Client } from '@fluidframework/merge-tree';
3
16
  import { Deferred } from '@fluidframework/core-utils';
@@ -46,32 +59,32 @@ import { TypedEventEmitter } from '@fluid-internal/client-utils';
46
59
 
47
60
  /**
48
61
  * Create revertibles for adding an interval
49
- * @internal
62
+ * @alpha
50
63
  */
51
64
  export declare function appendAddIntervalToRevertibles(interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
52
65
 
53
66
  /**
54
67
  * Create revertibles for moving endpoints of an interval
55
- * @internal
68
+ * @alpha
56
69
  */
57
70
  export declare function appendChangeIntervalToRevertibles(string: SharedString, newInterval: SequenceInterval, previousInterval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
58
71
 
59
72
  /**
60
73
  * Create revertibles for deleting an interval
61
- * @internal
74
+ * @alpha
62
75
  */
63
76
  export declare function appendDeleteIntervalToRevertibles(string: SharedString, interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
64
77
 
65
78
  /**
66
79
  * Create revertibles for changing properties of an interval
67
- * @internal
80
+ * @alpha
68
81
  */
69
82
  export declare function appendIntervalPropertyChangedToRevertibles(interval: SequenceInterval, deltas: PropertySet, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
70
83
 
71
84
  /**
72
85
  * Create revertibles for SharedStringDeltas, handling indirectly modified intervals
73
86
  * (e.g. reverting remove of a range that contains an interval will move the interval back)
74
- * @internal
87
+ * @alpha
75
88
  */
76
89
  export declare function appendSharedStringDeltaToRevertibles(string: SharedString, delta: SequenceDeltaEvent, revertibles: SharedStringRevertible[]): void;
77
90
 
@@ -93,7 +106,7 @@ export declare function createEndpointInRangeIndex(sharedString: SharedString):
93
106
  export declare function createIdIntervalIndex<TInterval extends ISerializableInterval>(): IIdIntervalIndex<TInterval>;
94
107
 
95
108
  /**
96
- * @internal
109
+ * @alpha
97
110
  */
98
111
  export declare function createOverlappingIntervalsIndex(sharedString: SharedString): IOverlappingIntervalsIndex<SequenceInterval>;
99
112
 
@@ -114,7 +127,7 @@ export declare type DeserializeCallback = (properties: PropertySet) => void;
114
127
 
115
128
  /**
116
129
  * Clean up resources held by revertibles that are no longer needed.
117
- * @internal
130
+ * @alpha
118
131
  */
119
132
  export declare function discardSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
120
133
 
@@ -642,7 +655,7 @@ export declare function intervalLocatorFromEndpoint(potentialEndpoint: LocalRefe
642
655
 
643
656
  /**
644
657
  * Values are used in revertibles.
645
- * @internal
658
+ * @alpha
646
659
  */
647
660
  export declare const IntervalOpType: {
648
661
  readonly PROPERTY_CHANGED: "propertyChanged";
@@ -653,13 +666,13 @@ export declare const IntervalOpType: {
653
666
  };
654
667
 
655
668
  /**
656
- * @internal
669
+ * @alpha
657
670
  */
658
671
  export declare type IntervalOpType = (typeof IntervalOpType)[keyof typeof IntervalOpType];
659
672
 
660
673
  /**
661
674
  * Data for undoing edits affecting Intervals.
662
- * @internal
675
+ * @alpha
663
676
  */
664
677
  export declare type IntervalRevertible = {
665
678
  event: typeof IntervalOpType.CHANGE;
@@ -754,7 +767,7 @@ export declare enum IntervalType {
754
767
  }
755
768
 
756
769
  /**
757
- * @internal
770
+ * @alpha
758
771
  */
759
772
  export declare interface IOverlappingIntervalsIndex<TInterval extends ISerializableInterval> extends IntervalIndex<TInterval> {
760
773
  /**
@@ -981,7 +994,7 @@ export { reservedTileLabelsKey }
981
994
 
982
995
  /**
983
996
  * Invoke revertibles to reverse prior edits
984
- * @internal
997
+ * @alpha
985
998
  */
986
999
  export declare function revertSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
987
1000
 
@@ -1363,8 +1376,27 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
1363
1376
  * E.g. SharedString submits an op while deltaManager has lastSequenceNumber = 10, but before the runtime
1364
1377
  * puts this op over the wire, it processes a client join/leave op with sequence number 11, so the referenceSequenceNumber
1365
1378
  * on the SharedString op is 11.
1379
+ *
1380
+ * The reference sequence numbers placed in this queue are also not accurate for stashed ops due to how the applyStashedOp
1381
+ * flow works at the runtime level. This is a legitimate bug, and AB#6602 tracks one way to fix it (stop reaching all the way
1382
+ * to deltaManager's lastSequenceNumber to obtain refSeq, instead leveraging some analogous notion on the container or datastore
1383
+ * runtime).
1366
1384
  */
1367
1385
  private readonly inFlightRefSeqs;
1386
+ private ongoingResubmitRefSeq;
1387
+ /**
1388
+ * Gets the reference sequence number (i.e. sequence number of the runtime's last processed op) for an op submitted
1389
+ * in the current context.
1390
+ *
1391
+ * This value can be optionally overridden using `useResubmitRefSeq`.
1392
+ * IntervalCollection's resubmit logic currently relies on preserving merge information from when the op was originally submitted,
1393
+ * even if the op is resubmitted more than once. Thus during resubmit, `inFlightRefSeqs` gets populated with the
1394
+ * original refSeq rather than the refSeq at the time of reconnection.
1395
+ *
1396
+ * @remarks - In some not fully understood cases, the runtime may process incoming ops before putting an op that this
1397
+ * DDS submits over the wire. See `inFlightRefSeqs` for more details.
1398
+ */
1399
+ private get currentRefSeq();
1368
1400
  protected client: Client;
1369
1401
  /** `Deferred` that triggers once the object is loaded */
1370
1402
  protected loadedDeferred: Deferred<void>;
@@ -1437,6 +1469,11 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
1437
1469
  createLocalReferencePosition(segment: T, offset: number, refType: ReferenceType, properties: PropertySet | undefined, slidingPreference?: SlidingPreference, canSlideToEndpoint?: boolean): LocalReferencePosition;
1438
1470
  /**
1439
1471
  * Resolves a `ReferencePosition` into a character position using this client's perspective.
1472
+ *
1473
+ * Reference positions that point to a character that has been removed will
1474
+ * always return the position of the nearest non-removed character, regardless
1475
+ * of `ReferenceType`. To handle this case specifically, one may wish
1476
+ * to look at the segment returned by `ReferencePosition.getSegment`.
1440
1477
  */
1441
1478
  localReferencePositionToPosition(lref: ReferencePosition): number;
1442
1479
  /**
@@ -1565,12 +1602,21 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
1565
1602
  /**
1566
1603
  * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}
1567
1604
  */
1568
- protected applyStashedOp(content: any): unknown;
1605
+ protected applyStashedOp(content: any): void;
1569
1606
  private summarizeMergeTree;
1607
+ /**
1608
+ *
1609
+ * @param message - Message with decoded and hydrated handles
1610
+ */
1570
1611
  private processMergeTreeMsg;
1571
1612
  private processMinSequenceNumberChanged;
1572
1613
  private loadFinished;
1573
1614
  private initializeIntervalCollections;
1615
+ /**
1616
+ * Overrides the "currently applicable reference sequence number" for the duration of the callback.
1617
+ * See remarks on `currentRefSeq` for more context.
1618
+ */
1619
+ private useResubmitRefSeq;
1574
1620
  }
1575
1621
 
1576
1622
  /**
@@ -1719,12 +1765,15 @@ export declare class SharedStringFactory implements IChannelFactory {
1719
1765
  * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}
1720
1766
  */
1721
1767
  load(runtime: IFluidDataStoreRuntime, id: string, services: IChannelServices, attributes: IChannelAttributes): Promise<SharedString>;
1768
+ /**
1769
+ * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.create}
1770
+ */
1722
1771
  create(document: IFluidDataStoreRuntime, id: string): SharedString;
1723
1772
  }
1724
1773
 
1725
1774
  /**
1726
1775
  * Data for undoing edits on SharedStrings and Intervals.
1727
- * @internal
1776
+ * @alpha
1728
1777
  */
1729
1778
  export declare type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;
1730
1779
 
@@ -9,10 +9,10 @@ import { Client, IJSONSegment, IMergeTreeGroupMsg, IRelativePosition, ISegment,
9
9
  import { IFluidSerializer, SharedObject, ISharedObjectEvents } from "@fluidframework/shared-object-base";
10
10
  import { IEventThisPlaceHolder } from "@fluidframework/core-interfaces";
11
11
  import { ISummaryTreeWithStats, ITelemetryContext } from "@fluidframework/runtime-definitions";
12
- import { SequenceInterval } from "./intervals/index.mjs";
13
- import { IIntervalCollection } from "./intervalCollection.mjs";
14
- import { SequenceDeltaEvent, SequenceMaintenanceEvent } from "./sequenceDeltaEvent.mjs";
15
- import { ISharedIntervalCollection } from "./sharedIntervalCollection.mjs";
12
+ import { SequenceInterval } from "./intervals/index.js";
13
+ import { IIntervalCollection } from "./intervalCollection.js";
14
+ import { SequenceDeltaEvent, SequenceMaintenanceEvent } from "./sequenceDeltaEvent.js";
15
+ import { ISharedIntervalCollection } from "./sharedIntervalCollection.js";
16
16
  /**
17
17
  * Events emitted in response to changes to the sequence data.
18
18
  *
@@ -82,8 +82,27 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
82
82
  * E.g. SharedString submits an op while deltaManager has lastSequenceNumber = 10, but before the runtime
83
83
  * puts this op over the wire, it processes a client join/leave op with sequence number 11, so the referenceSequenceNumber
84
84
  * on the SharedString op is 11.
85
+ *
86
+ * The reference sequence numbers placed in this queue are also not accurate for stashed ops due to how the applyStashedOp
87
+ * flow works at the runtime level. This is a legitimate bug, and AB#6602 tracks one way to fix it (stop reaching all the way
88
+ * to deltaManager's lastSequenceNumber to obtain refSeq, instead leveraging some analogous notion on the container or datastore
89
+ * runtime).
85
90
  */
86
91
  private readonly inFlightRefSeqs;
92
+ private ongoingResubmitRefSeq;
93
+ /**
94
+ * Gets the reference sequence number (i.e. sequence number of the runtime's last processed op) for an op submitted
95
+ * in the current context.
96
+ *
97
+ * This value can be optionally overridden using `useResubmitRefSeq`.
98
+ * IntervalCollection's resubmit logic currently relies on preserving merge information from when the op was originally submitted,
99
+ * even if the op is resubmitted more than once. Thus during resubmit, `inFlightRefSeqs` gets populated with the
100
+ * original refSeq rather than the refSeq at the time of reconnection.
101
+ *
102
+ * @remarks - In some not fully understood cases, the runtime may process incoming ops before putting an op that this
103
+ * DDS submits over the wire. See `inFlightRefSeqs` for more details.
104
+ */
105
+ private get currentRefSeq();
87
106
  protected client: Client;
88
107
  /** `Deferred` that triggers once the object is loaded */
89
108
  protected loadedDeferred: Deferred<void>;
@@ -156,6 +175,11 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
156
175
  createLocalReferencePosition(segment: T, offset: number, refType: ReferenceType, properties: PropertySet | undefined, slidingPreference?: SlidingPreference, canSlideToEndpoint?: boolean): LocalReferencePosition;
157
176
  /**
158
177
  * Resolves a `ReferencePosition` into a character position using this client's perspective.
178
+ *
179
+ * Reference positions that point to a character that has been removed will
180
+ * always return the position of the nearest non-removed character, regardless
181
+ * of `ReferenceType`. To handle this case specifically, one may wish
182
+ * to look at the segment returned by `ReferencePosition.getSegment`.
159
183
  */
160
184
  localReferencePositionToPosition(lref: ReferencePosition): number;
161
185
  /**
@@ -284,15 +308,24 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
284
308
  /**
285
309
  * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}
286
310
  */
287
- protected applyStashedOp(content: any): unknown;
311
+ protected applyStashedOp(content: any): void;
288
312
  private summarizeMergeTree;
313
+ /**
314
+ *
315
+ * @param message - Message with decoded and hydrated handles
316
+ */
289
317
  private processMergeTreeMsg;
290
318
  private processMinSequenceNumberChanged;
291
319
  private loadFinished;
292
320
  private initializeIntervalCollections;
321
+ /**
322
+ * Overrides the "currently applicable reference sequence number" for the duration of the callback.
323
+ * See remarks on `currentRefSeq` for more context.
324
+ */
325
+ private useResubmitRefSeq;
293
326
  }
294
327
  /**
295
328
  * Resets the reentrancy log counter. Test-only API.
296
329
  */
297
330
  export declare function resetReentrancyLogCounter(): void;
298
- //# sourceMappingURL=sequence.d.mts.map
331
+ //# sourceMappingURL=sequence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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"}