@fluidframework/sequence 1.4.0-115997 → 2.0.0-dev-rc.1.0.0.224419

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 (349) hide show
  1. package/.eslintrc.js +9 -11
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +449 -0
  4. package/README.md +364 -183
  5. package/api-extractor-lint.json +4 -0
  6. package/api-extractor.json +2 -2
  7. package/api-report/sequence.api.md +741 -0
  8. package/dist/{defaultMap.js → defaultMap.cjs} +29 -22
  9. package/dist/defaultMap.cjs.map +1 -0
  10. package/dist/defaultMap.d.ts +7 -6
  11. package/dist/defaultMap.d.ts.map +1 -1
  12. package/dist/defaultMapInterfaces.cjs +7 -0
  13. package/dist/defaultMapInterfaces.cjs.map +1 -0
  14. package/dist/defaultMapInterfaces.d.ts +44 -12
  15. package/dist/defaultMapInterfaces.d.ts.map +1 -1
  16. package/dist/index.cjs +60 -0
  17. package/dist/index.cjs.map +1 -0
  18. package/dist/index.d.ts +14 -12
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/intervalCollection.cjs +1159 -0
  21. package/dist/intervalCollection.cjs.map +1 -0
  22. package/dist/intervalCollection.d.ts +461 -162
  23. package/dist/intervalCollection.d.ts.map +1 -1
  24. package/dist/intervalIndex/endpointInRangeIndex.cjs +66 -0
  25. package/dist/intervalIndex/endpointInRangeIndex.cjs.map +1 -0
  26. package/dist/intervalIndex/endpointInRangeIndex.d.ts +34 -0
  27. package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -0
  28. package/dist/intervalIndex/endpointIndex.cjs +47 -0
  29. package/dist/intervalIndex/endpointIndex.cjs.map +1 -0
  30. package/dist/intervalIndex/endpointIndex.d.ts +38 -0
  31. package/dist/intervalIndex/endpointIndex.d.ts.map +1 -0
  32. package/dist/intervalIndex/idIntervalIndex.cjs +44 -0
  33. package/dist/intervalIndex/idIntervalIndex.cjs.map +1 -0
  34. package/dist/intervalIndex/idIntervalIndex.d.ts +18 -0
  35. package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -0
  36. package/dist/intervalIndex/index.cjs +24 -0
  37. package/dist/intervalIndex/index.cjs.map +1 -0
  38. package/dist/intervalIndex/index.d.ts +13 -0
  39. package/dist/intervalIndex/index.d.ts.map +1 -0
  40. package/dist/{defaultMapInterfaces.js → intervalIndex/intervalIndex.cjs} +1 -1
  41. package/dist/intervalIndex/intervalIndex.cjs.map +1 -0
  42. package/dist/intervalIndex/intervalIndex.d.ts +30 -0
  43. package/dist/intervalIndex/intervalIndex.d.ts.map +1 -0
  44. package/dist/intervalIndex/intervalIndexUtils.cjs +22 -0
  45. package/dist/intervalIndex/intervalIndexUtils.cjs.map +1 -0
  46. package/dist/intervalIndex/intervalIndexUtils.d.ts +17 -0
  47. package/dist/intervalIndex/intervalIndexUtils.d.ts.map +1 -0
  48. package/dist/intervalIndex/overlappingIntervalsIndex.cjs +116 -0
  49. package/dist/intervalIndex/overlappingIntervalsIndex.cjs.map +1 -0
  50. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +44 -0
  51. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -0
  52. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.cjs +41 -0
  53. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.cjs.map +1 -0
  54. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +11 -0
  55. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -0
  56. package/dist/intervalIndex/sequenceIntervalIndexes.cjs +7 -0
  57. package/dist/intervalIndex/sequenceIntervalIndexes.cjs.map +1 -0
  58. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +35 -0
  59. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -0
  60. package/dist/intervalIndex/startpointInRangeIndex.cjs +66 -0
  61. package/dist/intervalIndex/startpointInRangeIndex.cjs.map +1 -0
  62. package/dist/intervalIndex/startpointInRangeIndex.d.ts +34 -0
  63. package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -0
  64. package/dist/intervalTree.cjs +80 -0
  65. package/dist/intervalTree.cjs.map +1 -0
  66. package/dist/intervalTree.d.ts +24 -0
  67. package/dist/intervalTree.d.ts.map +1 -0
  68. package/dist/intervals/index.cjs +23 -0
  69. package/dist/intervals/index.cjs.map +1 -0
  70. package/dist/intervals/index.d.ts +8 -0
  71. package/dist/intervals/index.d.ts.map +1 -0
  72. package/dist/intervals/interval.cjs +181 -0
  73. package/dist/intervals/interval.cjs.map +1 -0
  74. package/dist/intervals/interval.d.ts +84 -0
  75. package/dist/intervals/interval.d.ts.map +1 -0
  76. package/dist/intervals/intervalUtils.cjs +83 -0
  77. package/dist/intervals/intervalUtils.cjs.map +1 -0
  78. package/dist/intervals/intervalUtils.d.ts +230 -0
  79. package/dist/intervals/intervalUtils.d.ts.map +1 -0
  80. package/dist/intervals/sequenceInterval.cjs +378 -0
  81. package/dist/intervals/sequenceInterval.cjs.map +1 -0
  82. package/dist/intervals/sequenceInterval.d.ts +137 -0
  83. package/dist/intervals/sequenceInterval.d.ts.map +1 -0
  84. package/dist/{localValues.js → localValues.cjs} +1 -1
  85. package/dist/localValues.cjs.map +1 -0
  86. package/dist/localValues.d.ts +2 -1
  87. package/dist/localValues.d.ts.map +1 -1
  88. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  89. package/dist/packageVersion.cjs.map +1 -0
  90. package/dist/packageVersion.d.ts +1 -1
  91. package/dist/packageVersion.d.ts.map +1 -1
  92. package/dist/revertibles.cjs +425 -0
  93. package/dist/revertibles.cjs.map +1 -0
  94. package/dist/revertibles.d.ts +86 -0
  95. package/dist/revertibles.d.ts.map +1 -0
  96. package/dist/sequence-alpha.d.ts +1315 -0
  97. package/dist/sequence-beta.d.ts +244 -0
  98. package/dist/sequence-public.d.ts +244 -0
  99. package/dist/sequence-untrimmed.d.ts +1803 -0
  100. package/dist/{sequence.js → sequence.cjs} +226 -156
  101. package/dist/sequence.cjs.map +1 -0
  102. package/dist/sequence.d.ts +125 -48
  103. package/dist/sequence.d.ts.map +1 -1
  104. package/dist/{sequenceDeltaEvent.js → sequenceDeltaEvent.cjs} +18 -8
  105. package/dist/sequenceDeltaEvent.cjs.map +1 -0
  106. package/dist/sequenceDeltaEvent.d.ts +24 -7
  107. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  108. package/dist/sequenceFactory.cjs +55 -0
  109. package/dist/sequenceFactory.cjs.map +1 -0
  110. package/dist/sequenceFactory.d.ts +3 -89
  111. package/dist/sequenceFactory.d.ts.map +1 -1
  112. package/dist/{sharedIntervalCollection.js → sharedIntervalCollection.cjs} +17 -22
  113. package/dist/sharedIntervalCollection.cjs.map +1 -0
  114. package/dist/sharedIntervalCollection.d.ts +12 -12
  115. package/dist/sharedIntervalCollection.d.ts.map +1 -1
  116. package/dist/{sharedSequence.js → sharedSequence.cjs} +29 -22
  117. package/dist/sharedSequence.cjs.map +1 -0
  118. package/dist/sharedSequence.d.ts +14 -2
  119. package/dist/sharedSequence.d.ts.map +1 -1
  120. package/dist/sharedString.cjs +286 -0
  121. package/dist/sharedString.cjs.map +1 -0
  122. package/dist/sharedString.d.ts +58 -22
  123. package/dist/sharedString.d.ts.map +1 -1
  124. package/dist/tsdoc-metadata.json +11 -0
  125. package/lib/{defaultMap.d.ts → defaultMap.d.mts} +7 -6
  126. package/lib/defaultMap.d.mts.map +1 -0
  127. package/lib/{defaultMap.js → defaultMap.mjs} +28 -21
  128. package/lib/defaultMap.mjs.map +1 -0
  129. package/lib/{defaultMapInterfaces.d.ts → defaultMapInterfaces.d.mts} +44 -12
  130. package/lib/defaultMapInterfaces.d.mts.map +1 -0
  131. package/lib/defaultMapInterfaces.mjs +6 -0
  132. package/lib/defaultMapInterfaces.mjs.map +1 -0
  133. package/lib/index.d.mts +17 -0
  134. package/lib/index.d.mts.map +1 -0
  135. package/lib/index.mjs +16 -0
  136. package/lib/index.mjs.map +1 -0
  137. package/lib/intervalCollection.d.mts +569 -0
  138. package/lib/intervalCollection.d.mts.map +1 -0
  139. package/lib/intervalCollection.mjs +1144 -0
  140. package/lib/intervalCollection.mjs.map +1 -0
  141. package/lib/intervalIndex/endpointInRangeIndex.d.mts +34 -0
  142. package/lib/intervalIndex/endpointInRangeIndex.d.mts.map +1 -0
  143. package/lib/intervalIndex/endpointInRangeIndex.mjs +61 -0
  144. package/lib/intervalIndex/endpointInRangeIndex.mjs.map +1 -0
  145. package/lib/intervalIndex/endpointIndex.d.mts +38 -0
  146. package/lib/intervalIndex/endpointIndex.d.mts.map +1 -0
  147. package/lib/intervalIndex/endpointIndex.mjs +42 -0
  148. package/lib/intervalIndex/endpointIndex.mjs.map +1 -0
  149. package/lib/intervalIndex/idIntervalIndex.d.mts +18 -0
  150. package/lib/intervalIndex/idIntervalIndex.d.mts.map +1 -0
  151. package/lib/intervalIndex/idIntervalIndex.mjs +40 -0
  152. package/lib/intervalIndex/idIntervalIndex.mjs.map +1 -0
  153. package/lib/intervalIndex/index.d.mts +13 -0
  154. package/lib/intervalIndex/index.d.mts.map +1 -0
  155. package/lib/intervalIndex/index.mjs +11 -0
  156. package/lib/intervalIndex/index.mjs.map +1 -0
  157. package/lib/intervalIndex/intervalIndex.d.mts +30 -0
  158. package/lib/intervalIndex/intervalIndex.d.mts.map +1 -0
  159. package/lib/{defaultMapInterfaces.js → intervalIndex/intervalIndex.mjs} +1 -1
  160. package/lib/intervalIndex/intervalIndex.mjs.map +1 -0
  161. package/lib/intervalIndex/intervalIndexUtils.d.mts +17 -0
  162. package/lib/intervalIndex/intervalIndexUtils.d.mts.map +1 -0
  163. package/lib/intervalIndex/intervalIndexUtils.mjs +18 -0
  164. package/lib/intervalIndex/intervalIndexUtils.mjs.map +1 -0
  165. package/lib/intervalIndex/overlappingIntervalsIndex.d.mts +44 -0
  166. package/lib/intervalIndex/overlappingIntervalsIndex.d.mts.map +1 -0
  167. package/lib/intervalIndex/overlappingIntervalsIndex.mjs +111 -0
  168. package/lib/intervalIndex/overlappingIntervalsIndex.mjs.map +1 -0
  169. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.mts +11 -0
  170. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.mts.map +1 -0
  171. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.mjs +37 -0
  172. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.mjs.map +1 -0
  173. package/lib/intervalIndex/sequenceIntervalIndexes.d.mts +35 -0
  174. package/lib/intervalIndex/sequenceIntervalIndexes.d.mts.map +1 -0
  175. package/lib/intervalIndex/sequenceIntervalIndexes.mjs +6 -0
  176. package/lib/intervalIndex/sequenceIntervalIndexes.mjs.map +1 -0
  177. package/lib/intervalIndex/startpointInRangeIndex.d.mts +34 -0
  178. package/lib/intervalIndex/startpointInRangeIndex.d.mts.map +1 -0
  179. package/lib/intervalIndex/startpointInRangeIndex.mjs +61 -0
  180. package/lib/intervalIndex/startpointInRangeIndex.mjs.map +1 -0
  181. package/lib/intervalTree.d.mts +24 -0
  182. package/lib/intervalTree.d.mts.map +1 -0
  183. package/lib/intervalTree.mjs +76 -0
  184. package/lib/intervalTree.mjs.map +1 -0
  185. package/lib/intervals/index.d.mts +8 -0
  186. package/lib/intervals/index.d.mts.map +1 -0
  187. package/lib/intervals/index.mjs +8 -0
  188. package/lib/intervals/index.mjs.map +1 -0
  189. package/lib/intervals/interval.d.mts +84 -0
  190. package/lib/intervals/interval.d.mts.map +1 -0
  191. package/lib/intervals/interval.mjs +176 -0
  192. package/lib/intervals/interval.mjs.map +1 -0
  193. package/lib/intervals/intervalUtils.d.mts +230 -0
  194. package/lib/intervals/intervalUtils.d.mts.map +1 -0
  195. package/lib/intervals/intervalUtils.mjs +77 -0
  196. package/lib/intervals/intervalUtils.mjs.map +1 -0
  197. package/lib/intervals/sequenceInterval.d.mts +137 -0
  198. package/lib/intervals/sequenceInterval.d.mts.map +1 -0
  199. package/lib/intervals/sequenceInterval.mjs +370 -0
  200. package/lib/intervals/sequenceInterval.mjs.map +1 -0
  201. package/lib/{localValues.d.ts → localValues.d.mts} +3 -2
  202. package/lib/localValues.d.mts.map +1 -0
  203. package/lib/{localValues.js → localValues.mjs} +2 -2
  204. package/lib/localValues.mjs.map +1 -0
  205. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
  206. package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
  207. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  208. package/lib/packageVersion.mjs.map +1 -0
  209. package/lib/revertibles.d.mts +86 -0
  210. package/lib/revertibles.d.mts.map +1 -0
  211. package/lib/revertibles.mjs +416 -0
  212. package/lib/revertibles.mjs.map +1 -0
  213. package/lib/sequence-alpha.d.mts +1315 -0
  214. package/lib/sequence-beta.d.mts +244 -0
  215. package/lib/sequence-public.d.mts +244 -0
  216. package/lib/sequence-untrimmed.d.mts +1803 -0
  217. package/lib/{sequence.d.ts → sequence.d.mts} +127 -50
  218. package/lib/sequence.d.mts.map +1 -0
  219. package/lib/{sequence.js → sequence.mjs} +225 -152
  220. package/lib/sequence.mjs.map +1 -0
  221. package/lib/{sequenceDeltaEvent.d.ts → sequenceDeltaEvent.d.mts} +24 -7
  222. package/lib/sequenceDeltaEvent.d.mts.map +1 -0
  223. package/lib/{sequenceDeltaEvent.js → sequenceDeltaEvent.mjs} +20 -8
  224. package/lib/sequenceDeltaEvent.mjs.map +1 -0
  225. package/lib/sequenceFactory.d.mts +22 -0
  226. package/lib/sequenceFactory.d.mts.map +1 -0
  227. package/lib/sequenceFactory.mjs +51 -0
  228. package/lib/sequenceFactory.mjs.map +1 -0
  229. package/lib/{sharedIntervalCollection.d.ts → sharedIntervalCollection.d.mts} +12 -12
  230. package/lib/sharedIntervalCollection.d.mts.map +1 -0
  231. package/lib/{sharedIntervalCollection.js → sharedIntervalCollection.mjs} +16 -21
  232. package/lib/sharedIntervalCollection.mjs.map +1 -0
  233. package/lib/{sharedSequence.d.ts → sharedSequence.d.mts} +15 -3
  234. package/lib/sharedSequence.d.mts.map +1 -0
  235. package/lib/{sharedSequence.js → sharedSequence.mjs} +30 -23
  236. package/lib/sharedSequence.mjs.map +1 -0
  237. package/lib/{sharedString.d.ts → sharedString.d.mts} +60 -24
  238. package/lib/sharedString.d.mts.map +1 -0
  239. package/lib/sharedString.mjs +281 -0
  240. package/lib/sharedString.mjs.map +1 -0
  241. package/package.json +146 -75
  242. package/prettier.config.cjs +8 -0
  243. package/sequence.test-files.tar +0 -0
  244. package/src/defaultMap.ts +417 -403
  245. package/src/defaultMapInterfaces.ts +157 -117
  246. package/src/index.ts +86 -26
  247. package/src/intervalCollection.ts +2043 -1563
  248. package/src/intervalIndex/endpointInRangeIndex.ts +116 -0
  249. package/src/intervalIndex/endpointIndex.ts +91 -0
  250. package/src/intervalIndex/idIntervalIndex.ts +64 -0
  251. package/src/intervalIndex/index.ts +25 -0
  252. package/src/intervalIndex/intervalIndex.ts +32 -0
  253. package/src/intervalIndex/intervalIndexUtils.ts +27 -0
  254. package/src/intervalIndex/overlappingIntervalsIndex.ts +187 -0
  255. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +80 -0
  256. package/src/intervalIndex/sequenceIntervalIndexes.ts +34 -0
  257. package/src/intervalIndex/startpointInRangeIndex.ts +114 -0
  258. package/src/intervalTree.ts +98 -0
  259. package/src/intervals/index.ts +25 -0
  260. package/src/intervals/interval.ts +238 -0
  261. package/src/intervals/intervalUtils.ts +288 -0
  262. package/src/intervals/sequenceInterval.ts +616 -0
  263. package/src/localValues.ts +68 -73
  264. package/src/packageVersion.ts +1 -1
  265. package/src/revertibles.ts +693 -0
  266. package/src/sequence.ts +845 -690
  267. package/src/sequenceDeltaEvent.ts +164 -131
  268. package/src/sequenceFactory.ts +58 -214
  269. package/src/sharedIntervalCollection.ts +161 -152
  270. package/src/sharedSequence.ts +181 -167
  271. package/src/sharedString.ts +390 -234
  272. package/tsc-multi.test.json +10 -0
  273. package/tsconfig.json +11 -13
  274. package/.editorconfig +0 -7
  275. package/.vscode/launch.json +0 -15
  276. package/dist/defaultMap.js.map +0 -1
  277. package/dist/defaultMapInterfaces.js.map +0 -1
  278. package/dist/index.js +0 -44
  279. package/dist/index.js.map +0 -1
  280. package/dist/intervalCollection.js +0 -1250
  281. package/dist/intervalCollection.js.map +0 -1
  282. package/dist/localValues.js.map +0 -1
  283. package/dist/packageVersion.js.map +0 -1
  284. package/dist/sequence.js.map +0 -1
  285. package/dist/sequenceDeltaEvent.js.map +0 -1
  286. package/dist/sequenceFactory.js +0 -192
  287. package/dist/sequenceFactory.js.map +0 -1
  288. package/dist/sharedIntervalCollection.js.map +0 -1
  289. package/dist/sharedNumberSequence.d.ts +0 -50
  290. package/dist/sharedNumberSequence.d.ts.map +0 -1
  291. package/dist/sharedNumberSequence.js +0 -61
  292. package/dist/sharedNumberSequence.js.map +0 -1
  293. package/dist/sharedObjectSequence.d.ts +0 -50
  294. package/dist/sharedObjectSequence.d.ts.map +0 -1
  295. package/dist/sharedObjectSequence.js +0 -61
  296. package/dist/sharedObjectSequence.js.map +0 -1
  297. package/dist/sharedSequence.js.map +0 -1
  298. package/dist/sharedString.js +0 -187
  299. package/dist/sharedString.js.map +0 -1
  300. package/dist/sparsematrix.d.ts +0 -139
  301. package/dist/sparsematrix.d.ts.map +0 -1
  302. package/dist/sparsematrix.js +0 -332
  303. package/dist/sparsematrix.js.map +0 -1
  304. package/lib/defaultMap.d.ts.map +0 -1
  305. package/lib/defaultMap.js.map +0 -1
  306. package/lib/defaultMapInterfaces.d.ts.map +0 -1
  307. package/lib/defaultMapInterfaces.js.map +0 -1
  308. package/lib/index.d.ts +0 -27
  309. package/lib/index.d.ts.map +0 -1
  310. package/lib/index.js +0 -26
  311. package/lib/index.js.map +0 -1
  312. package/lib/intervalCollection.d.ts +0 -270
  313. package/lib/intervalCollection.d.ts.map +0 -1
  314. package/lib/intervalCollection.js +0 -1238
  315. package/lib/intervalCollection.js.map +0 -1
  316. package/lib/localValues.d.ts.map +0 -1
  317. package/lib/localValues.js.map +0 -1
  318. package/lib/packageVersion.js.map +0 -1
  319. package/lib/sequence.d.ts.map +0 -1
  320. package/lib/sequence.js.map +0 -1
  321. package/lib/sequenceDeltaEvent.d.ts.map +0 -1
  322. package/lib/sequenceDeltaEvent.js.map +0 -1
  323. package/lib/sequenceFactory.d.ts +0 -108
  324. package/lib/sequenceFactory.d.ts.map +0 -1
  325. package/lib/sequenceFactory.js +0 -186
  326. package/lib/sequenceFactory.js.map +0 -1
  327. package/lib/sharedIntervalCollection.d.ts.map +0 -1
  328. package/lib/sharedIntervalCollection.js.map +0 -1
  329. package/lib/sharedNumberSequence.d.ts +0 -50
  330. package/lib/sharedNumberSequence.d.ts.map +0 -1
  331. package/lib/sharedNumberSequence.js +0 -57
  332. package/lib/sharedNumberSequence.js.map +0 -1
  333. package/lib/sharedObjectSequence.d.ts +0 -50
  334. package/lib/sharedObjectSequence.d.ts.map +0 -1
  335. package/lib/sharedObjectSequence.js +0 -57
  336. package/lib/sharedObjectSequence.js.map +0 -1
  337. package/lib/sharedSequence.d.ts.map +0 -1
  338. package/lib/sharedSequence.js.map +0 -1
  339. package/lib/sharedString.d.ts.map +0 -1
  340. package/lib/sharedString.js +0 -183
  341. package/lib/sharedString.js.map +0 -1
  342. package/lib/sparsematrix.d.ts +0 -139
  343. package/lib/sparsematrix.d.ts.map +0 -1
  344. package/lib/sparsematrix.js +0 -323
  345. package/lib/sparsematrix.js.map +0 -1
  346. package/src/sharedNumberSequence.ts +0 -62
  347. package/src/sharedObjectSequence.ts +0 -62
  348. package/src/sparsematrix.ts +0 -421
  349. package/tsconfig.esnext.json +0 -7
