@fluidframework/merge-tree 2.42.0 → 2.43.0-343119
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/dist/client.d.ts +3 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +8 -11
- package/dist/client.js.map +1 -1
- package/dist/collections/list.d.ts +95 -5
- package/dist/collections/list.d.ts.map +1 -1
- package/dist/collections/list.js +67 -5
- package/dist/collections/list.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/mergeTree.d.ts +9 -9
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +14 -6
- package/dist/mergeTree.js.map +1 -1
- package/dist/revertibles.js +1 -1
- package/dist/revertibles.js.map +1 -1
- package/dist/test/beastTest.spec.js +1 -1
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.annotateMarker.spec.js +1 -1
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +21 -21
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.attributionFarm.spec.js +1 -1
- package/dist/test/client.attributionFarm.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +1 -0
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +62 -48
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.localReferenceFarm.spec.js +1 -0
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +8 -6
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +25 -25
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +4 -4
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +4 -4
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/snapshot.utils.js +1 -1
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/sortedSegmentSet.spec.js +3 -3
- package/dist/test/sortedSegmentSet.spec.js.map +1 -1
- package/dist/test/testClient.js +3 -3
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/tracking.spec.js +7 -7
- package/dist/test/tracking.spec.js.map +1 -1
- package/dist/test/wordUnitTests.spec.js.map +1 -1
- package/lib/client.d.ts +3 -3
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +8 -11
- package/lib/client.js.map +1 -1
- package/lib/collections/list.d.ts +95 -5
- package/lib/collections/list.d.ts.map +1 -1
- package/lib/collections/list.js +67 -5
- package/lib/collections/list.js.map +1 -1
- package/lib/index.d.ts +1 -1
- 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 +9 -9
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +14 -6
- package/lib/mergeTree.js.map +1 -1
- package/lib/revertibles.js +1 -1
- package/lib/revertibles.js.map +1 -1
- package/lib/test/beastTest.spec.js +1 -1
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.annotateMarker.spec.js +1 -1
- package/lib/test/client.annotateMarker.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +21 -21
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.attributionFarm.spec.js +1 -1
- package/lib/test/client.attributionFarm.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js +1 -0
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +62 -48
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.localReferenceFarm.spec.js +1 -0
- package/lib/test/client.localReferenceFarm.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +8 -6
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/mergeTree.annotate.spec.js +25 -25
- package/lib/test/mergeTree.annotate.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +4 -4
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +4 -4
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/snapshot.utils.js +1 -1
- package/lib/test/snapshot.utils.js.map +1 -1
- package/lib/test/sortedSegmentSet.spec.js +3 -3
- package/lib/test/sortedSegmentSet.spec.js.map +1 -1
- package/lib/test/testClient.js +3 -3
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/tracking.spec.js +7 -7
- package/lib/test/tracking.spec.js.map +1 -1
- package/lib/test/wordUnitTests.spec.js.map +1 -1
- package/package.json +16 -16
- package/src/client.ts +22 -20
- package/src/collections/list.ts +101 -5
- package/src/index.ts +3 -0
- package/src/mergeTree.ts +29 -23
- package/src/revertibles.ts +1 -1
package/dist/revertibles.js
CHANGED
|
@@ -186,7 +186,7 @@ function revertLocalRemove(driver, mergeTreeWithRevert, revertible) {
|
|
|
186
186
|
}
|
|
187
187
|
const props = tracked.properties;
|
|
188
188
|
driver.insertFromSpec(realPos, props.segSpec);
|
|
189
|
-
const insertSegment = mergeTreeWithRevert.getContainingSegment(realPos, mergeTreeWithRevert.localPerspective)
|
|
189
|
+
const insertSegment = mergeTreeWithRevert.getContainingSegment(realPos, mergeTreeWithRevert.localPerspective)?.segment;
|
|
190
190
|
(0, mergeTreeNodes_js_1.assertSegmentLeaf)(insertSegment);
|
|
191
191
|
const localSlideFilter = (lref) => lref.properties?.referenceSpace ===
|
|
192
192
|
"mergeTreeDeltaRevertible";
|
package/dist/revertibles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revertibles.js","sourceRoot":"","sources":["../src/revertibles.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { DoublyLinkedList } from \"./collections/index.js\";\nimport { EndOfTreeSegment } from \"./endOfTreeSegment.js\";\nimport { LocalReferenceCollection, LocalReferencePosition } from \"./localReference.js\";\nimport { MergeTree, findRootMergeBlock } from \"./mergeTree.js\";\nimport { IMergeTreeDeltaCallbackArgs } from \"./mergeTreeDeltaCallback.js\";\nimport { depthFirstNodeWalk } from \"./mergeTreeNodeWalk.js\";\nimport {\n\tassertSegmentLeaf,\n\tisSegmentLeaf,\n\ttoSegmentLeaf,\n\ttype ISegmentLeaf,\n\ttype ISegmentPrivate,\n} from \"./mergeTreeNodes.js\";\nimport { ITrackingGroup, Trackable, UnorderedTrackingGroup } from \"./mergeTreeTracking.js\";\nimport { IJSONSegment, MergeTreeDeltaType, ReferenceType } from \"./ops.js\";\nimport { PropertySet, matchProperties } from \"./properties.js\";\nimport { DetachedReferencePosition } from \"./referencePositions.js\";\nimport { toRemovalInfo } from \"./segmentInfos.js\";\n\n/**\n * @legacy\n * @alpha\n */\nexport type MergeTreeDeltaRevertible =\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.INSERT;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t }\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.REMOVE;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t }\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.ANNOTATE;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t\t\tpropertyDeltas: PropertySet;\n\t };\n\n/**\n * Tests whether x is a MergeTreeDeltaRevertible\n * @internal\n */\nexport function isMergeTreeDeltaRevertible(x: unknown): x is MergeTreeDeltaRevertible {\n\treturn !!x && typeof x === \"object\" && \"operation\" in x && \"trackingGroup\" in x;\n}\n\ntype TypedRevertible<T extends MergeTreeDeltaRevertible[\"operation\"]> =\n\tMergeTreeDeltaRevertible & {\n\t\toperation: T;\n\t};\n\ninterface RemoveSegmentRefProperties {\n\t/**\n\t * the serialized form of the segment, so it can be re-inserted\n\t */\n\tsegSpec: IJSONSegment;\n\t/**\n\t * a tag so the reference can be identified as being created for revert\n\t */\n\treferenceSpace: \"mergeTreeDeltaRevertible\";\n}\n\n/**\n * @legacy\n * @alpha\n */\nexport interface MergeTreeRevertibleDriver {\n\tinsertFromSpec(pos: number, spec: IJSONSegment): void;\n\tremoveRange(start: number, end: number): void;\n\tannotateRange(start: number, end: number, props: PropertySet): void;\n}\n\n/**\n * exported for test only. should not be exported out the the package\n * @internal\n */\nexport interface MergeTreeWithRevert extends MergeTree {\n\t__mergeTreeRevertible: {\n\t\tdetachedReferences: EndOfTreeSegment;\n\t\trefCallbacks: LocalReferencePosition[\"callbacks\"];\n\t};\n}\n\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nfunction findMergeTreeWithRevert(trackable: Trackable): MergeTreeWithRevert {\n\tconst segmentOrNode = trackable.isLeaf() ? trackable : trackable.getSegment();\n\tconst maybeRoot = findRootMergeBlock(toSegmentLeaf(segmentOrNode));\n\tassert(\n\t\tmaybeRoot?.mergeTree !== undefined,\n\t\t0x5c2 /* trackable is invalid as it is not in a rooted merge tree. */,\n\t);\n\tconst mergeTree: PickPartial<MergeTreeWithRevert, \"__mergeTreeRevertible\"> =\n\t\tmaybeRoot.mergeTree;\n\n\tif (mergeTree.__mergeTreeRevertible === undefined) {\n\t\tconst detachedReferences = new EndOfTreeSegment(maybeRoot.mergeTree);\n\t\tconst refCallbacks: MergeTreeWithRevert[\"__mergeTreeRevertible\"][\"refCallbacks\"] = {\n\t\t\tafterSlide: (r: LocalReferencePosition) => {\n\t\t\t\tif (mergeTree.referencePositionToLocalPosition(r) === DetachedReferencePosition) {\n\t\t\t\t\tconst refs = LocalReferenceCollection.setOrGet(detachedReferences);\n\t\t\t\t\trefs.addAfterTombstones([r]);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tmergeTree.__mergeTreeRevertible = {\n\t\t\trefCallbacks,\n\t\t\tdetachedReferences,\n\t\t};\n\t}\n\treturn mergeTree as MergeTreeWithRevert;\n}\n\nfunction appendLocalInsertToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n): MergeTreeDeltaRevertible[] {\n\tif (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.INSERT) {\n\t\trevertibles.push({\n\t\t\toperation: MergeTreeDeltaType.INSERT,\n\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t});\n\t}\n\tconst last = revertibles[revertibles.length - 1];\n\tfor (const t of deltaArgs.deltaSegments) last.trackingGroup.link(t.segment);\n\n\treturn revertibles;\n}\n\nfunction appendLocalRemoveToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n): MergeTreeDeltaRevertible[] {\n\tif (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.REMOVE) {\n\t\trevertibles.push({\n\t\t\toperation: MergeTreeDeltaType.REMOVE,\n\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t});\n\t}\n\tconst last = revertibles[revertibles.length - 1];\n\n\tconst mergeTreeWithRevert = findMergeTreeWithRevert(deltaArgs.deltaSegments[0].segment);\n\n\tfor (const t of deltaArgs.deltaSegments) {\n\t\tconst props: RemoveSegmentRefProperties = {\n\t\t\tsegSpec: t.segment.toJSONObject() as IJSONSegment,\n\t\t\treferenceSpace: \"mergeTreeDeltaRevertible\",\n\t\t};\n\t\tconst ref = mergeTreeWithRevert.createLocalReferencePosition(\n\t\t\tt.segment,\n\t\t\t0,\n\t\t\tReferenceType.SlideOnRemove,\n\t\t\tprops,\n\t\t);\n\t\tref.callbacks = mergeTreeWithRevert.__mergeTreeRevertible.refCallbacks;\n\t\tfor (const tg of t.segment.trackingCollection.trackingGroups) {\n\t\t\ttg.link(ref);\n\t\t\ttg.unlink(t.segment);\n\t\t}\n\n\t\tlast.trackingGroup.link(ref);\n\t}\n\treturn revertibles;\n}\n\nfunction appendLocalAnnotateToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n): MergeTreeDeltaRevertible[] {\n\tlet last = revertibles[revertibles.length - 1];\n\tfor (const ds of deltaArgs.deltaSegments) {\n\t\tconst propertyDeltas = ds.propertyDeltas;\n\t\tif (propertyDeltas) {\n\t\t\tif (\n\t\t\t\tlast?.operation === MergeTreeDeltaType.ANNOTATE &&\n\t\t\t\tmatchProperties(last?.propertyDeltas, propertyDeltas)\n\t\t\t) {\n\t\t\t\tlast.trackingGroup.link(ds.segment);\n\t\t\t} else {\n\t\t\t\tlast = {\n\t\t\t\t\toperation: MergeTreeDeltaType.ANNOTATE,\n\t\t\t\t\tpropertyDeltas,\n\t\t\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t\t\t};\n\t\t\t\tlast.trackingGroup.link(ds.segment);\n\t\t\t\trevertibles.push(last);\n\t\t\t}\n\t\t}\n\t}\n\treturn revertibles;\n}\n\n/**\n * Appends a merge tree delta to the list of revertibles.\n *\n * @legacy\n * @alpha\n */\nexport function appendToMergeTreeDeltaRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n): void {\n\tif (deltaArgs.deltaSegments.length === 0) {\n\t\treturn;\n\t}\n\tswitch (deltaArgs.operation) {\n\t\tcase MergeTreeDeltaType.INSERT: {\n\t\t\tappendLocalInsertToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase MergeTreeDeltaType.REMOVE: {\n\t\t\tappendLocalRemoveToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase MergeTreeDeltaType.ANNOTATE: {\n\t\t\tappendLocalAnnotateToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault: {\n\t\t\tthrow new UsageError(\"Unsupported event delta type\", {\n\t\t\t\toperation: deltaArgs.operation,\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Removes all revertibles from the list of revertibles.\n *\n * @legacy\n * @alpha\n */\nexport function discardMergeTreeDeltaRevertible(\n\trevertibles: MergeTreeDeltaRevertible[],\n): void {\n\tfor (const r of revertibles) {\n\t\tfor (const t of r.trackingGroup.tracked) {\n\t\t\tt.trackingCollection.unlink(r.trackingGroup);\n\t\t\t// remove untracked local references\n\t\t\tif (t.trackingCollection.empty && !t.isLeaf()) {\n\t\t\t\tconst segment: ISegmentPrivate | undefined = t.getSegment();\n\t\t\t\tsegment?.localRefs?.removeLocalRef(t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction revertLocalInsert(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.INSERT>,\n): void {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\t\tassert(\n\t\t\ttracked.trackingCollection.unlink(revertible.trackingGroup),\n\t\t\t0x3f1 /* tracking group removed */,\n\t\t);\n\t\tassert(isSegmentLeaf(tracked), 0x3f2 /* inserts must track segments */);\n\t\tif (toRemovalInfo(tracked) === undefined) {\n\t\t\tconst start = getPosition(mergeTreeWithRevert, tracked);\n\t\t\tdriver.removeRange(start, start + tracked.cachedLength);\n\t\t}\n\t}\n}\n\nfunction revertLocalRemove(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.REMOVE>,\n): void {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\n\t\tassert(\n\t\t\ttracked.trackingCollection.unlink(revertible.trackingGroup),\n\t\t\t0x3f3 /* tracking group removed */,\n\t\t);\n\n\t\tassert(!tracked.isLeaf(), 0x3f4 /* removes must track local refs */);\n\n\t\tconst refSeg = tracked.getSegment();\n\t\tlet realPos = mergeTreeWithRevert.referencePositionToLocalPosition(tracked);\n\n\t\t// References which are on EndOfStringSegment don't return detached for pos,\n\t\t// they will return the length of the merge-tree. this case just catches\n\t\t// random references, likely not created in the revertible flow,\n\t\t// that are tying to be reverted for some reason.\n\t\tif (realPos === DetachedReferencePosition || !isSegmentLeaf(refSeg)) {\n\t\t\tthrow new UsageError(\"Cannot insert at detached references position\");\n\t\t}\n\n\t\tif (toRemovalInfo(refSeg) === undefined && refSeg.localRefs?.isAfterTombstone(tracked)) {\n\t\t\trealPos++;\n\t\t}\n\n\t\tconst props = tracked.properties as RemoveSegmentRefProperties;\n\t\tdriver.insertFromSpec(realPos, props.segSpec);\n\t\tconst insertSegment = mergeTreeWithRevert.getContainingSegment(\n\t\t\trealPos,\n\t\t\tmergeTreeWithRevert.localPerspective,\n\t\t).segment;\n\t\tassertSegmentLeaf(insertSegment);\n\n\t\tconst localSlideFilter = (lref: LocalReferencePosition): boolean =>\n\t\t\t(lref.properties as Partial<RemoveSegmentRefProperties>)?.referenceSpace ===\n\t\t\t\"mergeTreeDeltaRevertible\";\n\n\t\tconst insertRef: Partial<\n\t\t\tRecord<\"before\" | \"after\", DoublyLinkedList<LocalReferencePosition>>\n\t\t> = {};\n\t\tconst forward = insertSegment.ordinal < refSeg.ordinal;\n\t\tconst refHandler = (lref: LocalReferencePosition): false | undefined => {\n\t\t\t// once we reach it keep the original reference where it is\n\t\t\t// we'll move tracking groups, and remove it as a last step.\n\t\t\tif (tracked === lref) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (localSlideFilter(lref)) {\n\t\t\t\tif (forward) {\n\t\t\t\t\tconst before = (insertRef.before ??= new DoublyLinkedList());\n\t\t\t\t\tbefore.push(lref);\n\t\t\t\t} else {\n\t\t\t\t\tconst after = (insertRef.after ??= new DoublyLinkedList());\n\t\t\t\t\tafter.unshift(lref);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tdepthFirstNodeWalk(\n\t\t\tinsertSegment.parent,\n\t\t\tinsertSegment,\n\t\t\tundefined,\n\t\t\t(seg: ISegmentPrivate) => {\n\t\t\t\tif (seg.localRefs?.empty === false) {\n\t\t\t\t\treturn seg.localRefs.walkReferences(refHandler, undefined, forward);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tundefined,\n\t\t\tforward,\n\t\t);\n\t\tif (\n\t\t\tmergeTreeWithRevert?.__mergeTreeRevertible?.detachedReferences?.localRefs?.has(tracked)\n\t\t) {\n\t\t\tassert(forward, 0x3f6 /* forward should always be true when detached */);\n\t\t\tmergeTreeWithRevert?.__mergeTreeRevertible.detachedReferences.localRefs.walkReferences(\n\t\t\t\trefHandler,\n\t\t\t);\n\t\t}\n\n\t\tif (insertRef !== undefined) {\n\t\t\tconst localRefs = LocalReferenceCollection.setOrGet(insertSegment);\n\t\t\tif (insertRef.before?.empty === false) {\n\t\t\t\tlocalRefs.addBeforeTombstones(insertRef.before.map((n) => n.data));\n\t\t\t}\n\t\t\tif (insertRef.after?.empty === false) {\n\t\t\t\tlocalRefs.addAfterTombstones(insertRef.after.map((n) => n.data));\n\t\t\t}\n\t\t}\n\n\t\tfor (const tg of tracked.trackingCollection.trackingGroups) {\n\t\t\ttg.link(insertSegment);\n\t\t\ttg.unlink(tracked);\n\t\t}\n\t\tconst segment: ISegmentPrivate | undefined = tracked.getSegment();\n\t\tsegment?.localRefs?.removeLocalRef(tracked);\n\t}\n}\n\nfunction revertLocalAnnotate(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.ANNOTATE>,\n): void {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\t\tconst unlinked = tracked.trackingCollection.unlink(revertible.trackingGroup);\n\t\tassert(unlinked && isSegmentLeaf(tracked), 0x3f7 /* annotates must track segments */);\n\t\tif (toRemovalInfo(tracked) === undefined) {\n\t\t\tconst start = getPosition(mergeTreeWithRevert, tracked);\n\t\t\tdriver.annotateRange(start, start + tracked.cachedLength, revertible.propertyDeltas);\n\t\t}\n\t}\n}\n\nfunction getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegmentLeaf): number {\n\treturn mergeTreeWithRevert.getPosition(segment, mergeTreeWithRevert.localPerspective);\n}\n\n/**\n * Reverts all operations in the list of revertibles.\n *\n * @legacy\n * @alpha\n */\nexport function revertMergeTreeDeltaRevertibles(\n\tdriver: MergeTreeRevertibleDriver,\n\trevertibles: MergeTreeDeltaRevertible[],\n): void {\n\tlet mergeTreeWithRevert: MergeTreeWithRevert | undefined;\n\n\twhile (revertibles.length > 0) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst r = revertibles.pop()!;\n\t\tconst operation = r.operation;\n\t\tif (r.trackingGroup.size > 0) {\n\t\t\tmergeTreeWithRevert ??= findMergeTreeWithRevert(r.trackingGroup.tracked[0]);\n\t\t\tswitch (operation) {\n\t\t\t\tcase MergeTreeDeltaType.INSERT: {\n\t\t\t\t\trevertLocalInsert(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase MergeTreeDeltaType.REMOVE: {\n\t\t\t\t\trevertLocalRemove(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase MergeTreeDeltaType.ANNOTATE: {\n\t\t\t\t\trevertLocalAnnotate(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tunreachableCase(operation);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"revertibles.js","sourceRoot":"","sources":["../src/revertibles.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { DoublyLinkedList } from \"./collections/index.js\";\nimport { EndOfTreeSegment } from \"./endOfTreeSegment.js\";\nimport { LocalReferenceCollection, LocalReferencePosition } from \"./localReference.js\";\nimport { MergeTree, findRootMergeBlock } from \"./mergeTree.js\";\nimport { IMergeTreeDeltaCallbackArgs } from \"./mergeTreeDeltaCallback.js\";\nimport { depthFirstNodeWalk } from \"./mergeTreeNodeWalk.js\";\nimport {\n\tassertSegmentLeaf,\n\tisSegmentLeaf,\n\ttoSegmentLeaf,\n\ttype ISegmentLeaf,\n\ttype ISegmentPrivate,\n} from \"./mergeTreeNodes.js\";\nimport { ITrackingGroup, Trackable, UnorderedTrackingGroup } from \"./mergeTreeTracking.js\";\nimport { IJSONSegment, MergeTreeDeltaType, ReferenceType } from \"./ops.js\";\nimport { PropertySet, matchProperties } from \"./properties.js\";\nimport { DetachedReferencePosition } from \"./referencePositions.js\";\nimport { toRemovalInfo } from \"./segmentInfos.js\";\n\n/**\n * @legacy\n * @alpha\n */\nexport type MergeTreeDeltaRevertible =\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.INSERT;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t }\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.REMOVE;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t }\n\t| {\n\t\t\toperation: typeof MergeTreeDeltaType.ANNOTATE;\n\t\t\ttrackingGroup: ITrackingGroup;\n\t\t\tpropertyDeltas: PropertySet;\n\t };\n\n/**\n * Tests whether x is a MergeTreeDeltaRevertible\n * @internal\n */\nexport function isMergeTreeDeltaRevertible(x: unknown): x is MergeTreeDeltaRevertible {\n\treturn !!x && typeof x === \"object\" && \"operation\" in x && \"trackingGroup\" in x;\n}\n\ntype TypedRevertible<T extends MergeTreeDeltaRevertible[\"operation\"]> =\n\tMergeTreeDeltaRevertible & {\n\t\toperation: T;\n\t};\n\ninterface RemoveSegmentRefProperties {\n\t/**\n\t * the serialized form of the segment, so it can be re-inserted\n\t */\n\tsegSpec: IJSONSegment;\n\t/**\n\t * a tag so the reference can be identified as being created for revert\n\t */\n\treferenceSpace: \"mergeTreeDeltaRevertible\";\n}\n\n/**\n * @legacy\n * @alpha\n */\nexport interface MergeTreeRevertibleDriver {\n\tinsertFromSpec(pos: number, spec: IJSONSegment): void;\n\tremoveRange(start: number, end: number): void;\n\tannotateRange(start: number, end: number, props: PropertySet): void;\n}\n\n/**\n * exported for test only. should not be exported out the the package\n * @internal\n */\nexport interface MergeTreeWithRevert extends MergeTree {\n\t__mergeTreeRevertible: {\n\t\tdetachedReferences: EndOfTreeSegment;\n\t\trefCallbacks: LocalReferencePosition[\"callbacks\"];\n\t};\n}\n\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nfunction findMergeTreeWithRevert(trackable: Trackable): MergeTreeWithRevert {\n\tconst segmentOrNode = trackable.isLeaf() ? trackable : trackable.getSegment();\n\tconst maybeRoot = findRootMergeBlock(toSegmentLeaf(segmentOrNode));\n\tassert(\n\t\tmaybeRoot?.mergeTree !== undefined,\n\t\t0x5c2 /* trackable is invalid as it is not in a rooted merge tree. */,\n\t);\n\tconst mergeTree: PickPartial<MergeTreeWithRevert, \"__mergeTreeRevertible\"> =\n\t\tmaybeRoot.mergeTree;\n\n\tif (mergeTree.__mergeTreeRevertible === undefined) {\n\t\tconst detachedReferences = new EndOfTreeSegment(maybeRoot.mergeTree);\n\t\tconst refCallbacks: MergeTreeWithRevert[\"__mergeTreeRevertible\"][\"refCallbacks\"] = {\n\t\t\tafterSlide: (r: LocalReferencePosition) => {\n\t\t\t\tif (mergeTree.referencePositionToLocalPosition(r) === DetachedReferencePosition) {\n\t\t\t\t\tconst refs = LocalReferenceCollection.setOrGet(detachedReferences);\n\t\t\t\t\trefs.addAfterTombstones([r]);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tmergeTree.__mergeTreeRevertible = {\n\t\t\trefCallbacks,\n\t\t\tdetachedReferences,\n\t\t};\n\t}\n\treturn mergeTree as MergeTreeWithRevert;\n}\n\nfunction appendLocalInsertToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n): MergeTreeDeltaRevertible[] {\n\tif (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.INSERT) {\n\t\trevertibles.push({\n\t\t\toperation: MergeTreeDeltaType.INSERT,\n\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t});\n\t}\n\tconst last = revertibles[revertibles.length - 1];\n\tfor (const t of deltaArgs.deltaSegments) last.trackingGroup.link(t.segment);\n\n\treturn revertibles;\n}\n\nfunction appendLocalRemoveToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n): MergeTreeDeltaRevertible[] {\n\tif (revertibles[revertibles.length - 1]?.operation !== MergeTreeDeltaType.REMOVE) {\n\t\trevertibles.push({\n\t\t\toperation: MergeTreeDeltaType.REMOVE,\n\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t});\n\t}\n\tconst last = revertibles[revertibles.length - 1];\n\n\tconst mergeTreeWithRevert = findMergeTreeWithRevert(deltaArgs.deltaSegments[0].segment);\n\n\tfor (const t of deltaArgs.deltaSegments) {\n\t\tconst props: RemoveSegmentRefProperties = {\n\t\t\tsegSpec: t.segment.toJSONObject() as IJSONSegment,\n\t\t\treferenceSpace: \"mergeTreeDeltaRevertible\",\n\t\t};\n\t\tconst ref = mergeTreeWithRevert.createLocalReferencePosition(\n\t\t\tt.segment,\n\t\t\t0,\n\t\t\tReferenceType.SlideOnRemove,\n\t\t\tprops,\n\t\t);\n\t\tref.callbacks = mergeTreeWithRevert.__mergeTreeRevertible.refCallbacks;\n\t\tfor (const tg of t.segment.trackingCollection.trackingGroups) {\n\t\t\ttg.link(ref);\n\t\t\ttg.unlink(t.segment);\n\t\t}\n\n\t\tlast.trackingGroup.link(ref);\n\t}\n\treturn revertibles;\n}\n\nfunction appendLocalAnnotateToRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n): MergeTreeDeltaRevertible[] {\n\tlet last = revertibles[revertibles.length - 1];\n\tfor (const ds of deltaArgs.deltaSegments) {\n\t\tconst propertyDeltas = ds.propertyDeltas;\n\t\tif (propertyDeltas) {\n\t\t\tif (\n\t\t\t\tlast?.operation === MergeTreeDeltaType.ANNOTATE &&\n\t\t\t\tmatchProperties(last?.propertyDeltas, propertyDeltas)\n\t\t\t) {\n\t\t\t\tlast.trackingGroup.link(ds.segment);\n\t\t\t} else {\n\t\t\t\tlast = {\n\t\t\t\t\toperation: MergeTreeDeltaType.ANNOTATE,\n\t\t\t\t\tpropertyDeltas,\n\t\t\t\t\ttrackingGroup: new UnorderedTrackingGroup(),\n\t\t\t\t};\n\t\t\t\tlast.trackingGroup.link(ds.segment);\n\t\t\t\trevertibles.push(last);\n\t\t\t}\n\t\t}\n\t}\n\treturn revertibles;\n}\n\n/**\n * Appends a merge tree delta to the list of revertibles.\n *\n * @legacy\n * @alpha\n */\nexport function appendToMergeTreeDeltaRevertibles(\n\tdeltaArgs: IMergeTreeDeltaCallbackArgs,\n\trevertibles: MergeTreeDeltaRevertible[],\n): void {\n\tif (deltaArgs.deltaSegments.length === 0) {\n\t\treturn;\n\t}\n\tswitch (deltaArgs.operation) {\n\t\tcase MergeTreeDeltaType.INSERT: {\n\t\t\tappendLocalInsertToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase MergeTreeDeltaType.REMOVE: {\n\t\t\tappendLocalRemoveToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase MergeTreeDeltaType.ANNOTATE: {\n\t\t\tappendLocalAnnotateToRevertibles(deltaArgs, revertibles);\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault: {\n\t\t\tthrow new UsageError(\"Unsupported event delta type\", {\n\t\t\t\toperation: deltaArgs.operation,\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Removes all revertibles from the list of revertibles.\n *\n * @legacy\n * @alpha\n */\nexport function discardMergeTreeDeltaRevertible(\n\trevertibles: MergeTreeDeltaRevertible[],\n): void {\n\tfor (const r of revertibles) {\n\t\tfor (const t of r.trackingGroup.tracked) {\n\t\t\tt.trackingCollection.unlink(r.trackingGroup);\n\t\t\t// remove untracked local references\n\t\t\tif (t.trackingCollection.empty && !t.isLeaf()) {\n\t\t\t\tconst segment: ISegmentPrivate | undefined = t.getSegment();\n\t\t\t\tsegment?.localRefs?.removeLocalRef(t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction revertLocalInsert(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.INSERT>,\n): void {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\t\tassert(\n\t\t\ttracked.trackingCollection.unlink(revertible.trackingGroup),\n\t\t\t0x3f1 /* tracking group removed */,\n\t\t);\n\t\tassert(isSegmentLeaf(tracked), 0x3f2 /* inserts must track segments */);\n\t\tif (toRemovalInfo(tracked) === undefined) {\n\t\t\tconst start = getPosition(mergeTreeWithRevert, tracked);\n\t\t\tdriver.removeRange(start, start + tracked.cachedLength);\n\t\t}\n\t}\n}\n\nfunction revertLocalRemove(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.REMOVE>,\n): void {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\n\t\tassert(\n\t\t\ttracked.trackingCollection.unlink(revertible.trackingGroup),\n\t\t\t0x3f3 /* tracking group removed */,\n\t\t);\n\n\t\tassert(!tracked.isLeaf(), 0x3f4 /* removes must track local refs */);\n\n\t\tconst refSeg = tracked.getSegment();\n\t\tlet realPos = mergeTreeWithRevert.referencePositionToLocalPosition(tracked);\n\n\t\t// References which are on EndOfStringSegment don't return detached for pos,\n\t\t// they will return the length of the merge-tree. this case just catches\n\t\t// random references, likely not created in the revertible flow,\n\t\t// that are tying to be reverted for some reason.\n\t\tif (realPos === DetachedReferencePosition || !isSegmentLeaf(refSeg)) {\n\t\t\tthrow new UsageError(\"Cannot insert at detached references position\");\n\t\t}\n\n\t\tif (toRemovalInfo(refSeg) === undefined && refSeg.localRefs?.isAfterTombstone(tracked)) {\n\t\t\trealPos++;\n\t\t}\n\n\t\tconst props = tracked.properties as RemoveSegmentRefProperties;\n\t\tdriver.insertFromSpec(realPos, props.segSpec);\n\t\tconst insertSegment = mergeTreeWithRevert.getContainingSegment(\n\t\t\trealPos,\n\t\t\tmergeTreeWithRevert.localPerspective,\n\t\t)?.segment;\n\t\tassertSegmentLeaf(insertSegment);\n\n\t\tconst localSlideFilter = (lref: LocalReferencePosition): boolean =>\n\t\t\t(lref.properties as Partial<RemoveSegmentRefProperties>)?.referenceSpace ===\n\t\t\t\"mergeTreeDeltaRevertible\";\n\n\t\tconst insertRef: Partial<\n\t\t\tRecord<\"before\" | \"after\", DoublyLinkedList<LocalReferencePosition>>\n\t\t> = {};\n\t\tconst forward = insertSegment.ordinal < refSeg.ordinal;\n\t\tconst refHandler = (lref: LocalReferencePosition): false | undefined => {\n\t\t\t// once we reach it keep the original reference where it is\n\t\t\t// we'll move tracking groups, and remove it as a last step.\n\t\t\tif (tracked === lref) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (localSlideFilter(lref)) {\n\t\t\t\tif (forward) {\n\t\t\t\t\tconst before = (insertRef.before ??= new DoublyLinkedList());\n\t\t\t\t\tbefore.push(lref);\n\t\t\t\t} else {\n\t\t\t\t\tconst after = (insertRef.after ??= new DoublyLinkedList());\n\t\t\t\t\tafter.unshift(lref);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tdepthFirstNodeWalk(\n\t\t\tinsertSegment.parent,\n\t\t\tinsertSegment,\n\t\t\tundefined,\n\t\t\t(seg: ISegmentPrivate) => {\n\t\t\t\tif (seg.localRefs?.empty === false) {\n\t\t\t\t\treturn seg.localRefs.walkReferences(refHandler, undefined, forward);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tundefined,\n\t\t\tforward,\n\t\t);\n\t\tif (\n\t\t\tmergeTreeWithRevert?.__mergeTreeRevertible?.detachedReferences?.localRefs?.has(tracked)\n\t\t) {\n\t\t\tassert(forward, 0x3f6 /* forward should always be true when detached */);\n\t\t\tmergeTreeWithRevert?.__mergeTreeRevertible.detachedReferences.localRefs.walkReferences(\n\t\t\t\trefHandler,\n\t\t\t);\n\t\t}\n\n\t\tif (insertRef !== undefined) {\n\t\t\tconst localRefs = LocalReferenceCollection.setOrGet(insertSegment);\n\t\t\tif (insertRef.before?.empty === false) {\n\t\t\t\tlocalRefs.addBeforeTombstones(insertRef.before.map((n) => n.data));\n\t\t\t}\n\t\t\tif (insertRef.after?.empty === false) {\n\t\t\t\tlocalRefs.addAfterTombstones(insertRef.after.map((n) => n.data));\n\t\t\t}\n\t\t}\n\n\t\tfor (const tg of tracked.trackingCollection.trackingGroups) {\n\t\t\ttg.link(insertSegment);\n\t\t\ttg.unlink(tracked);\n\t\t}\n\t\tconst segment: ISegmentPrivate | undefined = tracked.getSegment();\n\t\tsegment?.localRefs?.removeLocalRef(tracked);\n\t}\n}\n\nfunction revertLocalAnnotate(\n\tdriver: MergeTreeRevertibleDriver,\n\tmergeTreeWithRevert: MergeTreeWithRevert,\n\trevertible: TypedRevertible<typeof MergeTreeDeltaType.ANNOTATE>,\n): void {\n\twhile (revertible.trackingGroup.size > 0) {\n\t\tconst tracked = revertible.trackingGroup.tracked[0];\n\t\tconst unlinked = tracked.trackingCollection.unlink(revertible.trackingGroup);\n\t\tassert(unlinked && isSegmentLeaf(tracked), 0x3f7 /* annotates must track segments */);\n\t\tif (toRemovalInfo(tracked) === undefined) {\n\t\t\tconst start = getPosition(mergeTreeWithRevert, tracked);\n\t\t\tdriver.annotateRange(start, start + tracked.cachedLength, revertible.propertyDeltas);\n\t\t}\n\t}\n}\n\nfunction getPosition(mergeTreeWithRevert: MergeTreeWithRevert, segment: ISegmentLeaf): number {\n\treturn mergeTreeWithRevert.getPosition(segment, mergeTreeWithRevert.localPerspective);\n}\n\n/**\n * Reverts all operations in the list of revertibles.\n *\n * @legacy\n * @alpha\n */\nexport function revertMergeTreeDeltaRevertibles(\n\tdriver: MergeTreeRevertibleDriver,\n\trevertibles: MergeTreeDeltaRevertible[],\n): void {\n\tlet mergeTreeWithRevert: MergeTreeWithRevert | undefined;\n\n\twhile (revertibles.length > 0) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst r = revertibles.pop()!;\n\t\tconst operation = r.operation;\n\t\tif (r.trackingGroup.size > 0) {\n\t\t\tmergeTreeWithRevert ??= findMergeTreeWithRevert(r.trackingGroup.tracked[0]);\n\t\t\tswitch (operation) {\n\t\t\t\tcase MergeTreeDeltaType.INSERT: {\n\t\t\t\t\trevertLocalInsert(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase MergeTreeDeltaType.REMOVE: {\n\t\t\t\t\trevertLocalRemove(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase MergeTreeDeltaType.ANNOTATE: {\n\t\t\t\t\trevertLocalAnnotate(driver, mergeTreeWithRevert, r);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tunreachableCase(operation);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1256,7 +1256,7 @@ function findReplacePerf(filename) {
|
|
|
1256
1256
|
for (let pos = 0; pos < client.getLength();) {
|
|
1257
1257
|
const curSegOff = client.getContainingSegment(pos);
|
|
1258
1258
|
cFetches++;
|
|
1259
|
-
const curSeg = curSegOff
|
|
1259
|
+
const curSeg = curSegOff?.segment;
|
|
1260
1260
|
const textSeg = curSeg;
|
|
1261
1261
|
if (textSeg !== null) {
|
|
1262
1262
|
const text = textSeg.text;
|