@fluidframework/sequence 2.0.0-internal.7.3.0 → 2.0.0-internal.8.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 +168 -0
- package/api-extractor-lint.json +13 -0
- package/api-extractor.json +8 -3
- package/api-report/sequence.api.md +138 -113
- package/dist/defaultMap.d.ts +3 -3
- package/dist/defaultMap.d.ts.map +1 -1
- package/dist/defaultMap.js +7 -2
- package/dist/defaultMap.js.map +1 -1
- package/dist/defaultMapInterfaces.d.ts +12 -11
- package/dist/defaultMapInterfaces.d.ts.map +1 -1
- package/dist/defaultMapInterfaces.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.d.ts +70 -16
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +50 -45
- package/dist/intervalCollection.js.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.d.ts +2 -2
- package/dist/intervalIndex/endpointInRangeIndex.js +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts +2 -2
- package/dist/intervalIndex/endpointIndex.js +1 -1
- package/dist/intervalIndex/endpointIndex.js.map +1 -1
- package/dist/intervalIndex/idIntervalIndex.d.ts +2 -2
- package/dist/intervalIndex/idIntervalIndex.js +1 -1
- package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
- package/dist/intervalIndex/intervalIndex.d.ts +1 -1
- package/dist/intervalIndex/intervalIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
- package/dist/intervalIndex/overlappingIntervalsIndex.js +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +1 -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 +2 -2
- package/dist/intervalIndex/startpointInRangeIndex.js +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/dist/intervalTree.d.ts +1 -2
- package/dist/intervalTree.d.ts.map +1 -1
- package/dist/intervalTree.js +1 -3
- package/dist/intervalTree.js.map +1 -1
- package/dist/intervals/interval.d.ts +5 -11
- package/dist/intervals/interval.d.ts.map +1 -1
- package/dist/intervals/interval.js +10 -18
- package/dist/intervals/interval.js.map +1 -1
- package/dist/intervals/intervalUtils.d.ts +15 -18
- package/dist/intervals/intervalUtils.d.ts.map +1 -1
- package/dist/intervals/intervalUtils.js +3 -8
- package/dist/intervals/intervalUtils.js.map +1 -1
- package/dist/intervals/sequenceInterval.d.ts +5 -15
- package/dist/intervals/sequenceInterval.d.ts.map +1 -1
- package/dist/intervals/sequenceInterval.js +12 -28
- package/dist/intervals/sequenceInterval.js.map +1 -1
- package/dist/localValues.d.ts +2 -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 +9 -15
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +14 -10
- package/dist/revertibles.js.map +1 -1
- package/dist/sequence-alpha.d.ts +283 -552
- package/dist/sequence-beta.d.ts +139 -1373
- package/dist/sequence-public.d.ts +139 -1373
- package/dist/sequence-untrimmed.d.ts +186 -141
- package/dist/sequence.d.ts +26 -24
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +38 -23
- package/dist/sequence.js.map +1 -1
- package/dist/sequenceDeltaEvent.d.ts +4 -4
- package/dist/sequenceDeltaEvent.d.ts.map +1 -1
- package/dist/sequenceDeltaEvent.js +14 -7
- package/dist/sequenceDeltaEvent.js.map +1 -1
- package/dist/sequenceFactory.d.ts +1 -1
- package/dist/sequenceFactory.js +1 -1
- package/dist/sequenceFactory.js.map +1 -1
- package/dist/sharedIntervalCollection.d.ts +3 -3
- package/dist/sharedIntervalCollection.js +2 -2
- package/dist/sharedIntervalCollection.js.map +1 -1
- package/dist/sharedSequence.d.ts +4 -4
- package/dist/sharedSequence.d.ts.map +1 -1
- package/dist/sharedSequence.js +8 -2
- package/dist/sharedSequence.js.map +1 -1
- package/dist/sharedString.d.ts +9 -18
- package/dist/sharedString.d.ts.map +1 -1
- package/dist/sharedString.js +9 -21
- package/dist/sharedString.js.map +1 -1
- package/lib/defaultMap.d.ts +3 -3
- package/lib/defaultMap.d.ts.map +1 -1
- package/lib/defaultMap.js +29 -20
- package/lib/defaultMap.js.map +1 -1
- package/lib/defaultMapInterfaces.d.ts +12 -11
- package/lib/defaultMapInterfaces.d.ts.map +1 -1
- package/lib/defaultMapInterfaces.js +2 -1
- package/lib/defaultMapInterfaces.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +55 -10
- package/lib/index.js.map +1 -1
- package/lib/intervalCollection.d.ts +70 -16
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +174 -156
- package/lib/intervalCollection.js.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.d.ts +2 -2
- package/lib/intervalIndex/endpointInRangeIndex.js +18 -13
- package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts +2 -2
- package/lib/intervalIndex/endpointIndex.js +14 -9
- package/lib/intervalIndex/endpointIndex.js.map +1 -1
- package/lib/intervalIndex/idIntervalIndex.d.ts +2 -2
- package/lib/intervalIndex/idIntervalIndex.js +9 -5
- package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
- package/lib/intervalIndex/index.js +19 -6
- package/lib/intervalIndex/index.js.map +1 -1
- package/lib/intervalIndex/intervalIndex.d.ts +1 -1
- package/lib/intervalIndex/intervalIndex.js +2 -1
- package/lib/intervalIndex/intervalIndex.js.map +1 -1
- package/lib/intervalIndex/intervalIndexUtils.js +8 -4
- package/lib/intervalIndex/intervalIndexUtils.js.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
- package/lib/intervalIndex/overlappingIntervalsIndex.js +16 -11
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +15 -11
- 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 +2 -1
- package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.ts +2 -2
- package/lib/intervalIndex/startpointInRangeIndex.js +18 -13
- package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/lib/intervalTree.d.ts +1 -2
- package/lib/intervalTree.d.ts.map +1 -1
- package/lib/intervalTree.js +7 -4
- package/lib/intervalTree.js.map +1 -1
- package/lib/intervals/index.js +18 -3
- package/lib/intervals/index.js.map +1 -1
- package/lib/intervals/interval.d.ts +5 -11
- package/lib/intervals/interval.d.ts.map +1 -1
- package/lib/intervals/interval.js +26 -29
- package/lib/intervals/interval.js.map +1 -1
- package/lib/intervals/intervalUtils.d.ts +15 -18
- package/lib/intervals/intervalUtils.d.ts.map +1 -1
- package/lib/intervals/intervalUtils.js +21 -21
- package/lib/intervals/intervalUtils.js.map +1 -1
- package/lib/intervals/sequenceInterval.d.ts +5 -15
- package/lib/intervals/sequenceInterval.d.ts.map +1 -1
- package/lib/intervals/sequenceInterval.js +72 -82
- package/lib/intervals/sequenceInterval.js.map +1 -1
- package/lib/localValues.d.ts +2 -1
- package/lib/localValues.d.ts.map +1 -1
- package/lib/localValues.js +9 -4
- package/lib/localValues.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +5 -2
- package/lib/packageVersion.js.map +1 -1
- package/lib/revertibles.d.ts +9 -15
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +83 -69
- package/lib/revertibles.js.map +1 -1
- package/lib/sequence-alpha.d.ts +283 -552
- package/lib/sequence-beta.d.ts +139 -1373
- package/lib/sequence-public.d.ts +139 -1373
- package/lib/sequence-untrimmed.d.ts +186 -141
- package/lib/sequence.d.ts +26 -24
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +81 -61
- package/lib/sequence.js.map +1 -1
- package/lib/sequenceDeltaEvent.d.ts +4 -4
- package/lib/sequenceDeltaEvent.d.ts.map +1 -1
- package/lib/sequenceDeltaEvent.js +27 -14
- package/lib/sequenceDeltaEvent.js.map +1 -1
- package/lib/sequenceFactory.d.ts +1 -1
- package/lib/sequenceFactory.js +14 -10
- package/lib/sequenceFactory.js.map +1 -1
- package/lib/sharedIntervalCollection.d.ts +3 -3
- package/lib/sharedIntervalCollection.js +20 -15
- package/lib/sharedIntervalCollection.js.map +1 -1
- package/lib/sharedSequence.d.ts +4 -4
- package/lib/sharedSequence.d.ts.map +1 -1
- package/lib/sharedSequence.js +19 -8
- package/lib/sharedSequence.js.map +1 -1
- package/lib/sharedString.d.ts +9 -18
- package/lib/sharedString.d.ts.map +1 -1
- package/lib/sharedString.js +30 -37
- package/lib/sharedString.js.map +1 -1
- package/package.json +44 -22
- package/sequence.test-files.tar +0 -0
- package/src/defaultMap.ts +22 -16
- package/src/defaultMapInterfaces.ts +17 -14
- package/src/index.ts +17 -0
- package/src/intervalCollection.ts +135 -71
- package/src/intervalIndex/endpointInRangeIndex.ts +2 -2
- package/src/intervalIndex/endpointIndex.ts +2 -2
- package/src/intervalIndex/idIntervalIndex.ts +2 -2
- package/src/intervalIndex/intervalIndex.ts +1 -1
- package/src/intervalIndex/overlappingIntervalsIndex.ts +2 -2
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +1 -1
- package/src/intervalIndex/sequenceIntervalIndexes.ts +2 -1
- package/src/intervalIndex/startpointInRangeIndex.ts +2 -2
- package/src/intervalTree.ts +0 -3
- package/src/intervals/interval.ts +7 -26
- package/src/intervals/intervalUtils.ts +17 -20
- package/src/intervals/sequenceInterval.ts +7 -35
- package/src/localValues.ts +2 -1
- package/src/packageVersion.ts +1 -1
- package/src/revertibles.ts +20 -19
- package/src/sequence.ts +61 -43
- package/src/sequenceDeltaEvent.ts +12 -6
- package/src/sequenceFactory.ts +1 -1
- package/src/sharedIntervalCollection.ts +3 -3
- package/src/sharedSequence.ts +12 -6
- package/src/sharedString.ts +21 -48
- package/tsconfig.json +1 -0
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*!
|
|
2
3
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
4
|
* Licensed under the MIT License.
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.endReferenceSlidingPreference = exports.startReferenceSlidingPreference = exports.IntervalStickiness = exports.IntervalType = exports.IntervalOpType = void 0;
|
|
6
8
|
/* eslint-disable no-bitwise */
|
|
7
|
-
|
|
9
|
+
const merge_tree_1 = require("@fluidframework/merge-tree");
|
|
8
10
|
/**
|
|
9
11
|
* Values are used in persisted formats (ops) and revertibles.
|
|
10
|
-
* @
|
|
12
|
+
* @internal
|
|
11
13
|
*/
|
|
12
|
-
|
|
14
|
+
exports.IntervalOpType = {
|
|
13
15
|
ADD: "add",
|
|
14
16
|
DELETE: "delete",
|
|
15
17
|
CHANGE: "change",
|
|
@@ -17,15 +19,11 @@ export const IntervalOpType = {
|
|
|
17
19
|
POSITION_REMOVE: "positionRemove",
|
|
18
20
|
};
|
|
19
21
|
/**
|
|
20
|
-
* @
|
|
22
|
+
* @alpha
|
|
21
23
|
*/
|
|
22
|
-
|
|
24
|
+
var IntervalType;
|
|
23
25
|
(function (IntervalType) {
|
|
24
26
|
IntervalType[IntervalType["Simple"] = 0] = "Simple";
|
|
25
|
-
/**
|
|
26
|
-
* @deprecated this functionality is no longer supported and will be removed
|
|
27
|
-
*/
|
|
28
|
-
IntervalType[IntervalType["Nest"] = 1] = "Nest";
|
|
29
27
|
/**
|
|
30
28
|
* SlideOnRemove indicates that the ends of the interval will slide if the segment
|
|
31
29
|
* they reference is removed and acked.
|
|
@@ -38,7 +36,7 @@ export var IntervalType;
|
|
|
38
36
|
* @internal
|
|
39
37
|
*/
|
|
40
38
|
IntervalType[IntervalType["Transient"] = 4] = "Transient";
|
|
41
|
-
})(IntervalType || (IntervalType = {}));
|
|
39
|
+
})(IntervalType || (exports.IntervalType = IntervalType = {}));
|
|
42
40
|
/**
|
|
43
41
|
* Determines how an interval should expand when segments are inserted adjacent
|
|
44
42
|
* to the range it spans
|
|
@@ -46,9 +44,9 @@ export var IntervalType;
|
|
|
46
44
|
* Note that interval stickiness is currently an experimental feature and must
|
|
47
45
|
* be explicitly enabled with the `intervalStickinessEnabled` flag
|
|
48
46
|
*
|
|
49
|
-
* @
|
|
47
|
+
* @alpha
|
|
50
48
|
*/
|
|
51
|
-
|
|
49
|
+
exports.IntervalStickiness = {
|
|
52
50
|
/**
|
|
53
51
|
* Interval does not expand to include adjacent segments
|
|
54
52
|
*/
|
|
@@ -68,16 +66,18 @@ export const IntervalStickiness = {
|
|
|
68
66
|
*/
|
|
69
67
|
FULL: 0b11,
|
|
70
68
|
};
|
|
71
|
-
|
|
69
|
+
function startReferenceSlidingPreference(stickiness) {
|
|
72
70
|
// if any start stickiness, prefer sliding backwards
|
|
73
|
-
return (stickiness & IntervalStickiness.START) === 0
|
|
74
|
-
? SlidingPreference.FORWARD
|
|
75
|
-
: SlidingPreference.BACKWARD;
|
|
71
|
+
return (stickiness & exports.IntervalStickiness.START) === 0
|
|
72
|
+
? merge_tree_1.SlidingPreference.FORWARD
|
|
73
|
+
: merge_tree_1.SlidingPreference.BACKWARD;
|
|
76
74
|
}
|
|
77
|
-
|
|
75
|
+
exports.startReferenceSlidingPreference = startReferenceSlidingPreference;
|
|
76
|
+
function endReferenceSlidingPreference(stickiness) {
|
|
78
77
|
// if any end stickiness, prefer sliding forwards
|
|
79
|
-
return (stickiness & IntervalStickiness.END) === 0
|
|
80
|
-
? SlidingPreference.BACKWARD
|
|
81
|
-
: SlidingPreference.FORWARD;
|
|
78
|
+
return (stickiness & exports.IntervalStickiness.END) === 0
|
|
79
|
+
? merge_tree_1.SlidingPreference.BACKWARD
|
|
80
|
+
: merge_tree_1.SlidingPreference.FORWARD;
|
|
82
81
|
}
|
|
82
|
+
exports.endReferenceSlidingPreference = endReferenceSlidingPreference;
|
|
83
83
|
//# sourceMappingURL=intervalUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intervalUtils.js","sourceRoot":"","sources":["../../src/intervals/intervalUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yCAAyC;AACzC,+BAA+B;AAE/B,OAAO,EAIN,iBAAiB,GACjB,MAAM,4BAA4B,CAAC;AA2DpC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;CACxB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAN,IAAY,YAoBX;AApBD,WAAY,YAAY;IACvB,mDAAY,CAAA;IACZ;;OAEG;IACH,+CAAU,CAAA;IAEV;;;;;OAKG;IACH,iEAAmB,CAAA;IAEnB;;;OAGG;IACH,yDAAe,CAAA;AAChB,CAAC,EApBW,YAAY,KAAZ,YAAY,QAoBvB;AA+HD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC;;OAEG;IACH,IAAI,EAAE,IAAI;IAEV;;OAEG;IACH,KAAK,EAAE,IAAI;IAEX;;;;OAIG;IACH,GAAG,EAAE,IAAI;IAET;;OAEG;IACH,IAAI,EAAE,IAAI;CACD,CAAC;AAaX,MAAM,UAAU,+BAA+B,CAAC,UAA8B;IAC7E,oDAAoD;IACpD,OAAO,CAAC,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC;QACnD,CAAC,CAAC,iBAAiB,CAAC,OAAO;QAC3B,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,UAA8B;IAC3E,iDAAiD;IACjD,OAAO,CAAC,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QACjD,CAAC,CAAC,iBAAiB,CAAC,QAAQ;QAC5B,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAC9B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable import/no-deprecated */\n/* eslint-disable no-bitwise */\n\nimport {\n\tClient,\n\tPropertiesManager,\n\tPropertySet,\n\tSlidingPreference,\n} from \"@fluidframework/merge-tree\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { SequencePlace, Side } from \"../intervalCollection\";\n\n/**\n * Basic interval abstraction\n * @public\n */\nexport interface IInterval {\n\t/**\n\t * @returns a new interval object with identical semantics.\n\t */\n\tclone(): IInterval;\n\t/**\n\t * Compares this interval to `b` with standard comparator semantics:\n\t * - returns -1 if this is less than `b`\n\t * - returns 1 if this is greater than `b`\n\t * - returns 0 if this is equivalent to `b`\n\t * @param b - Interval to compare against\n\t */\n\tcompare(b: IInterval): number;\n\t/**\n\t * Compares the start endpoint of this interval to `b`'s start endpoint.\n\t * Standard comparator semantics apply.\n\t * @param b - Interval to compare against\n\t */\n\tcompareStart(b: IInterval): number;\n\t/**\n\t * Compares the end endpoint of this interval to `b`'s end endpoint.\n\t * Standard comparator semantics apply.\n\t * @param b - Interval to compare against\n\t */\n\tcompareEnd(b: IInterval): number;\n\t/**\n\t * Modifies one or more of the endpoints of this interval, returning a new interval representing the result.\n\t * @internal\n\t */\n\tmodify(\n\t\tlabel: string,\n\t\tstart: SequencePlace | undefined,\n\t\tend: SequencePlace | undefined,\n\t\top?: ISequencedDocumentMessage,\n\t\tlocalSeq?: number,\n\t\tuseNewSlidingBehavior?: boolean,\n\t): IInterval | undefined;\n\t/**\n\t * @returns whether this interval overlaps with `b`.\n\t * Intervals are considered to overlap if their intersection is non-empty.\n\t */\n\toverlaps(b: IInterval): boolean;\n\t/**\n\t * Unions this interval with `b`, returning a new interval.\n\t * The union operates as a convex hull, i.e. if the two intervals are disjoint, the return value includes\n\t * intermediate values between the two intervals.\n\t * @internal\n\t */\n\tunion(b: IInterval): IInterval;\n}\n\n/**\n * Values are used in persisted formats (ops) and revertibles.\n * @alpha\n */\nexport const IntervalOpType = {\n\tADD: \"add\",\n\tDELETE: \"delete\",\n\tCHANGE: \"change\",\n\tPROPERTY_CHANGED: \"propertyChanged\",\n\tPOSITION_REMOVE: \"positionRemove\",\n} as const;\n\n/**\n * @public\n */\nexport enum IntervalType {\n\tSimple = 0x0,\n\t/**\n\t * @deprecated this functionality is no longer supported and will be removed\n\t */\n\tNest = 0x1,\n\n\t/**\n\t * SlideOnRemove indicates that the ends of the interval will slide if the segment\n\t * they reference is removed and acked.\n\t * See `packages\\dds\\merge-tree\\docs\\REFERENCEPOSITIONS.md` for details\n\t * SlideOnRemove is the default interval behavior and does not need to be specified.\n\t */\n\tSlideOnRemove = 0x2, // SlideOnRemove is default behavior - all intervals are SlideOnRemove\n\n\t/**\n\t * A temporary interval, used internally\n\t * @internal\n\t */\n\tTransient = 0x4,\n}\n\n/**\n * Serialized object representation of an interval.\n * This representation is used for ops that create or change intervals.\n * @internal\n */\nexport interface ISerializedInterval {\n\t/**\n\t * Sequence number at which `start` and `end` should be interpreted\n\t *\n\t * @remarks It's unclear that this is necessary to store here.\n\t * This should just be the refSeq on the op that modified the interval, which should be available via other means.\n\t * At the time of writing, it's not plumbed through to the reconnect/rebase code, however, which does need it.\n\t */\n\tsequenceNumber: number;\n\t/** Start position of the interval */\n\tstart: number | \"start\" | \"end\";\n\t/** End position of the interval */\n\tend: number | \"start\" | \"end\";\n\t/** Interval type to create */\n\tintervalType: IntervalType;\n\t/**\n\t * The stickiness of this interval\n\t */\n\tstickiness?: IntervalStickiness;\n\tstartSide?: Side;\n\tendSide?: Side;\n\t/** Any properties the interval has */\n\tproperties?: PropertySet;\n}\n\n/**\n * @public\n */\nexport interface ISerializableInterval extends IInterval {\n\t/** Serializable bag of properties associated with the interval. */\n\tproperties: PropertySet;\n\t/** @internal */\n\tpropertyManager: PropertiesManager;\n\t/** @internal */\n\tserialize(): ISerializedInterval;\n\t/** @internal */\n\taddProperties(\n\t\tprops: PropertySet,\n\t\tcollaborating?: boolean,\n\t\tseq?: number,\n\t): PropertySet | undefined;\n\t/**\n\t * Gets the id associated with this interval.\n\t * When the interval is used as part of an interval collection, this id can be used to modify or remove the\n\t * interval.\n\t * @remarks This signature includes `undefined` strictly for backwards-compatibility reasons, as older versions\n\t * of Fluid didn't always write interval ids.\n\t */\n\tgetIntervalId(): string | undefined;\n}\n\n/**\n * Represents a change that should be applied to an existing interval.\n * Changes can modify any of start/end/properties, with `undefined` signifying no change should be made.\n * @internal\n */\nexport type SerializedIntervalDelta = Omit<ISerializedInterval, \"start\" | \"end\" | \"properties\"> &\n\tPartial<Pick<ISerializedInterval, \"start\" | \"end\" | \"properties\">>;\n\n/**\n * A size optimization to avoid redundantly storing keys when serializing intervals\n * as JSON for summaries.\n *\n * Intervals are of the format:\n *\n * [\n * start,\n * end,\n * sequenceNumber,\n * intervalType,\n * properties,\n * stickiness?,\n * startSide?,\n * endSide?,\n * ]\n */\nexport type CompressedSerializedInterval =\n\t| [\n\t\t\tnumber | \"start\" | \"end\",\n\t\t\tnumber | \"start\" | \"end\",\n\t\t\tnumber,\n\t\t\tIntervalType,\n\t\t\tPropertySet,\n\t\t\tIntervalStickiness,\n\t ]\n\t| [number | \"start\" | \"end\", number | \"start\" | \"end\", number, IntervalType, PropertySet];\n\n/**\n * @sealed\n * @deprecated The methods within have substitutions\n * @public\n */\nexport interface IIntervalHelpers<TInterval extends ISerializableInterval> {\n\t/**\n\t *\n\t * @param label - label of the interval collection this interval is being added to. This parameter is\n\t * irrelevant for transient intervals.\n\t * @param start - numerical start position of the interval\n\t * @param end - numerical end position of the interval\n\t * @param client - client creating the interval\n\t * @param intervalType - Type of interval to create. Default is SlideOnRemove\n\t * @param op - If this create came from a remote client, op that created it. Default is undefined (i.e. local)\n\t * @param fromSnapshot - If this create came from loading a snapshot. Default is false.\n\t * @param startSide - The side on which the start position lays. See\n\t * {@link SequencePlace} for additional context\n\t * @param endSide - The side on which the end position lays. See\n\t * {@link SequencePlace} for additional context\n\t */\n\tcreate(\n\t\tlabel: string,\n\t\tstart: SequencePlace | undefined,\n\t\tend: SequencePlace | undefined,\n\t\tclient: Client | undefined,\n\t\tintervalType: IntervalType,\n\t\top?: ISequencedDocumentMessage,\n\t\tfromSnapshot?: boolean,\n\t\tuseNewSlidingBehavior?: boolean,\n\t): TInterval;\n}\n\n/**\n * Determines how an interval should expand when segments are inserted adjacent\n * to the range it spans\n *\n * Note that interval stickiness is currently an experimental feature and must\n * be explicitly enabled with the `intervalStickinessEnabled` flag\n *\n * @internal\n */\nexport const IntervalStickiness = {\n\t/**\n\t * Interval does not expand to include adjacent segments\n\t */\n\tNONE: 0b00,\n\n\t/**\n\t * Interval expands to include segments inserted adjacent to the start\n\t */\n\tSTART: 0b01,\n\n\t/**\n\t * Interval expands to include segments inserted adjacent to the end\n\t *\n\t * This is the default stickiness\n\t */\n\tEND: 0b10,\n\n\t/**\n\t * Interval expands to include all segments inserted adjacent to it\n\t */\n\tFULL: 0b11,\n} as const;\n\n/**\n * Determines how an interval should expand when segments are inserted adjacent\n * to the range it spans\n *\n * Note that interval stickiness is currently an experimental feature and must\n * be explicitly enabled with the `intervalStickinessEnabled` flag\n *\n * @internal\n */\nexport type IntervalStickiness = (typeof IntervalStickiness)[keyof typeof IntervalStickiness];\n\nexport function startReferenceSlidingPreference(stickiness: IntervalStickiness): SlidingPreference {\n\t// if any start stickiness, prefer sliding backwards\n\treturn (stickiness & IntervalStickiness.START) === 0\n\t\t? SlidingPreference.FORWARD\n\t\t: SlidingPreference.BACKWARD;\n}\n\nexport function endReferenceSlidingPreference(stickiness: IntervalStickiness): SlidingPreference {\n\t// if any end stickiness, prefer sliding forwards\n\treturn (stickiness & IntervalStickiness.END) === 0\n\t\t? SlidingPreference.BACKWARD\n\t\t: SlidingPreference.FORWARD;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"intervalUtils.js","sourceRoot":"","sources":["../../src/intervals/intervalUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+BAA+B;AAE/B,2DAMoC;AAyDpC;;;GAGG;AACU,QAAA,cAAc,GAAG;IAC7B,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;CACxB,CAAC;AAKX;;GAEG;AACH,IAAY,YAgBX;AAhBD,WAAY,YAAY;IACvB,mDAAY,CAAA;IAEZ;;;;;OAKG;IACH,iEAAmB,CAAA;IAEnB;;;OAGG;IACH,yDAAe,CAAA;AAChB,CAAC,EAhBW,YAAY,4BAAZ,YAAY,QAgBvB;AAgID;;;;;;;;GAQG;AACU,QAAA,kBAAkB,GAAG;IACjC;;OAEG;IACH,IAAI,EAAE,IAAI;IAEV;;OAEG;IACH,KAAK,EAAE,IAAI;IAEX;;;;OAIG;IACH,GAAG,EAAE,IAAI;IAET;;OAEG;IACH,IAAI,EAAE,IAAI;CACD,CAAC;AAYX,SAAgB,+BAA+B,CAAC,UAA8B;IAC7E,oDAAoD;IACpD,OAAO,CAAC,UAAU,GAAG,0BAAkB,CAAC,KAAK,CAAC,KAAK,CAAC;QACnD,CAAC,CAAC,8BAAiB,CAAC,OAAO;QAC3B,CAAC,CAAC,8BAAiB,CAAC,QAAQ,CAAC;AAC/B,CAAC;AALD,0EAKC;AAED,SAAgB,6BAA6B,CAAC,UAA8B;IAC3E,iDAAiD;IACjD,OAAO,CAAC,UAAU,GAAG,0BAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QACjD,CAAC,CAAC,8BAAiB,CAAC,QAAQ;QAC5B,CAAC,CAAC,8BAAiB,CAAC,OAAO,CAAC;AAC9B,CAAC;AALD,sEAKC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport {\n\t// eslint-disable-next-line import/no-deprecated\n\tClient,\n\tPropertiesManager,\n\tPropertySet,\n\tSlidingPreference,\n} from \"@fluidframework/merge-tree\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { SequencePlace, Side } from \"../intervalCollection\";\n\n/**\n * Basic interval abstraction\n * @alpha\n */\nexport interface IInterval {\n\t/**\n\t * @returns a new interval object with identical semantics.\n\t */\n\tclone(): IInterval;\n\t/**\n\t * Compares this interval to `b` with standard comparator semantics:\n\t * - returns -1 if this is less than `b`\n\t * - returns 1 if this is greater than `b`\n\t * - returns 0 if this is equivalent to `b`\n\t * @param b - Interval to compare against\n\t */\n\tcompare(b: IInterval): number;\n\t/**\n\t * Compares the start endpoint of this interval to `b`'s start endpoint.\n\t * Standard comparator semantics apply.\n\t * @param b - Interval to compare against\n\t */\n\tcompareStart(b: IInterval): number;\n\t/**\n\t * Compares the end endpoint of this interval to `b`'s end endpoint.\n\t * Standard comparator semantics apply.\n\t * @param b - Interval to compare against\n\t */\n\tcompareEnd(b: IInterval): number;\n\t/**\n\t * Modifies one or more of the endpoints of this interval, returning a new interval representing the result.\n\t */\n\tmodify(\n\t\tlabel: string,\n\t\tstart: SequencePlace | undefined,\n\t\tend: SequencePlace | undefined,\n\t\top?: ISequencedDocumentMessage,\n\t\tlocalSeq?: number,\n\t\tuseNewSlidingBehavior?: boolean,\n\t): IInterval | undefined;\n\t/**\n\t * @returns whether this interval overlaps with `b`.\n\t * Intervals are considered to overlap if their intersection is non-empty.\n\t */\n\toverlaps(b: IInterval): boolean;\n\t/**\n\t * Unions this interval with `b`, returning a new interval.\n\t * The union operates as a convex hull, i.e. if the two intervals are disjoint, the return value includes\n\t * intermediate values between the two intervals.\n\t */\n\tunion(b: IInterval): IInterval;\n}\n\n/**\n * Values are used in persisted formats (ops) and revertibles.\n * @internal\n */\nexport const IntervalOpType = {\n\tADD: \"add\",\n\tDELETE: \"delete\",\n\tCHANGE: \"change\",\n\tPROPERTY_CHANGED: \"propertyChanged\",\n\tPOSITION_REMOVE: \"positionRemove\",\n} as const;\n/**\n * @internal\n */\nexport type IntervalOpType = (typeof IntervalOpType)[keyof typeof IntervalOpType];\n/**\n * @alpha\n */\nexport enum IntervalType {\n\tSimple = 0x0,\n\n\t/**\n\t * SlideOnRemove indicates that the ends of the interval will slide if the segment\n\t * they reference is removed and acked.\n\t * See `packages\\dds\\merge-tree\\docs\\REFERENCEPOSITIONS.md` for details\n\t * SlideOnRemove is the default interval behavior and does not need to be specified.\n\t */\n\tSlideOnRemove = 0x2, // SlideOnRemove is default behavior - all intervals are SlideOnRemove\n\n\t/**\n\t * A temporary interval, used internally\n\t * @internal\n\t */\n\tTransient = 0x4,\n}\n\n/**\n * Serialized object representation of an interval.\n * This representation is used for ops that create or change intervals.\n * @alpha\n */\nexport interface ISerializedInterval {\n\t/**\n\t * Sequence number at which `start` and `end` should be interpreted\n\t *\n\t * @remarks It's unclear that this is necessary to store here.\n\t * This should just be the refSeq on the op that modified the interval, which should be available via other means.\n\t * At the time of writing, it's not plumbed through to the reconnect/rebase code, however, which does need it.\n\t */\n\tsequenceNumber: number;\n\t/** Start position of the interval */\n\tstart: number | \"start\" | \"end\";\n\t/** End position of the interval */\n\tend: number | \"start\" | \"end\";\n\t/** Interval type to create */\n\tintervalType: IntervalType;\n\t/**\n\t * The stickiness of this interval\n\t */\n\tstickiness?: IntervalStickiness;\n\tstartSide?: Side;\n\tendSide?: Side;\n\t/** Any properties the interval has */\n\tproperties?: PropertySet;\n}\n\n/**\n * @alpha\n */\nexport interface ISerializableInterval extends IInterval {\n\t/** Serializable bag of properties associated with the interval. */\n\tproperties: PropertySet;\n\t/***/\n\tpropertyManager: PropertiesManager;\n\t/***/\n\tserialize(): ISerializedInterval;\n\t/***/\n\taddProperties(\n\t\tprops: PropertySet,\n\t\tcollaborating?: boolean,\n\t\tseq?: number,\n\t): PropertySet | undefined;\n\t/**\n\t * Gets the id associated with this interval.\n\t * When the interval is used as part of an interval collection, this id can be used to modify or remove the\n\t * interval.\n\t * @remarks This signature includes `undefined` strictly for backwards-compatibility reasons, as older versions\n\t * of Fluid didn't always write interval ids.\n\t */\n\tgetIntervalId(): string | undefined;\n}\n\n/**\n * Represents a change that should be applied to an existing interval.\n * Changes can modify any of start/end/properties, with `undefined` signifying no change should be made.\n * @internal\n */\nexport type SerializedIntervalDelta = Omit<ISerializedInterval, \"start\" | \"end\" | \"properties\"> &\n\tPartial<Pick<ISerializedInterval, \"start\" | \"end\" | \"properties\">>;\n\n/**\n * A size optimization to avoid redundantly storing keys when serializing intervals\n * as JSON for summaries.\n *\n * Intervals are of the format:\n *\n * [\n * start,\n * end,\n * sequenceNumber,\n * intervalType,\n * properties,\n * stickiness?,\n * startSide?,\n * endSide?,\n * ]\n */\nexport type CompressedSerializedInterval =\n\t| [\n\t\t\tnumber | \"start\" | \"end\",\n\t\t\tnumber | \"start\" | \"end\",\n\t\t\tnumber,\n\t\t\tIntervalType,\n\t\t\tPropertySet,\n\t\t\tIntervalStickiness,\n\t ]\n\t| [number | \"start\" | \"end\", number | \"start\" | \"end\", number, IntervalType, PropertySet];\n\n/**\n * @sealed\n * @deprecated The methods within have substitutions\n * @internal\n */\nexport interface IIntervalHelpers<TInterval extends ISerializableInterval> {\n\t/**\n\t *\n\t * @param label - label of the interval collection this interval is being added to. This parameter is\n\t * irrelevant for transient intervals.\n\t * @param start - numerical start position of the interval\n\t * @param end - numerical end position of the interval\n\t * @param client - client creating the interval\n\t * @param intervalType - Type of interval to create. Default is SlideOnRemove\n\t * @param op - If this create came from a remote client, op that created it. Default is undefined (i.e. local)\n\t * @param fromSnapshot - If this create came from loading a snapshot. Default is false.\n\t * @param startSide - The side on which the start position lays. See\n\t * {@link SequencePlace} for additional context\n\t * @param endSide - The side on which the end position lays. See\n\t * {@link SequencePlace} for additional context\n\t */\n\tcreate(\n\t\tlabel: string,\n\t\tstart: SequencePlace | undefined,\n\t\tend: SequencePlace | undefined,\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tclient: Client | undefined,\n\t\tintervalType: IntervalType,\n\t\top?: ISequencedDocumentMessage,\n\t\tfromSnapshot?: boolean,\n\t\tuseNewSlidingBehavior?: boolean,\n\t): TInterval;\n}\n\n/**\n * Determines how an interval should expand when segments are inserted adjacent\n * to the range it spans\n *\n * Note that interval stickiness is currently an experimental feature and must\n * be explicitly enabled with the `intervalStickinessEnabled` flag\n *\n * @alpha\n */\nexport const IntervalStickiness = {\n\t/**\n\t * Interval does not expand to include adjacent segments\n\t */\n\tNONE: 0b00,\n\n\t/**\n\t * Interval expands to include segments inserted adjacent to the start\n\t */\n\tSTART: 0b01,\n\n\t/**\n\t * Interval expands to include segments inserted adjacent to the end\n\t *\n\t * This is the default stickiness\n\t */\n\tEND: 0b10,\n\n\t/**\n\t * Interval expands to include all segments inserted adjacent to it\n\t */\n\tFULL: 0b11,\n} as const;\n\n/**\n * Determines how an interval should expand when segments are inserted adjacent\n * to the range it spans\n *\n * Note that interval stickiness is currently an experimental feature and must\n * be explicitly enabled with the `intervalStickinessEnabled` flag\n * @alpha\n */\nexport type IntervalStickiness = (typeof IntervalStickiness)[keyof typeof IntervalStickiness];\n\nexport function startReferenceSlidingPreference(stickiness: IntervalStickiness): SlidingPreference {\n\t// if any start stickiness, prefer sliding backwards\n\treturn (stickiness & IntervalStickiness.START) === 0\n\t\t? SlidingPreference.FORWARD\n\t\t: SlidingPreference.BACKWARD;\n}\n\nexport function endReferenceSlidingPreference(stickiness: IntervalStickiness): SlidingPreference {\n\t// if any end stickiness, prefer sliding forwards\n\treturn (stickiness & IntervalStickiness.END) === 0\n\t\t? SlidingPreference.BACKWARD\n\t\t: SlidingPreference.FORWARD;\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { Client,
|
|
5
|
+
import { Client, ISegment, LocalReferencePosition, PropertiesManager, PropertySet, ReferenceType, SlidingPreference } from "@fluidframework/merge-tree";
|
|
6
6
|
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
7
7
|
import { SequencePlace, Side } from "../intervalCollection";
|
|
8
8
|
import { IIntervalHelpers, ISerializableInterval, ISerializedInterval, IntervalStickiness, IntervalType } from "./intervalUtils";
|
|
@@ -32,7 +32,7 @@ import { IIntervalHelpers, ISerializableInterval, ISerializedInterval, IntervalS
|
|
|
32
32
|
* `mergeTreeReferencesCanSlideToEndpoint` feature flag set to true, the endpoints
|
|
33
33
|
* of the interval that are exclusive will have the ability to slide to these
|
|
34
34
|
* special endpoint segments.
|
|
35
|
-
* @
|
|
35
|
+
* @alpha
|
|
36
36
|
*/
|
|
37
37
|
export declare class SequenceInterval implements ISerializableInterval {
|
|
38
38
|
private readonly client;
|
|
@@ -55,12 +55,9 @@ export declare class SequenceInterval implements ISerializableInterval {
|
|
|
55
55
|
properties: PropertySet;
|
|
56
56
|
/**
|
|
57
57
|
* {@inheritDoc ISerializableInterval.propertyManager}
|
|
58
|
-
* @internal
|
|
59
58
|
*/
|
|
60
59
|
propertyManager: PropertiesManager;
|
|
61
|
-
|
|
62
|
-
* @internal
|
|
63
|
-
*/
|
|
60
|
+
/***/
|
|
64
61
|
get stickiness(): IntervalStickiness;
|
|
65
62
|
constructor(client: Client,
|
|
66
63
|
/**
|
|
@@ -76,17 +73,14 @@ export declare class SequenceInterval implements ISerializableInterval {
|
|
|
76
73
|
private callbacks?;
|
|
77
74
|
/**
|
|
78
75
|
* Subscribes to position change events on this interval if there are no current listeners.
|
|
79
|
-
* @internal
|
|
80
76
|
*/
|
|
81
77
|
addPositionChangeListeners(beforePositionChange: () => void, afterPositionChange: () => void): void;
|
|
82
78
|
/**
|
|
83
79
|
* Removes the currently subscribed position change listeners.
|
|
84
|
-
* @internal
|
|
85
80
|
*/
|
|
86
81
|
removePositionChangeListeners(): void;
|
|
87
82
|
/**
|
|
88
83
|
* {@inheritDoc ISerializableInterval.serialize}
|
|
89
|
-
* @internal
|
|
90
84
|
*/
|
|
91
85
|
serialize(): ISerializedInterval;
|
|
92
86
|
/**
|
|
@@ -115,24 +109,20 @@ export declare class SequenceInterval implements ISerializableInterval {
|
|
|
115
109
|
getIntervalId(): string;
|
|
116
110
|
/**
|
|
117
111
|
* {@inheritDoc IInterval.union}
|
|
118
|
-
* @internal
|
|
119
112
|
*/
|
|
120
113
|
union(b: SequenceInterval): SequenceInterval;
|
|
121
114
|
/**
|
|
122
115
|
* {@inheritDoc ISerializableInterval.addProperties}
|
|
123
|
-
* @internal
|
|
124
116
|
*/
|
|
125
|
-
addProperties(newProps: PropertySet, collab?: boolean, seq?: number
|
|
117
|
+
addProperties(newProps: PropertySet, collab?: boolean, seq?: number): PropertySet | undefined;
|
|
126
118
|
/**
|
|
127
119
|
* @returns whether this interval overlaps two numerical positions.
|
|
128
120
|
*/
|
|
129
121
|
overlapsPos(bstart: number, bend: number): boolean;
|
|
130
122
|
/**
|
|
131
123
|
* {@inheritDoc IInterval.modify}
|
|
132
|
-
* @internal
|
|
133
124
|
*/
|
|
134
125
|
modify(label: string, start: SequencePlace | undefined, end: SequencePlace | undefined, op?: ISequencedDocumentMessage, localSeq?: number, useNewSlidingBehavior?: boolean): SequenceInterval;
|
|
135
|
-
private initializeProperties;
|
|
136
126
|
}
|
|
137
127
|
export declare function createPositionReferenceFromSegoff(client: Client, segoff: {
|
|
138
128
|
segment: ISegment | undefined;
|
|
@@ -141,7 +131,7 @@ export declare function createPositionReferenceFromSegoff(client: Client, segoff
|
|
|
141
131
|
export declare function createSequenceInterval(label: string, start: SequencePlace | undefined, end: SequencePlace | undefined, client: Client, intervalType: IntervalType, op?: ISequencedDocumentMessage, fromSnapshot?: boolean, useNewSlidingBehavior?: boolean): SequenceInterval;
|
|
142
132
|
/**
|
|
143
133
|
* @deprecated The methods within have substitutions
|
|
144
|
-
* @
|
|
134
|
+
* @internal
|
|
145
135
|
*/
|
|
146
136
|
export declare const sequenceIntervalHelpers: IIntervalHelpers<SequenceInterval>;
|
|
147
137
|
//# sourceMappingURL=sequenceInterval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequenceInterval.d.ts","sourceRoot":"","sources":["../../src/intervals/sequenceInterval.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACN,MAAM,EACN,
|
|
1
|
+
{"version":3,"file":"sequenceInterval.d.ts","sourceRoot":"","sources":["../../src/intervals/sequenceInterval.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACN,MAAM,EACN,QAAQ,EACR,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EASjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EACN,aAAa,EACb,IAAI,EAIJ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EAGZ,MAAM,iBAAiB,CAAC;AAgCzB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,gBAAiB,YAAW,qBAAqB;IAwB5D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB;;;OAGG;IACI,KAAK,EAAE,sBAAsB;IACpC;;;OAGG;IACI,GAAG,EAAE,sBAAsB;IAC3B,YAAY,EAAE,YAAY;aAEjB,SAAS,EAAE,IAAI;aACf,OAAO,EAAE,IAAI;IArC9B;;OAEG;IACI,UAAU,EAAE,WAAW,CAAoB;IAElD;;OAEG;IACI,eAAe,EAAE,iBAAiB,CAA2B;IAEpE,KAAK;IACL,IAAW,UAAU,IAAI,kBAAkB,CAS1C;gBAGiB,MAAM,EAAE,MAAM;IAC/B;;;OAGG;IACI,KAAK,EAAE,sBAAsB;IACpC;;;OAGG;IACI,GAAG,EAAE,sBAAsB,EAC3B,YAAY,EAAE,YAAY,EACjC,KAAK,CAAC,EAAE,WAAW,EACH,SAAS,GAAE,IAAkB,EAC7B,OAAO,GAAE,IAAkB;IAO5C,OAAO,CAAC,SAAS,CAAC,CAAqE;IAEvF;;OAEG;IACI,0BAA0B,CAChC,oBAAoB,EAAE,MAAM,IAAI,EAChC,mBAAmB,EAAE,MAAM,IAAI,GAC7B,IAAI;IAcP;;OAEG;IACI,6BAA6B,IAAI,IAAI;IAQ5C;;OAEG;IACI,SAAS,IAAI,mBAAmB;IAqBvC;;OAEG;IACI,KAAK;IAYZ;;OAEG;IACI,OAAO,CAAC,CAAC,EAAE,gBAAgB;IAsBlC;;OAEG;IACI,YAAY,CAAC,CAAC,EAAE,gBAAgB;IAUvC;;OAEG;IACI,UAAU,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM;IAU9C;;OAEG;IACI,QAAQ,CAAC,CAAC,EAAE,gBAAgB;IAOnC;;OAEG;IACI,aAAa,IAAI,MAAM;IAM9B;;OAEG;IACI,KAAK,CAAC,CAAC,EAAE,gBAAgB;IA+BhC;;OAEG;IACI,aAAa,CACnB,QAAQ,EAAE,WAAW,EACrB,MAAM,GAAE,OAAe,EACvB,GAAG,CAAC,EAAE,MAAM,GACV,WAAW,GAAG,SAAS;IAI1B;;OAEG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAM/C;;OAEG;IACI,MAAM,CACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,GAAG,EAAE,aAAa,GAAG,SAAS,EAC9B,EAAE,CAAC,EAAE,yBAAyB,EAC9B,QAAQ,CAAC,EAAE,MAAM,EACjB,qBAAqB,GAAE,OAAe;CAwEvC;AAED,wBAAgB,iCAAiC,CAChD,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;IAAE,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,OAAO,GAAG,KAAK,EACvF,OAAO,EAAE,aAAa,EACtB,EAAE,CAAC,EAAE,yBAAyB,EAC9B,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,OAAO,EACtB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,kBAAkB,CAAC,EAAE,OAAO,GAC1B,sBAAsB,CAuCxB;AAoDD,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,GAAG,EAAE,aAAa,GAAG,SAAS,EAC9B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,EAAE,CAAC,EAAE,yBAAyB,EAC9B,YAAY,CAAC,EAAE,OAAO,EACtB,qBAAqB,GAAE,OAAe,GACpC,gBAAgB,CAuElB;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,gBAAgB,CAAC,gBAAgB,CAEtE,CAAC"}
|
|
@@ -1,35 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*!
|
|
2
3
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
4
|
* Licensed under the MIT License.
|
|
4
5
|
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.sequenceIntervalHelpers = exports.createSequenceInterval = exports.createPositionReferenceFromSegoff = exports.SequenceInterval = void 0;
|
|
5
8
|
/* eslint-disable no-bitwise */
|
|
6
9
|
/* eslint-disable import/no-deprecated */
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const merge_tree_1 = require("@fluidframework/merge-tree");
|
|
11
|
+
const core_utils_1 = require("@fluidframework/core-utils");
|
|
12
|
+
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
13
|
+
const intervalCollection_1 = require("../intervalCollection");
|
|
14
|
+
const intervalUtils_1 = require("./intervalUtils");
|
|
12
15
|
const reservedIntervalIdKey = "intervalId";
|
|
13
16
|
function compareSides(sideA, sideB) {
|
|
14
17
|
if (sideA === sideB) {
|
|
15
18
|
return 0;
|
|
16
19
|
}
|
|
17
|
-
if (sideA === Side.Before) {
|
|
20
|
+
if (sideA === intervalCollection_1.Side.Before) {
|
|
18
21
|
return 1;
|
|
19
22
|
}
|
|
20
23
|
return -1;
|
|
21
24
|
}
|
|
22
25
|
function minSide(sideA, sideB) {
|
|
23
|
-
if (sideA === Side.After && sideB === Side.After) {
|
|
24
|
-
return Side.After;
|
|
26
|
+
if (sideA === intervalCollection_1.Side.After && sideB === intervalCollection_1.Side.After) {
|
|
27
|
+
return intervalCollection_1.Side.After;
|
|
25
28
|
}
|
|
26
|
-
return Side.Before;
|
|
29
|
+
return intervalCollection_1.Side.Before;
|
|
27
30
|
}
|
|
28
31
|
function maxSide(sideA, sideB) {
|
|
29
|
-
if (sideA === Side.Before && sideB === Side.Before) {
|
|
30
|
-
return Side.Before;
|
|
32
|
+
if (sideA === intervalCollection_1.Side.Before && sideB === intervalCollection_1.Side.Before) {
|
|
33
|
+
return intervalCollection_1.Side.Before;
|
|
31
34
|
}
|
|
32
|
-
return Side.After;
|
|
35
|
+
return intervalCollection_1.Side.After;
|
|
33
36
|
}
|
|
34
37
|
/**
|
|
35
38
|
* Interval implementation whose ends are associated with positions in a mutatable sequence.
|
|
@@ -57,16 +60,14 @@ function maxSide(sideA, sideB) {
|
|
|
57
60
|
* `mergeTreeReferencesCanSlideToEndpoint` feature flag set to true, the endpoints
|
|
58
61
|
* of the interval that are exclusive will have the ability to slide to these
|
|
59
62
|
* special endpoint segments.
|
|
60
|
-
* @
|
|
63
|
+
* @alpha
|
|
61
64
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
* @internal
|
|
65
|
-
*/
|
|
65
|
+
class SequenceInterval {
|
|
66
|
+
/***/
|
|
66
67
|
get stickiness() {
|
|
67
68
|
const startSegment = this.start.getSegment();
|
|
68
69
|
const endSegment = this.end.getSegment();
|
|
69
|
-
return computeStickinessFromSide(startSegment?.endpointType, this.startSide, endSegment?.endpointType, this.endSide);
|
|
70
|
+
return (0, intervalCollection_1.computeStickinessFromSide)(startSegment?.endpointType, this.startSide, endSegment?.endpointType, this.endSide);
|
|
70
71
|
}
|
|
71
72
|
constructor(client,
|
|
72
73
|
/**
|
|
@@ -78,22 +79,27 @@ export class SequenceInterval {
|
|
|
78
79
|
* End endpoint of this interval.
|
|
79
80
|
* @remarks This endpoint can be resolved into a character position using the SharedString it's a part of.
|
|
80
81
|
*/
|
|
81
|
-
end, intervalType, props, startSide = Side.Before, endSide = Side.Before) {
|
|
82
|
+
end, intervalType, props, startSide = intervalCollection_1.Side.Before, endSide = intervalCollection_1.Side.Before) {
|
|
82
83
|
this.client = client;
|
|
83
84
|
this.start = start;
|
|
84
85
|
this.end = end;
|
|
85
86
|
this.intervalType = intervalType;
|
|
86
87
|
this.startSide = startSide;
|
|
87
88
|
this.endSide = endSide;
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
/**
|
|
90
|
+
* {@inheritDoc ISerializableInterval.properties}
|
|
91
|
+
*/
|
|
92
|
+
this.properties = (0, merge_tree_1.createMap)();
|
|
93
|
+
/**
|
|
94
|
+
* {@inheritDoc ISerializableInterval.propertyManager}
|
|
95
|
+
*/
|
|
96
|
+
this.propertyManager = new merge_tree_1.PropertiesManager();
|
|
90
97
|
if (props) {
|
|
91
98
|
this.addProperties(props);
|
|
92
99
|
}
|
|
93
100
|
}
|
|
94
101
|
/**
|
|
95
102
|
* Subscribes to position change events on this interval if there are no current listeners.
|
|
96
|
-
* @internal
|
|
97
103
|
*/
|
|
98
104
|
addPositionChangeListeners(beforePositionChange, afterPositionChange) {
|
|
99
105
|
var _a, _b;
|
|
@@ -110,7 +116,6 @@ export class SequenceInterval {
|
|
|
110
116
|
}
|
|
111
117
|
/**
|
|
112
118
|
* Removes the currently subscribed position change listeners.
|
|
113
|
-
* @internal
|
|
114
119
|
*/
|
|
115
120
|
removePositionChangeListeners() {
|
|
116
121
|
if (this.callbacks) {
|
|
@@ -121,12 +126,11 @@ export class SequenceInterval {
|
|
|
121
126
|
}
|
|
122
127
|
/**
|
|
123
128
|
* {@inheritDoc ISerializableInterval.serialize}
|
|
124
|
-
* @internal
|
|
125
129
|
*/
|
|
126
130
|
serialize() {
|
|
127
131
|
const startPosition = this.client.localReferencePositionToPosition(this.start);
|
|
128
132
|
const endPosition = this.client.localReferencePositionToPosition(this.end);
|
|
129
|
-
const { startSide, endSide } = sidesFromStickiness(this.stickiness);
|
|
133
|
+
const { startSide, endSide } = (0, intervalCollection_1.sidesFromStickiness)(this.stickiness);
|
|
130
134
|
const serializedInterval = {
|
|
131
135
|
end: endPosition,
|
|
132
136
|
intervalType: this.intervalType,
|
|
@@ -177,7 +181,7 @@ export class SequenceInterval {
|
|
|
177
181
|
* {@inheritDoc IInterval.compareStart}
|
|
178
182
|
*/
|
|
179
183
|
compareStart(b) {
|
|
180
|
-
const dist = compareReferencePositions(this.start, b.start);
|
|
184
|
+
const dist = (0, merge_tree_1.compareReferencePositions)(this.start, b.start);
|
|
181
185
|
if (dist === 0) {
|
|
182
186
|
return compareSides(this.startSide, b.startSide);
|
|
183
187
|
}
|
|
@@ -187,7 +191,7 @@ export class SequenceInterval {
|
|
|
187
191
|
* {@inheritDoc IInterval.compareEnd}
|
|
188
192
|
*/
|
|
189
193
|
compareEnd(b) {
|
|
190
|
-
const dist = compareReferencePositions(this.end, b.end);
|
|
194
|
+
const dist = (0, merge_tree_1.compareReferencePositions)(this.end, b.end);
|
|
191
195
|
if (dist === 0) {
|
|
192
196
|
return compareSides(b.endSide, this.endSide);
|
|
193
197
|
}
|
|
@@ -197,8 +201,8 @@ export class SequenceInterval {
|
|
|
197
201
|
* {@inheritDoc IInterval.overlaps}
|
|
198
202
|
*/
|
|
199
203
|
overlaps(b) {
|
|
200
|
-
const result = compareReferencePositions(this.start, b.end) <= 0 &&
|
|
201
|
-
compareReferencePositions(this.end, b.start) >= 0;
|
|
204
|
+
const result = (0, merge_tree_1.compareReferencePositions)(this.start, b.end) <= 0 &&
|
|
205
|
+
(0, merge_tree_1.compareReferencePositions)(this.end, b.start) >= 0;
|
|
202
206
|
return result;
|
|
203
207
|
}
|
|
204
208
|
/**
|
|
@@ -206,16 +210,15 @@ export class SequenceInterval {
|
|
|
206
210
|
*/
|
|
207
211
|
getIntervalId() {
|
|
208
212
|
const id = this.properties?.[reservedIntervalIdKey];
|
|
209
|
-
assert(id !== undefined, 0x5e2 /* interval ID should not be undefined */);
|
|
213
|
+
(0, core_utils_1.assert)(id !== undefined, 0x5e2 /* interval ID should not be undefined */);
|
|
210
214
|
return `${id}`;
|
|
211
215
|
}
|
|
212
216
|
/**
|
|
213
217
|
* {@inheritDoc IInterval.union}
|
|
214
|
-
* @internal
|
|
215
218
|
*/
|
|
216
219
|
union(b) {
|
|
217
|
-
const newStart = minReferencePosition(this.start, b.start);
|
|
218
|
-
const newEnd = maxReferencePosition(this.end, b.end);
|
|
220
|
+
const newStart = (0, merge_tree_1.minReferencePosition)(this.start, b.start);
|
|
221
|
+
const newEnd = (0, merge_tree_1.maxReferencePosition)(this.end, b.end);
|
|
219
222
|
let startSide;
|
|
220
223
|
if (this.start === b.start) {
|
|
221
224
|
startSide = minSide(this.startSide, b.startSide);
|
|
@@ -234,11 +237,9 @@ export class SequenceInterval {
|
|
|
234
237
|
}
|
|
235
238
|
/**
|
|
236
239
|
* {@inheritDoc ISerializableInterval.addProperties}
|
|
237
|
-
* @internal
|
|
238
240
|
*/
|
|
239
|
-
addProperties(newProps, collab = false, seq
|
|
240
|
-
this.
|
|
241
|
-
return this.propertyManager.addProperties(this.properties, newProps, op, seq, collab);
|
|
241
|
+
addProperties(newProps, collab = false, seq) {
|
|
242
|
+
return this.propertyManager.addProperties(this.properties, newProps, seq, collab);
|
|
242
243
|
}
|
|
243
244
|
/**
|
|
244
245
|
* @returns whether this interval overlaps two numerical positions.
|
|
@@ -250,50 +251,41 @@ export class SequenceInterval {
|
|
|
250
251
|
}
|
|
251
252
|
/**
|
|
252
253
|
* {@inheritDoc IInterval.modify}
|
|
253
|
-
* @internal
|
|
254
254
|
*/
|
|
255
255
|
modify(label, start, end, op, localSeq, useNewSlidingBehavior = false) {
|
|
256
|
-
const { startSide, endSide, startPos, endPos } = endpointPosAndSide(start, end);
|
|
257
|
-
const stickiness = computeStickinessFromSide(startPos ?? this.start.getSegment()?.endpointType, startSide ?? this.startSide, endPos ?? this.end.getSegment()?.endpointType, endSide ?? this.endSide);
|
|
256
|
+
const { startSide, endSide, startPos, endPos } = (0, intervalCollection_1.endpointPosAndSide)(start, end);
|
|
257
|
+
const stickiness = (0, intervalCollection_1.computeStickinessFromSide)(startPos ?? this.start.getSegment()?.endpointType, startSide ?? this.startSide, endPos ?? this.end.getSegment()?.endpointType, endSide ?? this.endSide);
|
|
258
258
|
const getRefType = (baseType) => {
|
|
259
259
|
let refType = baseType;
|
|
260
260
|
if (op === undefined) {
|
|
261
|
-
refType &= ~ReferenceType.SlideOnRemove;
|
|
262
|
-
refType |= ReferenceType.StayOnRemove;
|
|
261
|
+
refType &= ~merge_tree_1.ReferenceType.SlideOnRemove;
|
|
262
|
+
refType |= merge_tree_1.ReferenceType.StayOnRemove;
|
|
263
263
|
}
|
|
264
264
|
return refType;
|
|
265
265
|
};
|
|
266
266
|
let startRef = this.start;
|
|
267
267
|
if (startPos !== undefined) {
|
|
268
|
-
startRef = createPositionReference(this.client, startPos, getRefType(this.start.refType), op, undefined, localSeq, startReferenceSlidingPreference(stickiness), startReferenceSlidingPreference(stickiness) === SlidingPreference.BACKWARD, useNewSlidingBehavior);
|
|
268
|
+
startRef = createPositionReference(this.client, startPos, getRefType(this.start.refType), op, undefined, localSeq, (0, intervalUtils_1.startReferenceSlidingPreference)(stickiness), (0, intervalUtils_1.startReferenceSlidingPreference)(stickiness) === merge_tree_1.SlidingPreference.BACKWARD, useNewSlidingBehavior);
|
|
269
269
|
if (this.start.properties) {
|
|
270
270
|
startRef.addProperties(this.start.properties);
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
let endRef = this.end;
|
|
274
274
|
if (endPos !== undefined) {
|
|
275
|
-
endRef = createPositionReference(this.client, endPos, getRefType(this.end.refType), op, undefined, localSeq, endReferenceSlidingPreference(stickiness), endReferenceSlidingPreference(stickiness) === SlidingPreference.FORWARD, useNewSlidingBehavior);
|
|
275
|
+
endRef = createPositionReference(this.client, endPos, getRefType(this.end.refType), op, undefined, localSeq, (0, intervalUtils_1.endReferenceSlidingPreference)(stickiness), (0, intervalUtils_1.endReferenceSlidingPreference)(stickiness) === merge_tree_1.SlidingPreference.FORWARD, useNewSlidingBehavior);
|
|
276
276
|
if (this.end.properties) {
|
|
277
277
|
endRef.addProperties(this.end.properties);
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
const newInterval = new SequenceInterval(this.client, startRef, endRef, this.intervalType, undefined, startSide ?? this.startSide, endSide ?? this.endSide);
|
|
281
281
|
if (this.properties) {
|
|
282
|
-
newInterval.initializeProperties();
|
|
283
282
|
this.propertyManager.copyTo(this.properties, newInterval.properties, newInterval.propertyManager);
|
|
284
283
|
}
|
|
285
284
|
return newInterval;
|
|
286
285
|
}
|
|
287
|
-
initializeProperties() {
|
|
288
|
-
if (!this.propertyManager) {
|
|
289
|
-
this.propertyManager = new PropertiesManager();
|
|
290
|
-
}
|
|
291
|
-
if (!this.properties) {
|
|
292
|
-
this.properties = createMap();
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
286
|
}
|
|
296
|
-
|
|
287
|
+
exports.SequenceInterval = SequenceInterval;
|
|
288
|
+
function createPositionReferenceFromSegoff(client, segoff, refType, op, localSeq, fromSnapshot, slidingPreference, canSlideToEndpoint) {
|
|
297
289
|
if (segoff === "start" || segoff === "end") {
|
|
298
290
|
return client.createLocalReferencePosition(segoff, undefined, refType, undefined, slidingPreference, canSlideToEndpoint);
|
|
299
291
|
}
|
|
@@ -309,15 +301,16 @@ export function createPositionReferenceFromSegoff(client, segoff, refType, op, l
|
|
|
309
301
|
if (!op &&
|
|
310
302
|
!localSeq &&
|
|
311
303
|
!fromSnapshot &&
|
|
312
|
-
!refTypeIncludesFlag(refType, ReferenceType.Transient)) {
|
|
313
|
-
throw new UsageError("Non-transient references need segment");
|
|
304
|
+
!(0, merge_tree_1.refTypeIncludesFlag)(refType, merge_tree_1.ReferenceType.Transient)) {
|
|
305
|
+
throw new telemetry_utils_1.UsageError("Non-transient references need segment");
|
|
314
306
|
}
|
|
315
|
-
return createDetachedLocalReferencePosition(refType);
|
|
307
|
+
return (0, merge_tree_1.createDetachedLocalReferencePosition)(refType);
|
|
316
308
|
}
|
|
309
|
+
exports.createPositionReferenceFromSegoff = createPositionReferenceFromSegoff;
|
|
317
310
|
function createPositionReference(client, pos, refType, op, fromSnapshot, localSeq, slidingPreference, exclusive = false, useNewSlidingBehavior = false) {
|
|
318
311
|
let segoff;
|
|
319
312
|
if (op) {
|
|
320
|
-
assert((refType & ReferenceType.SlideOnRemove) !== 0, 0x2f5 /* op create references must be SlideOnRemove */);
|
|
313
|
+
(0, core_utils_1.assert)((refType & merge_tree_1.ReferenceType.SlideOnRemove) !== 0, 0x2f5 /* op create references must be SlideOnRemove */);
|
|
321
314
|
if (pos === "start" || pos === "end") {
|
|
322
315
|
segoff = pos;
|
|
323
316
|
}
|
|
@@ -326,11 +319,11 @@ function createPositionReference(client, pos, refType, op, fromSnapshot, localSe
|
|
|
326
319
|
referenceSequenceNumber: op.referenceSequenceNumber,
|
|
327
320
|
clientId: op.clientId,
|
|
328
321
|
});
|
|
329
|
-
segoff = getSlideToSegoff(segoff, undefined, useNewSlidingBehavior);
|
|
322
|
+
segoff = (0, merge_tree_1.getSlideToSegoff)(segoff, undefined, useNewSlidingBehavior);
|
|
330
323
|
}
|
|
331
324
|
}
|
|
332
325
|
else {
|
|
333
|
-
assert((refType & ReferenceType.SlideOnRemove) === 0 || !!fromSnapshot, 0x2f6 /* SlideOnRemove references must be op created */);
|
|
326
|
+
(0, core_utils_1.assert)((refType & merge_tree_1.ReferenceType.SlideOnRemove) === 0 || !!fromSnapshot, 0x2f6 /* SlideOnRemove references must be op created */);
|
|
334
327
|
segoff =
|
|
335
328
|
pos === "start" || pos === "end"
|
|
336
329
|
? pos
|
|
@@ -338,51 +331,48 @@ function createPositionReference(client, pos, refType, op, fromSnapshot, localSe
|
|
|
338
331
|
}
|
|
339
332
|
return createPositionReferenceFromSegoff(client, segoff, refType, op, localSeq, fromSnapshot, slidingPreference, exclusive);
|
|
340
333
|
}
|
|
341
|
-
|
|
342
|
-
const { startPos, startSide, endPos, endSide } = endpointPosAndSide(start ?? "start", end ?? "end");
|
|
343
|
-
assert(startPos !== undefined &&
|
|
334
|
+
function createSequenceInterval(label, start, end, client, intervalType, op, fromSnapshot, useNewSlidingBehavior = false) {
|
|
335
|
+
const { startPos, startSide, endPos, endSide } = (0, intervalCollection_1.endpointPosAndSide)(start ?? "start", end ?? "end");
|
|
336
|
+
(0, core_utils_1.assert)(startPos !== undefined &&
|
|
344
337
|
endPos !== undefined &&
|
|
345
338
|
startSide !== undefined &&
|
|
346
339
|
endSide !== undefined, 0x794 /* start and end cannot be undefined because they were not passed in as undefined */);
|
|
347
|
-
const stickiness = computeStickinessFromSide(startPos, startSide, endPos, endSide);
|
|
348
|
-
let beginRefType = ReferenceType.RangeBegin;
|
|
349
|
-
let endRefType = ReferenceType.RangeEnd;
|
|
350
|
-
if (intervalType === IntervalType.Transient) {
|
|
351
|
-
beginRefType = ReferenceType.Transient;
|
|
352
|
-
endRefType = ReferenceType.Transient;
|
|
340
|
+
const stickiness = (0, intervalCollection_1.computeStickinessFromSide)(startPos, startSide, endPos, endSide);
|
|
341
|
+
let beginRefType = merge_tree_1.ReferenceType.RangeBegin;
|
|
342
|
+
let endRefType = merge_tree_1.ReferenceType.RangeEnd;
|
|
343
|
+
if (intervalType === intervalUtils_1.IntervalType.Transient) {
|
|
344
|
+
beginRefType = merge_tree_1.ReferenceType.Transient;
|
|
345
|
+
endRefType = merge_tree_1.ReferenceType.Transient;
|
|
353
346
|
}
|
|
354
347
|
else {
|
|
355
|
-
if (intervalType === IntervalType.Nest) {
|
|
356
|
-
beginRefType = ReferenceType.NestBegin;
|
|
357
|
-
endRefType = ReferenceType.NestEnd;
|
|
358
|
-
}
|
|
359
348
|
// All non-transient interval references must eventually be SlideOnRemove
|
|
360
349
|
// To ensure eventual consistency, they must start as StayOnRemove when
|
|
361
350
|
// pending (created locally and creation op is not acked)
|
|
362
351
|
if (op ?? fromSnapshot) {
|
|
363
|
-
beginRefType |= ReferenceType.SlideOnRemove;
|
|
364
|
-
endRefType |= ReferenceType.SlideOnRemove;
|
|
352
|
+
beginRefType |= merge_tree_1.ReferenceType.SlideOnRemove;
|
|
353
|
+
endRefType |= merge_tree_1.ReferenceType.SlideOnRemove;
|
|
365
354
|
}
|
|
366
355
|
else {
|
|
367
|
-
beginRefType |= ReferenceType.StayOnRemove;
|
|
368
|
-
endRefType |= ReferenceType.StayOnRemove;
|
|
356
|
+
beginRefType |= merge_tree_1.ReferenceType.StayOnRemove;
|
|
357
|
+
endRefType |= merge_tree_1.ReferenceType.StayOnRemove;
|
|
369
358
|
}
|
|
370
359
|
}
|
|
371
|
-
const startLref = createPositionReference(client, startPos, beginRefType, op, fromSnapshot, undefined, startReferenceSlidingPreference(stickiness), startReferenceSlidingPreference(stickiness) === SlidingPreference.BACKWARD, useNewSlidingBehavior);
|
|
372
|
-
const endLref = createPositionReference(client, endPos, endRefType, op, fromSnapshot, undefined, endReferenceSlidingPreference(stickiness), endReferenceSlidingPreference(stickiness) === SlidingPreference.FORWARD, useNewSlidingBehavior);
|
|
360
|
+
const startLref = createPositionReference(client, startPos, beginRefType, op, fromSnapshot, undefined, (0, intervalUtils_1.startReferenceSlidingPreference)(stickiness), (0, intervalUtils_1.startReferenceSlidingPreference)(stickiness) === merge_tree_1.SlidingPreference.BACKWARD, useNewSlidingBehavior);
|
|
361
|
+
const endLref = createPositionReference(client, endPos, endRefType, op, fromSnapshot, undefined, (0, intervalUtils_1.endReferenceSlidingPreference)(stickiness), (0, intervalUtils_1.endReferenceSlidingPreference)(stickiness) === merge_tree_1.SlidingPreference.FORWARD, useNewSlidingBehavior);
|
|
373
362
|
const rangeProp = {
|
|
374
|
-
[reservedRangeLabelsKey]: [label],
|
|
363
|
+
[merge_tree_1.reservedRangeLabelsKey]: [label],
|
|
375
364
|
};
|
|
376
365
|
startLref.addProperties(rangeProp);
|
|
377
366
|
endLref.addProperties(rangeProp);
|
|
378
367
|
const ival = new SequenceInterval(client, startLref, endLref, intervalType, rangeProp, startSide, endSide);
|
|
379
368
|
return ival;
|
|
380
369
|
}
|
|
370
|
+
exports.createSequenceInterval = createSequenceInterval;
|
|
381
371
|
/**
|
|
382
372
|
* @deprecated The methods within have substitutions
|
|
383
|
-
* @
|
|
373
|
+
* @internal
|
|
384
374
|
*/
|
|
385
|
-
|
|
375
|
+
exports.sequenceIntervalHelpers = {
|
|
386
376
|
create: createSequenceInterval,
|
|
387
377
|
};
|
|
388
378
|
//# sourceMappingURL=sequenceInterval.js.map
|