@fluidframework/sequence 0.56.9 → 0.56.10

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/sequence",
3
- "version": "0.56.9",
3
+ "version": "0.56.10",
4
4
  "description": "Distributed sequence",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": "https://github.com/microsoft/FluidFramework",
@@ -60,23 +60,23 @@
60
60
  "@fluidframework/common-definitions": "^0.20.1",
61
61
  "@fluidframework/common-utils": "^0.32.1",
62
62
  "@fluidframework/core-interfaces": "^0.42.0",
63
- "@fluidframework/datastore-definitions": "^0.56.9",
64
- "@fluidframework/merge-tree": "^0.56.9",
63
+ "@fluidframework/datastore-definitions": "^0.56.10",
64
+ "@fluidframework/merge-tree": "^0.56.10",
65
65
  "@fluidframework/protocol-definitions": "^0.1026.0",
66
- "@fluidframework/runtime-definitions": "^0.56.9",
67
- "@fluidframework/runtime-utils": "^0.56.9",
68
- "@fluidframework/shared-object-base": "^0.56.9",
69
- "@fluidframework/telemetry-utils": "^0.56.9",
66
+ "@fluidframework/runtime-definitions": "^0.56.10",
67
+ "@fluidframework/runtime-utils": "^0.56.10",
68
+ "@fluidframework/shared-object-base": "^0.56.10",
69
+ "@fluidframework/telemetry-utils": "^0.56.10",
70
70
  "uuid": "^8.3.1"
71
71
  },
