@fluidframework/sequence 2.0.0-rc.3.0.2 → 2.0.0-rc.4.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/.eslintrc.cjs +29 -0
- package/CHANGELOG.md +18 -0
- package/README.md +10 -3
- package/api-report/sequence.api.md +34 -35
- package/dist/IntervalCollectionValues.d.ts +0 -2
- package/dist/IntervalCollectionValues.d.ts.map +1 -1
- package/dist/IntervalCollectionValues.js +0 -2
- package/dist/IntervalCollectionValues.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.js +1 -1
- package/dist/intervalCollection.js.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.d.ts +2 -2
- package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/dist/intervalIndex/endpointIndex.d.ts +2 -2
- package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/dist/intervalIndex/endpointIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.d.ts +2 -2
- package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/dist/intervals/interval.js +1 -1
- package/dist/intervals/interval.js.map +1 -1
- package/dist/intervals/sequenceInterval.js +1 -1
- package/dist/intervals/sequenceInterval.js.map +1 -1
- package/dist/legacy.d.ts +2 -2
- 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 +6 -6
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js.map +1 -1
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +8 -3
- package/dist/sequence.js.map +1 -1
- package/dist/sequenceDeltaEvent.d.ts +24 -3
- package/dist/sequenceDeltaEvent.d.ts.map +1 -1
- package/dist/sequenceDeltaEvent.js +16 -3
- package/dist/sequenceDeltaEvent.js.map +1 -1
- package/dist/sequenceFactory.d.ts +15 -7
- package/dist/sequenceFactory.d.ts.map +1 -1
- package/dist/sequenceFactory.js +9 -6
- package/dist/sequenceFactory.js.map +1 -1
- package/dist/sharedString.d.ts +70 -47
- package/dist/sharedString.d.ts.map +1 -1
- package/dist/sharedString.js +15 -52
- package/dist/sharedString.js.map +1 -1
- package/lib/IntervalCollectionValues.d.ts +0 -2
- package/lib/IntervalCollectionValues.d.ts.map +1 -1
- package/lib/IntervalCollectionValues.js +0 -2
- package/lib/IntervalCollectionValues.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/intervalCollection.js +1 -1
- package/lib/intervalCollection.js.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.d.ts +2 -2
- package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
- package/lib/intervalIndex/endpointIndex.d.ts +2 -2
- package/lib/intervalIndex/endpointIndex.d.ts.map +1 -1
- package/lib/intervalIndex/endpointIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
- package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.d.ts +2 -2
- package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
- package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
- package/lib/intervals/interval.js +1 -1
- package/lib/intervals/interval.js.map +1 -1
- package/lib/intervals/sequenceInterval.js +1 -1
- package/lib/intervals/sequenceInterval.js.map +1 -1
- package/lib/legacy.d.ts +2 -2
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/revertibles.d.ts +6 -6
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js.map +1 -1
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +10 -4
- package/lib/sequence.js.map +1 -1
- package/lib/sequenceDeltaEvent.d.ts +24 -3
- package/lib/sequenceDeltaEvent.d.ts.map +1 -1
- package/lib/sequenceDeltaEvent.js +16 -3
- package/lib/sequenceDeltaEvent.js.map +1 -1
- package/lib/sequenceFactory.d.ts +15 -7
- package/lib/sequenceFactory.d.ts.map +1 -1
- package/lib/sequenceFactory.js +9 -6
- package/lib/sequenceFactory.js.map +1 -1
- package/lib/sharedString.d.ts +70 -47
- package/lib/sharedString.d.ts.map +1 -1
- package/lib/sharedString.js +13 -50
- package/lib/sharedString.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +38 -24
- package/src/IntervalCollectionValues.ts +0 -2
- package/src/index.ts +2 -2
- package/src/intervalCollection.ts +1 -1
- package/src/intervalIndex/endpointInRangeIndex.ts +2 -2
- package/src/intervalIndex/endpointIndex.ts +2 -2
- package/src/intervalIndex/overlappingIntervalsIndex.ts +2 -2
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +2 -2
- package/src/intervalIndex/startpointInRangeIndex.ts +2 -2
- package/src/intervals/interval.ts +1 -1
- package/src/intervals/sequenceInterval.ts +1 -1
- package/src/packageVersion.ts +1 -1
- package/src/revertibles.ts +18 -14
- package/src/sequence.ts +11 -3
- package/src/sequenceDeltaEvent.ts +12 -1
- package/src/sequenceFactory.ts +21 -9
- package/src/sharedString.ts +89 -56
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/sequence",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.4.0.0",
|
|
4
4
|
"description": "Distributed sequence",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -87,34 +87,34 @@
|
|
|
87
87
|
"temp-directory": "nyc/.nyc_output"
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
|
-
"@fluid-internal/client-utils": ">=2.0.0-rc.
|
|
91
|
-
"@fluidframework/core-interfaces": ">=2.0.0-rc.
|
|
92
|
-
"@fluidframework/core-utils": ">=2.0.0-rc.
|
|
93
|
-
"@fluidframework/datastore-definitions": ">=2.0.0-rc.
|
|
94
|
-
"@fluidframework/merge-tree": ">=2.0.0-rc.
|
|
90
|
+
"@fluid-internal/client-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
91
|
+
"@fluidframework/core-interfaces": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
92
|
+
"@fluidframework/core-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
93
|
+
"@fluidframework/datastore-definitions": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
94
|
+
"@fluidframework/merge-tree": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
95
95
|
"@fluidframework/protocol-definitions": "^3.2.0",
|
|
96
|
-
"@fluidframework/runtime-definitions": ">=2.0.0-rc.
|
|
97
|
-
"@fluidframework/runtime-utils": ">=2.0.0-rc.
|
|
98
|
-
"@fluidframework/shared-object-base": ">=2.0.0-rc.
|
|
99
|
-
"@fluidframework/telemetry-utils": ">=2.0.0-rc.
|
|
96
|
+
"@fluidframework/runtime-definitions": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
97
|
+
"@fluidframework/runtime-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
98
|
+
"@fluidframework/shared-object-base": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
99
|
+
"@fluidframework/telemetry-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
100
100
|
"double-ended-queue": "^2.1.0-0",
|
|
101
101
|
"uuid": "^9.0.0"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@arethetypeswrong/cli": "^0.15.2",
|
|
105
105
|
"@biomejs/biome": "^1.6.2",
|
|
106
|
-
"@fluid-internal/mocha-test-setup": ">=2.0.0-rc.
|
|
107
|
-
"@fluid-private/stochastic-test-utils": ">=2.0.0-rc.
|
|
108
|
-
"@fluid-private/test-dds-utils": ">=2.0.0-rc.
|
|
106
|
+
"@fluid-internal/mocha-test-setup": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
107
|
+
"@fluid-private/stochastic-test-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
108
|
+
"@fluid-private/test-dds-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
109
109
|
"@fluid-tools/benchmark": "^0.48.0",
|
|
110
|
-
"@fluid-tools/build-cli": "^0.
|
|
110
|
+
"@fluid-tools/build-cli": "^0.38.0",
|
|
111
111
|
"@fluidframework/build-common": "^2.0.3",
|
|
112
|
-
"@fluidframework/build-tools": "^0.
|
|
113
|
-
"@fluidframework/container-definitions": ">=2.0.0-rc.
|
|
112
|
+
"@fluidframework/build-tools": "^0.38.0",
|
|
113
|
+
"@fluidframework/container-definitions": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
114
114
|
"@fluidframework/eslint-config-fluid": "^5.1.0",
|
|
115
|
-
"@fluidframework/sequence-previous": "npm:@fluidframework/sequence@2.0.0-
|
|
116
|
-
"@fluidframework/test-runtime-utils": ">=2.0.0-rc.
|
|
117
|
-
"@microsoft/api-extractor": "^7.
|
|
115
|
+
"@fluidframework/sequence-previous": "npm:@fluidframework/sequence@2.0.0-rc.3.0.0",
|
|
116
|
+
"@fluidframework/test-runtime-utils": ">=2.0.0-rc.4.0.0 <2.0.0-rc.4.1.0",
|
|
117
|
+
"@microsoft/api-extractor": "^7.43.1",
|
|
118
118
|
"@types/diff": "^3.5.1",
|
|
119
119
|
"@types/double-ended-queue": "^2.1.0",
|
|
120
120
|
"@types/mocha": "^9.1.1",
|
|
@@ -145,11 +145,25 @@
|
|
|
145
145
|
},
|
|
146
146
|
"typeValidation": {
|
|
147
147
|
"broken": {
|
|
148
|
-
"
|
|
149
|
-
"backCompat": false
|
|
148
|
+
"RemovedClassDeclaration_SharedString": {
|
|
149
|
+
"backCompat": false,
|
|
150
|
+
"forwardCompat": false
|
|
150
151
|
},
|
|
151
|
-
"
|
|
152
|
-
"
|
|
152
|
+
"InterfaceDeclaration_ISharedString": {
|
|
153
|
+
"forwardCompat": false
|
|
154
|
+
},
|
|
155
|
+
"ClassDeclaration_SharedIntervalCollection": {
|
|
156
|
+
"forwardCompat": false
|
|
157
|
+
},
|
|
158
|
+
"ClassDeclaration_SharedSegmentSequence": {
|
|
159
|
+
"forwardCompat": false
|
|
160
|
+
},
|
|
161
|
+
"ClassDeclaration_SharedSequence": {
|
|
162
|
+
"forwardCompat": false
|
|
163
|
+
},
|
|
164
|
+
"RemovedClassDeclaration_SharedStringFactory": {
|
|
165
|
+
"backCompat": false,
|
|
166
|
+
"forwardCompat": false
|
|
153
167
|
}
|
|
154
168
|
}
|
|
155
169
|
},
|
|
@@ -191,7 +205,7 @@
|
|
|
191
205
|
"test:newsnapfiles": "node lib/test/createSnapshotFiles.js",
|
|
192
206
|
"test:stress": "cross-env FUZZ_TEST_COUNT=100 FUZZ_STRESS_RUN=true mocha --ignore \"lib/test/memory/**/*\" --recursive \"lib/test/**/*.fuzz.spec.*js\" -r @fluid-internal/mocha-test-setup",
|
|
193
207
|
"tsc": "fluid-tsc commonjs --project ./tsconfig.cjs.json && copyfiles -f ../../../common/build/build-common/src/cjs/package.json ./dist",
|
|
194
|
-
"typetests:gen": "
|
|
208
|
+
"typetests:gen": "flub generate typetests --dir . -v --publicFallback",
|
|
195
209
|
"typetests:prepare": "flub typetests --dir . --reset --previous --normalize"
|
|
196
210
|
}
|
|
197
211
|
}
|
|
@@ -53,8 +53,6 @@ export function makeSerializable<T extends ISerializableInterval>(
|
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
55
|
* Manages a contained value type.
|
|
56
|
-
*
|
|
57
|
-
* @alpha
|
|
58
56
|
*/
|
|
59
57
|
export class IntervalCollectionTypeLocalValue<T extends ISerializableInterval>
|
|
60
58
|
implements ILocalIntervalCollection<T>
|
package/src/index.ts
CHANGED
|
@@ -76,12 +76,12 @@ export {
|
|
|
76
76
|
SequenceEvent,
|
|
77
77
|
SequenceMaintenanceEvent,
|
|
78
78
|
} from "./sequenceDeltaEvent.js";
|
|
79
|
-
export {
|
|
79
|
+
export { SharedString } from "./sequenceFactory.js";
|
|
80
80
|
export {
|
|
81
81
|
getTextAndMarkers,
|
|
82
82
|
ISharedString,
|
|
83
|
-
SharedString,
|
|
84
83
|
SharedStringSegment,
|
|
84
|
+
SharedStringClass,
|
|
85
85
|
} from "./sharedString.js";
|
|
86
86
|
export {
|
|
87
87
|
ISharedIntervalCollection,
|
|
@@ -1281,7 +1281,7 @@ export class IntervalCollection<TInterval extends ISerializableInterval>
|
|
|
1281
1281
|
start: startPos,
|
|
1282
1282
|
end: endPos,
|
|
1283
1283
|
intervalType: IntervalType.SlideOnRemove,
|
|
1284
|
-
properties: interval.properties,
|
|
1284
|
+
properties: { ...interval.properties },
|
|
1285
1285
|
sequenceNumber: this.client?.getCurrentSeq() ?? 0,
|
|
1286
1286
|
stickiness,
|
|
1287
1287
|
startSide,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
SequenceInterval,
|
|
15
15
|
sequenceIntervalHelpers,
|
|
16
16
|
} from "../intervals/index.js";
|
|
17
|
-
import {
|
|
17
|
+
import { ISharedString } from "../sharedString.js";
|
|
18
18
|
|
|
19
19
|
import { IntervalIndex } from "./intervalIndex.js";
|
|
20
20
|
import { HasComparisonOverride, compareOverrideables, forceCompare } from "./intervalIndexUtils.js";
|
|
@@ -112,7 +112,7 @@ export class EndpointInRangeIndex<TInterval extends ISerializableInterval>
|
|
|
112
112
|
* @internal
|
|
113
113
|
*/
|
|
114
114
|
export function createEndpointInRangeIndex(
|
|
115
|
-
sharedString:
|
|
115
|
+
sharedString: ISharedString,
|
|
116
116
|
): IEndpointInRangeIndex<SequenceInterval> {
|
|
117
117
|
const client = (sharedString as unknown as { client: Client }).client;
|
|
118
118
|
return new EndpointInRangeIndex<SequenceInterval>(client, sequenceIntervalHelpers);
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
SequenceInterval,
|
|
15
15
|
sequenceIntervalHelpers,
|
|
16
16
|
} from "../intervals/index.js";
|
|
17
|
-
import {
|
|
17
|
+
import { ISharedString } from "../sharedString.js";
|
|
18
18
|
|
|
19
19
|
import { IntervalIndex } from "./intervalIndex.js";
|
|
20
20
|
|
|
@@ -88,7 +88,7 @@ export class EndpointIndex<TInterval extends ISerializableInterval>
|
|
|
88
88
|
/**
|
|
89
89
|
* @internal
|
|
90
90
|
*/
|
|
91
|
-
export function createEndpointIndex(sharedString:
|
|
91
|
+
export function createEndpointIndex(sharedString: ISharedString): IEndpointIndex<SequenceInterval> {
|
|
92
92
|
const client = (sharedString as unknown as { client: Client }).client;
|
|
93
93
|
return new EndpointIndex<SequenceInterval>(client, sequenceIntervalHelpers);
|
|
94
94
|
}
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
SequenceInterval,
|
|
17
17
|
sequenceIntervalHelpers,
|
|
18
18
|
} from "../intervals/index.js";
|
|
19
|
-
import {
|
|
19
|
+
import { ISharedString } from "../sharedString.js";
|
|
20
20
|
|
|
21
21
|
import { IntervalIndex } from "./intervalIndex.js";
|
|
22
22
|
|
|
@@ -182,7 +182,7 @@ export class OverlappingIntervalsIndex<TInterval extends ISerializableInterval>
|
|
|
182
182
|
* @alpha
|
|
183
183
|
*/
|
|
184
184
|
export function createOverlappingIntervalsIndex(
|
|
185
|
-
sharedString:
|
|
185
|
+
sharedString: ISharedString,
|
|
186
186
|
): IOverlappingIntervalsIndex<SequenceInterval> {
|
|
187
187
|
const client = (sharedString as unknown as { client: Client }).client;
|
|
188
188
|
return new OverlappingIntervalsIndex<SequenceInterval>(client, sequenceIntervalHelpers);
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
createPositionReferenceFromSegoff,
|
|
20
20
|
sequenceIntervalHelpers,
|
|
21
21
|
} from "../intervals/index.js";
|
|
22
|
-
import {
|
|
22
|
+
import { ISharedString } from "../sharedString.js";
|
|
23
23
|
|
|
24
24
|
import { OverlappingIntervalsIndex } from "./overlappingIntervalsIndex.js";
|
|
25
25
|
import { SequenceIntervalIndexes } from "./sequenceIntervalIndexes.js";
|
|
@@ -76,7 +76,7 @@ class OverlappingSequenceIntervalsIndex
|
|
|
76
76
|
* @internal
|
|
77
77
|
*/
|
|
78
78
|
export function createOverlappingSequenceIntervalsIndex(
|
|
79
|
-
sharedString:
|
|
79
|
+
sharedString: ISharedString,
|
|
80
80
|
): SequenceIntervalIndexes.Overlapping {
|
|
81
81
|
const client = (sharedString as unknown as { client: Client }).client;
|
|
82
82
|
return new OverlappingSequenceIntervalsIndex(client);
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
SequenceInterval,
|
|
15
15
|
sequenceIntervalHelpers,
|
|
16
16
|
} from "../intervals/index.js";
|
|
17
|
-
import {
|
|
17
|
+
import { ISharedString } from "../sharedString.js";
|
|
18
18
|
|
|
19
19
|
import { IntervalIndex } from "./intervalIndex.js";
|
|
20
20
|
import { HasComparisonOverride, compareOverrideables, forceCompare } from "./intervalIndexUtils.js";
|
|
@@ -110,7 +110,7 @@ export class StartpointInRangeIndex<TInterval extends ISerializableInterval>
|
|
|
110
110
|
* @internal
|
|
111
111
|
*/
|
|
112
112
|
export function createStartpointInRangeIndex(
|
|
113
|
-
sharedString:
|
|
113
|
+
sharedString: ISharedString,
|
|
114
114
|
): IStartpointInRangeIndex<SequenceInterval> {
|
|
115
115
|
const client = (sharedString as unknown as { client: Client }).client;
|
|
116
116
|
return new StartpointInRangeIndex<SequenceInterval>(client, sequenceIntervalHelpers);
|
|
@@ -89,7 +89,7 @@ export class Interval implements ISerializableInterval {
|
|
|
89
89
|
start: this.start,
|
|
90
90
|
};
|
|
91
91
|
if (this.properties) {
|
|
92
|
-
serializedInterval.properties = this.properties;
|
|
92
|
+
serializedInterval.properties = { ...this.properties };
|
|
93
93
|
}
|
|
94
94
|
return serializedInterval;
|
|
95
95
|
}
|
|
@@ -198,7 +198,7 @@ export class SequenceInterval implements ISerializableInterval {
|
|
|
198
198
|
};
|
|
199
199
|
|
|
200
200
|
if (this.properties) {
|
|
201
|
-
serializedInterval.properties = this.properties;
|
|
201
|
+
serializedInterval.properties = { ...this.properties };
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
return serializedInterval;
|
package/src/packageVersion.ts
CHANGED
package/src/revertibles.ts
CHANGED
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
import { InteriorSequencePlace, Side } from "./intervalCollection.js";
|
|
27
27
|
import { IntervalOpType, SequenceInterval } from "./intervals/index.js";
|
|
28
28
|
import { ISequenceDeltaRange, SequenceDeltaEvent } from "./sequenceDeltaEvent.js";
|
|
29
|
-
import {
|
|
29
|
+
import { ISharedString, SharedStringSegment } from "./sharedString.js";
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Data for undoing edits on SharedStrings and Intervals.
|
|
@@ -111,7 +111,7 @@ export function appendAddIntervalToRevertibles(
|
|
|
111
111
|
* @alpha
|
|
112
112
|
*/
|
|
113
113
|
export function appendDeleteIntervalToRevertibles(
|
|
114
|
-
string:
|
|
114
|
+
string: ISharedString,
|
|
115
115
|
interval: SequenceInterval,
|
|
116
116
|
revertibles: SharedStringRevertible[],
|
|
117
117
|
): SharedStringRevertible[] {
|
|
@@ -163,7 +163,7 @@ export function appendDeleteIntervalToRevertibles(
|
|
|
163
163
|
* @alpha
|
|
164
164
|
*/
|
|
165
165
|
export function appendChangeIntervalToRevertibles(
|
|
166
|
-
string:
|
|
166
|
+
string: ISharedString,
|
|
167
167
|
newInterval: SequenceInterval,
|
|
168
168
|
previousInterval: SequenceInterval,
|
|
169
169
|
revertibles: SharedStringRevertible[],
|
|
@@ -273,7 +273,7 @@ function addIfRevertibleRef(
|
|
|
273
273
|
* @alpha
|
|
274
274
|
*/
|
|
275
275
|
export function appendSharedStringDeltaToRevertibles(
|
|
276
|
-
string:
|
|
276
|
+
string: ISharedString,
|
|
277
277
|
delta: SequenceDeltaEvent,
|
|
278
278
|
revertibles: SharedStringRevertible[],
|
|
279
279
|
) {
|
|
@@ -366,7 +366,7 @@ export function appendSharedStringDeltaToRevertibles(
|
|
|
366
366
|
* @alpha
|
|
367
367
|
*/
|
|
368
368
|
export function discardSharedStringRevertibles(
|
|
369
|
-
sharedString:
|
|
369
|
+
sharedString: ISharedString,
|
|
370
370
|
revertibles: SharedStringRevertible[],
|
|
371
371
|
) {
|
|
372
372
|
revertibles.forEach((r) => {
|
|
@@ -379,7 +379,11 @@ export function discardSharedStringRevertibles(
|
|
|
379
379
|
});
|
|
380
380
|
}
|
|
381
381
|
|
|
382
|
-
function getSlidePosition(
|
|
382
|
+
function getSlidePosition(
|
|
383
|
+
string: ISharedString,
|
|
384
|
+
lref: LocalReferencePosition,
|
|
385
|
+
pos: number,
|
|
386
|
+
): number {
|
|
383
387
|
const slide = getSlideToSegoff(
|
|
384
388
|
{ segment: lref.getSegment(), offset: undefined },
|
|
385
389
|
lref.slidingPreference,
|
|
@@ -397,7 +401,7 @@ function isValidRange(
|
|
|
397
401
|
startSlide: SlidingPreference | undefined,
|
|
398
402
|
end: number,
|
|
399
403
|
endSlide: SlidingPreference | undefined,
|
|
400
|
-
string:
|
|
404
|
+
string: ISharedString,
|
|
401
405
|
) {
|
|
402
406
|
return (
|
|
403
407
|
start >= 0 &&
|
|
@@ -412,7 +416,7 @@ function isValidRange(
|
|
|
412
416
|
}
|
|
413
417
|
|
|
414
418
|
function revertLocalAdd(
|
|
415
|
-
string:
|
|
419
|
+
string: ISharedString,
|
|
416
420
|
revertible: TypedRevertible<typeof IntervalOpType.ADD>,
|
|
417
421
|
) {
|
|
418
422
|
const id = getUpdatedIdFromInterval(revertible.interval);
|
|
@@ -441,7 +445,7 @@ function createSequencePlace(
|
|
|
441
445
|
}
|
|
442
446
|
|
|
443
447
|
function revertLocalDelete(
|
|
444
|
-
string:
|
|
448
|
+
string: ISharedString,
|
|
445
449
|
revertible: TypedRevertible<typeof IntervalOpType.DELETE>,
|
|
446
450
|
) {
|
|
447
451
|
const label = revertible.interval.properties.referenceRangeLabels[0];
|
|
@@ -480,7 +484,7 @@ function revertLocalDelete(
|
|
|
480
484
|
}
|
|
481
485
|
|
|
482
486
|
function revertLocalChange(
|
|
483
|
-
string:
|
|
487
|
+
string: ISharedString,
|
|
484
488
|
revertible: TypedRevertible<typeof IntervalOpType.CHANGE>,
|
|
485
489
|
) {
|
|
486
490
|
const label = revertible.interval.properties.referenceRangeLabels[0];
|
|
@@ -520,7 +524,7 @@ function revertLocalChange(
|
|
|
520
524
|
}
|
|
521
525
|
|
|
522
526
|
function revertLocalPropertyChanged(
|
|
523
|
-
string:
|
|
527
|
+
string: ISharedString,
|
|
524
528
|
revertible: TypedRevertible<typeof IntervalOpType.PROPERTY_CHANGED>,
|
|
525
529
|
) {
|
|
526
530
|
const label = revertible.interval.properties.referenceRangeLabels[0];
|
|
@@ -554,7 +558,7 @@ function newPosition(offset: number | undefined, restoredRanges: SortedRangeSet)
|
|
|
554
558
|
function newEndpointPosition(
|
|
555
559
|
offset: number | undefined,
|
|
556
560
|
restoredRanges: SortedRangeSet,
|
|
557
|
-
sharedString:
|
|
561
|
+
sharedString: ISharedString,
|
|
558
562
|
) {
|
|
559
563
|
const pos = newPosition(offset, restoredRanges);
|
|
560
564
|
return pos === undefined ? undefined : sharedString.getPosition(pos.segment) + pos.offset;
|
|
@@ -573,7 +577,7 @@ class SortedRangeSet extends SortedSet<RangeInfo, string> {
|
|
|
573
577
|
}
|
|
574
578
|
|
|
575
579
|
function revertLocalSequenceRemove(
|
|
576
|
-
sharedString:
|
|
580
|
+
sharedString: ISharedString,
|
|
577
581
|
revertible: TypedRevertible<typeof IntervalOpType.POSITION_REMOVE>,
|
|
578
582
|
) {
|
|
579
583
|
const restoredRanges = new SortedRangeSet();
|
|
@@ -657,7 +661,7 @@ function revertLocalSequenceRemove(
|
|
|
657
661
|
* @alpha
|
|
658
662
|
*/
|
|
659
663
|
export function revertSharedStringRevertibles(
|
|
660
|
-
sharedString:
|
|
664
|
+
sharedString: ISharedString,
|
|
661
665
|
revertibles: SharedStringRevertible[],
|
|
662
666
|
) {
|
|
663
667
|
while (revertibles.length > 0) {
|
package/src/sequence.ts
CHANGED
|
@@ -17,7 +17,9 @@ import {
|
|
|
17
17
|
IJSONSegment,
|
|
18
18
|
IMergeTreeAnnotateMsg,
|
|
19
19
|
IMergeTreeDeltaOp,
|
|
20
|
+
// eslint-disable-next-line import/no-deprecated
|
|
20
21
|
IMergeTreeGroupMsg,
|
|
22
|
+
// eslint-disable-next-line import/no-deprecated
|
|
21
23
|
IMergeTreeObliterateMsg,
|
|
22
24
|
IMergeTreeOp,
|
|
23
25
|
IMergeTreeRemoveMsg,
|
|
@@ -30,9 +32,11 @@ import {
|
|
|
30
32
|
PropertySet,
|
|
31
33
|
ReferencePosition,
|
|
32
34
|
ReferenceType,
|
|
35
|
+
// eslint-disable-next-line import/no-deprecated
|
|
33
36
|
SegmentGroup,
|
|
34
37
|
SlidingPreference,
|
|
35
|
-
createAnnotateRangeOp,
|
|
38
|
+
createAnnotateRangeOp,
|
|
39
|
+
// eslint-disable-next-line import/no-deprecated
|
|
36
40
|
createGroupOp,
|
|
37
41
|
createInsertOp,
|
|
38
42
|
createObliterateRangeOp,
|
|
@@ -180,6 +184,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
180
184
|
}
|
|
181
185
|
|
|
182
186
|
case MergeTreeDeltaType.OBLITERATE: {
|
|
187
|
+
// eslint-disable-next-line import/no-deprecated
|
|
183
188
|
const lastRem = ops[ops.length - 1] as IMergeTreeObliterateMsg;
|
|
184
189
|
if (lastRem?.pos1 === r.position) {
|
|
185
190
|
assert(
|
|
@@ -235,7 +240,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
235
240
|
* DDS submits over the wire. See `inFlightRefSeqs` for more details.
|
|
236
241
|
*/
|
|
237
242
|
private get currentRefSeq() {
|
|
238
|
-
return this.ongoingResubmitRefSeq ?? this.
|
|
243
|
+
return this.ongoingResubmitRefSeq ?? this.deltaManager.lastSequenceNumber;
|
|
239
244
|
}
|
|
240
245
|
|
|
241
246
|
// eslint-disable-next-line import/no-deprecated
|
|
@@ -243,6 +248,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
243
248
|
/** `Deferred` that triggers once the object is loaded */
|
|
244
249
|
protected loadedDeferred = new Deferred<void>();
|
|
245
250
|
// cache out going ops created when partial loading
|
|
251
|
+
// eslint-disable-next-line import/no-deprecated
|
|
246
252
|
private readonly loadedDeferredOutgoingOps: [IMergeTreeOp, SegmentGroup | SegmentGroup[]][] =
|
|
247
253
|
[];
|
|
248
254
|
// cache incoming ops that arrive when partial loading
|
|
@@ -340,6 +346,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
340
346
|
* release, as group ops are redundant with the native batching capabilities
|
|
341
347
|
* of the runtime
|
|
342
348
|
*/
|
|
349
|
+
// eslint-disable-next-line import/no-deprecated
|
|
343
350
|
public groupOperation(groupOp: IMergeTreeGroupMsg) {
|
|
344
351
|
this.guardReentrancy(() => this.client.localTransaction(groupOp));
|
|
345
352
|
}
|
|
@@ -654,6 +661,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
654
661
|
this.submitSequenceMessage(
|
|
655
662
|
this.client.regeneratePendingOp(
|
|
656
663
|
content as IMergeTreeOp,
|
|
664
|
+
// eslint-disable-next-line import/no-deprecated
|
|
657
665
|
localOpMetadata as SegmentGroup | SegmentGroup[],
|
|
658
666
|
),
|
|
659
667
|
);
|
|
@@ -803,7 +811,7 @@ export abstract class SharedSegmentSequence<T extends ISegment>
|
|
|
803
811
|
this.loadedDeferred.isCompleted,
|
|
804
812
|
0x074 /* "Snapshot called when not fully loaded" */,
|
|
805
813
|
);
|
|
806
|
-
const minSeq = this.
|
|
814
|
+
const minSeq = this.deltaManager.minimumSequenceNumber;
|
|
807
815
|
|
|
808
816
|
this.processMinSequenceNumberChanged(minSeq);
|
|
809
817
|
|
|
@@ -36,6 +36,9 @@ export abstract class SequenceEvent<
|
|
|
36
36
|
private readonly pLast: Lazy<ISequenceDeltaRange<TOperation>>;
|
|
37
37
|
|
|
38
38
|
constructor(
|
|
39
|
+
/**
|
|
40
|
+
* Arguments reflecting the type of change that caused this event.
|
|
41
|
+
*/
|
|
39
42
|
public readonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>,
|
|
40
43
|
// eslint-disable-next-line import/no-deprecated
|
|
41
44
|
private readonly mergeTreeClient: Client,
|
|
@@ -73,7 +76,10 @@ export abstract class SequenceEvent<
|
|
|
73
76
|
|
|
74
77
|
/**
|
|
75
78
|
* The in-order ranges affected by this delta.
|
|
76
|
-
* These
|
|
79
|
+
* These are not necessarily contiguous.
|
|
80
|
+
*
|
|
81
|
+
* @remarks - If processing code doesn't care about the order of the ranges, it may instead consider using the
|
|
82
|
+
* {@link @fluidframework/merge-tree#IMergeTreeDeltaCallbackArgs.deltaSegments|deltaSegments} field on {@link SequenceEvent.deltaArgs|deltaArgs}.
|
|
77
83
|
*/
|
|
78
84
|
public get ranges(): readonly Readonly<ISequenceDeltaRange<TOperation>>[] {
|
|
79
85
|
return this.sortedRanges.value.items;
|
|
@@ -140,6 +146,11 @@ export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationTyp
|
|
|
140
146
|
*/
|
|
141
147
|
export class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {
|
|
142
148
|
constructor(
|
|
149
|
+
/**
|
|
150
|
+
* Defined iff `deltaArgs.operation` is {@link @fluidframework/merge-tree#MergeTreeMaintenanceType.ACKNOWLEDGED|MergeTreeMaintenanceType.ACKNOWLEDGED}.
|
|
151
|
+
*
|
|
152
|
+
* In that case, this argument provides information about the change which was acknowledged.
|
|
153
|
+
*/
|
|
143
154
|
public readonly opArgs: IMergeTreeDeltaOpArgs | undefined,
|
|
144
155
|
deltaArgs: IMergeTreeMaintenanceCallbackArgs,
|
|
145
156
|
// eslint-disable-next-line import/no-deprecated
|
package/src/sequenceFactory.ts
CHANGED
|
@@ -10,14 +10,13 @@ import {
|
|
|
10
10
|
IFluidDataStoreRuntime,
|
|
11
11
|
} from "@fluidframework/datastore-definitions";
|
|
12
12
|
import { Marker, TextSegment } from "@fluidframework/merge-tree/internal";
|
|
13
|
+
import type { ISharedObjectKind } from "@fluidframework/shared-object-base";
|
|
14
|
+
import { createSharedObjectKind } from "@fluidframework/shared-object-base/internal";
|
|
13
15
|
|
|
14
16
|
import { pkgVersion } from "./packageVersion.js";
|
|
15
|
-
import {
|
|
17
|
+
import { SharedStringClass, SharedStringSegment, type ISharedString } from "./sharedString.js";
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
* @alpha
|
|
19
|
-
*/
|
|
20
|
-
export class SharedStringFactory implements IChannelFactory {
|
|
19
|
+
export class SharedStringFactory implements IChannelFactory<ISharedString> {
|
|
21
20
|
// TODO rename back to https://graph.microsoft.com/types/mergeTree/string once paparazzi is able to dynamically
|
|
22
21
|
// load code (UPDATE: paparazzi is gone... anything to do here?)
|
|
23
22
|
public static Type = "https://graph.microsoft.com/types/mergeTree";
|
|
@@ -58,8 +57,8 @@ export class SharedStringFactory implements IChannelFactory {
|
|
|
58
57
|
id: string,
|
|
59
58
|
services: IChannelServices,
|
|
60
59
|
attributes: IChannelAttributes,
|
|
61
|
-
): Promise<
|
|
62
|
-
const sharedString = new
|
|
60
|
+
): Promise<SharedStringClass> {
|
|
61
|
+
const sharedString = new SharedStringClass(runtime, id, attributes);
|
|
63
62
|
await sharedString.load(services);
|
|
64
63
|
return sharedString;
|
|
65
64
|
}
|
|
@@ -67,9 +66,22 @@ export class SharedStringFactory implements IChannelFactory {
|
|
|
67
66
|
/**
|
|
68
67
|
* {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.create}
|
|
69
68
|
*/
|
|
70
|
-
public create(document: IFluidDataStoreRuntime, id: string):
|
|
71
|
-
const sharedString = new
|
|
69
|
+
public create(document: IFluidDataStoreRuntime, id: string): SharedStringClass {
|
|
70
|
+
const sharedString = new SharedStringClass(document, id, this.attributes);
|
|
72
71
|
sharedString.initializeLocal();
|
|
73
72
|
return sharedString;
|
|
74
73
|
}
|
|
75
74
|
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Entrypoint for {@link ISharedString} creation.
|
|
78
|
+
* @alpha
|
|
79
|
+
*/
|
|
80
|
+
export const SharedString: ISharedObjectKind<ISharedString> =
|
|
81
|
+
createSharedObjectKind(SharedStringFactory);
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Alias for {@link ISharedString} for compatibility.
|
|
85
|
+
* @alpha
|
|
86
|
+
*/
|
|
87
|
+
export type SharedString = ISharedString;
|