@fluidframework/sequence 0.59.4000 → 1.0.1

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.
package/.eslintrc.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  module.exports = {
7
7
  "extends": [
8
- "@fluidframework/eslint-config-fluid"
8
+ require.resolve("@fluidframework/eslint-config-fluid")
9
9
  ],
10
10
  "parserOptions": {
11
11
  "project": ["./tsconfig.json", "./src/test/tsconfig.json"]
@@ -10,7 +10,17 @@ import { IValueFactory, IValueOpEmitter, IValueOperation, IValueType } from "./d
10
10
  export declare enum IntervalType {
11
11
  Simple = 0,
12
12
  Nest = 1,
13
+ /**
14
+ * SlideOnRemove indicates that the ends of the interval will slide if the segment
15
+ * they reference is removed and acked.
16
+ * See `packages\dds\merge-tree\REFERENCEPOSITIONS.md` for details
17
+ * SlideOnRemove is the default interval behavior and does not need to be specified.
18
+ */
13
19
  SlideOnRemove = 2,
20
+ /**
21
+ * @internal
22
+ * A temporary interval, used internally
23
+ */
14
24
  Transient = 4
15
25
  }
16
26
  export interface ISerializedInterval {
@@ -145,6 +155,14 @@ export declare class IntervalCollection<TInterval extends ISerializableInterval>
145
155
  constructor(helpers: IIntervalHelpers<TInterval>, requiresClient: boolean, emitter: IValueOpEmitter, serializedIntervals: ISerializedInterval[]);
146
156
  attachGraph(client: Client, label: string): void;
147
157
  getIntervalById(id: string): TInterval;
158
+ /**
159
+ * Create a new interval and add it to the collection
160
+ * @param start - interval start position
161
+ * @param end - interval end position
162
+ * @param intervalType - type of the interval. All intervals are SlideOnRemove. Intervals may not be Transient.
163
+ * @param props - properties of the interval
164
+ * @returns - the created interval
165
+ */
148
166
  add(start: number, end: number, intervalType: IntervalType, props?: PropertySet): TInterval;
149
167
  private deleteExistingInterval;
150
168
  removeIntervalById(id: string): TInterval;
@@ -162,6 +180,9 @@ export declare class IntervalCollection<TInterval extends ISerializableInterval>
162
180
  ackChange(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage): void;
163
181
  addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>): void;
164
182
  attachDeserializer(onDeserialize: DeserializeCallback): void;
183
+ private getSlideToSegment;
184
+ private setSlideOnRemove;
185
+ private ackInterval;
165
186
  /** @deprecated - use ackAdd */
166
187
  addInternal(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage): TInterval;
167
188
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.IntervalCollection = exports.IntervalCollectionIterator = exports.IntervalCollectionValueType = exports.SequenceIntervalCollectionValueType = exports.LocalIntervalCollection = exports.createIntervalIndex = exports.defaultIntervalConflictResolver = exports.SequenceInterval = exports.Interval = exports.IntervalType = void 0;
19
19
  /* eslint-disable no-bitwise */
20
20
  const common_utils_1 = require("@fluidframework/common-utils");
21
+ const container_utils_1 = require("@fluidframework/container-utils");
21
22
  const merge_tree_1 = require("@fluidframework/merge-tree");
22
23
  const uuid_1 = require("uuid");
23
24
  const reservedIntervalIdKey = "intervalId";
@@ -25,7 +26,17 @@ var IntervalType;
25
26
  (function (IntervalType) {
26
27
  IntervalType[IntervalType["Simple"] = 0] = "Simple";
27
28
  IntervalType[IntervalType["Nest"] = 1] = "Nest";
29
+ /**
30
+ * SlideOnRemove indicates that the ends of the interval will slide if the segment
31
+ * they reference is removed and acked.
32
+ * See `packages\dds\merge-tree\REFERENCEPOSITIONS.md` for details
33
+ * SlideOnRemove is the default interval behavior and does not need to be specified.
34
+ */
28
35
  IntervalType[IntervalType["SlideOnRemove"] = 2] = "SlideOnRemove";
36
+ /**
37
+ * @internal
38
+ * A temporary interval, used internally
39
+ */
29
40
  IntervalType[IntervalType["Transient"] = 4] = "Transient";
30
41
  })(IntervalType = exports.IntervalType || (exports.IntervalType = {}));
31
42
  class Interval {
@@ -234,46 +245,66 @@ class SequenceInterval {
234
245
  }
235
246
  }
236
247
  exports.SequenceInterval = SequenceInterval;
237
- function createPositionReference(client, pos, refType, op) {
238
- const segoff = client.getContainingSegment(pos, op);
239
- if (segoff === null || segoff === void 0 ? void 0 : segoff.segment) {
240
- const lref = new merge_tree_1.LocalReference(client, segoff.segment, segoff.offset, refType);
241
- if (refType !== merge_tree_1.ReferenceType.Transient) {
242
- client.addLocalReference(lref);
248
+ function createPositionReferenceFromSegoff(client, segoff, refType, op) {
249
+ if (segoff.segment) {
250
+ const ref = client.createLocalReferencePosition(segoff.segment, segoff.offset, refType, undefined);
251
+ return ref;
252
+ }
253
+ else {
254
+ if (!op && !(0, merge_tree_1.refTypeIncludesFlag)(refType, merge_tree_1.ReferenceType.Transient)) {
255
+ throw new container_utils_1.UsageError("Non-transient references need segment");
243
256
  }
244
- return lref;
257
+ return new merge_tree_1.LocalReference(client, undefined, 0, refType);
258
+ }
259
+ }
260
+ function createPositionReference(client, pos, refType, op) {
261
+ let segoff;
262
+ if (op) {
263
+ (0, common_utils_1.assert)((refType & merge_tree_1.ReferenceType.SlideOnRemove) !== 0, 0x2f5 /* op create references must be SlideOnRemove */);
264
+ segoff = client.getContainingSegment(pos, op);
265
+ segoff = client.getSlideToSegment(segoff);
266
+ }
267
+ else {
268
+ (0, common_utils_1.assert)((refType & merge_tree_1.ReferenceType.SlideOnRemove) === 0, 0x2f6 /* SlideOnRemove references must be op created */);
269
+ segoff = client.getContainingSegment(pos);
245
270
  }
246
- return new merge_tree_1.LocalReference(client, undefined);
271
+ return createPositionReferenceFromSegoff(client, segoff, refType, op);
247
272
  }
248
273
  function createSequenceInterval(label, start, end, client, intervalType, op) {
249
274
  let beginRefType = merge_tree_1.ReferenceType.RangeBegin;
250
275
  let endRefType = merge_tree_1.ReferenceType.RangeEnd;
251
- if (intervalType === IntervalType.Nest) {
252
- beginRefType = merge_tree_1.ReferenceType.NestBegin;
253
- endRefType = merge_tree_1.ReferenceType.NestEnd;
254
- }
255
- else if (intervalType === IntervalType.Transient) {
276
+ if (intervalType === IntervalType.Transient) {
256
277
  beginRefType = merge_tree_1.ReferenceType.Transient;
257
278
  endRefType = merge_tree_1.ReferenceType.Transient;
258
279
  }
259
- // TODO: Should SlideOnRemove be the default behavior?
260
- if (intervalType & IntervalType.SlideOnRemove) {
261
- beginRefType |= merge_tree_1.ReferenceType.SlideOnRemove;
262
- endRefType |= merge_tree_1.ReferenceType.SlideOnRemove;
280
+ else {
281
+ if (intervalType === IntervalType.Nest) {
282
+ beginRefType = merge_tree_1.ReferenceType.NestBegin;
283
+ endRefType = merge_tree_1.ReferenceType.NestEnd;
284
+ }
285
+ // All non-transient interval references must eventually be SlideOnRemove
286
+ // To ensure eventual consistency, they must start as StayOnRemove when
287
+ // pending (created locally and creation op is not acked)
288
+ if (op) {
289
+ beginRefType |= merge_tree_1.ReferenceType.SlideOnRemove;
290
+ endRefType |= merge_tree_1.ReferenceType.SlideOnRemove;
291
+ }
292
+ else {
293
+ beginRefType |= merge_tree_1.ReferenceType.StayOnRemove;
294
+ endRefType |= merge_tree_1.ReferenceType.StayOnRemove;
295
+ }
263
296
  }
264
297
  const startLref = createPositionReference(client, start, beginRefType, op);
265
298
  const endLref = createPositionReference(client, end, endRefType, op);
266
- if (startLref && endLref) {
267
- startLref.pairedRef = endLref;
268
- endLref.pairedRef = startLref;
269
- const rangeProp = {
270
- [merge_tree_1.reservedRangeLabelsKey]: [label],
271
- };
272
- startLref.addProperties(rangeProp);
273
- endLref.addProperties(rangeProp);
274
- const ival = new SequenceInterval(startLref, endLref, intervalType, rangeProp);
275
- return ival;
276
- }
299
+ startLref.pairedRef = endLref;
300
+ endLref.pairedRef = startLref;
301
+ const rangeProp = {
302
+ [merge_tree_1.reservedRangeLabelsKey]: [label],
303
+ };
304
+ startLref.addProperties(rangeProp);
305
+ endLref.addProperties(rangeProp);
306
+ const ival = new SequenceInterval(startLref, endLref, intervalType, rangeProp);
307
+ return ival;
277
308
  }
278
309
  function defaultIntervalConflictResolver(a, b) {
279
310
  a.addPropertySet(b.properties);
@@ -405,14 +436,12 @@ class LocalIntervalCollection {
405
436
  }
406
437
  }
407
438
  findOverlappingIntervals(startPosition, endPosition) {
408
- if (!this.intervalTree.intervals.isEmpty()) {
409
- const transientInterval = this.helpers.create("transient", startPosition, endPosition, this.client, IntervalType.Transient);
410
- const overlappingIntervalNodes = this.intervalTree.match(transientInterval);
411
- return overlappingIntervalNodes.map((node) => node.key);
412
- }
413
- else {
439
+ if (endPosition < startPosition || this.intervalTree.intervals.isEmpty()) {
414
440
  return [];
415
441
  }
442
+ const transientInterval = this.helpers.create("transient", startPosition, endPosition, this.client, IntervalType.Transient);
443
+ const overlappingIntervalNodes = this.intervalTree.match(transientInterval);
444
+ return overlappingIntervalNodes.map((node) => node.key);
416
445
  }
417
446
  previousInterval(pos) {
418
447
  const transientInterval = this.helpers.create("transient", pos, pos, this.client, IntervalType.Transient);
@@ -664,11 +693,22 @@ class IntervalCollection extends common_utils_1.TypedEventEmitter {
664
693
  }
665
694
  return this.localCollection.getIntervalById(id);
666
695
  }
696
+ /**
697
+ * Create a new interval and add it to the collection
698
+ * @param start - interval start position
699
+ * @param end - interval end position
700
+ * @param intervalType - type of the interval. All intervals are SlideOnRemove. Intervals may not be Transient.
701
+ * @param props - properties of the interval
702
+ * @returns - the created interval
703
+ */
667
704
  add(start, end, intervalType, props) {
668
705
  var _a, _b;
669
706
  if (!this.attached) {
670
707
  throw new Error("attach must be called prior to adding intervals");
671
708
  }
709
+ if (intervalType & IntervalType.Transient) {
710
+ throw new Error("Can not add transient intervals");
711
+ }
672
712
  const interval = this.localCollection.addInterval(start, end, intervalType, props);
673
713
  if (interval) {
674
714
  const serializedInterval = {
@@ -827,13 +867,15 @@ class IntervalCollection extends common_utils_1.TypedEventEmitter {
827
867
  // This is an ack from the server. Remove the pending change.
828
868
  this.removePendingChange(serializedInterval);
829
869
  const id = serializedInterval.properties[reservedIntervalIdKey];
870
+ // Could store the interval in the localOpMetadata to avoid the getIntervalById call
830
871
  interval = this.getIntervalById(id);
831
872
  if (interval) {
832
873
  // Let the propertyManager prune its pending change-properties set.
833
874
  (_a = interval.propertyManager) === null || _a === void 0 ? void 0 : _a.ackPendingProperties({
834
- type: 2 /* ANNOTATE */,
875
+ type: merge_tree_1.MergeTreeDeltaType.ANNOTATE,
835
876
  props: serializedInterval.properties,
836
877
  });
878
+ this.ackInterval(interval, op);
837
879
  }
838
880
  }
839
881
  else {
@@ -888,6 +930,46 @@ class IntervalCollection extends common_utils_1.TypedEventEmitter {
888
930
  this.onDeserialize(interval);
889
931
  });
890
932
  }
933
+ getSlideToSegment(lref) {
934
+ const segoff = { segment: lref.segment, offset: lref.offset };
935
+ const newSegoff = this.client.getSlideToSegment(segoff);
936
+ const value = (segoff === newSegoff) ? undefined : newSegoff;
937
+ return value;
938
+ }
939
+ setSlideOnRemove(lref) {
940
+ let refType = lref.refType;
941
+ refType = refType & ~merge_tree_1.ReferenceType.StayOnRemove;
942
+ refType = refType | merge_tree_1.ReferenceType.SlideOnRemove;
943
+ lref.refType = refType;
944
+ }
945
+ ackInterval(interval, op) {
946
+ // in current usage, interval is always a SequenceInterval
947
+ if (!(interval instanceof SequenceInterval)) {
948
+ return;
949
+ }
950
+ if (!(0, merge_tree_1.refTypeIncludesFlag)(interval.start, merge_tree_1.ReferenceType.StayOnRemove)) {
951
+ return;
952
+ }
953
+ (0, common_utils_1.assert)((0, merge_tree_1.refTypeIncludesFlag)(interval.end, merge_tree_1.ReferenceType.StayOnRemove), 0x2f7 /* start and end must both be StayOnRemove */);
954
+ const newStart = this.getSlideToSegment(interval.start);
955
+ const newEnd = this.getSlideToSegment(interval.end);
956
+ this.setSlideOnRemove(interval.start);
957
+ this.setSlideOnRemove(interval.end);
958
+ if (newStart || newEnd) {
959
+ this.localCollection.removeExistingInterval(interval);
960
+ if (newStart) {
961
+ const props = interval.start.properties;
962
+ interval.start = createPositionReferenceFromSegoff(this.client, newStart, interval.start.refType, op);
963
+ interval.start.addProperties(props);
964
+ }
965
+ if (newEnd) {
966
+ const props = interval.end.properties;
967
+ interval.end = createPositionReferenceFromSegoff(this.client, newEnd, interval.end.refType, op);
968
+ interval.end.addProperties(props);
969
+ }
970
+ this.localCollection.add(interval);
971
+ }
972
+ }
891
973
  /** @deprecated - use ackAdd */
892
974
  addInternal(serializedInterval, local, op) {
893
975
  return this.ackAdd(serializedInterval, local, op);
@@ -895,8 +977,12 @@ class IntervalCollection extends common_utils_1.TypedEventEmitter {
895
977
  /** @internal */
896
978
  ackAdd(serializedInterval, local, op) {
897
979
  if (local) {
898
- // Local ops were applied when the message was created and there's no "pending add"
899
- // state to bookkeep
980
+ const id = serializedInterval.properties[reservedIntervalIdKey];
981
+ // Could store the interval in the localOpMetadata to avoid the getIntervalById call
982
+ const localInterval = this.getIntervalById(id);
983
+ if (localInterval) {
984
+ this.ackInterval(localInterval, op);
985
+ }
900
986
  return;
901
987
  }
902
988
  if (!this.attached) {