@fluidframework/sequence 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.224419
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.js +9 -11
- package/.mocharc.js +12 -0
- package/CHANGELOG.md +449 -0
- package/README.md +364 -183
- package/api-extractor-lint.json +4 -0
- package/api-extractor.json +2 -2
- package/api-report/sequence.api.md +741 -0
- package/dist/{defaultMap.js → defaultMap.cjs} +29 -22
- package/dist/defaultMap.cjs.map +1 -0
- package/dist/defaultMap.d.ts +7 -6
- package/dist/defaultMap.d.ts.map +1 -1
- package/dist/defaultMapInterfaces.cjs +7 -0
- package/dist/defaultMapInterfaces.cjs.map +1 -0
- package/dist/defaultMapInterfaces.d.ts +44 -12
- package/dist/defaultMapInterfaces.d.ts.map +1 -1
- package/dist/index.cjs +60 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +14 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/intervalCollection.cjs +1159 -0
- package/dist/intervalCollection.cjs.map +1 -0
- package/dist/intervalCollection.d.ts +461 -162
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalIndex/endpointInRangeIndex.cjs +66 -0
- package/dist/intervalIndex/endpointInRangeIndex.cjs.map +1 -0
- package/dist/intervalIndex/endpointInRangeIndex.d.ts +34 -0
- package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -0
- package/dist/intervalIndex/endpointIndex.cjs +47 -0
- package/dist/intervalIndex/endpointIndex.cjs.map +1 -0
- package/dist/intervalIndex/endpointIndex.d.ts +38 -0
- package/dist/intervalIndex/endpointIndex.d.ts.map +1 -0
- package/dist/intervalIndex/idIntervalIndex.cjs +44 -0
- package/dist/intervalIndex/idIntervalIndex.cjs.map +1 -0
- package/dist/intervalIndex/idIntervalIndex.d.ts +18 -0
- package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -0
- package/dist/intervalIndex/index.cjs +24 -0
- package/dist/intervalIndex/index.cjs.map +1 -0
- package/dist/intervalIndex/index.d.ts +13 -0
- package/dist/intervalIndex/index.d.ts.map +1 -0
- package/dist/{defaultMapInterfaces.js → intervalIndex/intervalIndex.cjs} +1 -1
- package/dist/intervalIndex/intervalIndex.cjs.map +1 -0
- package/dist/intervalIndex/intervalIndex.d.ts +30 -0
- package/dist/intervalIndex/intervalIndex.d.ts.map +1 -0
- package/dist/intervalIndex/intervalIndexUtils.cjs +22 -0
- package/dist/intervalIndex/intervalIndexUtils.cjs.map +1 -0
- package/dist/intervalIndex/intervalIndexUtils.d.ts +17 -0
- package/dist/intervalIndex/intervalIndexUtils.d.ts.map +1 -0
- package/dist/intervalIndex/overlappingIntervalsIndex.cjs +116 -0
- package/dist/intervalIndex/overlappingIntervalsIndex.cjs.map +1 -0
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +44 -0
- package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -0
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.cjs +41 -0
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.cjs.map +1 -0
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +11 -0
- package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -0
- package/dist/intervalIndex/sequenceIntervalIndexes.cjs +7 -0
- package/dist/intervalIndex/sequenceIntervalIndexes.cjs.map +1 -0
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +35 -0
- package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -0
- package/dist/intervalIndex/startpointInRangeIndex.cjs +66 -0
- package/dist/intervalIndex/startpointInRangeIndex.cjs.map +1 -0
- package/dist/intervalIndex/startpointInRangeIndex.d.ts +34 -0
- package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -0
- package/dist/intervalTree.cjs +80 -0
- package/dist/intervalTree.cjs.map +1 -0
- package/dist/intervalTree.d.ts +24 -0
- package/dist/intervalTree.d.ts.map +1 -0
- package/dist/intervals/index.cjs +23 -0
- package/dist/intervals/index.cjs.map +1 -0
- package/dist/intervals/index.d.ts +8 -0
- package/dist/intervals/index.d.ts.map +1 -0
- package/dist/intervals/interval.cjs +181 -0
- package/dist/intervals/interval.cjs.map +1 -0
- package/dist/intervals/interval.d.ts +84 -0
- package/dist/intervals/interval.d.ts.map +1 -0
- package/dist/intervals/intervalUtils.cjs +83 -0
- package/dist/intervals/intervalUtils.cjs.map +1 -0
- package/dist/intervals/intervalUtils.d.ts +230 -0
- package/dist/intervals/intervalUtils.d.ts.map +1 -0
- package/dist/intervals/sequenceInterval.cjs +378 -0
- package/dist/intervals/sequenceInterval.cjs.map +1 -0
- package/dist/intervals/sequenceInterval.d.ts +137 -0
- package/dist/intervals/sequenceInterval.d.ts.map +1 -0
- package/dist/{localValues.js → localValues.cjs} +1 -1
- package/dist/localValues.cjs.map +1 -0
- package/dist/localValues.d.ts +2 -1
- package/dist/localValues.d.ts.map +1 -1
- package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
- package/dist/packageVersion.cjs.map +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/revertibles.cjs +425 -0
- package/dist/revertibles.cjs.map +1 -0
- package/dist/revertibles.d.ts +86 -0
- package/dist/revertibles.d.ts.map +1 -0
- package/dist/sequence-alpha.d.ts +1315 -0
- package/dist/sequence-beta.d.ts +244 -0
- package/dist/sequence-public.d.ts +244 -0
- package/dist/sequence-untrimmed.d.ts +1803 -0
- package/dist/{sequence.js → sequence.cjs} +226 -156
- package/dist/sequence.cjs.map +1 -0
- package/dist/sequence.d.ts +125 -48
- package/dist/sequence.d.ts.map +1 -1
- package/dist/{sequenceDeltaEvent.js → sequenceDeltaEvent.cjs} +18 -8
- package/dist/sequenceDeltaEvent.cjs.map +1 -0
- package/dist/sequenceDeltaEvent.d.ts +24 -7
- package/dist/sequenceDeltaEvent.d.ts.map +1 -1
- package/dist/sequenceFactory.cjs +55 -0
- package/dist/sequenceFactory.cjs.map +1 -0
- package/dist/sequenceFactory.d.ts +3 -89
- package/dist/sequenceFactory.d.ts.map +1 -1
- package/dist/{sharedIntervalCollection.js → sharedIntervalCollection.cjs} +17 -22
- package/dist/sharedIntervalCollection.cjs.map +1 -0
- package/dist/sharedIntervalCollection.d.ts +12 -12
- package/dist/sharedIntervalCollection.d.ts.map +1 -1
- package/dist/{sharedSequence.js → sharedSequence.cjs} +29 -22
- package/dist/sharedSequence.cjs.map +1 -0
- package/dist/sharedSequence.d.ts +14 -2
- package/dist/sharedSequence.d.ts.map +1 -1
- package/dist/sharedString.cjs +286 -0
- package/dist/sharedString.cjs.map +1 -0
- package/dist/sharedString.d.ts +58 -22
- package/dist/sharedString.d.ts.map +1 -1
- package/dist/tsdoc-metadata.json +11 -0
- package/lib/{defaultMap.d.ts → defaultMap.d.mts} +7 -6
- package/lib/defaultMap.d.mts.map +1 -0
- package/lib/{defaultMap.js → defaultMap.mjs} +28 -21
- package/lib/defaultMap.mjs.map +1 -0
- package/lib/{defaultMapInterfaces.d.ts → defaultMapInterfaces.d.mts} +44 -12
- package/lib/defaultMapInterfaces.d.mts.map +1 -0
- package/lib/defaultMapInterfaces.mjs +6 -0
- package/lib/defaultMapInterfaces.mjs.map +1 -0
- package/lib/index.d.mts +17 -0
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +16 -0
- package/lib/index.mjs.map +1 -0
- package/lib/intervalCollection.d.mts +569 -0
- package/lib/intervalCollection.d.mts.map +1 -0
- package/lib/intervalCollection.mjs +1144 -0
- package/lib/intervalCollection.mjs.map +1 -0
- package/lib/intervalIndex/endpointInRangeIndex.d.mts +34 -0
- package/lib/intervalIndex/endpointInRangeIndex.d.mts.map +1 -0
- package/lib/intervalIndex/endpointInRangeIndex.mjs +61 -0
- package/lib/intervalIndex/endpointInRangeIndex.mjs.map +1 -0
- package/lib/intervalIndex/endpointIndex.d.mts +38 -0
- package/lib/intervalIndex/endpointIndex.d.mts.map +1 -0
- package/lib/intervalIndex/endpointIndex.mjs +42 -0
- package/lib/intervalIndex/endpointIndex.mjs.map +1 -0
- package/lib/intervalIndex/idIntervalIndex.d.mts +18 -0
- package/lib/intervalIndex/idIntervalIndex.d.mts.map +1 -0
- package/lib/intervalIndex/idIntervalIndex.mjs +40 -0
- package/lib/intervalIndex/idIntervalIndex.mjs.map +1 -0
- package/lib/intervalIndex/index.d.mts +13 -0
- package/lib/intervalIndex/index.d.mts.map +1 -0
- package/lib/intervalIndex/index.mjs +11 -0
- package/lib/intervalIndex/index.mjs.map +1 -0
- package/lib/intervalIndex/intervalIndex.d.mts +30 -0
- package/lib/intervalIndex/intervalIndex.d.mts.map +1 -0
- package/lib/{defaultMapInterfaces.js → intervalIndex/intervalIndex.mjs} +1 -1
- package/lib/intervalIndex/intervalIndex.mjs.map +1 -0
- package/lib/intervalIndex/intervalIndexUtils.d.mts +17 -0
- package/lib/intervalIndex/intervalIndexUtils.d.mts.map +1 -0
- package/lib/intervalIndex/intervalIndexUtils.mjs +18 -0
- package/lib/intervalIndex/intervalIndexUtils.mjs.map +1 -0
- package/lib/intervalIndex/overlappingIntervalsIndex.d.mts +44 -0
- package/lib/intervalIndex/overlappingIntervalsIndex.d.mts.map +1 -0
- package/lib/intervalIndex/overlappingIntervalsIndex.mjs +111 -0
- package/lib/intervalIndex/overlappingIntervalsIndex.mjs.map +1 -0
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.mts +11 -0
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.mts.map +1 -0
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.mjs +37 -0
- package/lib/intervalIndex/overlappingSequenceIntervalsIndex.mjs.map +1 -0
- package/lib/intervalIndex/sequenceIntervalIndexes.d.mts +35 -0
- package/lib/intervalIndex/sequenceIntervalIndexes.d.mts.map +1 -0
- package/lib/intervalIndex/sequenceIntervalIndexes.mjs +6 -0
- package/lib/intervalIndex/sequenceIntervalIndexes.mjs.map +1 -0
- package/lib/intervalIndex/startpointInRangeIndex.d.mts +34 -0
- package/lib/intervalIndex/startpointInRangeIndex.d.mts.map +1 -0
- package/lib/intervalIndex/startpointInRangeIndex.mjs +61 -0
- package/lib/intervalIndex/startpointInRangeIndex.mjs.map +1 -0
- package/lib/intervalTree.d.mts +24 -0
- package/lib/intervalTree.d.mts.map +1 -0
- package/lib/intervalTree.mjs +76 -0
- package/lib/intervalTree.mjs.map +1 -0
- package/lib/intervals/index.d.mts +8 -0
- package/lib/intervals/index.d.mts.map +1 -0
- package/lib/intervals/index.mjs +8 -0
- package/lib/intervals/index.mjs.map +1 -0
- package/lib/intervals/interval.d.mts +84 -0
- package/lib/intervals/interval.d.mts.map +1 -0
- package/lib/intervals/interval.mjs +176 -0
- package/lib/intervals/interval.mjs.map +1 -0
- package/lib/intervals/intervalUtils.d.mts +230 -0
- package/lib/intervals/intervalUtils.d.mts.map +1 -0
- package/lib/intervals/intervalUtils.mjs +77 -0
- package/lib/intervals/intervalUtils.mjs.map +1 -0
- package/lib/intervals/sequenceInterval.d.mts +137 -0
- package/lib/intervals/sequenceInterval.d.mts.map +1 -0
- package/lib/intervals/sequenceInterval.mjs +370 -0
- package/lib/intervals/sequenceInterval.mjs.map +1 -0
- package/lib/{localValues.d.ts → localValues.d.mts} +3 -2
- package/lib/localValues.d.mts.map +1 -0
- package/lib/{localValues.js → localValues.mjs} +2 -2
- package/lib/localValues.mjs.map +1 -0
- package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
- package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
- package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
- package/lib/packageVersion.mjs.map +1 -0
- package/lib/revertibles.d.mts +86 -0
- package/lib/revertibles.d.mts.map +1 -0
- package/lib/revertibles.mjs +416 -0
- package/lib/revertibles.mjs.map +1 -0
- package/lib/sequence-alpha.d.mts +1315 -0
- package/lib/sequence-beta.d.mts +244 -0
- package/lib/sequence-public.d.mts +244 -0
- package/lib/sequence-untrimmed.d.mts +1803 -0
- package/lib/{sequence.d.ts → sequence.d.mts} +127 -50
- package/lib/sequence.d.mts.map +1 -0
- package/lib/{sequence.js → sequence.mjs} +225 -152
- package/lib/sequence.mjs.map +1 -0
- package/lib/{sequenceDeltaEvent.d.ts → sequenceDeltaEvent.d.mts} +24 -7
- package/lib/sequenceDeltaEvent.d.mts.map +1 -0
- package/lib/{sequenceDeltaEvent.js → sequenceDeltaEvent.mjs} +20 -8
- package/lib/sequenceDeltaEvent.mjs.map +1 -0
- package/lib/sequenceFactory.d.mts +22 -0
- package/lib/sequenceFactory.d.mts.map +1 -0
- package/lib/sequenceFactory.mjs +51 -0
- package/lib/sequenceFactory.mjs.map +1 -0
- package/lib/{sharedIntervalCollection.d.ts → sharedIntervalCollection.d.mts} +12 -12
- package/lib/sharedIntervalCollection.d.mts.map +1 -0
- package/lib/{sharedIntervalCollection.js → sharedIntervalCollection.mjs} +16 -21
- package/lib/sharedIntervalCollection.mjs.map +1 -0
- package/lib/{sharedSequence.d.ts → sharedSequence.d.mts} +15 -3
- package/lib/sharedSequence.d.mts.map +1 -0
- package/lib/{sharedSequence.js → sharedSequence.mjs} +30 -23
- package/lib/sharedSequence.mjs.map +1 -0
- package/lib/{sharedString.d.ts → sharedString.d.mts} +60 -24
- package/lib/sharedString.d.mts.map +1 -0
- package/lib/sharedString.mjs +281 -0
- package/lib/sharedString.mjs.map +1 -0
- package/package.json +146 -75
- package/prettier.config.cjs +8 -0
- package/sequence.test-files.tar +0 -0
- package/src/defaultMap.ts +417 -403
- package/src/defaultMapInterfaces.ts +157 -117
- package/src/index.ts +86 -26
- package/src/intervalCollection.ts +2043 -1563
- package/src/intervalIndex/endpointInRangeIndex.ts +116 -0
- package/src/intervalIndex/endpointIndex.ts +91 -0
- package/src/intervalIndex/idIntervalIndex.ts +64 -0
- package/src/intervalIndex/index.ts +25 -0
- package/src/intervalIndex/intervalIndex.ts +32 -0
- package/src/intervalIndex/intervalIndexUtils.ts +27 -0
- package/src/intervalIndex/overlappingIntervalsIndex.ts +187 -0
- package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +80 -0
- package/src/intervalIndex/sequenceIntervalIndexes.ts +34 -0
- package/src/intervalIndex/startpointInRangeIndex.ts +114 -0
- package/src/intervalTree.ts +98 -0
- package/src/intervals/index.ts +25 -0
- package/src/intervals/interval.ts +238 -0
- package/src/intervals/intervalUtils.ts +288 -0
- package/src/intervals/sequenceInterval.ts +616 -0
- package/src/localValues.ts +68 -73
- package/src/packageVersion.ts +1 -1
- package/src/revertibles.ts +693 -0
- package/src/sequence.ts +845 -690
- package/src/sequenceDeltaEvent.ts +164 -131
- package/src/sequenceFactory.ts +58 -214
- package/src/sharedIntervalCollection.ts +161 -152
- package/src/sharedSequence.ts +181 -167
- package/src/sharedString.ts +390 -234
- package/tsc-multi.test.json +10 -0
- package/tsconfig.json +11 -13
- package/.editorconfig +0 -7
- package/.vscode/launch.json +0 -15
- package/dist/defaultMap.js.map +0 -1
- package/dist/defaultMapInterfaces.js.map +0 -1
- package/dist/index.js +0 -44
- package/dist/index.js.map +0 -1
- package/dist/intervalCollection.js +0 -1250
- package/dist/intervalCollection.js.map +0 -1
- package/dist/localValues.js.map +0 -1
- package/dist/packageVersion.js.map +0 -1
- package/dist/sequence.js.map +0 -1
- package/dist/sequenceDeltaEvent.js.map +0 -1
- package/dist/sequenceFactory.js +0 -192
- package/dist/sequenceFactory.js.map +0 -1
- package/dist/sharedIntervalCollection.js.map +0 -1
- package/dist/sharedNumberSequence.d.ts +0 -50
- package/dist/sharedNumberSequence.d.ts.map +0 -1
- package/dist/sharedNumberSequence.js +0 -61
- package/dist/sharedNumberSequence.js.map +0 -1
- package/dist/sharedObjectSequence.d.ts +0 -50
- package/dist/sharedObjectSequence.d.ts.map +0 -1
- package/dist/sharedObjectSequence.js +0 -61
- package/dist/sharedObjectSequence.js.map +0 -1
- package/dist/sharedSequence.js.map +0 -1
- package/dist/sharedString.js +0 -187
- package/dist/sharedString.js.map +0 -1
- package/dist/sparsematrix.d.ts +0 -139
- package/dist/sparsematrix.d.ts.map +0 -1
- package/dist/sparsematrix.js +0 -332
- package/dist/sparsematrix.js.map +0 -1
- package/lib/defaultMap.d.ts.map +0 -1
- package/lib/defaultMap.js.map +0 -1
- package/lib/defaultMapInterfaces.d.ts.map +0 -1
- package/lib/defaultMapInterfaces.js.map +0 -1
- package/lib/index.d.ts +0 -27
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -26
- package/lib/index.js.map +0 -1
- package/lib/intervalCollection.d.ts +0 -270
- package/lib/intervalCollection.d.ts.map +0 -1
- package/lib/intervalCollection.js +0 -1238
- package/lib/intervalCollection.js.map +0 -1
- package/lib/localValues.d.ts.map +0 -1
- package/lib/localValues.js.map +0 -1
- package/lib/packageVersion.js.map +0 -1
- package/lib/sequence.d.ts.map +0 -1
- package/lib/sequence.js.map +0 -1
- package/lib/sequenceDeltaEvent.d.ts.map +0 -1
- package/lib/sequenceDeltaEvent.js.map +0 -1
- package/lib/sequenceFactory.d.ts +0 -108
- package/lib/sequenceFactory.d.ts.map +0 -1
- package/lib/sequenceFactory.js +0 -186
- package/lib/sequenceFactory.js.map +0 -1
- package/lib/sharedIntervalCollection.d.ts.map +0 -1
- package/lib/sharedIntervalCollection.js.map +0 -1
- package/lib/sharedNumberSequence.d.ts +0 -50
- package/lib/sharedNumberSequence.d.ts.map +0 -1
- package/lib/sharedNumberSequence.js +0 -57
- package/lib/sharedNumberSequence.js.map +0 -1
- package/lib/sharedObjectSequence.d.ts +0 -50
- package/lib/sharedObjectSequence.d.ts.map +0 -1
- package/lib/sharedObjectSequence.js +0 -57
- package/lib/sharedObjectSequence.js.map +0 -1
- package/lib/sharedSequence.d.ts.map +0 -1
- package/lib/sharedSequence.js.map +0 -1
- package/lib/sharedString.d.ts.map +0 -1
- package/lib/sharedString.js +0 -183
- package/lib/sharedString.js.map +0 -1
- package/lib/sparsematrix.d.ts +0 -139
- package/lib/sparsematrix.d.ts.map +0 -1
- package/lib/sparsematrix.js +0 -323
- package/lib/sparsematrix.js.map +0 -1
- package/src/sharedNumberSequence.ts +0 -62
- package/src/sharedObjectSequence.ts +0 -62
- package/src/sparsematrix.ts +0 -421
- package/tsconfig.esnext.json +0 -7
|
@@ -3,18 +3,20 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert } from "@fluidframework/
|
|
6
|
+
import { assert } from "@fluidframework/core-utils";
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
8
|
+
// eslint-disable-next-line import/no-deprecated
|
|
9
|
+
Client,
|
|
10
|
+
IMergeTreeDeltaCallbackArgs,
|
|
11
|
+
IMergeTreeDeltaOpArgs,
|
|
12
|
+
IMergeTreeMaintenanceCallbackArgs,
|
|
13
|
+
ISegment,
|
|
14
|
+
MergeTreeDeltaOperationType,
|
|
15
|
+
MergeTreeDeltaOperationTypes,
|
|
16
|
+
MergeTreeMaintenanceType,
|
|
17
|
+
PropertySet,
|
|
18
|
+
// eslint-disable-next-line import/no-deprecated
|
|
19
|
+
SortedSegmentSet,
|
|
18
20
|
} from "@fluidframework/merge-tree";
|
|
19
21
|
|
|
20
22
|
/**
|
|
@@ -23,79 +25,81 @@ import {
|
|
|
23
25
|
* The properties of this object and its sub-objects represent the state of the sequence at the
|
|
24
26
|
* point in time at which the operation was applied.
|
|
25
27
|
* They will not take into any future modifications performed to the underlying sequence and merge tree.
|
|
28
|
+
* @alpha
|
|
26
29
|
*/
|
|
27
|
-
export abstract class SequenceEvent<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
30
|
+
export abstract class SequenceEvent<
|
|
31
|
+
TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,
|
|
32
|
+
> {
|
|
33
|
+
public readonly deltaOperation: TOperation;
|
|
34
|
+
// eslint-disable-next-line import/no-deprecated
|
|
35
|
+
private readonly sortedRanges: Lazy<SortedSegmentSet<ISequenceDeltaRange<TOperation>>>;
|
|
36
|
+
private readonly pFirst: Lazy<ISequenceDeltaRange<TOperation>>;
|
|
37
|
+
private readonly pLast: Lazy<ISequenceDeltaRange<TOperation>>;
|
|
38
|
+
|
|
39
|
+
constructor(
|
|
40
|
+
public readonly deltaArgs: IMergeTreeDeltaCallbackArgs<TOperation>,
|
|
41
|
+
// eslint-disable-next-line import/no-deprecated
|
|
42
|
+
private readonly mergeTreeClient: Client,
|
|
43
|
+
) {
|
|
44
|
+
assert(
|
|
45
|
+
deltaArgs.deltaSegments.length > 0,
|
|
46
|
+
0x2d8 /* "Empty change event should not be emitted." */,
|
|
47
|
+
);
|
|
48
|
+
this.deltaOperation = deltaArgs.operation;
|
|
49
|
+
|
|
50
|
+
// eslint-disable-next-line import/no-deprecated
|
|
51
|
+
this.sortedRanges = new Lazy<SortedSegmentSet<ISequenceDeltaRange<TOperation>>>(() => {
|
|
52
|
+
// eslint-disable-next-line import/no-deprecated
|
|
53
|
+
const set = new SortedSegmentSet<ISequenceDeltaRange<TOperation>>();
|
|
54
|
+
this.deltaArgs.deltaSegments.forEach((delta) => {
|
|
55
|
+
const newRange: ISequenceDeltaRange<TOperation> = {
|
|
56
|
+
operation: this.deltaArgs.operation,
|
|
57
|
+
position: this.mergeTreeClient.getPosition(delta.segment),
|
|
58
|
+
propertyDeltas: delta.propertyDeltas ?? {},
|
|
59
|
+
segment: delta.segment,
|
|
60
|
+
};
|
|
61
|
+
set.addOrUpdate(newRange);
|
|
62
|
+
});
|
|
63
|
+
return set;
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
this.pFirst = new Lazy<ISequenceDeltaRange<TOperation>>(
|
|
67
|
+
() => this.sortedRanges.value.items[0],
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
this.pLast = new Lazy<ISequenceDeltaRange<TOperation>>(
|
|
71
|
+
() => this.sortedRanges.value.items[this.sortedRanges.value.size - 1],
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The in-order ranges affected by this delta.
|
|
77
|
+
* These may not be continuous.
|
|
78
|
+
*/
|
|
79
|
+
public get ranges(): readonly Readonly<ISequenceDeltaRange<TOperation>>[] {
|
|
80
|
+
return this.sortedRanges.value.items;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The client id of the client that made the change which caused the delta event
|
|
85
|
+
*/
|
|
86
|
+
public get clientId(): string | undefined {
|
|
87
|
+
return this.mergeTreeClient.longClientId;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The first of the modified ranges.
|
|
92
|
+
*/
|
|
93
|
+
public get first(): Readonly<ISequenceDeltaRange<TOperation>> {
|
|
94
|
+
return this.pFirst.value;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The last of the modified ranges.
|
|
99
|
+
*/
|
|
100
|
+
public get last(): Readonly<ISequenceDeltaRange<TOperation>> {
|
|
101
|
+
return this.pLast.value;
|
|
102
|
+
}
|
|
99
103
|
}
|
|
100
104
|
|
|
101
105
|
/**
|
|
@@ -108,21 +112,23 @@ export abstract class SequenceEvent<TOperation extends MergeTreeDeltaOperationTy
|
|
|
108
112
|
* For group ops, each op will get its own event, and the group op property will be set on the op args.
|
|
109
113
|
*
|
|
110
114
|
* Ops may get multiple events. For instance, an insert-replace will get a remove then an insert event.
|
|
115
|
+
* @alpha
|
|
111
116
|
*/
|
|
112
117
|
export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationType> {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Whether the event was caused by a locally-made change.
|
|
120
|
+
*/
|
|
121
|
+
public readonly isLocal: boolean;
|
|
122
|
+
|
|
123
|
+
constructor(
|
|
124
|
+
public readonly opArgs: IMergeTreeDeltaOpArgs,
|
|
125
|
+
deltaArgs: IMergeTreeDeltaCallbackArgs,
|
|
126
|
+
// eslint-disable-next-line import/no-deprecated
|
|
127
|
+
mergeTreeClient: Client,
|
|
128
|
+
) {
|
|
129
|
+
super(deltaArgs, mergeTreeClient);
|
|
130
|
+
this.isLocal = opArgs.sequencedMessage === undefined;
|
|
131
|
+
}
|
|
126
132
|
}
|
|
127
133
|
|
|
128
134
|
/**
|
|
@@ -131,49 +137,76 @@ export class SequenceDeltaEvent extends SequenceEvent<MergeTreeDeltaOperationTyp
|
|
|
131
137
|
* The properties of this object and its sub-objects represent the state of the sequence at the
|
|
132
138
|
* point in time at which the operation was applied.
|
|
133
139
|
* They will not take into consideration any future modifications performed to the underlying sequence and merge tree.
|
|
140
|
+
* @alpha
|
|
134
141
|
*/
|
|
135
142
|
export class SequenceMaintenanceEvent extends SequenceEvent<MergeTreeMaintenanceType> {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
+
constructor(
|
|
144
|
+
public readonly opArgs: IMergeTreeDeltaOpArgs | undefined,
|
|
145
|
+
deltaArgs: IMergeTreeMaintenanceCallbackArgs,
|
|
146
|
+
// eslint-disable-next-line import/no-deprecated
|
|
147
|
+
mergeTreeClient: Client,
|
|
148
|
+
) {
|
|
149
|
+
super(deltaArgs, mergeTreeClient);
|
|
150
|
+
}
|
|
143
151
|
}
|
|
144
152
|
|
|
145
153
|
/**
|
|
146
154
|
* A range that has changed corresponding to a segment modification.
|
|
155
|
+
* @alpha
|
|
147
156
|
*/
|
|
148
|
-
export interface ISequenceDeltaRange<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
157
|
+
export interface ISequenceDeltaRange<
|
|
158
|
+
TOperation extends MergeTreeDeltaOperationTypes = MergeTreeDeltaOperationTypes,
|
|
159
|
+
> {
|
|
160
|
+
/**
|
|
161
|
+
* The type of operation that changed this range.
|
|
162
|
+
*
|
|
163
|
+
* @remarks Consuming code should typically compare this to the enum values defined in
|
|
164
|
+
* `MergeTreeDeltaOperationTypes`.
|
|
165
|
+
*/
|
|
166
|
+
operation: TOperation;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* The index of the start of the range.
|
|
170
|
+
*/
|
|
171
|
+
position: number;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* The segment that corresponds to the range.
|
|
175
|
+
*/
|
|
176
|
+
segment: ISegment;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Deltas object which contains all modified properties with their previous values.
|
|
180
|
+
* Since `undefined` doesn't survive a round-trip through JSON serialization, the old value being absent
|
|
181
|
+
* is instead encoded with `null`.
|
|
182
|
+
*
|
|
183
|
+
* @remarks This object is motivated by undo/redo scenarios, and provides a convenient "inverse op" to apply to
|
|
184
|
+
* undo a property change.
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
*
|
|
188
|
+
* If a segment initially had properties `{ foo: "1", bar: 2 }` and it was annotated with
|
|
189
|
+
* `{ foo: 3, baz: 5 }`, the corresponding event would have a `propertyDeltas` of `{ foo: "1", baz: null }`.
|
|
190
|
+
*/
|
|
191
|
+
propertyDeltas: PropertySet;
|
|
159
192
|
}
|
|
160
193
|
|
|
161
194
|
class Lazy<T> {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
195
|
+
private pValue: T | undefined;
|
|
196
|
+
private pEvaluated: boolean;
|
|
197
|
+
constructor(private readonly valueGenerator: () => T) {
|
|
198
|
+
this.pEvaluated = false;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
public get evaluated(): boolean {
|
|
202
|
+
return this.pEvaluated;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
public get value(): T {
|
|
206
|
+
if (!this.pEvaluated) {
|
|
207
|
+
this.pEvaluated = true;
|
|
208
|
+
this.pValue = this.valueGenerator();
|
|
209
|
+
}
|
|
210
|
+
return this.pValue as T;
|
|
211
|
+
}
|
|
179
212
|
}
|
package/src/sequenceFactory.ts
CHANGED
|
@@ -4,224 +4,68 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
IChannelAttributes,
|
|
8
|
+
IFluidDataStoreRuntime,
|
|
9
|
+
IChannelServices,
|
|
10
|
+
IChannelFactory,
|
|
11
11
|
} from "@fluidframework/datastore-definitions";
|
|
12
|
-
import {
|
|
13
|
-
IJSONSegment,
|
|
14
|
-
Marker,
|
|
15
|
-
TextSegment,
|
|
16
|
-
} from "@fluidframework/merge-tree";
|
|
17
|
-
import { ISharedObject } from "@fluidframework/shared-object-base";
|
|
12
|
+
import { Marker, TextSegment } from "@fluidframework/merge-tree";
|
|
18
13
|
import { pkgVersion } from "./packageVersion";
|
|
19
|
-
import { SharedNumberSequence } from "./sharedNumberSequence";
|
|
20
|
-
import { SharedObjectSequence } from "./sharedObjectSequence";
|
|
21
|
-
import { IJSONRunSegment, SubSequence } from "./sharedSequence";
|
|
22
14
|
import { SharedString, SharedStringSegment } from "./sharedString";
|
|
23
15
|
|
|
24
|
-
export class SharedStringFactory implements IChannelFactory {
|
|
25
|
-
// TODO rename back to https://graph.microsoft.com/types/mergeTree/string once paparazzi is able to dynamically
|
|
26
|
-
// load code
|
|
27
|
-
public static Type = "https://graph.microsoft.com/types/mergeTree";
|
|
28
|
-
|
|
29
|
-
public static readonly Attributes: IChannelAttributes = {
|
|
30
|
-
type: SharedStringFactory.Type,
|
|
31
|
-
snapshotFormatVersion: "0.1",
|
|
32
|
-
packageVersion: pkgVersion,
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
public static segmentFromSpec(spec: any): SharedStringSegment {
|
|
36
|
-
const maybeText = TextSegment.fromJSONObject(spec);
|
|
37
|
-
if (maybeText) { return maybeText; }
|
|
38
|
-
|
|
39
|
-
const maybeMarker = Marker.fromJSONObject(spec);
|
|
40
|
-
if (maybeMarker) { return maybeMarker; }
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public get type() {
|
|
44
|
-
return SharedStringFactory.Type;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
public get attributes() {
|
|
48
|
-
return SharedStringFactory.Attributes;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}
|
|
53
|
-
*/
|
|
54
|
-
public async load(
|
|
55
|
-
runtime: IFluidDataStoreRuntime,
|
|
56
|
-
id: string,
|
|
57
|
-
services: IChannelServices,
|
|
58
|
-
attributes: IChannelAttributes): Promise<SharedString> {
|
|
59
|
-
const sharedString = new SharedString(runtime, id, attributes);
|
|
60
|
-
await sharedString.load(services);
|
|
61
|
-
return sharedString;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
public create(document: IFluidDataStoreRuntime, id: string): SharedString {
|
|
65
|
-
const sharedString = new SharedString(document, id, this.attributes);
|
|
66
|
-
sharedString.initializeLocal();
|
|
67
|
-
return sharedString;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* @deprecated SharedObjectSequence is not recommended for use and will be removed in an upcoming release.
|
|
73
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
74
|
-
*/
|
|
75
|
-
export class SharedObjectSequenceFactory implements IChannelFactory {
|
|
76
|
-
/**
|
|
77
|
-
* @deprecated SharedObjectSequence is not recommended for use and will be removed in an upcoming release.
|
|
78
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
79
|
-
*/
|
|
80
|
-
public static Type = "https://graph.microsoft.com/types/mergeTree/object-sequence";
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* @deprecated SharedObjectSequence is not recommended for use and will be removed in an upcoming release.
|
|
84
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
85
|
-
*/
|
|
86
|
-
public static readonly Attributes: IChannelAttributes = {
|
|
87
|
-
type: SharedObjectSequenceFactory.Type,
|
|
88
|
-
snapshotFormatVersion: "0.1",
|
|
89
|
-
packageVersion: pkgVersion,
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* @deprecated SharedObjectSequence is not recommended for use and will be removed in an upcoming release.
|
|
94
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
95
|
-
*/
|
|
96
|
-
public static segmentFromSpec(segSpec: IJSONSegment) {
|
|
97
|
-
const runSegment = segSpec as IJSONRunSegment<object>;
|
|
98
|
-
if (runSegment.items) {
|
|
99
|
-
const seg = new SubSequence<object>(runSegment.items);
|
|
100
|
-
if (runSegment.props) {
|
|
101
|
-
seg.addProperties(runSegment.props);
|
|
102
|
-
}
|
|
103
|
-
return seg;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* @deprecated SharedObjectSequence is not recommended for use and will be removed in an upcoming release.
|
|
109
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
110
|
-
*/
|
|
111
|
-
public get type() {
|
|
112
|
-
return SharedObjectSequenceFactory.Type;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* @deprecated SharedObjectSequence is not recommended for use and will be removed in an upcoming release.
|
|
117
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
118
|
-
*/
|
|
119
|
-
public get attributes() {
|
|
120
|
-
return SharedObjectSequenceFactory.Attributes;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}
|
|
125
|
-
*
|
|
126
|
-
* @deprecated SharedObjectSequence is not recommended for use and will be removed in an upcoming release.
|
|
127
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
128
|
-
*/
|
|
129
|
-
public async load(
|
|
130
|
-
runtime: IFluidDataStoreRuntime,
|
|
131
|
-
id: string,
|
|
132
|
-
services: IChannelServices,
|
|
133
|
-
attributes: IChannelAttributes): Promise<ISharedObject> {
|
|
134
|
-
const sharedSeq = new SharedObjectSequence<object>(runtime, id, attributes);
|
|
135
|
-
await sharedSeq.load(services);
|
|
136
|
-
return sharedSeq;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* @deprecated SharedObjectSequence is not recommended for use and will be removed in an upcoming release.
|
|
141
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
142
|
-
*/
|
|
143
|
-
public create(document: IFluidDataStoreRuntime, id: string): ISharedObject {
|
|
144
|
-
const sharedString = new SharedObjectSequence(document, id, this.attributes);
|
|
145
|
-
sharedString.initializeLocal();
|
|
146
|
-
return sharedString;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
16
|
/**
|
|
151
|
-
* @
|
|
152
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
17
|
+
* @alpha
|
|
153
18
|
*/
|
|
154
|
-
export class
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
207
|
-
*/
|
|
208
|
-
public async load(
|
|
209
|
-
runtime: IFluidDataStoreRuntime,
|
|
210
|
-
id: string,
|
|
211
|
-
services: IChannelServices,
|
|
212
|
-
attributes: IChannelAttributes): Promise<ISharedObject> {
|
|
213
|
-
const sharedSeq = new SharedNumberSequence(runtime, id, attributes);
|
|
214
|
-
await sharedSeq.load(services);
|
|
215
|
-
return sharedSeq;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* @deprecated SharedNumberSequence is not recommended for use and will be removed in an upcoming release.
|
|
220
|
-
* For more info, please see [Github issue 8526](https://github.com/microsoft/FluidFramework/issues/8526)
|
|
221
|
-
*/
|
|
222
|
-
public create(document: IFluidDataStoreRuntime, id: string): ISharedObject {
|
|
223
|
-
const sharedString = new SharedNumberSequence(document, id, this.attributes);
|
|
224
|
-
sharedString.initializeLocal();
|
|
225
|
-
return sharedString;
|
|
226
|
-
}
|
|
19
|
+
export class SharedStringFactory implements IChannelFactory {
|
|
20
|
+
// TODO rename back to https://graph.microsoft.com/types/mergeTree/string once paparazzi is able to dynamically
|
|
21
|
+
// load code (UPDATE: paparazzi is gone... anything to do here?)
|
|
22
|
+
public static Type = "https://graph.microsoft.com/types/mergeTree";
|
|
23
|
+
|
|
24
|
+
public static readonly Attributes: IChannelAttributes = {
|
|
25
|
+
type: SharedStringFactory.Type,
|
|
26
|
+
snapshotFormatVersion: "0.1",
|
|
27
|
+
packageVersion: pkgVersion,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
public static segmentFromSpec(spec: any): SharedStringSegment {
|
|
31
|
+
const maybeText = TextSegment.fromJSONObject(spec);
|
|
32
|
+
if (maybeText) {
|
|
33
|
+
return maybeText;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const maybeMarker = Marker.fromJSONObject(spec);
|
|
37
|
+
if (maybeMarker) {
|
|
38
|
+
return maybeMarker;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
throw new Error(`Unrecognized IJSONObject`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public get type() {
|
|
45
|
+
return SharedStringFactory.Type;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public get attributes() {
|
|
49
|
+
return SharedStringFactory.Attributes;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}
|
|
54
|
+
*/
|
|
55
|
+
public async load(
|
|
56
|
+
runtime: IFluidDataStoreRuntime,
|
|
57
|
+
id: string,
|
|
58
|
+
services: IChannelServices,
|
|
59
|
+
attributes: IChannelAttributes,
|
|
60
|
+
): Promise<SharedString> {
|
|
61
|
+
const sharedString = new SharedString(runtime, id, attributes);
|
|
62
|
+
await sharedString.load(services);
|
|
63
|
+
return sharedString;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public create(document: IFluidDataStoreRuntime, id: string): SharedString {
|
|
67
|
+
const sharedString = new SharedString(document, id, this.attributes);
|
|
68
|
+
sharedString.initializeLocal();
|
|
69
|
+
return sharedString;
|
|
70
|
+
}
|
|
227
71
|
}
|