@fluidframework/sequence 2.0.0-internal.6.3.2 → 2.0.0-internal.6.4.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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.d.ts +5 -5
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +26 -12
- package/dist/intervalCollection.js.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.d.ts +13 -3
- package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.js +8 -5
- package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts +13 -2
- package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointIndex.js +6 -3
- package/dist/intervalIndex/endpointIndex.js.map +1 -1
- 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 +2 -2
- package/dist/intervalIndex/intervalIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +3 -2
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.js +4 -2
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +3 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
- package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.d.ts +13 -3
- package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.js +8 -5
- package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/dist/intervals/interval.d.ts +1 -1
- package/dist/intervals/interval.d.ts.map +1 -1
- package/dist/intervals/interval.js +2 -1
- package/dist/intervals/interval.js.map +1 -1
- package/dist/intervals/intervalUtils.d.ts +3 -2
- package/dist/intervals/intervalUtils.d.ts.map +1 -1
- package/dist/intervals/intervalUtils.js.map +1 -1
- package/dist/intervals/sequenceInterval.d.ts +8 -5
- package/dist/intervals/sequenceInterval.d.ts.map +1 -1
- package/dist/intervals/sequenceInterval.js +8 -4
- package/dist/intervals/sequenceInterval.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/sequence.d.ts +2 -1
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +3 -2
- package/dist/sequence.js.map +1 -1
- package/dist/sequenceDeltaEvent.d.ts +8 -3
- package/dist/sequenceDeltaEvent.d.ts.map +1 -1
- package/dist/sequenceDeltaEvent.js.map +1 -1
- package/dist/sequenceFactory.js +1 -1
- package/dist/sequenceFactory.js.map +1 -1
- package/dist/sharedString.js +2 -1
- package/dist/sharedString.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/intervalCollection.d.ts +5 -5
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +28 -14
- package/lib/intervalCollection.js.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.d.ts +13 -3
- package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.js +8 -6
- package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts +13 -2
- package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointIndex.js +6 -4
- package/lib/intervalIndex/endpointIndex.js.map +1 -1
- 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 +2 -2
- package/lib/intervalIndex/intervalIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +3 -2
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.js +5 -3
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +3 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.d.ts +1 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.ts +13 -3
- package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.js +8 -6
- package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/lib/intervals/interval.d.ts +1 -1
- package/lib/intervals/interval.d.ts.map +1 -1
- package/lib/intervals/interval.js +2 -1
- package/lib/intervals/interval.js.map +1 -1
- package/lib/intervals/intervalUtils.d.ts +3 -2
- package/lib/intervals/intervalUtils.d.ts.map +1 -1
- package/lib/intervals/intervalUtils.js.map +1 -1
- package/lib/intervals/sequenceInterval.d.ts +8 -5
- package/lib/intervals/sequenceInterval.d.ts.map +1 -1
- package/lib/intervals/sequenceInterval.js +8 -4
- package/lib/intervals/sequenceInterval.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/sequence.d.ts +2 -1
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +3 -2
- package/lib/sequence.js.map +1 -1
- package/lib/sequenceDeltaEvent.d.ts +8 -3
- package/lib/sequenceDeltaEvent.d.ts.map +1 -1
- package/lib/sequenceDeltaEvent.js.map +1 -1
- package/lib/sequenceFactory.js +1 -1
- package/lib/sequenceFactory.js.map +1 -1
- package/lib/sharedString.js +2 -1
- package/lib/sharedString.js.map +1 -1
- package/package.json +15 -17
- package/src/index.ts +1 -1
- package/src/intervalCollection.ts +39 -19
- package/src/intervalIndex/endpointInRangeIndex.ts +18 -10
- package/src/intervalIndex/endpointIndex.ts +15 -7
- package/src/intervalIndex/idIntervalIndex.ts +1 -1
- package/src/intervalIndex/index.ts +12 -3
- package/src/intervalIndex/intervalIndex.ts +2 -2
- package/src/intervalIndex/overlappingIntervalsIndex.ts +14 -6
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +4 -1
- package/src/intervalIndex/sequenceIntervalIndexes.ts +1 -1
- package/src/intervalIndex/startpointInRangeIndex.ts +18 -10
- package/src/intervals/interval.ts +2 -1
- package/src/intervals/intervalUtils.ts +4 -2
- package/src/intervals/sequenceInterval.ts +8 -4
- package/src/packageVersion.ts +1 -1
- package/src/sequence.ts +3 -2
- package/src/sequenceDeltaEvent.ts +11 -3
- package/src/sequenceFactory.ts +1 -1
- package/src/sharedString.ts +2 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
+
/* eslint-disable import/no-deprecated */
|
|
5
6
|
|
|
6
7
|
import {
|
|
7
8
|
Client,
|
|
@@ -16,6 +17,7 @@ import {
|
|
|
16
17
|
SequenceInterval,
|
|
17
18
|
createPositionReferenceFromSegoff,
|
|
18
19
|
} from "../intervals";
|
|
20
|
+
import { SharedString } from "../sharedString";
|
|
19
21
|
import { SequenceIntervalIndexes } from "./sequenceIntervalIndexes";
|
|
20
22
|
import { OverlappingIntervalsIndex } from "./overlappingIntervalsIndex";
|
|
21
23
|
|
|
@@ -65,7 +67,8 @@ class OverlappingSequenceIntervalsIndex
|
|
|
65
67
|
}
|
|
66
68
|
|
|
67
69
|
export function createOverlappingSequenceIntervalsIndex(
|
|
68
|
-
|
|
70
|
+
sharedString: SharedString,
|
|
69
71
|
): SequenceIntervalIndexes.Overlapping {
|
|
72
|
+
const client = (sharedString as unknown as { client: Client }).client;
|
|
70
73
|
return new OverlappingSequenceIntervalsIndex(client);
|
|
71
74
|
}
|
|
@@ -27,6 +27,6 @@ export namespace SequenceIntervalIndexes {
|
|
|
27
27
|
findOverlappingIntervalsBySegoff(
|
|
28
28
|
startSegoff: { segment: ISegment | undefined; offset: number | undefined },
|
|
29
29
|
endSegoff: { segment: ISegment | undefined; offset: number | undefined },
|
|
30
|
-
)
|
|
30
|
+
): Iterable<SequenceInterval>;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -2,10 +2,18 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
+
/* eslint-disable import/no-deprecated */
|
|
5
6
|
|
|
6
7
|
import { Client, PropertyAction, RedBlackTree } from "@fluidframework/merge-tree";
|
|
7
8
|
import { assert } from "@fluidframework/core-utils";
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
IIntervalHelpers,
|
|
11
|
+
ISerializableInterval,
|
|
12
|
+
IntervalType,
|
|
13
|
+
SequenceInterval,
|
|
14
|
+
sequenceIntervalHelpers,
|
|
15
|
+
} from "../intervals";
|
|
16
|
+
import { SharedString } from "../sharedString";
|
|
9
17
|
import { IntervalIndex } from "./intervalIndex";
|
|
10
18
|
import { HasComparisonOverride, compareOverrideables, forceCompare } from "./intervalIndexUtils";
|
|
11
19
|
|
|
@@ -19,17 +27,17 @@ export interface IStartpointInRangeIndex<TInterval extends ISerializableInterval
|
|
|
19
27
|
/**
|
|
20
28
|
* @returns an array of all intervals contained in this collection whose startpoints locate in the range [start, end] (includes both ends)
|
|
21
29
|
*/
|
|
22
|
-
findIntervalsWithStartpointInRange(start: number, end: number);
|
|
30
|
+
findIntervalsWithStartpointInRange(start: number, end: number): TInterval[];
|
|
23
31
|
}
|
|
24
32
|
|
|
25
|
-
class StartpointInRangeIndex<TInterval extends ISerializableInterval>
|
|
33
|
+
export class StartpointInRangeIndex<TInterval extends ISerializableInterval>
|
|
26
34
|
implements IStartpointInRangeIndex<TInterval>
|
|
27
35
|
{
|
|
28
36
|
private readonly intervalTree;
|
|
29
37
|
|
|
30
38
|
constructor(
|
|
31
|
-
private readonly helpers: IIntervalHelpers<TInterval>,
|
|
32
39
|
private readonly client: Client,
|
|
40
|
+
private readonly helpers: IIntervalHelpers<TInterval>,
|
|
33
41
|
) {
|
|
34
42
|
this.intervalTree = new RedBlackTree<TInterval, TInterval>((a: TInterval, b: TInterval) => {
|
|
35
43
|
assert(
|
|
@@ -66,7 +74,7 @@ class StartpointInRangeIndex<TInterval extends ISerializableInterval>
|
|
|
66
74
|
this.intervalTree.remove(interval);
|
|
67
75
|
}
|
|
68
76
|
|
|
69
|
-
public findIntervalsWithStartpointInRange(start: number, end: number) {
|
|
77
|
+
public findIntervalsWithStartpointInRange(start: number, end: number): TInterval[] {
|
|
70
78
|
if (start <= 0 || start > end || this.intervalTree.isEmpty()) {
|
|
71
79
|
return [];
|
|
72
80
|
}
|
|
@@ -101,9 +109,9 @@ class StartpointInRangeIndex<TInterval extends ISerializableInterval>
|
|
|
101
109
|
}
|
|
102
110
|
}
|
|
103
111
|
|
|
104
|
-
export function createStartpointInRangeIndex
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return new StartpointInRangeIndex<
|
|
112
|
+
export function createStartpointInRangeIndex(
|
|
113
|
+
sharedString: SharedString,
|
|
114
|
+
): IStartpointInRangeIndex<SequenceInterval> {
|
|
115
|
+
const client = (sharedString as unknown as { client: Client }).client;
|
|
116
|
+
return new StartpointInRangeIndex<SequenceInterval>(client, sequenceIntervalHelpers);
|
|
109
117
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
+
/* eslint-disable import/no-deprecated */
|
|
5
6
|
|
|
6
7
|
import {
|
|
7
8
|
ICombiningOp,
|
|
@@ -60,7 +61,7 @@ export class Interval implements ISerializableInterval {
|
|
|
60
61
|
* Adds an auxiliary set of properties to this interval.
|
|
61
62
|
* These properties can be recovered using `getAdditionalPropertySets`
|
|
62
63
|
* @param props - set of properties to add
|
|
63
|
-
* @remarks
|
|
64
|
+
* @remarks This gets called as part of the default conflict resolver for `IIntervalCollection<Interval>`
|
|
64
65
|
* (i.e. non-sequence-based interval collections). However, the additional properties don't get serialized.
|
|
65
66
|
* This functionality seems half-baked.
|
|
66
67
|
*/
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
SlidingPreference,
|
|
13
13
|
} from "@fluidframework/merge-tree";
|
|
14
14
|
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
15
|
+
|
|
15
16
|
/**
|
|
16
17
|
* Basic interval abstraction
|
|
17
18
|
*/
|
|
@@ -105,7 +106,7 @@ export interface ISerializedInterval {
|
|
|
105
106
|
/**
|
|
106
107
|
* Sequence number at which `start` and `end` should be interpreted
|
|
107
108
|
*
|
|
108
|
-
* @remarks
|
|
109
|
+
* @remarks It's unclear that this is necessary to store here.
|
|
109
110
|
* This should just be the refSeq on the op that modified the interval, which should be available via other means.
|
|
110
111
|
* At the time of writing, it's not plumbed through to the reconnect/rebase code, however, which does need it.
|
|
111
112
|
*/
|
|
@@ -138,7 +139,7 @@ export interface ISerializableInterval extends IInterval {
|
|
|
138
139
|
* Gets the id associated with this interval.
|
|
139
140
|
* When the interval is used as part of an interval collection, this id can be used to modify or remove the
|
|
140
141
|
* interval.
|
|
141
|
-
* @remarks
|
|
142
|
+
* @remarks This signature includes `undefined` strictly for backwards-compatibility reasons, as older versions
|
|
142
143
|
* of Fluid didn't always write interval ids.
|
|
143
144
|
*/
|
|
144
145
|
getIntervalId(): string | undefined;
|
|
@@ -166,6 +167,7 @@ export type CompressedSerializedInterval =
|
|
|
166
167
|
|
|
167
168
|
/**
|
|
168
169
|
* @sealed
|
|
170
|
+
* @deprecated The methods within have substitutions
|
|
169
171
|
*/
|
|
170
172
|
export interface IIntervalHelpers<TInterval extends ISerializableInterval> {
|
|
171
173
|
/**
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/* eslint-disable no-bitwise */
|
|
7
|
+
/* eslint-disable import/no-deprecated */
|
|
7
8
|
|
|
8
9
|
import {
|
|
9
10
|
Client,
|
|
@@ -43,7 +44,7 @@ const reservedIntervalIdKey = "intervalId";
|
|
|
43
44
|
* As such, when content is inserted into the middle of the interval, the interval expands to
|
|
44
45
|
* include that content.
|
|
45
46
|
*
|
|
46
|
-
* @remarks
|
|
47
|
+
* @remarks The endpoint's position should be treated exclusively to get reasonable behavior--i.e.
|
|
47
48
|
* an interval referring to "hello" in "hello world" should have a start position of 0 and an end
|
|
48
49
|
* position of 5.
|
|
49
50
|
*
|
|
@@ -74,12 +75,12 @@ export class SequenceInterval implements ISerializableInterval {
|
|
|
74
75
|
private readonly client: Client,
|
|
75
76
|
/**
|
|
76
77
|
* Start endpoint of this interval.
|
|
77
|
-
* @remarks
|
|
78
|
+
* @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.
|
|
78
79
|
*/
|
|
79
80
|
public start: LocalReferencePosition,
|
|
80
81
|
/**
|
|
81
82
|
* End endpoint of this interval.
|
|
82
|
-
* @remarks
|
|
83
|
+
* @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.
|
|
83
84
|
*/
|
|
84
85
|
public end: LocalReferencePosition,
|
|
85
86
|
public intervalType: IntervalType,
|
|
@@ -435,7 +436,7 @@ export function createSequenceInterval(
|
|
|
435
436
|
// All non-transient interval references must eventually be SlideOnRemove
|
|
436
437
|
// To ensure eventual consistency, they must start as StayOnRemove when
|
|
437
438
|
// pending (created locally and creation op is not acked)
|
|
438
|
-
if (op
|
|
439
|
+
if (op ?? fromSnapshot) {
|
|
439
440
|
beginRefType |= ReferenceType.SlideOnRemove;
|
|
440
441
|
endRefType |= ReferenceType.SlideOnRemove;
|
|
441
442
|
} else {
|
|
@@ -487,6 +488,9 @@ export const compareSequenceIntervalEnds = (a: SequenceInterval, b: SequenceInte
|
|
|
487
488
|
export const compareSequenceIntervalStarts = (a: SequenceInterval, b: SequenceInterval): number =>
|
|
488
489
|
compareReferencePositions(a.start, b.start);
|
|
489
490
|
|
|
491
|
+
/**
|
|
492
|
+
* @deprecated The methods within have substitutions
|
|
493
|
+
*/
|
|
490
494
|
export const sequenceIntervalHelpers: IIntervalHelpers<SequenceInterval> = {
|
|
491
495
|
compareEnds: compareSequenceIntervalEnds,
|
|
492
496
|
compareStarts: compareSequenceIntervalStarts,
|
package/src/packageVersion.ts
CHANGED
package/src/sequence.ts
CHANGED
|
@@ -452,7 +452,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
452
452
|
}
|
|
453
453
|
|
|
454
454
|
/**
|
|
455
|
-
* @returns
|
|
455
|
+
* @returns The most recent sequence number which has been acked by the server and processed by this
|
|
456
456
|
* SharedSegmentSequence.
|
|
457
457
|
*/
|
|
458
458
|
public getCurrentSeq() {
|
|
@@ -489,6 +489,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
489
489
|
* @returns An iterable object that enumerates the IntervalCollection labels.
|
|
490
490
|
*
|
|
491
491
|
* @example
|
|
492
|
+
*
|
|
492
493
|
* ```typescript
|
|
493
494
|
* const iter = this.getIntervalCollectionKeys();
|
|
494
495
|
* for (key of iter)
|
|
@@ -704,7 +705,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
704
705
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}
|
|
705
706
|
*/
|
|
706
707
|
protected applyStashedOp(content: any): unknown {
|
|
707
|
-
return this.client.applyStashedOp(content);
|
|
708
|
+
return this.client.applyStashedOp(parseHandles(content, this.serializer));
|
|
708
709
|
}
|
|
709
710
|
|
|
710
711
|
private summarizeMergeTree(serializer: IFluidSerializer): ISummaryTreeWithStats {
|
|
@@ -147,25 +147,33 @@ export interface ISequenceDeltaRange<
|
|
|
147
147
|
> {
|
|
148
148
|
/**
|
|
149
149
|
* The type of operation that changed this range.
|
|
150
|
-
*
|
|
150
|
+
*
|
|
151
|
+
* @remarks Consuming code should typically compare this to the enum values defined in
|
|
151
152
|
* `MergeTreeDeltaOperationTypes`.
|
|
152
153
|
*/
|
|
153
154
|
operation: TOperation;
|
|
155
|
+
|
|
154
156
|
/**
|
|
155
157
|
* The index of the start of the range.
|
|
156
158
|
*/
|
|
157
159
|
position: number;
|
|
160
|
+
|
|
158
161
|
/**
|
|
159
162
|
* The segment that corresponds to the range.
|
|
160
163
|
*/
|
|
161
164
|
segment: ISegment;
|
|
165
|
+
|
|
162
166
|
/**
|
|
163
167
|
* Deltas object which contains all modified properties with their previous values.
|
|
164
168
|
* Since `undefined` doesn't survive a round-trip through JSON serialization, the old value being absent
|
|
165
169
|
* is instead encoded with `null`.
|
|
166
|
-
*
|
|
170
|
+
*
|
|
171
|
+
* @remarks This object is motivated by undo/redo scenarios, and provides a convenient "inverse op" to apply to
|
|
167
172
|
* undo a property change.
|
|
168
|
-
*
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
*
|
|
176
|
+
* If a segment initially had properties `{ foo: "1", bar: 2 }` and it was annotated with
|
|
169
177
|
* `{ foo: 3, baz: 5 }`, the corresponding event would have a `propertyDeltas` of `{ foo: "1", baz: null }`.
|
|
170
178
|
*/
|
|
171
179
|
propertyDeltas: PropertySet;
|
package/src/sequenceFactory.ts
CHANGED
|
@@ -15,7 +15,7 @@ import { SharedString, SharedStringSegment } from "./sharedString";
|
|
|
15
15
|
|
|
16
16
|
export class SharedStringFactory implements IChannelFactory {
|
|
17
17
|
// TODO rename back to https://graph.microsoft.com/types/mergeTree/string once paparazzi is able to dynamically
|
|
18
|
-
// load code
|
|
18
|
+
// load code (UPDATE: paparazzi is gone... anything to do here?)
|
|
19
19
|
public static Type = "https://graph.microsoft.com/types/mergeTree";
|
|
20
20
|
|
|
21
21
|
public static readonly Attributes: IChannelAttributes = {
|
package/src/sharedString.ts
CHANGED
|
@@ -406,7 +406,8 @@ const gatherTextAndMarkers: ISegmentAction<ITextAndMarkerAccumulator> = (
|
|
|
406
406
|
if (placeholder && placeholder.length > 0) {
|
|
407
407
|
const placeholderText =
|
|
408
408
|
placeholder === "*"
|
|
409
|
-
?
|
|
409
|
+
? // eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
410
|
+
`\n${segment.toString()}`
|
|
410
411
|
: placeholder.repeat(segment.cachedLength);
|
|
411
412
|
textSegment.text += placeholderText;
|
|
412
413
|
} else {
|