72
72
  "devDependencies": {
73
- "@fluid-internal/test-dds-utils": "^0.56.9",
73
+ "@fluid-internal/test-dds-utils": "^0.56.10",
74
74
  "@fluidframework/build-common": "^0.23.0",
75
75
  "@fluidframework/eslint-config-fluid": "^0.25.0",
76
76
  "@fluidframework/gitresources": "^0.1034.0",
77
- "@fluidframework/mocha-test-setup": "^0.56.9",
77
+ "@fluidframework/mocha-test-setup": "^0.56.10",
78
78
  "@fluidframework/server-services-client": "^0.1034.0",
79
- "@fluidframework/test-runtime-utils": "^0.56.9",
79
+ "@fluidframework/test-runtime-utils": "^0.56.10",
80
80
  "@microsoft/api-extractor": "^7.16.1",
81
81
  "@rushstack/eslint-config": "^2.5.1",
82
82
  "@types/diff": "^3.5.1",
@@ -55,7 +55,7 @@ export interface ISerializableInterval extends IInterval {
55
55
  export interface IIntervalHelpers<TInterval extends ISerializableInterval> {
56
56
  compareEnds(a: TInterval, b: TInterval): number;
57
57
  create(label: string, start: number, end: number,
58
- client: Client, intervalType?: IntervalType): TInterval;
58
+ client: Client, intervalType?: IntervalType, op?: ISequencedDocumentMessage): TInterval;
59
59
  }
60
60
 
61
61
  export class Interval implements ISerializableInterval {
@@ -175,7 +175,7 @@ export class Interval implements ISerializableInterval {
175
175
  }
176
176
  }
177
177
 
178
- public modify(label: string, start: number, end: number) {
178
+ public modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage) {
179
179
  const startPos = start ?? this.start;
180
180
  const endPos = end ?? this.end;
181
181
  if (this.start === startPos && this.end === endPos) {
@@ -312,16 +312,17 @@ export class SequenceInterval implements ISerializableInterval {
312
312
  }
313
313
  }
314
314
 
315
- public modify(label: string, start: number, end: number) {
316
- const startPos = start ?? this.start.getOffset();
317
- const endPos = end ?? this.end.getOffset();
315
+ public modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage) {
316
+ const startPos = start ?? this.start.toPosition();
317
+ const endPos = end ?? this.end.toPosition();
318
318
 
319
- if (this.start.getOffset() === startPos && this.end.getOffset() === endPos) {
319
+ if (this.start.toPosition() === startPos && this.end.toPosition() === endPos) {
320
320
  // Return undefined to indicate that no change is necessary.
321
321
  return;
322
322
  }
323
323
 
324
- const newInterval = createSequenceInterval(label, startPos, endPos, this.start.getClient(), this.intervalType);
324
+ const newInterval =
325
+ createSequenceInterval(label, startPos, endPos, this.start.getClient(), this.intervalType, op);
325
326
  if (this.properties) {
326
327
  newInterval.addProperties(this.properties);
327
328
  }
@@ -332,8 +333,9 @@ export class SequenceInterval implements ISerializableInterval {
332
333
  function createPositionReference(
333
334
  client: Client,
334
335
  pos: number,
335
- refType: ReferenceType): LocalReference {
336
- const segoff = client.getContainingSegment(pos);
336
+ refType: ReferenceType,
337
+ op?: ISequencedDocumentMessage): LocalReference {
338
+ const segoff = client.getContainingSegment(pos, op);
337
339
  if (segoff && segoff.segment) {
338
340
  const lref = new LocalReference(client, segoff.segment, segoff.offset, refType);
339
341
  if (refType !== ReferenceType.Transient) {
@@ -349,7 +351,8 @@ function createSequenceInterval(
349
351
  start: number,
350
352
  end: number,
351
353
  client: Client,
352
- intervalType: IntervalType): SequenceInterval {
354
+ intervalType: IntervalType,
355
+ op?: ISequencedDocumentMessage): SequenceInterval {
353
356
  let beginRefType = ReferenceType.RangeBegin;
354
357
  let endRefType = ReferenceType.RangeEnd;
355
358
  if (intervalType === IntervalType.Nest) {
@@ -366,8 +369,8 @@ function createSequenceInterval(
366
369
  endRefType |= ReferenceType.SlideOnRemove;
367
370
  }
368
371
 
369
- const startLref = createPositionReference(client, start, beginRefType);
370
- const endLref = createPositionReference(client, end, endRefType);
372
+ const startLref = createPositionReference(client, start, beginRefType, op);
373
+ const endLref = createPositionReference(client, end, endRefType, op);
371
374
  if (startLref && endLref) {
372
375
  startLref.pairedRef = endLref;
373
376
  endLref.pairedRef = startLref;
@@ -589,16 +592,21 @@ export class LocalIntervalCollection<TInterval extends ISerializableInterval> {
589
592
  this.endIntervalTree.remove(interval);
590
593
  }
591
594
 
592
- public createInterval(start: number, end: number, intervalType: IntervalType): TInterval {
593
- return this.helpers.create(this.label, start, end, this.client, intervalType);
595
+ public createInterval(
596
+ start: number,
597
+ end: number,
598
+ intervalType: IntervalType,
599
+ op?: ISequencedDocumentMessage): TInterval {
600
+ return this.helpers.create(this.label, start, end, this.client, intervalType, op);
594
601
  }
595
602
 
596
603
  public addInterval(
597
604
  start: number,
598
605
  end: number,
599
606
  intervalType: IntervalType,
600
- props?: PropertySet) {
601
- const interval: TInterval = this.createInterval(start, end, intervalType);
607
+ props?: PropertySet,
608
+ op?: ISequencedDocumentMessage) {
609
+ const interval: TInterval = this.createInterval(start, end, intervalType, op);
602
610
  if (interval) {
603
611
  if (!interval.properties) {
604
612
  interval.properties = createMap<any>();
@@ -638,8 +646,8 @@ export class LocalIntervalCollection<TInterval extends ISerializableInterval> {
638
646
  return result;
639
647
  }
640
648
 
641
- public changeInterval(interval: TInterval, start: number, end: number) {
642
- const newInterval = interval.modify(this.label, start, end) as TInterval | undefined;
649
+ public changeInterval(interval: TInterval, start: number, end: number, op?: ISequencedDocumentMessage) {
650
+ const newInterval = interval.modify(this.label, start, end, op) as TInterval | undefined;
643
651
  if (newInterval) {
644
652
  this.removeExistingInterval(interval);
645
653
  this.add(newInterval);
@@ -1115,7 +1123,7 @@ export class IntervalCollection<TInterval extends ISerializableInterval>
1115
1123
  if (start !== undefined || end !== undefined) {
1116
1124
  // If changeInterval gives us a new interval, work with that one. Otherwise keep working with
1117
1125
  // the one we originally found in the tree.
1118
- interval = this.localCollection.changeInterval(interval, start, end) ?? interval;
1126
+ interval = this.localCollection.changeInterval(interval, start, end, op) ?? interval;
1119
1127
  }
1120
1128
  const deltaProps = interval.addProperties(serializedInterval.properties, true, op.sequenceNumber);
1121
1129
  if (this.onDeserialize) {
@@ -1163,7 +1171,8 @@ export class IntervalCollection<TInterval extends ISerializableInterval>
1163
1171
  serializedInterval.start,
1164
1172
  serializedInterval.end,
1165
1173
  serializedInterval.intervalType,
1166
- serializedInterval.properties);
1174
+ serializedInterval.properties,
1175
+ op);
1167
1176
 
1168
1177
  if (interval) {
1169
1178
  // 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.56.9";
9
+ export const pkgVersion = "0.56.10";