@@ -3,183 +3,197 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import { assert } from "@fluidframework/core-utils";
7
+ import { BaseSegment, IJSONSegment, ISegment, PropertySet } from "@fluidframework/merge-tree";
6
8
  import {
7
- BaseSegment, IJSONSegment, ISegment, PropertySet, LocalReferenceCollection,
8
- } from "@fluidframework/merge-tree";
9
- import { IChannelAttributes, IFluidDataStoreRuntime, Serializable } from "@fluidframework/datastore-definitions";
9
+ IChannelAttributes,
10
+ IFluidDataStoreRuntime,
11
+ Serializable,
12
+ } from "@fluidframework/datastore-definitions";
10
13
  import { SharedSegmentSequence } from "./sequence";
11
14
 
12
15
  const MaxRun = 128;
13
16
 
17
+ /**
18
+ * @deprecated IJSONRunSegment will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
19
+ * @internal
20
+ */
14
21
  export interface IJSONRunSegment<T> extends IJSONSegment {
15
- items: Serializable<T>[];
22
+ items: Serializable<T>[];
16
23
  }
17
24
 
25
+ /**
26
+ * @deprecated SubSequence will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
27
+ * @internal
28
+ */
18
29
  export class SubSequence<T> extends BaseSegment {
19
- public static readonly typeString: string = "SubSequence";
20
- public static is(segment: ISegment): segment is SubSequence<any> {
21
- return segment.type === SubSequence.typeString;
22
- }
23
- public static fromJSONObject<U>(spec: Serializable) {
24
- if (spec && typeof spec === "object" && "items" in spec) {
25
- const segment = new SubSequence<U>(spec.items);
26
- if (spec.props) {
27
- segment.addProperties(spec.props);
28
- }
29
- return segment;
30
- }
31
- return undefined;
32
- }
33
-
34
- public readonly type = SubSequence.typeString;
35
-
36
- constructor(public items: Serializable<T>[]) {
37
- super();
38
- this.cachedLength = items.length;
39
- }
40
-
41
- public toJSONObject() {
42
- const obj: IJSONRunSegment<T> = { items: this.items };
43
- super.addSerializedProps(obj);
44
- return obj;
45
- }
46
-
47
- public clone(start = 0, end?: number) {
48
- const clonedItems = this.items.slice(start, end);
49
- const b = new SubSequence(clonedItems);
50
- this.cloneInto(b);
51
- return b;
52
- }
53
-
54
- public canAppend(segment: ISegment): boolean {
55
- return SubSequence.is(segment)
56
- && (this.cachedLength <= MaxRun || segment.cachedLength <= MaxRun);
57
- }
58
-
59
- public toString() {
60
- return this.items.toString();
61
- }
62
-
63
- public append(segment: ISegment) {
64
- if (!SubSequence.is(segment)) {
65
- throw new Error("can only append another run segment");
66
- }
67
-
68
- // Note: Must call 'appendLocalRefs' before modifying this segment's length as
69
- // 'this.cachedLength' is used to adjust the offsets of the local refs.
70
- LocalReferenceCollection.append(this, segment);
71
-
72
- this.items = this.items.concat(segment.items);
73
- this.cachedLength = this.items.length;
74
- }
75
-
76
- // TODO: retain removed items for undo
77
- // returns true if entire run removed
78
- public removeRange(start: number, end: number) {
79
- let remnantItems: Serializable<T>[] = [];
80
- const len = this.items.length;
81
- if (start > 0) {
82
- remnantItems = remnantItems.concat(this.items.slice(0, start));
83
- }
84
- if (end < len) {
85
- remnantItems = remnantItems.concat(this.items.slice(end));
86
- }
87
- this.items = remnantItems;
88
- this.cachedLength = this.items.length;
89
- return (this.items.length === 0);
90
- }
91
-
92
- protected createSplitSegmentAt(pos: number) {
93
- if (pos > 0) {
94
- const remainingItems = this.items.slice(pos);
95
- this.items = this.items.slice(0, pos);
96
- this.cachedLength = this.items.length;
97
- const leafSegment = new SubSequence(remainingItems);
98
- return leafSegment;
99
- }
100
- }
30
+ public static readonly typeString: string = "SubSequence";
31
+ public static is(segment: ISegment): segment is SubSequence<any> {
32
+ return segment.type === SubSequence.typeString;
33
+ }
34
+ public static fromJSONObject<U>(spec: any) {
35
+ if (spec && typeof spec === "object" && "items" in spec) {
36
+ const segment = new SubSequence<U>(spec.items);
37
+ if (spec.props) {
38
+ segment.addProperties(spec.props);
39
+ }
40
+ return segment;
41
+ }
42
+ return undefined;
43
+ }
44
+
45
+ public readonly type = SubSequence.typeString;
46
+
47
+ constructor(public items: Serializable<T>[]) {
48
+ super();
49
+ this.cachedLength = items.length;
50
+ }
51
+
52
+ public toJSONObject() {
53
+ const obj: IJSONRunSegment<T> = { items: this.items };
54
+ super.addSerializedProps(obj);
55
+ return obj;
56
+ }
57
+
58
+ public clone(start = 0, end?: number) {
59
+ const clonedItems = this.items.slice(start, end);
60
+ const b = new SubSequence(clonedItems);
61
+ this.cloneInto(b);
62
+ return b;
63
+ }
64
+
65
+ public canAppend(segment: ISegment): boolean {
66
+ return (
67
+ SubSequence.is(segment) &&
68
+ (this.cachedLength <= MaxRun || segment.cachedLength <= MaxRun)
69
+ );
70
+ }
71
+
72
+ public toString() {
73
+ return this.items.toString();
74
+ }
75
+
76
+ public append(segment: ISegment) {
77
+ assert(SubSequence.is(segment), 0x448 /* can only append to another run segment */);
78
+ super.append(segment);
79
+ // assert above checks that segment is a SubSequence but not that generic T matches.
80
+ // Since SubSequence is already deprecated, assume that usage is generic T consistent
81
+ // and just cast here to satisfy concat.
82
+ this.items = this.items.concat((segment as SubSequence<T>).items);
83
+ }
84
+
85
+ // TODO: retain removed items for undo
86
+ // returns true if entire run removed
87
+ public removeRange(start: number, end: number) {
88
+ let remnantItems: Serializable<T>[] = [];
89
+ const len = this.items.length;
90
+ if (start > 0) {
91
+ remnantItems = remnantItems.concat(this.items.slice(0, start));
92
+ }
93
+ if (end < len) {
94
+ remnantItems = remnantItems.concat(this.items.slice(end));
95
+ }
96
+ this.items = remnantItems;
97
+ this.cachedLength = this.items.length;
98
+ return this.items.length === 0;
99
+ }
100
+
101
+ protected createSplitSegmentAt(pos: number) {
102
+ if (pos > 0) {
103
+ const remainingItems = this.items.slice(pos);
104
+ this.items = this.items.slice(0, pos);
105
+ this.cachedLength = this.items.length;
106
+ const leafSegment = new SubSequence(remainingItems);
107
+ return leafSegment;
108
+ }
109
+ }
101
110
  }
