@fluidframework/sequence 2.12.0 → 2.20.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/sequence",
3
- "version": "2.12.0",
3
+ "version": "2.20.0",
4
4
  "description": "Distributed sequence",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -79,37 +79,37 @@
79
79
  "temp-directory": "nyc/.nyc_output"
80
80
  },
81
81
  "dependencies": {
82
- "@fluid-internal/client-utils": "~2.12.0",
83
- "@fluidframework/core-interfaces": "~2.12.0",
84
- "@fluidframework/core-utils": "~2.12.0",
85
- "@fluidframework/datastore-definitions": "~2.12.0",
86
- "@fluidframework/driver-definitions": "~2.12.0",
87
- "@fluidframework/merge-tree": "~2.12.0",
88
- "@fluidframework/runtime-definitions": "~2.12.0",
89
- "@fluidframework/runtime-utils": "~2.12.0",
90
- "@fluidframework/shared-object-base": "~2.12.0",
91
- "@fluidframework/telemetry-utils": "~2.12.0",
82
+ "@fluid-internal/client-utils": "~2.20.0",
83
+ "@fluidframework/core-interfaces": "~2.20.0",
84
+ "@fluidframework/core-utils": "~2.20.0",
85
+ "@fluidframework/datastore-definitions": "~2.20.0",
86
+ "@fluidframework/driver-definitions": "~2.20.0",
87
+ "@fluidframework/merge-tree": "~2.20.0",
88
+ "@fluidframework/runtime-definitions": "~2.20.0",
89
+ "@fluidframework/runtime-utils": "~2.20.0",
90
+ "@fluidframework/shared-object-base": "~2.20.0",
91
+ "@fluidframework/telemetry-utils": "~2.20.0",
92
92
  "double-ended-queue": "^2.1.0-0",
93
93
  "uuid": "^9.0.0"
94
94
  },
95
95
  "devDependencies": {
96
96
  "@arethetypeswrong/cli": "^0.17.1",
97
97
  "@biomejs/biome": "~1.9.3",
98
- "@fluid-internal/mocha-test-setup": "~2.12.0",
99
- "@fluid-private/stochastic-test-utils": "~2.12.0",
100
- "@fluid-private/test-dds-utils": "~2.12.0",
98
+ "@fluid-internal/mocha-test-setup": "~2.20.0",
99
+ "@fluid-private/stochastic-test-utils": "~2.20.0",
100
+ "@fluid-private/test-dds-utils": "~2.20.0",
101
101
  "@fluid-tools/benchmark": "^0.50.0",
102
102
  "@fluid-tools/build-cli": "^0.51.0",
103
103
  "@fluidframework/build-common": "^2.0.3",
104
104
  "@fluidframework/build-tools": "^0.51.0",
105
- "@fluidframework/container-definitions": "~2.12.0",
105
+ "@fluidframework/container-definitions": "~2.20.0",
106
106
  "@fluidframework/eslint-config-fluid": "^5.6.0",
107
- "@fluidframework/sequence-previous": "npm:@fluidframework/sequence@2.11.0",
108
- "@fluidframework/test-runtime-utils": "~2.12.0",
107
+ "@fluidframework/sequence-previous": "npm:@fluidframework/sequence@2.13.0",
108
+ "@fluidframework/test-runtime-utils": "~2.20.0",
109
109
  "@microsoft/api-extractor": "7.47.8",
110
110
  "@types/diff": "^3.5.1",
111
111
  "@types/double-ended-queue": "^2.1.0",
112
- "@types/mocha": "^9.1.1",
112
+ "@types/mocha": "^10.0.10",
113
113
  "@types/node": "^18.19.0",
114
114
  "@types/uuid": "^9.0.2",
115
115
  "c8": "^8.0.1",
@@ -136,7 +136,56 @@
136
136
  }
137
137
  },
138
138
  "typeValidation": {
139
- "broken": {},
139
+ "broken": {
140
+ "Class_BaseSegment": {
141
+ "backCompat": false
142
+ },
143
+ "Class_Marker": {
144
+ "backCompat": false
145
+ },
146
+ "Class_TextSegment": {
147
+ "backCompat": false
148
+ },
149
+ "Class_TrackingGroup": {
150
+ "backCompat": false
151
+ },
152
+ "ClassStatics_BaseSegment": {
153
+ "backCompat": false
154
+ },
155
+ "ClassStatics_Marker": {
156
+ "backCompat": false
157
+ },
158
+ "ClassStatics_TextSegment": {
159
+ "backCompat": false
160
+ },
161
+ "ClassStatics_TrackingGroup": {
162
+ "backCompat": false
163
+ },
164
+ "Interface_ISegment": {
165
+ "backCompat": false
166
+ },
167
+ "Interface_ISequenceDeltaRange": {
168
+ "backCompat": false
169
+ },
170
+ "Interface_SequenceDeltaEvent": {
171
+ "backCompat": false
172
+ },
173
+ "Interface_SequenceEvent": {
174
+ "backCompat": false
175
+ },
176
+ "Interface_SequenceMaintenanceEvent": {
177
+ "backCompat": false
178
+ },
179
+ "TypeAlias_IntervalRevertible": {
180
+ "backCompat": false
181
+ },
182
+ "TypeAlias_SharedStringRevertible": {
183
+ "backCompat": false
184
+ },
185
+ "TypeAlias_SharedStringSegment": {
186
+ "backCompat": false
187
+ }
188
+ },
140
189
  "entrypoint": "legacy"
141
190
  },
