@fluidframework/sequence 2.0.0-internal.8.0.0 → 2.0.0-internal.8.0.2

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 (263) hide show
  1. package/dist/{defaultMap.js → defaultMap.cjs} +2 -2
  2. package/dist/defaultMap.cjs.map +1 -0
  3. package/{lib/intervalIndex/intervalIndex.js → dist/defaultMapInterfaces.cjs} +1 -1
  4. package/dist/defaultMapInterfaces.cjs.map +1 -0
  5. package/{lib/index.js → dist/index.cjs} +11 -11
  6. package/dist/index.cjs.map +1 -0
  7. package/dist/{intervalCollection.js → intervalCollection.cjs} +3 -3
  8. package/dist/intervalCollection.cjs.map +1 -0
  9. package/dist/intervalIndex/{endpointInRangeIndex.js → endpointInRangeIndex.cjs} +3 -3
  10. package/dist/intervalIndex/endpointInRangeIndex.cjs.map +1 -0
  11. package/{lib/intervalIndex/endpointIndex.js → dist/intervalIndex/endpointIndex.cjs} +2 -2
  12. package/dist/intervalIndex/endpointIndex.cjs.map +1 -0
  13. package/dist/intervalIndex/{idIntervalIndex.js → idIntervalIndex.cjs} +1 -1
  14. package/dist/intervalIndex/idIntervalIndex.cjs.map +1 -0
  15. package/{lib/intervalIndex/index.js → dist/intervalIndex/index.cjs} +7 -7
  16. package/dist/intervalIndex/index.cjs.map +1 -0
  17. package/dist/intervalIndex/{intervalIndex.js → intervalIndex.cjs} +1 -1
  18. package/dist/intervalIndex/intervalIndex.cjs.map +1 -0
  19. package/{lib/intervalIndex/intervalIndexUtils.js → dist/intervalIndex/intervalIndexUtils.cjs} +1 -1
  20. package/dist/intervalIndex/intervalIndexUtils.cjs.map +1 -0
  21. package/{lib/intervalIndex/overlappingIntervalsIndex.js → dist/intervalIndex/overlappingIntervalsIndex.cjs} +4 -4
  22. package/dist/intervalIndex/overlappingIntervalsIndex.cjs.map +1 -0
  23. package/{lib/intervalIndex/overlappingSequenceIntervalsIndex.js → dist/intervalIndex/overlappingSequenceIntervalsIndex.cjs} +3 -3
  24. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.cjs.map +1 -0
  25. package/dist/intervalIndex/{sequenceIntervalIndexes.js → sequenceIntervalIndexes.cjs} +1 -1
  26. package/dist/intervalIndex/sequenceIntervalIndexes.cjs.map +1 -0
  27. package/{lib/intervalIndex/startpointInRangeIndex.js → dist/intervalIndex/startpointInRangeIndex.cjs} +3 -3
  28. package/dist/intervalIndex/startpointInRangeIndex.cjs.map +1 -0
  29. package/{lib/intervalTree.js → dist/intervalTree.cjs} +1 -1
  30. package/dist/intervalTree.cjs.map +1 -0
  31. package/{lib/intervals/index.js → dist/intervals/index.cjs} +4 -4
  32. package/dist/intervals/index.cjs.map +1 -0
  33. package/dist/intervals/{interval.js → interval.cjs} +1 -1
  34. package/dist/intervals/interval.cjs.map +1 -0
  35. package/{lib/intervals/intervalUtils.js → dist/intervals/intervalUtils.cjs} +1 -1
  36. package/dist/intervals/intervalUtils.cjs.map +1 -0
  37. package/{lib/intervals/sequenceInterval.js → dist/intervals/sequenceInterval.cjs} +3 -3
  38. package/dist/intervals/sequenceInterval.cjs.map +1 -0
  39. package/dist/{localValues.js → localValues.cjs} +1 -1
  40. package/dist/localValues.cjs.map +1 -0
  41. package/{lib/packageVersion.js → dist/packageVersion.cjs} +2 -2
  42. package/dist/packageVersion.cjs.map +1 -0
  43. package/dist/packageVersion.d.ts +1 -1
  44. package/{lib/revertibles.js → dist/revertibles.cjs} +3 -3
  45. package/dist/revertibles.cjs.map +1 -0
  46. package/dist/{sequence.js → sequence.cjs} +4 -4
  47. package/dist/sequence.cjs.map +1 -0
  48. package/dist/{sequenceDeltaEvent.js → sequenceDeltaEvent.cjs} +1 -1
  49. package/dist/sequenceDeltaEvent.cjs.map +1 -0
  50. package/dist/{sequenceFactory.js → sequenceFactory.cjs} +3 -3
  51. package/dist/sequenceFactory.cjs.map +1 -0
  52. package/{lib/sharedIntervalCollection.js → dist/sharedIntervalCollection.cjs} +4 -4
  53. package/dist/sharedIntervalCollection.cjs.map +1 -0
  54. package/{lib/sharedSequence.js → dist/sharedSequence.cjs} +2 -2
  55. package/dist/sharedSequence.cjs.map +1 -0
  56. package/dist/{sharedString.js → sharedString.cjs} +3 -3
  57. package/dist/sharedString.cjs.map +1 -0
  58. package/lib/{defaultMap.d.ts → defaultMap.d.mts} +1 -1
  59. package/lib/defaultMap.d.mts.map +1 -0
  60. package/lib/{defaultMap.js → defaultMap.mjs} +19 -23
  61. package/lib/defaultMap.mjs.map +1 -0
  62. package/lib/{defaultMapInterfaces.d.ts → defaultMapInterfaces.d.mts} +1 -1
  63. package/lib/defaultMapInterfaces.d.mts.map +1 -0
  64. package/lib/defaultMapInterfaces.mjs +6 -0
  65. package/lib/{defaultMapInterfaces.js.map → defaultMapInterfaces.mjs.map} +1 -1
  66. package/lib/{index.d.ts → index.d.mts} +11 -23
  67. package/lib/index.d.mts.map +1 -0
  68. package/lib/index.mjs +16 -0
  69. package/lib/index.mjs.map +1 -0
  70. package/lib/{intervalCollection.d.ts → intervalCollection.d.mts} +3 -3
  71. package/lib/intervalCollection.d.mts.map +1 -0
  72. package/lib/{intervalCollection.js → intervalCollection.mjs} +118 -133
  73. package/lib/intervalCollection.mjs.map +1 -0
  74. package/lib/intervalIndex/{endpointInRangeIndex.d.ts → endpointInRangeIndex.d.mts} +3 -3
  75. package/lib/intervalIndex/endpointInRangeIndex.d.mts.map +1 -0
  76. package/lib/intervalIndex/{endpointInRangeIndex.js → endpointInRangeIndex.mjs} +13 -18
  77. package/lib/intervalIndex/endpointInRangeIndex.mjs.map +1 -0
  78. package/lib/intervalIndex/{endpointIndex.d.ts → endpointIndex.d.mts} +3 -3
  79. package/lib/intervalIndex/endpointIndex.d.mts.map +1 -0
  80. package/{dist/intervalIndex/endpointIndex.js → lib/intervalIndex/endpointIndex.mjs} +9 -14
  81. package/lib/intervalIndex/endpointIndex.mjs.map +1 -0
  82. package/lib/intervalIndex/{idIntervalIndex.d.ts → idIntervalIndex.d.mts} +2 -2
  83. package/lib/intervalIndex/idIntervalIndex.d.mts.map +1 -0
  84. package/lib/intervalIndex/{idIntervalIndex.js → idIntervalIndex.mjs} +5 -9
  85. package/lib/intervalIndex/idIntervalIndex.mjs.map +1 -0
  86. package/lib/intervalIndex/{index.d.ts → index.d.mts} +8 -8
  87. package/lib/intervalIndex/index.d.mts.map +1 -0
  88. package/lib/intervalIndex/index.mjs +11 -0
  89. package/{dist/intervalIndex/index.js.map → lib/intervalIndex/index.mjs.map} +1 -1
  90. package/lib/intervalIndex/{intervalIndex.d.ts → intervalIndex.d.mts} +1 -1
  91. package/lib/intervalIndex/intervalIndex.d.mts.map +1 -0
  92. package/lib/intervalIndex/intervalIndex.mjs +6 -0
  93. package/{dist/intervalIndex/intervalIndex.js.map → lib/intervalIndex/intervalIndex.mjs.map} +1 -1
  94. package/{dist/intervalIndex/intervalIndexUtils.js → lib/intervalIndex/intervalIndexUtils.mjs} +5 -9
  95. package/lib/intervalIndex/intervalIndexUtils.mjs.map +1 -0
  96. package/lib/intervalIndex/{overlappingIntervalsIndex.d.ts → overlappingIntervalsIndex.d.mts} +5 -5
  97. package/lib/intervalIndex/overlappingIntervalsIndex.d.mts.map +1 -0
  98. package/{dist/intervalIndex/overlappingIntervalsIndex.js → lib/intervalIndex/overlappingIntervalsIndex.mjs} +11 -16
  99. package/lib/intervalIndex/overlappingIntervalsIndex.mjs.map +1 -0
  100. package/lib/intervalIndex/{overlappingSequenceIntervalsIndex.d.ts → overlappingSequenceIntervalsIndex.d.mts} +2 -2
  101. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.mts.map +1 -0
  102. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.mjs +37 -0
  103. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.mjs.map +1 -0
  104. package/lib/intervalIndex/{sequenceIntervalIndexes.d.ts → sequenceIntervalIndexes.d.mts} +2 -2
  105. package/lib/intervalIndex/sequenceIntervalIndexes.d.mts.map +1 -0
  106. package/lib/intervalIndex/sequenceIntervalIndexes.mjs +6 -0
  107. package/{dist/intervalIndex/sequenceIntervalIndexes.js.map → lib/intervalIndex/sequenceIntervalIndexes.mjs.map} +1 -1
  108. package/lib/intervalIndex/{startpointInRangeIndex.d.ts → startpointInRangeIndex.d.mts} +3 -3
  109. package/lib/intervalIndex/startpointInRangeIndex.d.mts.map +1 -0
  110. package/{dist/intervalIndex/startpointInRangeIndex.js → lib/intervalIndex/startpointInRangeIndex.mjs} +13 -18
  111. package/lib/intervalIndex/startpointInRangeIndex.mjs.map +1 -0
  112. package/lib/{intervalTree.d.ts → intervalTree.d.mts} +1 -1
  113. package/lib/intervalTree.d.mts.map +1 -0
  114. package/{dist/intervalTree.js → lib/intervalTree.mjs} +4 -8
  115. package/lib/intervalTree.mjs.map +1 -0
  116. package/lib/intervals/{index.d.ts → index.d.mts} +3 -3
  117. package/lib/intervals/index.d.mts.map +1 -0
  118. package/lib/intervals/index.mjs +8 -0
  119. package/lib/intervals/index.mjs.map +1 -0
  120. package/lib/intervals/{interval.d.ts → interval.d.mts} +2 -2
  121. package/lib/intervals/{interval.d.ts.map → interval.d.mts.map} +1 -1
  122. package/lib/intervals/{interval.js → interval.mjs} +13 -18
  123. package/lib/intervals/interval.mjs.map +1 -0
  124. package/lib/intervals/{intervalUtils.d.ts → intervalUtils.d.mts} +1 -1
  125. package/lib/intervals/intervalUtils.d.mts.map +1 -0
  126. package/{dist/intervals/intervalUtils.js → lib/intervals/intervalUtils.mjs} +14 -20
  127. package/lib/intervals/intervalUtils.mjs.map +1 -0
  128. package/lib/intervals/{sequenceInterval.d.ts → sequenceInterval.d.mts} +2 -2
  129. package/lib/intervals/sequenceInterval.d.mts.map +1 -0
  130. package/{dist/intervals/sequenceInterval.js → lib/intervals/sequenceInterval.mjs} +56 -64
  131. package/lib/intervals/sequenceInterval.mjs.map +1 -0
  132. package/lib/{localValues.d.ts → localValues.d.mts} +2 -2
  133. package/lib/localValues.d.mts.map +1 -0
  134. package/lib/{localValues.js → localValues.mjs} +5 -10
  135. package/lib/localValues.mjs.map +1 -0
  136. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
  137. package/lib/packageVersion.mjs +9 -0
  138. package/lib/packageVersion.mjs.map +1 -0
  139. package/lib/{revertibles.d.ts → revertibles.d.mts} +3 -3
  140. package/lib/revertibles.d.mts.map +1 -0
  141. package/{dist/revertibles.js → lib/revertibles.mjs} +62 -71
  142. package/lib/revertibles.mjs.map +1 -0
  143. package/lib/{sequence.d.ts → sequence.d.mts} +4 -4
  144. package/lib/sequence.d.mts.map +1 -0
  145. package/lib/{sequence.js → sequence.mjs} +47 -48
  146. package/lib/sequence.mjs.map +1 -0
  147. package/lib/sequenceDeltaEvent.d.mts.map +1 -0
  148. package/lib/{sequenceDeltaEvent.js → sequenceDeltaEvent.mjs} +10 -14
  149. package/lib/sequenceDeltaEvent.mjs.map +1 -0
  150. package/lib/{sequenceFactory.d.ts → sequenceFactory.d.mts} +1 -1
  151. package/lib/sequenceFactory.d.mts.map +1 -0
  152. package/lib/{sequenceFactory.js → sequenceFactory.mjs} +10 -14
  153. package/lib/sequenceFactory.mjs.map +1 -0
  154. package/lib/{sharedIntervalCollection.d.ts → sharedIntervalCollection.d.mts} +2 -2
  155. package/lib/sharedIntervalCollection.d.mts.map +1 -0
  156. package/{dist/sharedIntervalCollection.js → lib/sharedIntervalCollection.mjs} +14 -19
  157. package/lib/sharedIntervalCollection.mjs.map +1 -0
  158. package/lib/{sharedSequence.d.ts → sharedSequence.d.mts} +1 -1
  159. package/lib/sharedSequence.d.mts.map +1 -0
  160. package/{dist/sharedSequence.js → lib/sharedSequence.mjs} +7 -12
  161. package/lib/sharedSequence.mjs.map +1 -0
  162. package/lib/{sharedString.d.ts → sharedString.d.mts} +2 -2
  163. package/lib/sharedString.d.mts.map +1 -0
  164. package/lib/{sharedString.js → sharedString.mjs} +17 -22
  165. package/lib/sharedString.mjs.map +1 -0
  166. package/package.json +38 -22
  167. package/sequence.test-files.tar +0 -0
  168. package/src/packageVersion.ts +1 -1
  169. package/tsc-multi.test.json +10 -0
  170. package/dist/defaultMap.js.map +0 -1
  171. package/dist/defaultMapInterfaces.js +0 -7
  172. package/dist/defaultMapInterfaces.js.map +0 -1
  173. package/dist/index.js +0 -60
  174. package/dist/index.js.map +0 -1
  175. package/dist/intervalCollection.js.map +0 -1
  176. package/dist/intervalIndex/endpointInRangeIndex.js.map +0 -1
  177. package/dist/intervalIndex/endpointIndex.js.map +0 -1
  178. package/dist/intervalIndex/idIntervalIndex.js.map +0 -1
  179. package/dist/intervalIndex/index.js +0 -24
  180. package/dist/intervalIndex/intervalIndexUtils.js.map +0 -1
  181. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +0 -1
  182. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +0 -41
  183. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +0 -1
  184. package/dist/intervalIndex/startpointInRangeIndex.js.map +0 -1
  185. package/dist/intervalTree.js.map +0 -1
  186. package/dist/intervals/index.js +0 -23
  187. package/dist/intervals/index.js.map +0 -1
  188. package/dist/intervals/interval.js.map +0 -1
  189. package/dist/intervals/intervalUtils.js.map +0 -1
  190. package/dist/intervals/sequenceInterval.js.map +0 -1
  191. package/dist/localValues.js.map +0 -1
  192. package/dist/packageVersion.js +0 -12
  193. package/dist/packageVersion.js.map +0 -1
  194. package/dist/revertibles.js.map +0 -1
  195. package/dist/sequence.js.map +0 -1
  196. package/dist/sequenceDeltaEvent.js.map +0 -1
  197. package/dist/sequenceFactory.js.map +0 -1
  198. package/dist/sharedIntervalCollection.js.map +0 -1
  199. package/dist/sharedSequence.js.map +0 -1
  200. package/dist/sharedString.js.map +0 -1
  201. package/lib/defaultMap.d.ts.map +0 -1
  202. package/lib/defaultMap.js.map +0 -1
  203. package/lib/defaultMapInterfaces.d.ts.map +0 -1
  204. package/lib/defaultMapInterfaces.js +0 -7
  205. package/lib/index.d.ts.map +0 -1
  206. package/lib/index.js.map +0 -1
  207. package/lib/intervalCollection.d.ts.map +0 -1
  208. package/lib/intervalCollection.js.map +0 -1
  209. package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +0 -1
  210. package/lib/intervalIndex/endpointInRangeIndex.js.map +0 -1
  211. package/lib/intervalIndex/endpointIndex.d.ts.map +0 -1
  212. package/lib/intervalIndex/endpointIndex.js.map +0 -1
  213. package/lib/intervalIndex/idIntervalIndex.d.ts.map +0 -1
  214. package/lib/intervalIndex/idIntervalIndex.js.map +0 -1
  215. package/lib/intervalIndex/index.d.ts.map +0 -1
  216. package/lib/intervalIndex/index.js.map +0 -1
  217. package/lib/intervalIndex/intervalIndex.d.ts.map +0 -1
  218. package/lib/intervalIndex/intervalIndex.js.map +0 -1
  219. package/lib/intervalIndex/intervalIndexUtils.js.map +0 -1
  220. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +0 -1
  221. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +0 -1
  222. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +0 -1
  223. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +0 -1
  224. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +0 -1
  225. package/lib/intervalIndex/sequenceIntervalIndexes.js +0 -7
  226. package/lib/intervalIndex/sequenceIntervalIndexes.js.map +0 -1
  227. package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +0 -1
  228. package/lib/intervalIndex/startpointInRangeIndex.js.map +0 -1
  229. package/lib/intervalTree.d.ts.map +0 -1
  230. package/lib/intervalTree.js.map +0 -1
  231. package/lib/intervals/index.d.ts.map +0 -1
  232. package/lib/intervals/index.js.map +0 -1
  233. package/lib/intervals/interval.js.map +0 -1
  234. package/lib/intervals/intervalUtils.d.ts.map +0 -1
  235. package/lib/intervals/intervalUtils.js.map +0 -1
  236. package/lib/intervals/sequenceInterval.d.ts.map +0 -1
  237. package/lib/intervals/sequenceInterval.js.map +0 -1
  238. package/lib/localValues.d.ts.map +0 -1
  239. package/lib/localValues.js.map +0 -1
  240. package/lib/packageVersion.js.map +0 -1
  241. package/lib/revertibles.d.ts.map +0 -1
  242. package/lib/revertibles.js.map +0 -1
  243. package/lib/sequence.d.ts.map +0 -1
  244. package/lib/sequence.js.map +0 -1
  245. package/lib/sequenceDeltaEvent.d.ts.map +0 -1
  246. package/lib/sequenceDeltaEvent.js.map +0 -1
  247. package/lib/sequenceFactory.d.ts.map +0 -1
  248. package/lib/sequenceFactory.js.map +0 -1
  249. package/lib/sharedIntervalCollection.d.ts.map +0 -1
  250. package/lib/sharedIntervalCollection.js.map +0 -1
  251. package/lib/sharedSequence.d.ts.map +0 -1
  252. package/lib/sharedSequence.js.map +0 -1
  253. package/lib/sharedString.d.ts.map +0 -1
  254. package/lib/sharedString.js.map +0 -1
  255. package/tsconfig.esnext.json +0 -6
  256. /package/lib/intervalIndex/{intervalIndexUtils.d.ts → intervalIndexUtils.d.mts} +0 -0
  257. /package/lib/intervalIndex/{intervalIndexUtils.d.ts.map → intervalIndexUtils.d.mts.map} +0 -0
  258. /package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +0 -0
  259. /package/lib/{sequence-alpha.d.ts → sequence-alpha.d.mts} +0 -0
  260. /package/lib/{sequence-beta.d.ts → sequence-beta.d.mts} +0 -0
  261. /package/lib/{sequence-public.d.ts → sequence-public.d.mts} +0 -0
  262. /package/lib/{sequence-untrimmed.d.ts → sequence-untrimmed.d.mts} +0 -0
  263. /package/lib/{sequenceDeltaEvent.d.ts → sequenceDeltaEvent.d.mts} +0 -0
