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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/CHANGELOG.md +168 -0
  2. package/api-extractor-lint.json +13 -0
  3. package/api-extractor.json +8 -3
  4. package/api-report/sequence.api.md +138 -113
  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 +12 -11
  10. package/dist/defaultMapInterfaces.d.ts.map +1 -1
  11. package/dist/defaultMapInterfaces.js.map +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +11 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/intervalCollection.d.ts +70 -16
  17. package/dist/intervalCollection.d.ts.map +1 -1
  18. package/dist/intervalCollection.js +50 -45
  19. package/dist/intervalCollection.js.map +1 -1
  20. package/dist/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  21. package/dist/intervalIndex/endpointInRangeIndex.js +1 -1
  22. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  23. package/dist/intervalIndex/endpointIndex.d.ts +2 -2
  24. package/dist/intervalIndex/endpointIndex.js +1 -1
  25. package/dist/intervalIndex/endpointIndex.js.map +1 -1
  26. package/dist/intervalIndex/idIntervalIndex.d.ts +2 -2
  27. package/dist/intervalIndex/idIntervalIndex.js +1 -1
  28. package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
  29. package/dist/intervalIndex/intervalIndex.d.ts +1 -1
  30. package/dist/intervalIndex/intervalIndex.js.map +1 -1
  31. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  32. package/dist/intervalIndex/overlappingIntervalsIndex.js +1 -1
  33. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  34. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +1 -1
  35. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +1 -1
  36. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  37. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +2 -1
  38. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  39. package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  40. package/dist/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  41. package/dist/intervalIndex/startpointInRangeIndex.js +1 -1
  42. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  43. package/dist/intervalTree.d.ts +1 -2
  44. package/dist/intervalTree.d.ts.map +1 -1
  45. package/dist/intervalTree.js +1 -3
  46. package/dist/intervalTree.js.map +1 -1
  47. package/dist/intervals/interval.d.ts +5 -11
  48. package/dist/intervals/interval.d.ts.map +1 -1
  49. package/dist/intervals/interval.js +10 -18
  50. package/dist/intervals/interval.js.map +1 -1
  51. package/dist/intervals/intervalUtils.d.ts +15 -18
  52. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  53. package/dist/intervals/intervalUtils.js +3 -8
  54. package/dist/intervals/intervalUtils.js.map +1 -1
  55. package/dist/intervals/sequenceInterval.d.ts +5 -15
  56. package/dist/intervals/sequenceInterval.d.ts.map +1 -1
  57. package/dist/intervals/sequenceInterval.js +12 -28
  58. package/dist/intervals/sequenceInterval.js.map +1 -1
  59. package/dist/localValues.d.ts +2 -1
  60. package/dist/localValues.d.ts.map +1 -1
  61. package/dist/localValues.js.map +1 -1
  62. package/dist/packageVersion.d.ts +1 -1
  63. package/dist/packageVersion.js +1 -1
  64. package/dist/packageVersion.js.map +1 -1
  65. package/dist/revertibles.d.ts +9 -15
  66. package/dist/revertibles.d.ts.map +1 -1
  67. package/dist/revertibles.js +14 -10
  68. package/dist/revertibles.js.map +1 -1
  69. package/dist/sequence-alpha.d.ts +283 -552
  70. package/dist/sequence-beta.d.ts +139 -1373
  71. package/dist/sequence-public.d.ts +139 -1373
  72. package/dist/sequence-untrimmed.d.ts +186 -141
  73. package/dist/sequence.d.ts +26 -24
  74. package/dist/sequence.d.ts.map +1 -1
  75. package/dist/sequence.js +38 -23
  76. package/dist/sequence.js.map +1 -1
  77. package/dist/sequenceDeltaEvent.d.ts +4 -4
  78. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  79. package/dist/sequenceDeltaEvent.js +14 -7
  80. package/dist/sequenceDeltaEvent.js.map +1 -1
  81. package/dist/sequenceFactory.d.ts +1 -1
  82. package/dist/sequenceFactory.js +1 -1
  83. package/dist/sequenceFactory.js.map +1 -1
  84. package/dist/sharedIntervalCollection.d.ts +3 -3
  85. package/dist/sharedIntervalCollection.js +2 -2
  86. package/dist/sharedIntervalCollection.js.map +1 -1
  87. package/dist/sharedSequence.d.ts +4 -4
  88. package/dist/sharedSequence.d.ts.map +1 -1
  89. package/dist/sharedSequence.js +8 -2
  90. package/dist/sharedSequence.js.map +1 -1
  91. package/dist/sharedString.d.ts +9 -18
  92. package/dist/sharedString.d.ts.map +1 -1
  93. package/dist/sharedString.js +9 -21
  94. package/dist/sharedString.js.map +1 -1
  95. package/lib/defaultMap.d.ts +3 -3
  96. package/lib/defaultMap.d.ts.map +1 -1
  97. package/lib/defaultMap.js +29 -20
  98. package/lib/defaultMap.js.map +1 -1
  99. package/lib/defaultMapInterfaces.d.ts +12 -11
  100. package/lib/defaultMapInterfaces.d.ts.map +1 -1
  101. package/lib/defaultMapInterfaces.js +2 -1
  102. package/lib/defaultMapInterfaces.js.map +1 -1
  103. package/lib/index.d.ts +1 -0
  104. package/lib/index.d.ts.map +1 -1
  105. package/lib/index.js +55 -10
  106. package/lib/index.js.map +1 -1
  107. package/lib/intervalCollection.d.ts +70 -16
  108. package/lib/intervalCollection.d.ts.map +1 -1
  109. package/lib/intervalCollection.js +174 -156
  110. package/lib/intervalCollection.js.map +1 -1
  111. package/lib/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  112. package/lib/intervalIndex/endpointInRangeIndex.js +18 -13
  113. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
  114. package/lib/intervalIndex/endpointIndex.d.ts +2 -2
  115. package/lib/intervalIndex/endpointIndex.js +14 -9
  116. package/lib/intervalIndex/endpointIndex.js.map +1 -1
  117. package/lib/intervalIndex/idIntervalIndex.d.ts +2 -2
  118. package/lib/intervalIndex/idIntervalIndex.js +9 -5
  119. package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
  120. package/lib/intervalIndex/index.js +19 -6
  121. package/lib/intervalIndex/index.js.map +1 -1
  122. package/lib/intervalIndex/intervalIndex.d.ts +1 -1
  123. package/lib/intervalIndex/intervalIndex.js +2 -1
  124. package/lib/intervalIndex/intervalIndex.js.map +1 -1
  125. package/lib/intervalIndex/intervalIndexUtils.js +8 -4
  126. package/lib/intervalIndex/intervalIndexUtils.js.map +1 -1
  127. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  128. package/lib/intervalIndex/overlappingIntervalsIndex.js +16 -11
  129. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  130. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +1 -1
  131. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +15 -11
  132. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  133. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts +2 -1
  134. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  135. package/lib/intervalIndex/sequenceIntervalIndexes.js +2 -1
  136. package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  137. package/lib/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  138. package/lib/intervalIndex/startpointInRangeIndex.js +18 -13
  139. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
  140. package/lib/intervalTree.d.ts +1 -2
  141. package/lib/intervalTree.d.ts.map +1 -1
  142. package/lib/intervalTree.js +7 -4
  143. package/lib/intervalTree.js.map +1 -1
  144. package/lib/intervals/index.js +18 -3
  145. package/lib/intervals/index.js.map +1 -1
  146. package/lib/intervals/interval.d.ts +5 -11
  147. package/lib/intervals/interval.d.ts.map +1 -1
  148. package/lib/intervals/interval.js +26 -29
  149. package/lib/intervals/interval.js.map +1 -1
  150. package/lib/intervals/intervalUtils.d.ts +15 -18
  151. package/lib/intervals/intervalUtils.d.ts.map +1 -1
  152. package/lib/intervals/intervalUtils.js +21 -21
  153. package/lib/intervals/intervalUtils.js.map +1 -1
  154. package/lib/intervals/sequenceInterval.d.ts +5 -15
  155. package/lib/intervals/sequenceInterval.d.ts.map +1 -1
  156. package/lib/intervals/sequenceInterval.js +72 -82
  157. package/lib/intervals/sequenceInterval.js.map +1 -1
  158. package/lib/localValues.d.ts +2 -1
  159. package/lib/localValues.d.ts.map +1 -1
  160. package/lib/localValues.js +9 -4
  161. package/lib/localValues.js.map +1 -1
  162. package/lib/packageVersion.d.ts +1 -1
  163. package/lib/packageVersion.js +5 -2
  164. package/lib/packageVersion.js.map +1 -1
  165. package/lib/revertibles.d.ts +9 -15
  166. package/lib/revertibles.d.ts.map +1 -1
  167. package/lib/revertibles.js +83 -69
  168. package/lib/revertibles.js.map +1 -1
  169. package/lib/sequence-alpha.d.ts +283 -552
  170. package/lib/sequence-beta.d.ts +139 -1373
  171. package/lib/sequence-public.d.ts +139 -1373
  172. package/lib/sequence-untrimmed.d.ts +186 -141
  173. package/lib/sequence.d.ts +26 -24
  174. package/lib/sequence.d.ts.map +1 -1
  175. package/lib/sequence.js +81 -61
  176. package/lib/sequence.js.map +1 -1
  177. package/lib/sequenceDeltaEvent.d.ts +4 -4
  178. package/lib/sequenceDeltaEvent.d.ts.map +1 -1
  179. package/lib/sequenceDeltaEvent.js +27 -14
  180. package/lib/sequenceDeltaEvent.js.map +1 -1
  181. package/lib/sequenceFactory.d.ts +1 -1
  182. package/lib/sequenceFactory.js +14 -10
  183. package/lib/sequenceFactory.js.map +1 -1
  184. package/lib/sharedIntervalCollection.d.ts +3 -3
  185. package/lib/sharedIntervalCollection.js +20 -15
  186. package/lib/sharedIntervalCollection.js.map +1 -1
  187. package/lib/sharedSequence.d.ts +4 -4
  188. package/lib/sharedSequence.d.ts.map +1 -1
  189. package/lib/sharedSequence.js +19 -8
  190. package/lib/sharedSequence.js.map +1 -1
  191. package/lib/sharedString.d.ts +9 -18
  192. package/lib/sharedString.d.ts.map +1 -1
  193. package/lib/sharedString.js +30 -37
  194. package/lib/sharedString.js.map +1 -1
  195. package/package.json +44 -22
  196. package/sequence.test-files.tar +0 -0
  197. package/src/defaultMap.ts +22 -16
  198. package/src/defaultMapInterfaces.ts +17 -14
  199. package/src/index.ts +17 -0
  200. package/src/intervalCollection.ts +135 -71
  201. package/src/intervalIndex/endpointInRangeIndex.ts +2 -2
  202. package/src/intervalIndex/endpointIndex.ts +2 -2
  203. package/src/intervalIndex/idIntervalIndex.ts +2 -2
  204. package/src/intervalIndex/intervalIndex.ts +1 -1
  205. package/src/intervalIndex/overlappingIntervalsIndex.ts +2 -2
  206. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +1 -1
  207. package/src/intervalIndex/sequenceIntervalIndexes.ts +2 -1
  208. package/src/intervalIndex/startpointInRangeIndex.ts +2 -2
  209. package/src/intervalTree.ts +0 -3
  210. package/src/intervals/interval.ts +7 -26
  211. package/src/intervals/intervalUtils.ts +17 -20
  212. package/src/intervals/sequenceInterval.ts +7 -35
  213. package/src/localValues.ts +2 -1
  214. package/src/packageVersion.ts +1 -1
  215. package/src/revertibles.ts +20 -19
  216. package/src/sequence.ts +61 -43
  217. package/src/sequenceDeltaEvent.ts +12 -6
  218. package/src/sequenceFactory.ts +1 -1
  219. package/src/sharedIntervalCollection.ts +3 -3
  220. package/src/sharedSequence.ts +12 -6
  221. package/src/sharedString.ts +21 -48
  222. package/tsconfig.json +1 -0
