@fluidframework/sequence 2.0.0-internal.7.2.2 → 2.0.0-internal.7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/api-extractor-lint.json +13 -0
  3. package/api-extractor.json +9 -1
  4. package/api-report/sequence.api.md +87 -84
  5. package/dist/defaultMap.d.ts +3 -3
  6. package/dist/defaultMap.d.ts.map +1 -1
  7. package/dist/defaultMap.js +7 -2
  8. package/dist/defaultMap.js.map +1 -1
  9. package/dist/defaultMapInterfaces.d.ts +11 -10
  10. package/dist/defaultMapInterfaces.d.ts.map +1 -1
  11. package/dist/defaultMapInterfaces.js.map +1 -1
  12. package/dist/intervalCollection.d.ts +68 -14
  13. package/dist/intervalCollection.d.ts.map +1 -1
  14. package/dist/intervalCollection.js +50 -45
  15. package/dist/intervalCollection.js.map +1 -1
  16. package/dist/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  17. package/dist/intervalIndex/endpointInRangeIndex.js +1 -1
  18. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  19. package/dist/intervalIndex/endpointIndex.d.ts +2 -2
  20. package/dist/intervalIndex/endpointIndex.js +1 -1
  21. package/dist/intervalIndex/endpointIndex.js.map +1 -1
  22. package/dist/intervalIndex/idIntervalIndex.d.ts +2 -2
  23. package/dist/intervalIndex/idIntervalIndex.js +1 -1
  24. package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
  25. package/dist/intervalIndex/intervalIndex.d.ts +1 -1
  26. package/dist/intervalIndex/intervalIndex.js.map +1 -1
  27. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  28. package/dist/intervalIndex/overlappingIntervalsIndex.js +1 -1
  29. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  30. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +1 -1
  31. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +1 -1
  32. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  33. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +2 -1
  34. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  35. package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  36. package/dist/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  37. package/dist/intervalIndex/startpointInRangeIndex.js +1 -1
  38. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  39. package/dist/intervals/interval.d.ts +2 -7
  40. package/dist/intervals/interval.d.ts.map +1 -1
  41. package/dist/intervals/interval.js +1 -5
  42. package/dist/intervals/interval.js.map +1 -1
  43. package/dist/intervals/intervalUtils.d.ts +15 -14
  44. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  45. package/dist/intervals/intervalUtils.js +4 -3
  46. package/dist/intervals/intervalUtils.js.map +1 -1
  47. package/dist/intervals/sequenceInterval.d.ts +3 -12
  48. package/dist/intervals/sequenceInterval.d.ts.map +1 -1
  49. package/dist/intervals/sequenceInterval.js +3 -11
  50. package/dist/intervals/sequenceInterval.js.map +1 -1
  51. package/dist/localValues.d.ts +2 -1
  52. package/dist/localValues.d.ts.map +1 -1
  53. package/dist/localValues.js.map +1 -1
  54. package/dist/packageVersion.d.ts +1 -1
  55. package/dist/packageVersion.js +1 -1
  56. package/dist/packageVersion.js.map +1 -1
  57. package/dist/revertibles.d.ts +9 -15
  58. package/dist/revertibles.d.ts.map +1 -1
  59. package/dist/revertibles.js +41 -21
  60. package/dist/revertibles.js.map +1 -1
  61. package/dist/sequence-alpha.d.ts +1306 -0
  62. package/dist/sequence-beta.d.ts +270 -0
  63. package/dist/sequence-public.d.ts +270 -0
  64. package/dist/sequence-untrimmed.d.ts +1790 -0
  65. package/dist/sequence.d.ts +2 -3
  66. package/dist/sequence.d.ts.map +1 -1
  67. package/dist/sequence.js +4 -5
  68. package/dist/sequence.js.map +1 -1
  69. package/dist/sequenceDeltaEvent.d.ts +4 -4
  70. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  71. package/dist/sequenceDeltaEvent.js +4 -3
  72. package/dist/sequenceDeltaEvent.js.map +1 -1
  73. package/dist/sequenceFactory.d.ts +1 -1
  74. package/dist/sequenceFactory.js +1 -1
  75. package/dist/sequenceFactory.js.map +1 -1
  76. package/dist/sharedIntervalCollection.d.ts +3 -3
  77. package/dist/sharedIntervalCollection.js +2 -2
  78. package/dist/sharedIntervalCollection.js.map +1 -1
  79. package/dist/sharedSequence.d.ts +3 -3
  80. package/dist/sharedSequence.js +2 -2
  81. package/dist/sharedSequence.js.map +1 -1
  82. package/dist/sharedString.d.ts +8 -5
  83. package/dist/sharedString.d.ts.map +1 -1
  84. package/dist/sharedString.js +6 -3
  85. package/dist/sharedString.js.map +1 -1
  86. package/dist/tsdoc-metadata.json +1 -1
  87. package/lib/defaultMap.d.ts +3 -3
  88. package/lib/defaultMap.d.ts.map +1 -1
  89. package/lib/defaultMap.js +29 -20
  90. package/lib/defaultMap.js.map +1 -1
  91. package/lib/defaultMapInterfaces.d.ts +11 -10
  92. package/lib/defaultMapInterfaces.d.ts.map +1 -1
  93. package/lib/defaultMapInterfaces.js +2 -1
  94. package/lib/defaultMapInterfaces.js.map +1 -1
  95. package/lib/index.js +45 -10
  96. package/lib/index.js.map +1 -1
  97. package/lib/intervalCollection.d.ts +68 -14
  98. package/lib/intervalCollection.d.ts.map +1 -1
  99. package/lib/intervalCollection.js +174 -156
  100. package/lib/intervalCollection.js.map +1 -1
  101. package/lib/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  102. package/lib/intervalIndex/endpointInRangeIndex.js +18 -13
  103. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
  104. package/lib/intervalIndex/endpointIndex.d.ts +2 -2
  105. package/lib/intervalIndex/endpointIndex.js +14 -9
  106. package/lib/intervalIndex/endpointIndex.js.map +1 -1
  107. package/lib/intervalIndex/idIntervalIndex.d.ts +2 -2
  108. package/lib/intervalIndex/idIntervalIndex.js +9 -5
  109. package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
  110. package/lib/intervalIndex/index.js +19 -6
  111. package/lib/intervalIndex/index.js.map +1 -1
  112. package/lib/intervalIndex/intervalIndex.d.ts +1 -1
  113. package/lib/intervalIndex/intervalIndex.js +2 -1
  114. package/lib/intervalIndex/intervalIndex.js.map +1 -1
  115. package/lib/intervalIndex/intervalIndexUtils.js +8 -4
  116. package/lib/intervalIndex/intervalIndexUtils.js.map +1 -1
  117. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  118. package/lib/intervalIndex/overlappingIntervalsIndex.js +16 -11
  119. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  120. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +1 -1
  121. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +15 -11
  122. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  123. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts +2 -1
  124. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  125. package/lib/intervalIndex/sequenceIntervalIndexes.js +2 -1
  126. package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  127. package/lib/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  128. package/lib/intervalIndex/startpointInRangeIndex.js +18 -13
  129. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
  130. package/lib/intervalTree.js +9 -4
  131. package/lib/intervalTree.js.map +1 -1
  132. package/lib/intervals/index.js +18 -3
  133. package/lib/intervals/index.js.map +1 -1
  134. package/lib/intervals/interval.d.ts +2 -7
  135. package/lib/intervals/interval.d.ts.map +1 -1
  136. package/lib/intervals/interval.js +19 -18
  137. package/lib/intervals/interval.js.map +1 -1
  138. package/lib/intervals/intervalUtils.d.ts +15 -14
  139. package/lib/intervals/intervalUtils.d.ts.map +1 -1
  140. package/lib/intervals/intervalUtils.js +22 -16
  141. package/lib/intervals/intervalUtils.js.map +1 -1
  142. package/lib/intervals/sequenceInterval.d.ts +3 -12
  143. package/lib/intervals/sequenceInterval.d.ts.map +1 -1
  144. package/lib/intervals/sequenceInterval.js +68 -70
  145. package/lib/intervals/sequenceInterval.js.map +1 -1
  146. package/lib/localValues.d.ts +2 -1
  147. package/lib/localValues.d.ts.map +1 -1
  148. package/lib/localValues.js +9 -4
  149. package/lib/localValues.js.map +1 -1
  150. package/lib/packageVersion.d.ts +1 -1
  151. package/lib/packageVersion.js +5 -2
  152. package/lib/packageVersion.js.map +1 -1
  153. package/lib/revertibles.d.ts +9 -15
  154. package/lib/revertibles.d.ts.map +1 -1
  155. package/lib/revertibles.js +98 -68
  156. package/lib/revertibles.js.map +1 -1
  157. package/lib/sequence-alpha.d.ts +1306 -0
  158. package/lib/sequence-beta.d.ts +270 -0
  159. package/lib/sequence-public.d.ts +270 -0
  160. package/lib/sequence-untrimmed.d.ts +1790 -0
  161. package/lib/sequence.d.ts +2 -3
  162. package/lib/sequence.d.ts.map +1 -1
  163. package/lib/sequence.js +46 -46
  164. package/lib/sequence.js.map +1 -1
  165. package/lib/sequenceDeltaEvent.d.ts +4 -4
  166. package/lib/sequenceDeltaEvent.d.ts.map +1 -1
  167. package/lib/sequenceDeltaEvent.js +17 -10
  168. package/lib/sequenceDeltaEvent.js.map +1 -1
  169. package/lib/sequenceFactory.d.ts +1 -1
  170. package/lib/sequenceFactory.js +14 -10
  171. package/lib/sequenceFactory.js.map +1 -1
  172. package/lib/sharedIntervalCollection.d.ts +3 -3
  173. package/lib/sharedIntervalCollection.js +20 -15
  174. package/lib/sharedIntervalCollection.js.map +1 -1
  175. package/lib/sharedSequence.d.ts +3 -3
  176. package/lib/sharedSequence.js +13 -8
  177. package/lib/sharedSequence.js.map +1 -1
  178. package/lib/sharedString.d.ts +8 -5
  179. package/lib/sharedString.d.ts.map +1 -1
  180. package/lib/sharedString.js +27 -19
  181. package/lib/sharedString.js.map +1 -1
  182. package/package.json +43 -29
  183. package/sequence.test-files.tar +0 -0
  184. package/src/defaultMap.ts +22 -16
  185. package/src/defaultMapInterfaces.ts +15 -12
  186. package/src/intervalCollection.ts +131 -67
  187. package/src/intervalIndex/endpointInRangeIndex.ts +2 -2
  188. package/src/intervalIndex/endpointIndex.ts +2 -2
  189. package/src/intervalIndex/idIntervalIndex.ts +2 -2
  190. package/src/intervalIndex/intervalIndex.ts +1 -1
  191. package/src/intervalIndex/overlappingIntervalsIndex.ts +2 -2
  192. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +1 -1
  193. package/src/intervalIndex/sequenceIntervalIndexes.ts +2 -1
  194. package/src/intervalIndex/startpointInRangeIndex.ts +2 -2
  195. package/src/intervals/interval.ts +2 -7
  196. package/src/intervals/intervalUtils.ts +16 -15
  197. package/src/intervals/sequenceInterval.ts +3 -12
  198. package/src/localValues.ts +2 -1
  199. package/src/packageVersion.ts +1 -1
  200. package/src/revertibles.ts +95 -24
  201. package/src/sequence.ts +5 -7
  202. package/src/sequenceDeltaEvent.ts +6 -4
  203. package/src/sequenceFactory.ts +1 -1
  204. package/src/sharedIntervalCollection.ts +3 -3
  205. package/src/sharedSequence.ts +3 -3
  206. package/src/sharedString.ts +8 -5
  207. package/tsconfig.esnext.json +1 -2
  208. package/tsconfig.json +5 -3