102
111
 
112
+ /**
113
+ * @deprecated SharedSequence will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
114
+ * @internal
115
+ */
103
116
  export class SharedSequence<T> extends SharedSegmentSequence<SubSequence<T>> {
104
- constructor(
105
- document: IFluidDataStoreRuntime,
106
- public id: string,
107
- attributes: IChannelAttributes,
108
- specToSegment: (spec: IJSONSegment) => ISegment,
109
- ) {
110
- super(document, id, attributes, specToSegment);
111
- }
112
-
113
- /**
114
- * @param pos - The position to insert the items at.
115
- * @param items - The items to insert.
116
- * @param props - Optional. Properties to set on the inserted items.
117
- */
118
- public insert(pos: number, items: Serializable<T>[], props?: PropertySet) {
119
- const segment = new SubSequence<T>(items);
120
- if (props) {
121
- segment.addProperties(props);
122
- }
123
- const insertOp = this.client.insertSegmentLocal(pos, segment);
124
- if (insertOp) {
125
- this.submitSequenceMessage(insertOp);
126
- }
127
- }
128
-
129
- /**
130
- * @param start - The inclusive start of the range to remove
131
- * @param end - The exclusive end of the range to remove
132
- */
133
- public remove(start: number, end: number) {
134
- this.removeRange(start, end);
135
- }
136
-
137
- /**
138
- * Returns the total count of items in the sequence
139
- */
140
- public getItemCount(): number {
141
- return this.getLength();
142
- }
143
-
144
- /**
145
- * Gets the items in the specified range
146
- *
147
- * @param start - The inclusive start of the range
148
- * @param end - The exclusive end of the range
149
- */
150
- public getItems(start: number, end?: number): Serializable<T>[] {
151
- const items: Serializable<T>[] = [];
152
- let firstSegment: ISegment | undefined;
153
-
154
- // Return if the range is incorrect.
155
- if (end !== undefined && end <= start) {
156
- return items;
157
- }
158
-
159
- this.walkSegments(
160
- (segment: ISegment) => {
161
- if (SubSequence.is(segment)) {
162
- if (firstSegment === undefined) {
163
- firstSegment = segment;
164
- }
165
- items.push(...segment.items);
166
- }
167
- return true;
168
- },
169
- start,
170
- end);
171
-
172
- // The above call to walkSegments adds all the items in the walked
173
- // segments. However, we only want items beginning at |start| in
174
- // the first segment. Similarly, if |end| is passed in, we only
175
- // want items until |end| in the last segment. Remove the rest of
176
- // the items.
177
- if (firstSegment !== undefined) {
178
- items.splice(0, start - this.getPosition(firstSegment));
179
- }
180
- if (end !== undefined) {
181
- items.splice(end - start);
182
- }
183
- return items;
184
- }
117
+ constructor(
118
+ document: IFluidDataStoreRuntime,
119
+ public id: string,
120
+ attributes: IChannelAttributes,
121
+ specToSegment: (spec: IJSONSegment) => ISegment,
122
+ ) {
123
+ super(document, id, attributes, specToSegment);
124
+ }
125
+
126
+ /**
127
+ * @param pos - The position to insert the items at.
128
+ * @param items - The items to insert.
129
+ * @param props - Optional. Properties to set on the inserted items.
130
+ */
131
+ public insert(pos: number, items: Serializable<T>[], props?: PropertySet) {
132
+ const segment = new SubSequence<T>(items);
133
+ if (props) {
134
+ segment.addProperties(props);
135
+ }
136
+ this.client.insertSegmentLocal(pos, segment);
137
+ }
138
+
139
+ /**
140
+ * @param start - The inclusive start of the range to remove
141
+ * @param end - The exclusive end of the range to remove
142
+ */
143
+ public remove(start: number, end: number) {
144
+ this.removeRange(start, end);
145
+ }
146
+
147
+ /**
148
+ * Returns the total count of items in the sequence
149
+ */
150
+ public getItemCount(): number {
151
+ return this.getLength();
152
+ }
153
+
154
+ /**
155
+ * Gets the items in the specified range
156
+ *
157
+ * @param start - The inclusive start of the range
158
+ * @param end - The exclusive end of the range
159
+ */
160
+ public getItems(start: number, end?: number): Serializable<T>[] {
161
+ const items: Serializable<T>[] = [];
162
+ let firstSegment: ISegment | undefined;
163
+
164
+ // Return if the range is incorrect.
165
+ if (end !== undefined && end <= start) {
166
+ return items;
167
+ }
168
+
169
+ this.walkSegments(
170
+ (segment: ISegment) => {
171
+ if (SubSequence.is(segment)) {
172
+ if (firstSegment === undefined) {
173
+ firstSegment = segment;
174
+ }
175
+ // Condition above checks that segment is a SubSequence but not that
176
+ // generic T matches. Since SubSequence is already deprecated, assume
177
+ // that walk only has SubSequence<T> segments and just cast here.
178
+ items.push(...(segment as SubSequence<T>).items);
179
+ }
180
+ return true;
181
+ },
182
+ start,
183
+ end,
184
+ );
185
+
186
+ // The above call to walkSegments adds all the items in the walked
187
+ // segments. However, we only want items beginning at |start| in
188
+ // the first segment. Similarly, if |end| is passed in, we only
189
+ // want items until |end| in the last segment. Remove the rest of
190
+ // the items.
191
+ if (firstSegment !== undefined) {
192
+ items.splice(0, start - this.getPosition(firstSegment));
193
+ }
194
+ if (end !== undefined) {
195
+ items.splice(end - start);
196
+ }
197
+ return items;
198
+ }
185
199
  }