@fluidframework/sequence 2.0.0-dev.6.4.0.192049 → 2.0.0-dev.7.2.0.204906
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 +95 -0
- package/README.md +130 -0
- package/api-extractor.json +1 -1
- package/api-report/sequence.api.md +717 -0
- package/dist/defaultMap.d.ts +1 -1
- package/dist/defaultMap.d.ts.map +1 -1
- package/dist/defaultMap.js +6 -6
- package/dist/defaultMap.js.map +1 -1
- package/dist/defaultMapInterfaces.d.ts +22 -2
- package/dist/defaultMapInterfaces.d.ts.map +1 -1
- package/dist/defaultMapInterfaces.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.d.ts +164 -16
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +174 -54
- package/dist/intervalCollection.js.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.d.ts +17 -3
- package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.js +12 -6
- package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts +19 -2
- package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointIndex.js +10 -5
- package/dist/intervalIndex/endpointIndex.js.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.d.ts +6 -0
- package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.js +3 -0
- package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
- package/dist/intervalIndex/index.d.ts +4 -4
- package/dist/intervalIndex/index.d.ts.map +1 -1
- package/dist/intervalIndex/index.js +5 -1
- package/dist/intervalIndex/index.js.map +1 -1
- package/dist/intervalIndex/intervalIndex.d.ts +1 -0
- package/dist/intervalIndex/intervalIndex.d.ts.map +1 -1
- package/dist/intervalIndex/intervalIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +17 -6
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.js +17 -4
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +5 -2
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +9 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +2 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.d.ts +17 -3
- package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.js +12 -8
- package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/dist/intervalTree.d.ts +1 -1
- package/dist/intervalTree.d.ts.map +1 -1
- package/dist/intervals/interval.d.ts +4 -2
- package/dist/intervals/interval.d.ts.map +1 -1
- package/dist/intervals/interval.js +14 -5
- package/dist/intervals/interval.js.map +1 -1
- package/dist/intervals/intervalUtils.d.ts +51 -18
- package/dist/intervals/intervalUtils.d.ts.map +1 -1
- package/dist/intervals/intervalUtils.js +18 -10
- package/dist/intervals/intervalUtils.js.map +1 -1
- package/dist/intervals/sequenceInterval.d.ts +28 -13
- package/dist/intervals/sequenceInterval.d.ts.map +1 -1
- package/dist/intervals/sequenceInterval.js +124 -43
- package/dist/intervals/sequenceInterval.js.map +1 -1
- package/dist/localValues.d.ts.map +1 -1
- package/dist/localValues.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/revertibles.d.ts +3 -15
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +11 -19
- package/dist/revertibles.js.map +1 -1
- package/dist/sequence-alpha.d.ts +1587 -0
- package/dist/sequence-beta.d.ts +1507 -0
- package/dist/sequence-public.d.ts +1507 -0
- package/dist/sequence-untrimmed.d.ts +1759 -0
- package/dist/sequence.d.ts +8 -4
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +53 -48
- package/dist/sequence.js.map +1 -1
- package/dist/sequenceDeltaEvent.d.ts +4 -0
- package/dist/sequenceDeltaEvent.d.ts.map +1 -1
- package/dist/sequenceDeltaEvent.js +3 -0
- package/dist/sequenceDeltaEvent.js.map +1 -1
- package/dist/sequenceFactory.d.ts +3 -0
- package/dist/sequenceFactory.d.ts.map +1 -1
- package/dist/sequenceFactory.js +4 -1
- package/dist/sequenceFactory.js.map +1 -1
- package/dist/sharedIntervalCollection.d.ts +5 -0
- package/dist/sharedIntervalCollection.d.ts.map +1 -1
- package/dist/sharedIntervalCollection.js +11 -9
- package/dist/sharedIntervalCollection.js.map +1 -1
- package/dist/sharedSequence.d.ts +6 -3
- package/dist/sharedSequence.d.ts.map +1 -1
- package/dist/sharedSequence.js +10 -8
- package/dist/sharedSequence.js.map +1 -1
- package/dist/sharedString.d.ts +17 -2
- package/dist/sharedString.d.ts.map +1 -1
- package/dist/sharedString.js +21 -7
- package/dist/sharedString.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/defaultMap.d.ts +1 -1
- package/lib/defaultMap.d.ts.map +1 -1
- package/lib/defaultMap.js +6 -6
- package/lib/defaultMap.js.map +1 -1
- package/lib/defaultMapInterfaces.d.ts +22 -2
- package/lib/defaultMapInterfaces.d.ts.map +1 -1
- package/lib/defaultMapInterfaces.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/intervalCollection.d.ts +164 -16
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +172 -55
- package/lib/intervalCollection.js.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.d.ts +17 -3
- package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.js +12 -7
- package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts +19 -2
- package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointIndex.js +10 -6
- package/lib/intervalIndex/endpointIndex.js.map +1 -1
- package/lib/intervalIndex/idIntervalIndex.d.ts +6 -0
- package/lib/intervalIndex/idIntervalIndex.d.ts.map +1 -1
- package/lib/intervalIndex/idIntervalIndex.js +3 -0
- package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
- package/lib/intervalIndex/index.d.ts +4 -4
- package/lib/intervalIndex/index.d.ts.map +1 -1
- package/lib/intervalIndex/index.js +4 -4
- package/lib/intervalIndex/index.js.map +1 -1
- package/lib/intervalIndex/intervalIndex.d.ts +1 -0
- package/lib/intervalIndex/intervalIndex.d.ts.map +1 -1
- package/lib/intervalIndex/intervalIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +17 -6
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.js +18 -5
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +5 -2
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +9 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.d.ts +2 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.ts +17 -3
- package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.js +12 -9
- package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/lib/intervalTree.d.ts +1 -1
- package/lib/intervalTree.d.ts.map +1 -1
- package/lib/intervals/interval.d.ts +4 -2
- package/lib/intervals/interval.d.ts.map +1 -1
- package/lib/intervals/interval.js +14 -5
- package/lib/intervals/interval.js.map +1 -1
- package/lib/intervals/intervalUtils.d.ts +51 -18
- package/lib/intervals/intervalUtils.d.ts.map +1 -1
- package/lib/intervals/intervalUtils.js +14 -6
- package/lib/intervals/intervalUtils.js.map +1 -1
- package/lib/intervals/sequenceInterval.d.ts +28 -13
- package/lib/intervals/sequenceInterval.d.ts.map +1 -1
- package/lib/intervals/sequenceInterval.js +125 -42
- package/lib/intervals/sequenceInterval.js.map +1 -1
- package/lib/localValues.d.ts.map +1 -1
- package/lib/localValues.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/revertibles.d.ts +3 -15
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +11 -19
- package/lib/revertibles.js.map +1 -1
- package/lib/sequence.d.ts +8 -4
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +56 -49
- package/lib/sequence.js.map +1 -1
- package/lib/sequenceDeltaEvent.d.ts +4 -0
- package/lib/sequenceDeltaEvent.d.ts.map +1 -1
- package/lib/sequenceDeltaEvent.js +3 -0
- package/lib/sequenceDeltaEvent.js.map +1 -1
- package/lib/sequenceFactory.d.ts +3 -0
- package/lib/sequenceFactory.d.ts.map +1 -1
- package/lib/sequenceFactory.js +4 -1
- package/lib/sequenceFactory.js.map +1 -1
- package/lib/sharedIntervalCollection.d.ts +5 -0
- package/lib/sharedIntervalCollection.d.ts.map +1 -1
- package/lib/sharedIntervalCollection.js +11 -9
- package/lib/sharedIntervalCollection.js.map +1 -1
- package/lib/sharedSequence.d.ts +6 -3
- package/lib/sharedSequence.d.ts.map +1 -1
- package/lib/sharedSequence.js +10 -8
- package/lib/sharedSequence.js.map +1 -1
- package/lib/sharedString.d.ts +17 -2
- package/lib/sharedString.d.ts.map +1 -1
- package/lib/sharedString.js +21 -7
- package/lib/sharedString.js.map +1 -1
- package/package.json +31 -30
- package/src/defaultMapInterfaces.ts +22 -2
- package/src/index.ts +4 -1
- package/src/intervalCollection.ts +423 -82
- package/src/intervalIndex/endpointInRangeIndex.ts +23 -11
- package/src/intervalIndex/endpointIndex.ts +22 -9
- package/src/intervalIndex/idIntervalIndex.ts +7 -1
- package/src/intervalIndex/index.ts +12 -3
- package/src/intervalIndex/intervalIndex.ts +1 -0
- package/src/intervalIndex/overlappingIntervalsIndex.ts +40 -15
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +10 -1
- package/src/intervalIndex/sequenceIntervalIndexes.ts +2 -1
- package/src/intervalIndex/startpointInRangeIndex.ts +23 -18
- package/src/intervals/interval.ts +35 -8
- package/src/intervals/intervalUtils.ts +61 -27
- package/src/intervals/sequenceInterval.ts +197 -47
- package/src/localValues.ts +4 -1
- package/src/packageVersion.ts +1 -1
- package/src/revertibles.ts +14 -36
- package/src/sequence.ts +14 -5
- package/src/sequenceDeltaEvent.ts +4 -0
- package/src/sequenceFactory.ts +4 -1
- package/src/sharedIntervalCollection.ts +5 -0
- package/src/sharedSequence.ts +6 -3
- package/src/sharedString.ts +25 -2
package/src/revertibles.ts
CHANGED
|
@@ -27,23 +27,17 @@ import { ISequenceDeltaRange, SequenceDeltaEvent } from "./sequenceDeltaEvent";
|
|
|
27
27
|
/**
|
|
28
28
|
* Data for undoing edits on SharedStrings and Intervals.
|
|
29
29
|
*
|
|
30
|
-
* Revertibles are new and require the option mergeTreeUseNewLengthCalculations to
|
|
31
|
-
* be set as true on the underlying merge tree in order to function correctly.
|
|
32
|
-
*
|
|
33
30
|
* @alpha
|
|
34
31
|
*/
|
|
35
32
|
export type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;
|
|
36
33
|
|
|
37
34
|
const idMap = new Map<string, string>();
|
|
38
35
|
|
|
39
|
-
type IntervalOpType = typeof IntervalOpType[keyof typeof IntervalOpType];
|
|
36
|
+
type IntervalOpType = (typeof IntervalOpType)[keyof typeof IntervalOpType];
|
|
40
37
|
|
|
41
38
|
/**
|
|
42
39
|
* Data for undoing edits affecting Intervals.
|
|
43
40
|
*
|
|
44
|
-
* Revertibles are new and require the option mergeTreeUseNewLengthCalculations to
|
|
45
|
-
* be set as true on the underlying merge tree in order to function correctly.
|
|
46
|
-
*
|
|
47
41
|
* @alpha
|
|
48
42
|
*/
|
|
49
43
|
export type IntervalRevertible =
|
|
@@ -271,9 +265,6 @@ function addIfRevertibleRef(
|
|
|
271
265
|
* Create revertibles for SharedStringDeltas, handling indirectly modified intervals
|
|
272
266
|
* (e.g. reverting remove of a range that contains an interval will move the interval back)
|
|
273
267
|
*
|
|
274
|
-
* Revertibles are new and require the option mergeTreeUseNewLengthCalculations to
|
|
275
|
-
* be set as true on the underlying merge tree in order to function correctly.
|
|
276
|
-
*
|
|
277
268
|
* @alpha
|
|
278
269
|
*/
|
|
279
270
|
export function appendSharedStringDeltaToRevertibles(
|
|
@@ -425,11 +416,14 @@ function revertLocalDelete(
|
|
|
425
416
|
const startSlidePos = getSlidePosition(string, revertible.start, start);
|
|
426
417
|
const end = string.localReferencePositionToPosition(revertible.end);
|
|
427
418
|
const endSlidePos = getSlidePosition(string, revertible.end, end);
|
|
428
|
-
const type = revertible.interval.intervalType;
|
|
429
419
|
// reusing the id causes eventual consistency bugs, so it is removed here and recreated in add
|
|
430
420
|
const { intervalId, ...props } = revertible.interval.properties;
|
|
431
421
|
if (isValidRange(startSlidePos, endSlidePos, string)) {
|
|
432
|
-
const int = collection.add(
|
|
422
|
+
const int = collection.add({
|
|
423
|
+
start: startSlidePos,
|
|
424
|
+
end: endSlidePos,
|
|
425
|
+
props,
|
|
426
|
+
});
|
|
433
427
|
|
|
434
428
|
idMap.forEach((newId, oldId) => {
|
|
435
429
|
if (intervalId === newId) {
|
|
@@ -537,27 +531,14 @@ function revertLocalSequenceRemove(
|
|
|
537
531
|
const intervalId = getUpdatedId(intervalInfo.intervalId);
|
|
538
532
|
const interval = intervalCollection.getIntervalById(intervalId);
|
|
539
533
|
if (interval !== undefined) {
|
|
540
|
-
const
|
|
541
|
-
intervalInfo.startOffset,
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
sharedString,
|
|
549
|
-
);
|
|
550
|
-
// only move interval if start <= end
|
|
551
|
-
if (
|
|
552
|
-
(newStart === undefined &&
|
|
553
|
-
newEnd !== undefined &&
|
|
554
|
-
sharedString.localReferencePositionToPosition(interval.start) <= newEnd) ||
|
|
555
|
-
(newEnd === undefined &&
|
|
556
|
-
newStart !== undefined &&
|
|
557
|
-
sharedString.localReferencePositionToPosition(interval.end) >= newStart) ||
|
|
558
|
-
(newStart !== undefined && newEnd !== undefined && newStart <= newEnd)
|
|
559
|
-
) {
|
|
560
|
-
intervalCollection.change(intervalId, newStart, newEnd);
|
|
534
|
+
const start =
|
|
535
|
+
newEndpointPosition(intervalInfo.startOffset, restoredRanges, sharedString) ??
|
|
536
|
+
sharedString.localReferencePositionToPosition(interval.start);
|
|
537
|
+
const end =
|
|
538
|
+
newEndpointPosition(intervalInfo.endOffset, restoredRanges, sharedString) ??
|
|
539
|
+
sharedString.localReferencePositionToPosition(interval.end);
|
|
540
|
+
if (start <= end) {
|
|
541
|
+
intervalCollection.change(intervalId, start, end);
|
|
561
542
|
}
|
|
562
543
|
}
|
|
563
544
|
});
|
|
@@ -597,9 +578,6 @@ function revertLocalSequenceRemove(
|
|
|
597
578
|
/**
|
|
598
579
|
* Invoke revertibles to reverse prior edits
|
|
599
580
|
*
|
|
600
|
-
* Revertibles are new and require the option mergeTreeUseNewLengthCalculations to
|
|
601
|
-
* be set as true on the underlying merge tree in order to function correctly.
|
|
602
|
-
*
|
|
603
581
|
* @alpha
|
|
604
582
|
*/
|
|
605
583
|
export function revertSharedStringRevertibles(
|
package/src/sequence.ts
CHANGED
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
ISegment,
|
|
30
30
|
ISegmentAction,
|
|
31
31
|
LocalReferencePosition,
|
|
32
|
+
// eslint-disable-next-line import/no-deprecated
|
|
32
33
|
matchProperties,
|
|
33
34
|
MergeTreeDeltaType,
|
|
34
35
|
PropertySet,
|
|
@@ -96,6 +97,7 @@ const contentPath = "content";
|
|
|
96
97
|
* - `event` - Various information on the segments that were modified.
|
|
97
98
|
*
|
|
98
99
|
* - `target` - The sequence itself.
|
|
100
|
+
* @public
|
|
99
101
|
*/
|
|
100
102
|
export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
|
|
101
103
|
(
|
|
@@ -112,6 +114,9 @@ export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
|
|
|
112
114
|
);
|
|
113
115
|
}
|
|
114
116
|
|
|
117
|
+
/**
|
|
118
|
+
* @public
|
|
119
|
+
*/
|
|
115
120
|
export abstract class SharedSegmentSequence<T extends ISegment>
|
|
116
121
|
extends SharedObject<ISharedSegmentSequenceEvents>
|
|
117
122
|
implements ISharedIntervalCollection<SequenceInterval>, MergeTreeRevertibleDriver
|
|
@@ -148,6 +153,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
148
153
|
if (
|
|
149
154
|
lastAnnotate &&
|
|
150
155
|
lastAnnotate.pos2 === r.position &&
|
|
156
|
+
// eslint-disable-next-line import/no-deprecated
|
|
151
157
|
matchProperties(lastAnnotate.props, props)
|
|
152
158
|
) {
|
|
153
159
|
lastAnnotate.pos2 += r.segment.cachedLength;
|
|
@@ -266,7 +272,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
266
272
|
}
|
|
267
273
|
|
|
268
274
|
/**
|
|
269
|
-
* @deprecated
|
|
275
|
+
* @deprecated The ability to create group ops will be removed in an upcoming release, as group ops are redundant with the native batching capabilities of the runtime
|
|
270
276
|
*/
|
|
271
277
|
public groupOperation(groupOp: IMergeTreeGroupMsg) {
|
|
272
278
|
this.guardReentrancy(() => this.client.localTransaction(groupOp));
|
|
@@ -340,6 +346,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
340
346
|
refType: ReferenceType,
|
|
341
347
|
properties: PropertySet | undefined,
|
|
342
348
|
slidingPreference?: SlidingPreference,
|
|
349
|
+
canSlideToEndpoint?: boolean,
|
|
343
350
|
): LocalReferencePosition {
|
|
344
351
|
return this.client.createLocalReferencePosition(
|
|
345
352
|
segment,
|
|
@@ -347,6 +354,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
347
354
|
refType,
|
|
348
355
|
properties,
|
|
349
356
|
slidingPreference,
|
|
357
|
+
canSlideToEndpoint,
|
|
350
358
|
);
|
|
351
359
|
}
|
|
352
360
|
|
|
@@ -391,7 +399,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
391
399
|
}
|
|
392
400
|
|
|
393
401
|
/**
|
|
394
|
-
* @deprecated
|
|
402
|
+
* @deprecated This method will no longer be public in an upcoming release as it is not safe to use outside of this class
|
|
395
403
|
*/
|
|
396
404
|
public submitSequenceMessage(message: IMergeTreeOp) {
|
|
397
405
|
if (!this.isAttached()) {
|
|
@@ -445,7 +453,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
445
453
|
}
|
|
446
454
|
|
|
447
455
|
/**
|
|
448
|
-
* @deprecated
|
|
456
|
+
* @deprecated this functionality is no longer supported and will be removed
|
|
449
457
|
*/
|
|
450
458
|
public getStackContext(startPos: number, rangeLabels: string[]): RangeStackMap {
|
|
451
459
|
return this.client.getStackContext(startPos, rangeLabels);
|
|
@@ -617,7 +625,8 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
617
625
|
m.minimumSequenceNumber < collabWindow.minSeq ||
|
|
618
626
|
m.referenceSequenceNumber < collabWindow.minSeq ||
|
|
619
627
|
m.sequenceNumber <= collabWindow.minSeq ||
|
|
620
|
-
|
|
628
|
+
// sequenceNumber could be the same if messages are part of a grouped batch
|
|
629
|
+
m.sequenceNumber < collabWindow.currentSeq
|
|
621
630
|
) {
|
|
622
631
|
throw new Error(
|
|
623
632
|
`Invalid catchup operations in snapshot: ${JSON.stringify({
|
|
@@ -705,7 +714,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
705
714
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}
|
|
706
715
|
*/
|
|
707
716
|
protected applyStashedOp(content: any): unknown {
|
|
708
|
-
return this.client.applyStashedOp(content);
|
|
717
|
+
return this.client.applyStashedOp(parseHandles(content, this.serializer));
|
|
709
718
|
}
|
|
710
719
|
|
|
711
720
|
private summarizeMergeTree(serializer: IFluidSerializer): ISummaryTreeWithStats {
|
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
* The properties of this object and its sub-objects represent the state of the sequence at the
|
|
24
24
|
* point in time at which the operation was applied.
|
|
25
25
|
* They will not take into any future modifications performed to the underlying sequence and merge tree.
|
|
26
|
+
* @public
|
|
26
27
|
*/
|
|
27
28
|
export abstract class SequenceEvent<
|
|
28
29
|
TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,
|
|
@@ -105,6 +106,7 @@ export abstract class SequenceEvent<
|
|
|
105
106
|
* For group ops, each op will get its own event, and the group op property will be set on the op args.
|
|
106
107
|
*
|
|
107
108
|
* Ops may get multiple events. For instance, an insert-replace will get a remove then an insert event.
|
|
109
|
+
* @public
|
|
108
110
|
*/
|
|
109
111
|
export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {
|
|
110
112
|
/**
|
|
@@ -128,6 +130,7 @@ export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationTyp
|
|
|
128
130
|
* The properties of this object and its sub-objects represent the state of the sequence at the
|
|
129
131
|
* point in time at which the operation was applied.
|
|
130
132
|
* They will not take into consideration any future modifications performed to the underlying sequence and merge tree.
|
|
133
|
+
* @public
|
|
131
134
|
*/
|
|
132
135
|
export class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {
|
|
133
136
|
constructor(
|
|
@@ -141,6 +144,7 @@ export class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenance
|
|
|
141
144
|
|
|
142
145
|
/**
|
|
143
146
|
* A range that has changed corresponding to a segment modification.
|
|
147
|
+
* @public
|
|
144
148
|
*/
|
|
145
149
|
export interface ISequenceDeltaRange<
|
|
146
150
|
TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,
|
package/src/sequenceFactory.ts
CHANGED
|
@@ -13,9 +13,12 @@ import { Marker, TextSegment } from "@fluidframework/merge-tree";
|
|
|
13
13
|
import { pkgVersion } from "./packageVersion";
|
|
14
14
|
import { SharedString, SharedStringSegment } from "./sharedString";
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
16
19
|
export class SharedStringFactory implements IChannelFactory {
|
|
17
20
|
// TODO rename back to https://graph.microsoft.com/types/mergeTree/string once paparazzi is able to dynamically
|
|
18
|
-
// load code
|
|
21
|
+
// load code (UPDATE: paparazzi is gone... anything to do here?)
|
|
19
22
|
public static Type = "https://graph.microsoft.com/types/mergeTree";
|
|
20
23
|
|
|
21
24
|
public static readonly Attributes: IChannelAttributes = {
|
|
@@ -33,6 +33,7 @@ const snapshotFileName = "header";
|
|
|
33
33
|
/**
|
|
34
34
|
* The factory that defines the SharedIntervalCollection.
|
|
35
35
|
* @deprecated `SharedIntervalCollection` is not maintained and is planned to be removed.
|
|
36
|
+
* @public
|
|
36
37
|
*/
|
|
37
38
|
export class SharedIntervalCollectionFactory implements IChannelFactory {
|
|
38
39
|
public static readonly Type = "https://graph.microsoft.com/types/sharedIntervalCollection";
|
|
@@ -74,12 +75,16 @@ export class SharedIntervalCollectionFactory implements IChannelFactory {
|
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
/**
|
|
79
|
+
* @public
|
|
80
|
+
*/
|
|
77
81
|
export interface ISharedIntervalCollection<TInterval extends ISerializableInterval> {
|
|
78
82
|
getIntervalCollection(label: string): IIntervalCollection<TInterval>;
|
|
79
83
|
}
|
|
80
84
|
|
|
81
85
|
/**
|
|
82
86
|
* @deprecated `SharedIntervalCollection` is not maintained and is planned to be removed.
|
|
87
|
+
* @public
|
|
83
88
|
*/
|
|
84
89
|
export class SharedIntervalCollection
|
|
85
90
|
extends SharedObject
|
package/src/sharedSequence.ts
CHANGED
|
@@ -15,14 +15,16 @@ import { SharedSegmentSequence } from "./sequence";
|
|
|
15
15
|
const MaxRun = 128;
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
* @deprecated
|
|
18
|
+
* @deprecated IJSONRunSegment will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
|
|
19
|
+
* @public
|
|
19
20
|
*/
|
|
20
21
|
export interface IJSONRunSegment<T> extends IJSONSegment {
|
|
21
22
|
items: Serializable<T>[];
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
|
-
* @deprecated
|
|
26
|
+
* @deprecated SubSequence will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
|
|
27
|
+
* @public
|
|
26
28
|
*/
|
|
27
29
|
export class SubSequence<T> extends BaseSegment {
|
|
28
30
|
public static readonly typeString: string = "SubSequence";
|
|
@@ -105,7 +107,8 @@ export class SubSequence<T> extends BaseSegment {
|
|
|
105
107
|
}
|
|
106
108
|
|
|
107
109
|
/**
|
|
108
|
-
* @deprecated
|
|
110
|
+
* @deprecated SharedSequence will be removed in a upcoming release. It has been moved to the fluid-experimental/sequence-deprecated package
|
|
111
|
+
* @public
|
|
109
112
|
*/
|
|
110
113
|
export class SharedSequence<T> extends SharedSegmentSequence<SubSequence<T>> {
|
|
111
114
|
constructor(
|
package/src/sharedString.ts
CHANGED
|
@@ -24,6 +24,7 @@ import { SharedStringFactory } from "./sequenceFactory";
|
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Fluid object interface describing access methods on a SharedString
|
|
27
|
+
* @public
|
|
27
28
|
*/
|
|
28
29
|
export interface ISharedString extends SharedSegmentSequence<SharedStringSegment> {
|
|
29
30
|
/**
|
|
@@ -52,6 +53,9 @@ export interface ISharedString extends SharedSegmentSequence<SharedStringSegment
|
|
|
52
53
|
posFromRelativePos(relativePos: IRelativePosition): number;
|
|
53
54
|
}
|
|
54
55
|
|
|
56
|
+
/**
|
|
57
|
+
* @public
|
|
58
|
+
*/
|
|
55
59
|
export type SharedStringSegment = TextSegment | Marker;
|
|
56
60
|
|
|
57
61
|
/**
|
|
@@ -63,6 +67,7 @@ export type SharedStringSegment = TextSegment | Marker;
|
|
|
63
67
|
* used to store metadata at positions within the text, like the details of an
|
|
64
68
|
* image or Fluid object that should be rendered with the text.
|
|
65
69
|
*
|
|
70
|
+
* @public
|
|
66
71
|
*/
|
|
67
72
|
export class SharedString
|
|
68
73
|
extends SharedSegmentSequence<SharedStringSegment>
|
|
@@ -215,6 +220,7 @@ export class SharedString
|
|
|
215
220
|
/**
|
|
216
221
|
* Finds the nearest reference with ReferenceType.Tile to `startPos` in the direction dictated by `tilePrecedesPos`.
|
|
217
222
|
* Note that Markers receive `ReferenceType.Tile` by default.
|
|
223
|
+
* @deprecated Use `searchForMarker` instead.
|
|
218
224
|
* @param startPos - Position at which to start the search
|
|
219
225
|
* @param clientId - clientId dictating the perspective to search from
|
|
220
226
|
* @param tileLabel - Label of the tile to search for
|
|
@@ -233,6 +239,22 @@ export class SharedString
|
|
|
233
239
|
return this.client.findTile(startPos ?? 0, tileLabel, preceding);
|
|
234
240
|
}
|
|
235
241
|
|
|
242
|
+
/**
|
|
243
|
+
* Searches a string for the nearest marker in either direction to a given start position.
|
|
244
|
+
* The search will include the start position, so markers at the start position are valid
|
|
245
|
+
* results of the search.
|
|
246
|
+
* @param startPos - Position at which to start the search
|
|
247
|
+
* @param markerLabel - Label of the marker to search for
|
|
248
|
+
* @param forwards - Whether the desired marker comes before (false) or after (true) `startPos`
|
|
249
|
+
*/
|
|
250
|
+
public searchForMarker(
|
|
251
|
+
startPos: number,
|
|
252
|
+
markerLabel: string,
|
|
253
|
+
forwards = true,
|
|
254
|
+
): Marker | undefined {
|
|
255
|
+
return this.client.searchForMarker(startPos, markerLabel, forwards);
|
|
256
|
+
}
|
|
257
|
+
|
|
236
258
|
/**
|
|
237
259
|
* Retrieve text from the SharedString in string format.
|
|
238
260
|
* @param start - The starting index of the text to retrieve, or 0 if omitted.
|
|
@@ -309,7 +331,6 @@ interface ITextAndMarkerAccumulator {
|
|
|
309
331
|
* @param sharedString - String to retrieve text and markers from
|
|
310
332
|
* @param label - label to split on
|
|
311
333
|
* @returns Two parallel lists of text and markers, split by markers with the provided `label`.
|
|
312
|
-
*
|
|
313
334
|
* For example:
|
|
314
335
|
* ```typescript
|
|
315
336
|
* // Say sharedstring has contents "hello<paragraph marker 1>world<paragraph marker 2>missing".
|
|
@@ -318,6 +339,7 @@ interface ITextAndMarkerAccumulator {
|
|
|
318
339
|
* // parallelMarkers === [<paragraph marker 1 object>, <paragraph marker 2 object>]
|
|
319
340
|
* // Note parallelText does not include "missing".
|
|
320
341
|
* ```
|
|
342
|
+
* @public
|
|
321
343
|
*/
|
|
322
344
|
export function getTextAndMarkers(
|
|
323
345
|
sharedString: SharedString,
|
|
@@ -406,7 +428,8 @@ const gatherTextAndMarkers: ISegmentAction<ITextAndMarkerAccumulator> = (
|
|
|
406
428
|
if (placeholder && placeholder.length > 0) {
|
|
407
429
|
const placeholderText =
|
|
408
430
|
placeholder === "*"
|
|
409
|
-
?
|
|
431
|
+
? // eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
432
|
+
`\n${segment.toString()}`
|
|
410
433
|
: placeholder.repeat(segment.cachedLength);
|
|
411
434
|
textSegment.text += placeholderText;
|
|
412
435
|
} else {
|