@@ -100,7 +100,7 @@ function maxSide(sideA: Side, sideB: Side): Side {
100
100
  * `mergeTreeReferencesCanSlideToEndpoint` feature flag set to true, the endpoints
101
101
  * of the interval that are exclusive will have the ability to slide to these
102
102
  * special endpoint segments.
103
- * @public
103
+ * @alpha
104
104
  */
105
105
  export class SequenceInterval implements ISerializableInterval {
106
106
  /**
@@ -109,13 +109,10 @@ export class SequenceInterval implements ISerializableInterval {
109
109
  public properties: PropertySet;
110
110
  /**
111
111
  * {@inheritDoc ISerializableInterval.propertyManager}
112
- * @internal
113
112
  */
114
113
  public propertyManager: PropertiesManager;
115
114
 
116
- /**
117
- * @internal
118
- */
115
+ /***/
119
116
  public get stickiness(): IntervalStickiness {
120
117
  const startSegment = this.start.getSegment();
121
118
  const endSegment = this.end.getSegment();
@@ -156,7 +153,6 @@ export class SequenceInterval implements ISerializableInterval {
156
153
 
157
154
  /**
158
155
  * Subscribes to position change events on this interval if there are no current listeners.
159
- * @internal
160
156
  */
161
157
  public addPositionChangeListeners(
162
158
  beforePositionChange: () => void,
@@ -177,7 +173,6 @@ export class SequenceInterval implements ISerializableInterval {
177
173
 
178
174
  /**
179
175
  * Removes the currently subscribed position change listeners.
180
- * @internal
181
176
  */
182
177
  public removePositionChangeListeners(): void {
183
178
  if (this.callbacks) {
@@ -189,7 +184,6 @@ export class SequenceInterval implements ISerializableInterval {
189
184
 
190
185
  /**
191
186
  * {@inheritDoc ISerializableInterval.serialize}
192
- * @internal
193
187
  */
194
188
  public serialize(): ISerializedInterval {
195
189
  const startPosition = this.client.localReferencePositionToPosition(this.start);
@@ -299,7 +293,6 @@ export class SequenceInterval implements ISerializableInterval {
299
293
 
300
294
  /**
301
295
  * {@inheritDoc IInterval.union}
302
- * @internal
303
296
  */
304
297
  public union(b: SequenceInterval) {
305
298
  const newStart = minReferencePosition(this.start, b.start);
@@ -334,7 +327,6 @@ export class SequenceInterval implements ISerializableInterval {
334
327
 
335
328
  /**
336
329
  * {@inheritDoc ISerializableInterval.addProperties}
337
- * @internal
338
330
  */
339
331
  public addProperties(
340
332
  newProps: PropertySet,
@@ -357,7 +349,6 @@ export class SequenceInterval implements ISerializableInterval {
357
349
 
358
350
  /**
359
351
  * {@inheritDoc IInterval.modify}
360
- * @internal
361
352
  */
362
353
  public modify(
363
354
  label: string,
@@ -637,7 +628,7 @@ export function createSequenceInterval(
637
628
 
638
629
  /**
639
630
  * @deprecated The methods within have substitutions
640
- * @public
631
+ * @internal
641
632
  */
642
633
  export const sequenceIntervalHelpers: IIntervalHelpers<SequenceInterval> = {
643
634
  create: createSequenceInterval,
@@ -11,6 +11,7 @@ import {
11
11
  IValueOperation,
12
12
  IValueType,
13
13
  } from "./defaultMapInterfaces";
14
+ import { IntervalOpType } from "./intervals";
14
15
 
15
16
  /**
16
17
  * A local value to be stored in a container type DDS.
@@ -88,7 +89,7 @@ export class ValueTypeLocalValue<T> implements ILocalValue<T> {
88
89
  * @param opName - The name of the operation that needs processing
89
90
  * @returns The object which can process the given op
90
91
  */
91
- public getOpHandler(opName: string): IValueOperation<T> {
92
+ public getOpHandler(opName: IntervalOpType): IValueOperation<T> {
92
93
  const handler = this.valueType.ops.get(opName);
93
94
  if (!handler) {
94
95
  throw new Error("Unknown type message");
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/sequence";
9
- export const pkgVersion = "2.0.0-internal.7.2.2";
9
+ export const pkgVersion = "2.0.0-internal.7.4.0";
@@ -2,6 +2,8 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
+
6
+ /* eslint-disable import/no-deprecated */
5
7
  /* eslint-disable no-bitwise */
6
8
 
7
9
  import { assert, unreachableCase } from "@fluidframework/core-utils";
@@ -19,26 +21,24 @@ import {
19
21
  revertMergeTreeDeltaRevertibles,
20
22
  SortedSet,
21
23
  getSlideToSegoff,
24
+ SlidingPreference,
22
25
  } from "@fluidframework/merge-tree";
26
+ import { InteriorSequencePlace, Side } from "./intervalCollection";
23
27
  import { IntervalOpType, SequenceInterval } from "./intervals";
24
28
  import { SharedString, SharedStringSegment } from "./sharedString";
25
29
  import { ISequenceDeltaRange, SequenceDeltaEvent } from "./sequenceDeltaEvent";
26
30
 
27
31
  /**
28
32
  * Data for undoing edits on SharedStrings and Intervals.
29
- *
30
- * @alpha
33
+ * @internal
31
34
  */
32
35
  export type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;
33
36
 
34
37
  const idMap = new Map<string, string>();
35
38
 
36
- type IntervalOpType = (typeof IntervalOpType)[keyof typeof IntervalOpType];
37
-
38
39
  /**
39
40
  * Data for undoing edits affecting Intervals.
40
- *
41
- * @alpha
41
+ * @internal
42
42
  */
43
43
  export type IntervalRevertible =
44
44
  | {
@@ -92,7 +92,7 @@ function getUpdatedId(intervalId: string): string {
92
92
 
93
93
  /**
94
94
  * Create revertibles for adding an interval
95
- * @alpha
95
+ * @internal
96
96
  */
97
97
  export function appendAddIntervalToRevertibles(
98
98
  interval: SequenceInterval,
@@ -108,7 +108,7 @@ export function appendAddIntervalToRevertibles(
108
108
 
109
109
  /**
110
110
  * Create revertibles for deleting an interval
111
- * @alpha
111
+ * @internal
112
112
  */
113
113
  export function appendDeleteIntervalToRevertibles(
114
114
  string: SharedString,
@@ -154,7 +154,7 @@ export function appendDeleteIntervalToRevertibles(
154
154
 
155
155
  /**
156
156
  * Create revertibles for moving endpoints of an interval
157
- * @alpha
157
+ * @internal
158
158
  */
159
159
  export function appendChangeIntervalToRevertibles(
160
160
  string: SharedString,
@@ -204,7 +204,7 @@ export function appendChangeIntervalToRevertibles(
204
204
 
205
205
  /**
206
206
  * Create revertibles for changing properties of an interval
207
- * @alpha
207
+ * @internal
208
208
  */
209
209
  export function appendIntervalPropertyChangedToRevertibles(
210
210
  interval: SequenceInterval,
@@ -264,8 +264,7 @@ function addIfRevertibleRef(
264
264
  /**
265
265
  * Create revertibles for SharedStringDeltas, handling indirectly modified intervals
266
266
  * (e.g. reverting remove of a range that contains an interval will move the interval back)
267
- *
268
- * @alpha
267
+ * @internal
269
268
  */
270
269
  export function appendSharedStringDeltaToRevertibles(
271
270
  string: SharedString,
@@ -358,7 +357,7 @@ export function appendSharedStringDeltaToRevertibles(
358
357
 
359
358
  /**
360
359
  * Clean up resources held by revertibles that are no longer needed.
361
- * @alpha
360
+ * @internal
362
361
  */
363
362
  export function discardSharedStringRevertibles(
364
363
  sharedString: SharedString,
@@ -387,13 +386,22 @@ function getSlidePosition(string: SharedString, lref: LocalReferencePosition, po
387
386
  : pos;
388
387
  }
389
388
 
390
- function isValidRange(start: number, end: number, string: SharedString) {
389
+ function isValidRange(
390
+ start: number,
391
+ startSlide: SlidingPreference | undefined,
392
+ end: number,
393
+ endSlide: SlidingPreference | undefined,
394
+ string: SharedString,
395
+ ) {
391
396
  return (
392
397
  start >= 0 &&
393
398
  start < string.getLength() &&
394
399
  end >= 0 &&
395
400
  end < string.getLength() &&
396
- start <= end
401
+ (start < end ||
402
+ (start === end &&
403
+ (startSlide === SlidingPreference.FORWARD ||
404
+ endSlide !== SlidingPreference.FORWARD)))
397
405
  );
398
406
  }
399
407
 
@@ -406,6 +414,26 @@ function revertLocalAdd(
406
414
  string.getIntervalCollection(label).removeIntervalById(id);
407
415
  }
408
416
 
417
+ function createSequencePlace(
418
+ pos: number,
419
+ newSlidingPreference: SlidingPreference | undefined,
420
+ oldSlidingPreference: SlidingPreference | undefined = undefined,
421
+ ): number | InteriorSequencePlace {
422
+ return newSlidingPreference === SlidingPreference.BACKWARD ||
423
+ (newSlidingPreference === undefined && oldSlidingPreference === SlidingPreference.BACKWARD)
424
+ ? {
425
+ pos,
426
+ side: Side.After,
427
+ }
428
+ : newSlidingPreference === SlidingPreference.FORWARD &&
429
+ oldSlidingPreference === SlidingPreference.BACKWARD
430
+ ? {
431
+ pos,
432
+ side: Side.Before,
433
+ }
434
+ : pos; // Avoid setting side if possible since stickiness may not be enabled
435
+ }
436
+
409
437
  function revertLocalDelete(
410
438
  string: SharedString,
411
439
  revertible: TypedRevertible<typeof IntervalOpType.DELETE>,
@@ -418,10 +446,18 @@ function revertLocalDelete(
418
446
  const endSlidePos = getSlidePosition(string, revertible.end, end);
419
447
  // reusing the id causes eventual consistency bugs, so it is removed here and recreated in add
420
448
  const { intervalId, ...props } = revertible.interval.properties;
421
- if (isValidRange(startSlidePos, endSlidePos, string)) {
449
+ if (
450
+ isValidRange(
451
+ startSlidePos,
452
+ revertible.start.slidingPreference,
453
+ endSlidePos,
454
+ revertible.end.slidingPreference,
455
+ string,
456
+ )
457
+ ) {
422
458
  const int = collection.add({
423
- start: startSlidePos,
424
- end: endSlidePos,
459
+ start: createSequencePlace(startSlidePos, revertible.start.slidingPreference),
460
+ end: createSequencePlace(endSlidePos, revertible.end.slidingPreference),
425
461
  props,
426
462
  });
427
463
 
@@ -448,8 +484,30 @@ function revertLocalChange(
448
484
  const startSlidePos = getSlidePosition(string, revertible.start, start);
449
485
  const end = string.localReferencePositionToPosition(revertible.end);
450
486
  const endSlidePos = getSlidePosition(string, revertible.end, end);
451
- if (isValidRange(startSlidePos, endSlidePos, string)) {
452
- collection.change(id, startSlidePos, endSlidePos);
487
+ const interval = collection.getIntervalById(id);
488
+ if (
489
+ interval !== undefined &&
490
+ isValidRange(
491
+ startSlidePos,
492
+ revertible.start.slidingPreference ?? interval.start.slidingPreference,
493
+ endSlidePos,
494
+ revertible.end.slidingPreference ?? interval.end.slidingPreference,
495
+ string,
496
+ )
497
+ ) {
498
+ collection.change(
499
+ id,
500
+ createSequencePlace(
501
+ startSlidePos,
502
+ revertible.start.slidingPreference,
503
+ interval.start.slidingPreference,
504
+ ),
505
+ createSequencePlace(
506
+ endSlidePos,
507
+ revertible.end.slidingPreference,
508
+ interval.end.slidingPreference,
509
+ ),
510
+ );
453
511
  }
454
512
 
455
513
  string.removeLocalReferencePosition(revertible.start);
@@ -537,8 +595,20 @@ function revertLocalSequenceRemove(
537
595
  const end =
538
596
  newEndpointPosition(intervalInfo.endOffset, restoredRanges, sharedString) ??
539
597
  sharedString.localReferencePositionToPosition(interval.end);
540
- if (start <= end) {
541
- intervalCollection.change(intervalId, start, end);
598
+ if (
599
+ isValidRange(
600
+ start,
601
+ interval.start.slidingPreference,
602
+ end,
603
+ interval.end.slidingPreference,
604
+ sharedString,
605
+ )
606
+ ) {
607
+ intervalCollection.change(
608
+ intervalId,
609
+ createSequencePlace(start, interval.start.slidingPreference),
610
+ createSequencePlace(end, interval.end.slidingPreference),
611
+ );
542
612
  }
543
613
  }
544
614
  });
@@ -559,6 +629,7 @@ function revertLocalSequenceRemove(
559
629
  pos.offset,
560
630
  ReferenceType.StayOnRemove | ReferenceType.RangeBegin,
561
631
  { revertible: revertibleRef.revertible },
632
+ revertibleRef.revertible.start.slidingPreference,
562
633
  );
563
634
  revertibleRef.revertible.start = newRef;
564
635
  } else {
@@ -568,6 +639,7 @@ function revertLocalSequenceRemove(
568
639
  pos.offset,
569
640
  ReferenceType.StayOnRemove | ReferenceType.RangeEnd,
570
641
  { revertible: revertibleRef.revertible },
642
+ revertibleRef.revertible.end.slidingPreference,
571
643
  );
572
644
  revertibleRef.revertible.end = newRef;
573
645
  }
@@ -577,8 +649,7 @@ function revertLocalSequenceRemove(
577
649
 
578
650
  /**
579
651
  * Invoke revertibles to reverse prior edits
580
- *
581
- * @alpha
652
+ * @internal
582
653
  */
583
654
  export function revertSharedStringRevertibles(
584
655
  sharedString: SharedString,
package/src/sequence.ts CHANGED
@@ -2,6 +2,9 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
+
6
+ /* eslint-disable import/no-deprecated */
7
+
5
8
  import { assert, Deferred } from "@fluidframework/core-utils";
6
9
  import { bufferToString } from "@fluid-internal/client-utils";
7
10
  import { LoggingError, createChildLogger } from "@fluidframework/telemetry-utils";
@@ -14,7 +17,6 @@ import {
14
17
  import {
15
18
  Client,
16
19
  createAnnotateRangeOp,
17
- // eslint-disable-next-line import/no-deprecated
18
20
  createGroupOp,
19
21
  createInsertOp,
20
22
  createRemoveRangeOp,
@@ -29,7 +31,6 @@ import {
29
31
  ISegment,
30
32
  ISegmentAction,
31
33
  LocalReferencePosition,
32
- // eslint-disable-next-line import/no-deprecated
33
34
  matchProperties,
34
35
  MergeTreeDeltaType,
35
36
  PropertySet,
@@ -97,7 +98,7 @@ const contentPath = "content";
97
98
  * - `event` - Various information on the segments that were modified.
98
99
  *
99
100
  * - `target` - The sequence itself.
100
- * @public
101
+ * @alpha
101
102
  */
102
103
  export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
103
104
  (
@@ -115,7 +116,7 @@ export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
115
116
  }
116
117
 
117
118
  /**
118
- * @public
119
+ * @alpha
119
120
  */
120
121
  export abstract class SharedSegmentSequence<T extends ISegment>
121
122
  extends SharedObject<ISharedSegmentSequenceEvents>
@@ -136,7 +137,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
136
137
  *
137
138
  * An application using SharedString which explicitly wants to opt in to allowing reentrancy anyway can set `sharedStringPreventReentrancy`
138
139
  * on the data store options to `false`.
139
- * @internal
140
140
  */
141
141
  protected guardReentrancy: <TRet>(callback: () => TRet) => TRet;
142
142
 
@@ -153,7 +153,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
153
153
  if (
154
154
  lastAnnotate &&
155
155
  lastAnnotate.pos2 === r.position &&
156
- // eslint-disable-next-line import/no-deprecated
157
156
  matchProperties(lastAnnotate.props, props)
158
157
  ) {
159
158
  lastAnnotate.pos2 += r.segment.cachedLength;
@@ -764,7 +763,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
764
763
  stashMessage = {
765
764
  ...message,
766
765
  referenceSequenceNumber: stashMessage.sequenceNumber - 1,
767
- // eslint-disable-next-line import/no-deprecated
768
766
  contents: ops.length !== 1 ? createGroupOp(...ops) : ops[0],
769
767
  };
770
768
  }
@@ -3,6 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ /* eslint-disable import/no-deprecated */
7
+
6
8
  import { assert } from "@fluidframework/core-utils";
7
9
  import {
8
10
  Client,
@@ -23,7 +25,7 @@ import {
23
25
  * The properties of this object and its sub-objects represent the state of the sequence at the
24
26
  * point in time at which the operation was applied.
25
27
  * They will not take into any future modifications performed to the underlying sequence and merge tree.
26
- * @public
28
+ * @alpha
27
29
  */
28
30
  export abstract class SequenceEvent<
29
31
  TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,
@@ -106,7 +108,7 @@ export abstract class SequenceEvent<
106
108
  * For group ops, each op will get its own event, and the group op property will be set on the op args.
107
109
  *
108
110
  * Ops may get multiple events. For instance, an insert-replace will get a remove then an insert event.
109
- * @public
111
+ * @alpha
110
112
  */
111
113
  export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {
112
114
  /**
@@ -130,7 +132,7 @@ export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationTyp
130
132
  * The properties of this object and its sub-objects represent the state of the sequence at the
131
133
  * point in time at which the operation was applied.
132
134
  * They will not take into consideration any future modifications performed to the underlying sequence and merge tree.
133
- * @public
135
+ * @alpha
134
136
  */
135
137
  export class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {
136
138
  constructor(
@@ -144,7 +146,7 @@ export class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenance
144
146
 
145
147
  /**
146
148
  * A range that has changed corresponding to a segment modification.
147
- * @public
149
+ * @alpha
148
150
  */
149
151
  export interface ISequenceDeltaRange<
150
152
  TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,
@@ -14,7 +14,7 @@ import { pkgVersion } from "./packageVersion";
14
14
  import { SharedString, SharedStringSegment } from "./sharedString";
15
15
 
16
16
  /**
17
- * @public
17
+ * @alpha
18
18
  */
19
19
  export class SharedStringFactory implements IChannelFactory {
20
20
  // TODO rename back to https://graph.microsoft.com/types/mergeTree/string once paparazzi is able to dynamically
@@ -33,7 +33,7 @@ const snapshotFileName = "header";
33
33
  /**
34
34
  * The factory that defines the SharedIntervalCollection.
35
35
  * @deprecated `SharedIntervalCollection` is not maintained and is planned to be removed.
36
- * @public
36
+ * @internal
37
37
  */
38
38
  export class SharedIntervalCollectionFactory implements IChannelFactory {
39
39
  public static readonly Type = "https://graph.microsoft.com/types/sharedIntervalCollection";
@@ -76,7 +76,7 @@ export class SharedIntervalCollectionFactory implements IChannelFactory {
76
76
  }
77
77
 
78
78
  /**
79
- * @public
79
+ * @alpha
80
80
  */
81
81
  export interface ISharedIntervalCollection<TInterval extends ISerializableInterval> {
82
82
  getIntervalCollection(label: string): IIntervalCollection<TInterval>;
@@ -84,7 +84,7 @@ export interface ISharedIntervalCollection<TInterval extends ISerializableInterv
84
84
 
85
85
  /**
86
86
  * @deprecated `SharedIntervalCollection` is not maintained and is planned to be removed.
87
- * @public
87
+ * @internal
88
88
  */
89
89
  export class SharedIntervalCollection
90
90
  extends SharedObject
@@ -16,7 +16,7 @@ const MaxRun = 128;
16
16
 
17
17
  /**
18
18
  * @deprecated IJSONRunSegment will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
19
- * @public
19
+ * @internal
20
20
  */
21
21
  export interface IJSONRunSegment<T> extends IJSONSegment {
22
22
  items: Serializable<T>[];
@@ -24,7 +24,7 @@ export interface IJSONRunSegment<T> extends IJSONSegment {
24
24
 
25
25
  /**
26
26
  * @deprecated SubSequence will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
27
- * @public
27
+ * @internal
28
28
  */
29
29
  export class SubSequence<T> extends BaseSegment {
30
30
  public static readonly typeString: string = "SubSequence";
@@ -108,7 +108,7 @@ export class SubSequence<T> extends BaseSegment {
108
108
 
109
109
  /**
110
110
  * @deprecated SharedSequence will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
111
- * @public
111
+ * @internal
112
112
  */
113
113
  export class SharedSequence<T> extends SharedSegmentSequence<SubSequence<T>> {
114
114
  constructor(
@@ -24,7 +24,7 @@ import { SharedStringFactory } from "./sequenceFactory";
24
24
 
25
25
  /**
26
26
  * Fluid object interface describing access methods on a SharedString
27
- * @public
27
+ * @alpha
28
28
  */
29
29
  export interface ISharedString extends SharedSegmentSequence<SharedStringSegment> {
30
30
  /**
@@ -54,7 +54,7 @@ export interface ISharedString extends SharedSegmentSequence<SharedStringSegment
54
54
  }
55
55
 
56
56
  /**
57
- * @public
57
+ * @alpha
58
58
  */
59
59
  export type SharedStringSegment = TextSegment | Marker;
60
60
 
@@ -66,8 +66,7 @@ export type SharedStringSegment = TextSegment | Marker;
66
66
  * In addition to text, a Shared String can also contain markers. Markers can be
67
67
  * used to store metadata at positions within the text, like the details of an
68
68
  * image or Fluid object that should be rendered with the text.
69
- *
70
- * @public
69
+ * @alpha
71
70
  */
72
71
  export class SharedString
73
72
  extends SharedSegmentSequence<SharedStringSegment>
@@ -196,6 +195,10 @@ export class SharedString
196
195
  * @param marker - The marker to annotate
197
196
  * @param props - The properties to annotate the marker with
198
197
  * @param consensusCallback - The callback called when consensus is reached
198
+ *
199
+ * @deprecated We no longer intend to support this functionality and it will
200
+ * be removed in a future release. There is no replacement for this
201
+ * functionality.
199
202
  */
200
203
  public annotateMarkerNotifyConsensus(
201
204
  marker: Marker,
@@ -339,7 +342,7 @@ interface ITextAndMarkerAccumulator {
339
342
  * // parallelMarkers === [<paragraph marker 1 object>, <paragraph marker 2 object>]
340
343
  * // Note parallelText does not include "missing".
341
344
  * ```
342
- * @public
345
+ * @internal
343
346
  */
344
347
  export function getTextAndMarkers(
345
348
  sharedString: SharedString,
@@ -1,7 +1,6 @@
1
1
  {
2
- "extends": "./tsconfig.json",
2
+ "extends": ["./tsconfig.json", "../../../common/build/build-common/tsconfig.esm.json"],
3
3
  "compilerOptions": {
4
4
  "outDir": "./lib",
5
- "module": "esnext",
6
5
  },
7
6
  }
package/tsconfig.json CHANGED
@@ -1,10 +1,12 @@
1
1
  {
2
- "extends": "@fluidframework/build-common/ts-common-config.json",
2
+ "extends": [
3
+ "../../../common/build/build-common/tsconfig.base.json",
4
+ "../../../common/build/build-common/tsconfig.cjs.json",
5
+ ],
6
+ "include": ["src/**/*"],
3
7
  "exclude": ["src/test/**/*"],
4
8
  "compilerOptions": {
5
9
  "rootDir": "./src",
6
10
  "outDir": "./dist",
7
- "composite": true,
8
11
  },
9
- "include": ["src/**/*"],
10
12
  }