142
191
  "scripts": {
@@ -29,6 +29,7 @@ import {
29
29
  endpointPosAndSide,
30
30
  addProperties,
31
31
  copyPropertiesAndManager,
32
+ type ISegmentInternal,
32
33
  } from "@fluidframework/merge-tree/internal";
33
34
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
34
35
 
@@ -196,8 +197,8 @@ export class SequenceIntervalClass implements SequenceInterval {
196
197
 
197
198
  /***/
198
199
  public get stickiness(): IntervalStickiness {
199
- const startSegment = this.start.getSegment();
200
- const endSegment = this.end.getSegment();
200
+ const startSegment: ISegmentInternal | undefined = this.start.getSegment();
201
+ const endSegment: ISegmentInternal | undefined = this.end.getSegment();
201
202
  return computeStickinessFromSide(
202
203
  startSegment?.endpointType,
203
204
  this.startSide,
@@ -428,10 +429,12 @@ export class SequenceIntervalClass implements SequenceInterval {
428
429
  useNewSlidingBehavior: boolean = false,
429
430
  ) {
430
431
  const { startSide, endSide, startPos, endPos } = endpointPosAndSide(start, end);
432
+ const startSegment: ISegmentInternal | undefined = this.start.getSegment();
433
+ const endSegment: ISegmentInternal | undefined = this.end.getSegment();
431
434
  const stickiness = computeStickinessFromSide(
432
- startPos ?? this.start.getSegment()?.endpointType,
435
+ startPos ?? startSegment?.endpointType,
433
436
  startSide ?? this.startSide,
434
- endPos ?? this.end.getSegment()?.endpointType,
437
+ endPos ?? endSegment?.endpointType,
435
438
  endSide ?? this.endSide,
436
439
  );
437
440
  const getRefType = (baseType: ReferenceType): ReferenceType => {
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/sequence";
9
- export const pkgVersion = "2.12.0";
9
+ export const pkgVersion = "2.20.0";
@@ -14,7 +14,6 @@ import {
14
14
  PropertySet,
15
15
  ReferenceType,
16
16
  SlidingPreference, // eslint-disable-next-line import/no-deprecated
17
- SortedSet,
18
17
  appendToMergeTreeDeltaRevertibles,
19
18
  discardMergeTreeDeltaRevertible,
20
19
  getSlideToSegoff,
@@ -24,6 +23,9 @@ import {
24
23
  InteriorSequencePlace,
25
24
  Side,
26
25
  type ISegmentInternal,
26
+ segmentIsRemoved,
27
+ SortedSegmentSet,
28
+ type ISegment,
27
29
  } from "@fluidframework/merge-tree/internal";
28
30
 
29
31
  import { IntervalOpType, SequenceInterval, SequenceIntervalClass } from "./intervals/index.js";
@@ -127,18 +129,16 @@ export function appendDeleteIntervalToRevertibles(
127
129
  if (!startSeg) {
128
130
  return revertibles;
129
131
  }
130
- const startType =
131
- startSeg.removedSeq !== undefined
132
- ? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin
133
- : ReferenceType.StayOnRemove | ReferenceType.RangeBegin;
132
+ const startType = segmentIsRemoved(startSeg)
133
+ ? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin
134
+ : ReferenceType.StayOnRemove | ReferenceType.RangeBegin;
134
135
  const endSeg = interval.end.getSegment() as SharedStringSegment | undefined;
135
136
  if (!endSeg) {
136
137
  return revertibles;
137
138
  }
138
- const endType =
139
- endSeg.removedSeq !== undefined
140
- ? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd
141
- : ReferenceType.StayOnRemove | ReferenceType.RangeEnd;
139
+ const endType = segmentIsRemoved(startSeg)
140
+ ? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd
141
+ : ReferenceType.StayOnRemove | ReferenceType.RangeEnd;
142
142
  const startRef = string.createLocalReferencePosition(
143
143
  startSeg,
144
144
  interval.start.getOffset(),
@@ -181,15 +181,13 @@ export function appendChangeIntervalToRevertibles(
181
181
  // This logic is needed because the ReferenceType StayOnRemove cannot be used
182
182
  // on removed segments. This works for revertibles because the old position of the
183
183
  // interval within the removed segment is handled by the remove range revertible.
184
- const startType =
185
- startSeg.removedSeq !== undefined
186
- ? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin
187
- : ReferenceType.StayOnRemove | ReferenceType.RangeBegin;
184
+ const startType = segmentIsRemoved(startSeg)
185
+ ? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin
186
+ : ReferenceType.StayOnRemove | ReferenceType.RangeBegin;
188
187
  const endSeg = previousInterval.end.getSegment() as SharedStringSegment;
189
- const endType =
190
- endSeg.removedSeq !== undefined
191
- ? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd
192
- : ReferenceType.StayOnRemove | ReferenceType.RangeEnd;
188
+ const endType = segmentIsRemoved(startSeg)
189
+ ? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd
190
+ : ReferenceType.StayOnRemove | ReferenceType.RangeEnd;
193
191
  const prevStartRef = string.createLocalReferencePosition(
194
192
  startSeg,
195
193
  previousInterval.start.getOffset(),
@@ -582,14 +580,11 @@ function newEndpointPosition(
582
580
  interface RangeInfo {
583
581
  ranges: readonly Readonly<ISequenceDeltaRange<MergeTreeDeltaOperationType>>[];
584
582
  length: number;
583
+ segment: ISegment;
585
584
  }
586
585
 
587
586
  // eslint-disable-next-line import/no-deprecated
588
- class SortedRangeSet extends SortedSet<RangeInfo, string> {
589
- protected getKey(item: RangeInfo): string {
590
- return item.ranges[0].segment.ordinal;
591
- }
592
- }
587
+ class SortedRangeSet extends SortedSegmentSet<RangeInfo> {}
593
588
 
594
589
  function revertLocalSequenceRemove(
595
590
  sharedString: ISharedString,
@@ -602,7 +597,11 @@ function revertLocalSequenceRemove(
602
597
  event.ranges.forEach((range) => {
603
598
  length += range.segment.cachedLength;
604
599
  });
605
- restoredRanges.addOrUpdate({ ranges: event.ranges, length });
600
+ restoredRanges.addOrUpdate({
601
+ ranges: event.ranges,
602
+ length,
603
+ segment: event.ranges[0].segment,
604
+ });
606
605
  }
607
606
  };
608
607
  sharedString.on("sequenceDelta", saveSegments);
package/src/sequence.ts CHANGED
@@ -16,7 +16,6 @@ import {
16
16
  ISequencedDocumentMessage,
17
17
  } from "@fluidframework/driver-definitions/internal";
18
18
  import {
19
- // eslint-disable-next-line import/no-deprecated
20
19
  Client,
21
20
  IJSONSegment,
22
21
  IMergeTreeAnnotateMsg,
@@ -36,8 +35,6 @@ import {
36
35
  PropertySet,
37
36
  ReferencePosition,
38
37
  ReferenceType,
39
- // eslint-disable-next-line import/no-deprecated
40
- SegmentGroup,
41
38
  SlidingPreference,
42
39
  createAnnotateRangeOp,
43
40
  // eslint-disable-next-line import/no-deprecated
@@ -504,7 +501,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
504
501
  return this.ongoingResubmitRefSeq ?? this.deltaManager.lastSequenceNumber;
505
502
  }
506
503
 
507
- // eslint-disable-next-line import/no-deprecated
508
504
  protected client: Client;
509
505
  private messagesSinceMSNChange: ISequencedDocumentMessage[] = [];
510
506
  private readonly intervalCollections: IntervalCollectionMap<SequenceInterval>;
@@ -543,7 +539,6 @@ export abstract class SharedSegmentSequence<T extends ISegment>
543
539
  dataStoreRuntime.options,
544
540
  );
545
541
 
546
- // eslint-disable-next-line import/no-deprecated
547
542
  this.client = new Client(
548
543
  segmentFromSpec,
549
544
  createChildLogger({
@@ -812,11 +807,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
812
807
  )
813
808
  ) {
814
809
  this.submitSequenceMessage(
815
- this.client.regeneratePendingOp(
816
- content as IMergeTreeOp,
817
- // eslint-disable-next-line import/no-deprecated
818
- localOpMetadata as SegmentGroup | SegmentGroup[],
819
- ),
810
+ this.client.regeneratePendingOp(content as IMergeTreeOp, localOpMetadata),
820
811
  );
821
812
  }
822
813
  });