@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
package/dist/packageVersion.js
CHANGED
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.pkgVersion = exports.pkgName = void 0;
|
|
10
10
|
exports.pkgName = "@fluidframework/sequence";
|
|
11
|
-
exports.pkgVersion = "2.0.0-internal.
|
|
11
|
+
exports.pkgVersion = "2.0.0-internal.8.0.0";
|
|
12
12
|
//# sourceMappingURL=packageVersion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,0BAA0B,CAAC;AACrC,QAAA,UAAU,GAAG,sBAAsB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/sequence\";\nexport const pkgVersion = \"2.0.0-internal.
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,0BAA0B,CAAC;AACrC,QAAA,UAAU,GAAG,sBAAsB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/sequence\";\nexport const pkgVersion = \"2.0.0-internal.8.0.0\";\n"]}
|
package/dist/revertibles.d.ts
CHANGED
|
@@ -8,15 +8,12 @@ import { SharedString } from "./sharedString";
|
|
|
8
8
|
import { SequenceDeltaEvent } from "./sequenceDeltaEvent";
|
|
9
9
|
/**
|
|
10
10
|
* Data for undoing edits on SharedStrings and Intervals.
|
|
11
|
-
*
|
|
12
|
-
* @alpha
|
|
11
|
+
* @internal
|
|
13
12
|
*/
|
|
14
13
|
export type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;
|
|
15
|
-
type IntervalOpType = (typeof IntervalOpType)[keyof typeof IntervalOpType];
|
|
16
14
|
/**
|
|
17
15
|
* Data for undoing edits affecting Intervals.
|
|
18
|
-
*
|
|
19
|
-
* @alpha
|
|
16
|
+
* @internal
|
|
20
17
|
*/
|
|
21
18
|
export type IntervalRevertible = {
|
|
22
19
|
event: typeof IntervalOpType.CHANGE;
|
|
@@ -52,41 +49,38 @@ export type IntervalRevertible = {
|
|
|
52
49
|
};
|
|
53
50
|
/**
|
|
54
51
|
* Create revertibles for adding an interval
|
|
55
|
-
* @
|
|
52
|
+
* @internal
|
|
56
53
|
*/
|
|
57
54
|
export declare function appendAddIntervalToRevertibles(interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
|
|
58
55
|
/**
|
|
59
56
|
* Create revertibles for deleting an interval
|
|
60
|
-
* @
|
|
57
|
+
* @internal
|
|
61
58
|
*/
|
|
62
59
|
export declare function appendDeleteIntervalToRevertibles(string: SharedString, interval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
|
|
63
60
|
/**
|
|
64
61
|
* Create revertibles for moving endpoints of an interval
|
|
65
|
-
* @
|
|
62
|
+
* @internal
|
|
66
63
|
*/
|
|
67
64
|
export declare function appendChangeIntervalToRevertibles(string: SharedString, newInterval: SequenceInterval, previousInterval: SequenceInterval, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
|
|
68
65
|
/**
|
|
69
66
|
* Create revertibles for changing properties of an interval
|
|
70
|
-
* @
|
|
67
|
+
* @internal
|
|
71
68
|
*/
|
|
72
69
|
export declare function appendIntervalPropertyChangedToRevertibles(interval: SequenceInterval, deltas: PropertySet, revertibles: SharedStringRevertible[]): SharedStringRevertible[];
|
|
73
70
|
/**
|
|
74
71
|
* Create revertibles for SharedStringDeltas, handling indirectly modified intervals
|
|
75
72
|
* (e.g. reverting remove of a range that contains an interval will move the interval back)
|
|
76
|
-
*
|
|
77
|
-
* @alpha
|
|
73
|
+
* @internal
|
|
78
74
|
*/
|
|
79
75
|
export declare function appendSharedStringDeltaToRevertibles(string: SharedString, delta: SequenceDeltaEvent, revertibles: SharedStringRevertible[]): void;
|
|
80
76
|
/**
|
|
81
77
|
* Clean up resources held by revertibles that are no longer needed.
|
|
82
|
-
* @
|
|
78
|
+
* @internal
|
|
83
79
|
*/
|
|
84
80
|
export declare function discardSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
|
|
85
81
|
/**
|
|
86
82
|
* Invoke revertibles to reverse prior edits
|
|
87
|
-
*
|
|
88
|
-
* @alpha
|
|
83
|
+
* @internal
|
|
89
84
|
*/
|
|
90
85
|
export declare function revertSharedStringRevertibles(sharedString: SharedString, revertibles: SharedStringRevertible[]): void;
|
|
91
|
-
export {};
|
|
92
86
|
//# sourceMappingURL=revertibles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revertibles.d.ts","sourceRoot":"","sources":["../src/revertibles.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"revertibles.d.ts","sourceRoot":"","sources":["../src/revertibles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAIN,sBAAsB,EAEtB,wBAAwB,EAExB,WAAW,EAQX,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAuB,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAuB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/E;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,wBAAwB,GAAG,kBAAkB,CAAC;AAInF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC3B;IACA,KAAK,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC;IACpC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,sBAAsB,CAAC;IAC9B,GAAG,EAAE,sBAAsB,CAAC;CAC3B,GACD;IACA,KAAK,EAAE,OAAO,cAAc,CAAC,GAAG,CAAC;IACjC,QAAQ,EAAE,gBAAgB,CAAC;CAC1B,GACD;IACA,KAAK,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC;IACpC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,sBAAsB,CAAC;IAC9B,GAAG,EAAE,sBAAsB,CAAC;CAC3B,GACD;IACA,KAAK,EAAE,OAAO,cAAc,CAAC,gBAAgB,CAAC;IAC9C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,cAAc,EAAE,WAAW,CAAC;CAC3B,GACD;IACA,KAAK,EAAE,OAAO,cAAc,CAAC,eAAe,CAAC;IAC7C,SAAS,EAAE;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,EAAE,CAAC;IAEJ,cAAc,EAAE;QACf,UAAU,EAAE,kBAAkB,CAAC;QAC/B,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;KACjB,EAAE,CAAC;IACJ,mBAAmB,EAAE,wBAAwB,CAAC;CAC7C,CAAC;AAaL;;;GAGG;AACH,wBAAgB,8BAA8B,CAC7C,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,sBAAsB,EAAE,4BAQrC;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAChD,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,sBAAsB,EAAE,GACnC,sBAAsB,EAAE,CA0C1B;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAChD,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,gBAAgB,EAC7B,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,sBAAsB,EAAE,4BAwCrC;AAED;;;GAGG;AACH,wBAAgB,0CAA0C,CACzD,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,sBAAsB,EAAE,4BASrC;AA2CD;;;;GAIG;AACH,wBAAgB,oCAAoC,CACnD,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,sBAAsB,EAAE,QAoFrC;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC7C,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,sBAAsB,EAAE,QAUrC;AAqRD;;;GAGG;AACH,wBAAgB,6BAA6B,CAC5C,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,sBAAsB,EAAE,QA8BrC"}
|
package/dist/revertibles.js
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.revertSharedStringRevertibles = exports.discardSharedStringRevertibles = exports.appendSharedStringDeltaToRevertibles = exports.appendIntervalPropertyChangedToRevertibles = exports.appendChangeIntervalToRevertibles = exports.appendDeleteIntervalToRevertibles = exports.appendAddIntervalToRevertibles = void 0;
|
|
8
|
-
/* eslint-disable import/no-deprecated */
|
|
9
8
|
/* eslint-disable no-bitwise */
|
|
10
9
|
const core_utils_1 = require("@fluidframework/core-utils");
|
|
11
10
|
const merge_tree_1 = require("@fluidframework/merge-tree");
|
|
@@ -21,7 +20,7 @@ function getUpdatedId(intervalId) {
|
|
|
21
20
|
}
|
|
22
21
|
/**
|
|
23
22
|
* Create revertibles for adding an interval
|
|
24
|
-
* @
|
|
23
|
+
* @internal
|
|
25
24
|
*/
|
|
26
25
|
function appendAddIntervalToRevertibles(interval, revertibles) {
|
|
27
26
|
revertibles.push({
|
|
@@ -33,14 +32,20 @@ function appendAddIntervalToRevertibles(interval, revertibles) {
|
|
|
33
32
|
exports.appendAddIntervalToRevertibles = appendAddIntervalToRevertibles;
|
|
34
33
|
/**
|
|
35
34
|
* Create revertibles for deleting an interval
|
|
36
|
-
* @
|
|
35
|
+
* @internal
|
|
37
36
|
*/
|
|
38
37
|
function appendDeleteIntervalToRevertibles(string, interval, revertibles) {
|
|
39
38
|
const startSeg = interval.start.getSegment();
|
|
39
|
+
if (!startSeg) {
|
|
40
|
+
return revertibles;
|
|
41
|
+
}
|
|
40
42
|
const startType = startSeg.removedSeq !== undefined
|
|
41
43
|
? merge_tree_1.ReferenceType.SlideOnRemove | merge_tree_1.ReferenceType.RangeBegin
|
|
42
44
|
: merge_tree_1.ReferenceType.StayOnRemove | merge_tree_1.ReferenceType.RangeBegin;
|
|
43
45
|
const endSeg = interval.end.getSegment();
|
|
46
|
+
if (!endSeg) {
|
|
47
|
+
return revertibles;
|
|
48
|
+
}
|
|
44
49
|
const endType = endSeg.removedSeq !== undefined
|
|
45
50
|
? merge_tree_1.ReferenceType.SlideOnRemove | merge_tree_1.ReferenceType.RangeEnd
|
|
46
51
|
: merge_tree_1.ReferenceType.StayOnRemove | merge_tree_1.ReferenceType.RangeEnd;
|
|
@@ -60,7 +65,7 @@ function appendDeleteIntervalToRevertibles(string, interval, revertibles) {
|
|
|
60
65
|
exports.appendDeleteIntervalToRevertibles = appendDeleteIntervalToRevertibles;
|
|
61
66
|
/**
|
|
62
67
|
* Create revertibles for moving endpoints of an interval
|
|
63
|
-
* @
|
|
68
|
+
* @internal
|
|
64
69
|
*/
|
|
65
70
|
function appendChangeIntervalToRevertibles(string, newInterval, previousInterval, revertibles) {
|
|
66
71
|
const startSeg = previousInterval.start.getSegment();
|
|
@@ -90,7 +95,7 @@ function appendChangeIntervalToRevertibles(string, newInterval, previousInterval
|
|
|
90
95
|
exports.appendChangeIntervalToRevertibles = appendChangeIntervalToRevertibles;
|
|
91
96
|
/**
|
|
92
97
|
* Create revertibles for changing properties of an interval
|
|
93
|
-
* @
|
|
98
|
+
* @internal
|
|
94
99
|
*/
|
|
95
100
|
function appendIntervalPropertyChangedToRevertibles(interval, deltas, revertibles) {
|
|
96
101
|
revertibles.push({
|
|
@@ -131,8 +136,7 @@ function addIfRevertibleRef(ref, segmentLengths, revertibleRefs) {
|
|
|
131
136
|
/**
|
|
132
137
|
* Create revertibles for SharedStringDeltas, handling indirectly modified intervals
|
|
133
138
|
* (e.g. reverting remove of a range that contains an interval will move the interval back)
|
|
134
|
-
*
|
|
135
|
-
* @alpha
|
|
139
|
+
* @internal
|
|
136
140
|
*/
|
|
137
141
|
function appendSharedStringDeltaToRevertibles(string, delta, revertibles) {
|
|
138
142
|
if (delta.ranges.length === 0) {
|
|
@@ -206,7 +210,7 @@ function appendSharedStringDeltaToRevertibles(string, delta, revertibles) {
|
|
|
206
210
|
exports.appendSharedStringDeltaToRevertibles = appendSharedStringDeltaToRevertibles;
|
|
207
211
|
/**
|
|
208
212
|
* Clean up resources held by revertibles that are no longer needed.
|
|
209
|
-
* @
|
|
213
|
+
* @internal
|
|
210
214
|
*/
|
|
211
215
|
function discardSharedStringRevertibles(sharedString, revertibles) {
|
|
212
216
|
revertibles.forEach((r) => {
|
|
@@ -329,6 +333,7 @@ function newEndpointPosition(offset, restoredRanges, sharedString) {
|
|
|
329
333
|
const pos = newPosition(offset, restoredRanges);
|
|
330
334
|
return pos === undefined ? undefined : sharedString.getPosition(pos.segment) + pos.offset;
|
|
331
335
|
}
|
|
336
|
+
// eslint-disable-next-line import/no-deprecated
|
|
332
337
|
class SortedRangeSet extends merge_tree_1.SortedSet {
|
|
333
338
|
getKey(item) {
|
|
334
339
|
return item.ranges[0].segment.ordinal;
|
|
@@ -383,8 +388,7 @@ function revertLocalSequenceRemove(sharedString, revertible) {
|
|
|
383
388
|
}
|
|
384
389
|
/**
|
|
385
390
|
* Invoke revertibles to reverse prior edits
|
|
386
|
-
*
|
|
387
|
-
* @alpha
|
|
391
|
+
* @internal
|
|
388
392
|
*/
|
|
389
393
|
function revertSharedStringRevertibles(sharedString, revertibles) {
|
|
390
394
|
while (revertibles.length > 0) {
|
package/dist/revertibles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revertibles.js","sourceRoot":"","sources":["../src/revertibles.ts"],"names":[],"mappings":"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","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 { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport {\n\tappendToMergeTreeDeltaRevertibles,\n\tdiscardMergeTreeDeltaRevertible,\n\tisMergeTreeDeltaRevertible,\n\tLocalReferencePosition,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaRevertible,\n\tMergeTreeDeltaType,\n\tPropertySet,\n\tReferenceType,\n\trefTypeIncludesFlag,\n\trevertMergeTreeDeltaRevertibles,\n\tSortedSet,\n\tgetSlideToSegoff,\n\tSlidingPreference,\n} from \"@fluidframework/merge-tree\";\nimport { InteriorSequencePlace, Side } from \"./intervalCollection\";\nimport { IntervalOpType, SequenceInterval } from \"./intervals\";\nimport { SharedString, SharedStringSegment } from \"./sharedString\";\nimport { ISequenceDeltaRange, SequenceDeltaEvent } from \"./sequenceDeltaEvent\";\n\n/**\n * Data for undoing edits on SharedStrings and Intervals.\n *\n * @alpha\n */\nexport type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;\n\nconst idMap = new Map<string, string>();\n\ntype IntervalOpType = (typeof IntervalOpType)[keyof typeof IntervalOpType];\n\n/**\n * Data for undoing edits affecting Intervals.\n *\n * @alpha\n */\nexport type IntervalRevertible =\n\t| {\n\t\t\tevent: typeof IntervalOpType.CHANGE;\n\t\t\tinterval: SequenceInterval;\n\t\t\tstart: LocalReferencePosition;\n\t\t\tend: LocalReferencePosition;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.ADD;\n\t\t\tinterval: SequenceInterval;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.DELETE;\n\t\t\tinterval: SequenceInterval;\n\t\t\tstart: LocalReferencePosition;\n\t\t\tend: LocalReferencePosition;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.PROPERTY_CHANGED;\n\t\t\tinterval: SequenceInterval;\n\t\t\tpropertyDeltas: PropertySet;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.POSITION_REMOVE;\n\t\t\tintervals: {\n\t\t\t\tintervalId: string;\n\t\t\t\tlabel: string;\n\t\t\t\tstartOffset?: number; // interval start index within a removed range\n\t\t\t\tendOffset?: number; // interval end index within a removed range\n\t\t\t}[];\n\t\t\t// local refs used by IntervalOpType.CHANGE and DELETE revertibles\n\t\t\trevertibleRefs: {\n\t\t\t\trevertible: IntervalRevertible;\n\t\t\t\toffset: number;\n\t\t\t\tisStart: boolean;\n\t\t\t}[];\n\t\t\tmergeTreeRevertible: MergeTreeDeltaRevertible;\n\t };\n\ntype TypedRevertible<T extends IntervalRevertible[\"event\"]> = IntervalRevertible & { event: T };\n\nfunction getUpdatedIdFromInterval(interval: SequenceInterval): string {\n\tconst maybeId = interval.getIntervalId();\n\treturn getUpdatedId(maybeId);\n}\n\nfunction getUpdatedId(intervalId: string): string {\n\treturn idMap.get(intervalId) ?? intervalId;\n}\n\n/**\n * Create revertibles for adding an interval\n * @alpha\n */\nexport function appendAddIntervalToRevertibles(\n\tinterval: SequenceInterval,\n\trevertibles: SharedStringRevertible[],\n) {\n\trevertibles.push({\n\t\tevent: IntervalOpType.ADD,\n\t\tinterval,\n\t});\n\n\treturn revertibles;\n}\n\n/**\n * Create revertibles for deleting an interval\n * @alpha\n */\nexport function appendDeleteIntervalToRevertibles(\n\tstring: SharedString,\n\tinterval: SequenceInterval,\n\trevertibles: SharedStringRevertible[],\n) {\n\tconst startSeg = interval.start.getSegment() as SharedStringSegment;\n\tconst startType =\n\t\tstartSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeBegin;\n\tconst endSeg = interval.end.getSegment() as SharedStringSegment;\n\tconst endType =\n\t\tendSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeEnd;\n\tconst startRef = string.createLocalReferencePosition(\n\t\tstartSeg,\n\t\tinterval.start.getOffset(),\n\t\tstartType,\n\t\tundefined,\n\t\tinterval.start.slidingPreference,\n\t);\n\tconst endRef = string.createLocalReferencePosition(\n\t\tendSeg,\n\t\tinterval.end.getOffset(),\n\t\tendType,\n\t\tundefined,\n\t\tinterval.end.slidingPreference,\n\t);\n\tconst revertible = {\n\t\tevent: IntervalOpType.DELETE,\n\t\tinterval,\n\t\tstart: startRef,\n\t\tend: endRef,\n\t};\n\trevertible.start.addProperties({ revertible });\n\trevertible.end.addProperties({ revertible });\n\trevertibles.push(revertible);\n\n\treturn revertibles;\n}\n\n/**\n * Create revertibles for moving endpoints of an interval\n * @alpha\n */\nexport function appendChangeIntervalToRevertibles(\n\tstring: SharedString,\n\tnewInterval: SequenceInterval,\n\tpreviousInterval: SequenceInterval,\n\trevertibles: SharedStringRevertible[],\n) {\n\tconst startSeg = previousInterval.start.getSegment() as SharedStringSegment;\n\t// This logic is needed because the ReferenceType StayOnRemove cannot be used\n\t// on removed segments. This works for revertibles because the old position of the\n\t// interval within the removed segment is handled by the remove range revertible.\n\tconst startType =\n\t\tstartSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeBegin;\n\tconst endSeg = previousInterval.end.getSegment() as SharedStringSegment;\n\tconst endType =\n\t\tendSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeEnd;\n\tconst prevStartRef = string.createLocalReferencePosition(\n\t\tstartSeg,\n\t\tpreviousInterval.start.getOffset(),\n\t\tstartType,\n\t\tundefined,\n\t\tpreviousInterval.start.slidingPreference,\n\t);\n\tconst prevEndRef = string.createLocalReferencePosition(\n\t\tendSeg,\n\t\tpreviousInterval.end.getOffset(),\n\t\tendType,\n\t\tundefined,\n\t\tpreviousInterval.end.slidingPreference,\n\t);\n\tconst revertible = {\n\t\tevent: IntervalOpType.CHANGE,\n\t\tinterval: newInterval,\n\t\tstart: prevStartRef,\n\t\tend: prevEndRef,\n\t};\n\trevertible.start.addProperties({ revertible });\n\trevertible.end.addProperties({ revertible });\n\trevertibles.push(revertible);\n\n\treturn revertibles;\n}\n\n/**\n * Create revertibles for changing properties of an interval\n * @alpha\n */\nexport function appendIntervalPropertyChangedToRevertibles(\n\tinterval: SequenceInterval,\n\tdeltas: PropertySet,\n\trevertibles: SharedStringRevertible[],\n) {\n\trevertibles.push({\n\t\tevent: IntervalOpType.PROPERTY_CHANGED,\n\t\tinterval,\n\t\tpropertyDeltas: deltas,\n\t});\n\n\treturn revertibles;\n}\n\nfunction addIfIntervalEndpoint(\n\tref: LocalReferencePosition,\n\tsegmentLengths: number,\n\tstartIntervals: { offset: number; interval: SequenceInterval }[],\n\tendIntervals: { offset: number; interval: SequenceInterval }[],\n) {\n\tif (refTypeIncludesFlag(ref.refType, ReferenceType.RangeBegin)) {\n\t\tconst interval = ref.properties?.interval;\n\t\tif (interval && interval instanceof SequenceInterval) {\n\t\t\tstartIntervals.push({ offset: segmentLengths + interval.start.getOffset(), interval });\n\t\t\treturn true;\n\t\t}\n\t} else if (refTypeIncludesFlag(ref.refType, ReferenceType.RangeEnd)) {\n\t\tconst interval = ref.properties?.interval;\n\t\tif (interval && interval instanceof SequenceInterval) {\n\t\t\tendIntervals.push({ offset: segmentLengths + interval.end.getOffset(), interval });\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction addIfRevertibleRef(\n\tref: LocalReferencePosition,\n\tsegmentLengths: number,\n\trevertibleRefs: {\n\t\trevertible: IntervalRevertible;\n\t\toffset: number;\n\t\tisStart: boolean;\n\t}[],\n) {\n\tconst revertible = ref.properties?.revertible;\n\tif (revertible) {\n\t\trevertibleRefs.push({\n\t\t\trevertible,\n\t\t\toffset: segmentLengths + ref.getOffset(),\n\t\t\tisStart: refTypeIncludesFlag(ref.refType, ReferenceType.RangeBegin),\n\t\t});\n\t}\n}\n\n/**\n * Create revertibles for SharedStringDeltas, handling indirectly modified intervals\n * (e.g. reverting remove of a range that contains an interval will move the interval back)\n *\n * @alpha\n */\nexport function appendSharedStringDeltaToRevertibles(\n\tstring: SharedString,\n\tdelta: SequenceDeltaEvent,\n\trevertibles: SharedStringRevertible[],\n) {\n\tif (delta.ranges.length === 0) {\n\t\treturn;\n\t}\n\tif (delta.deltaOperation === MergeTreeDeltaType.REMOVE) {\n\t\tconst startIntervals: { offset: number; interval: SequenceInterval }[] = [];\n\t\tconst endIntervals: { offset: number; interval: SequenceInterval }[] = [];\n\t\tconst revertibleRefs: {\n\t\t\trevertible: IntervalRevertible;\n\t\t\toffset: number;\n\t\t\tisStart: boolean;\n\t\t}[] = [];\n\t\tlet segmentLengths = 0;\n\n\t\t// find interval endpoints in each segment\n\t\tfor (const deltaRange of delta.ranges) {\n\t\t\tconst refs = deltaRange.segment.localRefs;\n\t\t\tif (refs !== undefined && deltaRange.position !== -1) {\n\t\t\t\tfor (const ref of refs) {\n\t\t\t\t\taddIfIntervalEndpoint(ref, segmentLengths, startIntervals, endIntervals);\n\t\t\t\t\taddIfRevertibleRef(ref, segmentLengths, revertibleRefs);\n\t\t\t\t}\n\t\t\t}\n\t\t\tsegmentLengths += deltaRange.segment.cachedLength;\n\t\t}\n\n\t\tif (startIntervals.length > 0 || endIntervals.length > 0 || revertibleRefs.length > 0) {\n\t\t\tconst removeRevertibles: MergeTreeDeltaRevertible[] = [];\n\t\t\tappendToMergeTreeDeltaRevertibles(delta.deltaArgs, removeRevertibles);\n\t\t\tassert(\n\t\t\t\tremoveRevertibles.length === 1,\n\t\t\t\t0x6c4 /* Remove revertible should be a single delta */,\n\t\t\t);\n\n\t\t\tconst revertible: TypedRevertible<typeof IntervalOpType.POSITION_REMOVE> = {\n\t\t\t\tevent: IntervalOpType.POSITION_REMOVE,\n\t\t\t\tintervals: [],\n\t\t\t\trevertibleRefs,\n\t\t\t\tmergeTreeRevertible: removeRevertibles[0],\n\t\t\t};\n\n\t\t\t// add an interval for each startInterval, accounting for any corresponding endIntervals\n\t\t\tstartIntervals.forEach(({ interval, offset }) => {\n\t\t\t\t// find any corresponding end for this interval\n\t\t\t\tconst endIntervalIndex = endIntervals.findIndex((end) => {\n\t\t\t\t\treturn end.interval === interval;\n\t\t\t\t});\n\t\t\t\tlet endOffset: number | undefined;\n\t\t\t\tif (endIntervalIndex !== -1) {\n\t\t\t\t\tendOffset = endIntervals[endIntervalIndex].offset;\n\t\t\t\t\tendIntervals.splice(endIntervalIndex, 1);\n\t\t\t\t}\n\n\t\t\t\trevertible.intervals.push({\n\t\t\t\t\tintervalId: interval.getIntervalId(),\n\t\t\t\t\tlabel: interval.properties.referenceRangeLabels[0],\n\t\t\t\t\tstartOffset: offset,\n\t\t\t\t\tendOffset,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// add any remaining endIntervals that aren't matched with a startInterval\n\t\t\tendIntervals.forEach(({ interval, offset }) => {\n\t\t\t\trevertible.intervals.push({\n\t\t\t\t\tintervalId: interval.getIntervalId(),\n\t\t\t\t\tlabel: interval.properties.referenceRangeLabels[0],\n\t\t\t\t\tendOffset: offset,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\trevertibles.push(revertible);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Handle any merge tree delta that is not REMOVE or is REMOVE with no interval endpoints\n\tconst mergeTreeRevertibles: MergeTreeDeltaRevertible[] = [];\n\t// Allow merging MergeTreeDeltaRevertible with previous\n\tif (revertibles.length > 0 && isMergeTreeDeltaRevertible(revertibles[revertibles.length - 1])) {\n\t\tmergeTreeRevertibles.push(revertibles.pop() as MergeTreeDeltaRevertible);\n\t}\n\tappendToMergeTreeDeltaRevertibles(delta.deltaArgs, mergeTreeRevertibles);\n\trevertibles.push(...mergeTreeRevertibles);\n}\n\n/**\n * Clean up resources held by revertibles that are no longer needed.\n * @alpha\n */\nexport function discardSharedStringRevertibles(\n\tsharedString: SharedString,\n\trevertibles: SharedStringRevertible[],\n) {\n\trevertibles.forEach((r) => {\n\t\tif (isMergeTreeDeltaRevertible(r)) {\n\t\t\tdiscardMergeTreeDeltaRevertible([r]);\n\t\t} else if (r.event === IntervalOpType.CHANGE || r.event === IntervalOpType.DELETE) {\n\t\t\tsharedString.removeLocalReferencePosition(r.start);\n\t\t\tsharedString.removeLocalReferencePosition(r.end);\n\t\t}\n\t});\n}\n\nfunction getSlidePosition(string: SharedString, lref: LocalReferencePosition, pos: number): number {\n\tconst slide = getSlideToSegoff(\n\t\t{ segment: lref.getSegment(), offset: undefined },\n\t\tlref.slidingPreference,\n\t);\n\treturn slide?.segment !== undefined &&\n\t\tslide.offset !== undefined &&\n\t\tstring.getPosition(slide.segment) !== -1 &&\n\t\t(pos < 0 || pos >= string.getLength())\n\t\t? string.getPosition(slide.segment) + slide.offset\n\t\t: pos;\n}\n\nfunction isValidRange(\n\tstart: number,\n\tstartSlide: SlidingPreference | undefined,\n\tend: number,\n\tendSlide: SlidingPreference | undefined,\n\tstring: SharedString,\n) {\n\treturn (\n\t\tstart >= 0 &&\n\t\tstart < string.getLength() &&\n\t\tend >= 0 &&\n\t\tend < string.getLength() &&\n\t\t(start < end ||\n\t\t\t(start === end &&\n\t\t\t\t(startSlide === SlidingPreference.FORWARD ||\n\t\t\t\t\tendSlide !== SlidingPreference.FORWARD)))\n\t);\n}\n\nfunction revertLocalAdd(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.ADD>,\n) {\n\tconst id = getUpdatedIdFromInterval(revertible.interval);\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tstring.getIntervalCollection(label).removeIntervalById(id);\n}\n\nfunction createSequencePlace(\n\tpos: number,\n\tnewSlidingPreference: SlidingPreference | undefined,\n\toldSlidingPreference: SlidingPreference | undefined = undefined,\n): number | InteriorSequencePlace {\n\treturn newSlidingPreference === SlidingPreference.BACKWARD ||\n\t\t(newSlidingPreference === undefined && oldSlidingPreference === SlidingPreference.BACKWARD)\n\t\t? {\n\t\t\t\tpos,\n\t\t\t\tside: Side.After,\n\t\t }\n\t\t: newSlidingPreference === SlidingPreference.FORWARD &&\n\t\t oldSlidingPreference === SlidingPreference.BACKWARD\n\t\t? {\n\t\t\t\tpos,\n\t\t\t\tside: Side.Before,\n\t\t }\n\t\t: pos; // Avoid setting side if possible since stickiness may not be enabled\n}\n\nfunction revertLocalDelete(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.DELETE>,\n) {\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tconst collection = string.getIntervalCollection(label);\n\tconst start = string.localReferencePositionToPosition(revertible.start);\n\tconst startSlidePos = getSlidePosition(string, revertible.start, start);\n\tconst end = string.localReferencePositionToPosition(revertible.end);\n\tconst endSlidePos = getSlidePosition(string, revertible.end, end);\n\t// reusing the id causes eventual consistency bugs, so it is removed here and recreated in add\n\tconst { intervalId, ...props } = revertible.interval.properties;\n\tif (\n\t\tisValidRange(\n\t\t\tstartSlidePos,\n\t\t\trevertible.start.slidingPreference,\n\t\t\tendSlidePos,\n\t\t\trevertible.end.slidingPreference,\n\t\t\tstring,\n\t\t)\n\t) {\n\t\tconst int = collection.add({\n\t\t\tstart: createSequencePlace(startSlidePos, revertible.start.slidingPreference),\n\t\t\tend: createSequencePlace(endSlidePos, revertible.end.slidingPreference),\n\t\t\tprops,\n\t\t});\n\n\t\tidMap.forEach((newId, oldId) => {\n\t\t\tif (intervalId === newId) {\n\t\t\t\tidMap.set(oldId, getUpdatedIdFromInterval(int));\n\t\t\t}\n\t\t});\n\t\tidMap.set(intervalId, int.getIntervalId());\n\t}\n\n\tstring.removeLocalReferencePosition(revertible.start);\n\tstring.removeLocalReferencePosition(revertible.end);\n}\n\nfunction revertLocalChange(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.CHANGE>,\n) {\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tconst collection = string.getIntervalCollection(label);\n\tconst id = getUpdatedIdFromInterval(revertible.interval);\n\tconst start = string.localReferencePositionToPosition(revertible.start);\n\tconst startSlidePos = getSlidePosition(string, revertible.start, start);\n\tconst end = string.localReferencePositionToPosition(revertible.end);\n\tconst endSlidePos = getSlidePosition(string, revertible.end, end);\n\tconst interval = collection.getIntervalById(id);\n\tif (\n\t\tinterval !== undefined &&\n\t\tisValidRange(\n\t\t\tstartSlidePos,\n\t\t\trevertible.start.slidingPreference ?? interval.start.slidingPreference,\n\t\t\tendSlidePos,\n\t\t\trevertible.end.slidingPreference ?? interval.end.slidingPreference,\n\t\t\tstring,\n\t\t)\n\t) {\n\t\tcollection.change(\n\t\t\tid,\n\t\t\tcreateSequencePlace(\n\t\t\t\tstartSlidePos,\n\t\t\t\trevertible.start.slidingPreference,\n\t\t\t\tinterval.start.slidingPreference,\n\t\t\t),\n\t\t\tcreateSequencePlace(\n\t\t\t\tendSlidePos,\n\t\t\t\trevertible.end.slidingPreference,\n\t\t\t\tinterval.end.slidingPreference,\n\t\t\t),\n\t\t);\n\t}\n\n\tstring.removeLocalReferencePosition(revertible.start);\n\tstring.removeLocalReferencePosition(revertible.end);\n}\n\nfunction revertLocalPropertyChanged(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.PROPERTY_CHANGED>,\n) {\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tconst id = getUpdatedIdFromInterval(revertible.interval);\n\tconst newProps = revertible.propertyDeltas;\n\tstring.getIntervalCollection(label).changeProperties(id, newProps);\n}\n\nfunction newPosition(offset: number | undefined, restoredRanges: SortedRangeSet) {\n\tif (offset === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet offsetFromSegment = offset;\n\tfor (const rangeInfo of restoredRanges.items) {\n\t\tif (offsetFromSegment < rangeInfo.length) {\n\t\t\t// find the segment inside the range\n\t\t\tfor (const range of rangeInfo.ranges) {\n\t\t\t\tif (range.segment.cachedLength > offsetFromSegment) {\n\t\t\t\t\treturn { segment: range.segment, offset: offsetFromSegment };\n\t\t\t\t}\n\t\t\t\toffsetFromSegment -= range.segment.cachedLength;\n\t\t\t}\n\t\t}\n\t\toffsetFromSegment -= rangeInfo.length;\n\t}\n\n\treturn undefined;\n}\n\nfunction newEndpointPosition(\n\toffset: number | undefined,\n\trestoredRanges: SortedRangeSet,\n\tsharedString: SharedString,\n) {\n\tconst pos = newPosition(offset, restoredRanges);\n\treturn pos === undefined ? undefined : sharedString.getPosition(pos.segment) + pos.offset;\n}\n\ninterface RangeInfo {\n\tranges: readonly Readonly<ISequenceDeltaRange<MergeTreeDeltaOperationType>>[];\n\tlength: number;\n}\n\nclass SortedRangeSet extends SortedSet<RangeInfo, string> {\n\tprotected getKey(item: RangeInfo): string {\n\t\treturn item.ranges[0].segment.ordinal;\n\t}\n}\n\nfunction revertLocalSequenceRemove(\n\tsharedString: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.POSITION_REMOVE>,\n) {\n\tconst restoredRanges = new SortedRangeSet();\n\tconst saveSegments = (event: SequenceDeltaEvent) => {\n\t\tif (event.ranges.length > 0) {\n\t\t\tlet length = 0;\n\t\t\tevent.ranges.forEach((range) => {\n\t\t\t\tlength += range.segment.cachedLength;\n\t\t\t});\n\t\t\trestoredRanges.addOrUpdate({ ranges: event.ranges, length });\n\t\t}\n\t};\n\tsharedString.on(\"sequenceDelta\", saveSegments);\n\trevertMergeTreeDeltaRevertibles(sharedString, [revertible.mergeTreeRevertible]);\n\tsharedString.off(\"sequenceDelta\", saveSegments);\n\n\trevertible.intervals.forEach((intervalInfo) => {\n\t\tconst intervalCollection = sharedString.getIntervalCollection(intervalInfo.label);\n\t\tconst intervalId = getUpdatedId(intervalInfo.intervalId);\n\t\tconst interval = intervalCollection.getIntervalById(intervalId);\n\t\tif (interval !== undefined) {\n\t\t\tconst start =\n\t\t\t\tnewEndpointPosition(intervalInfo.startOffset, restoredRanges, sharedString) ??\n\t\t\t\tsharedString.localReferencePositionToPosition(interval.start);\n\t\t\tconst end =\n\t\t\t\tnewEndpointPosition(intervalInfo.endOffset, restoredRanges, sharedString) ??\n\t\t\t\tsharedString.localReferencePositionToPosition(interval.end);\n\t\t\tif (\n\t\t\t\tisValidRange(\n\t\t\t\t\tstart,\n\t\t\t\t\tinterval.start.slidingPreference,\n\t\t\t\t\tend,\n\t\t\t\t\tinterval.end.slidingPreference,\n\t\t\t\t\tsharedString,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tintervalCollection.change(\n\t\t\t\t\tintervalId,\n\t\t\t\t\tcreateSequencePlace(start, interval.start.slidingPreference),\n\t\t\t\t\tcreateSequencePlace(end, interval.end.slidingPreference),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\n\t// fix up the local references used by delete and change revertibles\n\trevertible.revertibleRefs.forEach((revertibleRef) => {\n\t\tassert(\n\t\t\trevertibleRef.revertible.event === IntervalOpType.CHANGE ||\n\t\t\t\trevertibleRef.revertible.event === IntervalOpType.DELETE,\n\t\t\t0x6c5 /* revertible is not delete or change */,\n\t\t);\n\t\tconst pos = newPosition(revertibleRef.offset, restoredRanges);\n\t\tif (pos !== undefined) {\n\t\t\tif (revertibleRef.isStart) {\n\t\t\t\tsharedString.removeLocalReferencePosition(revertibleRef.revertible.start);\n\t\t\t\tconst newRef = sharedString.createLocalReferencePosition(\n\t\t\t\t\tpos.segment as SharedStringSegment,\n\t\t\t\t\tpos.offset,\n\t\t\t\t\tReferenceType.StayOnRemove | ReferenceType.RangeBegin,\n\t\t\t\t\t{ revertible: revertibleRef.revertible },\n\t\t\t\t\trevertibleRef.revertible.start.slidingPreference,\n\t\t\t\t);\n\t\t\t\trevertibleRef.revertible.start = newRef;\n\t\t\t} else {\n\t\t\t\tsharedString.removeLocalReferencePosition(revertibleRef.revertible.end);\n\t\t\t\tconst newRef = sharedString.createLocalReferencePosition(\n\t\t\t\t\tpos.segment as SharedStringSegment,\n\t\t\t\t\tpos.offset,\n\t\t\t\t\tReferenceType.StayOnRemove | ReferenceType.RangeEnd,\n\t\t\t\t\t{ revertible: revertibleRef.revertible },\n\t\t\t\t\trevertibleRef.revertible.end.slidingPreference,\n\t\t\t\t);\n\t\t\t\trevertibleRef.revertible.end = newRef;\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * Invoke revertibles to reverse prior edits\n *\n * @alpha\n */\nexport function revertSharedStringRevertibles(\n\tsharedString: SharedString,\n\trevertibles: SharedStringRevertible[],\n) {\n\twhile (revertibles.length > 0) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst r = revertibles.pop()!;\n\t\tif (\"event\" in r) {\n\t\t\tconst event = r.event;\n\t\t\tswitch (event) {\n\t\t\t\tcase IntervalOpType.ADD:\n\t\t\t\t\trevertLocalAdd(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.DELETE:\n\t\t\t\t\trevertLocalDelete(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.CHANGE:\n\t\t\t\t\trevertLocalChange(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.PROPERTY_CHANGED:\n\t\t\t\t\trevertLocalPropertyChanged(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.POSITION_REMOVE:\n\t\t\t\t\trevertLocalSequenceRemove(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tunreachableCase(event);\n\t\t\t}\n\t\t} else {\n\t\t\trevertMergeTreeDeltaRevertibles(sharedString, [r]);\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"revertibles.js","sourceRoot":"","sources":["../src/revertibles.ts"],"names":[],"mappings":"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","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 { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport {\n\tappendToMergeTreeDeltaRevertibles,\n\tdiscardMergeTreeDeltaRevertible,\n\tisMergeTreeDeltaRevertible,\n\tLocalReferencePosition,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaRevertible,\n\tMergeTreeDeltaType,\n\tPropertySet,\n\tReferenceType,\n\trefTypeIncludesFlag,\n\trevertMergeTreeDeltaRevertibles,\n\t// eslint-disable-next-line import/no-deprecated\n\tSortedSet,\n\tgetSlideToSegoff,\n\tSlidingPreference,\n} from \"@fluidframework/merge-tree\";\nimport { InteriorSequencePlace, Side } from \"./intervalCollection\";\nimport { IntervalOpType, SequenceInterval } from \"./intervals\";\nimport { SharedString, SharedStringSegment } from \"./sharedString\";\nimport { ISequenceDeltaRange, SequenceDeltaEvent } from \"./sequenceDeltaEvent\";\n\n/**\n * Data for undoing edits on SharedStrings and Intervals.\n * @internal\n */\nexport type SharedStringRevertible = MergeTreeDeltaRevertible | IntervalRevertible;\n\nconst idMap = new Map<string, string>();\n\n/**\n * Data for undoing edits affecting Intervals.\n * @internal\n */\nexport type IntervalRevertible =\n\t| {\n\t\t\tevent: typeof IntervalOpType.CHANGE;\n\t\t\tinterval: SequenceInterval;\n\t\t\tstart: LocalReferencePosition;\n\t\t\tend: LocalReferencePosition;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.ADD;\n\t\t\tinterval: SequenceInterval;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.DELETE;\n\t\t\tinterval: SequenceInterval;\n\t\t\tstart: LocalReferencePosition;\n\t\t\tend: LocalReferencePosition;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.PROPERTY_CHANGED;\n\t\t\tinterval: SequenceInterval;\n\t\t\tpropertyDeltas: PropertySet;\n\t }\n\t| {\n\t\t\tevent: typeof IntervalOpType.POSITION_REMOVE;\n\t\t\tintervals: {\n\t\t\t\tintervalId: string;\n\t\t\t\tlabel: string;\n\t\t\t\tstartOffset?: number; // interval start index within a removed range\n\t\t\t\tendOffset?: number; // interval end index within a removed range\n\t\t\t}[];\n\t\t\t// local refs used by IntervalOpType.CHANGE and DELETE revertibles\n\t\t\trevertibleRefs: {\n\t\t\t\trevertible: IntervalRevertible;\n\t\t\t\toffset: number;\n\t\t\t\tisStart: boolean;\n\t\t\t}[];\n\t\t\tmergeTreeRevertible: MergeTreeDeltaRevertible;\n\t };\n\ntype TypedRevertible<T extends IntervalRevertible[\"event\"]> = IntervalRevertible & { event: T };\n\nfunction getUpdatedIdFromInterval(interval: SequenceInterval): string {\n\tconst maybeId = interval.getIntervalId();\n\treturn getUpdatedId(maybeId);\n}\n\nfunction getUpdatedId(intervalId: string): string {\n\treturn idMap.get(intervalId) ?? intervalId;\n}\n\n/**\n * Create revertibles for adding an interval\n * @internal\n */\nexport function appendAddIntervalToRevertibles(\n\tinterval: SequenceInterval,\n\trevertibles: SharedStringRevertible[],\n) {\n\trevertibles.push({\n\t\tevent: IntervalOpType.ADD,\n\t\tinterval,\n\t});\n\n\treturn revertibles;\n}\n\n/**\n * Create revertibles for deleting an interval\n * @internal\n */\nexport function appendDeleteIntervalToRevertibles(\n\tstring: SharedString,\n\tinterval: SequenceInterval,\n\trevertibles: SharedStringRevertible[],\n): SharedStringRevertible[] {\n\tconst startSeg = interval.start.getSegment() as SharedStringSegment | undefined;\n\tif (!startSeg) {\n\t\treturn revertibles;\n\t}\n\tconst startType =\n\t\tstartSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeBegin;\n\tconst endSeg = interval.end.getSegment() as SharedStringSegment | undefined;\n\tif (!endSeg) {\n\t\treturn revertibles;\n\t}\n\tconst endType =\n\t\tendSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeEnd;\n\tconst startRef = string.createLocalReferencePosition(\n\t\tstartSeg,\n\t\tinterval.start.getOffset(),\n\t\tstartType,\n\t\tundefined,\n\t\tinterval.start.slidingPreference,\n\t);\n\tconst endRef = string.createLocalReferencePosition(\n\t\tendSeg,\n\t\tinterval.end.getOffset(),\n\t\tendType,\n\t\tundefined,\n\t\tinterval.end.slidingPreference,\n\t);\n\tconst revertible = {\n\t\tevent: IntervalOpType.DELETE,\n\t\tinterval,\n\t\tstart: startRef,\n\t\tend: endRef,\n\t};\n\trevertible.start.addProperties({ revertible });\n\trevertible.end.addProperties({ revertible });\n\trevertibles.push(revertible);\n\n\treturn revertibles;\n}\n\n/**\n * Create revertibles for moving endpoints of an interval\n * @internal\n */\nexport function appendChangeIntervalToRevertibles(\n\tstring: SharedString,\n\tnewInterval: SequenceInterval,\n\tpreviousInterval: SequenceInterval,\n\trevertibles: SharedStringRevertible[],\n) {\n\tconst startSeg = previousInterval.start.getSegment() as SharedStringSegment;\n\t// This logic is needed because the ReferenceType StayOnRemove cannot be used\n\t// on removed segments. This works for revertibles because the old position of the\n\t// interval within the removed segment is handled by the remove range revertible.\n\tconst startType =\n\t\tstartSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeBegin\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeBegin;\n\tconst endSeg = previousInterval.end.getSegment() as SharedStringSegment;\n\tconst endType =\n\t\tendSeg.removedSeq !== undefined\n\t\t\t? ReferenceType.SlideOnRemove | ReferenceType.RangeEnd\n\t\t\t: ReferenceType.StayOnRemove | ReferenceType.RangeEnd;\n\tconst prevStartRef = string.createLocalReferencePosition(\n\t\tstartSeg,\n\t\tpreviousInterval.start.getOffset(),\n\t\tstartType,\n\t\tundefined,\n\t\tpreviousInterval.start.slidingPreference,\n\t);\n\tconst prevEndRef = string.createLocalReferencePosition(\n\t\tendSeg,\n\t\tpreviousInterval.end.getOffset(),\n\t\tendType,\n\t\tundefined,\n\t\tpreviousInterval.end.slidingPreference,\n\t);\n\tconst revertible = {\n\t\tevent: IntervalOpType.CHANGE,\n\t\tinterval: newInterval,\n\t\tstart: prevStartRef,\n\t\tend: prevEndRef,\n\t};\n\trevertible.start.addProperties({ revertible });\n\trevertible.end.addProperties({ revertible });\n\trevertibles.push(revertible);\n\n\treturn revertibles;\n}\n\n/**\n * Create revertibles for changing properties of an interval\n * @internal\n */\nexport function appendIntervalPropertyChangedToRevertibles(\n\tinterval: SequenceInterval,\n\tdeltas: PropertySet,\n\trevertibles: SharedStringRevertible[],\n) {\n\trevertibles.push({\n\t\tevent: IntervalOpType.PROPERTY_CHANGED,\n\t\tinterval,\n\t\tpropertyDeltas: deltas,\n\t});\n\n\treturn revertibles;\n}\n\nfunction addIfIntervalEndpoint(\n\tref: LocalReferencePosition,\n\tsegmentLengths: number,\n\tstartIntervals: { offset: number; interval: SequenceInterval }[],\n\tendIntervals: { offset: number; interval: SequenceInterval }[],\n) {\n\tif (refTypeIncludesFlag(ref.refType, ReferenceType.RangeBegin)) {\n\t\tconst interval = ref.properties?.interval;\n\t\tif (interval && interval instanceof SequenceInterval) {\n\t\t\tstartIntervals.push({ offset: segmentLengths + interval.start.getOffset(), interval });\n\t\t\treturn true;\n\t\t}\n\t} else if (refTypeIncludesFlag(ref.refType, ReferenceType.RangeEnd)) {\n\t\tconst interval = ref.properties?.interval;\n\t\tif (interval && interval instanceof SequenceInterval) {\n\t\t\tendIntervals.push({ offset: segmentLengths + interval.end.getOffset(), interval });\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction addIfRevertibleRef(\n\tref: LocalReferencePosition,\n\tsegmentLengths: number,\n\trevertibleRefs: {\n\t\trevertible: IntervalRevertible;\n\t\toffset: number;\n\t\tisStart: boolean;\n\t}[],\n) {\n\tconst revertible = ref.properties?.revertible;\n\tif (revertible) {\n\t\trevertibleRefs.push({\n\t\t\trevertible,\n\t\t\toffset: segmentLengths + ref.getOffset(),\n\t\t\tisStart: refTypeIncludesFlag(ref.refType, ReferenceType.RangeBegin),\n\t\t});\n\t}\n}\n\n/**\n * Create revertibles for SharedStringDeltas, handling indirectly modified intervals\n * (e.g. reverting remove of a range that contains an interval will move the interval back)\n * @internal\n */\nexport function appendSharedStringDeltaToRevertibles(\n\tstring: SharedString,\n\tdelta: SequenceDeltaEvent,\n\trevertibles: SharedStringRevertible[],\n) {\n\tif (delta.ranges.length === 0) {\n\t\treturn;\n\t}\n\tif (delta.deltaOperation === MergeTreeDeltaType.REMOVE) {\n\t\tconst startIntervals: { offset: number; interval: SequenceInterval }[] = [];\n\t\tconst endIntervals: { offset: number; interval: SequenceInterval }[] = [];\n\t\tconst revertibleRefs: {\n\t\t\trevertible: IntervalRevertible;\n\t\t\toffset: number;\n\t\t\tisStart: boolean;\n\t\t}[] = [];\n\t\tlet segmentLengths = 0;\n\n\t\t// find interval endpoints in each segment\n\t\tfor (const deltaRange of delta.ranges) {\n\t\t\tconst refs = deltaRange.segment.localRefs;\n\t\t\tif (refs !== undefined && deltaRange.position !== -1) {\n\t\t\t\tfor (const ref of refs) {\n\t\t\t\t\taddIfIntervalEndpoint(ref, segmentLengths, startIntervals, endIntervals);\n\t\t\t\t\taddIfRevertibleRef(ref, segmentLengths, revertibleRefs);\n\t\t\t\t}\n\t\t\t}\n\t\t\tsegmentLengths += deltaRange.segment.cachedLength;\n\t\t}\n\n\t\tif (startIntervals.length > 0 || endIntervals.length > 0 || revertibleRefs.length > 0) {\n\t\t\tconst removeRevertibles: MergeTreeDeltaRevertible[] = [];\n\t\t\tappendToMergeTreeDeltaRevertibles(delta.deltaArgs, removeRevertibles);\n\t\t\tassert(\n\t\t\t\tremoveRevertibles.length === 1,\n\t\t\t\t0x6c4 /* Remove revertible should be a single delta */,\n\t\t\t);\n\n\t\t\tconst revertible: TypedRevertible<typeof IntervalOpType.POSITION_REMOVE> = {\n\t\t\t\tevent: IntervalOpType.POSITION_REMOVE,\n\t\t\t\tintervals: [],\n\t\t\t\trevertibleRefs,\n\t\t\t\tmergeTreeRevertible: removeRevertibles[0],\n\t\t\t};\n\n\t\t\t// add an interval for each startInterval, accounting for any corresponding endIntervals\n\t\t\tstartIntervals.forEach(({ interval, offset }) => {\n\t\t\t\t// find any corresponding end for this interval\n\t\t\t\tconst endIntervalIndex = endIntervals.findIndex((end) => {\n\t\t\t\t\treturn end.interval === interval;\n\t\t\t\t});\n\t\t\t\tlet endOffset: number | undefined;\n\t\t\t\tif (endIntervalIndex !== -1) {\n\t\t\t\t\tendOffset = endIntervals[endIntervalIndex].offset;\n\t\t\t\t\tendIntervals.splice(endIntervalIndex, 1);\n\t\t\t\t}\n\n\t\t\t\trevertible.intervals.push({\n\t\t\t\t\tintervalId: interval.getIntervalId(),\n\t\t\t\t\tlabel: interval.properties.referenceRangeLabels[0],\n\t\t\t\t\tstartOffset: offset,\n\t\t\t\t\tendOffset,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// add any remaining endIntervals that aren't matched with a startInterval\n\t\t\tendIntervals.forEach(({ interval, offset }) => {\n\t\t\t\trevertible.intervals.push({\n\t\t\t\t\tintervalId: interval.getIntervalId(),\n\t\t\t\t\tlabel: interval.properties.referenceRangeLabels[0],\n\t\t\t\t\tendOffset: offset,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\trevertibles.push(revertible);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Handle any merge tree delta that is not REMOVE or is REMOVE with no interval endpoints\n\tconst mergeTreeRevertibles: MergeTreeDeltaRevertible[] = [];\n\t// Allow merging MergeTreeDeltaRevertible with previous\n\tif (revertibles.length > 0 && isMergeTreeDeltaRevertible(revertibles[revertibles.length - 1])) {\n\t\tmergeTreeRevertibles.push(revertibles.pop() as MergeTreeDeltaRevertible);\n\t}\n\tappendToMergeTreeDeltaRevertibles(delta.deltaArgs, mergeTreeRevertibles);\n\trevertibles.push(...mergeTreeRevertibles);\n}\n\n/**\n * Clean up resources held by revertibles that are no longer needed.\n * @internal\n */\nexport function discardSharedStringRevertibles(\n\tsharedString: SharedString,\n\trevertibles: SharedStringRevertible[],\n) {\n\trevertibles.forEach((r) => {\n\t\tif (isMergeTreeDeltaRevertible(r)) {\n\t\t\tdiscardMergeTreeDeltaRevertible([r]);\n\t\t} else if (r.event === IntervalOpType.CHANGE || r.event === IntervalOpType.DELETE) {\n\t\t\tsharedString.removeLocalReferencePosition(r.start);\n\t\t\tsharedString.removeLocalReferencePosition(r.end);\n\t\t}\n\t});\n}\n\nfunction getSlidePosition(string: SharedString, lref: LocalReferencePosition, pos: number): number {\n\tconst slide = getSlideToSegoff(\n\t\t{ segment: lref.getSegment(), offset: undefined },\n\t\tlref.slidingPreference,\n\t);\n\treturn slide?.segment !== undefined &&\n\t\tslide.offset !== undefined &&\n\t\tstring.getPosition(slide.segment) !== -1 &&\n\t\t(pos < 0 || pos >= string.getLength())\n\t\t? string.getPosition(slide.segment) + slide.offset\n\t\t: pos;\n}\n\nfunction isValidRange(\n\tstart: number,\n\tstartSlide: SlidingPreference | undefined,\n\tend: number,\n\tendSlide: SlidingPreference | undefined,\n\tstring: SharedString,\n) {\n\treturn (\n\t\tstart >= 0 &&\n\t\tstart < string.getLength() &&\n\t\tend >= 0 &&\n\t\tend < string.getLength() &&\n\t\t(start < end ||\n\t\t\t(start === end &&\n\t\t\t\t(startSlide === SlidingPreference.FORWARD ||\n\t\t\t\t\tendSlide !== SlidingPreference.FORWARD)))\n\t);\n}\n\nfunction revertLocalAdd(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.ADD>,\n) {\n\tconst id = getUpdatedIdFromInterval(revertible.interval);\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tstring.getIntervalCollection(label).removeIntervalById(id);\n}\n\nfunction createSequencePlace(\n\tpos: number,\n\tnewSlidingPreference: SlidingPreference | undefined,\n\toldSlidingPreference: SlidingPreference | undefined = undefined,\n): number | InteriorSequencePlace {\n\treturn newSlidingPreference === SlidingPreference.BACKWARD ||\n\t\t(newSlidingPreference === undefined && oldSlidingPreference === SlidingPreference.BACKWARD)\n\t\t? {\n\t\t\t\tpos,\n\t\t\t\tside: Side.After,\n\t\t }\n\t\t: newSlidingPreference === SlidingPreference.FORWARD &&\n\t\t oldSlidingPreference === SlidingPreference.BACKWARD\n\t\t? {\n\t\t\t\tpos,\n\t\t\t\tside: Side.Before,\n\t\t }\n\t\t: pos; // Avoid setting side if possible since stickiness may not be enabled\n}\n\nfunction revertLocalDelete(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.DELETE>,\n) {\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tconst collection = string.getIntervalCollection(label);\n\tconst start = string.localReferencePositionToPosition(revertible.start);\n\tconst startSlidePos = getSlidePosition(string, revertible.start, start);\n\tconst end = string.localReferencePositionToPosition(revertible.end);\n\tconst endSlidePos = getSlidePosition(string, revertible.end, end);\n\t// reusing the id causes eventual consistency bugs, so it is removed here and recreated in add\n\tconst { intervalId, ...props } = revertible.interval.properties;\n\tif (\n\t\tisValidRange(\n\t\t\tstartSlidePos,\n\t\t\trevertible.start.slidingPreference,\n\t\t\tendSlidePos,\n\t\t\trevertible.end.slidingPreference,\n\t\t\tstring,\n\t\t)\n\t) {\n\t\tconst int = collection.add({\n\t\t\tstart: createSequencePlace(startSlidePos, revertible.start.slidingPreference),\n\t\t\tend: createSequencePlace(endSlidePos, revertible.end.slidingPreference),\n\t\t\tprops,\n\t\t});\n\n\t\tidMap.forEach((newId, oldId) => {\n\t\t\tif (intervalId === newId) {\n\t\t\t\tidMap.set(oldId, getUpdatedIdFromInterval(int));\n\t\t\t}\n\t\t});\n\t\tidMap.set(intervalId, int.getIntervalId());\n\t}\n\n\tstring.removeLocalReferencePosition(revertible.start);\n\tstring.removeLocalReferencePosition(revertible.end);\n}\n\nfunction revertLocalChange(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.CHANGE>,\n) {\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tconst collection = string.getIntervalCollection(label);\n\tconst id = getUpdatedIdFromInterval(revertible.interval);\n\tconst start = string.localReferencePositionToPosition(revertible.start);\n\tconst startSlidePos = getSlidePosition(string, revertible.start, start);\n\tconst end = string.localReferencePositionToPosition(revertible.end);\n\tconst endSlidePos = getSlidePosition(string, revertible.end, end);\n\tconst interval = collection.getIntervalById(id);\n\tif (\n\t\tinterval !== undefined &&\n\t\tisValidRange(\n\t\t\tstartSlidePos,\n\t\t\trevertible.start.slidingPreference ?? interval.start.slidingPreference,\n\t\t\tendSlidePos,\n\t\t\trevertible.end.slidingPreference ?? interval.end.slidingPreference,\n\t\t\tstring,\n\t\t)\n\t) {\n\t\tcollection.change(\n\t\t\tid,\n\t\t\tcreateSequencePlace(\n\t\t\t\tstartSlidePos,\n\t\t\t\trevertible.start.slidingPreference,\n\t\t\t\tinterval.start.slidingPreference,\n\t\t\t),\n\t\t\tcreateSequencePlace(\n\t\t\t\tendSlidePos,\n\t\t\t\trevertible.end.slidingPreference,\n\t\t\t\tinterval.end.slidingPreference,\n\t\t\t),\n\t\t);\n\t}\n\n\tstring.removeLocalReferencePosition(revertible.start);\n\tstring.removeLocalReferencePosition(revertible.end);\n}\n\nfunction revertLocalPropertyChanged(\n\tstring: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.PROPERTY_CHANGED>,\n) {\n\tconst label = revertible.interval.properties.referenceRangeLabels[0];\n\tconst id = getUpdatedIdFromInterval(revertible.interval);\n\tconst newProps = revertible.propertyDeltas;\n\tstring.getIntervalCollection(label).changeProperties(id, newProps);\n}\n\nfunction newPosition(offset: number | undefined, restoredRanges: SortedRangeSet) {\n\tif (offset === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet offsetFromSegment = offset;\n\tfor (const rangeInfo of restoredRanges.items) {\n\t\tif (offsetFromSegment < rangeInfo.length) {\n\t\t\t// find the segment inside the range\n\t\t\tfor (const range of rangeInfo.ranges) {\n\t\t\t\tif (range.segment.cachedLength > offsetFromSegment) {\n\t\t\t\t\treturn { segment: range.segment, offset: offsetFromSegment };\n\t\t\t\t}\n\t\t\t\toffsetFromSegment -= range.segment.cachedLength;\n\t\t\t}\n\t\t}\n\t\toffsetFromSegment -= rangeInfo.length;\n\t}\n\n\treturn undefined;\n}\n\nfunction newEndpointPosition(\n\toffset: number | undefined,\n\trestoredRanges: SortedRangeSet,\n\tsharedString: SharedString,\n) {\n\tconst pos = newPosition(offset, restoredRanges);\n\treturn pos === undefined ? undefined : sharedString.getPosition(pos.segment) + pos.offset;\n}\n\ninterface RangeInfo {\n\tranges: readonly Readonly<ISequenceDeltaRange<MergeTreeDeltaOperationType>>[];\n\tlength: number;\n}\n\n// eslint-disable-next-line import/no-deprecated\nclass SortedRangeSet extends SortedSet<RangeInfo, string> {\n\tprotected getKey(item: RangeInfo): string {\n\t\treturn item.ranges[0].segment.ordinal;\n\t}\n}\n\nfunction revertLocalSequenceRemove(\n\tsharedString: SharedString,\n\trevertible: TypedRevertible<typeof IntervalOpType.POSITION_REMOVE>,\n) {\n\tconst restoredRanges = new SortedRangeSet();\n\tconst saveSegments = (event: SequenceDeltaEvent) => {\n\t\tif (event.ranges.length > 0) {\n\t\t\tlet length = 0;\n\t\t\tevent.ranges.forEach((range) => {\n\t\t\t\tlength += range.segment.cachedLength;\n\t\t\t});\n\t\t\trestoredRanges.addOrUpdate({ ranges: event.ranges, length });\n\t\t}\n\t};\n\tsharedString.on(\"sequenceDelta\", saveSegments);\n\trevertMergeTreeDeltaRevertibles(sharedString, [revertible.mergeTreeRevertible]);\n\tsharedString.off(\"sequenceDelta\", saveSegments);\n\n\trevertible.intervals.forEach((intervalInfo) => {\n\t\tconst intervalCollection = sharedString.getIntervalCollection(intervalInfo.label);\n\t\tconst intervalId = getUpdatedId(intervalInfo.intervalId);\n\t\tconst interval = intervalCollection.getIntervalById(intervalId);\n\t\tif (interval !== undefined) {\n\t\t\tconst start =\n\t\t\t\tnewEndpointPosition(intervalInfo.startOffset, restoredRanges, sharedString) ??\n\t\t\t\tsharedString.localReferencePositionToPosition(interval.start);\n\t\t\tconst end =\n\t\t\t\tnewEndpointPosition(intervalInfo.endOffset, restoredRanges, sharedString) ??\n\t\t\t\tsharedString.localReferencePositionToPosition(interval.end);\n\t\t\tif (\n\t\t\t\tisValidRange(\n\t\t\t\t\tstart,\n\t\t\t\t\tinterval.start.slidingPreference,\n\t\t\t\t\tend,\n\t\t\t\t\tinterval.end.slidingPreference,\n\t\t\t\t\tsharedString,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tintervalCollection.change(\n\t\t\t\t\tintervalId,\n\t\t\t\t\tcreateSequencePlace(start, interval.start.slidingPreference),\n\t\t\t\t\tcreateSequencePlace(end, interval.end.slidingPreference),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\n\t// fix up the local references used by delete and change revertibles\n\trevertible.revertibleRefs.forEach((revertibleRef) => {\n\t\tassert(\n\t\t\trevertibleRef.revertible.event === IntervalOpType.CHANGE ||\n\t\t\t\trevertibleRef.revertible.event === IntervalOpType.DELETE,\n\t\t\t0x6c5 /* revertible is not delete or change */,\n\t\t);\n\t\tconst pos = newPosition(revertibleRef.offset, restoredRanges);\n\t\tif (pos !== undefined) {\n\t\t\tif (revertibleRef.isStart) {\n\t\t\t\tsharedString.removeLocalReferencePosition(revertibleRef.revertible.start);\n\t\t\t\tconst newRef = sharedString.createLocalReferencePosition(\n\t\t\t\t\tpos.segment as SharedStringSegment,\n\t\t\t\t\tpos.offset,\n\t\t\t\t\tReferenceType.StayOnRemove | ReferenceType.RangeBegin,\n\t\t\t\t\t{ revertible: revertibleRef.revertible },\n\t\t\t\t\trevertibleRef.revertible.start.slidingPreference,\n\t\t\t\t);\n\t\t\t\trevertibleRef.revertible.start = newRef;\n\t\t\t} else {\n\t\t\t\tsharedString.removeLocalReferencePosition(revertibleRef.revertible.end);\n\t\t\t\tconst newRef = sharedString.createLocalReferencePosition(\n\t\t\t\t\tpos.segment as SharedStringSegment,\n\t\t\t\t\tpos.offset,\n\t\t\t\t\tReferenceType.StayOnRemove | ReferenceType.RangeEnd,\n\t\t\t\t\t{ revertible: revertibleRef.revertible },\n\t\t\t\t\trevertibleRef.revertible.end.slidingPreference,\n\t\t\t\t);\n\t\t\t\trevertibleRef.revertible.end = newRef;\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * Invoke revertibles to reverse prior edits\n * @internal\n */\nexport function revertSharedStringRevertibles(\n\tsharedString: SharedString,\n\trevertibles: SharedStringRevertible[],\n) {\n\twhile (revertibles.length > 0) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst r = revertibles.pop()!;\n\t\tif (\"event\" in r) {\n\t\t\tconst event = r.event;\n\t\t\tswitch (event) {\n\t\t\t\tcase IntervalOpType.ADD:\n\t\t\t\t\trevertLocalAdd(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.DELETE:\n\t\t\t\t\trevertLocalDelete(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.CHANGE:\n\t\t\t\t\trevertLocalChange(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.PROPERTY_CHANGED:\n\t\t\t\t\trevertLocalPropertyChanged(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tcase IntervalOpType.POSITION_REMOVE:\n\t\t\t\t\trevertLocalSequenceRemove(sharedString, r);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tunreachableCase(event);\n\t\t\t}\n\t\t} else {\n\t\t\trevertMergeTreeDeltaRevertibles(sharedString, [r]);\n\t\t}\n\t}\n}\n"]}
|