@fluidframework/sequence 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.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 +23 -0
- package/README.md +1 -1
- package/api-report/sequence.api.md +32 -32
- package/beta.d.ts +11 -0
- package/dist/{localValues.d.ts → IntervalCollectionValues.d.ts} +13 -12
- package/dist/IntervalCollectionValues.d.ts.map +1 -0
- package/dist/{localValues.js → IntervalCollectionValues.js} +6 -6
- package/dist/IntervalCollectionValues.js.map +1 -0
- package/dist/beta.d.ts +12 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.d.ts +10 -10
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +103 -99
- package/dist/intervalCollection.js.map +1 -1
- package/dist/{defaultMap.d.ts → intervalCollectionMap.d.ts} +11 -44
- package/dist/intervalCollectionMap.d.ts.map +1 -0
- package/dist/{defaultMap.js → intervalCollectionMap.js} +15 -70
- package/dist/intervalCollectionMap.js.map +1 -0
- package/dist/{defaultMapInterfaces.d.ts → intervalCollectionMapInterfaces.d.ts} +17 -16
- package/dist/intervalCollectionMapInterfaces.d.ts.map +1 -0
- package/dist/{defaultMapInterfaces.js → intervalCollectionMapInterfaces.js} +1 -1
- package/dist/intervalCollectionMapInterfaces.js.map +1 -0
- package/dist/intervalIndex/endpointInRangeIndex.d.ts +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.js +3 -3
- package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointIndex.js +3 -3
- package/dist/intervalIndex/endpointIndex.js.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.js +3 -3
- package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +3 -3
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.js +2 -3
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +6 -6
- 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 +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.js +3 -3
- 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/intervalTree.js +2 -2
- package/dist/intervalTree.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 +10 -10
- package/dist/intervals/interval.js.map +1 -1
- package/dist/intervals/intervalUtils.d.ts +1 -1
- package/dist/intervals/intervalUtils.d.ts.map +1 -1
- package/dist/intervals/intervalUtils.js +5 -5
- package/dist/intervals/intervalUtils.js.map +1 -1
- package/dist/intervals/sequenceInterval.d.ts +1 -1
- package/dist/intervals/sequenceInterval.d.ts.map +1 -1
- package/dist/intervals/sequenceInterval.js +34 -34
- package/dist/intervals/sequenceInterval.js.map +1 -1
- package/dist/legacy.d.ts +61 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +12 -0
- package/dist/revertibles.d.ts +2 -2
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +34 -34
- package/dist/revertibles.js.map +1 -1
- package/dist/sequence.d.ts +7 -6
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +34 -34
- package/dist/sequence.js.map +1 -1
- package/dist/sequenceDeltaEvent.d.ts +1 -1
- package/dist/sequenceDeltaEvent.d.ts.map +1 -1
- package/dist/sequenceDeltaEvent.js +4 -4
- package/dist/sequenceDeltaEvent.js.map +1 -1
- package/dist/sequenceFactory.d.ts +1 -1
- package/dist/sequenceFactory.d.ts.map +1 -1
- package/dist/sequenceFactory.js +3 -3
- package/dist/sequenceFactory.js.map +1 -1
- package/dist/sharedIntervalCollection.d.ts +4 -3
- package/dist/sharedIntervalCollection.d.ts.map +1 -1
- package/dist/sharedIntervalCollection.js +5 -5
- package/dist/sharedIntervalCollection.js.map +1 -1
- package/dist/sharedSequence.d.ts +3 -2
- package/dist/sharedSequence.d.ts.map +1 -1
- package/dist/sharedSequence.js +4 -4
- package/dist/sharedSequence.js.map +1 -1
- package/dist/sharedString.d.ts +2 -2
- package/dist/sharedString.d.ts.map +1 -1
- package/dist/sharedString.js +9 -9
- package/dist/sharedString.js.map +1 -1
- package/internal.d.ts +11 -0
- package/legacy.d.ts +11 -0
- package/lib/{localValues.d.ts → IntervalCollectionValues.d.ts} +13 -12
- package/lib/IntervalCollectionValues.d.ts.map +1 -0
- package/lib/{localValues.js → IntervalCollectionValues.js} +3 -3
- package/lib/IntervalCollectionValues.js.map +1 -0
- package/lib/beta.d.ts +12 -0
- 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 +10 -10
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +8 -4
- package/lib/intervalCollection.js.map +1 -1
- package/lib/{defaultMap.d.ts → intervalCollectionMap.d.ts} +11 -44
- package/lib/intervalCollectionMap.d.ts.map +1 -0
- package/lib/{defaultMap.js → intervalCollectionMap.js} +8 -63
- package/lib/intervalCollectionMap.js.map +1 -0
- package/lib/{defaultMapInterfaces.d.ts → intervalCollectionMapInterfaces.d.ts} +17 -16
- package/lib/intervalCollectionMapInterfaces.d.ts.map +1 -0
- package/lib/{defaultMapInterfaces.js → intervalCollectionMapInterfaces.js} +1 -1
- package/lib/intervalCollectionMapInterfaces.js.map +1 -0
- package/lib/intervalIndex/endpointInRangeIndex.d.ts +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.js +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointIndex.js +1 -1
- package/lib/intervalIndex/endpointIndex.js.map +1 -1
- package/lib/intervalIndex/idIntervalIndex.d.ts.map +1 -1
- package/lib/intervalIndex/idIntervalIndex.js +1 -1
- package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +3 -3
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.js +2 -3
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +2 -2
- 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 +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.js +1 -1
- 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/intervalTree.js +1 -1
- package/lib/intervalTree.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 +3 -3
- package/lib/intervals/interval.js.map +1 -1
- package/lib/intervals/intervalUtils.d.ts +1 -1
- package/lib/intervals/intervalUtils.d.ts.map +1 -1
- package/lib/intervals/intervalUtils.js +1 -1
- package/lib/intervals/intervalUtils.js.map +1 -1
- package/lib/intervals/sequenceInterval.d.ts +1 -1
- package/lib/intervals/sequenceInterval.d.ts.map +1 -1
- package/lib/intervals/sequenceInterval.js +3 -3
- package/lib/intervals/sequenceInterval.js.map +1 -1
- package/lib/legacy.d.ts +61 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +12 -0
- package/lib/revertibles.d.ts +2 -2
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +3 -4
- package/lib/revertibles.js.map +1 -1
- package/lib/sequence.d.ts +7 -6
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +11 -12
- package/lib/sequence.js.map +1 -1
- package/lib/sequenceDeltaEvent.d.ts +1 -1
- package/lib/sequenceDeltaEvent.d.ts.map +1 -1
- package/lib/sequenceDeltaEvent.js +3 -4
- package/lib/sequenceDeltaEvent.js.map +1 -1
- package/lib/sequenceFactory.d.ts +1 -1
- package/lib/sequenceFactory.d.ts.map +1 -1
- package/lib/sequenceFactory.js +1 -1
- package/lib/sequenceFactory.js.map +1 -1
- package/lib/sharedIntervalCollection.d.ts +4 -3
- package/lib/sharedIntervalCollection.d.ts.map +1 -1
- package/lib/sharedIntervalCollection.js +4 -4
- package/lib/sharedIntervalCollection.js.map +1 -1
- package/lib/sharedSequence.d.ts +3 -2
- package/lib/sharedSequence.d.ts.map +1 -1
- package/lib/sharedSequence.js +2 -2
- package/lib/sharedSequence.js.map +1 -1
- package/lib/sharedString.d.ts +2 -2
- package/lib/sharedString.d.ts.map +1 -1
- package/lib/sharedString.js +1 -1
- package/lib/sharedString.js.map +1 -1
- package/package.json +41 -58
- package/src/{localValues.ts → IntervalCollectionValues.ts} +26 -18
- package/src/index.ts +2 -2
- package/src/intervalCollection.ts +46 -47
- package/src/{defaultMap.ts → intervalCollectionMap.ts} +42 -105
- package/src/{defaultMapInterfaces.ts → intervalCollectionMapInterfaces.ts} +26 -16
- package/src/intervalIndex/endpointInRangeIndex.ts +4 -1
- package/src/intervalIndex/endpointIndex.ts +4 -1
- package/src/intervalIndex/idIntervalIndex.ts +4 -2
- package/src/intervalIndex/overlappingIntervalsIndex.ts +8 -5
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +6 -3
- package/src/intervalIndex/sequenceIntervalIndexes.ts +3 -1
- package/src/intervalIndex/startpointInRangeIndex.ts +4 -1
- package/src/intervalTree.ts +4 -3
- package/src/intervals/interval.ts +6 -3
- package/src/intervals/intervalUtils.ts +4 -2
- package/src/intervals/sequenceInterval.ts +5 -3
- package/src/packageVersion.ts +1 -1
- package/src/revertibles.ts +10 -10
- package/src/sequence.ts +24 -31
- package/src/sequenceDeltaEvent.ts +3 -4
- package/src/sequenceFactory.ts +4 -3
- package/src/sharedIntervalCollection.ts +12 -18
- package/src/sharedSequence.ts +9 -6
- package/src/sharedString.ts +4 -3
- package/api-extractor-cjs.json +0 -8
- package/dist/defaultMap.d.ts.map +0 -1
- package/dist/defaultMap.js.map +0 -1
- package/dist/defaultMapInterfaces.d.ts.map +0 -1
- package/dist/defaultMapInterfaces.js.map +0 -1
- package/dist/localValues.d.ts.map +0 -1
- package/dist/localValues.js.map +0 -1
- package/dist/sequence-alpha.d.ts +0 -1432
- package/dist/sequence-beta.d.ts +0 -246
- package/dist/sequence-public.d.ts +0 -246
- package/dist/sequence-untrimmed.d.ts +0 -1820
- package/lib/defaultMap.d.ts.map +0 -1
- package/lib/defaultMap.js.map +0 -1
- package/lib/defaultMapInterfaces.d.ts.map +0 -1
- package/lib/defaultMapInterfaces.js.map +0 -1
- package/lib/localValues.d.ts.map +0 -1
- package/lib/localValues.js.map +0 -1
- package/lib/sequence-alpha.d.ts +0 -1432
- package/lib/sequence-beta.d.ts +0 -246
- package/lib/sequence-public.d.ts +0 -246
- package/lib/sequence-untrimmed.d.ts +0 -1820
- package/lib/test/collections.intervalTree.js +0 -73
- package/lib/test/collections.intervalTree.js.map +0 -1
- package/lib/test/createSnapshotFiles.js +0 -15
- package/lib/test/createSnapshotFiles.js.map +0 -1
- package/lib/test/dirname.cjs +0 -16
- package/lib/test/dirname.cjs.map +0 -1
- package/lib/test/endpointInRangeIndex.spec.js +0 -182
- package/lib/test/endpointInRangeIndex.spec.js.map +0 -1
- package/lib/test/fuzz/fuzzUtils.js +0 -250
- package/lib/test/fuzz/fuzzUtils.js.map +0 -1
- package/lib/test/fuzz/intervalCollection.fuzz.spec.js +0 -200
- package/lib/test/fuzz/intervalCollection.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js +0 -129
- package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/sharedString.fuzz.spec.js +0 -91
- package/lib/test/fuzz/sharedString.fuzz.spec.js.map +0 -1
- package/lib/test/generateSharedStrings.js +0 -138
- package/lib/test/generateSharedStrings.js.map +0 -1
- package/lib/test/intervalCollection.detached.spec.js +0 -126
- package/lib/test/intervalCollection.detached.spec.js.map +0 -1
- package/lib/test/intervalCollection.events.spec.js +0 -491
- package/lib/test/intervalCollection.events.spec.js.map +0 -1
- package/lib/test/intervalCollection.perf.spec.js +0 -88
- package/lib/test/intervalCollection.perf.spec.js.map +0 -1
- package/lib/test/intervalCollection.snapshot.spec.js +0 -171
- package/lib/test/intervalCollection.snapshot.spec.js.map +0 -1
- package/lib/test/intervalCollection.spec.js +0 -1660
- package/lib/test/intervalCollection.spec.js.map +0 -1
- package/lib/test/intervalIndexTestUtils.js +0 -49
- package/lib/test/intervalIndexTestUtils.js.map +0 -1
- package/lib/test/intervalRebasing.spec.js +0 -589
- package/lib/test/intervalRebasing.spec.js.map +0 -1
- package/lib/test/intervalStashedOps.spec.js +0 -142
- package/lib/test/intervalStashedOps.spec.js.map +0 -1
- package/lib/test/intervalTestUtils.js +0 -81
- package/lib/test/intervalTestUtils.js.map +0 -1
- package/lib/test/marshalling.spec.js +0 -55
- package/lib/test/marshalling.spec.js.map +0 -1
- package/lib/test/memory/sharedSequence.spec.js +0 -82
- package/lib/test/memory/sharedSequence.spec.js.map +0 -1
- package/lib/test/memory/sharedString.spec.js +0 -134
- package/lib/test/memory/sharedString.spec.js.map +0 -1
- package/lib/test/overlappingSequenceIntervalsIndex.spec.js +0 -348
- package/lib/test/overlappingSequenceIntervalsIndex.spec.js.map +0 -1
- package/lib/test/partialLoad.spec.js +0 -211
- package/lib/test/partialLoad.spec.js.map +0 -1
- package/lib/test/rebasing.spec.js +0 -81
- package/lib/test/rebasing.spec.js.map +0 -1
- package/lib/test/reentrancy.spec.js +0 -174
- package/lib/test/reentrancy.spec.js.map +0 -1
- package/lib/test/revertibles.spec.js +0 -971
- package/lib/test/revertibles.spec.js.map +0 -1
- package/lib/test/sequenceDeltaEvent.spec.js +0 -2144
- package/lib/test/sequenceDeltaEvent.spec.js.map +0 -1
- package/lib/test/sharedIntervalCollection.spec.js +0 -159
- package/lib/test/sharedIntervalCollection.spec.js.map +0 -1
- package/lib/test/sharedString.spec.js +0 -532
- package/lib/test/sharedString.spec.js.map +0 -1
- package/lib/test/snapshotEmptyProps.spec.js +0 -45
- package/lib/test/snapshotEmptyProps.spec.js.map +0 -1
- package/lib/test/snapshotVersion.spec.js +0 -149
- package/lib/test/snapshotVersion.spec.js.map +0 -1
- package/lib/test/startpointInRangeIndex.spec.js +0 -182
- package/lib/test/startpointInRangeIndex.spec.js.map +0 -1
- package/lib/test/subSequence.spec.js +0 -92
- package/lib/test/subSequence.spec.js.map +0 -1
- package/lib/test/types/validateSequencePrevious.generated.js +0 -162
- package/lib/test/types/validateSequencePrevious.generated.js.map +0 -1
- package/lib/test/v1IntervalCollectionHelpers.js +0 -93
- package/lib/test/v1IntervalCollectionHelpers.js.map +0 -1
- /package/{dist → lib}/tsdoc-metadata.json +0 -0
|
@@ -8,12 +8,12 @@ exports.intervalLocatorFromEndpoint = exports.IntervalCollection = exports.makeO
|
|
|
8
8
|
/* eslint-disable no-bitwise */
|
|
9
9
|
/* eslint-disable import/no-deprecated */
|
|
10
10
|
const client_utils_1 = require("@fluid-internal/client-utils");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
11
|
+
const internal_1 = require("@fluidframework/core-utils/internal");
|
|
12
|
+
const internal_2 = require("@fluidframework/merge-tree/internal");
|
|
13
|
+
const internal_3 = require("@fluidframework/telemetry-utils/internal");
|
|
14
14
|
const uuid_1 = require("uuid");
|
|
15
|
-
const index_js_1 = require("./
|
|
16
|
-
const index_js_2 = require("./
|
|
15
|
+
const index_js_1 = require("./intervalIndex/index.js");
|
|
16
|
+
const index_js_2 = require("./intervals/index.js");
|
|
17
17
|
/**
|
|
18
18
|
* Defines a side relative to a character in a sequence.
|
|
19
19
|
*
|
|
@@ -27,8 +27,8 @@ var Side;
|
|
|
27
27
|
})(Side || (exports.Side = Side = {}));
|
|
28
28
|
exports.reservedIntervalIdKey = "intervalId";
|
|
29
29
|
function sidesFromStickiness(stickiness) {
|
|
30
|
-
const startSide = (stickiness &
|
|
31
|
-
const endSide = (stickiness &
|
|
30
|
+
const startSide = (stickiness & index_js_2.IntervalStickiness.START) !== 0 ? Side.After : Side.Before;
|
|
31
|
+
const endSide = (stickiness & index_js_2.IntervalStickiness.END) !== 0 ? Side.Before : Side.After;
|
|
32
32
|
return { startSide, endSide };
|
|
33
33
|
}
|
|
34
34
|
exports.sidesFromStickiness = sidesFromStickiness;
|
|
@@ -37,14 +37,14 @@ exports.sidesFromStickiness = sidesFromStickiness;
|
|
|
37
37
|
* of this compression is unspecified and subject to change
|
|
38
38
|
*/
|
|
39
39
|
function decompressInterval(interval, label) {
|
|
40
|
-
const stickiness = interval[5] ??
|
|
40
|
+
const stickiness = interval[5] ?? index_js_2.IntervalStickiness.END;
|
|
41
41
|
const { startSide, endSide } = sidesFromStickiness(stickiness);
|
|
42
42
|
return {
|
|
43
43
|
start: interval[0],
|
|
44
44
|
end: interval[1],
|
|
45
45
|
sequenceNumber: interval[2],
|
|
46
46
|
intervalType: interval[3],
|
|
47
|
-
properties: { ...interval[4], [
|
|
47
|
+
properties: { ...interval[4], [internal_2.reservedRangeLabelsKey]: [label] },
|
|
48
48
|
stickiness,
|
|
49
49
|
startSide,
|
|
50
50
|
endSide,
|
|
@@ -63,9 +63,9 @@ function compressInterval(interval) {
|
|
|
63
63
|
intervalType,
|
|
64
64
|
// remove the `referenceRangeLabels` property as it is already stored
|
|
65
65
|
// in the `label` field of the summary
|
|
66
|
-
{ ...properties, [
|
|
66
|
+
{ ...properties, [internal_2.reservedRangeLabelsKey]: undefined },
|
|
67
67
|
];
|
|
68
|
-
if (interval.stickiness !== undefined && interval.stickiness !==
|
|
68
|
+
if (interval.stickiness !== undefined && interval.stickiness !== index_js_2.IntervalStickiness.END) {
|
|
69
69
|
// reassignment to make it easier for typescript to reason about types
|
|
70
70
|
base = [...base, interval.stickiness];
|
|
71
71
|
}
|
|
@@ -95,19 +95,19 @@ function toOptionalSequencePlace(pos, side) {
|
|
|
95
95
|
}
|
|
96
96
|
exports.toOptionalSequencePlace = toOptionalSequencePlace;
|
|
97
97
|
function computeStickinessFromSide(startPos = -1, startSide = Side.Before, endPos = -1, endSide = Side.Before) {
|
|
98
|
-
let stickiness =
|
|
98
|
+
let stickiness = index_js_2.IntervalStickiness.NONE;
|
|
99
99
|
if (startSide === Side.After || startPos === "start") {
|
|
100
|
-
stickiness |=
|
|
100
|
+
stickiness |= index_js_2.IntervalStickiness.START;
|
|
101
101
|
}
|
|
102
102
|
if (endSide === Side.Before || endPos === "end") {
|
|
103
|
-
stickiness |=
|
|
103
|
+
stickiness |= index_js_2.IntervalStickiness.END;
|
|
104
104
|
}
|
|
105
105
|
return stickiness;
|
|
106
106
|
}
|
|
107
107
|
exports.computeStickinessFromSide = computeStickinessFromSide;
|
|
108
108
|
function createIntervalIndex() {
|
|
109
109
|
const helpers = {
|
|
110
|
-
create:
|
|
110
|
+
create: index_js_2.createInterval,
|
|
111
111
|
};
|
|
112
112
|
const lc = new LocalIntervalCollection(undefined, "", helpers, {});
|
|
113
113
|
return lc;
|
|
@@ -122,9 +122,9 @@ class LocalIntervalCollection {
|
|
|
122
122
|
this.helpers = helpers;
|
|
123
123
|
this.options = options;
|
|
124
124
|
this.onPositionChange = onPositionChange;
|
|
125
|
-
this.overlappingIntervalsIndex = new
|
|
126
|
-
this.idIntervalIndex = (0,
|
|
127
|
-
this.endIntervalIndex = new
|
|
125
|
+
this.overlappingIntervalsIndex = new index_js_1.OverlappingIntervalsIndex(client, helpers);
|
|
126
|
+
this.idIntervalIndex = (0, index_js_1.createIdIntervalIndex)();
|
|
127
|
+
this.endIntervalIndex = new index_js_1.EndpointIndex(client, helpers);
|
|
128
128
|
this.indexes = new Set([
|
|
129
129
|
this.overlappingIntervalsIndex,
|
|
130
130
|
this.idIntervalIndex,
|
|
@@ -153,7 +153,7 @@ class LocalIntervalCollection {
|
|
|
153
153
|
const newProps = {
|
|
154
154
|
[exports.reservedIntervalIdKey]: id,
|
|
155
155
|
};
|
|
156
|
-
serializedInterval.properties = (0,
|
|
156
|
+
serializedInterval.properties = (0, internal_2.addProperties)(serializedInterval.properties, newProps);
|
|
157
157
|
}
|
|
158
158
|
// Make the ID immutable for safety's sake.
|
|
159
159
|
Object.defineProperty(serializedInterval.properties, exports.reservedIntervalIdKey, {
|
|
@@ -186,15 +186,15 @@ class LocalIntervalCollection {
|
|
|
186
186
|
const interval = this.createInterval(start, end, intervalType, op);
|
|
187
187
|
if (interval) {
|
|
188
188
|
if (!interval.properties) {
|
|
189
|
-
interval.properties = (0,
|
|
189
|
+
interval.properties = (0, internal_2.createMap)();
|
|
190
190
|
}
|
|
191
191
|
if (props) {
|
|
192
192
|
// This check is intended to prevent scenarios where a random interval is created and then
|
|
193
193
|
// inserted into a collection. The aim is to ensure that the collection is created first
|
|
194
194
|
// then the user can create/add intervals based on the collection
|
|
195
|
-
if (props[
|
|
196
|
-
props[
|
|
197
|
-
throw new
|
|
195
|
+
if (props[internal_2.reservedRangeLabelsKey] !== undefined &&
|
|
196
|
+
props[internal_2.reservedRangeLabelsKey][0] !== this.label) {
|
|
197
|
+
throw new internal_3.LoggingError("Adding an interval that belongs to another interval collection is not permitted");
|
|
198
198
|
}
|
|
199
199
|
interval.addProperties(props);
|
|
200
200
|
}
|
|
@@ -204,7 +204,7 @@ class LocalIntervalCollection {
|
|
|
204
204
|
return interval;
|
|
205
205
|
}
|
|
206
206
|
linkEndpointsToInterval(interval) {
|
|
207
|
-
if (interval instanceof
|
|
207
|
+
if (interval instanceof index_js_2.SequenceInterval) {
|
|
208
208
|
interval.start.addProperties({ interval });
|
|
209
209
|
interval.end.addProperties({ interval });
|
|
210
210
|
}
|
|
@@ -243,9 +243,9 @@ class LocalIntervalCollection {
|
|
|
243
243
|
// either, so this must be special-cased.
|
|
244
244
|
return ref;
|
|
245
245
|
}
|
|
246
|
-
return this.client.createLocalReferencePosition(segment, ref.getOffset(),
|
|
246
|
+
return this.client.createLocalReferencePosition(segment, ref.getOffset(), internal_2.ReferenceType.Transient, ref.properties, ref.slidingPreference, ref.canSlideToEndpoint);
|
|
247
247
|
};
|
|
248
|
-
if (interval instanceof
|
|
248
|
+
if (interval instanceof index_js_2.SequenceInterval) {
|
|
249
249
|
let previousInterval;
|
|
250
250
|
let pendingChanges = 0;
|
|
251
251
|
interval.addPositionChangeListeners(() => {
|
|
@@ -258,7 +258,7 @@ class LocalIntervalCollection {
|
|
|
258
258
|
this.removeIntervalFromIndexes(interval);
|
|
259
259
|
}
|
|
260
260
|
}, () => {
|
|
261
|
-
(0,
|
|
261
|
+
(0, internal_1.assert)(previousInterval !== undefined, 0x3fa /* Invalid interleaving of before/after slide */);
|
|
262
262
|
pendingChanges--;
|
|
263
263
|
if (pendingChanges === 0) {
|
|
264
264
|
this.addIntervalToIndexes(interval);
|
|
@@ -269,7 +269,7 @@ class LocalIntervalCollection {
|
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
271
|
removeIntervalListeners(interval) {
|
|
272
|
-
if (interval instanceof
|
|
272
|
+
if (interval instanceof index_js_2.SequenceInterval) {
|
|
273
273
|
interval.removePositionChangeListeners();
|
|
274
274
|
}
|
|
275
275
|
}
|
|
@@ -278,7 +278,7 @@ exports.LocalIntervalCollection = LocalIntervalCollection;
|
|
|
278
278
|
LocalIntervalCollection.legacyIdPrefix = "legacy";
|
|
279
279
|
class SequenceIntervalCollectionFactory {
|
|
280
280
|
load(emitter, raw = [], options) {
|
|
281
|
-
return new IntervalCollection(
|
|
281
|
+
return new IntervalCollection(index_js_2.sequenceIntervalHelpers, true, emitter, raw, options);
|
|
282
282
|
}
|
|
283
283
|
store(value) {
|
|
284
284
|
return value.serializeInternal();
|
|
@@ -302,7 +302,7 @@ SequenceIntervalCollectionValueType._ops = makeOpsMap();
|
|
|
302
302
|
class IntervalCollectionFactory {
|
|
303
303
|
load(emitter, raw = [], options) {
|
|
304
304
|
const helpers = {
|
|
305
|
-
create:
|
|
305
|
+
create: index_js_2.createInterval,
|
|
306
306
|
};
|
|
307
307
|
const collection = new IntervalCollection(helpers, false, emitter, raw, options);
|
|
308
308
|
collection.attachGraph(undefined, "");
|
|
@@ -339,7 +339,7 @@ function makeOpsMap() {
|
|
|
339
339
|
};
|
|
340
340
|
return new Map([
|
|
341
341
|
[
|
|
342
|
-
|
|
342
|
+
index_js_2.IntervalOpType.ADD,
|
|
343
343
|
{
|
|
344
344
|
process: (collection, params, local, op, localOpMetadata) => {
|
|
345
345
|
// if params is undefined, the interval was deleted during
|
|
@@ -347,17 +347,17 @@ function makeOpsMap() {
|
|
|
347
347
|
if (!params) {
|
|
348
348
|
return;
|
|
349
349
|
}
|
|
350
|
-
(0,
|
|
350
|
+
(0, internal_1.assert)(op !== undefined, 0x3fb /* op should exist here */);
|
|
351
351
|
collection.ackAdd(params, local, op, localOpMetadata);
|
|
352
352
|
},
|
|
353
353
|
rebase,
|
|
354
354
|
},
|
|
355
355
|
],
|
|
356
356
|
[
|
|
357
|
-
|
|
357
|
+
index_js_2.IntervalOpType.DELETE,
|
|
358
358
|
{
|
|
359
359
|
process: (collection, params, local, op) => {
|
|
360
|
-
(0,
|
|
360
|
+
(0, internal_1.assert)(op !== undefined, 0x3fc /* op should exist here */);
|
|
361
361
|
collection.ackDelete(params, local, op);
|
|
362
362
|
},
|
|
363
363
|
rebase: (collection, op, localOpMetadata) => {
|
|
@@ -367,7 +367,7 @@ function makeOpsMap() {
|
|
|
367
367
|
},
|
|
368
368
|
],
|
|
369
369
|
[
|
|
370
|
-
|
|
370
|
+
index_js_2.IntervalOpType.CHANGE,
|
|
371
371
|
{
|
|
372
372
|
process: (collection, params, local, op, localOpMetadata) => {
|
|
373
373
|
// if params is undefined, the interval was deleted during
|
|
@@ -375,7 +375,7 @@ function makeOpsMap() {
|
|
|
375
375
|
if (!params) {
|
|
376
376
|
return;
|
|
377
377
|
}
|
|
378
|
-
(0,
|
|
378
|
+
(0, internal_1.assert)(op !== undefined, 0x3fd /* op should exist here */);
|
|
379
379
|
collection.ackChange(params, local, op, localOpMetadata);
|
|
380
380
|
},
|
|
381
381
|
rebase,
|
|
@@ -429,7 +429,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
429
429
|
*/
|
|
430
430
|
attachIndex(index) {
|
|
431
431
|
if (!this.attached) {
|
|
432
|
-
throw new
|
|
432
|
+
throw new internal_3.LoggingError("The local interval collection must exist");
|
|
433
433
|
}
|
|
434
434
|
for (const interval of this) {
|
|
435
435
|
index.add(interval);
|
|
@@ -441,7 +441,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
441
441
|
*/
|
|
442
442
|
detachIndex(index) {
|
|
443
443
|
if (!this.attached) {
|
|
444
|
-
throw new
|
|
444
|
+
throw new internal_3.LoggingError("The local interval collection must exist");
|
|
445
445
|
}
|
|
446
446
|
// Avoid removing intervals if the index does not exist
|
|
447
447
|
if (!this.localCollection?.removeIndex(index)) {
|
|
@@ -454,7 +454,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
454
454
|
}
|
|
455
455
|
rebasePositionWithSegmentSlide(pos, seqNumberFrom, localSeq) {
|
|
456
456
|
if (!this.client) {
|
|
457
|
-
throw new
|
|
457
|
+
throw new internal_3.LoggingError("mergeTree client must exist");
|
|
458
458
|
}
|
|
459
459
|
if (pos === "start" || pos === "end") {
|
|
460
460
|
return pos;
|
|
@@ -465,19 +465,19 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
465
465
|
clientId: this.client.getLongClientId(clientId),
|
|
466
466
|
}, localSeq);
|
|
467
467
|
// if segment is undefined, it slid off the string
|
|
468
|
-
(0,
|
|
469
|
-
const segoff = (0,
|
|
468
|
+
(0, internal_1.assert)(segment !== undefined, 0x54e /* No segment found */);
|
|
469
|
+
const segoff = (0, internal_2.getSlideToSegoff)({ segment, offset }, undefined, this.options.mergeTreeReferencesCanSlideToEndpoint) ?? segment;
|
|
470
470
|
// case happens when rebasing op, but concurrently entire string has been deleted
|
|
471
471
|
if (segoff.segment === undefined || segoff.offset === undefined) {
|
|
472
|
-
return
|
|
472
|
+
return internal_2.DetachedReferencePosition;
|
|
473
473
|
}
|
|
474
|
-
(0,
|
|
474
|
+
(0, internal_1.assert)(offset !== undefined && 0 <= offset && offset < segment.cachedLength, 0x54f /* Invalid offset */);
|
|
475
475
|
return this.client.findReconnectionPosition(segoff.segment, localSeq) + segoff.offset;
|
|
476
476
|
}
|
|
477
477
|
computeRebasedPositions(localSeq) {
|
|
478
|
-
(0,
|
|
478
|
+
(0, internal_1.assert)(this.client !== undefined, 0x550 /* Client should be defined when computing rebased position */);
|
|
479
479
|
const original = this.localSeqToSerializedInterval.get(localSeq);
|
|
480
|
-
(0,
|
|
480
|
+
(0, internal_1.assert)(original !== undefined, 0x551 /* Failed to store pending serialized interval info for this localSeq. */);
|
|
481
481
|
const rebased = { ...original };
|
|
482
482
|
const { start, end, sequenceNumber } = original;
|
|
483
483
|
if (start !== undefined) {
|
|
@@ -490,10 +490,10 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
490
490
|
}
|
|
491
491
|
attachGraph(client, label) {
|
|
492
492
|
if (this.attached) {
|
|
493
|
-
throw new
|
|
493
|
+
throw new internal_3.LoggingError("Only supports one Sequence attach");
|
|
494
494
|
}
|
|
495
495
|
if (client === undefined && this.requiresClient) {
|
|
496
|
-
throw new
|
|
496
|
+
throw new internal_3.LoggingError("Client required for this collection");
|
|
497
497
|
}
|
|
498
498
|
// Instantiate the local interval collection based on the saved intervals
|
|
499
499
|
this.client = client;
|
|
@@ -539,11 +539,11 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
539
539
|
// is restored as single-endpoint changes re-use previous references.
|
|
540
540
|
let startRefType;
|
|
541
541
|
let endRefType;
|
|
542
|
-
if (previousInterval instanceof
|
|
542
|
+
if (previousInterval instanceof index_js_2.SequenceInterval) {
|
|
543
543
|
startRefType = previousInterval.start.refType;
|
|
544
544
|
endRefType = previousInterval.end.refType;
|
|
545
|
-
previousInterval.start.refType =
|
|
546
|
-
previousInterval.end.refType =
|
|
545
|
+
previousInterval.start.refType = internal_2.ReferenceType.Transient;
|
|
546
|
+
previousInterval.end.refType = internal_2.ReferenceType.Transient;
|
|
547
547
|
this.emit("changeInterval", interval, previousInterval, local, op, slide);
|
|
548
548
|
this.emit("changed", interval, undefined, previousInterval ?? undefined, local, slide);
|
|
549
549
|
previousInterval.start.refType = startRefType;
|
|
@@ -559,14 +559,14 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
559
559
|
*/
|
|
560
560
|
getIntervalById(id) {
|
|
561
561
|
if (!this.localCollection) {
|
|
562
|
-
throw new
|
|
562
|
+
throw new internal_3.LoggingError("attach must be called before accessing intervals");
|
|
563
563
|
}
|
|
564
564
|
return this.localCollection.idIntervalIndex.getIntervalById(id);
|
|
565
565
|
}
|
|
566
566
|
assertStickinessEnabled(start, end) {
|
|
567
567
|
if (!(typeof start === "number" && typeof end === "number") &&
|
|
568
568
|
!this.options.intervalStickinessEnabled) {
|
|
569
|
-
throw new
|
|
569
|
+
throw new internal_3.UsageError("attempted to set interval stickiness without enabling `intervalStickinessEnabled` feature flag");
|
|
570
570
|
}
|
|
571
571
|
}
|
|
572
572
|
/**
|
|
@@ -574,25 +574,25 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
574
574
|
*/
|
|
575
575
|
add({ start, end, props, }) {
|
|
576
576
|
if (!this.localCollection) {
|
|
577
|
-
throw new
|
|
577
|
+
throw new internal_3.LoggingError("attach must be called prior to adding intervals");
|
|
578
578
|
}
|
|
579
579
|
const { startSide, endSide, startPos, endPos } = endpointPosAndSide(start, end);
|
|
580
|
-
(0,
|
|
580
|
+
(0, internal_1.assert)(startPos !== undefined &&
|
|
581
581
|
endPos !== undefined &&
|
|
582
582
|
startSide !== undefined &&
|
|
583
583
|
endSide !== undefined, 0x793 /* start and end cannot be undefined because they were not passed in as undefined */);
|
|
584
584
|
const stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);
|
|
585
585
|
this.assertStickinessEnabled(start, end);
|
|
586
|
-
const interval = this.localCollection.addInterval(toSequencePlace(startPos, startSide), toSequencePlace(endPos, endSide),
|
|
586
|
+
const interval = this.localCollection.addInterval(toSequencePlace(startPos, startSide), toSequencePlace(endPos, endSide), index_js_2.IntervalType.SlideOnRemove, props);
|
|
587
587
|
if (interval) {
|
|
588
|
-
if (!this.isCollaborating && interval instanceof
|
|
588
|
+
if (!this.isCollaborating && interval instanceof index_js_2.SequenceInterval) {
|
|
589
589
|
setSlideOnRemove(interval.start);
|
|
590
590
|
setSlideOnRemove(interval.end);
|
|
591
591
|
}
|
|
592
592
|
const serializedInterval = {
|
|
593
593
|
start: startPos,
|
|
594
594
|
end: endPos,
|
|
595
|
-
intervalType:
|
|
595
|
+
intervalType: index_js_2.IntervalType.SlideOnRemove,
|
|
596
596
|
properties: interval.properties,
|
|
597
597
|
sequenceNumber: this.client?.getCurrentSeq() ?? 0,
|
|
598
598
|
stickiness,
|
|
@@ -611,7 +611,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
611
611
|
}
|
|
612
612
|
deleteExistingInterval(interval, local, op) {
|
|
613
613
|
if (!this.localCollection) {
|
|
614
|
-
throw new
|
|
614
|
+
throw new internal_3.LoggingError("Attach must be called before accessing intervals");
|
|
615
615
|
}
|
|
616
616
|
// The given interval is known to exist in the collection.
|
|
617
617
|
this.localCollection.removeExistingInterval(interval);
|
|
@@ -635,7 +635,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
635
635
|
*/
|
|
636
636
|
removeIntervalById(id) {
|
|
637
637
|
if (!this.localCollection) {
|
|
638
|
-
throw new
|
|
638
|
+
throw new internal_3.LoggingError("Attach must be called before accessing intervals");
|
|
639
639
|
}
|
|
640
640
|
const interval = this.localCollection.idIntervalIndex.getIntervalById(id);
|
|
641
641
|
if (interval) {
|
|
@@ -648,31 +648,31 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
648
648
|
*/
|
|
649
649
|
change(id, { start, end, props }) {
|
|
650
650
|
if (!this.localCollection) {
|
|
651
|
-
throw new
|
|
651
|
+
throw new internal_3.LoggingError("Attach must be called before accessing intervals");
|
|
652
652
|
}
|
|
653
653
|
// Force id to be a string.
|
|
654
654
|
if (typeof id !== "string") {
|
|
655
|
-
throw new
|
|
655
|
+
throw new internal_3.UsageError("Change API requires an ID that is a string");
|
|
656
656
|
}
|
|
657
657
|
// Ensure that both start and end are defined or both are undefined.
|
|
658
658
|
if ((start === undefined) !== (end === undefined)) {
|
|
659
|
-
throw new
|
|
659
|
+
throw new internal_3.UsageError("Change API requires both start and end to be defined or undefined");
|
|
660
660
|
}
|
|
661
661
|
// prevent the overwriting of an interval label, it should remain unchanged
|
|
662
662
|
// once it has been inserted into the collection.
|
|
663
|
-
if (props?.[
|
|
664
|
-
throw new
|
|
663
|
+
if (props?.[internal_2.reservedRangeLabelsKey] !== undefined) {
|
|
664
|
+
throw new internal_3.UsageError("The label property should not be modified once inserted to the collection");
|
|
665
665
|
}
|
|
666
666
|
const interval = this.getIntervalById(id);
|
|
667
667
|
if (interval) {
|
|
668
668
|
let deltaProps;
|
|
669
669
|
let newInterval;
|
|
670
670
|
if (props !== undefined) {
|
|
671
|
-
deltaProps = interval.addProperties(props, true, this.isCollaborating ?
|
|
671
|
+
deltaProps = interval.addProperties(props, true, this.isCollaborating ? internal_2.UnassignedSequenceNumber : internal_2.UniversalSequenceNumber);
|
|
672
672
|
}
|
|
673
673
|
if (start !== undefined && end !== undefined) {
|
|
674
674
|
newInterval = this.localCollection.changeInterval(interval, start, end);
|
|
675
|
-
if (!this.isCollaborating && newInterval instanceof
|
|
675
|
+
if (!this.isCollaborating && newInterval instanceof index_js_2.SequenceInterval) {
|
|
676
676
|
setSlideOnRemove(newInterval.start);
|
|
677
677
|
setSlideOnRemove(newInterval.end);
|
|
678
678
|
}
|
|
@@ -702,6 +702,10 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
702
702
|
if (newInterval) {
|
|
703
703
|
this.addPendingChange(id, serializedInterval);
|
|
704
704
|
this.emitChange(newInterval, interval, true, false);
|
|
705
|
+
if (interval instanceof index_js_2.SequenceInterval) {
|
|
706
|
+
this.client?.removeLocalReferencePosition(interval.start);
|
|
707
|
+
this.client?.removeLocalReferencePosition(interval.end);
|
|
708
|
+
}
|
|
705
709
|
}
|
|
706
710
|
return newInterval;
|
|
707
711
|
}
|
|
@@ -749,7 +753,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
749
753
|
}
|
|
750
754
|
if (pendingChange?.start !== serializedInterval.start ||
|
|
751
755
|
pendingChange?.end !== serializedInterval.end) {
|
|
752
|
-
throw new
|
|
756
|
+
throw new internal_3.LoggingError("Mismatch in pending changes");
|
|
753
757
|
}
|
|
754
758
|
}
|
|
755
759
|
}
|
|
@@ -763,10 +767,10 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
763
767
|
}
|
|
764
768
|
ackChange(serializedInterval, local, op, localOpMetadata) {
|
|
765
769
|
if (!this.localCollection) {
|
|
766
|
-
throw new
|
|
770
|
+
throw new internal_3.LoggingError("Attach must be called before accessing intervals");
|
|
767
771
|
}
|
|
768
772
|
if (local) {
|
|
769
|
-
(0,
|
|
773
|
+
(0, internal_1.assert)(localOpMetadata !== undefined, 0x552 /* op metadata should be defined for local op */);
|
|
770
774
|
this.localSeqToSerializedInterval.delete(localOpMetadata?.localSeq);
|
|
771
775
|
// This is an ack from the server. Remove the pending change.
|
|
772
776
|
this.removePendingChange(serializedInterval);
|
|
@@ -775,7 +779,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
775
779
|
// This API cannot change the ID, and writing to the ID property will result in an exception. So we
|
|
776
780
|
// strip it out of the properties here.
|
|
777
781
|
const { [exports.reservedIntervalIdKey]: id, ...newProps } = serializedInterval.properties ?? {};
|
|
778
|
-
(0,
|
|
782
|
+
(0, internal_1.assert)(id !== undefined, 0x3fe /* id must exist on the interval */);
|
|
779
783
|
const interval = this.getIntervalById(id);
|
|
780
784
|
if (!interval) {
|
|
781
785
|
// The interval has been removed locally; no-op.
|
|
@@ -784,7 +788,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
784
788
|
if (local) {
|
|
785
789
|
// Let the propertyManager prune its pending change-properties set.
|
|
786
790
|
interval.propertyManager?.ackPendingProperties({
|
|
787
|
-
type:
|
|
791
|
+
type: internal_2.MergeTreeDeltaType.ANNOTATE,
|
|
788
792
|
props: serializedInterval.properties ?? {},
|
|
789
793
|
});
|
|
790
794
|
this.ackInterval(interval, op);
|
|
@@ -849,7 +853,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
849
853
|
return serializedInterval;
|
|
850
854
|
}
|
|
851
855
|
if (!this.attached) {
|
|
852
|
-
throw new
|
|
856
|
+
throw new internal_3.LoggingError("attachSequence must be called");
|
|
853
857
|
}
|
|
854
858
|
const { intervalType, properties, stickiness, startSide, endSide } = serializedInterval;
|
|
855
859
|
const { start: startRebased, end: endRebased } = this.localSeqToRebasedInterval.get(localSeq) ?? this.computeRebasedPositions(localSeq);
|
|
@@ -872,8 +876,8 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
872
876
|
this.addPendingChange(intervalId, rebased);
|
|
873
877
|
}
|
|
874
878
|
// if the interval slid off the string, rebase the op to be a noop and delete the interval.
|
|
875
|
-
if (startRebased ===
|
|
876
|
-
endRebased ===
|
|
879
|
+
if (startRebased === internal_2.DetachedReferencePosition ||
|
|
880
|
+
endRebased === internal_2.DetachedReferencePosition) {
|
|
877
881
|
if (localInterval) {
|
|
878
882
|
this.localCollection?.removeExistingInterval(localInterval);
|
|
879
883
|
}
|
|
@@ -881,7 +885,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
881
885
|
}
|
|
882
886
|
if (localInterval !== undefined) {
|
|
883
887
|
// we know we must be using `SequenceInterval` because `this.client` exists
|
|
884
|
-
(0,
|
|
888
|
+
(0, internal_1.assert)(localInterval instanceof index_js_2.SequenceInterval, 0x3a0 /* localInterval must be `SequenceInterval` when used with client */);
|
|
885
889
|
// The rebased op may place this interval's endpoints on different segments. Calling `changeInterval` here
|
|
886
890
|
// updates the local client's state to be consistent with the emitted op.
|
|
887
891
|
this.localCollection?.changeInterval(localInterval, toOptionalSequencePlace(startRebased, startSide ?? Side.Before), toOptionalSequencePlace(endRebased, endSide ?? Side.Before), undefined, localSeq);
|
|
@@ -890,13 +894,13 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
890
894
|
}
|
|
891
895
|
getSlideToSegment(lref) {
|
|
892
896
|
if (!this.client) {
|
|
893
|
-
throw new
|
|
897
|
+
throw new internal_3.LoggingError("client does not exist");
|
|
894
898
|
}
|
|
895
899
|
const segoff = { segment: lref.getSegment(), offset: lref.getOffset() };
|
|
896
900
|
if (segoff.segment?.localRefs?.has(lref) !== true) {
|
|
897
901
|
return undefined;
|
|
898
902
|
}
|
|
899
|
-
const newSegoff = (0,
|
|
903
|
+
const newSegoff = (0, internal_2.getSlideToSegoff)(segoff, undefined, this.options.mergeTreeReferencesCanSlideToEndpoint);
|
|
900
904
|
const value = segoff.segment === newSegoff.segment && segoff.offset === newSegoff.offset
|
|
901
905
|
? undefined
|
|
902
906
|
: newSegoff;
|
|
@@ -904,11 +908,11 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
904
908
|
}
|
|
905
909
|
ackInterval(interval, op) {
|
|
906
910
|
// Only SequenceIntervals need potential sliding
|
|
907
|
-
if (!(interval instanceof
|
|
911
|
+
if (!(interval instanceof index_js_2.SequenceInterval)) {
|
|
908
912
|
return;
|
|
909
913
|
}
|
|
910
|
-
if (!(0,
|
|
911
|
-
!(0,
|
|
914
|
+
if (!(0, internal_2.refTypeIncludesFlag)(interval.start, internal_2.ReferenceType.StayOnRemove) &&
|
|
915
|
+
!(0, internal_2.refTypeIncludesFlag)(interval.end, internal_2.ReferenceType.StayOnRemove)) {
|
|
912
916
|
return;
|
|
913
917
|
}
|
|
914
918
|
const newStart = this.getSlideToSegment(interval.start);
|
|
@@ -926,7 +930,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
926
930
|
const needsEndUpdate = newEnd !== undefined && !hasPendingEndChange;
|
|
927
931
|
if (needsStartUpdate || needsEndUpdate) {
|
|
928
932
|
if (!this.localCollection) {
|
|
929
|
-
throw new
|
|
933
|
+
throw new internal_3.LoggingError("Attach must be called before accessing intervals");
|
|
930
934
|
}
|
|
931
935
|
// `interval`'s endpoints will get modified in-place, so clone it prior to doing so for event emission.
|
|
932
936
|
const oldInterval = interval.clone();
|
|
@@ -935,32 +939,32 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
935
939
|
// This ensures that the correct listeners are added to the LocalReferencePosition.
|
|
936
940
|
this.localCollection.removeExistingInterval(interval);
|
|
937
941
|
if (!this.client) {
|
|
938
|
-
throw new
|
|
942
|
+
throw new internal_3.LoggingError("client does not exist");
|
|
939
943
|
}
|
|
940
944
|
if (needsStartUpdate) {
|
|
941
945
|
const props = interval.start.properties;
|
|
942
|
-
interval.start = (0,
|
|
943
|
-
|
|
946
|
+
interval.start = (0, index_js_2.createPositionReferenceFromSegoff)(this.client, newStart, interval.start.refType, op, undefined, undefined, (0, index_js_2.startReferenceSlidingPreference)(interval.stickiness), (0, index_js_2.startReferenceSlidingPreference)(interval.stickiness) ===
|
|
947
|
+
internal_2.SlidingPreference.BACKWARD);
|
|
944
948
|
if (props) {
|
|
945
949
|
interval.start.addProperties(props);
|
|
946
950
|
}
|
|
947
951
|
const oldSeg = oldInterval.start.getSegment();
|
|
948
952
|
// remove and rebuild start interval as transient for event
|
|
949
953
|
this.client.removeLocalReferencePosition(oldInterval.start);
|
|
950
|
-
oldInterval.start.refType =
|
|
954
|
+
oldInterval.start.refType = internal_2.ReferenceType.Transient;
|
|
951
955
|
oldSeg?.localRefs?.addLocalRef(oldInterval.start, oldInterval.start.getOffset());
|
|
952
956
|
}
|
|
953
957
|
if (needsEndUpdate) {
|
|
954
958
|
const props = interval.end.properties;
|
|
955
|
-
interval.end = (0,
|
|
956
|
-
|
|
959
|
+
interval.end = (0, index_js_2.createPositionReferenceFromSegoff)(this.client, newEnd, interval.end.refType, op, undefined, undefined, (0, index_js_2.endReferenceSlidingPreference)(interval.stickiness), (0, index_js_2.endReferenceSlidingPreference)(interval.stickiness) ===
|
|
960
|
+
internal_2.SlidingPreference.FORWARD);
|
|
957
961
|
if (props) {
|
|
958
962
|
interval.end.addProperties(props);
|
|
959
963
|
}
|
|
960
964
|
// remove and rebuild end interval as transient for event
|
|
961
965
|
const oldSeg = oldInterval.end.getSegment();
|
|
962
966
|
this.client.removeLocalReferencePosition(oldInterval.end);
|
|
963
|
-
oldInterval.end.refType =
|
|
967
|
+
oldInterval.end.refType = internal_2.ReferenceType.Transient;
|
|
964
968
|
oldSeg?.localRefs?.addLocalRef(oldInterval.end, oldInterval.end.getOffset());
|
|
965
969
|
}
|
|
966
970
|
this.localCollection.add(interval);
|
|
@@ -969,7 +973,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
969
973
|
}
|
|
970
974
|
ackAdd(serializedInterval, local, op, localOpMetadata) {
|
|
971
975
|
if (local) {
|
|
972
|
-
(0,
|
|
976
|
+
(0, internal_1.assert)(localOpMetadata !== undefined, 0x553 /* op metadata should be defined for local op */);
|
|
973
977
|
this.localSeqToSerializedInterval.delete(localOpMetadata.localSeq);
|
|
974
978
|
const id = serializedInterval.properties?.[exports.reservedIntervalIdKey];
|
|
975
979
|
const localInterval = this.getIntervalById(id);
|
|
@@ -979,7 +983,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
979
983
|
return;
|
|
980
984
|
}
|
|
981
985
|
if (!this.localCollection) {
|
|
982
|
-
throw new
|
|
986
|
+
throw new internal_3.LoggingError("attachSequence must be called");
|
|
983
987
|
}
|
|
984
988
|
this.localCollection.ensureSerializedId(serializedInterval);
|
|
985
989
|
const interval = this.localCollection.addInterval(toSequencePlace(serializedInterval.start, serializedInterval.startSide ?? Side.Before), toSequencePlace(serializedInterval.end, serializedInterval.endSide ?? Side.Before), serializedInterval.intervalType, serializedInterval.properties, op);
|
|
@@ -999,7 +1003,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
999
1003
|
return;
|
|
1000
1004
|
}
|
|
1001
1005
|
if (!this.localCollection) {
|
|
1002
|
-
throw new
|
|
1006
|
+
throw new internal_3.LoggingError("attach must be called prior to deleting intervals");
|
|
1003
1007
|
}
|
|
1004
1008
|
const id = this.localCollection.ensureSerializedId(serializedInterval);
|
|
1005
1009
|
const interval = this.localCollection.idIntervalIndex.getIntervalById(id);
|
|
@@ -1009,7 +1013,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1009
1013
|
}
|
|
1010
1014
|
serializeInternal() {
|
|
1011
1015
|
if (!this.localCollection) {
|
|
1012
|
-
throw new
|
|
1016
|
+
throw new internal_3.LoggingError("attachSequence must be called");
|
|
1013
1017
|
}
|
|
1014
1018
|
return this.localCollection.serialize();
|
|
1015
1019
|
}
|
|
@@ -1062,7 +1066,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1062
1066
|
*/
|
|
1063
1067
|
findOverlappingIntervals(startPosition, endPosition) {
|
|
1064
1068
|
if (!this.localCollection) {
|
|
1065
|
-
throw new
|
|
1069
|
+
throw new internal_3.LoggingError("attachSequence must be called");
|
|
1066
1070
|
}
|
|
1067
1071
|
return this.localCollection.overlappingIntervalsIndex.findOverlappingIntervals(startPosition, endPosition);
|
|
1068
1072
|
}
|
|
@@ -1071,7 +1075,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1071
1075
|
*/
|
|
1072
1076
|
map(fn) {
|
|
1073
1077
|
if (!this.localCollection) {
|
|
1074
|
-
throw new
|
|
1078
|
+
throw new internal_3.LoggingError("attachSequence must be called");
|
|
1075
1079
|
}
|
|
1076
1080
|
for (const interval of this.localCollection.idIntervalIndex) {
|
|
1077
1081
|
fn(interval);
|
|
@@ -1082,7 +1086,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1082
1086
|
*/
|
|
1083
1087
|
previousInterval(pos) {
|
|
1084
1088
|
if (!this.localCollection) {
|
|
1085
|
-
throw new
|
|
1089
|
+
throw new internal_3.LoggingError("attachSequence must be called");
|
|
1086
1090
|
}
|
|
1087
1091
|
return this.localCollection.endIntervalIndex.previousInterval(pos);
|
|
1088
1092
|
}
|
|
@@ -1091,7 +1095,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1091
1095
|
*/
|
|
1092
1096
|
nextInterval(pos) {
|
|
1093
1097
|
if (!this.localCollection) {
|
|
1094
|
-
throw new
|
|
1098
|
+
throw new internal_3.LoggingError("attachSequence must be called");
|
|
1095
1099
|
}
|
|
1096
1100
|
return this.localCollection.endIntervalIndex.nextInterval(pos);
|
|
1097
1101
|
}
|
|
@@ -1099,8 +1103,8 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
|
|
|
1099
1103
|
exports.IntervalCollection = IntervalCollection;
|
|
1100
1104
|
function setSlideOnRemove(lref) {
|
|
1101
1105
|
let refType = lref.refType;
|
|
1102
|
-
refType = refType & ~
|
|
1103
|
-
refType = refType |
|
|
1106
|
+
refType = refType & ~internal_2.ReferenceType.StayOnRemove;
|
|
1107
|
+
refType = refType | internal_2.ReferenceType.SlideOnRemove;
|
|
1104
1108
|
lref.refType = refType;
|
|
1105
1109
|
}
|
|
1106
1110
|
/**
|
|
@@ -1111,7 +1115,7 @@ function setSlideOnRemove(lref) {
|
|
|
1111
1115
|
* @internal
|
|
1112
1116
|
*/
|
|
1113
1117
|
function intervalLocatorFromEndpoint(potentialEndpoint) {
|
|
1114
|
-
const { interval, [
|
|
1118
|
+
const { interval, [internal_2.reservedRangeLabelsKey]: collectionNameArray } = potentialEndpoint.properties ?? {};
|
|
1115
1119
|
return interval && collectionNameArray?.length === 1
|
|
1116
1120
|
? { label: collectionNameArray[0], interval }
|
|
1117
1121
|
: undefined;
|