@fluidframework/sequence 2.31.1 → 2.32.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/CHANGELOG.md +4 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.d.ts +5 -9
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +38 -104
- package/dist/intervalCollection.js.map +1 -1
- package/dist/intervalCollectionMap.d.ts.map +1 -1
- package/dist/intervalCollectionMap.js +5 -4
- package/dist/intervalCollectionMap.js.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.js +2 -2
- package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointIndex.js +2 -3
- package/dist/intervalIndex/endpointIndex.js.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.js +0 -7
- package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
- package/dist/intervalIndex/index.d.ts +0 -1
- package/dist/intervalIndex/index.d.ts.map +1 -1
- package/dist/intervalIndex/index.js +1 -3
- package/dist/intervalIndex/index.js.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.js +2 -2
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.js +2 -2
- package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/dist/intervals/index.d.ts +2 -2
- package/dist/intervals/index.d.ts.map +1 -1
- package/dist/intervals/index.js +3 -1
- package/dist/intervals/index.js.map +1 -1
- package/dist/intervals/intervalUtils.d.ts +1 -5
- package/dist/intervals/intervalUtils.d.ts.map +1 -1
- package/dist/intervals/intervalUtils.js.map +1 -1
- package/dist/intervals/sequenceInterval.d.ts +20 -9
- package/dist/intervals/sequenceInterval.d.ts.map +1 -1
- package/dist/intervals/sequenceInterval.js +82 -27
- package/dist/intervals/sequenceInterval.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +8 -7
- package/dist/revertibles.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/intervalCollection.d.ts +5 -9
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +39 -105
- package/lib/intervalCollection.js.map +1 -1
- package/lib/intervalCollectionMap.d.ts.map +1 -1
- package/lib/intervalCollectionMap.js +6 -5
- package/lib/intervalCollectionMap.js.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.js +3 -3
- package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointIndex.js +3 -4
- package/lib/intervalIndex/endpointIndex.js.map +1 -1
- package/lib/intervalIndex/idIntervalIndex.d.ts.map +1 -1
- package/lib/intervalIndex/idIntervalIndex.js +0 -7
- package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
- package/lib/intervalIndex/index.d.ts +0 -1
- package/lib/intervalIndex/index.d.ts.map +1 -1
- package/lib/intervalIndex/index.js +0 -1
- package/lib/intervalIndex/index.js.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.js +3 -3
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.js +3 -3
- package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/lib/intervals/index.d.ts +2 -2
- package/lib/intervals/index.d.ts.map +1 -1
- package/lib/intervals/index.js +1 -1
- package/lib/intervals/index.js.map +1 -1
- package/lib/intervals/intervalUtils.d.ts +1 -5
- package/lib/intervals/intervalUtils.d.ts.map +1 -1
- package/lib/intervals/intervalUtils.js.map +1 -1
- package/lib/intervals/sequenceInterval.d.ts +20 -9
- package/lib/intervals/sequenceInterval.d.ts.map +1 -1
- package/lib/intervals/sequenceInterval.js +81 -28
- package/lib/intervals/sequenceInterval.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +8 -7
- package/lib/revertibles.js.map +1 -1
- package/package.json +19 -18
- package/src/index.ts +0 -1
- package/src/intervalCollection.ts +59 -144
- package/src/intervalCollectionMap.ts +5 -5
- package/src/intervalIndex/endpointInRangeIndex.ts +3 -15
- package/src/intervalIndex/endpointIndex.ts +3 -17
- package/src/intervalIndex/idIntervalIndex.ts +0 -7
- package/src/intervalIndex/index.ts +0 -1
- package/src/intervalIndex/overlappingIntervalsIndex.ts +3 -12
- package/src/intervalIndex/startpointInRangeIndex.ts +3 -15
- package/src/intervals/index.ts +2 -1
- package/src/intervals/intervalUtils.ts +0 -7
- package/src/intervals/sequenceInterval.ts +124 -33
- package/src/packageVersion.ts +1 -1
- package/src/revertibles.ts +8 -7
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +0 -11
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +0 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +0 -38
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +0 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +0 -11
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +0 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +0 -34
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +0 -1
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +0 -80
|
@@ -7,15 +7,12 @@
|
|
|
7
7
|
|
|
8
8
|
import { ISequencedDocumentMessage } from "@fluidframework/driver-definitions/internal";
|
|
9
9
|
import {
|
|
10
|
-
PropertiesManager,
|
|
11
10
|
PropertySet,
|
|
12
11
|
SlidingPreference,
|
|
13
12
|
SequencePlace,
|
|
14
13
|
Side,
|
|
15
14
|
} from "@fluidframework/merge-tree/internal";
|
|
16
15
|
|
|
17
|
-
import type { SequenceIntervalClass } from "./sequenceInterval.js";
|
|
18
|
-
|
|
19
16
|
/**
|
|
20
17
|
* Basic interval abstraction
|
|
21
18
|
* @legacy
|
|
@@ -171,10 +168,6 @@ export interface ISerializableInterval extends IInterval {
|
|
|
171
168
|
getIntervalId(): string;
|
|
172
169
|
}
|
|
173
170
|
|
|
174
|
-
export type ISerializableIntervalPrivate = SequenceIntervalClass & {
|
|
175
|
-
propertyManager?: PropertiesManager;
|
|
176
|
-
};
|
|
177
|
-
|
|
178
171
|
/**
|
|
179
172
|
* Represents a change that should be applied to an existing interval.
|
|
180
173
|
* Changes can modify any of start/end/properties, with `undefined` signifying no change should be made.
|
|
@@ -29,14 +29,13 @@ import {
|
|
|
29
29
|
addProperties,
|
|
30
30
|
copyPropertiesAndManager,
|
|
31
31
|
type ISegmentInternal,
|
|
32
|
+
UnassignedSequenceNumber,
|
|
33
|
+
UniversalSequenceNumber,
|
|
32
34
|
} from "@fluidframework/merge-tree/internal";
|
|
33
35
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
36
|
+
import { v4 as uuid } from "uuid";
|
|
34
37
|
|
|
35
|
-
import {
|
|
36
|
-
computeStickinessFromSide,
|
|
37
|
-
reservedIntervalIdKey,
|
|
38
|
-
sidesFromStickiness,
|
|
39
|
-
} from "../intervalCollection.js";
|
|
38
|
+
import { computeStickinessFromSide } from "../intervalCollection.js";
|
|
40
39
|
|
|
41
40
|
import {
|
|
42
41
|
ISerializableInterval,
|
|
@@ -45,6 +44,7 @@ import {
|
|
|
45
44
|
IntervalType,
|
|
46
45
|
endReferenceSlidingPreference,
|
|
47
46
|
startReferenceSlidingPreference,
|
|
47
|
+
type SerializedIntervalDelta,
|
|
48
48
|
} from "./intervalUtils.js";
|
|
49
49
|
|
|
50
50
|
function compareSides(sideA: Side, sideB: Side): number {
|
|
@@ -75,6 +75,30 @@ function maxSide(sideA: Side, sideB: Side): Side {
|
|
|
75
75
|
return Side.After;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
const reservedIntervalIdKey = "intervalId";
|
|
79
|
+
|
|
80
|
+
const legacyIdPrefix = "legacy";
|
|
81
|
+
|
|
82
|
+
export function getSerializedProperties(
|
|
83
|
+
serializedInterval: ISerializedInterval | SerializedIntervalDelta,
|
|
84
|
+
): {
|
|
85
|
+
id: string;
|
|
86
|
+
labels: string[];
|
|
87
|
+
properties: PropertySet;
|
|
88
|
+
} {
|
|
89
|
+
const {
|
|
90
|
+
[reservedIntervalIdKey]: maybeId,
|
|
91
|
+
[reservedRangeLabelsKey]: labels,
|
|
92
|
+
...properties
|
|
93
|
+
} = serializedInterval.properties ?? {};
|
|
94
|
+
// Create a non-unique ID based on start and end to be used on intervals that come from legacy clients
|
|
95
|
+
// without ID's.
|
|
96
|
+
const id =
|
|
97
|
+
maybeId ?? `${legacyIdPrefix}${serializedInterval.start}-${serializedInterval.end}`;
|
|
98
|
+
|
|
99
|
+
return { id, labels, properties };
|
|
100
|
+
}
|
|
101
|
+
|
|
78
102
|
/**
|
|
79
103
|
* Interval implementation whose ends are associated with positions in a mutatable sequence.
|
|
80
104
|
* As such, when content is inserted into the middle of the interval, the interval expands to
|
|
@@ -183,15 +207,32 @@ export interface SequenceInterval extends ISerializableInterval {
|
|
|
183
207
|
}
|
|
184
208
|
|
|
185
209
|
export class SequenceIntervalClass implements SequenceInterval {
|
|
210
|
+
readonly #props: {
|
|
211
|
+
propertyManager?: PropertiesManager;
|
|
212
|
+
properties: PropertySet;
|
|
213
|
+
} = { properties: createMap<any>() };
|
|
214
|
+
|
|
186
215
|
/**
|
|
187
216
|
* {@inheritDoc ISerializableInterval.properties}
|
|
188
217
|
*/
|
|
189
|
-
public properties: PropertySet
|
|
218
|
+
public get properties(): Readonly<PropertySet> {
|
|
219
|
+
return this.#props.properties;
|
|
220
|
+
}
|
|
190
221
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
222
|
+
public changeProperties(props: PropertySet | undefined, op?: ISequencedDocumentMessage) {
|
|
223
|
+
if (props !== undefined) {
|
|
224
|
+
this.#props.propertyManager ??= new PropertiesManager();
|
|
225
|
+
return this.#props.propertyManager.handleProperties(
|
|
226
|
+
{ props },
|
|
227
|
+
this.#props,
|
|
228
|
+
this.client.getCollabWindow().collaborating
|
|
229
|
+
? (op?.sequenceNumber ?? UnassignedSequenceNumber)
|
|
230
|
+
: UniversalSequenceNumber,
|
|
231
|
+
op?.minimumSequenceNumber ?? UniversalSequenceNumber,
|
|
232
|
+
this.client.getCollabWindow().collaborating,
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
195
236
|
|
|
196
237
|
/***/
|
|
197
238
|
public get stickiness(): IntervalStickiness {
|
|
@@ -207,6 +248,8 @@ export class SequenceIntervalClass implements SequenceInterval {
|
|
|
207
248
|
|
|
208
249
|
constructor(
|
|
209
250
|
private readonly client: Client,
|
|
251
|
+
private readonly id: string,
|
|
252
|
+
private readonly label: string,
|
|
210
253
|
/**
|
|
211
254
|
* Start endpoint of this interval.
|
|
212
255
|
* @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.
|
|
@@ -223,7 +266,7 @@ export class SequenceIntervalClass implements SequenceInterval {
|
|
|
223
266
|
public readonly endSide: Side = Side.Before,
|
|
224
267
|
) {
|
|
225
268
|
if (props) {
|
|
226
|
-
this.properties = addProperties(this.properties, props);
|
|
269
|
+
this.#props.properties = addProperties(this.#props.properties, props);
|
|
227
270
|
}
|
|
228
271
|
}
|
|
229
272
|
|
|
@@ -264,27 +307,42 @@ export class SequenceIntervalClass implements SequenceInterval {
|
|
|
264
307
|
* {@inheritDoc ISerializableInterval.serialize}
|
|
265
308
|
*/
|
|
266
309
|
public serialize(): ISerializedInterval {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
310
|
+
return this.serializeDelta({
|
|
311
|
+
props: this.properties,
|
|
312
|
+
includeEndpoints: true,
|
|
313
|
+
}) as ISerializedInterval;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
public serializeDelta({
|
|
317
|
+
props,
|
|
318
|
+
includeEndpoints,
|
|
319
|
+
}: {
|
|
320
|
+
props: PropertySet | undefined;
|
|
321
|
+
includeEndpoints: boolean;
|
|
322
|
+
}): SerializedIntervalDelta {
|
|
323
|
+
const startSegment: ISegmentInternal | undefined = this.start.getSegment();
|
|
324
|
+
const endSegment: ISegmentInternal | undefined = this.end.getSegment();
|
|
325
|
+
const startPosition = includeEndpoints
|
|
326
|
+
? (startSegment?.endpointType ??
|
|
327
|
+
this.client.localReferencePositionToPosition(this.start))
|
|
328
|
+
: undefined;
|
|
329
|
+
const endPosition = includeEndpoints
|
|
330
|
+
? (endSegment?.endpointType ?? this.client.localReferencePositionToPosition(this.end))
|
|
331
|
+
: undefined;
|
|
332
|
+
return {
|
|
271
333
|
end: endPosition,
|
|
272
334
|
intervalType: this.intervalType,
|
|
273
335
|
sequenceNumber: this.client.getCurrentSeq(),
|
|
274
336
|
start: startPosition,
|
|
275
337
|
stickiness: this.stickiness,
|
|
276
|
-
startSide,
|
|
277
|
-
endSide,
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
return serializedInterval;
|
|
338
|
+
startSide: includeEndpoints ? this.startSide : undefined,
|
|
339
|
+
endSide: includeEndpoints ? this.endSide : undefined,
|
|
340
|
+
properties: {
|
|
341
|
+
...props,
|
|
342
|
+
[reservedIntervalIdKey]: this.id,
|
|
343
|
+
[reservedRangeLabelsKey]: [this.label],
|
|
344
|
+
},
|
|
345
|
+
} satisfies SerializedIntervalDelta;
|
|
288
346
|
}
|
|
289
347
|
|
|
290
348
|
/**
|
|
@@ -293,6 +351,8 @@ export class SequenceIntervalClass implements SequenceInterval {
|
|
|
293
351
|
public clone(): SequenceIntervalClass {
|
|
294
352
|
return new SequenceIntervalClass(
|
|
295
353
|
this.client,
|
|
354
|
+
this.id,
|
|
355
|
+
this.label,
|
|
296
356
|
this.start,
|
|
297
357
|
this.end,
|
|
298
358
|
this.intervalType,
|
|
@@ -367,9 +427,7 @@ export class SequenceIntervalClass implements SequenceInterval {
|
|
|
367
427
|
* {@inheritDoc ISerializableInterval.getIntervalId}
|
|
368
428
|
*/
|
|
369
429
|
public getIntervalId(): string {
|
|
370
|
-
|
|
371
|
-
assert(id !== undefined, 0x5e2 /* interval ID should not be undefined */);
|
|
372
|
-
return `${id}`;
|
|
430
|
+
return this.id;
|
|
373
431
|
}
|
|
374
432
|
|
|
375
433
|
/**
|
|
@@ -397,6 +455,8 @@ export class SequenceIntervalClass implements SequenceInterval {
|
|
|
397
455
|
|
|
398
456
|
return new SequenceIntervalClass(
|
|
399
457
|
this.client,
|
|
458
|
+
uuid(),
|
|
459
|
+
this.label,
|
|
400
460
|
newStart,
|
|
401
461
|
newEnd,
|
|
402
462
|
this.intervalType,
|
|
@@ -482,6 +542,8 @@ export class SequenceIntervalClass implements SequenceInterval {
|
|
|
482
542
|
|
|
483
543
|
const newInterval = new SequenceIntervalClass(
|
|
484
544
|
this.client,
|
|
545
|
+
this.id,
|
|
546
|
+
this.label,
|
|
485
547
|
startRef,
|
|
486
548
|
endRef,
|
|
487
549
|
this.intervalType,
|
|
@@ -489,9 +551,17 @@ export class SequenceIntervalClass implements SequenceInterval {
|
|
|
489
551
|
startSide ?? this.startSide,
|
|
490
552
|
endSide ?? this.endSide,
|
|
491
553
|
);
|
|
492
|
-
copyPropertiesAndManager(this, newInterval);
|
|
554
|
+
copyPropertiesAndManager(this.#props, newInterval.#props);
|
|
493
555
|
return newInterval;
|
|
494
556
|
}
|
|
557
|
+
|
|
558
|
+
public ackPropertiesChange(newProps: PropertySet, op: ISequencedDocumentMessage) {
|
|
559
|
+
this.#props.propertyManager ??= new PropertiesManager();
|
|
560
|
+
// Let the propertyManager prune its pending change-properties set.
|
|
561
|
+
this.#props.propertyManager.ack(op.sequenceNumber, op.minimumSequenceNumber, {
|
|
562
|
+
props: newProps,
|
|
563
|
+
});
|
|
564
|
+
}
|
|
495
565
|
}
|
|
496
566
|
|
|
497
567
|
export function createPositionReferenceFromSegoff(
|
|
@@ -569,7 +639,7 @@ function createPositionReference(
|
|
|
569
639
|
referenceSequenceNumber: op.referenceSequenceNumber,
|
|
570
640
|
clientId: op.clientId,
|
|
571
641
|
});
|
|
572
|
-
segoff = getSlideToSegoff(segoff, slidingPreference, useNewSlidingBehavior);
|
|
642
|
+
segoff = getSlideToSegoff(segoff, slidingPreference, undefined, useNewSlidingBehavior);
|
|
573
643
|
}
|
|
574
644
|
} else {
|
|
575
645
|
assert(
|
|
@@ -594,8 +664,24 @@ function createPositionReference(
|
|
|
594
664
|
);
|
|
595
665
|
}
|
|
596
666
|
|
|
667
|
+
export function createTransientInterval(
|
|
668
|
+
start: SequencePlace | undefined,
|
|
669
|
+
end: SequencePlace | undefined,
|
|
670
|
+
client: Client,
|
|
671
|
+
) {
|
|
672
|
+
return createSequenceInterval(
|
|
673
|
+
"transient",
|
|
674
|
+
uuid(),
|
|
675
|
+
start,
|
|
676
|
+
end,
|
|
677
|
+
client,
|
|
678
|
+
IntervalType.Transient,
|
|
679
|
+
);
|
|
680
|
+
}
|
|
681
|
+
|
|
597
682
|
export function createSequenceInterval(
|
|
598
683
|
label: string,
|
|
684
|
+
id: string,
|
|
599
685
|
start: SequencePlace | undefined,
|
|
600
686
|
end: SequencePlace | undefined,
|
|
601
687
|
client: Client,
|
|
@@ -603,6 +689,7 @@ export function createSequenceInterval(
|
|
|
603
689
|
op?: ISequencedDocumentMessage,
|
|
604
690
|
fromSnapshot?: boolean,
|
|
605
691
|
useNewSlidingBehavior: boolean = false,
|
|
692
|
+
props?: PropertySet,
|
|
606
693
|
): SequenceIntervalClass {
|
|
607
694
|
const { startPos, startSide, endPos, endSide } = endpointPosAndSide(
|
|
608
695
|
start ?? "start",
|
|
@@ -666,10 +753,14 @@ export function createSequenceInterval(
|
|
|
666
753
|
|
|
667
754
|
const ival = new SequenceIntervalClass(
|
|
668
755
|
client,
|
|
756
|
+
id,
|
|
757
|
+
label,
|
|
669
758
|
startLref,
|
|
670
759
|
endLref,
|
|
671
760
|
intervalType,
|
|
672
|
-
|
|
761
|
+
props === undefined
|
|
762
|
+
? undefined
|
|
763
|
+
: { ...props, [reservedIntervalIdKey]: undefined, [reservedRangeLabelsKey]: undefined },
|
|
673
764
|
startSide,
|
|
674
765
|
endSide,
|
|
675
766
|
);
|
package/src/packageVersion.ts
CHANGED
package/src/revertibles.ts
CHANGED
|
@@ -341,7 +341,7 @@ export function appendSharedStringDeltaToRevertibles(
|
|
|
341
341
|
|
|
342
342
|
revertible.intervals.push({
|
|
343
343
|
intervalId: interval.getIntervalId(),
|
|
344
|
-
label: interval.properties
|
|
344
|
+
label: interval.start.properties?.referenceRangeLabels[0],
|
|
345
345
|
startOffset: offset,
|
|
346
346
|
endOffset,
|
|
347
347
|
});
|
|
@@ -351,7 +351,7 @@ export function appendSharedStringDeltaToRevertibles(
|
|
|
351
351
|
endIntervals.forEach(({ interval, offset }) => {
|
|
352
352
|
revertible.intervals.push({
|
|
353
353
|
intervalId: interval.getIntervalId(),
|
|
354
|
-
label: interval.properties
|
|
354
|
+
label: interval.start.properties?.referenceRangeLabels[0],
|
|
355
355
|
endOffset: offset,
|
|
356
356
|
});
|
|
357
357
|
});
|
|
@@ -433,7 +433,7 @@ function revertLocalAdd(
|
|
|
433
433
|
revertible: TypedRevertible<typeof IntervalOpType.ADD>,
|
|
434
434
|
) {
|
|
435
435
|
const id = getUpdatedIdFromInterval(revertible.interval);
|
|
436
|
-
const label = revertible.interval.properties
|
|
436
|
+
const label = revertible.interval.start.properties?.referenceRangeLabels[0];
|
|
437
437
|
string.getIntervalCollection(label).removeIntervalById(id);
|
|
438
438
|
}
|
|
439
439
|
|
|
@@ -461,14 +461,15 @@ function revertLocalDelete(
|
|
|
461
461
|
string: ISharedString,
|
|
462
462
|
revertible: TypedRevertible<typeof IntervalOpType.DELETE>,
|
|
463
463
|
) {
|
|
464
|
-
const label = revertible.interval.properties
|
|
464
|
+
const label = revertible.interval.start.properties?.referenceRangeLabels[0];
|
|
465
465
|
const collection = string.getIntervalCollection(label);
|
|
466
466
|
const start = string.localReferencePositionToPosition(revertible.start);
|
|
467
467
|
const startSlidePos = getSlidePosition(string, revertible.start, start);
|
|
468
468
|
const end = string.localReferencePositionToPosition(revertible.end);
|
|
469
469
|
const endSlidePos = getSlidePosition(string, revertible.end, end);
|
|
470
470
|
// reusing the id causes eventual consistency bugs, so it is removed here and recreated in add
|
|
471
|
-
const {
|
|
471
|
+
const { ...props } = revertible.interval.properties;
|
|
472
|
+
const intervalId = revertible.interval.getIntervalId();
|
|
472
473
|
if (
|
|
473
474
|
isValidRange(
|
|
474
475
|
startSlidePos,
|
|
@@ -500,7 +501,7 @@ function revertLocalChange(
|
|
|
500
501
|
string: ISharedString,
|
|
501
502
|
revertible: TypedRevertible<typeof IntervalOpType.CHANGE>,
|
|
502
503
|
) {
|
|
503
|
-
const label = revertible.interval.properties
|
|
504
|
+
const label = revertible.interval.start.properties?.referenceRangeLabels[0];
|
|
504
505
|
const collection = string.getIntervalCollection(label);
|
|
505
506
|
const id = getUpdatedIdFromInterval(revertible.interval);
|
|
506
507
|
const start = string.localReferencePositionToPosition(revertible.start);
|
|
@@ -540,7 +541,7 @@ function revertLocalPropertyChanged(
|
|
|
540
541
|
string: ISharedString,
|
|
541
542
|
revertible: TypedRevertible<typeof IntervalOpType.PROPERTY_CHANGED>,
|
|
542
543
|
) {
|
|
543
|
-
const label = revertible.interval.properties
|
|
544
|
+
const label = revertible.interval.start.properties?.referenceRangeLabels[0];
|
|
544
545
|
const id = getUpdatedIdFromInterval(revertible.interval);
|
|
545
546
|
const newProps = revertible.propertyDeltas;
|
|
546
547
|
string.getIntervalCollection(label).change(id, { props: newProps });
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { ISharedString } from "../sharedString.js";
|
|
6
|
-
import { SequenceIntervalIndexes } from "./sequenceIntervalIndexes.js";
|
|
7
|
-
/**
|
|
8
|
-
* @internal
|
|
9
|
-
*/
|
|
10
|
-
export declare function createOverlappingSequenceIntervalsIndex(sharedString: ISharedString): SequenceIntervalIndexes.Overlapping;
|
|
11
|
-
//# sourceMappingURL=overlappingSequenceIntervalsIndex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlappingSequenceIntervalsIndex.d.ts","sourceRoot":"","sources":["../../src/intervalIndex/overlappingSequenceIntervalsIndex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AA+CvE;;GAEG;AACH,wBAAgB,uCAAuC,CACtD,YAAY,EAAE,aAAa,GACzB,uBAAuB,CAAC,WAAW,CAGrC"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.createOverlappingSequenceIntervalsIndex = void 0;
|
|
8
|
-
/* eslint-disable import/no-deprecated */
|
|
9
|
-
const internal_1 = require("@fluidframework/merge-tree/internal");
|
|
10
|
-
const index_js_1 = require("../intervals/index.js");
|
|
11
|
-
const overlappingIntervalsIndex_js_1 = require("./overlappingIntervalsIndex.js");
|
|
12
|
-
class OverlappingSequenceIntervalsIndex extends overlappingIntervalsIndex_js_1.OverlappingIntervalsIndex {
|
|
13
|
-
constructor(client) {
|
|
14
|
-
super(client);
|
|
15
|
-
}
|
|
16
|
-
findOverlappingIntervalsBySegoff(startSegoff, endSegoff) {
|
|
17
|
-
if (this.intervalTree.intervals.isEmpty()) {
|
|
18
|
-
return [];
|
|
19
|
-
}
|
|
20
|
-
const startLref = (0, index_js_1.createPositionReferenceFromSegoff)(this.client, startSegoff, internal_1.ReferenceType.Transient);
|
|
21
|
-
const endLref = (0, index_js_1.createPositionReferenceFromSegoff)(this.client, endSegoff, internal_1.ReferenceType.Transient);
|
|
22
|
-
if ((0, internal_1.compareReferencePositions)(startLref, endLref) > 0) {
|
|
23
|
-
return [];
|
|
24
|
-
}
|
|
25
|
-
const transientInterval = new index_js_1.SequenceIntervalClass(this.client, startLref, endLref, index_js_1.IntervalType.Transient, { [internal_1.reservedRangeLabelsKey]: ["transient"] });
|
|
26
|
-
const overlappingIntervalNodes = this.intervalTree.match(transientInterval);
|
|
27
|
-
return overlappingIntervalNodes.map((node) => node.key);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* @internal
|
|
32
|
-
*/
|
|
33
|
-
function createOverlappingSequenceIntervalsIndex(sharedString) {
|
|
34
|
-
const client = sharedString.client;
|
|
35
|
-
return new OverlappingSequenceIntervalsIndex(client);
|
|
36
|
-
}
|
|
37
|
-
exports.createOverlappingSequenceIntervalsIndex = createOverlappingSequenceIntervalsIndex;
|
|
38
|
-
//# sourceMappingURL=overlappingSequenceIntervalsIndex.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlappingSequenceIntervalsIndex.js","sourceRoot":"","sources":["../../src/intervalIndex/overlappingSequenceIntervalsIndex.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yCAAyC;AAEzC,kEAM6C;AAE7C,oDAK+B;AAG/B,iFAA2E;AAG3E,MAAM,iCACL,SAAQ,wDAAyB;IAGjC,YAAY,MAAc;QACzB,KAAK,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IAEM,gCAAgC,CACtC,WAA0E,EAC1E,SAAwE;QAExE,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,SAAS,GAAG,IAAA,4CAAiC,EAClD,IAAI,CAAC,MAAM,EACX,WAAW,EACX,wBAAa,CAAC,SAAS,CACvB,CAAC;QAEF,MAAM,OAAO,GAAG,IAAA,4CAAiC,EAChD,IAAI,CAAC,MAAM,EACX,SAAS,EACT,wBAAa,CAAC,SAAS,CACvB,CAAC;QAEF,IAAI,IAAA,oCAAyB,EAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,gCAAqB,CAClD,IAAI,CAAC,MAAM,EACX,SAAS,EACT,OAAO,EACP,uBAAY,CAAC,SAAS,EACtB,EAAE,CAAC,iCAAsB,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAC3C,CAAC;QAEF,MAAM,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5E,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;CACD;AAED;;GAEG;AACH,SAAgB,uCAAuC,CACtD,YAA2B;IAE3B,MAAM,MAAM,GAAI,YAA8C,CAAC,MAAM,CAAC;IACtE,OAAO,IAAI,iCAAiC,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC;AALD,0FAKC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable import/no-deprecated */\n\nimport {\n\tClient,\n\tISegment,\n\tReferenceType,\n\tcompareReferencePositions,\n\treservedRangeLabelsKey,\n} from \"@fluidframework/merge-tree/internal\";\n\nimport {\n\tIntervalType,\n\tSequenceInterval,\n\tSequenceIntervalClass,\n\tcreatePositionReferenceFromSegoff,\n} from \"../intervals/index.js\";\nimport { ISharedString } from \"../sharedString.js\";\n\nimport { OverlappingIntervalsIndex } from \"./overlappingIntervalsIndex.js\";\nimport { SequenceIntervalIndexes } from \"./sequenceIntervalIndexes.js\";\n\nclass OverlappingSequenceIntervalsIndex\n\textends OverlappingIntervalsIndex\n\timplements SequenceIntervalIndexes.Overlapping\n{\n\tconstructor(client: Client) {\n\t\tsuper(client);\n\t}\n\n\tpublic findOverlappingIntervalsBySegoff(\n\t\tstartSegoff: { segment: ISegment | undefined; offset: number | undefined },\n\t\tendSegoff: { segment: ISegment | undefined; offset: number | undefined },\n\t): Iterable<SequenceInterval> {\n\t\tif (this.intervalTree.intervals.isEmpty()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst startLref = createPositionReferenceFromSegoff(\n\t\t\tthis.client,\n\t\t\tstartSegoff,\n\t\t\tReferenceType.Transient,\n\t\t);\n\n\t\tconst endLref = createPositionReferenceFromSegoff(\n\t\t\tthis.client,\n\t\t\tendSegoff,\n\t\t\tReferenceType.Transient,\n\t\t);\n\n\t\tif (compareReferencePositions(startLref, endLref) > 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst transientInterval = new SequenceIntervalClass(\n\t\t\tthis.client,\n\t\t\tstartLref,\n\t\t\tendLref,\n\t\t\tIntervalType.Transient,\n\t\t\t{ [reservedRangeLabelsKey]: [\"transient\"] },\n\t\t);\n\n\t\tconst overlappingIntervalNodes = this.intervalTree.match(transientInterval);\n\t\treturn overlappingIntervalNodes.map((node) => node.key);\n\t}\n}\n\n/**\n * @internal\n */\nexport function createOverlappingSequenceIntervalsIndex(\n\tsharedString: ISharedString,\n): SequenceIntervalIndexes.Overlapping {\n\tconst client = (sharedString as unknown as { client: Client }).client;\n\treturn new OverlappingSequenceIntervalsIndex(client);\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { ISharedString } from "../sharedString.js";
|
|
6
|
-
import { SequenceIntervalIndexes } from "./sequenceIntervalIndexes.js";
|
|
7
|
-
/**
|
|
8
|
-
* @internal
|
|
9
|
-
*/
|
|
10
|
-
export declare function createOverlappingSequenceIntervalsIndex(sharedString: ISharedString): SequenceIntervalIndexes.Overlapping;
|
|
11
|
-
//# sourceMappingURL=overlappingSequenceIntervalsIndex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlappingSequenceIntervalsIndex.d.ts","sourceRoot":"","sources":["../../src/intervalIndex/overlappingSequenceIntervalsIndex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AA+CvE;;GAEG;AACH,wBAAgB,uCAAuC,CACtD,YAAY,EAAE,aAAa,GACzB,uBAAuB,CAAC,WAAW,CAGrC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
/* eslint-disable import/no-deprecated */
|
|
6
|
-
import { ReferenceType, compareReferencePositions, reservedRangeLabelsKey, } from "@fluidframework/merge-tree/internal";
|
|
7
|
-
import { IntervalType, SequenceIntervalClass, createPositionReferenceFromSegoff, } from "../intervals/index.js";
|
|
8
|
-
import { OverlappingIntervalsIndex } from "./overlappingIntervalsIndex.js";
|
|
9
|
-
class OverlappingSequenceIntervalsIndex extends OverlappingIntervalsIndex {
|
|
10
|
-
constructor(client) {
|
|
11
|
-
super(client);
|
|
12
|
-
}
|
|
13
|
-
findOverlappingIntervalsBySegoff(startSegoff, endSegoff) {
|
|
14
|
-
if (this.intervalTree.intervals.isEmpty()) {
|
|
15
|
-
return [];
|
|
16
|
-
}
|
|
17
|
-
const startLref = createPositionReferenceFromSegoff(this.client, startSegoff, ReferenceType.Transient);
|
|
18
|
-
const endLref = createPositionReferenceFromSegoff(this.client, endSegoff, ReferenceType.Transient);
|
|
19
|
-
if (compareReferencePositions(startLref, endLref) > 0) {
|
|
20
|
-
return [];
|
|
21
|
-
}
|
|
22
|
-
const transientInterval = new SequenceIntervalClass(this.client, startLref, endLref, IntervalType.Transient, { [reservedRangeLabelsKey]: ["transient"] });
|
|
23
|
-
const overlappingIntervalNodes = this.intervalTree.match(transientInterval);
|
|
24
|
-
return overlappingIntervalNodes.map((node) => node.key);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* @internal
|
|
29
|
-
*/
|
|
30
|
-
export function createOverlappingSequenceIntervalsIndex(sharedString) {
|
|
31
|
-
const client = sharedString.client;
|
|
32
|
-
return new OverlappingSequenceIntervalsIndex(client);
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=overlappingSequenceIntervalsIndex.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlappingSequenceIntervalsIndex.js","sourceRoot":"","sources":["../../src/intervalIndex/overlappingSequenceIntervalsIndex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yCAAyC;AAEzC,OAAO,EAGN,aAAa,EACb,yBAAyB,EACzB,sBAAsB,GACtB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACN,YAAY,EAEZ,qBAAqB,EACrB,iCAAiC,GACjC,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,MAAM,iCACL,SAAQ,yBAAyB;IAGjC,YAAY,MAAc;QACzB,KAAK,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IAEM,gCAAgC,CACtC,WAA0E,EAC1E,SAAwE;QAExE,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,SAAS,GAAG,iCAAiC,CAClD,IAAI,CAAC,MAAM,EACX,WAAW,EACX,aAAa,CAAC,SAAS,CACvB,CAAC;QAEF,MAAM,OAAO,GAAG,iCAAiC,CAChD,IAAI,CAAC,MAAM,EACX,SAAS,EACT,aAAa,CAAC,SAAS,CACvB,CAAC;QAEF,IAAI,yBAAyB,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,qBAAqB,CAClD,IAAI,CAAC,MAAM,EACX,SAAS,EACT,OAAO,EACP,YAAY,CAAC,SAAS,EACtB,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAC3C,CAAC;QAEF,MAAM,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5E,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;CACD;AAED;;GAEG;AACH,MAAM,UAAU,uCAAuC,CACtD,YAA2B;IAE3B,MAAM,MAAM,GAAI,YAA8C,CAAC,MAAM,CAAC;IACtE,OAAO,IAAI,iCAAiC,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable import/no-deprecated */\n\nimport {\n\tClient,\n\tISegment,\n\tReferenceType,\n\tcompareReferencePositions,\n\treservedRangeLabelsKey,\n} from \"@fluidframework/merge-tree/internal\";\n\nimport {\n\tIntervalType,\n\tSequenceInterval,\n\tSequenceIntervalClass,\n\tcreatePositionReferenceFromSegoff,\n} from \"../intervals/index.js\";\nimport { ISharedString } from \"../sharedString.js\";\n\nimport { OverlappingIntervalsIndex } from \"./overlappingIntervalsIndex.js\";\nimport { SequenceIntervalIndexes } from \"./sequenceIntervalIndexes.js\";\n\nclass OverlappingSequenceIntervalsIndex\n\textends OverlappingIntervalsIndex\n\timplements SequenceIntervalIndexes.Overlapping\n{\n\tconstructor(client: Client) {\n\t\tsuper(client);\n\t}\n\n\tpublic findOverlappingIntervalsBySegoff(\n\t\tstartSegoff: { segment: ISegment | undefined; offset: number | undefined },\n\t\tendSegoff: { segment: ISegment | undefined; offset: number | undefined },\n\t): Iterable<SequenceInterval> {\n\t\tif (this.intervalTree.intervals.isEmpty()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst startLref = createPositionReferenceFromSegoff(\n\t\t\tthis.client,\n\t\t\tstartSegoff,\n\t\t\tReferenceType.Transient,\n\t\t);\n\n\t\tconst endLref = createPositionReferenceFromSegoff(\n\t\t\tthis.client,\n\t\t\tendSegoff,\n\t\t\tReferenceType.Transient,\n\t\t);\n\n\t\tif (compareReferencePositions(startLref, endLref) > 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst transientInterval = new SequenceIntervalClass(\n\t\t\tthis.client,\n\t\t\tstartLref,\n\t\t\tendLref,\n\t\t\tIntervalType.Transient,\n\t\t\t{ [reservedRangeLabelsKey]: [\"transient\"] },\n\t\t);\n\n\t\tconst overlappingIntervalNodes = this.intervalTree.match(transientInterval);\n\t\treturn overlappingIntervalNodes.map((node) => node.key);\n\t}\n}\n\n/**\n * @internal\n */\nexport function createOverlappingSequenceIntervalsIndex(\n\tsharedString: ISharedString,\n): SequenceIntervalIndexes.Overlapping {\n\tconst client = (sharedString as unknown as { client: Client }).client;\n\treturn new OverlappingSequenceIntervalsIndex(client);\n}\n"]}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/* eslint-disable import/no-deprecated */
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
Client,
|
|
10
|
-
ISegment,
|
|
11
|
-
ReferenceType,
|
|
12
|
-
compareReferencePositions,
|
|
13
|
-
reservedRangeLabelsKey,
|
|
14
|
-
} from "@fluidframework/merge-tree/internal";
|
|
15
|
-
|
|
16
|
-
import {
|
|
17
|
-
IntervalType,
|
|
18
|
-
SequenceInterval,
|
|
19
|
-
SequenceIntervalClass,
|
|
20
|
-
createPositionReferenceFromSegoff,
|
|
21
|
-
} from "../intervals/index.js";
|
|
22
|
-
import { ISharedString } from "../sharedString.js";
|
|
23
|
-
|
|
24
|
-
import { OverlappingIntervalsIndex } from "./overlappingIntervalsIndex.js";
|
|
25
|
-
import { SequenceIntervalIndexes } from "./sequenceIntervalIndexes.js";
|
|
26
|
-
|
|
27
|
-
class OverlappingSequenceIntervalsIndex
|
|
28
|
-
extends OverlappingIntervalsIndex
|
|
29
|
-
implements SequenceIntervalIndexes.Overlapping
|
|
30
|
-
{
|
|
31
|
-
constructor(client: Client) {
|
|
32
|
-
super(client);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public findOverlappingIntervalsBySegoff(
|
|
36
|
-
startSegoff: { segment: ISegment | undefined; offset: number | undefined },
|
|
37
|
-
endSegoff: { segment: ISegment | undefined; offset: number | undefined },
|
|
38
|
-
): Iterable<SequenceInterval> {
|
|
39
|
-
if (this.intervalTree.intervals.isEmpty()) {
|
|
40
|
-
return [];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const startLref = createPositionReferenceFromSegoff(
|
|
44
|
-
this.client,
|
|
45
|
-
startSegoff,
|
|
46
|
-
ReferenceType.Transient,
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
const endLref = createPositionReferenceFromSegoff(
|
|
50
|
-
this.client,
|
|
51
|
-
endSegoff,
|
|
52
|
-
ReferenceType.Transient,
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
if (compareReferencePositions(startLref, endLref) > 0) {
|
|
56
|
-
return [];
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const transientInterval = new SequenceIntervalClass(
|
|
60
|
-
this.client,
|
|
61
|
-
startLref,
|
|
62
|
-
endLref,
|
|
63
|
-
IntervalType.Transient,
|
|
64
|
-
{ [reservedRangeLabelsKey]: ["transient"] },
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
const overlappingIntervalNodes = this.intervalTree.match(transientInterval);
|
|
68
|
-
return overlappingIntervalNodes.map((node) => node.key);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* @internal
|
|
74
|
-
*/
|
|
75
|
-
export function createOverlappingSequenceIntervalsIndex(
|
|
76
|
-
sharedString: ISharedString,
|
|
77
|
-
): SequenceIntervalIndexes.Overlapping {
|
|
78
|
-
const client = (sharedString as unknown as { client: Client }).client;
|
|
79
|
-
return new OverlappingSequenceIntervalsIndex(client);
|
|
80
|
-
}
|