@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/lib/sequence.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { Deferred } from "@fluidframework/core-utils";
|
|
6
6
|
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
7
7
|
import { IChannelAttributes, IFluidDataStoreRuntime, IChannelStorageService } from "@fluidframework/datastore-definitions";
|
|
8
|
-
import { Client,
|
|
8
|
+
import { Client, IJSONSegment, IMergeTreeGroupMsg, IRelativePosition, ISegment, ISegmentAction, LocalReferencePosition, PropertySet, ReferencePosition, ReferenceType, MergeTreeRevertibleDriver, SlidingPreference } from "@fluidframework/merge-tree";
|
|
9
9
|
import { IFluidSerializer, SharedObject, ISharedObjectEvents, SummarySerializer } from "@fluidframework/shared-object-base";
|
|
10
10
|
import { IEventThisPlaceHolder } from "@fluidframework/core-interfaces";
|
|
11
11
|
import { ISummaryTreeWithStats, ITelemetryContext } from "@fluidframework/runtime-definitions";
|
|
@@ -45,15 +45,15 @@ import { ISharedIntervalCollection } from "./sharedIntervalCollection";
|
|
|
45
45
|
* - `event` - Various information on the segments that were modified.
|
|
46
46
|
*
|
|
47
47
|
* - `target` - The sequence itself.
|
|
48
|
-
* @
|
|
48
|
+
* @alpha
|
|
49
49
|
*/
|
|
50
50
|
export interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {
|
|
51
|
-
(event: "createIntervalCollection", listener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void):
|
|
52
|
-
(event: "sequenceDelta", listener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void):
|
|
53
|
-
(event: "maintenance", listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void):
|
|
51
|
+
(event: "createIntervalCollection", listener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void): void;
|
|
52
|
+
(event: "sequenceDelta", listener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void): void;
|
|
53
|
+
(event: "maintenance", listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void): void;
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
* @
|
|
56
|
+
* @alpha
|
|
57
57
|
*/
|
|
58
58
|
export declare abstract class SharedSegmentSequence<T extends ISegment> extends SharedObject<ISharedSegmentSequenceEvents> implements ISharedIntervalCollection<SequenceInterval>, MergeTreeRevertibleDriver {
|
|
59
59
|
private readonly dataStoreRuntime;
|
|
@@ -71,7 +71,6 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
|
|
|
71
71
|
*
|
|
72
72
|
* An application using SharedString which explicitly wants to opt in to allowing reentrancy anyway can set `sharedStringPreventReentrancy`
|
|
73
73
|
* on the data store options to `false`.
|
|
74
|
-
* @internal
|
|
75
74
|
*/
|
|
76
75
|
protected guardReentrancy: <TRet>(callback: () => TRet) => TRet;
|
|
77
76
|
private static createOpsFromDelta;
|
|
@@ -88,9 +87,19 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
|
|
|
88
87
|
* @param start - The inclusive start of the range to remove
|
|
89
88
|
* @param end - The exclusive end of the range to remove
|
|
90
89
|
*/
|
|
91
|
-
removeRange(start: number, end: number):
|
|
90
|
+
removeRange(start: number, end: number): void;
|
|
92
91
|
/**
|
|
93
|
-
*
|
|
92
|
+
* Obliterate is similar to remove, but differs in that segments concurrently
|
|
93
|
+
* inserted into an obliterated range will also be removed
|
|
94
|
+
*
|
|
95
|
+
* @param start - The inclusive start of the range to obliterate
|
|
96
|
+
* @param end - The exclusive end of the range to obliterate
|
|
97
|
+
*/
|
|
98
|
+
obliterateRange(start: number, end: number): void;
|
|
99
|
+
/**
|
|
100
|
+
* @deprecated The ability to create group ops will be removed in an upcoming
|
|
101
|
+
* release, as group ops are redundant with the native batching capabilities
|
|
102
|
+
* of the runtime
|
|
94
103
|
*/
|
|
95
104
|
groupOperation(groupOp: IMergeTreeGroupMsg): void;
|
|
96
105
|
/**
|
|
@@ -118,10 +127,9 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
|
|
|
118
127
|
* @param start - The inclusive start position of the range to annotate
|
|
119
128
|
* @param end - The exclusive end position of the range to annotate
|
|
120
129
|
* @param props - The properties to annotate the range with
|
|
121
|
-
* @param combiningOp - Optional. Specifies how to combine values for the property, such as "incr" for increment.
|
|
122
130
|
*
|
|
123
131
|
*/
|
|
124
|
-
annotateRange(start: number, end: number, props: PropertySet
|
|
132
|
+
annotateRange(start: number, end: number, props: PropertySet): void;
|
|
125
133
|
getPropertiesAtPosition(pos: number): PropertySet | undefined;
|
|
126
134
|
getRangeExtentsOfPosition(pos: number): {
|
|
127
135
|
posStart: number | undefined;
|
|
@@ -159,10 +167,7 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
|
|
|
159
167
|
* @param remoteClientId - The client id of the remote client
|
|
160
168
|
*/
|
|
161
169
|
resolveRemoteClientPosition(remoteClientPosition: number, remoteClientRefSeq: number, remoteClientId: string): number | undefined;
|
|
162
|
-
|
|
163
|
-
* @deprecated This method will no longer be public in an upcoming release as it is not safe to use outside of this class
|
|
164
|
-
*/
|
|
165
|
-
submitSequenceMessage(message: IMergeTreeOp): void;
|
|
170
|
+
private submitSequenceMessage;
|
|
166
171
|
/**
|
|
167
172
|
* Given a position specified relative to a marker id, lookup the marker
|
|
168
173
|
* and convert the position to a character position.
|
|
@@ -171,22 +176,19 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
|
|
|
171
176
|
posFromRelativePos(relativePos: IRelativePosition): number;
|
|
172
177
|
/**
|
|
173
178
|
* Walk the underlying segments of the sequence.
|
|
174
|
-
* The walked segments may extend beyond the range
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
* range are walked.
|
|
179
|
+
* The walked segments may extend beyond the range if the segments cross the
|
|
180
|
+
* ranges start or end boundaries.
|
|
181
|
+
*
|
|
182
|
+
* Set split range to true to ensure only segments within the range are walked.
|
|
178
183
|
*
|
|
179
|
-
* @param handler - The function to handle each segment
|
|
184
|
+
* @param handler - The function to handle each segment. Traversal ends if
|
|
185
|
+
* this function returns true.
|
|
180
186
|
* @param start - Optional. The start of range walk.
|
|
181
187
|
* @param end - Optional. The end of range walk
|
|
182
188
|
* @param accum - Optional. An object that will be passed to the handler for accumulation
|
|
183
189
|
* @param splitRange - Optional. Splits boundary segments on the range boundaries
|
|
184
190
|
*/
|
|
185
191
|
walkSegments<TClientData>(handler: ISegmentAction<TClientData>, start?: number, end?: number, accum?: TClientData, splitRange?: boolean): void;
|
|
186
|
-
/**
|
|
187
|
-
* @deprecated this functionality is no longer supported and will be removed
|
|
188
|
-
*/
|
|
189
|
-
getStackContext(startPos: number, rangeLabels: string[]): RangeStackMap;
|
|
190
192
|
/**
|
|
191
193
|
* @returns The most recent sequence number which has been acked by the server and processed by this
|
|
192
194
|
* SharedSegmentSequence.
|
package/lib/sequence.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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"}
|
package/lib/sequence.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/*!
|
|
2
3
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
4
|
* Licensed under the MIT License.
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.resetReentrancyLogCounter = exports.SharedSegmentSequence = void 0;
|
|
8
|
+
const core_utils_1 = require("@fluidframework/core-utils");
|
|
9
|
+
const client_utils_1 = require("@fluid-internal/client-utils");
|
|
10
|
+
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
11
|
+
const protocol_definitions_1 = require("@fluidframework/protocol-definitions");
|
|
12
|
+
const merge_tree_1 = require("@fluidframework/merge-tree");
|
|
13
|
+
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
14
|
+
const shared_object_base_1 = require("@fluidframework/shared-object-base");
|
|
15
|
+
const defaultMap_1 = require("./defaultMap");
|
|
16
|
+
const intervalCollection_1 = require("./intervalCollection");
|
|
17
|
+
const sequenceDeltaEvent_1 = require("./sequenceDeltaEvent");
|
|
16
18
|
const snapshotFileName = "header";
|
|
17
19
|
const contentPath = "content";
|
|
18
20
|
/**
|
|
19
|
-
* @
|
|
21
|
+
* @alpha
|
|
20
22
|
*/
|
|
21
|
-
|
|
23
|
+
class SharedSegmentSequence extends shared_object_base_1.SharedObject {
|
|
22
24
|
get loaded() {
|
|
23
25
|
return this.loadedDeferred.promise;
|
|
24
26
|
}
|
|
@@ -26,7 +28,7 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
26
28
|
const ops = [];
|
|
27
29
|
for (const r of event.ranges) {
|
|
28
30
|
switch (event.deltaOperation) {
|
|
29
|
-
case MergeTreeDeltaType.ANNOTATE: {
|
|
31
|
+
case merge_tree_1.MergeTreeDeltaType.ANNOTATE: {
|
|
30
32
|
const lastAnnotate = ops[ops.length - 1];
|
|
31
33
|
const props = {};
|
|
32
34
|
for (const key of Object.keys(r.propertyDeltas)) {
|
|
@@ -34,25 +36,36 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
34
36
|
}
|
|
35
37
|
if (lastAnnotate &&
|
|
36
38
|
lastAnnotate.pos2 === r.position &&
|
|
37
|
-
matchProperties(lastAnnotate.props, props)) {
|
|
39
|
+
(0, merge_tree_1.matchProperties)(lastAnnotate.props, props)) {
|
|
38
40
|
lastAnnotate.pos2 += r.segment.cachedLength;
|
|
39
41
|
}
|
|
40
42
|
else {
|
|
41
|
-
ops.push(createAnnotateRangeOp(r.position, r.position + r.segment.cachedLength, props
|
|
43
|
+
ops.push((0, merge_tree_1.createAnnotateRangeOp)(r.position, r.position + r.segment.cachedLength, props));
|
|
42
44
|
}
|
|
43
45
|
break;
|
|
44
46
|
}
|
|
45
|
-
case MergeTreeDeltaType.INSERT:
|
|
46
|
-
ops.push(createInsertOp(r.position, r.segment.clone().toJSONObject()));
|
|
47
|
+
case merge_tree_1.MergeTreeDeltaType.INSERT:
|
|
48
|
+
ops.push((0, merge_tree_1.createInsertOp)(r.position, r.segment.clone().toJSONObject()));
|
|
47
49
|
break;
|
|
48
|
-
case MergeTreeDeltaType.REMOVE: {
|
|
50
|
+
case merge_tree_1.MergeTreeDeltaType.REMOVE: {
|
|
49
51
|
const lastRem = ops[ops.length - 1];
|
|
50
52
|
if (lastRem?.pos1 === r.position) {
|
|
51
|
-
assert(lastRem.pos2 !== undefined, 0x3ff /* pos2 should not be undefined here */);
|
|
53
|
+
(0, core_utils_1.assert)(lastRem.pos2 !== undefined, 0x3ff /* pos2 should not be undefined here */);
|
|
52
54
|
lastRem.pos2 += r.segment.cachedLength;
|
|
53
55
|
}
|
|
54
56
|
else {
|
|
55
|
-
ops.push(createRemoveRangeOp(r.position, r.position + r.segment.cachedLength));
|
|
57
|
+
ops.push((0, merge_tree_1.createRemoveRangeOp)(r.position, r.position + r.segment.cachedLength));
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
case merge_tree_1.MergeTreeDeltaType.OBLITERATE: {
|
|
62
|
+
const lastRem = ops[ops.length - 1];
|
|
63
|
+
if (lastRem?.pos1 === r.position) {
|
|
64
|
+
(0, core_utils_1.assert)(lastRem.pos2 !== undefined, 0x874 /* pos2 should not be undefined here */);
|
|
65
|
+
lastRem.pos2 += r.segment.cachedLength;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
ops.push((0, merge_tree_1.createObliterateRangeOp)(r.position, r.position + r.segment.cachedLength));
|
|
56
69
|
}
|
|
57
70
|
break;
|
|
58
71
|
}
|
|
@@ -67,7 +80,7 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
67
80
|
this.id = id;
|
|
68
81
|
this.segmentFromSpec = segmentFromSpec;
|
|
69
82
|
/** `Deferred` that triggers once the object is loaded */
|
|
70
|
-
this.loadedDeferred = new Deferred();
|
|
83
|
+
this.loadedDeferred = new core_utils_1.Deferred();
|
|
71
84
|
// cache out going ops created when partial loading
|
|
72
85
|
this.loadedDeferredOutgoingOps = [];
|
|
73
86
|
// cache incoming ops that arrive when partial loading
|
|
@@ -80,37 +93,50 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
80
93
|
: createReentrancyDetector((depth) => {
|
|
81
94
|
if (totalReentrancyLogs > 0) {
|
|
82
95
|
totalReentrancyLogs--;
|
|
83
|
-
this.logger.sendTelemetryEvent({ eventName: "LocalOpReentry", depth }, new LoggingError(reentrancyErrorMessage));
|
|
96
|
+
this.logger.sendTelemetryEvent({ eventName: "LocalOpReentry", depth }, new telemetry_utils_1.LoggingError(reentrancyErrorMessage));
|
|
84
97
|
}
|
|
85
98
|
});
|
|
86
99
|
this.loadedDeferred.promise.catch((error) => {
|
|
87
100
|
this.logger.sendErrorEvent({ eventName: "SequenceLoadFailed" }, error);
|
|
88
101
|
});
|
|
89
|
-
|
|
102
|
+
// eslint-disable-next-line import/no-deprecated
|
|
103
|
+
this.client = new merge_tree_1.Client(segmentFromSpec, (0, telemetry_utils_1.createChildLogger)({
|
|
90
104
|
logger: this.logger,
|
|
91
105
|
namespace: "SharedSegmentSequence.MergeTreeClient",
|
|
92
106
|
}), dataStoreRuntime.options);
|
|
93
107
|
this.client.prependListener("delta", (opArgs, deltaArgs) => {
|
|
94
|
-
const event = new SequenceDeltaEvent(opArgs, deltaArgs, this.client);
|
|
108
|
+
const event = new sequenceDeltaEvent_1.SequenceDeltaEvent(opArgs, deltaArgs, this.client);
|
|
95
109
|
if (opArgs.stashed !== true && event.isLocal) {
|
|
96
110
|
this.submitSequenceMessage(opArgs.op);
|
|
97
111
|
}
|
|
98
112
|
this.emit("sequenceDelta", event, this);
|
|
99
113
|
});
|
|
100
114
|
this.client.on("maintenance", (args, opArgs) => {
|
|
101
|
-
this.emit("maintenance", new SequenceMaintenanceEvent(opArgs, args, this.client), this);
|
|
115
|
+
this.emit("maintenance", new sequenceDeltaEvent_1.SequenceMaintenanceEvent(opArgs, args, this.client), this);
|
|
102
116
|
});
|
|
103
|
-
this.intervalCollections = new DefaultMap(this.serializer, this.handle, (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata), new SequenceIntervalCollectionValueType(), dataStoreRuntime.options);
|
|
117
|
+
this.intervalCollections = new defaultMap_1.DefaultMap(this.serializer, this.handle, (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata), new intervalCollection_1.SequenceIntervalCollectionValueType(), dataStoreRuntime.options);
|
|
104
118
|
}
|
|
105
119
|
/**
|
|
106
120
|
* @param start - The inclusive start of the range to remove
|
|
107
121
|
* @param end - The exclusive end of the range to remove
|
|
108
122
|
*/
|
|
109
123
|
removeRange(start, end) {
|
|
110
|
-
|
|
124
|
+
this.guardReentrancy(() => this.client.removeRangeLocal(start, end));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Obliterate is similar to remove, but differs in that segments concurrently
|
|
128
|
+
* inserted into an obliterated range will also be removed
|
|
129
|
+
*
|
|
130
|
+
* @param start - The inclusive start of the range to obliterate
|
|
131
|
+
* @param end - The exclusive end of the range to obliterate
|
|
132
|
+
*/
|
|
133
|
+
obliterateRange(start, end) {
|
|
134
|
+
this.guardReentrancy(() => this.client.obliterateRangeLocal(start, end));
|
|
111
135
|
}
|
|
112
136
|
/**
|
|
113
|
-
* @deprecated The ability to create group ops will be removed in an upcoming
|
|
137
|
+
* @deprecated The ability to create group ops will be removed in an upcoming
|
|
138
|
+
* release, as group ops are redundant with the native batching capabilities
|
|
139
|
+
* of the runtime
|
|
114
140
|
*/
|
|
115
141
|
groupOperation(groupOp) {
|
|
116
142
|
this.guardReentrancy(() => this.client.localTransaction(groupOp));
|
|
@@ -143,11 +169,10 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
143
169
|
* @param start - The inclusive start position of the range to annotate
|
|
144
170
|
* @param end - The exclusive end position of the range to annotate
|
|
145
171
|
* @param props - The properties to annotate the range with
|
|
146
|
-
* @param combiningOp - Optional. Specifies how to combine values for the property, such as "incr" for increment.
|
|
147
172
|
*
|
|
148
173
|
*/
|
|
149
|
-
annotateRange(start, end, props
|
|
150
|
-
this.guardReentrancy(() => this.client.annotateRangeLocal(start, end, props
|
|
174
|
+
annotateRange(start, end, props) {
|
|
175
|
+
this.guardReentrancy(() => this.client.annotateRangeLocal(start, end, props));
|
|
151
176
|
}
|
|
152
177
|
getPropertiesAtPosition(pos) {
|
|
153
178
|
return this.client.getPropertiesAtPosition(pos);
|
|
@@ -195,18 +220,15 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
195
220
|
resolveRemoteClientPosition(remoteClientPosition, remoteClientRefSeq, remoteClientId) {
|
|
196
221
|
return this.client.resolveRemoteClientPosition(remoteClientPosition, remoteClientRefSeq, remoteClientId);
|
|
197
222
|
}
|
|
198
|
-
/**
|
|
199
|
-
* @deprecated This method will no longer be public in an upcoming release as it is not safe to use outside of this class
|
|
200
|
-
*/
|
|
201
223
|
submitSequenceMessage(message) {
|
|
202
224
|
if (!this.isAttached()) {
|
|
203
225
|
return;
|
|
204
226
|
}
|
|
205
|
-
const translated = makeHandlesSerializable(message, this.serializer, this.handle);
|
|
206
|
-
const metadata = this.client.peekPendingSegmentGroups(message.type === MergeTreeDeltaType.GROUP ? message.ops.length : 1);
|
|
227
|
+
const translated = (0, shared_object_base_1.makeHandlesSerializable)(message, this.serializer, this.handle);
|
|
228
|
+
const metadata = this.client.peekPendingSegmentGroups(message.type === merge_tree_1.MergeTreeDeltaType.GROUP ? message.ops.length : 1);
|
|
207
229
|
// if loading isn't complete, we need to cache
|
|
208
230
|
// local ops until loading is complete, and then
|
|
209
|
-
// they will be
|
|
231
|
+
// they will be present
|
|
210
232
|
if (!this.loadedDeferred.isCompleted) {
|
|
211
233
|
this.loadedDeferredOutgoingOps.push(metadata ? [translated, metadata] : translated);
|
|
212
234
|
}
|
|
@@ -224,12 +246,13 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
224
246
|
}
|
|
225
247
|
/**
|
|
226
248
|
* Walk the underlying segments of the sequence.
|
|
227
|
-
* The walked segments may extend beyond the range
|
|
228
|
-
*
|
|
229
|
-
* Set split range to true to ensure only segments within the
|
|
230
|
-
* range are walked.
|
|
249
|
+
* The walked segments may extend beyond the range if the segments cross the
|
|
250
|
+
* ranges start or end boundaries.
|
|
231
251
|
*
|
|
232
|
-
*
|
|
252
|
+
* Set split range to true to ensure only segments within the range are walked.
|
|
253
|
+
*
|
|
254
|
+
* @param handler - The function to handle each segment. Traversal ends if
|
|
255
|
+
* this function returns true.
|
|
233
256
|
* @param start - Optional. The start of range walk.
|
|
234
257
|
* @param end - Optional. The end of range walk
|
|
235
258
|
* @param accum - Optional. An object that will be passed to the handler for accumulation
|
|
@@ -238,12 +261,6 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
238
261
|
walkSegments(handler, start, end, accum, splitRange = false) {
|
|
239
262
|
this.client.walkSegments(handler, start, end, accum, splitRange);
|
|
240
263
|
}
|
|
241
|
-
/**
|
|
242
|
-
* @deprecated this functionality is no longer supported and will be removed
|
|
243
|
-
*/
|
|
244
|
-
getStackContext(startPos, rangeLabels) {
|
|
245
|
-
return this.client.getStackContext(startPos, rangeLabels);
|
|
246
|
-
}
|
|
247
264
|
/**
|
|
248
265
|
* @returns The most recent sequence number which has been acked by the server and processed by this
|
|
249
266
|
* SharedSegmentSequence.
|
|
@@ -294,7 +311,7 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
294
311
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.summarizeCore}
|
|
295
312
|
*/
|
|
296
313
|
summarizeCore(serializer, telemetryContext) {
|
|
297
|
-
const builder = new SummaryTreeBuilder();
|
|
314
|
+
const builder = new runtime_utils_1.SummaryTreeBuilder();
|
|
298
315
|
// conditionally write the interval collection blob
|
|
299
316
|
// only if it has entries
|
|
300
317
|
if (this.intervalCollections.size > 0) {
|
|
@@ -358,14 +375,14 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
358
375
|
async loadCore(storage) {
|
|
359
376
|
if (await storage.contains(snapshotFileName)) {
|
|
360
377
|
const blob = await storage.readBlob(snapshotFileName);
|
|
361
|
-
const header = bufferToString(blob, "utf8");
|
|
378
|
+
const header = (0, client_utils_1.bufferToString)(blob, "utf8");
|
|
362
379
|
this.intervalCollections.populate(header);
|
|
363
380
|
}
|
|
364
381
|
try {
|
|
365
382
|
// this will load the header, and return a promise
|
|
366
383
|
// that will resolve when the body is loaded
|
|
367
384
|
// and the catchup ops are available.
|
|
368
|
-
const { catchupOpsP } = await this.client.load(this.runtime, new ObjectStoragePartition(storage, contentPath), this.serializer);
|
|
385
|
+
const { catchupOpsP } = await this.client.load(this.runtime, new runtime_utils_1.ObjectStoragePartition(storage, contentPath), this.serializer);
|
|
369
386
|
// setup a promise to process the
|
|
370
387
|
// catch up ops, and finishing the loading process
|
|
371
388
|
const loadCatchUpOps = catchupOpsP
|
|
@@ -413,11 +430,11 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
413
430
|
// if loading isn't complete, we need to cache all
|
|
414
431
|
// incoming ops to be applied after loading is complete
|
|
415
432
|
if (this.deferIncomingOps) {
|
|
416
|
-
assert(!local, 0x072 /* "Unexpected local op when loading not finished" */);
|
|
433
|
+
(0, core_utils_1.assert)(!local, 0x072 /* "Unexpected local op when loading not finished" */);
|
|
417
434
|
this.loadedDeferredIncomingOps.push(message);
|
|
418
435
|
}
|
|
419
436
|
else {
|
|
420
|
-
assert(message.type === MessageType.Operation, 0x073 /* "Sequence message not operation" */);
|
|
437
|
+
(0, core_utils_1.assert)(message.type === protocol_definitions_1.MessageType.Operation, 0x073 /* "Sequence message not operation" */);
|
|
421
438
|
const handled = this.intervalCollections.tryProcessMessage(message.contents, local, message, localOpMetadata);
|
|
422
439
|
if (!handled) {
|
|
423
440
|
this.processMergeTreeMsg(message, local);
|
|
@@ -445,11 +462,11 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
445
462
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}
|
|
446
463
|
*/
|
|
447
464
|
applyStashedOp(content) {
|
|
448
|
-
return this.client.applyStashedOp(parseHandles(content, this.serializer));
|
|
465
|
+
return this.client.applyStashedOp((0, shared_object_base_1.parseHandles)(content, this.serializer));
|
|
449
466
|
}
|
|
450
467
|
summarizeMergeTree(serializer) {
|
|
451
468
|
// Are we fully loaded? If not, things will go south
|
|
452
|
-
assert(this.loadedDeferred.isCompleted, 0x074 /* "Snapshot called when not fully loaded" */);
|
|
469
|
+
(0, core_utils_1.assert)(this.loadedDeferred.isCompleted, 0x074 /* "Snapshot called when not fully loaded" */);
|
|
453
470
|
const minSeq = this.runtime.deltaManager.minimumSequenceNumber;
|
|
454
471
|
this.processMinSequenceNumberChanged(minSeq);
|
|
455
472
|
this.messagesSinceMSNChange.forEach((m) => {
|
|
@@ -458,7 +475,7 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
458
475
|
return this.client.summarize(this.runtime, this.handle, serializer, this.messagesSinceMSNChange);
|
|
459
476
|
}
|
|
460
477
|
processMergeTreeMsg(rawMessage, local) {
|
|
461
|
-
const message = parseHandles(rawMessage, this.serializer);
|
|
478
|
+
const message = (0, shared_object_base_1.parseHandles)(rawMessage, this.serializer);
|
|
462
479
|
const ops = [];
|
|
463
480
|
function transformOps(event) {
|
|
464
481
|
ops.push(...SharedSegmentSequence.createOpsFromDelta(event));
|
|
@@ -479,7 +496,8 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
479
496
|
stashMessage = {
|
|
480
497
|
...message,
|
|
481
498
|
referenceSequenceNumber: stashMessage.sequenceNumber - 1,
|
|
482
|
-
|
|
499
|
+
// eslint-disable-next-line import/no-deprecated
|
|
500
|
+
contents: ops.length !== 1 ? (0, merge_tree_1.createGroupOp)(...ops) : ops[0],
|
|
483
501
|
};
|
|
484
502
|
}
|
|
485
503
|
this.messagesSinceMSNChange.push(stashMessage);
|
|
@@ -535,7 +553,7 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
535
553
|
if (!intervalCollection.attached) {
|
|
536
554
|
intervalCollection.attachGraph(this.client, key);
|
|
537
555
|
}
|
|
538
|
-
assert(previousValue === undefined, 0x2c1 /* "Creating an interval collection that already exists?" */);
|
|
556
|
+
(0, core_utils_1.assert)(previousValue === undefined, 0x2c1 /* "Creating an interval collection that already exists?" */);
|
|
539
557
|
this.emit("createIntervalCollection", key, local, this);
|
|
540
558
|
});
|
|
541
559
|
// Initialize existing SharedIntervalCollections
|
|
@@ -545,6 +563,7 @@ export class SharedSegmentSequence extends SharedObject {
|
|
|
545
563
|
}
|
|
546
564
|
}
|
|
547
565
|
}
|
|
566
|
+
exports.SharedSegmentSequence = SharedSegmentSequence;
|
|
548
567
|
function createReentrancyDetector(onReentrancy) {
|
|
549
568
|
let depth = 0;
|
|
550
569
|
function detectReentrancy(callback) {
|
|
@@ -570,11 +589,12 @@ let totalReentrancyLogs = 3;
|
|
|
570
589
|
/**
|
|
571
590
|
* Resets the reentrancy log counter. Test-only API.
|
|
572
591
|
*/
|
|
573
|
-
|
|
592
|
+
function resetReentrancyLogCounter() {
|
|
574
593
|
totalReentrancyLogs = 3;
|
|
575
594
|
}
|
|
595
|
+
exports.resetReentrancyLogCounter = resetReentrancyLogCounter;
|
|
576
596
|
const reentrancyErrorMessage = "Reentrancy detected in sequence local ops";
|
|
577
597
|
const ensureNoReentrancy = createReentrancyDetector(() => {
|
|
578
|
-
throw new LoggingError(reentrancyErrorMessage);
|
|
598
|
+
throw new telemetry_utils_1.LoggingError(reentrancyErrorMessage);
|
|
579
599
|
});
|
|
580
600
|
//# sourceMappingURL=sequence.js.map
|