@fluidframework/sequence 0.59.4002 → 1.0.2
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/.eslintrc.js +1 -1
- package/dist/intervalCollection.d.ts +33 -1
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +130 -41
- package/dist/intervalCollection.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.d.ts +2 -2
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +6 -6
- package/dist/sequence.js.map +1 -1
- package/dist/sharedIntervalCollection.js +1 -1
- package/dist/sharedIntervalCollection.js.map +1 -1
- package/lib/intervalCollection.d.ts +33 -1
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +131 -42
- package/lib/intervalCollection.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.d.ts +2 -2
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +7 -7
- package/lib/sequence.js.map +1 -1
- package/lib/sharedIntervalCollection.js +1 -1
- package/lib/sharedIntervalCollection.js.map +1 -1
- package/package.json +40 -38
- package/src/intervalCollection.ts +182 -56
- package/src/packageVersion.ts +1 -1
- package/src/sequence.ts +19 -17
- package/src/sharedIntervalCollection.ts +1 -1
package/.eslintrc.js
CHANGED
|
@@ -10,7 +10,17 @@ import { IValueFactory, IValueOpEmitter, IValueOperation, IValueType } from "./d
|
|
|
10
10
|
export declare enum IntervalType {
|
|
11
11
|
Simple = 0,
|
|
12
12
|
Nest = 1,
|
|
13
|
+
/**
|
|
14
|
+
* SlideOnRemove indicates that the ends of the interval will slide if the segment
|
|
15
|
+
* they reference is removed and acked.
|
|
16
|
+
* See `packages\dds\merge-tree\REFERENCEPOSITIONS.md` for details
|
|
17
|
+
* SlideOnRemove is the default interval behavior and does not need to be specified.
|
|
18
|
+
*/
|
|
13
19
|
SlideOnRemove = 2,
|
|
20
|
+
/**
|
|
21
|
+
* @internal
|
|
22
|
+
* A temporary interval, used internally
|
|
23
|
+
*/
|
|
14
24
|
Transient = 4
|
|
15
25
|
}
|
|
16
26
|
export interface ISerializedInterval {
|
|
@@ -29,7 +39,18 @@ export interface ISerializableInterval extends IInterval {
|
|
|
29
39
|
}
|
|
30
40
|
export interface IIntervalHelpers<TInterval extends ISerializableInterval> {
|
|
31
41
|
compareEnds(a: TInterval, b: TInterval): number;
|
|
32
|
-
|
|
42
|
+
/**
|
|
43
|
+
*
|
|
44
|
+
* @param label - label of the interval collection this interval is being added to. This parameter is
|
|
45
|
+
* irrelevant for transient intervals.
|
|
46
|
+
* @param start - numerical start position of the interval
|
|
47
|
+
* @param end - numberical end position of the interval
|
|
48
|
+
* @param client - client creating the interval
|
|
49
|
+
* @param intervalType - Type of interval to create. Default is SlideOnRemove
|
|
50
|
+
* @param op - If this create came from a remote client, op that created it. Default is undefined (i.e. local)
|
|
51
|
+
* @param fromSnapshot - If this create came from loading a snapshot. Default is false.
|
|
52
|
+
*/
|
|
53
|
+
create(label: string, start: number, end: number, client: Client, intervalType?: IntervalType, op?: ISequencedDocumentMessage, fromSnapshot?: boolean): TInterval;
|
|
33
54
|
}
|
|
34
55
|
export declare class Interval implements ISerializableInterval {
|
|
35
56
|
start: number;
|
|
@@ -145,6 +166,14 @@ export declare class IntervalCollection<TInterval extends ISerializableInterval>
|
|
|
145
166
|
constructor(helpers: IIntervalHelpers<TInterval>, requiresClient: boolean, emitter: IValueOpEmitter, serializedIntervals: ISerializedInterval[]);
|
|
146
167
|
attachGraph(client: Client, label: string): void;
|
|
147
168
|
getIntervalById(id: string): TInterval;
|
|
169
|
+
/**
|
|
170
|
+
* Create a new interval and add it to the collection
|
|
171
|
+
* @param start - interval start position
|
|
172
|
+
* @param end - interval end position
|
|
173
|
+
* @param intervalType - type of the interval. All intervals are SlideOnRemove. Intervals may not be Transient.
|
|
174
|
+
* @param props - properties of the interval
|
|
175
|
+
* @returns - the created interval
|
|
176
|
+
*/
|
|
148
177
|
add(start: number, end: number, intervalType: IntervalType, props?: PropertySet): TInterval;
|
|
149
178
|
private deleteExistingInterval;
|
|
150
179
|
removeIntervalById(id: string): TInterval;
|
|
@@ -162,6 +191,9 @@ export declare class IntervalCollection<TInterval extends ISerializableInterval>
|
|
|
162
191
|
ackChange(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage): void;
|
|
163
192
|
addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>): void;
|
|
164
193
|
attachDeserializer(onDeserialize: DeserializeCallback): void;
|
|
194
|
+
private getSlideToSegment;
|
|
195
|
+
private setSlideOnRemove;
|
|
196
|
+
private ackInterval;
|
|
165
197
|
/** @deprecated - use ackAdd */
|
|
166
198
|
addInternal(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage): TInterval;
|
|
167
199
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAU,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
exports.IntervalCollection = exports.IntervalCollectionIterator = exports.IntervalCollectionValueType = exports.SequenceIntervalCollectionValueType = exports.LocalIntervalCollection = exports.createIntervalIndex = exports.defaultIntervalConflictResolver = exports.SequenceInterval = exports.Interval = exports.IntervalType = void 0;
|
|
19
19
|
/* eslint-disable no-bitwise */
|
|
20
20
|
const common_utils_1 = require("@fluidframework/common-utils");
|
|
21
|
+
const container_utils_1 = require("@fluidframework/container-utils");
|
|
21
22
|
const merge_tree_1 = require("@fluidframework/merge-tree");
|
|
22
23
|
const uuid_1 = require("uuid");
|
|
23
24
|
const reservedIntervalIdKey = "intervalId";
|
|
@@ -25,7 +26,17 @@ var IntervalType;
|
|
|
25
26
|
(function (IntervalType) {
|
|
26
27
|
IntervalType[IntervalType["Simple"] = 0] = "Simple";
|
|
27
28
|
IntervalType[IntervalType["Nest"] = 1] = "Nest";
|
|
29
|
+
/**
|
|
30
|
+
* SlideOnRemove indicates that the ends of the interval will slide if the segment
|
|
31
|
+
* they reference is removed and acked.
|
|
32
|
+
* See `packages\dds\merge-tree\REFERENCEPOSITIONS.md` for details
|
|
33
|
+
* SlideOnRemove is the default interval behavior and does not need to be specified.
|
|
34
|
+
*/
|
|
28
35
|
IntervalType[IntervalType["SlideOnRemove"] = 2] = "SlideOnRemove";
|
|
36
|
+
/**
|
|
37
|
+
* @internal
|
|
38
|
+
* A temporary interval, used internally
|
|
39
|
+
*/
|
|
29
40
|
IntervalType[IntervalType["Transient"] = 4] = "Transient";
|
|
30
41
|
})(IntervalType = exports.IntervalType || (exports.IntervalType = {}));
|
|
31
42
|
class Interval {
|
|
@@ -234,46 +245,66 @@ class SequenceInterval {
|
|
|
234
245
|
}
|
|
235
246
|
}
|
|
236
247
|
exports.SequenceInterval = SequenceInterval;
|
|
237
|
-
function
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
248
|
+
function createPositionReferenceFromSegoff(client, segoff, refType, op) {
|
|
249
|
+
if (segoff.segment) {
|
|
250
|
+
const ref = client.createLocalReferencePosition(segoff.segment, segoff.offset, refType, undefined);
|
|
251
|
+
return ref;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
if (!op && !(0, merge_tree_1.refTypeIncludesFlag)(refType, merge_tree_1.ReferenceType.Transient)) {
|
|
255
|
+
throw new container_utils_1.UsageError("Non-transient references need segment");
|
|
243
256
|
}
|
|
244
|
-
return
|
|
257
|
+
return new merge_tree_1.LocalReference(client, undefined, 0, refType);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function createPositionReference(client, pos, refType, op, fromSnapshot) {
|
|
261
|
+
let segoff;
|
|
262
|
+
if (op) {
|
|
263
|
+
(0, common_utils_1.assert)((refType & merge_tree_1.ReferenceType.SlideOnRemove) !== 0, 0x2f5 /* op create references must be SlideOnRemove */);
|
|
264
|
+
segoff = client.getContainingSegment(pos, op);
|
|
265
|
+
segoff = client.getSlideToSegment(segoff);
|
|
245
266
|
}
|
|
246
|
-
|
|
267
|
+
else {
|
|
268
|
+
(0, common_utils_1.assert)((refType & merge_tree_1.ReferenceType.SlideOnRemove) === 0 || fromSnapshot, 0x2f6 /* SlideOnRemove references must be op created */);
|
|
269
|
+
segoff = client.getContainingSegment(pos);
|
|
270
|
+
}
|
|
271
|
+
return createPositionReferenceFromSegoff(client, segoff, refType, op);
|
|
247
272
|
}
|
|
248
|
-
function createSequenceInterval(label, start, end, client, intervalType, op) {
|
|
273
|
+
function createSequenceInterval(label, start, end, client, intervalType, op, fromSnapshot) {
|
|
249
274
|
let beginRefType = merge_tree_1.ReferenceType.RangeBegin;
|
|
250
275
|
let endRefType = merge_tree_1.ReferenceType.RangeEnd;
|
|
251
|
-
if (intervalType === IntervalType.
|
|
252
|
-
beginRefType = merge_tree_1.ReferenceType.NestBegin;
|
|
253
|
-
endRefType = merge_tree_1.ReferenceType.NestEnd;
|
|
254
|
-
}
|
|
255
|
-
else if (intervalType === IntervalType.Transient) {
|
|
276
|
+
if (intervalType === IntervalType.Transient) {
|
|
256
277
|
beginRefType = merge_tree_1.ReferenceType.Transient;
|
|
257
278
|
endRefType = merge_tree_1.ReferenceType.Transient;
|
|
258
279
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
return ival;
|
|
280
|
+
else {
|
|
281
|
+
if (intervalType === IntervalType.Nest) {
|
|
282
|
+
beginRefType = merge_tree_1.ReferenceType.NestBegin;
|
|
283
|
+
endRefType = merge_tree_1.ReferenceType.NestEnd;
|
|
284
|
+
}
|
|
285
|
+
// All non-transient interval references must eventually be SlideOnRemove
|
|
286
|
+
// To ensure eventual consistency, they must start as StayOnRemove when
|
|
287
|
+
// pending (created locally and creation op is not acked)
|
|
288
|
+
if (op || fromSnapshot) {
|
|
289
|
+
beginRefType |= merge_tree_1.ReferenceType.SlideOnRemove;
|
|
290
|
+
endRefType |= merge_tree_1.ReferenceType.SlideOnRemove;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
beginRefType |= merge_tree_1.ReferenceType.StayOnRemove;
|
|
294
|
+
endRefType |= merge_tree_1.ReferenceType.StayOnRemove;
|
|
295
|
+
}
|
|
276
296
|
}
|
|
297
|
+
const startLref = createPositionReference(client, start, beginRefType, op, fromSnapshot);
|
|
298
|
+
const endLref = createPositionReference(client, end, endRefType, op, fromSnapshot);
|
|
299
|
+
startLref.pairedRef = endLref;
|
|
300
|
+
endLref.pairedRef = startLref;
|
|
301
|
+
const rangeProp = {
|
|
302
|
+
[merge_tree_1.reservedRangeLabelsKey]: [label],
|
|
303
|
+
};
|
|
304
|
+
startLref.addProperties(rangeProp);
|
|
305
|
+
endLref.addProperties(rangeProp);
|
|
306
|
+
const ival = new SequenceInterval(startLref, endLref, intervalType, rangeProp);
|
|
307
|
+
return ival;
|
|
277
308
|
}
|
|
278
309
|
function defaultIntervalConflictResolver(a, b) {
|
|
279
310
|
a.addPropertySet(b.properties);
|
|
@@ -405,14 +436,12 @@ class LocalIntervalCollection {
|
|
|
405
436
|
}
|
|
406
437
|
}
|
|
407
438
|
findOverlappingIntervals(startPosition, endPosition) {
|
|
408
|
-
if (
|
|
409
|
-
const transientInterval = this.helpers.create("transient", startPosition, endPosition, this.client, IntervalType.Transient);
|
|
410
|
-
const overlappingIntervalNodes = this.intervalTree.match(transientInterval);
|
|
411
|
-
return overlappingIntervalNodes.map((node) => node.key);
|
|
412
|
-
}
|
|
413
|
-
else {
|
|
439
|
+
if (endPosition < startPosition || this.intervalTree.intervals.isEmpty()) {
|
|
414
440
|
return [];
|
|
415
441
|
}
|
|
442
|
+
const transientInterval = this.helpers.create("transient", startPosition, endPosition, this.client, IntervalType.Transient);
|
|
443
|
+
const overlappingIntervalNodes = this.intervalTree.match(transientInterval);
|
|
444
|
+
return overlappingIntervalNodes.map((node) => node.key);
|
|
416
445
|
}
|
|
417
446
|
previousInterval(pos) {
|
|
418
447
|
const transientInterval = this.helpers.create("transient", pos, pos, this.client, IntervalType.Transient);
|
|
@@ -653,7 +682,10 @@ class IntervalCollection extends common_utils_1.TypedEventEmitter {
|
|
|
653
682
|
if (this.savedSerializedIntervals) {
|
|
654
683
|
for (const serializedInterval of this.savedSerializedIntervals) {
|
|
655
684
|
this.localCollection.ensureSerializedId(serializedInterval);
|
|
656
|
-
|
|
685
|
+
const { start, end, intervalType, properties } = serializedInterval;
|
|
686
|
+
const interval = this.helpers.create(label, start, end, client, intervalType, undefined, true);
|
|
687
|
+
interval.addProperties(properties);
|
|
688
|
+
this.localCollection.add(interval);
|
|
657
689
|
}
|
|
658
690
|
}
|
|
659
691
|
this.savedSerializedIntervals = undefined;
|
|
@@ -664,11 +696,22 @@ class IntervalCollection extends common_utils_1.TypedEventEmitter {
|
|
|
664
696
|
}
|
|
665
697
|
return this.localCollection.getIntervalById(id);
|
|
666
698
|
}
|
|
699
|
+
/**
|
|
700
|
+
* Create a new interval and add it to the collection
|
|
701
|
+
* @param start - interval start position
|
|
702
|
+
* @param end - interval end position
|
|
703
|
+
* @param intervalType - type of the interval. All intervals are SlideOnRemove. Intervals may not be Transient.
|
|
704
|
+
* @param props - properties of the interval
|
|
705
|
+
* @returns - the created interval
|
|
706
|
+
*/
|
|
667
707
|
add(start, end, intervalType, props) {
|
|
668
708
|
var _a, _b;
|
|
669
709
|
if (!this.attached) {
|
|
670
710
|
throw new Error("attach must be called prior to adding intervals");
|
|
671
711
|
}
|
|
712
|
+
if (intervalType & IntervalType.Transient) {
|
|
713
|
+
throw new Error("Can not add transient intervals");
|
|
714
|
+
}
|
|
672
715
|
const interval = this.localCollection.addInterval(start, end, intervalType, props);
|
|
673
716
|
if (interval) {
|
|
674
717
|
const serializedInterval = {
|
|
@@ -827,13 +870,15 @@ class IntervalCollection extends common_utils_1.TypedEventEmitter {
|
|
|
827
870
|
// This is an ack from the server. Remove the pending change.
|
|
828
871
|
this.removePendingChange(serializedInterval);
|
|
829
872
|
const id = serializedInterval.properties[reservedIntervalIdKey];
|
|
873
|
+
// Could store the interval in the localOpMetadata to avoid the getIntervalById call
|
|
830
874
|
interval = this.getIntervalById(id);
|
|
831
875
|
if (interval) {
|
|
832
876
|
// Let the propertyManager prune its pending change-properties set.
|
|
833
877
|
(_a = interval.propertyManager) === null || _a === void 0 ? void 0 : _a.ackPendingProperties({
|
|
834
|
-
type:
|
|
878
|
+
type: merge_tree_1.MergeTreeDeltaType.ANNOTATE,
|
|
835
879
|
props: serializedInterval.properties,
|
|
836
880
|
});
|
|
881
|
+
this.ackInterval(interval, op);
|
|
837
882
|
}
|
|
838
883
|
}
|
|
839
884
|
else {
|
|
@@ -888,6 +933,46 @@ class IntervalCollection extends common_utils_1.TypedEventEmitter {
|
|
|
888
933
|
this.onDeserialize(interval);
|
|
889
934
|
});
|
|
890
935
|
}
|
|
936
|
+
getSlideToSegment(lref) {
|
|
937
|
+
const segoff = { segment: lref.segment, offset: lref.offset };
|
|
938
|
+
const newSegoff = this.client.getSlideToSegment(segoff);
|
|
939
|
+
const value = (segoff === newSegoff) ? undefined : newSegoff;
|
|
940
|
+
return value;
|
|
941
|
+
}
|
|
942
|
+
setSlideOnRemove(lref) {
|
|
943
|
+
let refType = lref.refType;
|
|
944
|
+
refType = refType & ~merge_tree_1.ReferenceType.StayOnRemove;
|
|
945
|
+
refType = refType | merge_tree_1.ReferenceType.SlideOnRemove;
|
|
946
|
+
lref.refType = refType;
|
|
947
|
+
}
|
|
948
|
+
ackInterval(interval, op) {
|
|
949
|
+
// in current usage, interval is always a SequenceInterval
|
|
950
|
+
if (!(interval instanceof SequenceInterval)) {
|
|
951
|
+
return;
|
|
952
|
+
}
|
|
953
|
+
if (!(0, merge_tree_1.refTypeIncludesFlag)(interval.start, merge_tree_1.ReferenceType.StayOnRemove)) {
|
|
954
|
+
return;
|
|
955
|
+
}
|
|
956
|
+
(0, common_utils_1.assert)((0, merge_tree_1.refTypeIncludesFlag)(interval.end, merge_tree_1.ReferenceType.StayOnRemove), 0x2f7 /* start and end must both be StayOnRemove */);
|
|
957
|
+
const newStart = this.getSlideToSegment(interval.start);
|
|
958
|
+
const newEnd = this.getSlideToSegment(interval.end);
|
|
959
|
+
this.setSlideOnRemove(interval.start);
|
|
960
|
+
this.setSlideOnRemove(interval.end);
|
|
961
|
+
if (newStart || newEnd) {
|
|
962
|
+
this.localCollection.removeExistingInterval(interval);
|
|
963
|
+
if (newStart) {
|
|
964
|
+
const props = interval.start.properties;
|
|
965
|
+
interval.start = createPositionReferenceFromSegoff(this.client, newStart, interval.start.refType, op);
|
|
966
|
+
interval.start.addProperties(props);
|
|
967
|
+
}
|
|
968
|
+
if (newEnd) {
|
|
969
|
+
const props = interval.end.properties;
|
|
970
|
+
interval.end = createPositionReferenceFromSegoff(this.client, newEnd, interval.end.refType, op);
|
|
971
|
+
interval.end.addProperties(props);
|
|
972
|
+
}
|
|
973
|
+
this.localCollection.add(interval);
|
|
974
|
+
}
|
|
975
|
+
}
|
|
891
976
|
/** @deprecated - use ackAdd */
|
|
892
977
|
addInternal(serializedInterval, local, op) {
|
|
893
978
|
return this.ackAdd(serializedInterval, local, op);
|
|
@@ -895,8 +980,12 @@ class IntervalCollection extends common_utils_1.TypedEventEmitter {
|
|
|
895
980
|
/** @internal */
|
|
896
981
|
ackAdd(serializedInterval, local, op) {
|
|
897
982
|
if (local) {
|
|
898
|
-
|
|
899
|
-
//
|
|
983
|
+
const id = serializedInterval.properties[reservedIntervalIdKey];
|
|
984
|
+
// Could store the interval in the localOpMetadata to avoid the getIntervalById call
|
|
985
|
+
const localInterval = this.getIntervalById(id);
|
|
986
|
+
if (localInterval) {
|
|
987
|
+
this.ackInterval(localInterval, op);
|
|
988
|
+
}
|
|
900
989
|
return;
|
|
901
990
|
}
|
|
902
991
|
if (!this.attached) {
|