@fluidframework/sequence 0.58.1000 → 0.58.1001

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.
@@ -59,7 +59,7 @@ export interface ISerializableInterval extends IInterval {
59
59
  export interface IIntervalHelpers<TInterval extends ISerializableInterval> {
60
60
  compareEnds(a: TInterval, b: TInterval): number;
61
61
  create(label: string, start: number, end: number,
62
- client: Client, intervalType?: IntervalType): TInterval;
62
+ client: Client, intervalType?: IntervalType, op?: ISequencedDocumentMessage): TInterval;
63
63
  }
64
64
 
65
65
  export class Interval implements ISerializableInterval {
@@ -179,7 +179,7 @@ export class Interval implements ISerializableInterval {
179
179
  }
180
180
  }
181
181
 
182
- public modify(label: string, start: number, end: number) {
182
+ public modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage) {
183
183
  const startPos = start ?? this.start;
184
184
  const endPos = end ?? this.end;
185
185
  if (this.start === startPos && this.end === endPos) {
@@ -294,16 +294,17 @@ export class SequenceInterval implements ISerializableInterval {
294
294
  return (endPos > bstart) && (startPos < bend);
295
295
  }
296
296
 
297
- public modify(label: string, start: number, end: number) {
298
- const startPos = start ?? this.start.getOffset();
299
- const endPos = end ?? this.end.getOffset();
297
+ public modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage) {
298
+ const startPos = start ?? this.start.toPosition();
299
+ const endPos = end ?? this.end.toPosition();
300
300
 
301
- if (this.start.getOffset() === startPos && this.end.getOffset() === endPos) {
301
+ if (this.start.toPosition() === startPos && this.end.toPosition() === endPos) {
302
302
  // Return undefined to indicate that no change is necessary.
303
303
  return;
304
304
  }
305
305
 
306
- const newInterval = createSequenceInterval(label, startPos, endPos, this.start.getClient(), this.intervalType);
306
+ const newInterval =
307
+ createSequenceInterval(label, startPos, endPos, this.start.getClient(), this.intervalType, op);
307
308
  if (this.properties) {
308
309
  newInterval.addProperties(this.properties);
309
310
  }
@@ -314,8 +315,9 @@ export class SequenceInterval implements ISerializableInterval {
314
315
  function createPositionReference(
315
316
  client: Client,
316
317
  pos: number,
317
- refType: ReferenceType): LocalReference {
318
- const segoff = client.getContainingSegment(pos);
318
+ refType: ReferenceType,
319
+ op?: ISequencedDocumentMessage): LocalReference {
320
+ const segoff = client.getContainingSegment(pos, op);
319
321
  if (segoff && segoff.segment) {
320
322
  const lref = new LocalReference(client, segoff.segment, segoff.offset, refType);
321
323
  if (refType !== ReferenceType.Transient) {
@@ -331,7 +333,8 @@ function createSequenceInterval(
331
333
  start: number,
332
334
  end: number,
333
335
  client: Client,
334
- intervalType: IntervalType): SequenceInterval {
336
+ intervalType: IntervalType,
337
+ op?: ISequencedDocumentMessage): SequenceInterval {
335
338
  let beginRefType = ReferenceType.RangeBegin;
336
339
  let endRefType = ReferenceType.RangeEnd;
337
340
  if (intervalType === IntervalType.Nest) {
@@ -348,8 +351,8 @@ function createSequenceInterval(
348
351
  endRefType |= ReferenceType.SlideOnRemove;
349
352
  }
350
353
 
351
- const startLref = createPositionReference(client, start, beginRefType);
352
- const endLref = createPositionReference(client, end, endRefType);
354
+ const startLref = createPositionReference(client, start, beginRefType, op);
355
+ const endLref = createPositionReference(client, end, endRefType, op);
353
356
  if (startLref && endLref) {
354
357
  startLref.pairedRef = endLref;
355
358
  endLref.pairedRef = startLref;
@@ -570,16 +573,21 @@ export class LocalIntervalCollection<TInterval extends ISerializableInterval> {
570
573
  this.endIntervalTree.remove(interval);
571
574
  }
572
575
 
573
- public createInterval(start: number, end: number, intervalType: IntervalType): TInterval {
574
- return this.helpers.create(this.label, start, end, this.client, intervalType);
576
+ public createInterval(
577
+ start: number,
578
+ end: number,
579
+ intervalType: IntervalType,
580
+ op?: ISequencedDocumentMessage): TInterval {
581
+ return this.helpers.create(this.label, start, end, this.client, intervalType, op);
575
582
  }
576
583
 
577
584
  public addInterval(
578
585
  start: number,
579
586
  end: number,
580
587
  intervalType: IntervalType,
581
- props?: PropertySet) {
582
- const interval: TInterval = this.createInterval(start, end, intervalType);
588
+ props?: PropertySet,
589
+ op?: ISequencedDocumentMessage) {
590
+ const interval: TInterval = this.createInterval(start, end, intervalType, op);
583
591
  if (interval) {
584
592
  if (!interval.properties) {
585
593
  interval.properties = createMap<any>();
@@ -619,8 +627,8 @@ export class LocalIntervalCollection<TInterval extends ISerializableInterval> {
619
627
  return result;
620
628
  }
621
629
 
622
- public changeInterval(interval: TInterval, start: number, end: number) {
623
- const newInterval = interval.modify(this.label, start, end) as TInterval | undefined;
630
+ public changeInterval(interval: TInterval, start: number, end: number, op?: ISequencedDocumentMessage) {
631
+ const newInterval = interval.modify(this.label, start, end, op) as TInterval | undefined;
624
632
  if (newInterval) {
625
633
  this.removeExistingInterval(interval);
626
634
  this.add(newInterval);
@@ -1096,7 +1104,7 @@ export class IntervalCollection<TInterval extends ISerializableInterval>
1096
1104
  if (start !== undefined || end !== undefined) {
1097
1105
  // If changeInterval gives us a new interval, work with that one. Otherwise keep working with
1098
1106
  // the one we originally found in the tree.
1099
- interval = this.localCollection.changeInterval(interval, start, end) ?? interval;
1107
+ interval = this.localCollection.changeInterval(interval, start, end, op) ?? interval;
1100
1108
  }
1101
1109
  const deltaProps = interval.addProperties(serializedInterval.properties, true, op.sequenceNumber);
1102
1110
  if (this.onDeserialize) {
@@ -1144,7 +1152,8 @@ export class IntervalCollection<TInterval extends ISerializableInterval>
1144
1152
  serializedInterval.start,
1145
1153
  serializedInterval.end,
1146
1154
  serializedInterval.intervalType,
1147
- serializedInterval.properties);
1155
+ serializedInterval.properties,
1156
+ op);
1148
1157
 
1149
1158
  if (interval) {
1150
1159
  // Local ops get submitted to the server. Remote ops have the deserializer run.
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/sequence";
9
- export const pkgVersion = "0.58.1000";
9
+ export const pkgVersion = "0.58.1001";