@fluidframework/sequence 2.90.0-378676 → 2.90.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/api-report/sequence.legacy.beta.api.md +1 -1
- package/dist/intervalCollection.d.ts +3 -2
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +5 -5
- package/dist/intervalCollection.js.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.d.ts +3 -3
- package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.js +5 -6
- package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts +3 -3
- package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointIndex.js +5 -6
- package/dist/intervalIndex/endpointIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +8 -7
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.js +5 -6
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.d.ts +3 -3
- package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.js +5 -6
- package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/dist/intervals/index.d.ts +1 -1
- package/dist/intervals/index.d.ts.map +1 -1
- package/dist/intervals/index.js +4 -2
- package/dist/intervals/index.js.map +1 -1
- package/dist/intervals/sequenceInterval.d.ts +60 -35
- package/dist/intervals/sequenceInterval.d.ts.map +1 -1
- package/dist/intervals/sequenceInterval.js +166 -102
- 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.d.ts +3 -6
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +2 -5
- package/dist/sequence.js.map +1 -1
- package/lib/intervalCollection.d.ts +3 -2
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +5 -5
- package/lib/intervalCollection.js.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.d.ts +3 -3
- package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.js +6 -7
- package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts +3 -3
- package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointIndex.js +6 -7
- package/lib/intervalIndex/endpointIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +8 -7
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.js +7 -8
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.ts +3 -3
- package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.js +6 -7
- package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/lib/intervals/index.d.ts +1 -1
- 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/sequenceInterval.d.ts +60 -35
- package/lib/intervals/sequenceInterval.d.ts.map +1 -1
- package/lib/intervals/sequenceInterval.js +162 -100
- 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.d.ts +3 -6
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +2 -5
- package/lib/sequence.js.map +1 -1
- package/package.json +20 -20
- package/src/intervalCollection.ts +6 -3
- package/src/intervalIndex/endpointInRangeIndex.ts +11 -7
- package/src/intervalIndex/endpointIndex.ts +7 -7
- package/src/intervalIndex/overlappingIntervalsIndex.ts +18 -25
- package/src/intervalIndex/startpointInRangeIndex.ts +11 -7
- package/src/intervals/index.ts +3 -1
- package/src/intervals/sequenceInterval.ts +249 -124
- package/src/packageVersion.ts +1 -1
- package/src/sequence.ts +8 -11
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
6
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
7
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
8
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
9
|
-
};
|
|
10
5
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
11
6
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
12
7
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
13
8
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
14
9
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
15
10
|
};
|
|
16
|
-
var
|
|
11
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
12
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
13
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
14
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
15
|
+
};
|
|
16
|
+
var _BaseSequenceInterval_id, _BaseSequenceInterval_properties, _SequenceIntervalClass_props, _SequenceIntervalClass_disposed;
|
|
17
17
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
18
18
|
import { PropertiesManager, ReferenceType, SlidingPreference, compareReferencePositions, createDetachedLocalReferencePosition, createMap, getSlideToSegoff, maxReferencePosition, minReferencePosition, refTypeIncludesFlag, reservedRangeLabelsKey, Side, endpointPosAndSide, addProperties, UnassignedSequenceNumber, UniversalSequenceNumber, } from "@fluidframework/merge-tree/internal";
|
|
19
19
|
import { LoggingError, UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
@@ -49,7 +49,122 @@ export function getSerializedProperties(serializedInterval) {
|
|
|
49
49
|
const id = maybeId ?? `${legacyIdPrefix}${serializedInterval.start}-${serializedInterval.end}`;
|
|
50
50
|
return { id, labels, properties };
|
|
51
51
|
}
|
|
52
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Lightweight interval for index queries (overlap, comparison).
|
|
54
|
+
* Has no Client dependency; cannot serialize or be disposed.
|
|
55
|
+
*/
|
|
56
|
+
export class BaseSequenceInterval {
|
|
57
|
+
constructor(id,
|
|
58
|
+
/**
|
|
59
|
+
* Start endpoint of this interval.
|
|
60
|
+
* @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.
|
|
61
|
+
*/
|
|
62
|
+
start,
|
|
63
|
+
/**
|
|
64
|
+
* End endpoint of this interval.
|
|
65
|
+
* @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.
|
|
66
|
+
*/
|
|
67
|
+
end, intervalType, startSide = Side.Before, endSide = Side.Before) {
|
|
68
|
+
this.start = start;
|
|
69
|
+
this.end = end;
|
|
70
|
+
this.intervalType = intervalType;
|
|
71
|
+
this.startSide = startSide;
|
|
72
|
+
this.endSide = endSide;
|
|
73
|
+
_BaseSequenceInterval_id.set(this, void 0);
|
|
74
|
+
_BaseSequenceInterval_properties.set(this, createMap());
|
|
75
|
+
__classPrivateFieldSet(this, _BaseSequenceInterval_id, id, "f");
|
|
76
|
+
}
|
|
77
|
+
get properties() {
|
|
78
|
+
return __classPrivateFieldGet(this, _BaseSequenceInterval_properties, "f");
|
|
79
|
+
}
|
|
80
|
+
/***/
|
|
81
|
+
get stickiness() {
|
|
82
|
+
this.verifyNotDispose();
|
|
83
|
+
const startSegment = this.start.getSegment();
|
|
84
|
+
const endSegment = this.end.getSegment();
|
|
85
|
+
return computeStickinessFromSide(startSegment?.endpointType, this.startSide, endSegment?.endpointType, this.endSide);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* {@inheritDoc ISerializableInterval.getIntervalId}
|
|
89
|
+
*/
|
|
90
|
+
getIntervalId() {
|
|
91
|
+
return __classPrivateFieldGet(this, _BaseSequenceInterval_id, "f");
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* {@inheritDoc IInterval.compare}
|
|
95
|
+
*/
|
|
96
|
+
compare(b) {
|
|
97
|
+
const startResult = this.compareStart(b);
|
|
98
|
+
if (startResult === 0) {
|
|
99
|
+
const endResult = this.compareEnd(b);
|
|
100
|
+
if (endResult === 0) {
|
|
101
|
+
const thisId = this.getIntervalId();
|
|
102
|
+
if (thisId) {
|
|
103
|
+
const bId = b.getIntervalId();
|
|
104
|
+
if (bId) {
|
|
105
|
+
return thisId > bId ? 1 : thisId < bId ? -1 : 0;
|
|
106
|
+
}
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return endResult;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
return startResult;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* {@inheritDoc IInterval.compareStart}
|
|
121
|
+
*/
|
|
122
|
+
compareStart(b) {
|
|
123
|
+
this.verifyNotDispose();
|
|
124
|
+
const dist = compareReferencePositions(this.start, b.start);
|
|
125
|
+
if (dist === 0) {
|
|
126
|
+
return compareSides(this.startSide, b.startSide);
|
|
127
|
+
}
|
|
128
|
+
return dist;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* {@inheritDoc IInterval.compareEnd}
|
|
132
|
+
*/
|
|
133
|
+
compareEnd(b) {
|
|
134
|
+
this.verifyNotDispose();
|
|
135
|
+
const dist = compareReferencePositions(this.end, b.end);
|
|
136
|
+
if (dist === 0) {
|
|
137
|
+
return compareSides(b.endSide, this.endSide);
|
|
138
|
+
}
|
|
139
|
+
return dist;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* {@inheritDoc IInterval.overlaps}
|
|
143
|
+
*/
|
|
144
|
+
overlaps(b) {
|
|
145
|
+
this.verifyNotDispose();
|
|
146
|
+
const result = compareReferencePositions(this.start, b.end) <= 0 &&
|
|
147
|
+
compareReferencePositions(this.end, b.start) >= 0;
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Whether this interval overlaps the provided numerical positions.
|
|
152
|
+
*/
|
|
153
|
+
overlapsPos(_bstart, _bend) {
|
|
154
|
+
assert(false, 0xcd7 /* overlapsPos not supported on BaseSequenceInterval */);
|
|
155
|
+
}
|
|
156
|
+
clone() {
|
|
157
|
+
assert(false, 0xcd8 /* clone not supported on BaseSequenceInterval */);
|
|
158
|
+
}
|
|
159
|
+
union(_b) {
|
|
160
|
+
assert(false, 0xcd9 /* union not supported on BaseSequenceInterval */);
|
|
161
|
+
}
|
|
162
|
+
verifyNotDispose() {
|
|
163
|
+
// No-op: transient intervals are not disposable.
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
_BaseSequenceInterval_id = new WeakMap(), _BaseSequenceInterval_properties = new WeakMap();
|
|
167
|
+
export class SequenceIntervalClass extends BaseSequenceInterval {
|
|
53
168
|
/**
|
|
54
169
|
* {@inheritDoc ISerializableInterval.properties}
|
|
55
170
|
*/
|
|
@@ -66,32 +181,10 @@ export class SequenceIntervalClass {
|
|
|
66
181
|
: UniversalSequenceNumber, op?.minimumSequenceNumber ?? UniversalSequenceNumber, this.client.getCollabWindow().collaborating, rollback);
|
|
67
182
|
}
|
|
68
183
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.verifyNotDispose();
|
|
72
|
-
const startSegment = this.start.getSegment();
|
|
73
|
-
const endSegment = this.end.getSegment();
|
|
74
|
-
return computeStickinessFromSide(startSegment?.endpointType, this.startSide, endSegment?.endpointType, this.endSide);
|
|
75
|
-
}
|
|
76
|
-
constructor(client, id, label,
|
|
77
|
-
/**
|
|
78
|
-
* Start endpoint of this interval.
|
|
79
|
-
* @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.
|
|
80
|
-
*/
|
|
81
|
-
start,
|
|
82
|
-
/**
|
|
83
|
-
* End endpoint of this interval.
|
|
84
|
-
* @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.
|
|
85
|
-
*/
|
|
86
|
-
end, intervalType, props, startSide = Side.Before, endSide = Side.Before) {
|
|
184
|
+
constructor(client, id, label, start, end, intervalType, props, startSide = Side.Before, endSide = Side.Before) {
|
|
185
|
+
super(id, start, end, intervalType, startSide, endSide);
|
|
87
186
|
this.client = client;
|
|
88
|
-
this.id = id;
|
|
89
187
|
this.label = label;
|
|
90
|
-
this.start = start;
|
|
91
|
-
this.end = end;
|
|
92
|
-
this.intervalType = intervalType;
|
|
93
|
-
this.startSide = startSide;
|
|
94
|
-
this.endSide = endSide;
|
|
95
188
|
_SequenceIntervalClass_props.set(this, { properties: createMap() });
|
|
96
189
|
_SequenceIntervalClass_disposed.set(this, false);
|
|
97
190
|
if (props) {
|
|
@@ -172,7 +265,7 @@ export class SequenceIntervalClass {
|
|
|
172
265
|
endSide: includeEndpoints ? this.endSide : undefined,
|
|
173
266
|
properties: {
|
|
174
267
|
...props,
|
|
175
|
-
[reservedIntervalIdKey]: this.
|
|
268
|
+
[reservedIntervalIdKey]: this.getIntervalId(),
|
|
176
269
|
[reservedRangeLabelsKey]: [this.label],
|
|
177
270
|
},
|
|
178
271
|
};
|
|
@@ -182,70 +275,7 @@ export class SequenceIntervalClass {
|
|
|
182
275
|
*/
|
|
183
276
|
clone() {
|
|
184
277
|
this.verifyNotDispose();
|
|
185
|
-
return new SequenceIntervalClass(this.client, this.
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* {@inheritDoc IInterval.compare}
|
|
189
|
-
*/
|
|
190
|
-
compare(b) {
|
|
191
|
-
const startResult = this.compareStart(b);
|
|
192
|
-
if (startResult === 0) {
|
|
193
|
-
const endResult = this.compareEnd(b);
|
|
194
|
-
if (endResult === 0) {
|
|
195
|
-
const thisId = this.getIntervalId();
|
|
196
|
-
if (thisId) {
|
|
197
|
-
const bId = b.getIntervalId();
|
|
198
|
-
if (bId) {
|
|
199
|
-
return thisId > bId ? 1 : thisId < bId ? -1 : 0;
|
|
200
|
-
}
|
|
201
|
-
return 0;
|
|
202
|
-
}
|
|
203
|
-
return 0;
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
return endResult;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
return startResult;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* {@inheritDoc IInterval.compareStart}
|
|
215
|
-
*/
|
|
216
|
-
compareStart(b) {
|
|
217
|
-
this.verifyNotDispose();
|
|
218
|
-
const dist = compareReferencePositions(this.start, b.start);
|
|
219
|
-
if (dist === 0) {
|
|
220
|
-
return compareSides(this.startSide, b.startSide);
|
|
221
|
-
}
|
|
222
|
-
return dist;
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* {@inheritDoc IInterval.compareEnd}
|
|
226
|
-
*/
|
|
227
|
-
compareEnd(b) {
|
|
228
|
-
this.verifyNotDispose();
|
|
229
|
-
const dist = compareReferencePositions(this.end, b.end);
|
|
230
|
-
if (dist === 0) {
|
|
231
|
-
return compareSides(b.endSide, this.endSide);
|
|
232
|
-
}
|
|
233
|
-
return dist;
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* {@inheritDoc IInterval.overlaps}
|
|
237
|
-
*/
|
|
238
|
-
overlaps(b) {
|
|
239
|
-
this.verifyNotDispose();
|
|
240
|
-
const result = compareReferencePositions(this.start, b.end) <= 0 &&
|
|
241
|
-
compareReferencePositions(this.end, b.start) >= 0;
|
|
242
|
-
return result;
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* {@inheritDoc ISerializableInterval.getIntervalId}
|
|
246
|
-
*/
|
|
247
|
-
getIntervalId() {
|
|
248
|
-
return this.id;
|
|
278
|
+
return new SequenceIntervalClass(this.client, this.getIntervalId(), this.label, this.start, this.end, this.intervalType, this.properties, this.startSide, this.endSide);
|
|
249
279
|
}
|
|
250
280
|
/**
|
|
251
281
|
* {@inheritDoc IInterval.union}
|
|
@@ -354,7 +384,7 @@ export class SequenceIntervalClass {
|
|
|
354
384
|
endRef.addProperties(this.end.properties);
|
|
355
385
|
}
|
|
356
386
|
}
|
|
357
|
-
const newInterval = new SequenceIntervalClass(this.client, this.
|
|
387
|
+
const newInterval = new SequenceIntervalClass(this.client, this.getIntervalId(), this.label, startRef, endRef, this.intervalType, undefined, startSide ?? this.startSide, endSide ?? this.endSide);
|
|
358
388
|
__classPrivateFieldGet(newInterval, _SequenceIntervalClass_props, "f").propertyManager = __classPrivateFieldGet(this, _SequenceIntervalClass_props, "f").propertyManager ??=
|
|
359
389
|
new PropertiesManager();
|
|
360
390
|
__classPrivateFieldGet(newInterval, _SequenceIntervalClass_props, "f").properties = __classPrivateFieldGet(this, _SequenceIntervalClass_props, "f").properties;
|
|
@@ -395,6 +425,20 @@ export function createPositionReferenceFromSegoff({ client, segoff, refType, op,
|
|
|
395
425
|
}
|
|
396
426
|
return createDetachedLocalReferencePosition(slidingPreference, refType);
|
|
397
427
|
}
|
|
428
|
+
/**
|
|
429
|
+
* Resolves a position to a {@link LocalReferencePosition} using an
|
|
430
|
+
* {@link ISharedSegmentSequence} (no Client or op context needed).
|
|
431
|
+
*/
|
|
432
|
+
export function resolvePositionRef(sequence, pos, refType, slidingPreference, canSlideToEndpoint) {
|
|
433
|
+
if (pos === "start" || pos === "end") {
|
|
434
|
+
return sequence.createLocalReferencePosition(pos, undefined, refType, undefined, slidingPreference, canSlideToEndpoint);
|
|
435
|
+
}
|
|
436
|
+
const segoff = sequence.getContainingSegment(pos);
|
|
437
|
+
if (segoff?.segment !== undefined && segoff?.offset !== undefined) {
|
|
438
|
+
return sequence.createLocalReferencePosition(segoff.segment, segoff.offset, refType, undefined, slidingPreference, canSlideToEndpoint);
|
|
439
|
+
}
|
|
440
|
+
return createDetachedLocalReferencePosition(slidingPreference, refType);
|
|
441
|
+
}
|
|
398
442
|
function createPositionReference({ client, pos, refType, op, fromSnapshot, localSeq, slidingPreference, canSlideToEndpoint, rollback, }) {
|
|
399
443
|
let segoff;
|
|
400
444
|
if (op) {
|
|
@@ -429,8 +473,26 @@ function createPositionReference({ client, pos, refType, op, fromSnapshot, local
|
|
|
429
473
|
rollback,
|
|
430
474
|
});
|
|
431
475
|
}
|
|
432
|
-
|
|
433
|
-
|
|
476
|
+
/**
|
|
477
|
+
* Creates a transient interval using an `ISharedSegmentSequence` instead of a `Client`.
|
|
478
|
+
* This avoids coupling index classes to merge-tree internals.
|
|
479
|
+
*/
|
|
480
|
+
export function createTransientIntervalFromSequence(start, end, sequence) {
|
|
481
|
+
const { startPos, startSide, endPos, endSide } = endpointPosAndSide(start ?? "start", end ?? "end");
|
|
482
|
+
assert(startPos !== undefined &&
|
|
483
|
+
endPos !== undefined &&
|
|
484
|
+
startSide !== undefined &&
|
|
485
|
+
endSide !== undefined, 0xcda /* start and end cannot be undefined because they were not passed in as undefined */);
|
|
486
|
+
const startSlidingPref = startReferenceSlidingPreference(startPos, startSide, endPos, endSide);
|
|
487
|
+
const endSlidingPref = endReferenceSlidingPreference(startPos, startSide, endPos, endSide);
|
|
488
|
+
const startLref = resolvePositionRef(sequence, startPos, ReferenceType.Transient, startSlidingPref);
|
|
489
|
+
const endLref = resolvePositionRef(sequence, endPos, ReferenceType.Transient, endSlidingPref);
|
|
490
|
+
const rangeProp = {
|
|
491
|
+
[reservedRangeLabelsKey]: ["transient"],
|
|
492
|
+
};
|
|
493
|
+
startLref.addProperties(rangeProp);
|
|
494
|
+
endLref.addProperties(rangeProp);
|
|
495
|
+
return new BaseSequenceInterval(uuid(), startLref, endLref, IntervalType.Transient, startSide, endSide);
|
|
434
496
|
}
|
|
435
497
|
export function createSequenceInterval(label, id, start, end, client, intervalType, op, fromSnapshot, canSlideToEndpoint = false, props, rollback) {
|
|
436
498
|
const { startPos, startSide, endPos, endSide } = endpointPosAndSide(start ?? "start", end ?? "end");
|
|
@@ -459,6 +521,7 @@ export function createSequenceInterval(label, id, start, end, client, intervalTy
|
|
|
459
521
|
}
|
|
460
522
|
const stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);
|
|
461
523
|
const startSlidingPreference = startReferenceSlidingPreference(startPos, startSide, endPos, endSide);
|
|
524
|
+
const endSlidingPreference = endReferenceSlidingPreference(startPos, startSide, endPos, endSide);
|
|
462
525
|
const startLref = createPositionReference({
|
|
463
526
|
client,
|
|
464
527
|
pos: startPos,
|
|
@@ -469,7 +532,6 @@ export function createSequenceInterval(label, id, start, end, client, intervalTy
|
|
|
469
532
|
canSlideToEndpoint: canSlideToEndpoint && stickiness !== IntervalStickiness.NONE,
|
|
470
533
|
rollback,
|
|
471
534
|
});
|
|
472
|
-
const endSlidingPreference = endReferenceSlidingPreference(startPos, startSide, endPos, endSide);
|
|
473
535
|
const endLref = createPositionReference({
|
|
474
536
|
client,
|
|
475
537
|
pos: endPos,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceInterval.js","sourceRoot":"","sources":["../../src/intervals/sequenceInterval.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAE7D,OAAO,EAIN,iBAAiB,EAEjB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,oCAAoC,EACpC,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EAEtB,IAAI,EACJ,kBAAkB,EAClB,aAAa,EAEb,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAGN,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,EACzB,6BAA6B,EAC7B,+BAA+B,GAG/B,MAAM,oBAAoB,CAAC;AAE5B,SAAS,YAAY,CAAC,KAAW,EAAE,KAAW;IAC7C,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC;IACV,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC;IACV,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACX,CAAC;AAED,SAAS,OAAO,CAAC,KAAW,EAAE,KAAW;IACxC,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC;AACpB,CAAC;AAED,SAAS,OAAO,CAAC,KAAW,EAAE,KAAW;IACxC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,CAAC;AAED,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEhC,MAAM,UAAU,uBAAuB,CACtC,kBAAiE;IAMjE,MAAM,EACL,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAChC,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAChC,GAAG,UAAU,EACb,GAAG,kBAAkB,CAAC,UAAU,IAAI,EAAE,CAAC;IACxC,sGAAsG;IACtG,gBAAgB;IAChB,MAAM,EAAE,GACP,OAAO,IAAI,GAAG,cAAc,GAAG,kBAAkB,CAAC,KAAK,IAAI,kBAAkB,CAAC,GAAG,EAAE,CAAC;IAErF,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC;AAqFD,MAAM,OAAO,qBAAqB;IAQjC;;OAEG;IACH,IAAW,UAAU;QACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,uBAAA,IAAI,oCAAO,CAAC,UAAU,CAAC;IAC/B,CAAC;IAEM,gBAAgB,CACtB,KAA8B,EAC9B,EAA8B,EAC9B,QAAkB;QAElB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,uBAAA,IAAI,oCAAO,CAAC,eAAe,KAAK,IAAI,iBAAiB,EAAE,CAAC;YACxD,OAAO,uBAAA,IAAI,oCAAO,CAAC,eAAe,CAAC,gBAAgB,CAClD,EAAE,KAAK,EAAE,EACT,uBAAA,IAAI,oCAAO,EACX,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,aAAa;gBAC1C,CAAC,CAAC,CAAC,EAAE,EAAE,cAAc,IAAI,wBAAwB,CAAC;gBAClD,CAAC,CAAC,uBAAuB,EAC1B,EAAE,EAAE,qBAAqB,IAAI,uBAAuB,EACpD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,aAAa,EAC3C,QAAQ,CACR,CAAC;QACH,CAAC;IACF,CAAC;IAED,KAAK;IACL,IAAW,UAAU;QACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,YAAY,GAAiC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAiC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACvE,OAAO,yBAAyB,CAC/B,YAAY,EAAE,YAAY,EAC1B,IAAI,CAAC,SAAS,EACd,UAAU,EAAE,YAAY,EACxB,IAAI,CAAC,OAAO,CACZ,CAAC;IACH,CAAC;IAED,YACkB,MAAc,EACd,EAAU,EACV,KAAa;IAC9B;;;OAGG;IACI,KAA6B;IACpC;;;OAGG;IACI,GAA2B,EAC3B,YAA0B,EACjC,KAAmB,EACH,YAAkB,IAAI,CAAC,MAAM,EAC7B,UAAgB,IAAI,CAAC,MAAM;QAhB1B,WAAM,GAAN,MAAM,CAAQ;QACd,OAAE,GAAF,EAAE,CAAQ;QACV,UAAK,GAAL,KAAK,CAAQ;QAKvB,UAAK,GAAL,KAAK,CAAwB;QAK7B,QAAG,GAAH,GAAG,CAAwB;QAC3B,iBAAY,GAAZ,YAAY,CAAc;QAEjB,cAAS,GAAT,SAAS,CAAoB;QAC7B,YAAO,GAAP,OAAO,CAAoB;QAlEnC,uCAGL,EAAE,UAAU,EAAE,SAAS,EAAO,EAAE,EAAC;QAqErC,0CAAY,KAAK,EAAC;QAJjB,IAAI,KAAK,EAAE,CAAC;YACX,uBAAA,IAAI,oCAAO,CAAC,UAAU,GAAG,aAAa,CAAC,uBAAA,IAAI,oCAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;IACF,CAAC;IAED,IAAW,QAAQ;QAClB,OAAO,uBAAA,IAAI,uCAAU,CAAC;IACvB,CAAC;IACM,OAAO,CAAC,KAAa;QAC3B,IAAI,uBAAA,IAAI,uCAAU;YAAE,OAAO;QAC3B,uBAAA,IAAI,mCAAa,IAAI,MAAA,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,uBAAA,IAAI,oCAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IACzC,CAAC;IAEO,gBAAgB;QACvB,IAAI,uBAAA,IAAI,uCAAU,EAAE,CAAC;YACpB,MAAM,IAAI,YAAY,CAAC,uCAAuC,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;IAID;;OAEG;IACI,0BAA0B,CAChC,oBAAgC,EAChC,mBAA+B;QAE/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG;gBAChB,oBAAoB;gBACpB,mBAAmB;aACnB,CAAC;YAEF,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;YAC3C,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,oBAAoB,CAAC;YACjE,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,mBAAmB,CAAC;QAC/D,CAAC;IACF,CAAC;IAED;;OAEG;IACI,6BAA6B;QACnC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;QAChC,CAAC;IACF,CAAC;IAED;;OAEG;IACI,SAAS;QACf,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,OAAO,IAAI,CAAC,cAAc,CAAC;YAC1B,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,gBAAgB,EAAE,IAAI;SACtB,CAAwB,CAAC;IAC3B,CAAC;IAEM,cAAc,CAAC,EACrB,KAAK,EACL,gBAAgB,GAIhB;QACA,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,YAAY,GAAiC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAiC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACvE,MAAM,aAAa,GAAG,gBAAgB;YACrC,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY;gBAC5B,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,CAAC,CAAC,SAAS,CAAC;QACb,MAAM,WAAW,GAAG,gBAAgB;YACnC,CAAC,CAAC,CAAC,UAAU,EAAE,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtF,CAAC,CAAC,SAAS,CAAC;QACb,OAAO;YACN,GAAG,EAAE,WAAW;YAChB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;YAC3C,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACxD,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACpD,UAAU,EAAE;gBACX,GAAG,KAAK;gBACR,CAAC,qBAAqB,CAAC,EAAE,IAAI,CAAC,EAAE;gBAChC,CAAC,sBAAsB,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;aACtC;SACiC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,KAAK;QACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,OAAO,IAAI,qBAAqB,CAC/B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,CACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,CAAmB;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpC,IAAI,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;oBAC9B,IAAI,GAAG,EAAE,CAAC;wBACT,OAAO,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,CAAC;oBACD,OAAO,CAAC,CAAC;gBACV,CAAC;gBACD,OAAO,CAAC,CAAC;YACV,CAAC;iBAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YAClB,CAAC;QACF,CAAC;aAAM,CAAC;YACP,OAAO,WAAW,CAAC;QACpB,CAAC;IACF,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,CAAmB;QACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAE5D,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,CAAmB;QACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,CAAmB;QAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,MAAM,GACX,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YACjD,yBAAyB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;OAEG;IACI,aAAa;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,CAAwB;QACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAErD,IAAI,SAAe,CAAC;QAEpB,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5B,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACP,SAAS,GAAG,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,CAAC;QAED,IAAI,OAAa,CAAC;QAElB,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;YACxB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1D,CAAC;QAED,OAAO,IAAI,qBAAqB,CAC/B,IAAI,CAAC,MAAM,EACX,IAAI,EAAE,EACN,IAAI,CAAC,KAAK,EACV,QAAQ,EACR,MAAM,EACN,IAAI,CAAC,YAAY,EACjB,SAAS,EACT,SAAS,EACT,OAAO,CACP,CAAC;IACH,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,MAAc,EAAE,IAAY;QAC9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,OAAO,MAAM,GAAG,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC;IAC3C,CAAC;IAEM,sBAAsB,CAC5B,OAAuE;QAEvE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,QAAQ,GAAG,iCAAiC,CAAC;YAClD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,OAAO,CAAC,KAAK;YACrB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;YAC/C,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB;SACjD,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC3B,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAEtB,MAAM,MAAM,GAAG,iCAAiC,CAAC;YAChD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,OAAO,CAAC,GAAG;YACnB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO;YACzB,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB;YAC7C,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB;SAC/C,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACzB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;IACnB,CAAC;IAED;;OAEG;IACI,MAAM,CACZ,KAAa,EACb,KAAgC,EAChC,GAA8B,EAC9B,EAA8B,EAC9B,QAAiB,EACjB,qBAA8B,KAAK;QAEnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChF,MAAM,UAAU,GAAG,CAAC,QAAuB,EAAiB,EAAE;YAC7D,IAAI,OAAO,GAAG,QAAQ,CAAC;YACvB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;gBACxC,OAAO,IAAI,aAAa,CAAC,YAAY,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACP,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;gBACvC,OAAO,IAAI,aAAa,CAAC,aAAa,CAAC;YACxC,CAAC;YACD,OAAO,OAAO,CAAC;QAChB,CAAC,CAAC;QAEF,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,iBAAiB,GAAG,+BAA+B,CACxD,QAAQ,EACR,SAAS,IAAI,IAAI,CAAC,MAAM,EACxB,MAAM,EACN,OAAO,IAAI,IAAI,CAAC,MAAM,CACtB,CAAC;YACF,QAAQ,GAAG,uBAAuB,CAAC;gBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,QAAQ;gBACb,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACvC,EAAE;gBACF,QAAQ;gBACR,iBAAiB;gBACjB,kBAAkB,EACjB,kBAAkB,IAAI,iBAAiB,KAAK,iBAAiB,CAAC,QAAQ;aACvE,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC3B,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/C,CAAC;QACF,CAAC;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;QACtB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,iBAAiB,GAAG,6BAA6B,CACtD,QAAQ,EACR,SAAS,IAAI,IAAI,CAAC,MAAM,EACxB,MAAM,EACN,OAAO,IAAI,IAAI,CAAC,MAAM,CACtB,CAAC;YACF,MAAM,GAAG,uBAAuB,CAAC;gBAChC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,MAAM;gBACX,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBACrC,EAAE;gBACF,QAAQ;gBACR,iBAAiB;gBACjB,kBAAkB,EACjB,kBAAkB,IAAI,iBAAiB,KAAK,iBAAiB,CAAC,OAAO;aACtE,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBACzB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,qBAAqB,CAC5C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,KAAK,EACV,QAAQ,EACR,MAAM,EACN,IAAI,CAAC,YAAY,EACjB,SAAS,EACT,SAAS,IAAI,IAAI,CAAC,SAAS,EAC3B,OAAO,IAAI,IAAI,CAAC,OAAO,CACvB,CAAC;QACF,uBAAA,WAAW,oCAAO,CAAC,eAAe,GAAG,uBAAA,IAAI,oCAAO,CAAC,eAAe;YAC/D,IAAI,iBAAiB,EAAE,CAAC;QACzB,uBAAA,WAAW,oCAAO,CAAC,UAAU,GAAG,uBAAA,IAAI,oCAAO,CAAC,UAAU,CAAC;QACvD,OAAO,WAAW,CAAC;IACpB,CAAC;IAEM,mBAAmB,CAAC,QAAqB,EAAE,EAA6B;QAC9E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO;QACR,CAAC;QAED,MAAM,CACL,uBAAA,IAAI,oCAAO,CAAC,eAAe,KAAK,SAAS,EACzC,KAAK,CAAC,uCAAuC,CAC7C,CAAC;QACF,mEAAmE;QACnE,uBAAA,IAAI,oCAAO,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,qBAAqB,EAAE;YAC5E,KAAK,EAAE,QAAQ;SACf,CAAC,CAAC;IACJ,CAAC;CACD;;AAED,MAAM,UAAU,iCAAiC,CAAC,EACjD,MAAM,EACN,MAAM,EACN,OAAO,EACP,EAAE,EACF,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,GAWR;IACA,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,4BAA4B,CACzC,MAAM,EACN,SAAS,EACT,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,kBAAkB,CAClB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,CAAC,4BAA4B,CAC9C,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,EACb,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,kBAAkB,CAClB,CAAC;QACF,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,2DAA2D;IAC3D,uBAAuB;IACvB,yFAAyF;IACzF,sDAAsD;IACtD,6FAA6F;IAC7F,IACC,CAAC,EAAE;QACH,CAAC,QAAQ;QACT,CAAC,YAAY;QACb,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC;QACtD,CAAC,QAAQ,EACR,CAAC;QACF,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,oCAAoC,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,uBAAuB,CAAC,EAChC,MAAM,EACN,GAAG,EACH,OAAO,EACP,EAAE,EACF,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,GAWR;IACA,IAAI,MAAM,CAAC;IAEX,IAAI,EAAE,EAAE,CAAC;QACR,MAAM,CACL,CAAC,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,EAC7C,KAAK,CAAC,gDAAgD,CACtD,CAAC;QACF,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,CAAC;QACd,CAAC;aAAM,CAAC;YACP,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE;gBACzC,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;gBACnD,QAAQ,EAAE,EAAE,CAAC,QAAQ;aACrB,CAAC,CAAC;YACH,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACrF,CAAC;IACF,CAAC;SAAM,CAAC;QACP,MAAM,CACL,CAAC,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,EAC/D,KAAK,CAAC,iDAAiD,CACvD,CAAC;QACF,MAAM;YACL,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK;gBAC/B,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,iCAAiC,CAAC;QACxC,MAAM;QACN,MAAM;QACN,OAAO;QACP,EAAE;QACF,QAAQ;QACR,YAAY;QACZ,iBAAiB;QACjB,kBAAkB;QAClB,QAAQ;KACR,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,KAAgC,EAChC,GAA8B,EAC9B,MAAc;IAEd,OAAO,sBAAsB,CAC5B,WAAW,EACX,IAAI,EAAE,EACN,KAAK,EACL,GAAG,EACH,MAAM,EACN,YAAY,CAAC,SAAS,CACtB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACrC,KAAa,EACb,EAAU,EACV,KAAgC,EAChC,GAA8B,EAC9B,MAAc,EACd,YAA0B,EAC1B,EAA8B,EAC9B,YAAsB,EACtB,qBAA8B,KAAK,EACnC,KAAmB,EACnB,QAAkB;IAElB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAClE,KAAK,IAAI,OAAO,EAChB,GAAG,IAAI,KAAK,CACZ,CAAC;IACF,MAAM,CACL,QAAQ,KAAK,SAAS;QACrB,MAAM,KAAK,SAAS;QACpB,SAAS,KAAK,SAAS;QACvB,OAAO,KAAK,SAAS,EACtB,KAAK,CAAC,oFAAoF,CAC1F,CAAC;IACF,IAAI,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC;IAC5C,IAAI,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC;IACxC,IAAI,YAAY,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;QAC7C,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC;QACvC,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC;IACtC,CAAC;SAAM,CAAC;QACP,yEAAyE;QACzE,uEAAuE;QACvE,yDAAyD;QACzD,IAAI,EAAE,IAAI,YAAY,EAAE,CAAC;YACxB,YAAY,IAAI,aAAa,CAAC,aAAa,CAAC;YAC5C,UAAU,IAAI,aAAa,CAAC,aAAa,CAAC;QAC3C,CAAC;aAAM,CAAC;YACP,YAAY,IAAI,aAAa,CAAC,YAAY,CAAC;YAC3C,UAAU,IAAI,aAAa,CAAC,YAAY,CAAC;QAC1C,CAAC;IACF,CAAC;IAED,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnF,MAAM,sBAAsB,GAAG,+BAA+B,CAC7D,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,CACP,CAAC;IAEF,MAAM,SAAS,GAAG,uBAAuB,CAAC;QACzC,MAAM;QACN,GAAG,EAAE,QAAQ;QACb,OAAO,EAAE,YAAY;QACrB,EAAE;QACF,YAAY;QACZ,iBAAiB,EAAE,sBAAsB;QACzC,kBAAkB,EAAE,kBAAkB,IAAI,UAAU,KAAK,kBAAkB,CAAC,IAAI;QAChF,QAAQ;KACR,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,6BAA6B,CACzD,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,CACP,CAAC;IAEF,MAAM,OAAO,GAAG,uBAAuB,CAAC;QACvC,MAAM;QACN,GAAG,EAAE,MAAM;QACX,OAAO,EAAE,UAAU;QACnB,EAAE;QACF,YAAY;QACZ,iBAAiB,EAAE,oBAAoB;QACvC,kBAAkB,EAAE,kBAAkB,IAAI,UAAU,KAAK,kBAAkB,CAAC,IAAI;QAChF,QAAQ;KACR,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG;QACjB,CAAC,sBAAsB,CAAC,EAAE,CAAC,KAAK,CAAC;KACjC,CAAC;IACF,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAEjC,MAAM,IAAI,GAAG,IAAI,qBAAqB,CACrC,MAAM,EACN,EAAE,EACF,KAAK,EACL,SAAS,EACT,OAAO,EACP,YAAY,EACZ,KAAK,KAAK,SAAS;QAClB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,qBAAqB,CAAC,EAAE,SAAS,EAAE,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,EACxF,SAAS,EACT,OAAO,CACP,CAAC;IACF,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport type { IDisposable } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\nimport {\n\tClient,\n\tISegment,\n\tLocalReferencePosition,\n\tPropertiesManager,\n\tPropertySet,\n\tReferenceType,\n\tSlidingPreference,\n\tcompareReferencePositions,\n\tcreateDetachedLocalReferencePosition,\n\tcreateMap,\n\tgetSlideToSegoff,\n\tmaxReferencePosition,\n\tminReferencePosition,\n\trefTypeIncludesFlag,\n\treservedRangeLabelsKey,\n\tSequencePlace,\n\tSide,\n\tendpointPosAndSide,\n\taddProperties,\n\ttype ISegmentInternal,\n\tUnassignedSequenceNumber,\n\tUniversalSequenceNumber,\n} from \"@fluidframework/merge-tree/internal\";\nimport { LoggingError, UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport {\n\tISerializableInterval,\n\tISerializedInterval,\n\tIntervalStickiness,\n\tIntervalType,\n\tcomputeStickinessFromSide,\n\tendReferenceSlidingPreference,\n\tstartReferenceSlidingPreference,\n\ttype IInterval,\n\ttype SerializedIntervalDelta,\n} from \"./intervalUtils.js\";\n\nfunction compareSides(sideA: Side, sideB: Side): number {\n\tif (sideA === sideB) {\n\t\treturn 0;\n\t}\n\n\tif (sideA === Side.Before) {\n\t\treturn 1;\n\t}\n\n\treturn -1;\n}\n\nfunction minSide(sideA: Side, sideB: Side): Side {\n\tif (sideA === Side.After && sideB === Side.After) {\n\t\treturn Side.After;\n\t}\n\n\treturn Side.Before;\n}\n\nfunction maxSide(sideA: Side, sideB: Side): Side {\n\tif (sideA === Side.Before && sideB === Side.Before) {\n\t\treturn Side.Before;\n\t}\n\n\treturn Side.After;\n}\n\nconst reservedIntervalIdKey = \"intervalId\";\n\nconst legacyIdPrefix = \"legacy\";\n\nexport function getSerializedProperties(\n\tserializedInterval: ISerializedInterval | SerializedIntervalDelta,\n): {\n\tid: string;\n\tlabels: string[];\n\tproperties: PropertySet;\n} {\n\tconst {\n\t\t[reservedIntervalIdKey]: maybeId,\n\t\t[reservedRangeLabelsKey]: labels,\n\t\t...properties\n\t} = serializedInterval.properties ?? {};\n\t// Create a non-unique ID based on start and end to be used on intervals that come from legacy clients\n\t// without ID's.\n\tconst id =\n\t\tmaybeId ?? `${legacyIdPrefix}${serializedInterval.start}-${serializedInterval.end}`;\n\n\treturn { id, labels, properties };\n}\n\n/**\n * Interval implementation whose ends are associated with positions in a mutatable sequence.\n * As such, when content is inserted into the middle of the interval, the interval expands to\n * include that content.\n *\n * @remarks The endpoints' positions should be treated exclusively to get\n * reasonable behavior. E.g., an interval referring to \"hello\" in \"hello world\"\n * should have a start position of 0 and an end position of 5.\n *\n * To see why, consider what happens if \"llo wor\" is removed from the string to make \"held\".\n * The interval's startpoint remains on the \"h\" (it isn't altered), but the interval's endpoint\n * slides forward to the next unremoved position, which is the \"l\" in \"held\".\n * Users would generally expect the interval to now refer to \"he\" (as it is the subset of content\n * remaining after the removal), hence the \"l\" should be excluded.\n * If the interval endpoint was treated inclusively, the interval would now refer to \"hel\", which\n * is undesirable.\n *\n * Since the endpoints of an interval are treated exclusively but cannot be greater\n * than or equal to the length of the associated sequence, there exist special\n * endpoint segments, \"start\" and \"end\", which represent the position immediately\n * before or immediately after the string respectively.\n *\n * If a `SequenceInterval` is created on a sequence with the\n * `mergeTreeReferencesCanSlideToEndpoint` feature flag set to true, the endpoints\n * of the interval that are exclusive will have the ability to slide to these\n * special endpoint segments.\n * @legacy @beta\n */\nexport interface SequenceInterval extends IInterval {\n\treadonly start: LocalReferencePosition;\n\t/**\n\t * End endpoint of this interval.\n\t * @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.\n\t */\n\treadonly end: LocalReferencePosition;\n\treadonly intervalType: IntervalType;\n\treadonly startSide: Side;\n\treadonly endSide: Side;\n\treadonly stickiness: IntervalStickiness;\n\n\t/** Serializable bag of properties associated with the interval. */\n\tproperties: PropertySet;\n\n\t/**\n\t * Compares this interval to `b` with standard comparator semantics:\n\t * - returns -1 if this is less than `b`\n\t * - returns 1 if this is greater than `b`\n\t * - returns 0 if this is equivalent to `b`\n\t * @param b - Interval to compare against\n\t */\n\tcompare(b: SequenceInterval): number;\n\t/**\n\t * Compares the start endpoint of this interval to `b`'s start endpoint.\n\t * Standard comparator semantics apply.\n\t * @param b - Interval to compare against\n\t */\n\tcompareStart(b: SequenceInterval): number;\n\t/**\n\t * Compares the end endpoint of this interval to `b`'s end endpoint.\n\t * Standard comparator semantics apply.\n\t * @param b - Interval to compare against\n\t */\n\tcompareEnd(b: SequenceInterval): number;\n\n\t/**\n\t * @returns whether this interval overlaps with `b`.\n\t * Intervals are considered to overlap if their intersection is non-empty.\n\t */\n\toverlaps(b: SequenceInterval): boolean;\n\n\t/**\n\t * @returns whether this interval overlaps two numerical positions.\n\t */\n\toverlapsPos(bstart: number, bend: number): boolean;\n\n\t/**\n\t * Gets the id associated with this interval.\n\t * When the interval is used as part of an interval collection, this id can be used to modify or remove the\n\t * interval.\n\t */\n\tgetIntervalId(): string;\n}\n\nexport class SequenceIntervalClass\n\timplements SequenceInterval, ISerializableInterval, IDisposable\n{\n\treadonly #props: {\n\t\tpropertyManager?: PropertiesManager;\n\t\tproperties: PropertySet;\n\t} = { properties: createMap<any>() };\n\n\t/**\n\t * {@inheritDoc ISerializableInterval.properties}\n\t */\n\tpublic get properties(): Readonly<PropertySet> {\n\t\tthis.verifyNotDispose();\n\t\treturn this.#props.properties;\n\t}\n\n\tpublic changeProperties(\n\t\tprops: PropertySet | undefined,\n\t\top?: ISequencedDocumentMessage,\n\t\trollback?: boolean,\n\t) {\n\t\tthis.verifyNotDispose();\n\n\t\tif (props !== undefined) {\n\t\t\tthis.#props.propertyManager ??= new PropertiesManager();\n\t\t\treturn this.#props.propertyManager.handleProperties(\n\t\t\t\t{ props },\n\t\t\t\tthis.#props,\n\t\t\t\tthis.client.getCollabWindow().collaborating\n\t\t\t\t\t? (op?.sequenceNumber ?? UnassignedSequenceNumber)\n\t\t\t\t\t: UniversalSequenceNumber,\n\t\t\t\top?.minimumSequenceNumber ?? UniversalSequenceNumber,\n\t\t\t\tthis.client.getCollabWindow().collaborating,\n\t\t\t\trollback,\n\t\t\t);\n\t\t}\n\t}\n\n\t/***/\n\tpublic get stickiness(): IntervalStickiness {\n\t\tthis.verifyNotDispose();\n\n\t\tconst startSegment: ISegmentInternal | undefined = this.start.getSegment();\n\t\tconst endSegment: ISegmentInternal | undefined = this.end.getSegment();\n\t\treturn computeStickinessFromSide(\n\t\t\tstartSegment?.endpointType,\n\t\t\tthis.startSide,\n\t\t\tendSegment?.endpointType,\n\t\t\tthis.endSide,\n\t\t);\n\t}\n\n\tconstructor(\n\t\tprivate readonly client: Client,\n\t\tprivate readonly id: string,\n\t\tprivate readonly label: string,\n\t\t/**\n\t\t * Start endpoint of this interval.\n\t\t * @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.\n\t\t */\n\t\tpublic start: LocalReferencePosition,\n\t\t/**\n\t\t * End endpoint of this interval.\n\t\t * @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.\n\t\t */\n\t\tpublic end: LocalReferencePosition,\n\t\tpublic intervalType: IntervalType,\n\t\tprops?: PropertySet,\n\t\tpublic readonly startSide: Side = Side.Before,\n\t\tpublic readonly endSide: Side = Side.Before,\n\t) {\n\t\tif (props) {\n\t\t\tthis.#props.properties = addProperties(this.#props.properties, props);\n\t\t}\n\t}\n\t#disposed = false;\n\tpublic get disposed() {\n\t\treturn this.#disposed;\n\t}\n\tpublic dispose(error?: Error): void {\n\t\tif (this.#disposed) return;\n\t\tthis.#disposed = true;\n\t\tthis.client.removeLocalReferencePosition(this.start);\n\t\tthis.client.removeLocalReferencePosition(this.end);\n\t\tthis.removePositionChangeListeners();\n\t\tthis.#props.propertyManager = undefined;\n\t}\n\n\tprivate verifyNotDispose() {\n\t\tif (this.#disposed) {\n\t\t\tthrow new LoggingError(\"Invalid interval access after dispose\");\n\t\t}\n\t}\n\n\tprivate callbacks?: Record<\"beforePositionChange\" | \"afterPositionChange\", () => void>;\n\n\t/**\n\t * Subscribes to position change events on this interval if there are no current listeners.\n\t */\n\tpublic addPositionChangeListeners(\n\t\tbeforePositionChange: () => void,\n\t\tafterPositionChange: () => void,\n\t): void {\n\t\tthis.verifyNotDispose();\n\t\tif (this.callbacks === undefined) {\n\t\t\tthis.callbacks = {\n\t\t\t\tbeforePositionChange,\n\t\t\t\tafterPositionChange,\n\t\t\t};\n\n\t\t\tconst startCbs = (this.start.callbacks ??= {});\n\t\t\tconst endCbs = (this.end.callbacks ??= {});\n\t\t\tstartCbs.beforeSlide = endCbs.beforeSlide = beforePositionChange;\n\t\t\tstartCbs.afterSlide = endCbs.afterSlide = afterPositionChange;\n\t\t}\n\t}\n\n\t/**\n\t * Removes the currently subscribed position change listeners.\n\t */\n\tpublic removePositionChangeListeners(): void {\n\t\tif (this.callbacks) {\n\t\t\tthis.callbacks = undefined;\n\t\t\tthis.start.callbacks = undefined;\n\t\t\tthis.end.callbacks = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc ISerializableInterval.serialize}\n\t */\n\tpublic serialize(): ISerializedInterval {\n\t\tthis.verifyNotDispose();\n\n\t\treturn this.serializeDelta({\n\t\t\tprops: this.properties,\n\t\t\tincludeEndpoints: true,\n\t\t}) as ISerializedInterval;\n\t}\n\n\tpublic serializeDelta({\n\t\tprops,\n\t\tincludeEndpoints,\n\t}: {\n\t\tprops: PropertySet | undefined;\n\t\tincludeEndpoints: boolean;\n\t}): SerializedIntervalDelta {\n\t\tthis.verifyNotDispose();\n\n\t\tconst startSegment: ISegmentInternal | undefined = this.start.getSegment();\n\t\tconst endSegment: ISegmentInternal | undefined = this.end.getSegment();\n\t\tconst startPosition = includeEndpoints\n\t\t\t? (startSegment?.endpointType ??\n\t\t\t\tthis.client.localReferencePositionToPosition(this.start))\n\t\t\t: undefined;\n\t\tconst endPosition = includeEndpoints\n\t\t\t? (endSegment?.endpointType ?? this.client.localReferencePositionToPosition(this.end))\n\t\t\t: undefined;\n\t\treturn {\n\t\t\tend: endPosition,\n\t\t\tintervalType: this.intervalType,\n\t\t\tsequenceNumber: this.client.getCurrentSeq(),\n\t\t\tstart: startPosition,\n\t\t\tstickiness: this.stickiness,\n\t\t\tstartSide: includeEndpoints ? this.startSide : undefined,\n\t\t\tendSide: includeEndpoints ? this.endSide : undefined,\n\t\t\tproperties: {\n\t\t\t\t...props,\n\t\t\t\t[reservedIntervalIdKey]: this.id,\n\t\t\t\t[reservedRangeLabelsKey]: [this.label],\n\t\t\t},\n\t\t} satisfies SerializedIntervalDelta;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.clone}\n\t */\n\tpublic clone(): SequenceIntervalClass {\n\t\tthis.verifyNotDispose();\n\n\t\treturn new SequenceIntervalClass(\n\t\t\tthis.client,\n\t\t\tthis.id,\n\t\t\tthis.label,\n\t\t\tthis.start,\n\t\t\tthis.end,\n\t\t\tthis.intervalType,\n\t\t\tthis.properties,\n\t\t\tthis.startSide,\n\t\t\tthis.endSide,\n\t\t);\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.compare}\n\t */\n\tpublic compare(b: SequenceInterval) {\n\t\tconst startResult = this.compareStart(b);\n\t\tif (startResult === 0) {\n\t\t\tconst endResult = this.compareEnd(b);\n\t\t\tif (endResult === 0) {\n\t\t\t\tconst thisId = this.getIntervalId();\n\t\t\t\tif (thisId) {\n\t\t\t\t\tconst bId = b.getIntervalId();\n\t\t\t\t\tif (bId) {\n\t\t\t\t\t\treturn thisId > bId ? 1 : thisId < bId ? -1 : 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t} else {\n\t\t\t\treturn endResult;\n\t\t\t}\n\t\t} else {\n\t\t\treturn startResult;\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.compareStart}\n\t */\n\tpublic compareStart(b: SequenceInterval) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst dist = compareReferencePositions(this.start, b.start);\n\n\t\tif (dist === 0) {\n\t\t\treturn compareSides(this.startSide, b.startSide);\n\t\t}\n\n\t\treturn dist;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.compareEnd}\n\t */\n\tpublic compareEnd(b: SequenceInterval): number {\n\t\tthis.verifyNotDispose();\n\n\t\tconst dist = compareReferencePositions(this.end, b.end);\n\n\t\tif (dist === 0) {\n\t\t\treturn compareSides(b.endSide, this.endSide);\n\t\t}\n\n\t\treturn dist;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.overlaps}\n\t */\n\tpublic overlaps(b: SequenceInterval) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst result =\n\t\t\tcompareReferencePositions(this.start, b.end) <= 0 &&\n\t\t\tcompareReferencePositions(this.end, b.start) >= 0;\n\t\treturn result;\n\t}\n\n\t/**\n\t * {@inheritDoc ISerializableInterval.getIntervalId}\n\t */\n\tpublic getIntervalId(): string {\n\t\treturn this.id;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.union}\n\t */\n\tpublic union(b: SequenceIntervalClass) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst newStart = minReferencePosition(this.start, b.start);\n\t\tconst newEnd = maxReferencePosition(this.end, b.end);\n\n\t\tlet startSide: Side;\n\n\t\tif (this.start === b.start) {\n\t\t\tstartSide = minSide(this.startSide, b.startSide);\n\t\t} else {\n\t\t\tstartSide = this.start === newStart ? this.startSide : b.startSide;\n\t\t}\n\n\t\tlet endSide: Side;\n\n\t\tif (this.end === b.end) {\n\t\t\tendSide = maxSide(this.endSide, b.endSide);\n\t\t} else {\n\t\t\tendSide = this.end === newEnd ? this.endSide : b.endSide;\n\t\t}\n\n\t\treturn new SequenceIntervalClass(\n\t\t\tthis.client,\n\t\t\tuuid(),\n\t\t\tthis.label,\n\t\t\tnewStart,\n\t\t\tnewEnd,\n\t\t\tthis.intervalType,\n\t\t\tundefined,\n\t\t\tstartSide,\n\t\t\tendSide,\n\t\t);\n\t}\n\n\t/**\n\t * Whether this interval overlaps the provided numerical positions.\n\t */\n\tpublic overlapsPos(bstart: number, bend: number) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst startPos = this.client.localReferencePositionToPosition(this.start);\n\t\tconst endPos = this.client.localReferencePositionToPosition(this.end);\n\t\treturn endPos > bstart && startPos < bend;\n\t}\n\n\tpublic moveEndpointReferences(\n\t\trebased: Record<\"start\" | \"end\", { segment: ISegment; offset: number }>,\n\t) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst startRef = createPositionReferenceFromSegoff({\n\t\t\tclient: this.client,\n\t\t\tsegoff: rebased.start,\n\t\t\trefType: this.start.refType,\n\t\t\tslidingPreference: this.start.slidingPreference,\n\t\t\tcanSlideToEndpoint: this.start.canSlideToEndpoint,\n\t\t});\n\t\tif (this.start.properties) {\n\t\t\tstartRef.addProperties(this.start.properties);\n\t\t}\n\t\tthis.start = startRef;\n\n\t\tconst endRef = createPositionReferenceFromSegoff({\n\t\t\tclient: this.client,\n\t\t\tsegoff: rebased.end,\n\t\t\trefType: this.end.refType,\n\t\t\tslidingPreference: this.end.slidingPreference,\n\t\t\tcanSlideToEndpoint: this.end.canSlideToEndpoint,\n\t\t});\n\t\tif (this.end.properties) {\n\t\t\tendRef.addProperties(this.end.properties);\n\t\t}\n\t\tthis.end = endRef;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.modify}\n\t */\n\tpublic modify(\n\t\tlabel: string,\n\t\tstart: SequencePlace | undefined,\n\t\tend: SequencePlace | undefined,\n\t\top?: ISequencedDocumentMessage,\n\t\tlocalSeq?: number,\n\t\tcanSlideToEndpoint: boolean = false,\n\t) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst { startSide, endSide, startPos, endPos } = endpointPosAndSide(start, end);\n\t\tconst getRefType = (baseType: ReferenceType): ReferenceType => {\n\t\t\tlet refType = baseType;\n\t\t\tif (op === undefined) {\n\t\t\t\trefType &= ~ReferenceType.SlideOnRemove;\n\t\t\t\trefType |= ReferenceType.StayOnRemove;\n\t\t\t} else {\n\t\t\t\trefType &= ~ReferenceType.StayOnRemove;\n\t\t\t\trefType |= ReferenceType.SlideOnRemove;\n\t\t\t}\n\t\t\treturn refType;\n\t\t};\n\n\t\tlet startRef = this.start;\n\t\tif (startPos !== undefined) {\n\t\t\tconst slidingPreference = startReferenceSlidingPreference(\n\t\t\t\tstartPos,\n\t\t\t\tstartSide ?? Side.Before,\n\t\t\t\tendPos,\n\t\t\t\tendSide ?? Side.Before,\n\t\t\t);\n\t\t\tstartRef = createPositionReference({\n\t\t\t\tclient: this.client,\n\t\t\t\tpos: startPos,\n\t\t\t\trefType: getRefType(this.start.refType),\n\t\t\t\top,\n\t\t\t\tlocalSeq,\n\t\t\t\tslidingPreference,\n\t\t\t\tcanSlideToEndpoint:\n\t\t\t\t\tcanSlideToEndpoint && slidingPreference === SlidingPreference.BACKWARD,\n\t\t\t});\n\t\t\tif (this.start.properties) {\n\t\t\t\tstartRef.addProperties(this.start.properties);\n\t\t\t}\n\t\t}\n\n\t\tlet endRef = this.end;\n\t\tif (endPos !== undefined) {\n\t\t\tconst slidingPreference = endReferenceSlidingPreference(\n\t\t\t\tstartPos,\n\t\t\t\tstartSide ?? Side.Before,\n\t\t\t\tendPos,\n\t\t\t\tendSide ?? Side.Before,\n\t\t\t);\n\t\t\tendRef = createPositionReference({\n\t\t\t\tclient: this.client,\n\t\t\t\tpos: endPos,\n\t\t\t\trefType: getRefType(this.end.refType),\n\t\t\t\top,\n\t\t\t\tlocalSeq,\n\t\t\t\tslidingPreference,\n\t\t\t\tcanSlideToEndpoint:\n\t\t\t\t\tcanSlideToEndpoint && slidingPreference === SlidingPreference.FORWARD,\n\t\t\t});\n\t\t\tif (this.end.properties) {\n\t\t\t\tendRef.addProperties(this.end.properties);\n\t\t\t}\n\t\t}\n\n\t\tconst newInterval = new SequenceIntervalClass(\n\t\t\tthis.client,\n\t\t\tthis.id,\n\t\t\tthis.label,\n\t\t\tstartRef,\n\t\t\tendRef,\n\t\t\tthis.intervalType,\n\t\t\tundefined,\n\t\t\tstartSide ?? this.startSide,\n\t\t\tendSide ?? this.endSide,\n\t\t);\n\t\tnewInterval.#props.propertyManager = this.#props.propertyManager ??=\n\t\t\tnew PropertiesManager();\n\t\tnewInterval.#props.properties = this.#props.properties;\n\t\treturn newInterval;\n\t}\n\n\tpublic ackPropertiesChange(newProps: PropertySet, op: ISequencedDocumentMessage) {\n\t\tthis.verifyNotDispose();\n\n\t\tif (Object.keys(newProps).length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(\n\t\t\tthis.#props.propertyManager !== undefined,\n\t\t\t0xbd5 /* must have property manager to ack */,\n\t\t);\n\t\t// Let the propertyManager prune its pending change-properties set.\n\t\tthis.#props.propertyManager.ack(op.sequenceNumber, op.minimumSequenceNumber, {\n\t\t\tprops: newProps,\n\t\t});\n\t}\n}\n\nexport function createPositionReferenceFromSegoff({\n\tclient,\n\tsegoff,\n\trefType,\n\top,\n\tlocalSeq,\n\tfromSnapshot,\n\tslidingPreference,\n\tcanSlideToEndpoint,\n\trollback,\n}: {\n\tclient: Client;\n\tsegoff: { segment: ISegment; offset: number } | undefined | \"start\" | \"end\";\n\trefType: ReferenceType;\n\top?: ISequencedDocumentMessage;\n\tlocalSeq?: number;\n\tfromSnapshot?: boolean;\n\tslidingPreference: SlidingPreference | undefined;\n\tcanSlideToEndpoint: boolean | undefined;\n\trollback?: boolean;\n}): LocalReferencePosition {\n\tif (segoff === \"start\" || segoff === \"end\") {\n\t\treturn client.createLocalReferencePosition(\n\t\t\tsegoff,\n\t\t\tundefined,\n\t\t\trefType,\n\t\t\tundefined,\n\t\t\tslidingPreference,\n\t\t\tcanSlideToEndpoint,\n\t\t);\n\t}\n\n\tif (segoff?.segment) {\n\t\tconst ref = client.createLocalReferencePosition(\n\t\t\tsegoff.segment,\n\t\t\tsegoff.offset,\n\t\t\trefType,\n\t\t\tundefined,\n\t\t\tslidingPreference,\n\t\t\tcanSlideToEndpoint,\n\t\t);\n\t\treturn ref;\n\t}\n\n\t// Creating references on detached segments is allowed for:\n\t// - Transient segments\n\t// - References coming from a remote client (location may have been concurrently removed)\n\t// - References being rebased to a new sequence number\n\t// (segment they originally referred to may have been removed with no suitable replacement)\n\tif (\n\t\t!op &&\n\t\t!localSeq &&\n\t\t!fromSnapshot &&\n\t\t!refTypeIncludesFlag(refType, ReferenceType.Transient) &&\n\t\t!rollback\n\t) {\n\t\tthrow new UsageError(\"Non-transient references need segment\");\n\t}\n\n\treturn createDetachedLocalReferencePosition(slidingPreference, refType);\n}\n\nfunction createPositionReference({\n\tclient,\n\tpos,\n\trefType,\n\top,\n\tfromSnapshot,\n\tlocalSeq,\n\tslidingPreference,\n\tcanSlideToEndpoint,\n\trollback,\n}: {\n\tclient: Client;\n\tpos: number | \"start\" | \"end\";\n\trefType: ReferenceType;\n\top?: ISequencedDocumentMessage;\n\tfromSnapshot?: boolean;\n\tlocalSeq?: number;\n\tslidingPreference: SlidingPreference;\n\tcanSlideToEndpoint: boolean;\n\trollback?: boolean;\n}): LocalReferencePosition {\n\tlet segoff;\n\n\tif (op) {\n\t\tassert(\n\t\t\t(refType & ReferenceType.SlideOnRemove) !== 0,\n\t\t\t0x2f5 /* op create references must be SlideOnRemove */,\n\t\t);\n\t\tif (pos === \"start\" || pos === \"end\") {\n\t\t\tsegoff = pos;\n\t\t} else {\n\t\t\tsegoff = client.getContainingSegment(pos, {\n\t\t\t\treferenceSequenceNumber: op.referenceSequenceNumber,\n\t\t\t\tclientId: op.clientId,\n\t\t\t});\n\t\t\tsegoff = getSlideToSegoff(segoff, slidingPreference, undefined, canSlideToEndpoint);\n\t\t}\n\t} else {\n\t\tassert(\n\t\t\t(refType & ReferenceType.SlideOnRemove) === 0 || !!fromSnapshot,\n\t\t\t0x2f6 /* SlideOnRemove references must be op created */,\n\t\t);\n\t\tsegoff =\n\t\t\tpos === \"start\" || pos === \"end\"\n\t\t\t\t? pos\n\t\t\t\t: client.getContainingSegment(pos, undefined, localSeq);\n\t}\n\n\treturn createPositionReferenceFromSegoff({\n\t\tclient,\n\t\tsegoff,\n\t\trefType,\n\t\top,\n\t\tlocalSeq,\n\t\tfromSnapshot,\n\t\tslidingPreference,\n\t\tcanSlideToEndpoint,\n\t\trollback,\n\t});\n}\n\nexport function createTransientInterval(\n\tstart: SequencePlace | undefined,\n\tend: SequencePlace | undefined,\n\tclient: Client,\n) {\n\treturn createSequenceInterval(\n\t\t\"transient\",\n\t\tuuid(),\n\t\tstart,\n\t\tend,\n\t\tclient,\n\t\tIntervalType.Transient,\n\t);\n}\n\nexport function createSequenceInterval(\n\tlabel: string,\n\tid: string,\n\tstart: SequencePlace | undefined,\n\tend: SequencePlace | undefined,\n\tclient: Client,\n\tintervalType: IntervalType,\n\top?: ISequencedDocumentMessage,\n\tfromSnapshot?: boolean,\n\tcanSlideToEndpoint: boolean = false,\n\tprops?: PropertySet,\n\trollback?: boolean,\n): SequenceIntervalClass {\n\tconst { startPos, startSide, endPos, endSide } = endpointPosAndSide(\n\t\tstart ?? \"start\",\n\t\tend ?? \"end\",\n\t);\n\tassert(\n\t\tstartPos !== undefined &&\n\t\t\tendPos !== undefined &&\n\t\t\tstartSide !== undefined &&\n\t\t\tendSide !== undefined,\n\t\t0x794 /* start and end cannot be undefined because they were not passed in as undefined */,\n\t);\n\tlet beginRefType = ReferenceType.RangeBegin;\n\tlet endRefType = ReferenceType.RangeEnd;\n\tif (intervalType === IntervalType.Transient) {\n\t\tbeginRefType = ReferenceType.Transient;\n\t\tendRefType = ReferenceType.Transient;\n\t} else {\n\t\t// All non-transient interval references must eventually be SlideOnRemove\n\t\t// To ensure eventual consistency, they must start as StayOnRemove when\n\t\t// pending (created locally and creation op is not acked)\n\t\tif (op ?? fromSnapshot) {\n\t\t\tbeginRefType |= ReferenceType.SlideOnRemove;\n\t\t\tendRefType |= ReferenceType.SlideOnRemove;\n\t\t} else {\n\t\t\tbeginRefType |= ReferenceType.StayOnRemove;\n\t\t\tendRefType |= ReferenceType.StayOnRemove;\n\t\t}\n\t}\n\n\tconst stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);\n\n\tconst startSlidingPreference = startReferenceSlidingPreference(\n\t\tstartPos,\n\t\tstartSide,\n\t\tendPos,\n\t\tendSide,\n\t);\n\n\tconst startLref = createPositionReference({\n\t\tclient,\n\t\tpos: startPos,\n\t\trefType: beginRefType,\n\t\top,\n\t\tfromSnapshot,\n\t\tslidingPreference: startSlidingPreference,\n\t\tcanSlideToEndpoint: canSlideToEndpoint && stickiness !== IntervalStickiness.NONE,\n\t\trollback,\n\t});\n\n\tconst endSlidingPreference = endReferenceSlidingPreference(\n\t\tstartPos,\n\t\tstartSide,\n\t\tendPos,\n\t\tendSide,\n\t);\n\n\tconst endLref = createPositionReference({\n\t\tclient,\n\t\tpos: endPos,\n\t\trefType: endRefType,\n\t\top,\n\t\tfromSnapshot,\n\t\tslidingPreference: endSlidingPreference,\n\t\tcanSlideToEndpoint: canSlideToEndpoint && stickiness !== IntervalStickiness.NONE,\n\t\trollback,\n\t});\n\n\tconst rangeProp = {\n\t\t[reservedRangeLabelsKey]: [label],\n\t};\n\tstartLref.addProperties(rangeProp);\n\tendLref.addProperties(rangeProp);\n\n\tconst ival = new SequenceIntervalClass(\n\t\tclient,\n\t\tid,\n\t\tlabel,\n\t\tstartLref,\n\t\tendLref,\n\t\tintervalType,\n\t\tprops === undefined\n\t\t\t? undefined\n\t\t\t: { ...props, [reservedIntervalIdKey]: undefined, [reservedRangeLabelsKey]: undefined },\n\t\tstartSide,\n\t\tendSide,\n\t);\n\treturn ival;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sequenceInterval.js","sourceRoot":"","sources":["../../src/intervals/sequenceInterval.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport type { IDisposable } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/driver-definitions/internal\";\nimport {\n\tClient,\n\tISegment,\n\tLocalReferencePosition,\n\tPropertiesManager,\n\tPropertySet,\n\tReferenceType,\n\tSlidingPreference,\n\tcompareReferencePositions,\n\tcreateDetachedLocalReferencePosition,\n\tcreateMap,\n\tgetSlideToSegoff,\n\tmaxReferencePosition,\n\tminReferencePosition,\n\trefTypeIncludesFlag,\n\treservedRangeLabelsKey,\n\tSequencePlace,\n\tSide,\n\tendpointPosAndSide,\n\taddProperties,\n\ttype ISegmentInternal,\n\tUnassignedSequenceNumber,\n\tUniversalSequenceNumber,\n} from \"@fluidframework/merge-tree/internal\";\nimport { LoggingError, UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport type { ISharedSegmentSequence } from \"../sequence.js\";\n\nimport {\n\tISerializableInterval,\n\tISerializedInterval,\n\tIntervalStickiness,\n\tIntervalType,\n\tcomputeStickinessFromSide,\n\tendReferenceSlidingPreference,\n\tstartReferenceSlidingPreference,\n\ttype IInterval,\n\ttype SerializedIntervalDelta,\n} from \"./intervalUtils.js\";\n\nfunction compareSides(sideA: Side, sideB: Side): number {\n\tif (sideA === sideB) {\n\t\treturn 0;\n\t}\n\n\tif (sideA === Side.Before) {\n\t\treturn 1;\n\t}\n\n\treturn -1;\n}\n\nfunction minSide(sideA: Side, sideB: Side): Side {\n\tif (sideA === Side.After && sideB === Side.After) {\n\t\treturn Side.After;\n\t}\n\n\treturn Side.Before;\n}\n\nfunction maxSide(sideA: Side, sideB: Side): Side {\n\tif (sideA === Side.Before && sideB === Side.Before) {\n\t\treturn Side.Before;\n\t}\n\n\treturn Side.After;\n}\n\nconst reservedIntervalIdKey = \"intervalId\";\n\nconst legacyIdPrefix = \"legacy\";\n\nexport function getSerializedProperties(\n\tserializedInterval: ISerializedInterval | SerializedIntervalDelta,\n): {\n\tid: string;\n\tlabels: string[];\n\tproperties: PropertySet;\n} {\n\tconst {\n\t\t[reservedIntervalIdKey]: maybeId,\n\t\t[reservedRangeLabelsKey]: labels,\n\t\t...properties\n\t} = serializedInterval.properties ?? {};\n\t// Create a non-unique ID based on start and end to be used on intervals that come from legacy clients\n\t// without ID's.\n\tconst id =\n\t\tmaybeId ?? `${legacyIdPrefix}${serializedInterval.start}-${serializedInterval.end}`;\n\n\treturn { id, labels, properties };\n}\n\n/**\n * Interval implementation whose ends are associated with positions in a mutatable sequence.\n * As such, when content is inserted into the middle of the interval, the interval expands to\n * include that content.\n *\n * @remarks The endpoints' positions should be treated exclusively to get\n * reasonable behavior. E.g., an interval referring to \"hello\" in \"hello world\"\n * should have a start position of 0 and an end position of 5.\n *\n * To see why, consider what happens if \"llo wor\" is removed from the string to make \"held\".\n * The interval's startpoint remains on the \"h\" (it isn't altered), but the interval's endpoint\n * slides forward to the next unremoved position, which is the \"l\" in \"held\".\n * Users would generally expect the interval to now refer to \"he\" (as it is the subset of content\n * remaining after the removal), hence the \"l\" should be excluded.\n * If the interval endpoint was treated inclusively, the interval would now refer to \"hel\", which\n * is undesirable.\n *\n * Since the endpoints of an interval are treated exclusively but cannot be greater\n * than or equal to the length of the associated sequence, there exist special\n * endpoint segments, \"start\" and \"end\", which represent the position immediately\n * before or immediately after the string respectively.\n *\n * If a `SequenceInterval` is created on a sequence with the\n * `mergeTreeReferencesCanSlideToEndpoint` feature flag set to true, the endpoints\n * of the interval that are exclusive will have the ability to slide to these\n * special endpoint segments.\n * @legacy @beta\n */\nexport interface SequenceInterval extends IInterval {\n\treadonly start: LocalReferencePosition;\n\t/**\n\t * End endpoint of this interval.\n\t * @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.\n\t */\n\treadonly end: LocalReferencePosition;\n\treadonly intervalType: IntervalType;\n\treadonly startSide: Side;\n\treadonly endSide: Side;\n\treadonly stickiness: IntervalStickiness;\n\n\t/** Serializable bag of properties associated with the interval. */\n\tproperties: PropertySet;\n\n\t/**\n\t * Compares this interval to `b` with standard comparator semantics:\n\t * - returns -1 if this is less than `b`\n\t * - returns 1 if this is greater than `b`\n\t * - returns 0 if this is equivalent to `b`\n\t * @param b - Interval to compare against\n\t */\n\tcompare(b: SequenceInterval): number;\n\t/**\n\t * Compares the start endpoint of this interval to `b`'s start endpoint.\n\t * Standard comparator semantics apply.\n\t * @param b - Interval to compare against\n\t */\n\tcompareStart(b: SequenceInterval): number;\n\t/**\n\t * Compares the end endpoint of this interval to `b`'s end endpoint.\n\t * Standard comparator semantics apply.\n\t * @param b - Interval to compare against\n\t */\n\tcompareEnd(b: SequenceInterval): number;\n\n\t/**\n\t * @returns whether this interval overlaps with `b`.\n\t * Intervals are considered to overlap if their intersection is non-empty.\n\t */\n\toverlaps(b: SequenceInterval): boolean;\n\n\t/**\n\t * @returns whether this interval overlaps two numerical positions.\n\t */\n\toverlapsPos(bstart: number, bend: number): boolean;\n\n\t/**\n\t * Gets the id associated with this interval.\n\t * When the interval is used as part of an interval collection, this id can be used to modify or remove the\n\t * interval.\n\t */\n\tgetIntervalId(): string;\n}\n\n/**\n * Lightweight interval for index queries (overlap, comparison).\n * Has no Client dependency; cannot serialize or be disposed.\n */\nexport class BaseSequenceInterval implements SequenceInterval, ISerializableInterval {\n\treadonly #id: string;\n\treadonly #properties: PropertySet = createMap<any>();\n\n\tconstructor(\n\t\tid: string,\n\t\t/**\n\t\t * Start endpoint of this interval.\n\t\t * @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.\n\t\t */\n\t\tpublic start: LocalReferencePosition,\n\t\t/**\n\t\t * End endpoint of this interval.\n\t\t * @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.\n\t\t */\n\t\tpublic end: LocalReferencePosition,\n\t\tpublic intervalType: IntervalType,\n\t\tpublic readonly startSide: Side = Side.Before,\n\t\tpublic readonly endSide: Side = Side.Before,\n\t) {\n\t\tthis.#id = id;\n\t}\n\n\tpublic get properties(): Readonly<PropertySet> {\n\t\treturn this.#properties;\n\t}\n\n\t/***/\n\tpublic get stickiness(): IntervalStickiness {\n\t\tthis.verifyNotDispose();\n\n\t\tconst startSegment: ISegmentInternal | undefined = this.start.getSegment();\n\t\tconst endSegment: ISegmentInternal | undefined = this.end.getSegment();\n\t\treturn computeStickinessFromSide(\n\t\t\tstartSegment?.endpointType,\n\t\t\tthis.startSide,\n\t\t\tendSegment?.endpointType,\n\t\t\tthis.endSide,\n\t\t);\n\t}\n\n\t/**\n\t * {@inheritDoc ISerializableInterval.getIntervalId}\n\t */\n\tpublic getIntervalId(): string {\n\t\treturn this.#id;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.compare}\n\t */\n\tpublic compare(b: SequenceInterval) {\n\t\tconst startResult = this.compareStart(b);\n\t\tif (startResult === 0) {\n\t\t\tconst endResult = this.compareEnd(b);\n\t\t\tif (endResult === 0) {\n\t\t\t\tconst thisId = this.getIntervalId();\n\t\t\t\tif (thisId) {\n\t\t\t\t\tconst bId = b.getIntervalId();\n\t\t\t\t\tif (bId) {\n\t\t\t\t\t\treturn thisId > bId ? 1 : thisId < bId ? -1 : 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t} else {\n\t\t\t\treturn endResult;\n\t\t\t}\n\t\t} else {\n\t\t\treturn startResult;\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.compareStart}\n\t */\n\tpublic compareStart(b: SequenceInterval) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst dist = compareReferencePositions(this.start, b.start);\n\n\t\tif (dist === 0) {\n\t\t\treturn compareSides(this.startSide, b.startSide);\n\t\t}\n\n\t\treturn dist;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.compareEnd}\n\t */\n\tpublic compareEnd(b: SequenceInterval): number {\n\t\tthis.verifyNotDispose();\n\n\t\tconst dist = compareReferencePositions(this.end, b.end);\n\n\t\tif (dist === 0) {\n\t\t\treturn compareSides(b.endSide, this.endSide);\n\t\t}\n\n\t\treturn dist;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.overlaps}\n\t */\n\tpublic overlaps(b: SequenceInterval) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst result =\n\t\t\tcompareReferencePositions(this.start, b.end) <= 0 &&\n\t\t\tcompareReferencePositions(this.end, b.start) >= 0;\n\t\treturn result;\n\t}\n\n\t/**\n\t * Whether this interval overlaps the provided numerical positions.\n\t */\n\tpublic overlapsPos(_bstart: number, _bend: number): boolean {\n\t\tassert(false, 0xcd7 /* overlapsPos not supported on BaseSequenceInterval */);\n\t}\n\n\tpublic clone(): BaseSequenceInterval {\n\t\tassert(false, 0xcd8 /* clone not supported on BaseSequenceInterval */);\n\t}\n\n\tpublic union(_b: BaseSequenceInterval): BaseSequenceInterval {\n\t\tassert(false, 0xcd9 /* union not supported on BaseSequenceInterval */);\n\t}\n\n\tprotected verifyNotDispose(): void {\n\t\t// No-op: transient intervals are not disposable.\n\t}\n}\n\nexport class SequenceIntervalClass\n\textends BaseSequenceInterval\n\timplements ISerializableInterval, IDisposable\n{\n\treadonly #props: {\n\t\tpropertyManager?: PropertiesManager;\n\t\tproperties: PropertySet;\n\t} = { properties: createMap<any>() };\n\n\t/**\n\t * {@inheritDoc ISerializableInterval.properties}\n\t */\n\tpublic override get properties(): Readonly<PropertySet> {\n\t\tthis.verifyNotDispose();\n\t\treturn this.#props.properties;\n\t}\n\n\tpublic changeProperties(\n\t\tprops: PropertySet | undefined,\n\t\top?: ISequencedDocumentMessage,\n\t\trollback?: boolean,\n\t) {\n\t\tthis.verifyNotDispose();\n\n\t\tif (props !== undefined) {\n\t\t\tthis.#props.propertyManager ??= new PropertiesManager();\n\t\t\treturn this.#props.propertyManager.handleProperties(\n\t\t\t\t{ props },\n\t\t\t\tthis.#props,\n\t\t\t\tthis.client.getCollabWindow().collaborating\n\t\t\t\t\t? (op?.sequenceNumber ?? UnassignedSequenceNumber)\n\t\t\t\t\t: UniversalSequenceNumber,\n\t\t\t\top?.minimumSequenceNumber ?? UniversalSequenceNumber,\n\t\t\t\tthis.client.getCollabWindow().collaborating,\n\t\t\t\trollback,\n\t\t\t);\n\t\t}\n\t}\n\n\tconstructor(\n\t\tprivate readonly client: Client,\n\t\tid: string,\n\t\tprivate readonly label: string,\n\t\tstart: LocalReferencePosition,\n\t\tend: LocalReferencePosition,\n\t\tintervalType: IntervalType,\n\t\tprops?: PropertySet,\n\t\tstartSide: Side = Side.Before,\n\t\tendSide: Side = Side.Before,\n\t) {\n\t\tsuper(id, start, end, intervalType, startSide, endSide);\n\t\tif (props) {\n\t\t\tthis.#props.properties = addProperties(this.#props.properties, props);\n\t\t}\n\t}\n\t#disposed = false;\n\tpublic get disposed() {\n\t\treturn this.#disposed;\n\t}\n\tpublic dispose(error?: Error): void {\n\t\tif (this.#disposed) return;\n\t\tthis.#disposed = true;\n\t\tthis.client.removeLocalReferencePosition(this.start);\n\t\tthis.client.removeLocalReferencePosition(this.end);\n\t\tthis.removePositionChangeListeners();\n\t\tthis.#props.propertyManager = undefined;\n\t}\n\n\tprotected override verifyNotDispose() {\n\t\tif (this.#disposed) {\n\t\t\tthrow new LoggingError(\"Invalid interval access after dispose\");\n\t\t}\n\t}\n\n\tprivate callbacks?: Record<\"beforePositionChange\" | \"afterPositionChange\", () => void>;\n\n\t/**\n\t * Subscribes to position change events on this interval if there are no current listeners.\n\t */\n\tpublic addPositionChangeListeners(\n\t\tbeforePositionChange: () => void,\n\t\tafterPositionChange: () => void,\n\t): void {\n\t\tthis.verifyNotDispose();\n\t\tif (this.callbacks === undefined) {\n\t\t\tthis.callbacks = {\n\t\t\t\tbeforePositionChange,\n\t\t\t\tafterPositionChange,\n\t\t\t};\n\n\t\t\tconst startCbs = (this.start.callbacks ??= {});\n\t\t\tconst endCbs = (this.end.callbacks ??= {});\n\t\t\tstartCbs.beforeSlide = endCbs.beforeSlide = beforePositionChange;\n\t\t\tstartCbs.afterSlide = endCbs.afterSlide = afterPositionChange;\n\t\t}\n\t}\n\n\t/**\n\t * Removes the currently subscribed position change listeners.\n\t */\n\tpublic removePositionChangeListeners(): void {\n\t\tif (this.callbacks) {\n\t\t\tthis.callbacks = undefined;\n\t\t\tthis.start.callbacks = undefined;\n\t\t\tthis.end.callbacks = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc ISerializableInterval.serialize}\n\t */\n\tpublic serialize(): ISerializedInterval {\n\t\tthis.verifyNotDispose();\n\n\t\treturn this.serializeDelta({\n\t\t\tprops: this.properties,\n\t\t\tincludeEndpoints: true,\n\t\t}) as ISerializedInterval;\n\t}\n\n\tpublic serializeDelta({\n\t\tprops,\n\t\tincludeEndpoints,\n\t}: {\n\t\tprops: PropertySet | undefined;\n\t\tincludeEndpoints: boolean;\n\t}): SerializedIntervalDelta {\n\t\tthis.verifyNotDispose();\n\n\t\tconst startSegment: ISegmentInternal | undefined = this.start.getSegment();\n\t\tconst endSegment: ISegmentInternal | undefined = this.end.getSegment();\n\t\tconst startPosition = includeEndpoints\n\t\t\t? (startSegment?.endpointType ??\n\t\t\t\tthis.client.localReferencePositionToPosition(this.start))\n\t\t\t: undefined;\n\t\tconst endPosition = includeEndpoints\n\t\t\t? (endSegment?.endpointType ?? this.client.localReferencePositionToPosition(this.end))\n\t\t\t: undefined;\n\t\treturn {\n\t\t\tend: endPosition,\n\t\t\tintervalType: this.intervalType,\n\t\t\tsequenceNumber: this.client.getCurrentSeq(),\n\t\t\tstart: startPosition,\n\t\t\tstickiness: this.stickiness,\n\t\t\tstartSide: includeEndpoints ? this.startSide : undefined,\n\t\t\tendSide: includeEndpoints ? this.endSide : undefined,\n\t\t\tproperties: {\n\t\t\t\t...props,\n\t\t\t\t[reservedIntervalIdKey]: this.getIntervalId(),\n\t\t\t\t[reservedRangeLabelsKey]: [this.label],\n\t\t\t},\n\t\t} satisfies SerializedIntervalDelta;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.clone}\n\t */\n\tpublic clone(): SequenceIntervalClass {\n\t\tthis.verifyNotDispose();\n\n\t\treturn new SequenceIntervalClass(\n\t\t\tthis.client,\n\t\t\tthis.getIntervalId(),\n\t\t\tthis.label,\n\t\t\tthis.start,\n\t\t\tthis.end,\n\t\t\tthis.intervalType,\n\t\t\tthis.properties,\n\t\t\tthis.startSide,\n\t\t\tthis.endSide,\n\t\t);\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.union}\n\t */\n\tpublic union(b: SequenceIntervalClass) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst newStart = minReferencePosition(this.start, b.start);\n\t\tconst newEnd = maxReferencePosition(this.end, b.end);\n\n\t\tlet startSide: Side;\n\n\t\tif (this.start === b.start) {\n\t\t\tstartSide = minSide(this.startSide, b.startSide);\n\t\t} else {\n\t\t\tstartSide = this.start === newStart ? this.startSide : b.startSide;\n\t\t}\n\n\t\tlet endSide: Side;\n\n\t\tif (this.end === b.end) {\n\t\t\tendSide = maxSide(this.endSide, b.endSide);\n\t\t} else {\n\t\t\tendSide = this.end === newEnd ? this.endSide : b.endSide;\n\t\t}\n\n\t\treturn new SequenceIntervalClass(\n\t\t\tthis.client,\n\t\t\tuuid(),\n\t\t\tthis.label,\n\t\t\tnewStart,\n\t\t\tnewEnd,\n\t\t\tthis.intervalType,\n\t\t\tundefined,\n\t\t\tstartSide,\n\t\t\tendSide,\n\t\t);\n\t}\n\n\t/**\n\t * Whether this interval overlaps the provided numerical positions.\n\t */\n\tpublic override overlapsPos(bstart: number, bend: number) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst startPos = this.client.localReferencePositionToPosition(this.start);\n\t\tconst endPos = this.client.localReferencePositionToPosition(this.end);\n\t\treturn endPos > bstart && startPos < bend;\n\t}\n\n\tpublic moveEndpointReferences(\n\t\trebased: Record<\"start\" | \"end\", { segment: ISegment; offset: number }>,\n\t) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst startRef = createPositionReferenceFromSegoff({\n\t\t\tclient: this.client,\n\t\t\tsegoff: rebased.start,\n\t\t\trefType: this.start.refType,\n\t\t\tslidingPreference: this.start.slidingPreference,\n\t\t\tcanSlideToEndpoint: this.start.canSlideToEndpoint,\n\t\t});\n\t\tif (this.start.properties) {\n\t\t\tstartRef.addProperties(this.start.properties);\n\t\t}\n\t\tthis.start = startRef;\n\n\t\tconst endRef = createPositionReferenceFromSegoff({\n\t\t\tclient: this.client,\n\t\t\tsegoff: rebased.end,\n\t\t\trefType: this.end.refType,\n\t\t\tslidingPreference: this.end.slidingPreference,\n\t\t\tcanSlideToEndpoint: this.end.canSlideToEndpoint,\n\t\t});\n\t\tif (this.end.properties) {\n\t\t\tendRef.addProperties(this.end.properties);\n\t\t}\n\t\tthis.end = endRef;\n\t}\n\n\t/**\n\t * {@inheritDoc IInterval.modify}\n\t */\n\tpublic modify(\n\t\tlabel: string,\n\t\tstart: SequencePlace | undefined,\n\t\tend: SequencePlace | undefined,\n\t\top?: ISequencedDocumentMessage,\n\t\tlocalSeq?: number,\n\t\tcanSlideToEndpoint: boolean = false,\n\t) {\n\t\tthis.verifyNotDispose();\n\n\t\tconst { startSide, endSide, startPos, endPos } = endpointPosAndSide(start, end);\n\t\tconst getRefType = (baseType: ReferenceType): ReferenceType => {\n\t\t\tlet refType = baseType;\n\t\t\tif (op === undefined) {\n\t\t\t\trefType &= ~ReferenceType.SlideOnRemove;\n\t\t\t\trefType |= ReferenceType.StayOnRemove;\n\t\t\t} else {\n\t\t\t\trefType &= ~ReferenceType.StayOnRemove;\n\t\t\t\trefType |= ReferenceType.SlideOnRemove;\n\t\t\t}\n\t\t\treturn refType;\n\t\t};\n\n\t\tlet startRef = this.start;\n\t\tif (startPos !== undefined) {\n\t\t\tconst slidingPreference = startReferenceSlidingPreference(\n\t\t\t\tstartPos,\n\t\t\t\tstartSide ?? Side.Before,\n\t\t\t\tendPos,\n\t\t\t\tendSide ?? Side.Before,\n\t\t\t);\n\t\t\tstartRef = createPositionReference({\n\t\t\t\tclient: this.client,\n\t\t\t\tpos: startPos,\n\t\t\t\trefType: getRefType(this.start.refType),\n\t\t\t\top,\n\t\t\t\tlocalSeq,\n\t\t\t\tslidingPreference,\n\t\t\t\tcanSlideToEndpoint:\n\t\t\t\t\tcanSlideToEndpoint && slidingPreference === SlidingPreference.BACKWARD,\n\t\t\t});\n\t\t\tif (this.start.properties) {\n\t\t\t\tstartRef.addProperties(this.start.properties);\n\t\t\t}\n\t\t}\n\n\t\tlet endRef = this.end;\n\t\tif (endPos !== undefined) {\n\t\t\tconst slidingPreference = endReferenceSlidingPreference(\n\t\t\t\tstartPos,\n\t\t\t\tstartSide ?? Side.Before,\n\t\t\t\tendPos,\n\t\t\t\tendSide ?? Side.Before,\n\t\t\t);\n\t\t\tendRef = createPositionReference({\n\t\t\t\tclient: this.client,\n\t\t\t\tpos: endPos,\n\t\t\t\trefType: getRefType(this.end.refType),\n\t\t\t\top,\n\t\t\t\tlocalSeq,\n\t\t\t\tslidingPreference,\n\t\t\t\tcanSlideToEndpoint:\n\t\t\t\t\tcanSlideToEndpoint && slidingPreference === SlidingPreference.FORWARD,\n\t\t\t});\n\t\t\tif (this.end.properties) {\n\t\t\t\tendRef.addProperties(this.end.properties);\n\t\t\t}\n\t\t}\n\n\t\tconst newInterval = new SequenceIntervalClass(\n\t\t\tthis.client,\n\t\t\tthis.getIntervalId(),\n\t\t\tthis.label,\n\t\t\tstartRef,\n\t\t\tendRef,\n\t\t\tthis.intervalType,\n\t\t\tundefined,\n\t\t\tstartSide ?? this.startSide,\n\t\t\tendSide ?? this.endSide,\n\t\t);\n\t\tnewInterval.#props.propertyManager = this.#props.propertyManager ??=\n\t\t\tnew PropertiesManager();\n\t\tnewInterval.#props.properties = this.#props.properties;\n\t\treturn newInterval;\n\t}\n\n\tpublic ackPropertiesChange(newProps: PropertySet, op: ISequencedDocumentMessage) {\n\t\tthis.verifyNotDispose();\n\n\t\tif (Object.keys(newProps).length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(\n\t\t\tthis.#props.propertyManager !== undefined,\n\t\t\t0xbd5 /* must have property manager to ack */,\n\t\t);\n\t\t// Let the propertyManager prune its pending change-properties set.\n\t\tthis.#props.propertyManager.ack(op.sequenceNumber, op.minimumSequenceNumber, {\n\t\t\tprops: newProps,\n\t\t});\n\t}\n}\n\nexport function createPositionReferenceFromSegoff({\n\tclient,\n\tsegoff,\n\trefType,\n\top,\n\tlocalSeq,\n\tfromSnapshot,\n\tslidingPreference,\n\tcanSlideToEndpoint,\n\trollback,\n}: {\n\tclient: Client;\n\tsegoff: { segment: ISegment; offset: number } | undefined | \"start\" | \"end\";\n\trefType: ReferenceType;\n\top?: ISequencedDocumentMessage;\n\tlocalSeq?: number;\n\tfromSnapshot?: boolean;\n\tslidingPreference: SlidingPreference | undefined;\n\tcanSlideToEndpoint: boolean | undefined;\n\trollback?: boolean;\n}): LocalReferencePosition {\n\tif (segoff === \"start\" || segoff === \"end\") {\n\t\treturn client.createLocalReferencePosition(\n\t\t\tsegoff,\n\t\t\tundefined,\n\t\t\trefType,\n\t\t\tundefined,\n\t\t\tslidingPreference,\n\t\t\tcanSlideToEndpoint,\n\t\t);\n\t}\n\n\tif (segoff?.segment) {\n\t\tconst ref = client.createLocalReferencePosition(\n\t\t\tsegoff.segment,\n\t\t\tsegoff.offset,\n\t\t\trefType,\n\t\t\tundefined,\n\t\t\tslidingPreference,\n\t\t\tcanSlideToEndpoint,\n\t\t);\n\t\treturn ref;\n\t}\n\n\t// Creating references on detached segments is allowed for:\n\t// - Transient segments\n\t// - References coming from a remote client (location may have been concurrently removed)\n\t// - References being rebased to a new sequence number\n\t// (segment they originally referred to may have been removed with no suitable replacement)\n\tif (\n\t\t!op &&\n\t\t!localSeq &&\n\t\t!fromSnapshot &&\n\t\t!refTypeIncludesFlag(refType, ReferenceType.Transient) &&\n\t\t!rollback\n\t) {\n\t\tthrow new UsageError(\"Non-transient references need segment\");\n\t}\n\n\treturn createDetachedLocalReferencePosition(slidingPreference, refType);\n}\n\n/**\n * Resolves a position to a {@link LocalReferencePosition} using an\n * {@link ISharedSegmentSequence} (no Client or op context needed).\n */\nexport function resolvePositionRef(\n\tsequence: ISharedSegmentSequence<any>,\n\tpos: number | \"start\" | \"end\",\n\trefType: ReferenceType,\n\tslidingPreference: SlidingPreference,\n\tcanSlideToEndpoint?: boolean,\n): LocalReferencePosition {\n\tif (pos === \"start\" || pos === \"end\") {\n\t\treturn sequence.createLocalReferencePosition(\n\t\t\tpos,\n\t\t\tundefined,\n\t\t\trefType,\n\t\t\tundefined,\n\t\t\tslidingPreference,\n\t\t\tcanSlideToEndpoint,\n\t\t);\n\t}\n\tconst segoff = sequence.getContainingSegment(pos);\n\tif (segoff?.segment !== undefined && segoff?.offset !== undefined) {\n\t\treturn sequence.createLocalReferencePosition(\n\t\t\tsegoff.segment,\n\t\t\tsegoff.offset,\n\t\t\trefType,\n\t\t\tundefined,\n\t\t\tslidingPreference,\n\t\t\tcanSlideToEndpoint,\n\t\t);\n\t}\n\treturn createDetachedLocalReferencePosition(slidingPreference, refType);\n}\n\nfunction createPositionReference({\n\tclient,\n\tpos,\n\trefType,\n\top,\n\tfromSnapshot,\n\tlocalSeq,\n\tslidingPreference,\n\tcanSlideToEndpoint,\n\trollback,\n}: {\n\tclient: Client;\n\tpos: number | \"start\" | \"end\";\n\trefType: ReferenceType;\n\top?: ISequencedDocumentMessage;\n\tfromSnapshot?: boolean;\n\tlocalSeq?: number;\n\tslidingPreference: SlidingPreference;\n\tcanSlideToEndpoint: boolean;\n\trollback?: boolean;\n}): LocalReferencePosition {\n\tlet segoff;\n\n\tif (op) {\n\t\tassert(\n\t\t\t(refType & ReferenceType.SlideOnRemove) !== 0,\n\t\t\t0x2f5 /* op create references must be SlideOnRemove */,\n\t\t);\n\t\tif (pos === \"start\" || pos === \"end\") {\n\t\t\tsegoff = pos;\n\t\t} else {\n\t\t\tsegoff = client.getContainingSegment(pos, {\n\t\t\t\treferenceSequenceNumber: op.referenceSequenceNumber,\n\t\t\t\tclientId: op.clientId,\n\t\t\t});\n\t\t\tsegoff = getSlideToSegoff(segoff, slidingPreference, undefined, canSlideToEndpoint);\n\t\t}\n\t} else {\n\t\tassert(\n\t\t\t(refType & ReferenceType.SlideOnRemove) === 0 || !!fromSnapshot,\n\t\t\t0x2f6 /* SlideOnRemove references must be op created */,\n\t\t);\n\t\tsegoff =\n\t\t\tpos === \"start\" || pos === \"end\"\n\t\t\t\t? pos\n\t\t\t\t: client.getContainingSegment(pos, undefined, localSeq);\n\t}\n\n\treturn createPositionReferenceFromSegoff({\n\t\tclient,\n\t\tsegoff,\n\t\trefType,\n\t\top,\n\t\tlocalSeq,\n\t\tfromSnapshot,\n\t\tslidingPreference,\n\t\tcanSlideToEndpoint,\n\t\trollback,\n\t});\n}\n\n/**\n * Creates a transient interval using an `ISharedSegmentSequence` instead of a `Client`.\n * This avoids coupling index classes to merge-tree internals.\n */\nexport function createTransientIntervalFromSequence(\n\tstart: SequencePlace | undefined,\n\tend: SequencePlace | undefined,\n\tsequence: ISharedSegmentSequence<any>,\n): BaseSequenceInterval {\n\tconst { startPos, startSide, endPos, endSide } = endpointPosAndSide(\n\t\tstart ?? \"start\",\n\t\tend ?? \"end\",\n\t);\n\tassert(\n\t\tstartPos !== undefined &&\n\t\t\tendPos !== undefined &&\n\t\t\tstartSide !== undefined &&\n\t\t\tendSide !== undefined,\n\t\t0xcda /* start and end cannot be undefined because they were not passed in as undefined */,\n\t);\n\n\tconst startSlidingPref = startReferenceSlidingPreference(\n\t\tstartPos,\n\t\tstartSide,\n\t\tendPos,\n\t\tendSide,\n\t);\n\tconst endSlidingPref = endReferenceSlidingPreference(startPos, startSide, endPos, endSide);\n\n\tconst startLref = resolvePositionRef(\n\t\tsequence,\n\t\tstartPos,\n\t\tReferenceType.Transient,\n\t\tstartSlidingPref,\n\t);\n\tconst endLref = resolvePositionRef(\n\t\tsequence,\n\t\tendPos,\n\t\tReferenceType.Transient,\n\t\tendSlidingPref,\n\t);\n\n\tconst rangeProp = {\n\t\t[reservedRangeLabelsKey]: [\"transient\"],\n\t};\n\tstartLref.addProperties(rangeProp);\n\tendLref.addProperties(rangeProp);\n\n\treturn new BaseSequenceInterval(\n\t\tuuid(),\n\t\tstartLref,\n\t\tendLref,\n\t\tIntervalType.Transient,\n\t\tstartSide,\n\t\tendSide,\n\t);\n}\n\nexport function createSequenceInterval(\n\tlabel: string,\n\tid: string,\n\tstart: SequencePlace | undefined,\n\tend: SequencePlace | undefined,\n\tclient: Client,\n\tintervalType: IntervalType,\n\top?: ISequencedDocumentMessage,\n\tfromSnapshot?: boolean,\n\tcanSlideToEndpoint: boolean = false,\n\tprops?: PropertySet,\n\trollback?: boolean,\n): SequenceIntervalClass {\n\tconst { startPos, startSide, endPos, endSide } = endpointPosAndSide(\n\t\tstart ?? \"start\",\n\t\tend ?? \"end\",\n\t);\n\tassert(\n\t\tstartPos !== undefined &&\n\t\t\tendPos !== undefined &&\n\t\t\tstartSide !== undefined &&\n\t\t\tendSide !== undefined,\n\t\t0x794 /* start and end cannot be undefined because they were not passed in as undefined */,\n\t);\n\tlet beginRefType = ReferenceType.RangeBegin;\n\tlet endRefType = ReferenceType.RangeEnd;\n\tif (intervalType === IntervalType.Transient) {\n\t\tbeginRefType = ReferenceType.Transient;\n\t\tendRefType = ReferenceType.Transient;\n\t} else {\n\t\t// All non-transient interval references must eventually be SlideOnRemove\n\t\t// To ensure eventual consistency, they must start as StayOnRemove when\n\t\t// pending (created locally and creation op is not acked)\n\t\tif (op ?? fromSnapshot) {\n\t\t\tbeginRefType |= ReferenceType.SlideOnRemove;\n\t\t\tendRefType |= ReferenceType.SlideOnRemove;\n\t\t} else {\n\t\t\tbeginRefType |= ReferenceType.StayOnRemove;\n\t\t\tendRefType |= ReferenceType.StayOnRemove;\n\t\t}\n\t}\n\n\tconst stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);\n\n\tconst startSlidingPreference = startReferenceSlidingPreference(\n\t\tstartPos,\n\t\tstartSide,\n\t\tendPos,\n\t\tendSide,\n\t);\n\n\tconst endSlidingPreference = endReferenceSlidingPreference(\n\t\tstartPos,\n\t\tstartSide,\n\t\tendPos,\n\t\tendSide,\n\t);\n\n\tconst startLref = createPositionReference({\n\t\tclient,\n\t\tpos: startPos,\n\t\trefType: beginRefType,\n\t\top,\n\t\tfromSnapshot,\n\t\tslidingPreference: startSlidingPreference,\n\t\tcanSlideToEndpoint: canSlideToEndpoint && stickiness !== IntervalStickiness.NONE,\n\t\trollback,\n\t});\n\n\tconst endLref = createPositionReference({\n\t\tclient,\n\t\tpos: endPos,\n\t\trefType: endRefType,\n\t\top,\n\t\tfromSnapshot,\n\t\tslidingPreference: endSlidingPreference,\n\t\tcanSlideToEndpoint: canSlideToEndpoint && stickiness !== IntervalStickiness.NONE,\n\t\trollback,\n\t});\n\n\tconst rangeProp = {\n\t\t[reservedRangeLabelsKey]: [label],\n\t};\n\tstartLref.addProperties(rangeProp);\n\tendLref.addProperties(rangeProp);\n\n\tconst ival = new SequenceIntervalClass(\n\t\tclient,\n\t\tid,\n\t\tlabel,\n\t\tstartLref,\n\t\tendLref,\n\t\tintervalType,\n\t\tprops === undefined\n\t\t\t? undefined\n\t\t\t: { ...props, [reservedIntervalIdKey]: undefined, [reservedRangeLabelsKey]: undefined },\n\t\tstartSide,\n\t\tendSide,\n\t);\n\treturn ival;\n}\n"]}
|
package/lib/packageVersion.d.ts
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
|
|
6
6
|
*/
|
|
7
7
|
export declare const pkgName = "@fluidframework/sequence";
|
|
8
|
-
export declare const pkgVersion = "2.90.0
|
|
8
|
+
export declare const pkgVersion = "2.90.0";
|
|
9
9
|
//# sourceMappingURL=packageVersion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,6BAA6B,CAAC;AAClD,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,6BAA6B,CAAC;AAClD,eAAO,MAAM,UAAU,WAAW,CAAC"}
|
package/lib/packageVersion.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,0BAA0B,CAAC;AAClD,MAAM,CAAC,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,0BAA0B,CAAC;AAClD,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/sequence\";\nexport const pkgVersion = \"2.90.0\";\n"]}
|
package/lib/sequence.d.ts
CHANGED
|
@@ -55,12 +55,12 @@ export interface ISharedSegmentSequence<T extends ISegment> extends ISharedObjec
|
|
|
55
55
|
/**
|
|
56
56
|
* Creates a `LocalReferencePosition` on this SharedString. If the refType does not include
|
|
57
57
|
* ReferenceType.Transient, the returned reference will be added to the localRefs on the provided segment.
|
|
58
|
-
* @param segment - Segment to add the local reference on
|
|
58
|
+
* @param segment - Segment to add the local reference on, or "start"/"end" for endpoint segments
|
|
59
59
|
* @param offset - Offset on the segment at which to place the local reference
|
|
60
60
|
* @param refType - ReferenceType for the created local reference
|
|
61
61
|
* @param properties - PropertySet to place on the created local reference
|
|
62
62
|
*/
|
|
63
|
-
createLocalReferencePosition(segment: T, offset: number, refType: ReferenceType, properties: PropertySet | undefined, slidingPreference?: SlidingPreference, canSlideToEndpoint?: boolean): LocalReferencePosition;
|
|
63
|
+
createLocalReferencePosition(segment: T | "start" | "end", offset: number | undefined, refType: ReferenceType, properties: PropertySet | undefined, slidingPreference?: SlidingPreference, canSlideToEndpoint?: boolean): LocalReferencePosition;
|
|
64
64
|
/**
|
|
65
65
|
* Removes a `LocalReferencePosition` from this SharedString.
|
|
66
66
|
*/
|
|
@@ -304,7 +304,7 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
|
|
|
304
304
|
posStart: number | undefined;
|
|
305
305
|
posAfterEnd: number | undefined;
|
|
306
306
|
};
|
|
307
|
-
createLocalReferencePosition(segment: T, offset: number, refType: ReferenceType, properties: PropertySet | undefined, slidingPreference?: SlidingPreference, canSlideToEndpoint?: boolean): LocalReferencePosition;
|
|
307
|
+
createLocalReferencePosition(segment: T | "start" | "end", offset: number | undefined, refType: ReferenceType, properties: PropertySet | undefined, slidingPreference?: SlidingPreference, canSlideToEndpoint?: boolean): LocalReferencePosition;
|
|
308
308
|
localReferencePositionToPosition(lref: ReferencePosition): number;
|
|
309
309
|
removeLocalReferencePosition(lref: LocalReferencePosition): LocalReferencePosition | undefined;
|
|
310
310
|
resolveRemoteClientPosition(remoteClientPosition: number, remoteClientRefSeq: number, remoteClientId: string): number | undefined;
|
|
@@ -356,9 +356,6 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
|
|
|
356
356
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}
|
|
357
357
|
*/
|
|
358
358
|
protected loadCore(storage: IChannelStorageService): Promise<void>;
|
|
359
|
-
/**
|
|
360
|
-
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.processMessagesCore}
|
|
361
|
-
*/
|
|
362
359
|
protected processMessagesCore(messagesCollection: IRuntimeMessageCollection): void;
|
|
363
360
|
private processMessage;
|
|
364
361
|
/**
|