@@ -3,10 +3,10 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- /* eslint-disable import/no-deprecated */
7
6
  /* eslint-disable no-bitwise */
8
7
 
9
8
  import {
9
+ // eslint-disable-next-line import/no-deprecated
10
10
  Client,
11
11
  PropertiesManager,
12
12
  PropertySet,
@@ -17,7 +17,7 @@ import { SequencePlace, Side } from "../intervalCollection";
17
17
 
18
18
  /**
19
19
  * Basic interval abstraction
20
- * @public
20
+ * @alpha
21
21
  */
22
22
  export interface IInterval {
23
23
  /**
@@ -46,7 +46,6 @@ export interface IInterval {
46
46
  compareEnd(b: IInterval): number;
47
47
  /**
48
48
  * Modifies one or more of the endpoints of this interval, returning a new interval representing the result.
49
- * @internal
50
49
  */
51
50
  modify(
52
51
  label: string,
@@ -65,14 +64,13 @@ export interface IInterval {
65
64
  * Unions this interval with `b`, returning a new interval.
66
65
  * The union operates as a convex hull, i.e. if the two intervals are disjoint, the return value includes
67
66
  * intermediate values between the two intervals.
68
- * @internal
69
67
  */
70
68
  union(b: IInterval): IInterval;
71
69
  }
72
70
 
73
71
  /**
74
72
  * Values are used in persisted formats (ops) and revertibles.
75
- * @alpha
73
+ * @internal
76
74
  */
77
75
  export const IntervalOpType = {
78
76
  ADD: "add",
@@ -81,16 +79,15 @@ export const IntervalOpType = {
81
79
  PROPERTY_CHANGED: "propertyChanged",
82
80
  POSITION_REMOVE: "positionRemove",
83
81
  } as const;
84
-
85
82
  /**
86
- * @public
83
+ * @internal
84
+ */
85
+ export type IntervalOpType = (typeof IntervalOpType)[keyof typeof IntervalOpType];
86
+ /**
87
+ * @alpha
87
88
  */
88
89
  export enum IntervalType {
89
90
  Simple = 0x0,
90
- /**
91
- * @deprecated this functionality is no longer supported and will be removed
92
- */
93
- Nest = 0x1,
94
91
 
95
92
  /**
96
93
  * SlideOnRemove indicates that the ends of the interval will slide if the segment
@@ -110,7 +107,7 @@ export enum IntervalType {
110
107
  /**
111
108
  * Serialized object representation of an interval.
112
109
  * This representation is used for ops that create or change intervals.
113
- * @internal
110
+ * @alpha
114
111
  */
115
112
  export interface ISerializedInterval {
116
113
  /**
@@ -138,16 +135,16 @@ export interface ISerializedInterval {
138
135
  }
139
136
 
140
137
  /**
141
- * @public
138
+ * @alpha
142
139
  */
143
140
  export interface ISerializableInterval extends IInterval {
144
141
  /** Serializable bag of properties associated with the interval. */
145
142
  properties: PropertySet;
146
- /** @internal */
143
+ /***/
147
144
  propertyManager: PropertiesManager;
148
- /** @internal */
145
+ /***/
149
146
  serialize(): ISerializedInterval;
150
- /** @internal */
147
+ /***/
151
148
  addProperties(
152
149
  props: PropertySet,
153
150
  collaborating?: boolean,
@@ -202,7 +199,7 @@ export type CompressedSerializedInterval =
202
199
  /**
203
200
  * @sealed
204
201
  * @deprecated The methods within have substitutions
205
- * @public
202
+ * @internal
206
203
  */
207
204
  export interface IIntervalHelpers<TInterval extends ISerializableInterval> {
208
205
  /**
@@ -224,6 +221,7 @@ export interface IIntervalHelpers<TInterval extends ISerializableInterval> {
224
221
  label: string,
225
222
  start: SequencePlace | undefined,
226
223
  end: SequencePlace | undefined,
224
+ // eslint-disable-next-line import/no-deprecated
227
225
  client: Client | undefined,
228
226
  intervalType: IntervalType,
229
227
  op?: ISequencedDocumentMessage,
@@ -239,7 +237,7 @@ export interface IIntervalHelpers<TInterval extends ISerializableInterval> {
239
237
  * Note that interval stickiness is currently an experimental feature and must
240
238
  * be explicitly enabled with the `intervalStickinessEnabled` flag
241
239
  *
242
- * @internal
240
+ * @alpha
243
241
  */
244
242
  export const IntervalStickiness = {
245
243
  /**
@@ -271,8 +269,7 @@ export const IntervalStickiness = {
271
269
  *
272
270
  * Note that interval stickiness is currently an experimental feature and must
273
271
  * be explicitly enabled with the `intervalStickinessEnabled` flag
274
- *
275
- * @internal
272
+ * @alpha
276
273
  */
277
274
  export type IntervalStickiness = (typeof IntervalStickiness)[keyof typeof IntervalStickiness];
278
275
 
@@ -8,7 +8,6 @@
8
8
 
9
9
  import {
10
10
  Client,
11
- ICombiningOp,
12
11
  ISegment,
13
12
  LocalReferencePosition,
14
13
  PropertiesManager,
@@ -100,22 +99,20 @@ function maxSide(sideA: Side, sideB: Side): Side {
100
99
  * `mergeTreeReferencesCanSlideToEndpoint` feature flag set to true, the endpoints
101
100
  * of the interval that are exclusive will have the ability to slide to these
102
101
  * special endpoint segments.
103
- * @public
102
+ * @alpha
104
103
  */
105
104
  export class SequenceInterval implements ISerializableInterval {
106
105
  /**
107
106
  * {@inheritDoc ISerializableInterval.properties}
108
107
  */
109
- public properties: PropertySet;
108
+ public properties: PropertySet = createMap<any>();
109
+
110
110
  /**
111
111
  * {@inheritDoc ISerializableInterval.propertyManager}
112
- * @internal
113
112
  */
114
- public propertyManager: PropertiesManager;
113
+ public propertyManager: PropertiesManager = new 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();
@@ -144,9 +141,6 @@ export class SequenceInterval implements ISerializableInterval {
144
141
  public readonly startSide: Side = Side.Before,
145
142
  public readonly endSide: Side = Side.Before,
146
143
  ) {
147
- this.propertyManager = new PropertiesManager();
148
- this.properties = {};
149
-
150
144
  if (props) {
151
145
  this.addProperties(props);
152
146
  }
@@ -156,7 +150,6 @@ export class SequenceInterval implements ISerializableInterval {
156
150
 
157
151
  /**
158
152
  * Subscribes to position change events on this interval if there are no current listeners.
159
- * @internal
160
153
  */
161
154
  public addPositionChangeListeners(
162
155
  beforePositionChange: () => void,
@@ -177,7 +170,6 @@ export class SequenceInterval implements ISerializableInterval {
177
170
 
178
171
  /**
179
172
  * Removes the currently subscribed position change listeners.
180
- * @internal
181
173
  */
182
174
  public removePositionChangeListeners(): void {
183
175
  if (this.callbacks) {
@@ -189,7 +181,6 @@ export class SequenceInterval implements ISerializableInterval {
189
181
 
190
182
  /**
191
183
  * {@inheritDoc ISerializableInterval.serialize}
192
- * @internal
193
184
  */
194
185
  public serialize(): ISerializedInterval {
195
186
  const startPosition = this.client.localReferencePositionToPosition(this.start);
@@ -299,7 +290,6 @@ export class SequenceInterval implements ISerializableInterval {
299
290
 
300
291
  /**
301
292
  * {@inheritDoc IInterval.union}
302
- * @internal
303
293
  */
304
294
  public union(b: SequenceInterval) {
305
295
  const newStart = minReferencePosition(this.start, b.start);
@@ -334,16 +324,13 @@ export class SequenceInterval implements ISerializableInterval {
334
324
 
335
325
  /**
336
326
  * {@inheritDoc ISerializableInterval.addProperties}
337
- * @internal
338
327
  */
339
328
  public addProperties(
340
329
  newProps: PropertySet,
341
330
  collab: boolean = false,
342
331
  seq?: number,
343
- op?: ICombiningOp,
344
332
  ): PropertySet | undefined {
345
- this.initializeProperties();
346
- return this.propertyManager.addProperties(this.properties, newProps, op, seq, collab);
333
+ return this.propertyManager.addProperties(this.properties, newProps, seq, collab);
347
334
  }
348
335
 
349
336
  /**
@@ -357,7 +344,6 @@ export class SequenceInterval implements ISerializableInterval {
357
344
 
358
345
  /**
359
346
  * {@inheritDoc IInterval.modify}
360
- * @internal
361
347
  */
362
348
  public modify(
363
349
  label: string,
@@ -429,7 +415,6 @@ export class SequenceInterval implements ISerializableInterval {
429
415
  endSide ?? this.endSide,
430
416
  );
431
417
  if (this.properties) {
432
- newInterval.initializeProperties();
433
418
  this.propertyManager.copyTo(
434
419
  this.properties,
435
420
  newInterval.properties,
@@ -438,15 +423,6 @@ export class SequenceInterval implements ISerializableInterval {
438
423
  }
439
424
  return newInterval;
440
425
  }
441
-
442
- private initializeProperties(): void {
443
- if (!this.propertyManager) {
444
- this.propertyManager = new PropertiesManager();
445
- }
446
- if (!this.properties) {
447
- this.properties = createMap<any>();
448
- }
449
- }
450
426
  }
451
427
 
452
428
  export function createPositionReferenceFromSegoff(
@@ -577,10 +553,6 @@ export function createSequenceInterval(
577
553
  beginRefType = ReferenceType.Transient;
578
554
  endRefType = ReferenceType.Transient;
579
555
  } else {
580
- if (intervalType === IntervalType.Nest) {
581
- beginRefType = ReferenceType.NestBegin;
582
- endRefType = ReferenceType.NestEnd;
583
- }
584
556
  // All non-transient interval references must eventually be SlideOnRemove
585
557
  // To ensure eventual consistency, they must start as StayOnRemove when
586
558
  // pending (created locally and creation op is not acked)
@@ -637,7 +609,7 @@ export function createSequenceInterval(
637
609
 
638
610
  /**
639
611
  * @deprecated The methods within have substitutions
640
- * @public
612
+ * @internal
641
613
  */
642
614
  export const sequenceIntervalHelpers: IIntervalHelpers<SequenceInterval> = {
643
615
  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.3.0";
9
+ export const pkgVersion = "2.0.0-internal.8.0.0";
@@ -3,7 +3,6 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- /* eslint-disable import/no-deprecated */
7
6
  /* eslint-disable no-bitwise */
8
7
 
9
8
  import { assert, unreachableCase } from "@fluidframework/core-utils";
@@ -19,6 +18,7 @@ import {
19
18
  ReferenceType,
20
19
  refTypeIncludesFlag,
21
20
  revertMergeTreeDeltaRevertibles,
21
+ // eslint-disable-next-line import/no-deprecated
22
22
  SortedSet,
23
23
  getSlideToSegoff,
24
24
  SlidingPreference,
@@ -30,19 +30,15 @@ import { ISequenceDeltaRange, SequenceDeltaEvent } from "./sequenceDeltaEvent";
30
30
 
31
31
  /**
32
32
  * Data for undoing edits on SharedStrings and Intervals.
33
- *
34
- * @alpha
33
+ * @internal
35
34
  */
36
35
  export type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;
37
36
 
38
37
  const idMap = new Map<string, string>();
39
38
 
40
- type IntervalOpType = (typeof IntervalOpType)[keyof typeof IntervalOpType];
41
-
42
39
  /**
43
40
  * Data for undoing edits affecting Intervals.
44
- *
45
- * @alpha
41
+ * @internal
46
42
  */
47
43
  export type IntervalRevertible =
48
44
  | {
@@ -96,7 +92,7 @@ function getUpdatedId(intervalId: string): string {
96
92
 
97
93
  /**
98
94
  * Create revertibles for adding an interval
99
- * @alpha
95
+ * @internal
100
96
  */
101
97
  export function appendAddIntervalToRevertibles(
102
98
  interval: SequenceInterval,
@@ -112,19 +108,25 @@ export function appendAddIntervalToRevertibles(
112
108
 
113
109
  /**
114
110
  * Create revertibles for deleting an interval
115
- * @alpha
111
+ * @internal
116
112
  */
117
113
  export function appendDeleteIntervalToRevertibles(
118
114
  string: SharedString,
119
115
  interval: SequenceInterval,
120
116
  revertibles: SharedStringRevertible[],
121
- ) {
122
- const startSeg = interval.start.getSegment() as SharedStringSegment;
117
+ ): SharedStringRevertible[] {
118
+ const startSeg = interval.start.getSegment() as SharedStringSegment | undefined;
119
+ if (!startSeg) {
120
+ return revertibles;
121
+ }
123
122
  const startType =
124
123
  startSeg.removedSeq !== undefined
125
124
  ? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin
126
125
  : ReferenceType.StayOnRemove | ReferenceType.RangeBegin;
127
- const endSeg = interval.end.getSegment() as SharedStringSegment;
126
+ const endSeg = interval.end.getSegment() as SharedStringSegment | undefined;
127
+ if (!endSeg) {
128
+ return revertibles;
129
+ }
128
130
  const endType =
129
131
  endSeg.removedSeq !== undefined
130
132
  ? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd
@@ -158,7 +160,7 @@ export function appendDeleteIntervalToRevertibles(
158
160
 
159
161
  /**
160
162
  * Create revertibles for moving endpoints of an interval
161
- * @alpha
163
+ * @internal
162
164
  */
163
165
  export function appendChangeIntervalToRevertibles(
164
166
  string: SharedString,
@@ -208,7 +210,7 @@ export function appendChangeIntervalToRevertibles(
208
210
 
209
211
  /**
210
212
  * Create revertibles for changing properties of an interval
211
- * @alpha
213
+ * @internal
212
214
  */
213
215
  export function appendIntervalPropertyChangedToRevertibles(
214
216
  interval: SequenceInterval,
@@ -268,8 +270,7 @@ function addIfRevertibleRef(
268
270
  /**
269
271
  * Create revertibles for SharedStringDeltas, handling indirectly modified intervals
270
272
  * (e.g. reverting remove of a range that contains an interval will move the interval back)
271
- *
272
- * @alpha
273
+ * @internal
273
274
  */
274
275
  export function appendSharedStringDeltaToRevertibles(
275
276
  string: SharedString,
@@ -362,7 +363,7 @@ export function appendSharedStringDeltaToRevertibles(
362
363
 
363
364
  /**
364
365
  * Clean up resources held by revertibles that are no longer needed.
365
- * @alpha
366
+ * @internal
366
367
  */
367
368
  export function discardSharedStringRevertibles(
368
369
  sharedString: SharedString,
@@ -565,6 +566,7 @@ interface RangeInfo {
565
566
  length: number;
566
567
  }
567
568
 
569
+ // eslint-disable-next-line import/no-deprecated
568
570
  class SortedRangeSet extends SortedSet<RangeInfo, string> {
569
571
  protected getKey(item: RangeInfo): string {
570
572
  return item.ranges[0].segment.ordinal;
@@ -654,8 +656,7 @@ function revertLocalSequenceRemove(
654
656
 
655
657
  /**
656
658
  * Invoke revertibles to reverse prior edits
657
- *
658
- * @alpha
659
+ * @internal
659
660
  */
660
661
  export function revertSharedStringRevertibles(
661
662
  sharedString: SharedString,
package/src/sequence.ts CHANGED
@@ -3,8 +3,6 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- /* eslint-disable import/no-deprecated */
7
-
8
6
  import { assert, Deferred } from "@fluidframework/core-utils";
9
7
  import { bufferToString } from "@fluid-internal/client-utils";
10
8
  import { LoggingError, createChildLogger } from "@fluidframework/telemetry-utils";
@@ -15,12 +13,13 @@ import {
15
13
  IChannelStorageService,
16
14
  } from "@fluidframework/datastore-definitions";
17
15
  import {
16
+ // eslint-disable-next-line import/no-deprecated
18
17
  Client,
19
18
  createAnnotateRangeOp,
19
+ // eslint-disable-next-line import/no-deprecated
20
20
  createGroupOp,
21
21
  createInsertOp,
22
22
  createRemoveRangeOp,
23
- ICombiningOp,
24
23
  IJSONSegment,
25
24
  IMergeTreeAnnotateMsg,
26
25
  IMergeTreeDeltaOp,
@@ -34,11 +33,12 @@ import {
34
33
  matchProperties,
35
34
  MergeTreeDeltaType,
36
35
  PropertySet,
37
- RangeStackMap,
38
36
  ReferencePosition,
39
37
  ReferenceType,
40
38
  MergeTreeRevertibleDriver,
41
39
  SegmentGroup,
40
+ IMergeTreeObliterateMsg,
41
+ createObliterateRangeOp,
42
42
  SlidingPreference,
43
43
  } from "@fluidframework/merge-tree";
44
44
  import { ObjectStoragePartition, SummaryTreeBuilder } from "@fluidframework/runtime-utils";
@@ -98,25 +98,25 @@ const contentPath = "content";
98
98
  * - `event` - Various information on the segments that were modified.
99
99
  *
100
100
  * - `target` - The sequence itself.
101
- * @public
101
+ * @alpha
102
102
  */
103
103
  export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
104
104
  (
105
105
  event: "createIntervalCollection",
106
106
  listener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void,
107
- );
107
+ ): void;
108
108
  (
109
109
  event: "sequenceDelta",
110
110
  listener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void,
111
- );
111
+ ): void;
112
112
  (
113
113
  event: "maintenance",
114
114
  listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void,
115
- );
115
+ ): void;
116
116
  }
117
117
 
118
118
  /**
119
- * @public
119
+ * @alpha
120
120
  */
121
121
  export abstract class SharedSegmentSequence<T extends ISegment>
122
122
  extends SharedObject<ISharedSegmentSequenceEvents>
@@ -137,7 +137,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
137
137
  *
138
138
  * An application using SharedString which explicitly wants to opt in to allowing reentrancy anyway can set `sharedStringPreventReentrancy`
139
139
  * on the data store options to `false`.
140
- * @internal
141
140
  */
142
141
  protected guardReentrancy: <TRet>(callback: () => TRet) => TRet;
143
142
 
@@ -147,7 +146,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
147
146
  switch (event.deltaOperation) {
148
147
  case MergeTreeDeltaType.ANNOTATE: {
149
148
  const lastAnnotate = ops[ops.length - 1] as IMergeTreeAnnotateMsg;
150
- const props = {};
149
+ const props: PropertySet = {};
151
150
  for (const key of Object.keys(r.propertyDeltas)) {
152
151
  props[key] = r.segment.properties?.[key] ?? null;
153
152
  }
@@ -163,7 +162,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
163
162
  r.position,
164
163
  r.position + r.segment.cachedLength,
165
164
  props,
166
- undefined,
167
165
  ),
168
166
  );
169
167
  }
@@ -190,12 +188,32 @@ export abstract class SharedSegmentSequence<T extends ISegment>
190
188
  break;
191
189
  }
192
190
 
191
+ case MergeTreeDeltaType.OBLITERATE: {
192
+ const lastRem = ops[ops.length - 1] as IMergeTreeObliterateMsg;
193
+ if (lastRem?.pos1 === r.position) {
194
+ assert(
195
+ lastRem.pos2 !== undefined,
196
+ 0x874 /* pos2 should not be undefined here */,
197
+ );
198
+ lastRem.pos2 += r.segment.cachedLength;
199
+ } else {
200
+ ops.push(
201
+ createObliterateRangeOp(
202
+ r.position,
203
+ r.position + r.segment.cachedLength,
204
+ ),
205
+ );
206
+ }
207
+ break;
208
+ }
209
+
193
210
  default:
194
211
  }
195
212
  }
196
213
  return ops;
197
214
  }
198
215
 
216
+ // eslint-disable-next-line import/no-deprecated
199
217
  protected client: Client;
200
218
  /** `Deferred` that triggers once the object is loaded */
201
219
  protected loadedDeferred = new Deferred<void>();
@@ -233,6 +251,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
233
251
  this.logger.sendErrorEvent({ eventName: "SequenceLoadFailed" }, error);
234
252
  });
235
253
 
254
+ // eslint-disable-next-line import/no-deprecated
236
255
  this.client = new Client(
237
256
  segmentFromSpec,
238
257
  createChildLogger({
@@ -267,12 +286,25 @@ export abstract class SharedSegmentSequence<T extends ISegment>
267
286
  * @param start - The inclusive start of the range to remove
268
287
  * @param end - The exclusive end of the range to remove
269
288
  */
270
- public removeRange(start: number, end: number): IMergeTreeRemoveMsg {
271
- return this.guardReentrancy(() => this.client.removeRangeLocal(start, end));
289
+ public removeRange(start: number, end: number): void {
290
+ this.guardReentrancy(() => this.client.removeRangeLocal(start, end));
272
291
  }
273
292
 
274
293
  /**
275
- * @deprecated The ability to create group ops will be removed in an upcoming release, as group ops are redundant with the native batching capabilities of the runtime
294
+ * Obliterate is similar to remove, but differs in that segments concurrently
295
+ * inserted into an obliterated range will also be removed
296
+ *
297
+ * @param start - The inclusive start of the range to obliterate
298
+ * @param end - The exclusive end of the range to obliterate
299
+ */
300
+ public obliterateRange(start: number, end: number): void {
301
+ this.guardReentrancy(() => this.client.obliterateRangeLocal(start, end));
302
+ }
303
+
304
+ /**
305
+ * @deprecated The ability to create group ops will be removed in an upcoming
306
+ * release, as group ops are redundant with the native batching capabilities
307
+ * of the runtime
276
308
  */
277
309
  public groupOperation(groupOp: IMergeTreeGroupMsg) {
278
310
  this.guardReentrancy(() => this.client.localTransaction(groupOp));
@@ -312,16 +344,10 @@ export abstract class SharedSegmentSequence<T extends ISegment>
312
344
  * @param start - The inclusive start position of the range to annotate
313
345
  * @param end - The exclusive end position of the range to annotate
314
346
  * @param props - The properties to annotate the range with
315
- * @param combiningOp - Optional. Specifies how to combine values for the property, such as "incr" for increment.
316
347
  *
317
348
  */
318
- public annotateRange(
319
- start: number,
320
- end: number,
321
- props: PropertySet,
322
- combiningOp?: ICombiningOp,
323
- ) {
324
- this.guardReentrancy(() => this.client.annotateRangeLocal(start, end, props, combiningOp));
349
+ public annotateRange(start: number, end: number, props: PropertySet): void {
350
+ this.guardReentrancy(() => this.client.annotateRangeLocal(start, end, props));
325
351
  }
326
352
 
327
353
  public getPropertiesAtPosition(pos: number) {
@@ -398,10 +424,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
398
424
  );
399
425
  }
400
426
 
401
- /**
402
- * @deprecated This method will no longer be public in an upcoming release as it is not safe to use outside of this class
403
- */
404
- public submitSequenceMessage(message: IMergeTreeOp) {
427
+ private submitSequenceMessage(message: IMergeTreeOp) {
405
428
  if (!this.isAttached()) {
406
429
  return;
407
430
  }
@@ -412,7 +435,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
412
435
 
413
436
  // if loading isn't complete, we need to cache
414
437
  // local ops until loading is complete, and then
415
- // they will be resent
438
+ // they will be present
416
439
  if (!this.loadedDeferred.isCompleted) {
417
440
  this.loadedDeferredOutgoingOps.push(metadata ? [translated, metadata] : translated);
418
441
  } else {
@@ -431,12 +454,13 @@ export abstract class SharedSegmentSequence<T extends ISegment>
431
454
 
432
455
  /**
433
456
  * Walk the underlying segments of the sequence.
434
- * The walked segments may extend beyond the range
435
- * if the segments cross the ranges start or end boundaries.
436
- * Set split range to true to ensure only segments within the
437
- * range are walked.
457
+ * The walked segments may extend beyond the range if the segments cross the
458
+ * ranges start or end boundaries.
438
459
  *
439
- * @param handler - The function to handle each segment
460
+ * Set split range to true to ensure only segments within the range are walked.
461
+ *
462
+ * @param handler - The function to handle each segment. Traversal ends if
463
+ * this function returns true.
440
464
  * @param start - Optional. The start of range walk.
441
465
  * @param end - Optional. The end of range walk
442
466
  * @param accum - Optional. An object that will be passed to the handler for accumulation
@@ -452,13 +476,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
452
476
  this.client.walkSegments(handler, start, end, accum as TClientData, splitRange);
453
477
  }
454
478
 
455
- /**
456
- * @deprecated this functionality is no longer supported and will be removed
457
- */
458
- public getStackContext(startPos: number, rangeLabels: string[]): RangeStackMap {
459
- return this.client.getStackContext(startPos, rangeLabels);
460
- }
461
-
462
479
  /**
463
480
  * @returns The most recent sequence number which has been acked by the server and processed by this
464
481
  * SharedSegmentSequence.
@@ -472,7 +489,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
472
489
  * @param refPos - The reference position to insert the segment at
473
490
  * @param segment - The segment to insert
474
491
  */
475
- public insertAtReferencePosition(pos: ReferencePosition, segment: T) {
492
+ public insertAtReferencePosition(pos: ReferencePosition, segment: T): void {
476
493
  this.guardReentrancy(() => this.client.insertAtReferencePositionLocal(pos, segment));
477
494
  }
478
495
  /**
@@ -480,7 +497,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
480
497
  * @param start - The position to insert the segment at
481
498
  * @param spec - The segment to inserts spec
482
499
  */
483
- public insertFromSpec(pos: number, spec: IJSONSegment) {
500
+ public insertFromSpec(pos: number, spec: IJSONSegment): void {
484
501
  const segment = this.segmentFromSpec(spec);
485
502
  this.guardReentrancy(() => this.client.insertSegmentLocal(pos, segment));
486
503
  }
@@ -550,7 +567,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
550
567
  * @param end - The end of the range to replace
551
568
  * @param segment - The segment that will replace the range
552
569
  */
553
- protected replaceRange(start: number, end: number, segment: ISegment) {
570
+ protected replaceRange(start: number, end: number, segment: ISegment): void {
554
571
  // Insert at the max end of the range when start > end, but still remove the range later
555
572
  const insertIndex: number = Math.max(start, end);
556
573
 
@@ -764,6 +781,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
764
781
  stashMessage = {
765
782
  ...message,
766
783
  referenceSequenceNumber: stashMessage.sequenceNumber - 1,
784
+ // eslint-disable-next-line import/no-deprecated
767
785
  contents: ops.length !== 1 ? createGroupOp(...ops) : ops[0],
768
786
  };
769
787
  }