@fluidframework/merge-tree 2.30.0 → 2.31.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 +403 -399
- package/api-report/merge-tree.legacy.alpha.api.md +1 -0
- package/dist/MergeTreeTextHelper.d.ts +9 -3
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js +5 -5
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/client.d.ts +7 -13
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +136 -110
- package/dist/client.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts +12 -8
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +2 -4
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/mergeTree.d.ts +37 -23
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +400 -483
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeDeltaCallback.d.ts +4 -8
- package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/dist/mergeTreeDeltaCallback.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +32 -10
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +43 -28
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/partialLengths.d.ts +2 -2
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +181 -109
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.d.ts +8 -27
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +7 -67
- package/dist/perspective.js.map +1 -1
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +2 -2
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentInfos.d.ts +20 -106
- package/dist/segmentInfos.d.ts.map +1 -1
- package/dist/segmentInfos.js +28 -42
- package/dist/segmentInfos.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts +1 -14
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +3 -17
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +62 -19
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +55 -24
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +6 -9
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/stamps.d.ts +1 -1
- package/dist/stamps.js +1 -1
- package/dist/stamps.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js +6 -51
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/PartialLengths.perf.spec.js +18 -25
- package/dist/test/PartialLengths.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js +13 -41
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/beastTest.spec.d.ts.map +1 -1
- package/dist/test/beastTest.spec.js +41 -66
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.annotateMarker.spec.js +1 -11
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +14 -14
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +1 -1
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +1 -1
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +49 -58
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js +1 -1
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +4 -21
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/index.d.ts +2 -2
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +2 -6
- package/dist/test/index.js.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +14 -59
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +47 -63
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +9 -62
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +59 -125
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +12 -93
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +10 -7
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +2 -14
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +2 -2
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +18 -23
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.partialLength.spec.js +166 -136
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +16 -126
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/partialLength.spec.js +28 -196
- package/dist/test/partialLength.spec.js.map +1 -1
- package/dist/test/perspective.spec.js +34 -0
- package/dist/test/perspective.spec.js.map +1 -1
- package/dist/test/propertyManager.spec.js +1 -1
- package/dist/test/propertyManager.spec.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +0 -2
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js +10 -4
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +1 -0
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +16 -26
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +3 -10
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testServer.d.ts +2 -1
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js +7 -5
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +36 -56
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +68 -77
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.d.ts +2 -2
- package/dist/test/text.d.ts.map +1 -1
- package/dist/test/text.js +5 -2
- package/dist/test/text.js.map +1 -1
- package/dist/textSegment.d.ts +0 -6
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js.map +1 -1
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js +53 -26
- package/dist/zamboni.js.map +1 -1
- package/lib/MergeTreeTextHelper.d.ts +9 -3
- package/lib/MergeTreeTextHelper.d.ts.map +1 -1
- package/lib/MergeTreeTextHelper.js +5 -5
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/client.d.ts +7 -13
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +117 -116
- package/lib/client.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts +12 -8
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js +2 -4
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/index.d.ts +6 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/mergeTree.d.ts +37 -23
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +381 -488
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeDeltaCallback.d.ts +4 -8
- package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/lib/mergeTreeDeltaCallback.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +32 -10
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +42 -29
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/partialLengths.d.ts +2 -2
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +160 -111
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.d.ts +8 -27
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +8 -68
- package/lib/perspective.js.map +1 -1
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +2 -2
- package/lib/revertibles.js.map +1 -1
- package/lib/segmentInfos.d.ts +20 -106
- package/lib/segmentInfos.d.ts.map +1 -1
- package/lib/segmentInfos.js +26 -37
- package/lib/segmentInfos.js.map +1 -1
- package/lib/segmentPropertiesManager.d.ts +1 -14
- package/lib/segmentPropertiesManager.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +2 -16
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotLoader.d.ts.map +1 -1
- package/lib/snapshotLoader.js +39 -19
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js +34 -26
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js +7 -10
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/stamps.d.ts +1 -1
- package/lib/stamps.js +1 -1
- package/lib/stamps.js.map +1 -1
- package/lib/test/Insertion.perf.spec.js +6 -51
- package/lib/test/Insertion.perf.spec.js.map +1 -1
- package/lib/test/PartialLengths.perf.spec.js +18 -25
- package/lib/test/PartialLengths.perf.spec.js.map +1 -1
- package/lib/test/Removal.perf.spec.js +13 -41
- package/lib/test/Removal.perf.spec.js.map +1 -1
- package/lib/test/beastTest.spec.d.ts.map +1 -1
- package/lib/test/beastTest.spec.js +42 -67
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.annotateMarker.spec.js +1 -11
- package/lib/test/client.annotateMarker.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +14 -14
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js +1 -1
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +1 -1
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +50 -59
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/client.rollbackFarm.spec.js +1 -1
- package/lib/test/client.rollbackFarm.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +4 -21
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/index.d.ts +2 -2
- package/lib/test/index.d.ts.map +1 -1
- package/lib/test/index.js +1 -1
- package/lib/test/index.js.map +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +15 -60
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.annotate.spec.js +48 -64
- package/lib/test/mergeTree.annotate.spec.js.map +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js +10 -63
- package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.insertingWalk.spec.js +61 -127
- package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +13 -94
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js +10 -7
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/mergeTree.walk.spec.js +2 -14
- package/lib/test/mergeTree.walk.spec.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js +3 -3
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +18 -23
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.partialLength.spec.js +167 -137
- package/lib/test/obliterate.partialLength.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +17 -127
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/partialLength.spec.js +29 -197
- package/lib/test/partialLength.spec.js.map +1 -1
- package/lib/test/perspective.spec.js +34 -0
- package/lib/test/perspective.spec.js.map +1 -1
- package/lib/test/propertyManager.spec.js +2 -2
- package/lib/test/propertyManager.spec.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +0 -2
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/segmentGroupCollection.spec.js +10 -4
- package/lib/test/segmentGroupCollection.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +1 -0
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +18 -28
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +3 -10
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testServer.d.ts +2 -1
- package/lib/test/testServer.d.ts.map +1 -1
- package/lib/test/testServer.js +7 -5
- package/lib/test/testServer.js.map +1 -1
- package/lib/test/testUtils.d.ts +36 -56
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js +66 -48
- package/lib/test/testUtils.js.map +1 -1
- package/lib/test/text.d.ts +2 -2
- package/lib/test/text.d.ts.map +1 -1
- package/lib/test/text.js +6 -3
- package/lib/test/text.js.map +1 -1
- package/lib/textSegment.d.ts +0 -6
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/lib/zamboni.d.ts.map +1 -1
- package/lib/zamboni.js +32 -28
- package/lib/zamboni.js.map +1 -1
- package/package.json +17 -20
- package/src/MergeTreeTextHelper.ts +17 -12
- package/src/client.ts +141 -197
- package/src/endOfTreeSegment.ts +11 -8
- package/src/index.ts +4 -3
- package/src/mergeTree.ts +482 -633
- package/src/mergeTreeDeltaCallback.ts +4 -8
- package/src/mergeTreeNodes.ts +66 -45
- package/src/partialLengths.ts +181 -137
- package/src/perspective.ts +17 -95
- package/src/revertibles.ts +2 -7
- package/src/segmentInfos.ts +48 -141
- package/src/segmentPropertiesManager.ts +2 -16
- package/src/snapshotLoader.ts +62 -30
- package/src/snapshotV1.ts +36 -28
- package/src/snapshotlegacy.ts +7 -16
- package/src/stamps.ts +1 -1
- package/src/textSegment.ts +0 -13
- package/src/zamboni.ts +38 -32
- package/tsconfig.json +1 -0
- package/prettier.config.cjs +0 -8
|
@@ -140,15 +140,11 @@ export interface IMergeTreeDeltaOpArgs {
|
|
|
140
140
|
* This field is omitted for deltas corresponding to unacknowledged changes.
|
|
141
141
|
*/
|
|
142
142
|
readonly sequencedMessage?: ISequencedDocumentMessage;
|
|
143
|
-
}
|
|
144
143
|
|
|
145
|
-
/**
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
readonly clientId: number;
|
|
150
|
-
readonly referenceSequenceNumber: number;
|
|
151
|
-
readonly sequenceNumber: number;
|
|
144
|
+
/**
|
|
145
|
+
* Set to true if this delta is being performed as part of a rollback of unsent local changes.
|
|
146
|
+
*/
|
|
147
|
+
readonly rollback?: true;
|
|
152
148
|
}
|
|
153
149
|
|
|
154
150
|
/**
|
package/src/mergeTreeNodes.ts
CHANGED
|
@@ -7,12 +7,18 @@ import { assert } from "@fluidframework/core-utils/internal";
|
|
|
7
7
|
import { AttributionKey } from "@fluidframework/runtime-definitions/internal";
|
|
8
8
|
|
|
9
9
|
import { IAttributionCollection } from "./attributionCollection.js";
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
LocalClientId,
|
|
12
|
+
NonCollabClient,
|
|
13
|
+
UnassignedSequenceNumber,
|
|
14
|
+
UniversalSequenceNumber,
|
|
15
|
+
} from "./constants.js";
|
|
11
16
|
import { LocalReferenceCollection, type LocalReferencePosition } from "./localReference.js";
|
|
12
17
|
import { TrackingGroupCollection } from "./mergeTreeTracking.js";
|
|
13
18
|
import { IJSONSegment, IMarkerDef, ReferenceType } from "./ops.js";
|
|
14
19
|
import { computeHierarchicalOrdinal } from "./ordinal.js";
|
|
15
20
|
import type { PartialSequenceLengths } from "./partialLengths.js";
|
|
21
|
+
import { LocalDefaultPerspective, PriorPerspective, type Perspective } from "./perspective.js";
|
|
16
22
|
import { PropertySet, clone, createMap, type MapLike } from "./properties.js";
|
|
17
23
|
import { ReferencePosition } from "./referencePositions.js";
|
|
18
24
|
import { SegmentGroupCollection } from "./segmentGroupCollection.js";
|
|
@@ -20,16 +26,15 @@ import {
|
|
|
20
26
|
hasProp,
|
|
21
27
|
isInserted,
|
|
22
28
|
isMergeNodeInfo as isMergeNode,
|
|
23
|
-
isMoved,
|
|
24
29
|
isRemoved,
|
|
25
30
|
overwriteInfo,
|
|
26
|
-
type
|
|
31
|
+
type IHasInsertionInfo,
|
|
27
32
|
type IMergeNodeInfo,
|
|
28
|
-
type
|
|
29
|
-
type IRemovalInfo,
|
|
33
|
+
type IHasRemovalInfo,
|
|
30
34
|
type SegmentWithInfo,
|
|
31
35
|
} from "./segmentInfos.js";
|
|
32
36
|
import { PropertiesManager } from "./segmentPropertiesManager.js";
|
|
37
|
+
import type { OperationStamp, SliceRemoveOperationStamp } from "./stamps.js";
|
|
33
38
|
|
|
34
39
|
/**
|
|
35
40
|
* This interface exposes internal things to dds that leverage merge tree,
|
|
@@ -91,7 +96,7 @@ export interface ISegmentPrivate extends ISegmentInternal {
|
|
|
91
96
|
obliteratePrecedingInsertion?: ObliterateInfo;
|
|
92
97
|
}
|
|
93
98
|
/**
|
|
94
|
-
* Segment leafs are segments that have both IMergeNodeInfo and
|
|
99
|
+
* Segment leafs are segments that have both IMergeNodeInfo and IHasInsertionInfo. This means they
|
|
95
100
|
* are inserted at a position, and bound via their parent MergeBlock to the merge tree. MergeBlocks'
|
|
96
101
|
* children are either a segment leaf, or another merge block for interior nodes of the tree. When working
|
|
97
102
|
* within the tree it is generally unnecessary to use type coercions methods common to the infos, and segment
|
|
@@ -99,7 +104,7 @@ export interface ISegmentPrivate extends ISegmentInternal {
|
|
|
99
104
|
* merge tree, like via client's public methods, it becomes necessary to use the type coercions methods
|
|
100
105
|
* to ensure the passed in segment objects are correctly bound to the merge tree.
|
|
101
106
|
*/
|
|
102
|
-
export type ISegmentLeaf = SegmentWithInfo<IMergeNodeInfo &
|
|
107
|
+
export type ISegmentLeaf = SegmentWithInfo<IMergeNodeInfo & IHasInsertionInfo>;
|
|
103
108
|
/**
|
|
104
109
|
* A type-guard which determines if the segment has segment leaf, and
|
|
105
110
|
* returns true if it does, along with applying strong typing.
|
|
@@ -130,7 +135,7 @@ export const assertSegmentLeaf: (segmentLike: unknown) => asserts segmentLike is
|
|
|
130
135
|
* type as segments may not yet be bound to the tree, so lack merge node info which is required for
|
|
131
136
|
* segment leafs.
|
|
132
137
|
*/
|
|
133
|
-
export type IMergeNodeBuilder = MergeBlock | SegmentWithInfo<
|
|
138
|
+
export type IMergeNodeBuilder = MergeBlock | SegmentWithInfo<IHasInsertionInfo>;
|
|
134
139
|
|
|
135
140
|
/**
|
|
136
141
|
* This type is used by MergeBlocks to define their children, which are either segments or other
|
|
@@ -211,12 +216,12 @@ export interface ISegmentAction<TClientData> {
|
|
|
211
216
|
): boolean;
|
|
212
217
|
}
|
|
213
218
|
export interface ISegmentChanges {
|
|
214
|
-
next?: SegmentWithInfo<
|
|
215
|
-
replaceCurrent?: SegmentWithInfo<
|
|
219
|
+
next?: SegmentWithInfo<IHasInsertionInfo>;
|
|
220
|
+
replaceCurrent?: SegmentWithInfo<IHasInsertionInfo>;
|
|
216
221
|
}
|
|
217
222
|
|
|
218
223
|
export interface InsertContext {
|
|
219
|
-
candidateSegment?: SegmentWithInfo<
|
|
224
|
+
candidateSegment?: SegmentWithInfo<IHasInsertionInfo>;
|
|
220
225
|
leaf: (segment: ISegmentLeaf | undefined, pos: number, ic: InsertContext) => ISegmentChanges;
|
|
221
226
|
continuePredicate?: (continueFromBlock: MergeBlock) => boolean;
|
|
222
227
|
}
|
|
@@ -225,9 +230,7 @@ export interface ObliterateInfo {
|
|
|
225
230
|
start: LocalReferencePosition;
|
|
226
231
|
end: LocalReferencePosition;
|
|
227
232
|
refSeq: number;
|
|
228
|
-
|
|
229
|
-
seq: number;
|
|
230
|
-
localSeq: number | undefined;
|
|
233
|
+
stamp: SliceRemoveOperationStamp;
|
|
231
234
|
segmentGroup: SegmentGroup | undefined;
|
|
232
235
|
}
|
|
233
236
|
|
|
@@ -358,26 +361,18 @@ export abstract class BaseSegment implements ISegment {
|
|
|
358
361
|
protected cloneInto(b: ISegment): void {
|
|
359
362
|
const seg: ISegmentPrivate = b;
|
|
360
363
|
if (isInserted(this)) {
|
|
361
|
-
overwriteInfo<
|
|
362
|
-
|
|
363
|
-
seq: this.seq,
|
|
364
|
+
overwriteInfo<IHasInsertionInfo>(seg, {
|
|
365
|
+
insert: this.insert,
|
|
364
366
|
});
|
|
365
367
|
}
|
|
366
368
|
// TODO: deep clone properties
|
|
367
369
|
seg.properties = clone(this.properties);
|
|
368
370
|
if (isRemoved(this)) {
|
|
369
|
-
overwriteInfo<
|
|
370
|
-
|
|
371
|
-
removedClientIds: [...this.removedClientIds],
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
if (isMoved(this)) {
|
|
375
|
-
overwriteInfo<IMoveInfo>(seg, {
|
|
376
|
-
movedSeq: this.movedSeq,
|
|
377
|
-
movedSeqs: [...this.movedSeqs],
|
|
378
|
-
movedClientIds: [...this.movedClientIds],
|
|
371
|
+
overwriteInfo<IHasRemovalInfo>(seg, {
|
|
372
|
+
removes: [...this.removes],
|
|
379
373
|
});
|
|
380
374
|
}
|
|
375
|
+
|
|
381
376
|
seg.attribution = this.attribution?.clone();
|
|
382
377
|
}
|
|
383
378
|
|
|
@@ -421,25 +416,11 @@ export abstract class BaseSegment implements ISegment {
|
|
|
421
416
|
}
|
|
422
417
|
|
|
423
418
|
if (isInserted(this)) {
|
|
424
|
-
overwriteInfo<
|
|
425
|
-
seq: this.seq,
|
|
426
|
-
localSeq: this.localSeq,
|
|
427
|
-
clientId: this.clientId,
|
|
428
|
-
});
|
|
419
|
+
overwriteInfo<IHasInsertionInfo>(leafSegment, { insert: this.insert });
|
|
429
420
|
}
|
|
430
421
|
if (isRemoved(this)) {
|
|
431
|
-
overwriteInfo<
|
|
432
|
-
|
|
433
|
-
removedSeq: this.removedSeq,
|
|
434
|
-
localRemovedSeq: this.localRemovedSeq,
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
if (isMoved(this)) {
|
|
438
|
-
overwriteInfo<IMoveInfo>(leafSegment, {
|
|
439
|
-
movedClientIds: [...this.movedClientIds],
|
|
440
|
-
movedSeq: this.movedSeq,
|
|
441
|
-
movedSeqs: [...this.movedSeqs],
|
|
442
|
-
localMovedSeq: this.localMovedSeq,
|
|
422
|
+
overwriteInfo<IHasRemovalInfo>(leafSegment, {
|
|
423
|
+
removes: [...this.removes],
|
|
443
424
|
});
|
|
444
425
|
}
|
|
445
426
|
|
|
@@ -583,6 +564,32 @@ export class Marker extends BaseSegment implements ReferencePosition, ISegment {
|
|
|
583
564
|
}
|
|
584
565
|
}
|
|
585
566
|
|
|
567
|
+
/**
|
|
568
|
+
* Returns a stamp that occurs at the minimum sequence number.
|
|
569
|
+
* @privateRemarks
|
|
570
|
+
* This is a free function over something obtainable on CollaborationWindow to avoid exposing Perspective
|
|
571
|
+
* and OperationStamp from the package (even internally), at least for now.
|
|
572
|
+
* If/when `Client`'s API is refactored to be structured similarly to MergeTree (so that SharedString passes in
|
|
573
|
+
* things closer to `Perspective`s when calling methods on `Client` rather than refSeq/localSeq/clientId etc),
|
|
574
|
+
* it may be more reasonable to expose this more directly on `CollaborationWindow`.
|
|
575
|
+
*/
|
|
576
|
+
export function getMinSeqStamp(collabWindow: CollaborationWindow): OperationStamp {
|
|
577
|
+
return { seq: collabWindow.minSeq, clientId: NonCollabClient };
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* Returns a perspective representing a readonly client's view of the tree at the minimum sequence number.
|
|
582
|
+
* @privateRemarks
|
|
583
|
+
* This is a free function over something obtainable on CollaborationWindow to avoid exposing Perspective
|
|
584
|
+
* and OperationStamp from the package (even internally), at least for now.
|
|
585
|
+
* If/when `Client`'s API is refactored to be structured similarly to MergeTree (so that SharedString passes in
|
|
586
|
+
* things closer to `Perspective`s when calling methods on `Client` rather than refSeq/localSeq/clientId etc),
|
|
587
|
+
* it may be more reasonable to expose this more directly on `CollaborationWindow`.
|
|
588
|
+
*/
|
|
589
|
+
export function getMinSeqPerspective(collabWindow: CollaborationWindow): Perspective {
|
|
590
|
+
return new PriorPerspective(collabWindow.minSeq, NonCollabClient);
|
|
591
|
+
}
|
|
592
|
+
|
|
586
593
|
/**
|
|
587
594
|
* This class is used to track facts about the current window of collaboration. This window is defined by the server
|
|
588
595
|
* specified minimum sequence number to the last sequence number seen. Additionally, it track state for outstanding
|
|
@@ -667,12 +674,26 @@ export class CollaborationWindow {
|
|
|
667
674
|
*/
|
|
668
675
|
localSeq = 0;
|
|
669
676
|
|
|
670
|
-
|
|
677
|
+
public localPerspective: Perspective = new LocalDefaultPerspective(this.clientId);
|
|
678
|
+
|
|
679
|
+
public loadFrom(a: CollaborationWindow): void {
|
|
671
680
|
this.clientId = a.clientId;
|
|
672
681
|
this.collaborating = a.collaborating;
|
|
673
682
|
this.minSeq = a.minSeq;
|
|
674
683
|
this.currentSeq = a.currentSeq;
|
|
675
684
|
}
|
|
685
|
+
|
|
686
|
+
public mintNextLocalOperationStamp(): OperationStamp {
|
|
687
|
+
if (this.collaborating) {
|
|
688
|
+
this.localSeq++;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
return {
|
|
692
|
+
seq: this.collaborating ? UnassignedSequenceNumber : UniversalSequenceNumber,
|
|
693
|
+
clientId: this.clientId,
|
|
694
|
+
localSeq: this.localSeq,
|
|
695
|
+
};
|
|
696
|
+
}
|
|
676
697
|
}
|
|
677
698
|
|
|
678
699
|
/**
|