@fluidframework/sequence 2.0.0-dev.5.2.0.169897 → 2.0.0-dev.5.3.2.178189
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 +28 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.d.ts +9 -19
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +26 -105
- package/dist/intervalCollection.js.map +1 -1
- package/dist/intervalIndex/index.d.ts +8 -0
- package/dist/intervalIndex/index.d.ts.map +1 -0
- package/dist/intervalIndex/index.js +12 -0
- package/dist/intervalIndex/index.js.map +1 -0
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +32 -0
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -0
- package/dist/intervalIndex/overlappingIntervalsIndex.js +103 -0
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -0
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +8 -0
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -0
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +33 -0
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -0
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +33 -0
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -0
- package/dist/intervalIndex/sequenceIntervalIndexes.js +7 -0
- package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +47 -7
- package/dist/revertibles.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/intervalCollection.d.ts +9 -19
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +26 -106
- package/lib/intervalCollection.js.map +1 -1
- package/lib/intervalIndex/index.d.ts +8 -0
- package/lib/intervalIndex/index.d.ts.map +1 -0
- package/lib/intervalIndex/index.js +7 -0
- package/lib/intervalIndex/index.js.map +1 -0
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +32 -0
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -0
- package/lib/intervalIndex/overlappingIntervalsIndex.js +98 -0
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -0
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +8 -0
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -0
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +29 -0
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -0
- package/lib/intervalIndex/sequenceIntervalIndexes.d.ts +33 -0
- package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -0
- package/lib/intervalIndex/sequenceIntervalIndexes.js +6 -0
- package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +48 -8
- package/lib/revertibles.js.map +1 -1
- package/package.json +18 -18
- package/src/index.ts +6 -0
- package/src/intervalCollection.ts +41 -143
- package/src/intervalIndex/index.ts +11 -0
- package/src/intervalIndex/overlappingIntervalsIndex.ts +166 -0
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +71 -0
- package/src/intervalIndex/sequenceIntervalIndexes.ts +32 -0
- package/src/packageVersion.ts +1 -1
- package/src/revertibles.ts +61 -7
package/src/packageVersion.ts
CHANGED
package/src/revertibles.ts
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
refTypeIncludesFlag,
|
|
19
19
|
revertMergeTreeDeltaRevertibles,
|
|
20
20
|
SortedSet,
|
|
21
|
+
getSlideToSegoff,
|
|
21
22
|
} from "@fluidframework/merge-tree";
|
|
22
23
|
import { IntervalOpType, SequenceInterval } from "./intervalCollection";
|
|
23
24
|
import { SharedString, SharedStringSegment } from "./sharedString";
|
|
@@ -121,18 +122,28 @@ export function appendDeleteIntervalToRevertibles(
|
|
|
121
122
|
revertibles: SharedStringRevertible[],
|
|
122
123
|
) {
|
|
123
124
|
const startSeg = interval.start.getSegment() as SharedStringSegment;
|
|
125
|
+
const startType =
|
|
126
|
+
startSeg.removedSeq !== undefined
|
|
127
|
+
? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin
|
|
128
|
+
: ReferenceType.StayOnRemove | ReferenceType.RangeBegin;
|
|
124
129
|
const endSeg = interval.end.getSegment() as SharedStringSegment;
|
|
130
|
+
const endType =
|
|
131
|
+
endSeg.removedSeq !== undefined
|
|
132
|
+
? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd
|
|
133
|
+
: ReferenceType.StayOnRemove | ReferenceType.RangeEnd;
|
|
125
134
|
const startRef = string.createLocalReferencePosition(
|
|
126
135
|
startSeg,
|
|
127
136
|
interval.start.getOffset(),
|
|
128
|
-
|
|
137
|
+
startType,
|
|
129
138
|
undefined,
|
|
139
|
+
interval.start.slidingPreference,
|
|
130
140
|
);
|
|
131
141
|
const endRef = string.createLocalReferencePosition(
|
|
132
142
|
endSeg,
|
|
133
143
|
interval.end.getOffset(),
|
|
134
|
-
|
|
144
|
+
endType,
|
|
135
145
|
undefined,
|
|
146
|
+
interval.end.slidingPreference,
|
|
136
147
|
);
|
|
137
148
|
const revertible = {
|
|
138
149
|
event: IntervalOpType.DELETE,
|
|
@@ -158,18 +169,31 @@ export function appendChangeIntervalToRevertibles(
|
|
|
158
169
|
revertibles: SharedStringRevertible[],
|
|
159
170
|
) {
|
|
160
171
|
const startSeg = previousInterval.start.getSegment() as SharedStringSegment;
|
|
172
|
+
// This logic is needed because the ReferenceType StayOnRemove cannot be used
|
|
173
|
+
// on removed segments. This works for revertibles because the old position of the
|
|
174
|
+
// interval within the removed segment is handled by the remove range revertible.
|
|
175
|
+
const startType =
|
|
176
|
+
startSeg.removedSeq !== undefined
|
|
177
|
+
? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin
|
|
178
|
+
: ReferenceType.StayOnRemove | ReferenceType.RangeBegin;
|
|
161
179
|
const endSeg = previousInterval.end.getSegment() as SharedStringSegment;
|
|
180
|
+
const endType =
|
|
181
|
+
endSeg.removedSeq !== undefined
|
|
182
|
+
? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd
|
|
183
|
+
: ReferenceType.StayOnRemove | ReferenceType.RangeEnd;
|
|
162
184
|
const prevStartRef = string.createLocalReferencePosition(
|
|
163
185
|
startSeg,
|
|
164
186
|
previousInterval.start.getOffset(),
|
|
165
|
-
|
|
187
|
+
startType,
|
|
166
188
|
undefined,
|
|
189
|
+
previousInterval.start.slidingPreference,
|
|
167
190
|
);
|
|
168
191
|
const prevEndRef = string.createLocalReferencePosition(
|
|
169
192
|
endSeg,
|
|
170
193
|
previousInterval.end.getOffset(),
|
|
171
|
-
|
|
194
|
+
endType,
|
|
172
195
|
undefined,
|
|
196
|
+
previousInterval.end.slidingPreference,
|
|
173
197
|
);
|
|
174
198
|
const revertible = {
|
|
175
199
|
event: IntervalOpType.CHANGE,
|
|
@@ -359,7 +383,29 @@ export function discardSharedStringRevertibles(
|
|
|
359
383
|
});
|
|
360
384
|
}
|
|
361
385
|
|
|
362
|
-
|
|
386
|
+
function getSlidePosition(string: SharedString, lref: LocalReferencePosition, pos: number): number {
|
|
387
|
+
const slide = getSlideToSegoff(
|
|
388
|
+
{ segment: lref.getSegment(), offset: undefined },
|
|
389
|
+
lref.slidingPreference,
|
|
390
|
+
);
|
|
391
|
+
return slide?.segment !== undefined &&
|
|
392
|
+
slide.offset !== undefined &&
|
|
393
|
+
string.getPosition(slide.segment) !== -1 &&
|
|
394
|
+
(pos < 0 || pos >= string.getLength())
|
|
395
|
+
? string.getPosition(slide.segment) + slide.offset
|
|
396
|
+
: pos;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
function isValidRange(start: number, end: number, string: SharedString) {
|
|
400
|
+
return (
|
|
401
|
+
start >= 0 &&
|
|
402
|
+
start < string.getLength() &&
|
|
403
|
+
end >= 0 &&
|
|
404
|
+
end < string.getLength() &&
|
|
405
|
+
start <= end
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
|
|
363
409
|
function revertLocalAdd(
|
|
364
410
|
string: SharedString,
|
|
365
411
|
revertible: TypedRevertible<typeof IntervalOpType.ADD>,
|
|
@@ -374,12 +420,16 @@ function revertLocalDelete(
|
|
|
374
420
|
revertible: TypedRevertible<typeof IntervalOpType.DELETE>,
|
|
375
421
|
) {
|
|
376
422
|
const label = revertible.interval.properties.referenceRangeLabels[0];
|
|
423
|
+
const collection = string.getIntervalCollection(label);
|
|
377
424
|
const start = string.localReferencePositionToPosition(revertible.start);
|
|
425
|
+
const startSlidePos = getSlidePosition(string, revertible.start, start);
|
|
378
426
|
const end = string.localReferencePositionToPosition(revertible.end);
|
|
427
|
+
const endSlidePos = getSlidePosition(string, revertible.end, end);
|
|
379
428
|
const type = revertible.interval.intervalType;
|
|
380
429
|
// reusing the id causes eventual consistency bugs, so it is removed here and recreated in add
|
|
381
430
|
const { intervalId, ...props } = revertible.interval.properties;
|
|
382
|
-
|
|
431
|
+
if (!isValidRange(startSlidePos, endSlidePos, string)) return;
|
|
432
|
+
const int = collection.add(startSlidePos, endSlidePos, type, props);
|
|
383
433
|
|
|
384
434
|
idMap.forEach((newId, oldId) => {
|
|
385
435
|
if (intervalId === newId) {
|
|
@@ -397,10 +447,14 @@ function revertLocalChange(
|
|
|
397
447
|
revertible: TypedRevertible<typeof IntervalOpType.CHANGE>,
|
|
398
448
|
) {
|
|
399
449
|
const label = revertible.interval.properties.referenceRangeLabels[0];
|
|
450
|
+
const collection = string.getIntervalCollection(label);
|
|
400
451
|
const id = getUpdatedIdFromInterval(revertible.interval);
|
|
401
452
|
const start = string.localReferencePositionToPosition(revertible.start);
|
|
453
|
+
const startSlidePos = getSlidePosition(string, revertible.start, start);
|
|
402
454
|
const end = string.localReferencePositionToPosition(revertible.end);
|
|
403
|
-
string
|
|
455
|
+
const endSlidePos = getSlidePosition(string, revertible.end, end);
|
|
456
|
+
if (!isValidRange(startSlidePos, endSlidePos, string)) return;
|
|
457
|
+
collection.change(id, startSlidePos, endSlidePos);
|
|
404
458
|
|
|
405
459
|
string.removeLocalReferencePosition(revertible.start);
|
|
406
460
|
string.removeLocalReferencePosition(revertible.end);
|