@@ -1,15 +1,13 @@
1
- "use strict";
2
1
  /*!
3
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
3
  * Licensed under the MIT License.
5
4
  */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.revertSharedStringRevertibles = exports.discardSharedStringRevertibles = exports.appendSharedStringDeltaToRevertibles = exports.appendIntervalPropertyChangedToRevertibles = exports.appendChangeIntervalToRevertibles = exports.appendDeleteIntervalToRevertibles = exports.appendAddIntervalToRevertibles = void 0;
8
- /* eslint-disable no-bitwise */
9
- const core_utils_1 = require("@fluidframework/core-utils");
10
- const merge_tree_1 = require("@fluidframework/merge-tree");
11
- const intervalCollection_1 = require("./intervalCollection");
12
- const intervals_1 = require("./intervals");
5
+ import { assert, unreachableCase } from "@fluidframework/core-utils";
6
+ import { appendToMergeTreeDeltaRevertibles, discardMergeTreeDeltaRevertible, isMergeTreeDeltaRevertible, MergeTreeDeltaType, ReferenceType, refTypeIncludesFlag, revertMergeTreeDeltaRevertibles,
7
+ // eslint-disable-next-line import/no-deprecated
8
+ SortedSet, getSlideToSegoff, SlidingPreference, } from "@fluidframework/merge-tree";
9
+ import { Side } from "./intervalCollection.mjs";
10
+ import { IntervalOpType, SequenceInterval } from "./intervals/index.mjs";
13
11
  const idMap = new Map();
