@fluidframework/merge-tree 2.23.0 → 2.30.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 +4 -0
- package/dist/mergeTree.d.ts +2 -0
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +15 -10
- package/dist/mergeTree.js.map +1 -1
- package/dist/perspective.d.ts +92 -54
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +145 -84
- package/dist/perspective.js.map +1 -1
- package/dist/stamps.d.ts +90 -0
- package/dist/stamps.d.ts.map +1 -0
- package/dist/stamps.js +90 -0
- package/dist/stamps.js.map +1 -0
- package/dist/test/perspective.spec.d.ts +6 -0
- package/dist/test/perspective.spec.d.ts.map +1 -0
- package/dist/test/perspective.spec.js +119 -0
- package/dist/test/perspective.spec.js.map +1 -0
- package/dist/test/stamps.spec.d.ts +6 -0
- package/dist/test/stamps.spec.d.ts.map +1 -0
- package/dist/test/stamps.spec.js +130 -0
- package/dist/test/stamps.spec.js.map +1 -0
- package/dist/test/testClientLogger.d.ts +9 -0
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +64 -45
- package/dist/test/testClientLogger.js.map +1 -1
- package/lib/mergeTree.d.ts +2 -0
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +16 -11
- package/lib/mergeTree.js.map +1 -1
- package/lib/perspective.d.ts +92 -54
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +119 -80
- package/lib/perspective.js.map +1 -1
- package/lib/stamps.d.ts +90 -0
- package/lib/stamps.d.ts.map +1 -0
- package/lib/stamps.js +77 -0
- package/lib/stamps.js.map +1 -0
- package/lib/test/perspective.spec.d.ts +6 -0
- package/lib/test/perspective.spec.d.ts.map +1 -0
- package/lib/test/perspective.spec.js +117 -0
- package/lib/test/perspective.spec.js.map +1 -0
- package/lib/test/stamps.spec.d.ts +6 -0
- package/lib/test/stamps.spec.d.ts.map +1 -0
- package/lib/test/stamps.spec.js +105 -0
- package/lib/test/stamps.spec.js.map +1 -0
- package/lib/test/testClientLogger.d.ts +9 -0
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +65 -46
- package/lib/test/testClientLogger.js.map +1 -1
- package/package.json +17 -17
- package/src/mergeTree.ts +32 -11
- package/src/perspective.ts +184 -108
- package/src/stamps.ts +164 -0
package/CHANGELOG.md
CHANGED
package/dist/mergeTree.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { LocalReferencePosition, SlidingPreference } from "./localReference.js";
|
|
|
11
11
|
import { IMergeTreeDeltaOpArgs, MergeTreeDeltaCallback, MergeTreeMaintenanceCallback } from "./mergeTreeDeltaCallback.js";
|
|
12
12
|
import { CollaborationWindow, IMergeNode, ISegmentAction, Marker, MergeBlock, SegmentGroup, type ISegmentInternal, type ISegmentLeaf, type ISegmentPrivate } from "./mergeTreeNodes.js";
|
|
13
13
|
import { IMergeTreeDeltaOp, IRelativePosition, ReferenceType } from "./ops.js";
|
|
14
|
+
import { type Perspective } from "./perspective.js";
|
|
14
15
|
import { PropertySet } from "./properties.js";
|
|
15
16
|
import { ReferencePosition } from "./referencePositions.js";
|
|
16
17
|
import { type IInsertionInfo, type SegmentWithInfo } from "./segmentInfos.js";
|
|
@@ -180,6 +181,7 @@ export declare class MergeTree {
|
|
|
180
181
|
readonly pendingSegments: DoublyLinkedList<SegmentGroup>;
|
|
181
182
|
readonly segmentsToScour: Heap<LRUSegment>;
|
|
182
183
|
readonly attributionPolicy: AttributionPolicy | undefined;
|
|
184
|
+
localPerspective: Perspective;
|
|
183
185
|
/**
|
|
184
186
|
* Whether or not all blocks in the mergeTree currently have information about local partial lengths computed.
|
|
185
187
|
* This information is only necessary on reconnect, and otherwise costly to bookkeep.
|
package/dist/mergeTree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeTree.d.ts","sourceRoot":"","sources":["../src/mergeTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAU,IAAI,EAAa,MAAM,qCAAqC,CAAC;AAG9E,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAY,MAAM,wBAAwB,CAAC;AAOpE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAEN,sBAAsB,EACtB,iBAAiB,EAIjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,qBAAqB,EAErB,sBAAsB,EACtB,4BAA4B,EAE5B,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EACN,mBAAmB,EACnB,UAAU,EACV,cAAc,EAGd,MAAM,EAEN,UAAU,EACV,YAAY,EAOZ,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,eAAe,EAEpB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EAEjB,aAAa,EACb,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"mergeTree.d.ts","sourceRoot":"","sources":["../src/mergeTree.ts"],"names":[],"mappings":"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"}
|
package/dist/mergeTree.js
CHANGED
|
@@ -277,6 +277,7 @@ class MergeTree {
|
|
|
277
277
|
this.collabWindow = new mergeTreeNodes_js_1.CollaborationWindow();
|
|
278
278
|
this.pendingSegments = new index_js_1.DoublyLinkedList();
|
|
279
279
|
this.segmentsToScour = new internal_1.Heap(LRUSegmentComparer);
|
|
280
|
+
this.localPerspective = new perspective_js_1.LocalDefaultPerspective(this.collabWindow.clientId);
|
|
280
281
|
/**
|
|
281
282
|
* Whether or not all blocks in the mergeTree currently have information about local partial lengths computed.
|
|
282
283
|
* This information is only necessary on reconnect, and otherwise costly to bookkeep.
|
|
@@ -711,6 +712,11 @@ class MergeTree {
|
|
|
711
712
|
// Note: this is not `this.collabWindow.currentSeq` because we want to support resolving local reference positions to positions
|
|
712
713
|
// from within event handlers, and the collab window's sequence numbers are not updated in time in all of those cases.
|
|
713
714
|
refSeq = Number.MAX_SAFE_INTEGER, clientId = this.collabWindow.clientId, localSeq = this.collabWindow.localSeq) {
|
|
715
|
+
const perspective = clientId === this.collabWindow.clientId
|
|
716
|
+
? localSeq === undefined
|
|
717
|
+
? this.localPerspective
|
|
718
|
+
: new perspective_js_1.LocalReconnectingPerspective(refSeq, clientId, localSeq)
|
|
719
|
+
: new perspective_js_1.PriorPerspective(refSeq, clientId);
|
|
714
720
|
const seg = refPos.getSegment();
|
|
715
721
|
if (!(0, mergeTreeNodes_js_1.isSegmentLeaf)(seg)) {
|
|
716
722
|
// We have no idea where this reference is, because it refers to a segment which is not in the tree.
|
|
@@ -722,7 +728,7 @@ class MergeTree {
|
|
|
722
728
|
if ((0, referencePositions_js_1.refTypeIncludesFlag)(refPos, ops_js_1.ReferenceType.Transient) || seg.localRefs?.has(refPos)) {
|
|
723
729
|
if (seg !== this.startOfTree &&
|
|
724
730
|
seg !== this.endOfTree &&
|
|
725
|
-
!
|
|
731
|
+
!perspective.isSegmentPresent(seg)) {
|
|
726
732
|
const forward = refPos.slidingPreference === localReference_js_1.SlidingPreference.FORWARD;
|
|
727
733
|
const moveInfo = (0, segmentInfos_js_1.toMoveInfo)(seg);
|
|
728
734
|
const removeInfo = (0, segmentInfos_js_1.toRemovalInfo)(seg);
|
|
@@ -732,11 +738,10 @@ class MergeTree {
|
|
|
732
738
|
? removeInfo.removedSeq
|
|
733
739
|
: refSeq;
|
|
734
740
|
const slideLocalSeq = moveInfo?.localMovedSeq ?? removeInfo?.localRemovedSeq;
|
|
735
|
-
const
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
const slidSegment = perspective.nextSegment(seg, forward);
|
|
741
|
+
const slidePerspective = slideLocalSeq === undefined
|
|
742
|
+
? new perspective_js_1.PriorPerspective(slideSeq, this.collabWindow.clientId)
|
|
743
|
+
: new perspective_js_1.LocalReconnectingPerspective(slideSeq, this.collabWindow.clientId, slideLocalSeq);
|
|
744
|
+
const slidSegment = slidePerspective.nextSegment(this, seg, forward);
|
|
740
745
|
return (this.getPosition(slidSegment, refSeq, clientId, localSeq) +
|
|
741
746
|
(forward ? 0 : slidSegment.cachedLength === 0 ? 0 : slidSegment.cachedLength - 1));
|
|
742
747
|
}
|
|
@@ -1336,6 +1341,9 @@ class MergeTree {
|
|
|
1336
1341
|
const localOverlapWithRefs = [];
|
|
1337
1342
|
const movedSegments = [];
|
|
1338
1343
|
const localSeq = seq === constants_js_1.UnassignedSequenceNumber ? ++this.collabWindow.localSeq : undefined;
|
|
1344
|
+
const perspective = seq === constants_js_1.UnassignedSequenceNumber
|
|
1345
|
+
? this.localPerspective
|
|
1346
|
+
: new perspective_js_1.PriorPerspective(refSeq, clientId);
|
|
1339
1347
|
const obliterate = {
|
|
1340
1348
|
clientId,
|
|
1341
1349
|
end: (0, localReference_js_1.createDetachedLocalReferencePosition)(undefined),
|
|
@@ -1370,10 +1378,7 @@ class MergeTree {
|
|
|
1370
1378
|
this.obliterates.addOrUpdate(obliterate);
|
|
1371
1379
|
const markMoved = (segment, pos) => {
|
|
1372
1380
|
if ((start.side === sequencePlace_js_1.Side.After && startPos === pos + segment.cachedLength) || // exclusive start segment
|
|
1373
|
-
(end.side === sequencePlace_js_1.Side.Before &&
|
|
1374
|
-
endPos === pos &&
|
|
1375
|
-
// TODO:AB#29765: The clientId check here should be handled by isSegmentPresent and/or PerspectiveImpl
|
|
1376
|
-
(segment.clientId === clientId || (0, perspective_js_1.isSegmentPresent)(segment, { refSeq, localSeq }))) // exclusive end segment
|
|
1381
|
+
(end.side === sequencePlace_js_1.Side.Before && endPos === pos && perspective.isSegmentPresent(segment)) // exclusive end segment
|
|
1377
1382
|
) {
|
|
1378
1383
|
// We walk these segments because we want to also walk any concurrently inserted segments between here and the obliterated segments.
|
|
1379
1384
|
// These segments are outside of the obliteration range though, so return true to keep walking.
|