@fluidframework/sequence 2.43.0-343119 → 2.43.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 +21 -0
- package/api-report/sequence.legacy.alpha.api.md +2 -2
- package/dist/intervalCollection.d.ts +4 -9
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +96 -82
- package/dist/intervalCollection.js.map +1 -1
- package/dist/intervalCollectionMap.d.ts +1 -1
- package/dist/intervalCollectionMap.d.ts.map +1 -1
- package/dist/intervalCollectionMap.js +2 -2
- package/dist/intervalCollectionMap.js.map +1 -1
- package/dist/intervalCollectionMapInterfaces.d.ts +13 -6
- package/dist/intervalCollectionMapInterfaces.d.ts.map +1 -1
- package/dist/intervalCollectionMapInterfaces.js.map +1 -1
- package/dist/intervals/intervalUtils.d.ts +4 -3
- package/dist/intervals/intervalUtils.d.ts.map +1 -1
- package/dist/intervals/intervalUtils.js +16 -3
- package/dist/intervals/intervalUtils.js.map +1 -1
- package/dist/intervals/sequenceInterval.d.ts +21 -7
- package/dist/intervals/sequenceInterval.d.ts.map +1 -1
- package/dist/intervals/sequenceInterval.js +88 -16
- package/dist/intervals/sequenceInterval.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/sequence.js +1 -1
- package/dist/sequence.js.map +1 -1
- package/lib/intervalCollection.d.ts +4 -9
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +98 -82
- package/lib/intervalCollection.js.map +1 -1
- package/lib/intervalCollectionMap.d.ts +1 -1
- package/lib/intervalCollectionMap.d.ts.map +1 -1
- package/lib/intervalCollectionMap.js +2 -2
- package/lib/intervalCollectionMap.js.map +1 -1
- package/lib/intervalCollectionMapInterfaces.d.ts +13 -6
- package/lib/intervalCollectionMapInterfaces.d.ts.map +1 -1
- package/lib/intervalCollectionMapInterfaces.js.map +1 -1
- package/lib/intervals/intervalUtils.d.ts +4 -3
- package/lib/intervals/intervalUtils.d.ts.map +1 -1
- package/lib/intervals/intervalUtils.js +15 -3
- package/lib/intervals/intervalUtils.js.map +1 -1
- package/lib/intervals/sequenceInterval.d.ts +21 -7
- package/lib/intervals/sequenceInterval.d.ts.map +1 -1
- package/lib/intervals/sequenceInterval.js +88 -16
- package/lib/intervals/sequenceInterval.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/sequence.js +1 -1
- package/lib/sequence.js.map +1 -1
- package/package.json +18 -18
- package/src/intervalCollection.ts +122 -142
- package/src/intervalCollectionMap.ts +6 -2
- package/src/intervalCollectionMapInterfaces.ts +15 -5
- package/src/intervals/intervalUtils.ts +31 -3
- package/src/intervals/sequenceInterval.ts +135 -72
- package/src/packageVersion.ts +1 -1
- package/src/sequence.ts +1 -1
|
@@ -35,14 +35,13 @@ import {
|
|
|
35
35
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
36
36
|
import { v4 as uuid } from "uuid";
|
|
37
37
|
|
|
38
|
-
import { computeStickinessFromSide } from "../intervalCollection.js";
|
|
39
|
-
|
|
40
38
|
import {
|
|
41
39
|
// eslint-disable-next-line import/no-deprecated
|
|
42
40
|
ISerializableInterval,
|
|
43
41
|
ISerializedInterval,
|
|
44
42
|
IntervalStickiness,
|
|
45
43
|
IntervalType,
|
|
44
|
+
computeStickinessFromSide,
|
|
46
45
|
endReferenceSlidingPreference,
|
|
47
46
|
startReferenceSlidingPreference,
|
|
48
47
|
type SerializedIntervalDelta,
|
|
@@ -180,7 +179,7 @@ export interface SequenceInterval extends ISerializableInterval {
|
|
|
180
179
|
end: SequencePlace | undefined,
|
|
181
180
|
op?: ISequencedDocumentMessage,
|
|
182
181
|
localSeq?: number,
|
|
183
|
-
|
|
182
|
+
canSlideToEndpoint?: boolean,
|
|
184
183
|
): SequenceInterval | undefined;
|
|
185
184
|
/**
|
|
186
185
|
* @returns whether this interval overlaps with `b`.
|
|
@@ -498,6 +497,38 @@ export class SequenceIntervalClass implements SequenceInterval, ISerializableInt
|
|
|
498
497
|
return endPos > bstart && startPos < bend;
|
|
499
498
|
}
|
|
500
499
|
|
|
500
|
+
public moveEndpointReferences(
|
|
501
|
+
rebased: Partial<Record<"start" | "end", { segment: ISegment; offset: number }>>,
|
|
502
|
+
) {
|
|
503
|
+
if (rebased.start) {
|
|
504
|
+
const startRef = createPositionReferenceFromSegoff({
|
|
505
|
+
client: this.client,
|
|
506
|
+
segoff: rebased.start,
|
|
507
|
+
refType: this.start.refType,
|
|
508
|
+
slidingPreference: this.start.slidingPreference,
|
|
509
|
+
canSlideToEndpoint: this.start.canSlideToEndpoint,
|
|
510
|
+
});
|
|
511
|
+
if (this.start.properties) {
|
|
512
|
+
startRef.addProperties(this.start.properties);
|
|
513
|
+
}
|
|
514
|
+
this.start = startRef;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
if (rebased.end) {
|
|
518
|
+
const endRef = createPositionReferenceFromSegoff({
|
|
519
|
+
client: this.client,
|
|
520
|
+
segoff: rebased.end,
|
|
521
|
+
refType: this.end.refType,
|
|
522
|
+
slidingPreference: this.end.slidingPreference,
|
|
523
|
+
canSlideToEndpoint: this.end.canSlideToEndpoint,
|
|
524
|
+
});
|
|
525
|
+
if (this.end.properties) {
|
|
526
|
+
endRef.addProperties(this.end.properties);
|
|
527
|
+
}
|
|
528
|
+
this.end = endRef;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
501
532
|
/**
|
|
502
533
|
* {@inheritDoc IInterval.modify}
|
|
503
534
|
*/
|
|
@@ -507,17 +538,9 @@ export class SequenceIntervalClass implements SequenceInterval, ISerializableInt
|
|
|
507
538
|
end: SequencePlace | undefined,
|
|
508
539
|
op?: ISequencedDocumentMessage,
|
|
509
540
|
localSeq?: number,
|
|
510
|
-
|
|
541
|
+
canSlideToEndpoint: boolean = false,
|
|
511
542
|
) {
|
|
512
543
|
const { startSide, endSide, startPos, endPos } = endpointPosAndSide(start, end);
|
|
513
|
-
const startSegment: ISegmentInternal | undefined = this.start.getSegment();
|
|
514
|
-
const endSegment: ISegmentInternal | undefined = this.end.getSegment();
|
|
515
|
-
const stickiness = computeStickinessFromSide(
|
|
516
|
-
startPos ?? startSegment?.endpointType,
|
|
517
|
-
startSide ?? this.startSide,
|
|
518
|
-
endPos ?? endSegment?.endpointType,
|
|
519
|
-
endSide ?? this.endSide,
|
|
520
|
-
);
|
|
521
544
|
const getRefType = (baseType: ReferenceType): ReferenceType => {
|
|
522
545
|
let refType = baseType;
|
|
523
546
|
if (op === undefined) {
|
|
@@ -529,17 +552,22 @@ export class SequenceIntervalClass implements SequenceInterval, ISerializableInt
|
|
|
529
552
|
|
|
530
553
|
let startRef = this.start;
|
|
531
554
|
if (startPos !== undefined) {
|
|
532
|
-
|
|
533
|
-
this.client,
|
|
555
|
+
const slidingPreference = startReferenceSlidingPreference(
|
|
534
556
|
startPos,
|
|
535
|
-
|
|
557
|
+
startSide ?? Side.Before,
|
|
558
|
+
endPos,
|
|
559
|
+
endSide ?? Side.Before,
|
|
560
|
+
);
|
|
561
|
+
startRef = createPositionReference({
|
|
562
|
+
client: this.client,
|
|
563
|
+
pos: startPos,
|
|
564
|
+
refType: getRefType(this.start.refType),
|
|
536
565
|
op,
|
|
537
|
-
undefined,
|
|
538
566
|
localSeq,
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
);
|
|
567
|
+
slidingPreference,
|
|
568
|
+
canSlideToEndpoint:
|
|
569
|
+
canSlideToEndpoint && slidingPreference === SlidingPreference.BACKWARD,
|
|
570
|
+
});
|
|
543
571
|
if (this.start.properties) {
|
|
544
572
|
startRef.addProperties(this.start.properties);
|
|
545
573
|
}
|
|
@@ -547,17 +575,22 @@ export class SequenceIntervalClass implements SequenceInterval, ISerializableInt
|
|
|
547
575
|
|
|
548
576
|
let endRef = this.end;
|
|
549
577
|
if (endPos !== undefined) {
|
|
550
|
-
|
|
551
|
-
|
|
578
|
+
const slidingPreference = endReferenceSlidingPreference(
|
|
579
|
+
startPos,
|
|
580
|
+
startSide ?? Side.Before,
|
|
552
581
|
endPos,
|
|
553
|
-
|
|
582
|
+
endSide ?? Side.Before,
|
|
583
|
+
);
|
|
584
|
+
endRef = createPositionReference({
|
|
585
|
+
client: this.client,
|
|
586
|
+
pos: endPos,
|
|
587
|
+
refType: getRefType(this.end.refType),
|
|
554
588
|
op,
|
|
555
|
-
undefined,
|
|
556
589
|
localSeq,
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
);
|
|
590
|
+
slidingPreference,
|
|
591
|
+
canSlideToEndpoint:
|
|
592
|
+
canSlideToEndpoint && slidingPreference === SlidingPreference.FORWARD,
|
|
593
|
+
});
|
|
561
594
|
if (this.end.properties) {
|
|
562
595
|
endRef.addProperties(this.end.properties);
|
|
563
596
|
}
|
|
@@ -587,17 +620,27 @@ export class SequenceIntervalClass implements SequenceInterval, ISerializableInt
|
|
|
587
620
|
}
|
|
588
621
|
}
|
|
589
622
|
|
|
590
|
-
export function createPositionReferenceFromSegoff(
|
|
591
|
-
client
|
|
592
|
-
segoff
|
|
593
|
-
refType
|
|
594
|
-
op
|
|
595
|
-
localSeq
|
|
596
|
-
fromSnapshot
|
|
597
|
-
slidingPreference
|
|
598
|
-
canSlideToEndpoint
|
|
599
|
-
rollback
|
|
600
|
-
|
|
623
|
+
export function createPositionReferenceFromSegoff({
|
|
624
|
+
client,
|
|
625
|
+
segoff,
|
|
626
|
+
refType,
|
|
627
|
+
op,
|
|
628
|
+
localSeq,
|
|
629
|
+
fromSnapshot,
|
|
630
|
+
slidingPreference,
|
|
631
|
+
canSlideToEndpoint,
|
|
632
|
+
rollback,
|
|
633
|
+
}: {
|
|
634
|
+
client: Client;
|
|
635
|
+
segoff: { segment: ISegment; offset: number } | undefined | "start" | "end";
|
|
636
|
+
refType: ReferenceType;
|
|
637
|
+
op?: ISequencedDocumentMessage;
|
|
638
|
+
localSeq?: number;
|
|
639
|
+
fromSnapshot?: boolean;
|
|
640
|
+
slidingPreference: SlidingPreference | undefined;
|
|
641
|
+
canSlideToEndpoint: boolean | undefined;
|
|
642
|
+
rollback?: boolean;
|
|
643
|
+
}): LocalReferencePosition {
|
|
601
644
|
if (segoff === "start" || segoff === "end") {
|
|
602
645
|
return client.createLocalReferencePosition(
|
|
603
646
|
segoff,
|
|
@@ -639,18 +682,27 @@ export function createPositionReferenceFromSegoff(
|
|
|
639
682
|
return createDetachedLocalReferencePosition(slidingPreference, refType);
|
|
640
683
|
}
|
|
641
684
|
|
|
642
|
-
function createPositionReference(
|
|
643
|
-
client
|
|
644
|
-
pos
|
|
645
|
-
refType
|
|
646
|
-
op
|
|
647
|
-
fromSnapshot
|
|
648
|
-
localSeq
|
|
649
|
-
slidingPreference
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
685
|
+
function createPositionReference({
|
|
686
|
+
client,
|
|
687
|
+
pos,
|
|
688
|
+
refType,
|
|
689
|
+
op,
|
|
690
|
+
fromSnapshot,
|
|
691
|
+
localSeq,
|
|
692
|
+
slidingPreference,
|
|
693
|
+
canSlideToEndpoint,
|
|
694
|
+
rollback,
|
|
695
|
+
}: {
|
|
696
|
+
client: Client;
|
|
697
|
+
pos: number | "start" | "end";
|
|
698
|
+
refType: ReferenceType;
|
|
699
|
+
op?: ISequencedDocumentMessage;
|
|
700
|
+
fromSnapshot?: boolean;
|
|
701
|
+
localSeq?: number;
|
|
702
|
+
slidingPreference: SlidingPreference;
|
|
703
|
+
canSlideToEndpoint: boolean;
|
|
704
|
+
rollback?: boolean;
|
|
705
|
+
}): LocalReferencePosition {
|
|
654
706
|
let segoff;
|
|
655
707
|
|
|
656
708
|
if (op) {
|
|
@@ -665,7 +717,7 @@ function createPositionReference(
|
|
|
665
717
|
referenceSequenceNumber: op.referenceSequenceNumber,
|
|
666
718
|
clientId: op.clientId,
|
|
667
719
|
});
|
|
668
|
-
segoff = getSlideToSegoff(segoff, slidingPreference, undefined,
|
|
720
|
+
segoff = getSlideToSegoff(segoff, slidingPreference, undefined, canSlideToEndpoint);
|
|
669
721
|
}
|
|
670
722
|
} else {
|
|
671
723
|
assert(
|
|
@@ -678,7 +730,7 @@ function createPositionReference(
|
|
|
678
730
|
: client.getContainingSegment(pos, undefined, localSeq);
|
|
679
731
|
}
|
|
680
732
|
|
|
681
|
-
return createPositionReferenceFromSegoff(
|
|
733
|
+
return createPositionReferenceFromSegoff({
|
|
682
734
|
client,
|
|
683
735
|
segoff,
|
|
684
736
|
refType,
|
|
@@ -686,9 +738,9 @@ function createPositionReference(
|
|
|
686
738
|
localSeq,
|
|
687
739
|
fromSnapshot,
|
|
688
740
|
slidingPreference,
|
|
689
|
-
|
|
741
|
+
canSlideToEndpoint,
|
|
690
742
|
rollback,
|
|
691
|
-
);
|
|
743
|
+
});
|
|
692
744
|
}
|
|
693
745
|
|
|
694
746
|
export function createTransientInterval(
|
|
@@ -715,7 +767,7 @@ export function createSequenceInterval(
|
|
|
715
767
|
intervalType: IntervalType,
|
|
716
768
|
op?: ISequencedDocumentMessage,
|
|
717
769
|
fromSnapshot?: boolean,
|
|
718
|
-
|
|
770
|
+
canSlideToEndpoint: boolean = false,
|
|
719
771
|
props?: PropertySet,
|
|
720
772
|
rollback?: boolean,
|
|
721
773
|
): SequenceIntervalClass {
|
|
@@ -730,7 +782,6 @@ export function createSequenceInterval(
|
|
|
730
782
|
endSide !== undefined,
|
|
731
783
|
0x794 /* start and end cannot be undefined because they were not passed in as undefined */,
|
|
732
784
|
);
|
|
733
|
-
const stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);
|
|
734
785
|
let beginRefType = ReferenceType.RangeBegin;
|
|
735
786
|
let endRefType = ReferenceType.RangeEnd;
|
|
736
787
|
if (intervalType === IntervalType.Transient) {
|
|
@@ -749,31 +800,43 @@ export function createSequenceInterval(
|
|
|
749
800
|
}
|
|
750
801
|
}
|
|
751
802
|
|
|
752
|
-
const
|
|
753
|
-
|
|
803
|
+
const stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);
|
|
804
|
+
|
|
805
|
+
const startSlidingPreference = startReferenceSlidingPreference(
|
|
754
806
|
startPos,
|
|
755
|
-
|
|
807
|
+
startSide,
|
|
808
|
+
endPos,
|
|
809
|
+
endSide,
|
|
810
|
+
);
|
|
811
|
+
|
|
812
|
+
const startLref = createPositionReference({
|
|
813
|
+
client,
|
|
814
|
+
pos: startPos,
|
|
815
|
+
refType: beginRefType,
|
|
756
816
|
op,
|
|
757
817
|
fromSnapshot,
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
startReferenceSlidingPreference(stickiness) === SlidingPreference.BACKWARD,
|
|
761
|
-
useNewSlidingBehavior,
|
|
818
|
+
slidingPreference: startSlidingPreference,
|
|
819
|
+
canSlideToEndpoint: canSlideToEndpoint && stickiness !== IntervalStickiness.NONE,
|
|
762
820
|
rollback,
|
|
821
|
+
});
|
|
822
|
+
|
|
823
|
+
const endSlidingPreference = endReferenceSlidingPreference(
|
|
824
|
+
startPos,
|
|
825
|
+
startSide,
|
|
826
|
+
endPos,
|
|
827
|
+
endSide,
|
|
763
828
|
);
|
|
764
829
|
|
|
765
|
-
const endLref = createPositionReference(
|
|
830
|
+
const endLref = createPositionReference({
|
|
766
831
|
client,
|
|
767
|
-
endPos,
|
|
768
|
-
endRefType,
|
|
832
|
+
pos: endPos,
|
|
833
|
+
refType: endRefType,
|
|
769
834
|
op,
|
|
770
835
|
fromSnapshot,
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
endReferenceSlidingPreference(stickiness) === SlidingPreference.FORWARD,
|
|
774
|
-
useNewSlidingBehavior,
|
|
836
|
+
slidingPreference: endSlidingPreference,
|
|
837
|
+
canSlideToEndpoint: canSlideToEndpoint && stickiness !== IntervalStickiness.NONE,
|
|
775
838
|
rollback,
|
|
776
|
-
);
|
|
839
|
+
});
|
|
777
840
|
|
|
778
841
|
const rangeProp = {
|
|
779
842
|
[reservedRangeLabelsKey]: [label],
|
package/src/packageVersion.ts
CHANGED
package/src/sequence.ts
CHANGED
|
@@ -782,7 +782,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
782
782
|
0x8bb /* Expected a recorded refSeq when resubmitting an op */,
|
|
783
783
|
);
|
|
784
784
|
this.useResubmitRefSeq(originalRefSeq, () => {
|
|
785
|
-
if (!this.intervalCollections.tryResubmitMessage(content, localOpMetadata)) {
|
|
785
|
+
if (!this.intervalCollections.tryResubmitMessage(content, localOpMetadata, squash)) {
|
|
786
786
|
this.submitSequenceMessage(
|
|
787
787
|
this.client.regeneratePendingOp(content as IMergeTreeOp, localOpMetadata, squash),
|
|
788
788
|
);
|