14
12
  function getUpdatedIdFromInterval(interval) {
15
13
  const maybeId = interval.getIntervalId();
@@ -22,37 +20,36 @@ function getUpdatedId(intervalId) {
22
20
  * Create revertibles for adding an interval
23
21
  * @internal
24
22
  */
25
- function appendAddIntervalToRevertibles(interval, revertibles) {
23
+ export function appendAddIntervalToRevertibles(interval, revertibles) {
26
24
  revertibles.push({
27
- event: intervals_1.IntervalOpType.ADD,
25
+ event: IntervalOpType.ADD,
28
26
  interval,
29
27
  });
30
28
  return revertibles;
31
29
  }
32
- exports.appendAddIntervalToRevertibles = appendAddIntervalToRevertibles;
33
30
  /**
34
31
  * Create revertibles for deleting an interval
35
32
  * @internal
36
33
  */
37
- function appendDeleteIntervalToRevertibles(string, interval, revertibles) {
34
+ export function appendDeleteIntervalToRevertibles(string, interval, revertibles) {
38
35
  const startSeg = interval.start.getSegment();
39
36
  if (!startSeg) {
40
37
  return revertibles;
41
38
  }
42
39
  const startType = startSeg.removedSeq !== undefined
43
- ? merge_tree_1.ReferenceType.SlideOnRemove | merge_tree_1.ReferenceType.RangeBegin
44
- : merge_tree_1.ReferenceType.StayOnRemove | merge_tree_1.ReferenceType.RangeBegin;
40
+ ? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin
41
+ : ReferenceType.StayOnRemove | ReferenceType.RangeBegin;
45
42
  const endSeg = interval.end.getSegment();
46
43
  if (!endSeg) {
47
44
  return revertibles;
48
45
  }
49
46
  const endType = endSeg.removedSeq !== undefined
50
- ? merge_tree_1.ReferenceType.SlideOnRemove | merge_tree_1.ReferenceType.RangeEnd
51
- : merge_tree_1.ReferenceType.StayOnRemove | merge_tree_1.ReferenceType.RangeEnd;
47
+ ? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd
48
+ : ReferenceType.StayOnRemove | ReferenceType.RangeEnd;
52
49
  const startRef = string.createLocalReferencePosition(startSeg, interval.start.getOffset(), startType, undefined, interval.start.slidingPreference);
53
50
  const endRef = string.createLocalReferencePosition(endSeg, interval.end.getOffset(), endType, undefined, interval.end.slidingPreference);
54
51
  const revertible = {
55
- event: intervals_1.IntervalOpType.DELETE,
52
+ event: IntervalOpType.DELETE,
56
53
  interval,
57
54
  start: startRef,
58
55
  end: endRef,
@@ -62,27 +59,26 @@ function appendDeleteIntervalToRevertibles(string, interval, revertibles) {
62
59
  revertibles.push(revertible);
63
60
  return revertibles;
64
61
  }
65
- exports.appendDeleteIntervalToRevertibles = appendDeleteIntervalToRevertibles;
66
62
  /**
67
63
  * Create revertibles for moving endpoints of an interval
68
64
  * @internal
69
65
  */
70
- function appendChangeIntervalToRevertibles(string, newInterval, previousInterval, revertibles) {
66
+ export function appendChangeIntervalToRevertibles(string, newInterval, previousInterval, revertibles) {
71
67
  const startSeg = previousInterval.start.getSegment();
72
68
  // This logic is needed because the ReferenceType StayOnRemove cannot be used
73
69
  // on removed segments. This works for revertibles because the old position of the
74
70
  // interval within the removed segment is handled by the remove range revertible.
75
71
  const startType = startSeg.removedSeq !== undefined
76
- ? merge_tree_1.ReferenceType.SlideOnRemove | merge_tree_1.ReferenceType.RangeBegin
77
- : merge_tree_1.ReferenceType.StayOnRemove | merge_tree_1.ReferenceType.RangeBegin;
72
+ ? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin
73
+ : ReferenceType.StayOnRemove | ReferenceType.RangeBegin;
78
74
  const endSeg = previousInterval.end.getSegment();
79
75
  const endType = endSeg.removedSeq !== undefined
80
- ? merge_tree_1.ReferenceType.SlideOnRemove | merge_tree_1.ReferenceType.RangeEnd
81
- : merge_tree_1.ReferenceType.StayOnRemove | merge_tree_1.ReferenceType.RangeEnd;
76
+ ? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd
77
+ : ReferenceType.StayOnRemove | ReferenceType.RangeEnd;
82
78
  const prevStartRef = string.createLocalReferencePosition(startSeg, previousInterval.start.getOffset(), startType, undefined, previousInterval.start.slidingPreference);
83
79
  const prevEndRef = string.createLocalReferencePosition(endSeg, previousInterval.end.getOffset(), endType, undefined, previousInterval.end.slidingPreference);
84
80
  const revertible = {
85
- event: intervals_1.IntervalOpType.CHANGE,
81
+ event: IntervalOpType.CHANGE,
86
82
  interval: newInterval,
87
83
  start: prevStartRef,
88
84
  end: prevEndRef,
@@ -92,31 +88,29 @@ function appendChangeIntervalToRevertibles(string, newInterval, previousInterval
92
88
  revertibles.push(revertible);
93
89
  return revertibles;
94
90
  }
95
- exports.appendChangeIntervalToRevertibles = appendChangeIntervalToRevertibles;
96
91
  /**
97
92
  * Create revertibles for changing properties of an interval
98
93
  * @internal
99
94
  */
100
- function appendIntervalPropertyChangedToRevertibles(interval, deltas, revertibles) {
95
+ export function appendIntervalPropertyChangedToRevertibles(interval, deltas, revertibles) {
101
96
  revertibles.push({
102
- event: intervals_1.IntervalOpType.PROPERTY_CHANGED,
97
+ event: IntervalOpType.PROPERTY_CHANGED,
103
98
  interval,
104
99
  propertyDeltas: deltas,
105
100
  });
106
101
  return revertibles;
107
102
  }
108
- exports.appendIntervalPropertyChangedToRevertibles = appendIntervalPropertyChangedToRevertibles;
109
103
  function addIfIntervalEndpoint(ref, segmentLengths, startIntervals, endIntervals) {
110
- if ((0, merge_tree_1.refTypeIncludesFlag)(ref.refType, merge_tree_1.ReferenceType.RangeBegin)) {
104
+ if (refTypeIncludesFlag(ref.refType, ReferenceType.RangeBegin)) {
111
105
  const interval = ref.properties?.interval;
112
- if (interval && interval instanceof intervals_1.SequenceInterval) {
106
+ if (interval && interval instanceof SequenceInterval) {
113
107
  startIntervals.push({ offset: segmentLengths + interval.start.getOffset(), interval });
114
108
  return true;
115
109
  }
116
110
  }
117
- else if ((0, merge_tree_1.refTypeIncludesFlag)(ref.refType, merge_tree_1.ReferenceType.RangeEnd)) {
111
+ else if (refTypeIncludesFlag(ref.refType, ReferenceType.RangeEnd)) {
118
112
  const interval = ref.properties?.interval;
119
- if (interval && interval instanceof intervals_1.SequenceInterval) {
113
+ if (interval && interval instanceof SequenceInterval) {
120
114
  endIntervals.push({ offset: segmentLengths + interval.end.getOffset(), interval });
121
115
  return true;
122
116
  }
@@ -129,7 +123,7 @@ function addIfRevertibleRef(ref, segmentLengths, revertibleRefs) {
129
123
  revertibleRefs.push({
130
124
  revertible,
131
125
  offset: segmentLengths + ref.getOffset(),
132
- isStart: (0, merge_tree_1.refTypeIncludesFlag)(ref.refType, merge_tree_1.ReferenceType.RangeBegin),
126
+ isStart: refTypeIncludesFlag(ref.refType, ReferenceType.RangeBegin),
133
127
  });
134
128
  }
135
129
  }
@@ -138,11 +132,11 @@ function addIfRevertibleRef(ref, segmentLengths, revertibleRefs) {
138
132
  * (e.g. reverting remove of a range that contains an interval will move the interval back)
139
133
  * @internal
140
134
  */
141
- function appendSharedStringDeltaToRevertibles(string, delta, revertibles) {
135
+ export function appendSharedStringDeltaToRevertibles(string, delta, revertibles) {
142
136
  if (delta.ranges.length === 0) {
143
137
  return;
144
138
  }
145
- if (delta.deltaOperation === merge_tree_1.MergeTreeDeltaType.REMOVE) {
139
+ if (delta.deltaOperation === MergeTreeDeltaType.REMOVE) {
146
140
  const startIntervals = [];
147
141
  const endIntervals = [];
148
142
  const revertibleRefs = [];
@@ -160,10 +154,10 @@ function appendSharedStringDeltaToRevertibles(string, delta, revertibles) {
160
154
  }
161
155
  if (startIntervals.length > 0 || endIntervals.length > 0 || revertibleRefs.length > 0) {
162
156
  const removeRevertibles = [];
163
- (0, merge_tree_1.appendToMergeTreeDeltaRevertibles)(delta.deltaArgs, removeRevertibles);
164
- (0, core_utils_1.assert)(removeRevertibles.length === 1, 0x6c4 /* Remove revertible should be a single delta */);
157
+ appendToMergeTreeDeltaRevertibles(delta.deltaArgs, removeRevertibles);
158
+ assert(removeRevertibles.length === 1, 0x6c4 /* Remove revertible should be a single delta */);
165
159
  const revertible = {
166
- event: intervals_1.IntervalOpType.POSITION_REMOVE,
160
+ event: IntervalOpType.POSITION_REMOVE,
167
161
  intervals: [],
168
162
  revertibleRefs,
169
163
  mergeTreeRevertible: removeRevertibles[0],
@@ -201,31 +195,29 @@ function appendSharedStringDeltaToRevertibles(string, delta, revertibles) {
201
195
  // Handle any merge tree delta that is not REMOVE or is REMOVE with no interval endpoints
202
196
  const mergeTreeRevertibles = [];
203
197
  // Allow merging MergeTreeDeltaRevertible with previous
204
- if (revertibles.length > 0 && (0, merge_tree_1.isMergeTreeDeltaRevertible)(revertibles[revertibles.length - 1])) {
198
+ if (revertibles.length > 0 && isMergeTreeDeltaRevertible(revertibles[revertibles.length - 1])) {
205
199
  mergeTreeRevertibles.push(revertibles.pop());
206
200
  }
207
- (0, merge_tree_1.appendToMergeTreeDeltaRevertibles)(delta.deltaArgs, mergeTreeRevertibles);
201
+ appendToMergeTreeDeltaRevertibles(delta.deltaArgs, mergeTreeRevertibles);
208
202
  revertibles.push(...mergeTreeRevertibles);
209
203
  }
210
- exports.appendSharedStringDeltaToRevertibles = appendSharedStringDeltaToRevertibles;
211
204
  /**
212
205
  * Clean up resources held by revertibles that are no longer needed.
213
206
  * @internal
214
207
  */
215
- function discardSharedStringRevertibles(sharedString, revertibles) {
208
+ export function discardSharedStringRevertibles(sharedString, revertibles) {
216
209
  revertibles.forEach((r) => {
217
- if ((0, merge_tree_1.isMergeTreeDeltaRevertible)(r)) {
218
- (0, merge_tree_1.discardMergeTreeDeltaRevertible)([r]);
210
+ if (isMergeTreeDeltaRevertible(r)) {
211
+ discardMergeTreeDeltaRevertible([r]);
219
212
  }
220
- else if (r.event === intervals_1.IntervalOpType.CHANGE || r.event === intervals_1.IntervalOpType.DELETE) {
213
+ else if (r.event === IntervalOpType.CHANGE || r.event === IntervalOpType.DELETE) {
221
214
  sharedString.removeLocalReferencePosition(r.start);
222
215
  sharedString.removeLocalReferencePosition(r.end);
223
216
  }
224
217
  });
225
218
  }
226
- exports.discardSharedStringRevertibles = discardSharedStringRevertibles;
227
219
  function getSlidePosition(string, lref, pos) {
228
- const slide = (0, merge_tree_1.getSlideToSegoff)({ segment: lref.getSegment(), offset: undefined }, lref.slidingPreference);
220
+ const slide = getSlideToSegoff({ segment: lref.getSegment(), offset: undefined }, lref.slidingPreference);
229
221
  return slide?.segment !== undefined &&
230
222
  slide.offset !== undefined &&
231
223
  string.getPosition(slide.segment) !== -1 &&
@@ -240,8 +232,8 @@ function isValidRange(start, startSlide, end, endSlide, string) {
240
232
  end < string.getLength() &&
241
233
  (start < end ||
242
234
  (start === end &&
243
- (startSlide === merge_tree_1.SlidingPreference.FORWARD ||
244
- endSlide !== merge_tree_1.SlidingPreference.FORWARD))));
235
+ (startSlide === SlidingPreference.FORWARD ||
236
+ endSlide !== SlidingPreference.FORWARD))));
245
237
  }
246
238
  function revertLocalAdd(string, revertible) {
247
239
  const id = getUpdatedIdFromInterval(revertible.interval);
@@ -249,17 +241,17 @@ function revertLocalAdd(string, revertible) {
249
241
  string.getIntervalCollection(label).removeIntervalById(id);
250
242
  }
251
243
  function createSequencePlace(pos, newSlidingPreference, oldSlidingPreference = undefined) {
252
- return newSlidingPreference === merge_tree_1.SlidingPreference.BACKWARD ||
253
- (newSlidingPreference === undefined && oldSlidingPreference === merge_tree_1.SlidingPreference.BACKWARD)
244
+ return newSlidingPreference === SlidingPreference.BACKWARD ||
245
+ (newSlidingPreference === undefined && oldSlidingPreference === SlidingPreference.BACKWARD)
254
246
  ? {
255
247
  pos,
256
- side: intervalCollection_1.Side.After,
248
+ side: Side.After,
257
249
  }
258
- : newSlidingPreference === merge_tree_1.SlidingPreference.FORWARD &&
259
- oldSlidingPreference === merge_tree_1.SlidingPreference.BACKWARD
250
+ : newSlidingPreference === SlidingPreference.FORWARD &&
251
+ oldSlidingPreference === SlidingPreference.BACKWARD
260
252
  ? {
261
253
  pos,
262
- side: intervalCollection_1.Side.Before,
254
+ side: Side.Before,
263
255
  }
264
256
  : pos; // Avoid setting side if possible since stickiness may not be enabled
265
257
  }
@@ -334,7 +326,7 @@ function newEndpointPosition(offset, restoredRanges, sharedString) {
334
326
  return pos === undefined ? undefined : sharedString.getPosition(pos.segment) + pos.offset;
335
327
  }
336
328
  // eslint-disable-next-line import/no-deprecated
337
- class SortedRangeSet extends merge_tree_1.SortedSet {
329
+ class SortedRangeSet extends SortedSet {
338
330
  getKey(item) {
339
331
  return item.ranges[0].segment.ordinal;
340
332
  }
@@ -351,7 +343,7 @@ function revertLocalSequenceRemove(sharedString, revertible) {
351
343
  }
352
344
  };
353
345
  sharedString.on("sequenceDelta", saveSegments);
354
- (0, merge_tree_1.revertMergeTreeDeltaRevertibles)(sharedString, [revertible.mergeTreeRevertible]);
346
+ revertMergeTreeDeltaRevertibles(sharedString, [revertible.mergeTreeRevertible]);
355
347
  sharedString.off("sequenceDelta", saveSegments);
356
348
  revertible.intervals.forEach((intervalInfo) => {
357
349
  const intervalCollection = sharedString.getIntervalCollection(intervalInfo.label);
@@ -369,18 +361,18 @@ function revertLocalSequenceRemove(sharedString, revertible) {
369
361
  });
370
362
  // fix up the local references used by delete and change revertibles
371
363
  revertible.revertibleRefs.forEach((revertibleRef) => {
372
- (0, core_utils_1.assert)(revertibleRef.revertible.event === intervals_1.IntervalOpType.CHANGE ||
373
- revertibleRef.revertible.event === intervals_1.IntervalOpType.DELETE, 0x6c5 /* revertible is not delete or change */);
364
+ assert(revertibleRef.revertible.event === IntervalOpType.CHANGE ||
365
+ revertibleRef.revertible.event === IntervalOpType.DELETE, 0x6c5 /* revertible is not delete or change */);
374
366
  const pos = newPosition(revertibleRef.offset, restoredRanges);
375
367
  if (pos !== undefined) {
376
368
  if (revertibleRef.isStart) {
377
369
  sharedString.removeLocalReferencePosition(revertibleRef.revertible.start);
378
- const newRef = sharedString.createLocalReferencePosition(pos.segment, pos.offset, merge_tree_1.ReferenceType.StayOnRemove | merge_tree_1.ReferenceType.RangeBegin, { revertible: revertibleRef.revertible }, revertibleRef.revertible.start.slidingPreference);
370
+ const newRef = sharedString.createLocalReferencePosition(pos.segment, pos.offset, ReferenceType.StayOnRemove | ReferenceType.RangeBegin, { revertible: revertibleRef.revertible }, revertibleRef.revertible.start.slidingPreference);
379
371
  revertibleRef.revertible.start = newRef;
380
372
  }
381
373
  else {
382
374
  sharedString.removeLocalReferencePosition(revertibleRef.revertible.end);
383
- const newRef = sharedString.createLocalReferencePosition(pos.segment, pos.offset, merge_tree_1.ReferenceType.StayOnRemove | merge_tree_1.ReferenceType.RangeEnd, { revertible: revertibleRef.revertible }, revertibleRef.revertible.end.slidingPreference);
375
+ const newRef = sharedString.createLocalReferencePosition(pos.segment, pos.offset, ReferenceType.StayOnRemove | ReferenceType.RangeEnd, { revertible: revertibleRef.revertible }, revertibleRef.revertible.end.slidingPreference);
384
376
  revertibleRef.revertible.end = newRef;
385
377
  }
386
378
  }
@@ -390,36 +382,35 @@ function revertLocalSequenceRemove(sharedString, revertible) {
390
382
  * Invoke revertibles to reverse prior edits
391
383
  * @internal
392
384
  */
393
- function revertSharedStringRevertibles(sharedString, revertibles) {
385
+ export function revertSharedStringRevertibles(sharedString, revertibles) {
394
386
  while (revertibles.length > 0) {
395
387
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
396
388
  const r = revertibles.pop();
397
389
  if ("event" in r) {
398
390
  const event = r.event;
399
391
  switch (event) {
400
- case intervals_1.IntervalOpType.ADD:
392
+ case IntervalOpType.ADD:
401
393
  revertLocalAdd(sharedString, r);
402
394
  break;
403
- case intervals_1.IntervalOpType.DELETE:
395
+ case IntervalOpType.DELETE:
404
396
  revertLocalDelete(sharedString, r);
405
397
  break;
406
- case intervals_1.IntervalOpType.CHANGE:
398
+ case IntervalOpType.CHANGE:
407
399
  revertLocalChange(sharedString, r);
408
400
  break;
409
- case intervals_1.IntervalOpType.PROPERTY_CHANGED:
401
+ case IntervalOpType.PROPERTY_CHANGED:
410
402
  revertLocalPropertyChanged(sharedString, r);
411
403
  break;
412
- case intervals_1.IntervalOpType.POSITION_REMOVE:
404
+ case IntervalOpType.POSITION_REMOVE:
413
405
  revertLocalSequenceRemove(sharedString, r);
414
406
  break;
415
407
  default:
416
- (0, core_utils_1.unreachableCase)(event);
408
+ unreachableCase(event);
417
409
  }
418
410
  }
419
411
  else {
420
- (0, merge_tree_1.revertMergeTreeDeltaRevertibles)(sharedString, [r]);
412
+ revertMergeTreeDeltaRevertibles(sharedString, [r]);
421
413
  }
422
414
  }
423
415
  }
424
- exports.revertSharedStringRevertibles = revertSharedStringRevertibles;
425
- //# sourceMappingURL=revertibles.js.map
416
+ //# sourceMappingURL=revertibles.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revertibles.mjs","sourceRoot":"","sources":["../src/revertibles.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport {\n\tappendToMergeTreeDeltaRevertibles,\n\tdiscardMergeTreeDeltaRevertible,\n\tisMergeTreeDeltaRevertible,\n\tLocalReferencePosition,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaRevertible,\n\tMergeTreeDeltaType,\n\tPropertySet,\n\tReferenceType,\n\trefTypeIncludesFlag,\n\trevertMergeTreeDeltaRevertibles,\n\t// eslint-disable-next-line import/no-deprecated\n\tSortedSet,\n\tgetSlideToSegoff,\n\tSlidingPreference,\n} from \"@fluidframework/merge-tree\";\nimport { InteriorSequencePlace, Side } from \"./intervalCollection\";\nimport { IntervalOpType, SequenceInterval } from \"./intervals\";\nimport { SharedString, SharedStringSegment } from \"./sharedString\";\nimport { ISequenceDeltaRange, SequenceDeltaEvent } from \"./sequenceDeltaEvent\";\n\n/**\n * Data for undoing edits on SharedStrings and Intervals.\n * @internal\n */\nexport type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;\n\nconst idMap = new Map<string, string>();\n\n/**\n * Data for undoing edits affecting Intervals.\n * @internal\n */\nexport type IntervalRevertible =\n\t| {\n\t\t\tevent: typeof IntervalOpType.CHANGE;\n\t\t\tinterval: SequenceInterval;\n\t\t\tstart: LocalReferencePosition;\n\t\t\tend: LocalReferencePosition;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.ADD;\n\t\t\tinterval: SequenceInterval;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.DELETE;\n\t\t\tinterval: SequenceInterval;\n\t\t\tstart: LocalReferencePosition;\n\t\t\tend: LocalReferencePosition;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.PROPERTY_CHANGED;\n\t\t\tinterval: SequenceInterval;\n\t\t\tpropertyDeltas: PropertySet;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.POSITION_REMOVE;\n\t\t\tintervals: {\n\t\t\t\tintervalId: string;\n\t\t\t\tlabel: string;\n\t\t\t\tstartOffset?: number; // interval start index within a removed range\n\t\t\t\tendOffset?: number; // interval end index within a removed range\n\t\t\t}[];\n\t\t\t// local refs used by IntervalOpType.CHANGE and DELETE revertibles\n\t\t\trevertibleRefs: {\n\t\t\t\trevertible: IntervalRevertible;\n\t\t\t\toffset: number;\n\t\t\t\tisStart: boolean;\n\t\t\t}[];\n\t\t\tmergeTreeRevertible: MergeTreeDeltaRevertible;\n\t };\n\ntype TypedRevertible<T extends IntervalRevertible[\"event\"]> = IntervalRevertible & { event: T };\n\nfunction getUpdatedIdFromInterval(interval: SequenceInterval): string {\n\tconst maybeId = interval.getIntervalId();\n\treturn getUpdatedId(maybeId);\n}\n\nfunction getUpdatedId(intervalId: string): string {\n\treturn idMap.get(intervalId) ?? intervalId;\n}\n\n/**\n * Create revertibles for adding an interval\n * @internal\n */\nexport function appendAddIntervalToRevertibles(\n\tinterval: SequenceInterval,\n\trevertibles: SharedStringRevertible[],\n) {\n\trevertibles.push({\n\t\tevent: IntervalOpType.ADD,\n\t\tinterval,\n\t});\n\n\treturn revertibles;\n}\n\n/**\n * Create revertibles for deleting an interval\n * @internal\n */\nexport function appendDeleteIntervalToRevertibles(\n\tstring: SharedString,\n\tinterval: SequenceInterval,\n\trevertibles: SharedStringRevertible[],\n): SharedStringRevertible[] {\n\tconst startSeg = interval.start.getSegment() as SharedStringSegment | undefined;\n\tif (!startSeg) {\n\t\treturn revertibles;\n\t}\n\tconst startType =\n\t\tstartSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeBegin;\n\tconst endSeg = interval.end.getSegment() as SharedStringSegment | undefined;\n\tif (!endSeg) {\n\t\treturn revertibles;\n\t}\n\tconst endType =\n\t\tendSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeEnd;\n\tconst startRef = string.createLocalReferencePosition(\n\t\tstartSeg,\n\t\tinterval.start.getOffset(),\n\t\tstartType,\n\t\tundefined,\n\t\tinterval.start.slidingPreference,\n\t);\n\tconst endRef = string.createLocalReferencePosition(\n\t\tendSeg,\n\t\tinterval.end.getOffset(),\n\t\tendType,\n\t\tundefined,\n\t\tinterval.end.slidingPreference,\n\t);\n\tconst revertible = {\n\t\tevent: IntervalOpType.DELETE,\n\t\tinterval,\n\t\tstart: startRef,\n\t\tend: endRef,\n\t};\n\trevertible.start.addProperties({ revertible });\n\trevertible.end.addProperties({ revertible });\n\trevertibles.push(revertible);\n\n\treturn revertibles;\n}\n\n/**\n * Create revertibles for moving endpoints of an interval\n * @internal\n */\nexport function appendChangeIntervalToRevertibles(\n\tstring: SharedString,\n\tnewInterval: SequenceInterval,\n\tpreviousInterval: SequenceInterval,\n\trevertibles: SharedStringRevertible[],\n) {\n\tconst startSeg = previousInterval.start.getSegment() as SharedStringSegment;\n\t// This logic is needed because the ReferenceType StayOnRemove cannot be used\n\t// on removed segments. This works for revertibles because the old position of the\n\t// interval within the removed segment is handled by the remove range revertible.\n\tconst startType =\n\t\tstartSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeBegin;\n\tconst endSeg = previousInterval.end.getSegment() as SharedStringSegment;\n\tconst endType =\n\t\tendSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeEnd;\n\tconst prevStartRef = string.createLocalReferencePosition(\n\t\tstartSeg,\n\t\tpreviousInterval.start.getOffset(),\n\t\tstartType,\n\t\tundefined,\n\t\tpreviousInterval.start.slidingPreference,\n\t);\n\tconst prevEndRef = string.createLocalReferencePosition(\n\t\tendSeg,\n\t\tpreviousInterval.end.getOffset(),\n\t\tendType,\n\t\tundefined,\n\t\tpreviousInterval.end.slidingPreference,\n\t);\n\tconst revertible = {\n\t\tevent: IntervalOpType.CHANGE,\n\t\tinterval: newInterval,\n\t\tstart: prevStartRef,\n\t\tend: prevEndRef,\n\t};\n\trevertible.start.addProperties({ revertible });\n\trevertible.end.addProperties({ revertible });\n\trevertibles.push(revertible);\n\n\treturn revertibles;\n}\n\n/**\n * Create revertibles for changing properties of an interval\n * @internal\n */\nexport function appendIntervalPropertyChangedToRevertibles(\n\tinterval: SequenceInterval,\n\tdeltas: PropertySet,\n\trevertibles: SharedStringRevertible[],\n) {\n\trevertibles.push({\n\t\tevent: IntervalOpType.PROPERTY_CHANGED,\n\t\tinterval,\n\t\tpropertyDeltas: deltas,\n\t});\n\n\treturn revertibles;\n}\n\nfunction addIfIntervalEndpoint(\n\tref: LocalReferencePosition,\n\tsegmentLengths: number,\n\tstartIntervals: { offset: number; interval: SequenceInterval }[],\n\tendIntervals: { offset: number; interval: SequenceInterval }[],\n) {\n\tif (refTypeIncludesFlag(ref.refType, ReferenceType.RangeBegin)) {\n\t\tconst interval = ref.properties?.interval;\n\t\tif (interval && interval instanceof SequenceInterval) {\n\t\t\tstartIntervals.push({ offset: segmentLengths + interval.start.getOffset(), interval });\n\t\t\treturn true;\n\t\t}\n\t} else if (refTypeIncludesFlag(ref.refType, ReferenceType.RangeEnd)) {\n\t\tconst interval = ref.properties?.interval;\n\t\tif (interval && interval instanceof SequenceInterval) {\n\t\t\tendIntervals.push({ offset: segmentLengths + interval.end.getOffset(), interval });\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction addIfRevertibleRef(\n\tref: LocalReferencePosition,\n\tsegmentLengths: number,\n\trevertibleRefs: {\n\t\trevertible: IntervalRevertible;\n\t\toffset: number;\n\t\tisStart: boolean;\n\t}[],\n) {\n\tconst revertible = ref.properties?.revertible;\n\tif (revertible) {\n\t\trevertibleRefs.push({\n\t\t\trevertible,\n\t\t\toffset: segmentLengths + ref.getOffset(),\n\t\t\tisStart: refTypeIncludesFlag(ref.refType, ReferenceType.RangeBegin),\n\t\t});\n\t}\n}\n\n/**\n * Create revertibles for SharedStringDeltas, handling indirectly modified intervals\n * (e.g. reverting remove of a range that contains an interval will move the interval back)\n * @internal\n */\nexport function appendSharedStringDeltaToRevertibles(\n\tstring: SharedString,\n\tdelta: SequenceDeltaEvent,\n\trevertibles: SharedStringRevertible[],\n) {\n\tif (delta.ranges.length === 0) {\n\t\treturn;\n\t}\n\tif (delta.deltaOperation === MergeTreeDeltaType.REMOVE) {\n\t\tconst startIntervals: { offset: number; interval: SequenceInterval }[] = [];\n\t\tconst endIntervals: { offset: number; interval: SequenceInterval }[] = [];\n\t\tconst revertibleRefs: {\n\t\t\trevertible: IntervalRevertible;\n\t\t\toffset: number;\n\t\t\tisStart: boolean;\n\t\t}[] = [];\n\t\tlet segmentLengths = 0;\n\n\t\t// find interval endpoints in each segment\n\t\tfor (const deltaRange of delta.ranges) {\n\t\t\tconst refs = deltaRange.segment.localRefs;\n\t\t\tif (refs !== undefined && deltaRange.position !== -1) {\n\t\t\t\tfor (const ref of refs) {\n\t\t\t\t\taddIfIntervalEndpoint(ref, segmentLengths, startIntervals, endIntervals);\n\t\t\t\t\taddIfRevertibleRef(ref, segmentLengths, revertibleRefs);\n\t\t\t\t}\n\t\t\t}\n\t\t\tsegmentLengths += deltaRange.segment.cachedLength;\n\t\t}\n\n\t\tif (startIntervals.length > 0 || endIntervals.length > 0 || revertibleRefs.length > 0) {\n\t\t\tconst removeRevertibles: MergeTreeDeltaRevertible[] = [];\n\t\t\tappendToMergeTreeDeltaRevertibles(delta.deltaArgs, removeRevertibles);\n\t\t\tassert(\n\t\t\t\tremoveRevertibles.length === 1,\n\t\t\t\t0x6c4 /* Remove revertible should be a single delta */,\n\t\t\t);\n\n\t\t\tconst revertible: TypedRevertible<typeof IntervalOpType.POSITION_REMOVE> = {\n\t\t\t\tevent: IntervalOpType.POSITION_REMOVE,\n\t\t\t\tintervals: [],\n\t\t\t\trevertibleRefs,\n\t\t\t\tmergeTreeRevertible: removeRevertibles[0],\n\t\t\t};\n\n\t\t\t// add an interval for each startInterval, accounting for any corresponding endIntervals\n\t\t\tstartIntervals.forEach(({ interval, offset }) => {\n\t\t\t\t// find any corresponding end for this interval\n\t\t\t\tconst endIntervalIndex = endIntervals.findIndex((end) => {\n\t\t\t\t\treturn end.interval === interval;\n\t\t\t\t});\n\t\t\t\tlet endOffset: number | undefined;\n\t\t\t\tif (endIntervalIndex !== -1) {\n\t\t\t\t\tendOffset = endIntervals[endIntervalIndex].offset;\n\t\t\t\t\tendIntervals.splice(endIntervalIndex, 1);\n\t\t\t\t}\n\n\t\t\t\trevertible.intervals.push({\n\t\t\t\t\tintervalId: interval.getIntervalId(),\n\t\t\t\t\tlabel: interval.properties.referenceRangeLabels[0],\n\t\t\t\t\tstartOffset: offset,\n\t\t\t\t\tendOffset,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// add any remaining endIntervals that aren't matched with a startInterval\n\t\t\tendIntervals.forEach(({ interval, offset }) => {\n\t\t\t\trevertible.intervals.push({\n\t\t\t\t\tintervalId: interval.getIntervalId(),\n\t\t\t\t\tlabel: interval.properties.referenceRangeLabels[0],\n\t\t\t\t\tendOffset: offset,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\trevertibles.push(revertible);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Handle any merge tree delta that is not REMOVE or is REMOVE with no interval endpoints\n\tconst mergeTreeRevertibles: MergeTreeDeltaRevertible[] = [];\n\t// Allow merging MergeTreeDeltaRevertible with previous\n\tif (revertibles.length > 0 && isMergeTreeDeltaRevertible(revertibles[revertibles.length - 1])) {\n\t\tmergeTreeRevertibles.push(revertibles.pop() as MergeTreeDeltaRevertible);\n\t}\n\tappendToMergeTreeDeltaRevertibles(delta.deltaArgs, mergeTreeRevertibles);\n\trevertibles.push(...mergeTreeRevertibles);\n}\n\n/**\n * Clean up resources held by revertibles that are no longer needed.\n * @internal\n */\nexport function discardSharedStringRevertibles(\n\tsharedString: SharedString,\n\trevertibles: SharedStringRevertible[],\n) {\n\trevertibles.forEach((r) => {\n\t\tif (isMergeTreeDeltaRevertible(r)) {\n\t\t\tdiscardMergeTreeDeltaRevertible([r]);\n\t\t} else if (r.event === IntervalOpType.CHANGE || r.event === IntervalOpType.DELETE) {\n\t\t\tsharedString.removeLocalReferencePosition(r.start);\n\t\t\tsharedString.removeLocalReferencePosition(r.end);\n\t\t}\n\t});\n}\n\nfunction getSlidePosition(string: SharedString, lref: LocalReferencePosition, pos: number): number {\n\tconst slide = getSlideToSegoff(\n\t\t{ segment: lref.getSegment(), offset: undefined },\n\t\tlref.slidingPreference,\n\t);\n\treturn slide?.segment !== undefined &&\n\t\tslide.offset !== undefined &&\n\t\tstring.getPosition(slide.segment) !== -1 &&\n\t\t(pos < 0 || pos >= string.getLength())\n\t\t? string.getPosition(slide.segment) + slide.offset\n\t\t: pos;\n}\n\nfunction isValidRange(\n\tstart: number,\n\tstartSlide: SlidingPreference | undefined,\n\tend: number,\n\tendSlide: SlidingPreference | undefined,\n\tstring: SharedString,\n) {\n\treturn (\n\t\tstart >= 0 &&\n\t\tstart < string.getLength() &&\n\t\tend >= 0 &&\n\t\tend < string.getLength() &&\n\t\t(start < end ||\n\t\t\t(start === end &&\n\t\t\t\t(startSlide === SlidingPreference.FORWARD ||\n\t\t\t\t\tendSlide !== SlidingPreference.FORWARD)))\n\t);\n}\n\nfunction revertLocalAdd(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.ADD>,\n) {\n\tconst id = getUpdatedIdFromInterval(revertible.interval);\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tstring.getIntervalCollection(label).removeIntervalById(id);\n}\n\nfunction createSequencePlace(\n\tpos: number,\n\tnewSlidingPreference: SlidingPreference | undefined,\n\toldSlidingPreference: SlidingPreference | undefined = undefined,\n): number | InteriorSequencePlace {\n\treturn newSlidingPreference === SlidingPreference.BACKWARD ||\n\t\t(newSlidingPreference === undefined && oldSlidingPreference === SlidingPreference.BACKWARD)\n\t\t? {\n\t\t\t\tpos,\n\t\t\t\tside: Side.After,\n\t\t }\n\t\t: newSlidingPreference === SlidingPreference.FORWARD &&\n\t\t oldSlidingPreference === SlidingPreference.BACKWARD\n\t\t? {\n\t\t\t\tpos,\n\t\t\t\tside: Side.Before,\n\t\t }\n\t\t: pos; // Avoid setting side if possible since stickiness may not be enabled\n}\n\nfunction revertLocalDelete(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.DELETE>,\n) {\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tconst collection = string.getIntervalCollection(label);\n\tconst start = string.localReferencePositionToPosition(revertible.start);\n\tconst startSlidePos = getSlidePosition(string, revertible.start, start);\n\tconst end = string.localReferencePositionToPosition(revertible.end);\n\tconst endSlidePos = getSlidePosition(string, revertible.end, end);\n\t// reusing the id causes eventual consistency bugs, so it is removed here and recreated in add\n\tconst { intervalId, ...props } = revertible.interval.properties;\n\tif (\n\t\tisValidRange(\n\t\t\tstartSlidePos,\n\t\t\trevertible.start.slidingPreference,\n\t\t\tendSlidePos,\n\t\t\trevertible.end.slidingPreference,\n\t\t\tstring,\n\t\t)\n\t) {\n\t\tconst int = collection.add({\n\t\t\tstart: createSequencePlace(startSlidePos, revertible.start.slidingPreference),\n\t\t\tend: createSequencePlace(endSlidePos, revertible.end.slidingPreference),\n\t\t\tprops,\n\t\t});\n\n\t\tidMap.forEach((newId, oldId) => {\n\t\t\tif (intervalId === newId) {\n\t\t\t\tidMap.set(oldId, getUpdatedIdFromInterval(int));\n\t\t\t}\n\t\t});\n\t\tidMap.set(intervalId, int.getIntervalId());\n\t}\n\n\tstring.removeLocalReferencePosition(revertible.start);\n\tstring.removeLocalReferencePosition(revertible.end);\n}\n\nfunction revertLocalChange(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.CHANGE>,\n) {\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tconst collection = string.getIntervalCollection(label);\n\tconst id = getUpdatedIdFromInterval(revertible.interval);\n\tconst start = string.localReferencePositionToPosition(revertible.start);\n\tconst startSlidePos = getSlidePosition(string, revertible.start, start);\n\tconst end = string.localReferencePositionToPosition(revertible.end);\n\tconst endSlidePos = getSlidePosition(string, revertible.end, end);\n\tconst interval = collection.getIntervalById(id);\n\tif (\n\t\tinterval !== undefined &&\n\t\tisValidRange(\n\t\t\tstartSlidePos,\n\t\t\trevertible.start.slidingPreference ?? interval.start.slidingPreference,\n\t\t\tendSlidePos,\n\t\t\trevertible.end.slidingPreference ?? interval.end.slidingPreference,\n\t\t\tstring,\n\t\t)\n\t) {\n\t\tcollection.change(\n\t\t\tid,\n\t\t\tcreateSequencePlace(\n\t\t\t\tstartSlidePos,\n\t\t\t\trevertible.start.slidingPreference,\n\t\t\t\tinterval.start.slidingPreference,\n\t\t\t),\n\t\t\tcreateSequencePlace(\n\t\t\t\tendSlidePos,\n\t\t\t\trevertible.end.slidingPreference,\n\t\t\t\tinterval.end.slidingPreference,\n\t\t\t),\n\t\t);\n\t}\n\n\tstring.removeLocalReferencePosition(revertible.start);\n\tstring.removeLocalReferencePosition(revertible.end);\n}\n\nfunction revertLocalPropertyChanged(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.PROPERTY_CHANGED>,\n) {\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tconst id = getUpdatedIdFromInterval(revertible.interval);\n\tconst newProps = revertible.propertyDeltas;\n\tstring.getIntervalCollection(label).changeProperties(id, newProps);\n}\n\nfunction newPosition(offset: number | undefined, restoredRanges: SortedRangeSet) {\n\tif (offset === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet offsetFromSegment = offset;\n\tfor (const rangeInfo of restoredRanges.items) {\n\t\tif (offsetFromSegment < rangeInfo.length) {\n\t\t\t// find the segment inside the range\n\t\t\tfor (const range of rangeInfo.ranges) {\n\t\t\t\tif (range.segment.cachedLength > offsetFromSegment) {\n\t\t\t\t\treturn { segment: range.segment, offset: offsetFromSegment };\n\t\t\t\t}\n\t\t\t\toffsetFromSegment -= range.segment.cachedLength;\n\t\t\t}\n\t\t}\n\t\toffsetFromSegment -= rangeInfo.length;\n\t}\n\n\treturn undefined;\n}\n\nfunction newEndpointPosition(\n\toffset: number | undefined,\n\trestoredRanges: SortedRangeSet,\n\tsharedString: SharedString,\n) {\n\tconst pos = newPosition(offset, restoredRanges);\n\treturn pos === undefined ? undefined : sharedString.getPosition(pos.segment) + pos.offset;\n}\n\ninterface RangeInfo {\n\tranges: readonly Readonly<ISequenceDeltaRange<MergeTreeDeltaOperationType>>[];\n\tlength: number;\n}\n\n// eslint-disable-next-line import/no-deprecated\nclass SortedRangeSet extends SortedSet<RangeInfo, string> {\n\tprotected getKey(item: RangeInfo): string {\n\t\treturn item.ranges[0].segment.ordinal;\n\t}\n}\n\nfunction revertLocalSequenceRemove(\n\tsharedString: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.POSITION_REMOVE>,\n) {\n\tconst restoredRanges = new SortedRangeSet();\n\tconst saveSegments = (event: SequenceDeltaEvent) => {\n\t\tif (event.ranges.length > 0) {\n\t\t\tlet length = 0;\n\t\t\tevent.ranges.forEach((range) => {\n\t\t\t\tlength += range.segment.cachedLength;\n\t\t\t});\n\t\t\trestoredRanges.addOrUpdate({ ranges: event.ranges, length });\n\t\t}\n\t};\n\tsharedString.on(\"sequenceDelta\", saveSegments);\n\trevertMergeTreeDeltaRevertibles(sharedString, [revertible.mergeTreeRevertible]);\n\tsharedString.off(\"sequenceDelta\", saveSegments);\n\n\trevertible.intervals.forEach((intervalInfo) => {\n\t\tconst intervalCollection = sharedString.getIntervalCollection(intervalInfo.label);\n\t\tconst intervalId = getUpdatedId(intervalInfo.intervalId);\n\t\tconst interval = intervalCollection.getIntervalById(intervalId);\n\t\tif (interval !== undefined) {\n\t\t\tconst start =\n\t\t\t\tnewEndpointPosition(intervalInfo.startOffset, restoredRanges, sharedString) ??\n\t\t\t\tsharedString.localReferencePositionToPosition(interval.start);\n\t\t\tconst end =\n\t\t\t\tnewEndpointPosition(intervalInfo.endOffset, restoredRanges, sharedString) ??\n\t\t\t\tsharedString.localReferencePositionToPosition(interval.end);\n\t\t\tif (\n\t\t\t\tisValidRange(\n\t\t\t\t\tstart,\n\t\t\t\t\tinterval.start.slidingPreference,\n\t\t\t\t\tend,\n\t\t\t\t\tinterval.end.slidingPreference,\n\t\t\t\t\tsharedString,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tintervalCollection.change(\n\t\t\t\t\tintervalId,\n\t\t\t\t\tcreateSequencePlace(start, interval.start.slidingPreference),\n\t\t\t\t\tcreateSequencePlace(end, interval.end.slidingPreference),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\n\t// fix up the local references used by delete and change revertibles\n\trevertible.revertibleRefs.forEach((revertibleRef) => {\n\t\tassert(\n\t\t\trevertibleRef.revertible.event === IntervalOpType.CHANGE ||\n\t\t\t\trevertibleRef.revertible.event === IntervalOpType.DELETE,\n\t\t\t0x6c5 /* revertible is not delete or change */,\n\t\t);\n\t\tconst pos = newPosition(revertibleRef.offset, restoredRanges);\n\t\tif (pos !== undefined) {\n\t\t\tif (revertibleRef.isStart) {\n\t\t\t\tsharedString.removeLocalReferencePosition(revertibleRef.revertible.start);\n\t\t\t\tconst newRef = sharedString.createLocalReferencePosition(\n\t\t\t\t\tpos.segment as SharedStringSegment,\n\t\t\t\t\tpos.offset,\n\t\t\t\t\tReferenceType.StayOnRemove | ReferenceType.RangeBegin,\n\t\t\t\t\t{ revertible: revertibleRef.revertible },\n\t\t\t\t\trevertibleRef.revertible.start.slidingPreference,\n\t\t\t\t);\n\t\t\t\trevertibleRef.revertible.start = newRef;\n\t\t\t} else {\n\t\t\t\tsharedString.removeLocalReferencePosition(revertibleRef.revertible.end);\n\t\t\t\tconst newRef = sharedString.createLocalReferencePosition(\n\t\t\t\t\tpos.segment as SharedStringSegment,\n\t\t\t\t\tpos.offset,\n\t\t\t\t\tReferenceType.StayOnRemove | ReferenceType.RangeEnd,\n\t\t\t\t\t{ revertible: revertibleRef.revertible },\n\t\t\t\t\trevertibleRef.revertible.end.slidingPreference,\n\t\t\t\t);\n\t\t\t\trevertibleRef.revertible.end = newRef;\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * Invoke revertibles to reverse prior edits\n * @internal\n */\nexport function revertSharedStringRevertibles(\n\tsharedString: SharedString,\n\trevertibles: SharedStringRevertible[],\n) {\n\twhile (revertibles.length > 0) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst r = revertibles.pop()!;\n\t\tif (\"event\" in r) {\n\t\t\tconst event = r.event;\n\t\t\tswitch (event) {\n\t\t\t\tcase IntervalOpType.ADD:\n\t\t\t\t\trevertLocalAdd(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.DELETE:\n\t\t\t\t\trevertLocalDelete(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.CHANGE:\n\t\t\t\t\trevertLocalChange(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.PROPERTY_CHANGED:\n\t\t\t\t\trevertLocalPropertyChanged(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.POSITION_REMOVE:\n\t\t\t\t\trevertLocalSequenceRemove(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tunreachableCase(event);\n\t\t\t}\n\t\t} else {\n\t\t\trevertMergeTreeDeltaRevertibles(sharedString, [r]);\n\t\t}\n\t}\n}\n"]}
@@ -9,10 +9,10 @@ import { Client, IJSONSegment, IMergeTreeGroupMsg, IRelativePosition, ISegment,
9
9
  import { IFluidSerializer, SharedObject, ISharedObjectEvents, SummarySerializer } 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";
13
- import { IIntervalCollection } from "./intervalCollection";
14
- import { SequenceDeltaEvent, SequenceMaintenanceEvent } from "./sequenceDeltaEvent";
15
- import { ISharedIntervalCollection } from "./sharedIntervalCollection";
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";
16
16
  /**
17
17
  * Events emitted in response to changes to the sequence data.
18
18
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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"}