@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.intervalLocatorFromEndpoint = exports.IntervalCollection = exports.makeOpsMap = exports.IntervalCollectionValueType = exports.SequenceIntervalCollectionValueType = exports.LocalIntervalCollection = exports.createIntervalIndex = void 0;
|
|
7
|
+
exports.intervalLocatorFromEndpoint = exports.IntervalCollection = exports.makeOpsMap = exports.IntervalCollectionValueType = exports.SequenceIntervalCollectionValueType = exports.LocalIntervalCollection = exports.createIntervalIndex = exports.computeStickinessFromSide = exports.endpointPosAndSide = exports.sidesFromStickiness = exports.Side = void 0;
|
|
8
8
|
/* eslint-disable no-bitwise */
|
|
9
|
+
/* eslint-disable import/no-deprecated */
|
|
9
10
|
const client_utils_1 = require("@fluid-internal/client-utils");
|
|
10
11
|
const core_utils_1 = require("@fluidframework/core-utils");
|
|
11
12
|
const merge_tree_1 = require("@fluidframework/merge-tree");
|
|
@@ -13,19 +14,40 @@ const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
|
13
14
|
const uuid_1 = require("uuid");
|
|
14
15
|
const intervals_1 = require("./intervals");
|
|
15
16
|
const intervalIndex_1 = require("./intervalIndex");
|
|
17
|
+
/**
|
|
18
|
+
* Defines a side relative to a character in a sequence.
|
|
19
|
+
*
|
|
20
|
+
* @remarks See {@link SequencePlace} for additional context on usage.
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
var Side;
|
|
24
|
+
(function (Side) {
|
|
25
|
+
Side[Side["Before"] = 0] = "Before";
|
|
26
|
+
Side[Side["After"] = 1] = "After";
|
|
27
|
+
})(Side || (exports.Side = Side = {}));
|
|
16
28
|
const reservedIntervalIdKey = "intervalId";
|
|
29
|
+
function sidesFromStickiness(stickiness) {
|
|
30
|
+
const startSide = (stickiness & intervals_1.IntervalStickiness.START) !== 0 ? Side.After : Side.Before;
|
|
31
|
+
const endSide = (stickiness & intervals_1.IntervalStickiness.END) !== 0 ? Side.Before : Side.After;
|
|
32
|
+
return { startSide, endSide };
|
|
33
|
+
}
|
|
34
|
+
exports.sidesFromStickiness = sidesFromStickiness;
|
|
17
35
|
/**
|
|
18
36
|
* Decompress an interval after loading a summary from JSON. The exact format
|
|
19
37
|
* of this compression is unspecified and subject to change
|
|
20
38
|
*/
|
|
21
39
|
function decompressInterval(interval, label) {
|
|
40
|
+
const stickiness = interval[5] ?? intervals_1.IntervalStickiness.END;
|
|
41
|
+
const { startSide, endSide } = sidesFromStickiness(stickiness);
|
|
22
42
|
return {
|
|
23
43
|
start: interval[0],
|
|
24
44
|
end: interval[1],
|
|
25
45
|
sequenceNumber: interval[2],
|
|
26
46
|
intervalType: interval[3],
|
|
27
47
|
properties: { ...interval[4], [merge_tree_1.reservedRangeLabelsKey]: [label] },
|
|
28
|
-
stickiness
|
|
48
|
+
stickiness,
|
|
49
|
+
startSide,
|
|
50
|
+
endSide,
|
|
29
51
|
};
|
|
30
52
|
}
|
|
31
53
|
/**
|
|
@@ -34,7 +56,7 @@ function decompressInterval(interval, label) {
|
|
|
34
56
|
*/
|
|
35
57
|
function compressInterval(interval) {
|
|
36
58
|
const { start, end, sequenceNumber, intervalType, properties } = interval;
|
|
37
|
-
|
|
59
|
+
let base = [
|
|
38
60
|
start,
|
|
39
61
|
end,
|
|
40
62
|
sequenceNumber,
|
|
@@ -44,30 +66,63 @@ function compressInterval(interval) {
|
|
|
44
66
|
{ ...properties, [merge_tree_1.reservedRangeLabelsKey]: undefined },
|
|
45
67
|
];
|
|
46
68
|
if (interval.stickiness !== undefined && interval.stickiness !== intervals_1.IntervalStickiness.END) {
|
|
47
|
-
|
|
69
|
+
// reassignment to make it easier for typescript to reason about types
|
|
70
|
+
base = [...base, interval.stickiness];
|
|
48
71
|
}
|
|
49
72
|
return base;
|
|
50
73
|
}
|
|
74
|
+
function endpointPosAndSide(start, end) {
|
|
75
|
+
const startIsPlainEndpoint = typeof start === "number" || start === "start" || start === "end";
|
|
76
|
+
const endIsPlainEndpoint = typeof end === "number" || end === "start" || end === "end";
|
|
77
|
+
const startSide = startIsPlainEndpoint ? Side.Before : start?.side;
|
|
78
|
+
const endSide = endIsPlainEndpoint ? Side.Before : end?.side;
|
|
79
|
+
const startPos = startIsPlainEndpoint ? start : start?.pos;
|
|
80
|
+
const endPos = endIsPlainEndpoint ? end : end?.pos;
|
|
81
|
+
return {
|
|
82
|
+
startSide,
|
|
83
|
+
endSide,
|
|
84
|
+
startPos,
|
|
85
|
+
endPos,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
exports.endpointPosAndSide = endpointPosAndSide;
|
|
89
|
+
function toSequencePlace(pos, side) {
|
|
90
|
+
return typeof pos === "number" ? { pos, side } : pos;
|
|
91
|
+
}
|
|
92
|
+
function toOptionalSequencePlace(pos, side = Side.Before) {
|
|
93
|
+
return typeof pos === "number" ? { pos, side } : pos;
|
|
94
|
+
}
|
|
95
|
+
function computeStickinessFromSide(startPos = -1, startSide = Side.Before, endPos = -1, endSide = Side.Before) {
|
|
96
|
+
let stickiness = intervals_1.IntervalStickiness.NONE;
|
|
97
|
+
if (startSide === Side.After || startPos === "start") {
|
|
98
|
+
stickiness |= intervals_1.IntervalStickiness.START;
|
|
99
|
+
}
|
|
100
|
+
if (endSide === Side.Before || endPos === "end") {
|
|
101
|
+
stickiness |= intervals_1.IntervalStickiness.END;
|
|
102
|
+
}
|
|
103
|
+
return stickiness;
|
|
104
|
+
}
|
|
105
|
+
exports.computeStickinessFromSide = computeStickinessFromSide;
|
|
51
106
|
function createIntervalIndex() {
|
|
52
107
|
const helpers = {
|
|
53
|
-
compareEnds: (a, b) => a.end - b.end,
|
|
54
108
|
create: intervals_1.createInterval,
|
|
55
109
|
};
|
|
56
|
-
const lc = new LocalIntervalCollection(undefined, "", helpers);
|
|
110
|
+
const lc = new LocalIntervalCollection(undefined, "", helpers, {});
|
|
57
111
|
return lc;
|
|
58
112
|
}
|
|
59
113
|
exports.createIntervalIndex = createIntervalIndex;
|
|
60
114
|
class LocalIntervalCollection {
|
|
61
|
-
constructor(client, label, helpers,
|
|
115
|
+
constructor(client, label, helpers, options,
|
|
62
116
|
/** Callback invoked each time one of the endpoints of an interval slides. */
|
|
63
117
|
onPositionChange) {
|
|
64
118
|
this.client = client;
|
|
65
119
|
this.label = label;
|
|
66
120
|
this.helpers = helpers;
|
|
121
|
+
this.options = options;
|
|
67
122
|
this.onPositionChange = onPositionChange;
|
|
68
|
-
this.overlappingIntervalsIndex =
|
|
123
|
+
this.overlappingIntervalsIndex = new intervalIndex_1.OverlappingIntervalsIndex(client, helpers);
|
|
69
124
|
this.idIntervalIndex = (0, intervalIndex_1.createIdIntervalIndex)();
|
|
70
|
-
this.endIntervalIndex =
|
|
125
|
+
this.endIntervalIndex = new intervalIndex_1.EndpointIndex(client, helpers);
|
|
71
126
|
this.indexes = new Set([
|
|
72
127
|
this.overlappingIntervalsIndex,
|
|
73
128
|
this.idIntervalIndex,
|
|
@@ -121,12 +176,12 @@ class LocalIntervalCollection {
|
|
|
121
176
|
this.removeIntervalFromIndexes(interval);
|
|
122
177
|
this.removeIntervalListeners(interval);
|
|
123
178
|
}
|
|
124
|
-
createInterval(start, end, intervalType, op
|
|
125
|
-
return this.helpers.create(this.label, start, end, this.client, intervalType, op, undefined,
|
|
179
|
+
createInterval(start, end, intervalType, op) {
|
|
180
|
+
return this.helpers.create(this.label, start, end, this.client, intervalType, op, undefined, this.options.mergeTreeReferencesCanSlideToEndpoint);
|
|
126
181
|
}
|
|
127
|
-
addInterval(start, end, intervalType, props, op
|
|
182
|
+
addInterval(start, end, intervalType, props, op) {
|
|
128
183
|
var _a;
|
|
129
|
-
const interval = this.createInterval(start, end, intervalType, op
|
|
184
|
+
const interval = this.createInterval(start, end, intervalType, op);
|
|
130
185
|
if (interval) {
|
|
131
186
|
if (!interval.properties) {
|
|
132
187
|
interval.properties = (0, merge_tree_1.createMap)();
|
|
@@ -163,7 +218,7 @@ class LocalIntervalCollection {
|
|
|
163
218
|
this.addIntervalListeners(interval);
|
|
164
219
|
}
|
|
165
220
|
changeInterval(interval, start, end, op, localSeq) {
|
|
166
|
-
const newInterval = interval.modify(this.label, start, end, op, localSeq);
|
|
221
|
+
const newInterval = interval.modify(this.label, start, end, op, localSeq, this.options.mergeTreeReferencesCanSlideToEndpoint);
|
|
167
222
|
if (newInterval) {
|
|
168
223
|
this.removeExistingInterval(interval);
|
|
169
224
|
this.add(newInterval);
|
|
@@ -186,7 +241,7 @@ class LocalIntervalCollection {
|
|
|
186
241
|
// either, so this must be special-cased.
|
|
187
242
|
return ref;
|
|
188
243
|
}
|
|
189
|
-
return this.client.createLocalReferencePosition(segment, ref.getOffset(), merge_tree_1.ReferenceType.Transient, ref.properties, ref.slidingPreference);
|
|
244
|
+
return this.client.createLocalReferencePosition(segment, ref.getOffset(), merge_tree_1.ReferenceType.Transient, ref.properties, ref.slidingPreference, ref.canSlideToEndpoint);
|
|
190
245
|
};
|
|
191
246
|
if (interval instanceof intervals_1.SequenceInterval) {
|
|
192
247
|
let previousInterval;
|
|
@@ -245,7 +300,6 @@ SequenceIntervalCollectionValueType._ops = makeOpsMap();
|
|
|
245
300
|
class IntervalCollectionFactory {
|
|
246
301
|
load(emitter, raw = [], options) {
|
|
247
302
|
const helpers = {
|
|
248
|
-
compareEnds: (a, b) => a.end - b.end,
|
|
249
303
|
create: intervals_1.createInterval,
|
|
250
304
|
};
|
|
251
305
|
const collection = new IntervalCollection(helpers, false, emitter, raw, options);
|
|
@@ -344,10 +398,18 @@ class IntervalCollectionIterator {
|
|
|
344
398
|
};
|
|
345
399
|
}
|
|
346
400
|
}
|
|
401
|
+
// solely for type checking in the implementation of add - will be removed once
|
|
402
|
+
// deprecated signatures are removed
|
|
403
|
+
const isSequencePlace = (place) => {
|
|
404
|
+
return typeof place === "number" || typeof place === "string" || place.pos !== undefined;
|
|
405
|
+
};
|
|
347
406
|
/**
|
|
348
407
|
* {@inheritdoc IIntervalCollection}
|
|
349
408
|
*/
|
|
350
409
|
class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
410
|
+
get attached() {
|
|
411
|
+
return !!this.localCollection;
|
|
412
|
+
}
|
|
351
413
|
/** @internal */
|
|
352
414
|
constructor(helpers, requiresClient, emitter, serializedIntervals, options = {}) {
|
|
353
415
|
super();
|
|
@@ -363,9 +425,6 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
363
425
|
? serializedIntervals
|
|
364
426
|
: serializedIntervals.intervals.map((i) => decompressInterval(i, serializedIntervals.label));
|
|
365
427
|
}
|
|
366
|
-
get attached() {
|
|
367
|
-
return !!this.localCollection;
|
|
368
|
-
}
|
|
369
428
|
/**
|
|
370
429
|
* {@inheritdoc IIntervalCollection.attachIndex}
|
|
371
430
|
*/
|
|
@@ -398,6 +457,9 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
398
457
|
if (!this.client) {
|
|
399
458
|
throw new telemetry_utils_1.LoggingError("mergeTree client must exist");
|
|
400
459
|
}
|
|
460
|
+
if (pos === "start" || pos === "end") {
|
|
461
|
+
return pos;
|
|
462
|
+
}
|
|
401
463
|
const { clientId } = this.client.getCollabWindow();
|
|
402
464
|
const { segment, offset } = this.client.getContainingSegment(pos, {
|
|
403
465
|
referenceSequenceNumber: seqNumberFrom,
|
|
@@ -405,7 +467,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
405
467
|
}, localSeq);
|
|
406
468
|
// if segment is undefined, it slid off the string
|
|
407
469
|
(0, core_utils_1.assert)(segment !== undefined, 0x54e /* No segment found */);
|
|
408
|
-
const segoff = (0, merge_tree_1.getSlideToSegoff)({ segment, offset }) ?? segment;
|
|
470
|
+
const segoff = (0, merge_tree_1.getSlideToSegoff)({ segment, offset }, undefined, this.options.mergeTreeReferencesCanSlideToEndpoint) ?? segment;
|
|
409
471
|
// case happens when rebasing op, but concurrently entire string has been deleted
|
|
410
472
|
if (segoff.segment === undefined || segoff.offset === undefined) {
|
|
411
473
|
return merge_tree_1.DetachedReferencePosition;
|
|
@@ -444,12 +506,18 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
444
506
|
}
|
|
445
507
|
});
|
|
446
508
|
}
|
|
447
|
-
this.localCollection = new LocalIntervalCollection(client, label, this.helpers, (interval, previousInterval) => this.emitChange(interval, previousInterval, true, true));
|
|
509
|
+
this.localCollection = new LocalIntervalCollection(client, label, this.helpers, this.options, (interval, previousInterval) => this.emitChange(interval, previousInterval, true, true));
|
|
448
510
|
if (this.savedSerializedIntervals) {
|
|
449
511
|
for (const serializedInterval of this.savedSerializedIntervals) {
|
|
450
512
|
this.localCollection.ensureSerializedId(serializedInterval);
|
|
451
|
-
const { start, end, intervalType, properties,
|
|
452
|
-
const
|
|
513
|
+
const { start: startPos, end: endPos, intervalType, properties, startSide, endSide, } = serializedInterval;
|
|
514
|
+
const start = typeof startPos === "number" && startSide !== undefined
|
|
515
|
+
? { pos: startPos, side: startSide }
|
|
516
|
+
: startPos;
|
|
517
|
+
const end = typeof endPos === "number" && endSide !== undefined
|
|
518
|
+
? { pos: endPos, side: endSide }
|
|
519
|
+
: endPos;
|
|
520
|
+
const interval = this.helpers.create(label, start, end, client, intervalType, undefined, true, this.options.mergeTreeReferencesCanSlideToEndpoint);
|
|
453
521
|
if (properties) {
|
|
454
522
|
interval.addProperties(properties);
|
|
455
523
|
}
|
|
@@ -495,28 +563,59 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
495
563
|
}
|
|
496
564
|
return this.localCollection.idIntervalIndex.getIntervalById(id);
|
|
497
565
|
}
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
566
|
+
assertStickinessEnabled(start, end) {
|
|
567
|
+
if (!(typeof start === "number" && typeof end === "number") &&
|
|
568
|
+
!this.options.intervalStickinessEnabled) {
|
|
569
|
+
throw new telemetry_utils_1.UsageError("attempted to set interval stickiness without enabling `intervalStickinessEnabled` feature flag");
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
add(start, end, intervalType, props) {
|
|
573
|
+
let intStart;
|
|
574
|
+
let intEnd;
|
|
575
|
+
let type;
|
|
576
|
+
let properties;
|
|
577
|
+
if (isSequencePlace(start)) {
|
|
578
|
+
intStart = start;
|
|
579
|
+
(0, core_utils_1.assert)(end !== undefined, 0x7c0 /* end must be defined */);
|
|
580
|
+
intEnd = end;
|
|
581
|
+
(0, core_utils_1.assert)(intervalType !== undefined, 0x7c1 /* intervalType must be defined */);
|
|
582
|
+
type = intervalType;
|
|
583
|
+
properties = props;
|
|
584
|
+
}
|
|
585
|
+
else {
|
|
586
|
+
intStart = start.start;
|
|
587
|
+
intEnd = start.end;
|
|
588
|
+
type = intervals_1.IntervalType.SlideOnRemove;
|
|
589
|
+
properties = start.props;
|
|
590
|
+
}
|
|
502
591
|
if (!this.localCollection) {
|
|
503
592
|
throw new telemetry_utils_1.LoggingError("attach must be called prior to adding intervals");
|
|
504
593
|
}
|
|
505
|
-
if (
|
|
594
|
+
if (type & intervals_1.IntervalType.Transient) {
|
|
506
595
|
throw new telemetry_utils_1.LoggingError("Can not add transient intervals");
|
|
507
596
|
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
597
|
+
const { startSide, endSide, startPos, endPos } = endpointPosAndSide(intStart, intEnd);
|
|
598
|
+
(0, core_utils_1.assert)(startPos !== undefined &&
|
|
599
|
+
endPos !== undefined &&
|
|
600
|
+
startSide !== undefined &&
|
|
601
|
+
endSide !== undefined, 0x793 /* start and end cannot be undefined because they were not passed in as undefined */);
|
|
602
|
+
const stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);
|
|
603
|
+
this.assertStickinessEnabled(intStart, intEnd);
|
|
604
|
+
const interval = this.localCollection.addInterval(toSequencePlace(startPos, startSide), toSequencePlace(endPos, endSide), type, properties);
|
|
512
605
|
if (interval) {
|
|
606
|
+
if (!this.isCollaborating && interval instanceof intervals_1.SequenceInterval) {
|
|
607
|
+
setSlideOnRemove(interval.start);
|
|
608
|
+
setSlideOnRemove(interval.end);
|
|
609
|
+
}
|
|
513
610
|
const serializedInterval = {
|
|
514
|
-
|
|
515
|
-
|
|
611
|
+
start: startPos,
|
|
612
|
+
end: endPos,
|
|
613
|
+
intervalType: type,
|
|
516
614
|
properties: interval.properties,
|
|
517
615
|
sequenceNumber: this.client?.getCurrentSeq() ?? 0,
|
|
518
|
-
start,
|
|
519
616
|
stickiness,
|
|
617
|
+
startSide,
|
|
618
|
+
endSide,
|
|
520
619
|
};
|
|
521
620
|
const localSeq = this.getNextLocalSeq();
|
|
522
621
|
this.localSeqToSerializedInterval.set(localSeq, serializedInterval);
|
|
@@ -580,8 +679,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
580
679
|
}
|
|
581
680
|
const interval = this.getIntervalById(id);
|
|
582
681
|
if (interval) {
|
|
583
|
-
|
|
584
|
-
const deltaProps = interval.addProperties(props, true, merge_tree_1.UnassignedSequenceNumber);
|
|
682
|
+
const deltaProps = interval.addProperties(props, true, this.isCollaborating ? merge_tree_1.UnassignedSequenceNumber : merge_tree_1.UniversalSequenceNumber);
|
|
585
683
|
const serializedInterval = interval.serialize();
|
|
586
684
|
// Emit a change op that will only change properties. Add the ID to
|
|
587
685
|
// the property bag provided by the caller.
|
|
@@ -612,9 +710,18 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
612
710
|
if (!newInterval) {
|
|
613
711
|
return undefined;
|
|
614
712
|
}
|
|
713
|
+
if (!this.isCollaborating && newInterval instanceof intervals_1.SequenceInterval) {
|
|
714
|
+
setSlideOnRemove(newInterval.start);
|
|
715
|
+
setSlideOnRemove(newInterval.end);
|
|
716
|
+
}
|
|
615
717
|
const serializedInterval = interval.serialize();
|
|
616
|
-
|
|
617
|
-
|
|
718
|
+
const { startPos, startSide, endPos, endSide } = endpointPosAndSide(start, end);
|
|
719
|
+
const stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);
|
|
720
|
+
serializedInterval.start = startPos;
|
|
721
|
+
serializedInterval.end = endPos;
|
|
722
|
+
serializedInterval.startSide = startSide;
|
|
723
|
+
serializedInterval.endSide = endSide;
|
|
724
|
+
serializedInterval.stickiness = stickiness;
|
|
618
725
|
// Emit a property bag containing only the ID, as we don't intend for this op to change any properties.
|
|
619
726
|
serializedInterval.properties = {
|
|
620
727
|
[reservedIntervalIdKey]: interval.getIntervalId(),
|
|
@@ -629,7 +736,13 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
629
736
|
// No interval to change
|
|
630
737
|
return undefined;
|
|
631
738
|
}
|
|
739
|
+
get isCollaborating() {
|
|
740
|
+
return this.client?.getCollabWindow().collaborating ?? false;
|
|
741
|
+
}
|
|
632
742
|
addPendingChange(id, serializedInterval) {
|
|
743
|
+
if (!this.isCollaborating) {
|
|
744
|
+
return;
|
|
745
|
+
}
|
|
633
746
|
if (serializedInterval.start !== undefined) {
|
|
634
747
|
this.addPendingChangeHelper(id, this.pendingChangesStart, serializedInterval);
|
|
635
748
|
}
|
|
@@ -722,7 +835,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
722
835
|
// If changeInterval gives us a new interval, work with that one. Otherwise keep working with
|
|
723
836
|
// the one we originally found in the tree.
|
|
724
837
|
newInterval =
|
|
725
|
-
this.localCollection.changeInterval(interval, start, end, op) ?? interval;
|
|
838
|
+
this.localCollection.changeInterval(interval, toOptionalSequencePlace(start, serializedInterval.startSide), toOptionalSequencePlace(end, serializedInterval.endSide), op) ?? interval;
|
|
726
839
|
}
|
|
727
840
|
const deltaProps = newInterval.addProperties(newProps, true, op.sequenceNumber);
|
|
728
841
|
if (this.onDeserialize) {
|
|
@@ -767,7 +880,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
767
880
|
if (!this.attached) {
|
|
768
881
|
throw new telemetry_utils_1.LoggingError("attachSequence must be called");
|
|
769
882
|
}
|
|
770
|
-
const { intervalType, properties } = serializedInterval;
|
|
883
|
+
const { intervalType, properties, stickiness, startSide, endSide } = serializedInterval;
|
|
771
884
|
const { start: startRebased, end: endRebased } = this.localSeqToRebasedInterval.get(localSeq) ?? this.computeRebasedPositions(localSeq);
|
|
772
885
|
const intervalId = properties?.[reservedIntervalIdKey];
|
|
773
886
|
const localInterval = this.localCollection?.idIntervalIndex.getIntervalById(intervalId);
|
|
@@ -777,8 +890,12 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
777
890
|
intervalType,
|
|
778
891
|
sequenceNumber: this.client?.getCurrentSeq() ?? 0,
|
|
779
892
|
properties,
|
|
893
|
+
stickiness,
|
|
894
|
+
startSide,
|
|
895
|
+
endSide,
|
|
780
896
|
};
|
|
781
897
|
if (opName === "change" &&
|
|
898
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- ?? is not logically equivalent when .hasPendingChangeStart returns false.
|
|
782
899
|
(this.hasPendingChangeStart(intervalId) || this.hasPendingChangeEnd(intervalId))) {
|
|
783
900
|
this.removePendingChange(serializedInterval);
|
|
784
901
|
this.addPendingChange(intervalId, rebased);
|
|
@@ -796,7 +913,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
796
913
|
(0, core_utils_1.assert)(localInterval instanceof intervals_1.SequenceInterval, 0x3a0 /* localInterval must be `SequenceInterval` when used with client */);
|
|
797
914
|
// The rebased op may place this interval's endpoints on different segments. Calling `changeInterval` here
|
|
798
915
|
// updates the local client's state to be consistent with the emitted op.
|
|
799
|
-
this.localCollection?.changeInterval(localInterval, startRebased, endRebased, undefined, localSeq);
|
|
916
|
+
this.localCollection?.changeInterval(localInterval, toOptionalSequencePlace(startRebased, startSide), toOptionalSequencePlace(endRebased, endSide), undefined, localSeq);
|
|
800
917
|
}
|
|
801
918
|
return rebased;
|
|
802
919
|
}
|
|
@@ -808,18 +925,12 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
808
925
|
if (segoff.segment?.localRefs?.has(lref) !== true) {
|
|
809
926
|
return undefined;
|
|
810
927
|
}
|
|
811
|
-
const newSegoff = (0, merge_tree_1.getSlideToSegoff)(segoff);
|
|
928
|
+
const newSegoff = (0, merge_tree_1.getSlideToSegoff)(segoff, undefined, this.options.mergeTreeReferencesCanSlideToEndpoint);
|
|
812
929
|
const value = segoff.segment === newSegoff.segment && segoff.offset === newSegoff.offset
|
|
813
930
|
? undefined
|
|
814
931
|
: newSegoff;
|
|
815
932
|
return value;
|
|
816
933
|
}
|
|
817
|
-
setSlideOnRemove(lref) {
|
|
818
|
-
let refType = lref.refType;
|
|
819
|
-
refType = refType & ~merge_tree_1.ReferenceType.StayOnRemove;
|
|
820
|
-
refType = refType | merge_tree_1.ReferenceType.SlideOnRemove;
|
|
821
|
-
lref.refType = refType;
|
|
822
|
-
}
|
|
823
934
|
ackInterval(interval, op) {
|
|
824
935
|
// Only SequenceIntervals need potential sliding
|
|
825
936
|
if (!(interval instanceof intervals_1.SequenceInterval)) {
|
|
@@ -835,10 +946,10 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
835
946
|
const hasPendingStartChange = this.hasPendingChangeStart(id);
|
|
836
947
|
const hasPendingEndChange = this.hasPendingChangeEnd(id);
|
|
837
948
|
if (!hasPendingStartChange) {
|
|
838
|
-
|
|
949
|
+
setSlideOnRemove(interval.start);
|
|
839
950
|
}
|
|
840
951
|
if (!hasPendingEndChange) {
|
|
841
|
-
|
|
952
|
+
setSlideOnRemove(interval.end);
|
|
842
953
|
}
|
|
843
954
|
const needsStartUpdate = newStart !== undefined && !hasPendingStartChange;
|
|
844
955
|
const needsEndUpdate = newEnd !== undefined && !hasPendingEndChange;
|
|
@@ -857,7 +968,8 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
857
968
|
}
|
|
858
969
|
if (needsStartUpdate) {
|
|
859
970
|
const props = interval.start.properties;
|
|
860
|
-
interval.start = (0, intervals_1.createPositionReferenceFromSegoff)(this.client, newStart, interval.start.refType, op, (0, intervals_1.startReferenceSlidingPreference)(interval.stickiness))
|
|
971
|
+
interval.start = (0, intervals_1.createPositionReferenceFromSegoff)(this.client, newStart, interval.start.refType, op, undefined, undefined, (0, intervals_1.startReferenceSlidingPreference)(interval.stickiness), (0, intervals_1.startReferenceSlidingPreference)(interval.stickiness) ===
|
|
972
|
+
merge_tree_1.SlidingPreference.BACKWARD);
|
|
861
973
|
if (props) {
|
|
862
974
|
interval.start.addProperties(props);
|
|
863
975
|
}
|
|
@@ -869,7 +981,8 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
869
981
|
}
|
|
870
982
|
if (needsEndUpdate) {
|
|
871
983
|
const props = interval.end.properties;
|
|
872
|
-
interval.end = (0, intervals_1.createPositionReferenceFromSegoff)(this.client, newEnd, interval.end.refType, op, (0, intervals_1.endReferenceSlidingPreference)(interval.stickiness))
|
|
984
|
+
interval.end = (0, intervals_1.createPositionReferenceFromSegoff)(this.client, newEnd, interval.end.refType, op, undefined, undefined, (0, intervals_1.endReferenceSlidingPreference)(interval.stickiness), (0, intervals_1.endReferenceSlidingPreference)(interval.stickiness) ===
|
|
985
|
+
merge_tree_1.SlidingPreference.FORWARD);
|
|
873
986
|
if (props) {
|
|
874
987
|
interval.end.addProperties(props);
|
|
875
988
|
}
|
|
@@ -899,7 +1012,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
899
1012
|
throw new telemetry_utils_1.LoggingError("attachSequence must be called");
|
|
900
1013
|
}
|
|
901
1014
|
this.localCollection.ensureSerializedId(serializedInterval);
|
|
902
|
-
const interval = this.localCollection.addInterval(serializedInterval.start, serializedInterval.end, serializedInterval.intervalType, serializedInterval.properties, op
|
|
1015
|
+
const interval = this.localCollection.addInterval(toSequencePlace(serializedInterval.start, serializedInterval.startSide ?? Side.Before), toSequencePlace(serializedInterval.end, serializedInterval.endSide ?? Side.Before), serializedInterval.intervalType, serializedInterval.properties, op);
|
|
903
1016
|
if (interval) {
|
|
904
1017
|
if (this.onDeserialize) {
|
|
905
1018
|
this.onDeserialize(interval);
|
|
@@ -1018,11 +1131,18 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1018
1131
|
}
|
|
1019
1132
|
}
|
|
1020
1133
|
exports.IntervalCollection = IntervalCollection;
|
|
1134
|
+
function setSlideOnRemove(lref) {
|
|
1135
|
+
let refType = lref.refType;
|
|
1136
|
+
refType = refType & ~merge_tree_1.ReferenceType.StayOnRemove;
|
|
1137
|
+
refType = refType | merge_tree_1.ReferenceType.SlideOnRemove;
|
|
1138
|
+
lref.refType = refType;
|
|
1139
|
+
}
|
|
1021
1140
|
/**
|
|
1022
1141
|
* Returns an object that can be used to find the interval a given LocalReferencePosition belongs to.
|
|
1023
1142
|
* @returns undefined if the reference position is not the endpoint of any interval (e.g. it was created
|
|
1024
1143
|
* on the merge tree directly by app code), otherwise an {@link IntervalLocator} for the interval this
|
|
1025
1144
|
* endpoint is a part of.
|
|
1145
|
+
* @public
|
|
1026
1146
|
*/
|
|
1027
1147
|
function intervalLocatorFromEndpoint(potentialEndpoint) {
|
|
1028
1148
|
const { interval, [merge_tree_1.reservedRangeLabelsKey]: collectionNameArray } = potentialEndpoint.properties ?? {};
|