@fluidframework/sequence 2.0.0-internal.1.1.3 → 2.0.0-internal.1.2.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/README.md +19 -18
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/intervalCollection.d.ts +5 -5
- package/dist/intervalCollection.d.ts.map +1 -1
- package/dist/intervalCollection.js +8 -12
- package/dist/intervalCollection.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/sequence.d.ts +8 -5
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +7 -4
- package/dist/sequence.js.map +1 -1
- package/dist/sharedIntervalCollection.d.ts +5 -5
- package/dist/sharedIntervalCollection.js +5 -5
- package/dist/sharedIntervalCollection.js.map +1 -1
- package/dist/sharedString.d.ts +2 -2
- package/dist/sharedString.js +2 -2
- package/dist/sharedString.js.map +1 -1
- package/dist/sparsematrix.d.ts +28 -15
- package/dist/sparsematrix.d.ts.map +1 -1
- package/dist/sparsematrix.js +24 -13
- package/dist/sparsematrix.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/intervalCollection.d.ts +5 -5
- package/lib/intervalCollection.d.ts.map +1 -1
- package/lib/intervalCollection.js +8 -12
- package/lib/intervalCollection.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/sequence.d.ts +8 -5
- package/lib/sequence.d.ts.map +1 -1
- package/lib/sequence.js +7 -4
- package/lib/sequence.js.map +1 -1
- package/lib/sharedIntervalCollection.d.ts +5 -5
- package/lib/sharedIntervalCollection.js +5 -5
- package/lib/sharedIntervalCollection.js.map +1 -1
- package/lib/sharedString.d.ts +2 -2
- package/lib/sharedString.js +2 -2
- package/lib/sharedString.js.map +1 -1
- package/lib/sparsematrix.d.ts +28 -15
- package/lib/sparsematrix.d.ts.map +1 -1
- package/lib/sparsematrix.js +24 -13
- package/lib/sparsematrix.js.map +1 -1
- package/package.json +18 -18
- package/src/index.ts +1 -1
- package/src/intervalCollection.ts +10 -11
- package/src/packageVersion.ts +1 -1
- package/src/sequence.ts +8 -5
- package/src/sharedIntervalCollection.ts +5 -5
- package/src/sharedString.ts +2 -2
- package/src/sparsematrix.ts +48 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intervalCollection.js","sourceRoot":"","sources":["../src/intervalCollection.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\n/* eslint-disable no-bitwise */\n\nimport { assert, TypedEventEmitter } from \"@fluidframework/common-utils\";\nimport { IEvent } from \"@fluidframework/common-definitions\";\nimport { UsageError } from \"@fluidframework/container-utils\";\nimport {\n addProperties,\n Client,\n compareReferencePositions,\n ConflictAction,\n createMap,\n ICombiningOp,\n IInterval,\n IntervalConflictResolver,\n IntervalNode,\n IntervalTree,\n ISegment,\n MergeTreeDeltaType,\n minReferencePosition,\n PropertiesManager,\n PropertySet,\n RedBlackTree,\n LocalReferencePosition,\n ReferenceType,\n refTypeIncludesFlag,\n reservedRangeLabelsKey,\n UnassignedSequenceNumber,\n maxReferencePosition,\n createDetachedLocalReferencePosition,\n DetachedReferencePosition,\n} from \"@fluidframework/merge-tree\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { LoggingError } from \"@fluidframework/telemetry-utils\";\nimport { v4 as uuid } from \"uuid\";\nimport {\n IMapMessageLocalMetadata,\n IValueFactory,\n IValueOpEmitter,\n IValueOperation,\n IValueType,\n IValueTypeOperationValue,\n} from \"./defaultMapInterfaces\";\n\nconst reservedIntervalIdKey = \"intervalId\";\n\nexport enum IntervalType {\n Simple = 0x0,\n Nest = 0x1,\n /**\n * SlideOnRemove indicates that the ends of the interval will slide if the segment\n * they reference is removed and acked.\n * See `packages\\dds\\merge-tree\\REFERENCEPOSITIONS.md` for details\n * SlideOnRemove is the default interval behavior and does not need to be specified.\n */\n SlideOnRemove = 0x2, // SlideOnRemove is default behavior - all intervals are SlideOnRemove\n /**\n * @internal\n * A temporary interval, used internally\n */\n Transient = 0x4,\n}\n\nexport interface ISerializedInterval {\n sequenceNumber: number;\n start: number;\n end: number;\n intervalType: IntervalType;\n properties?: PropertySet;\n}\n\n/**\n * A size optimization to avoid redundantly storing keys when serializing intervals\n * as JSON. Intervals are of the format:\n *\n * [start, end, sequenceNumber, intervalType, properties]\n */\nexport type CompressedSerializedInterval = [number, number, number, IntervalType, PropertySet];\n\n/**\n * @internal\n */\nexport interface ISerializedIntervalCollectionV2 {\n label: string;\n version: 2;\n intervals: CompressedSerializedInterval[];\n}\n\n/**\n * Decompress an interval after loading a summary from JSON. The exact format\n * of this compression is unspecified and subject to change\n */\nfunction decompressInterval(interval: CompressedSerializedInterval, label?: string): ISerializedInterval {\n return {\n start: interval[0],\n end: interval[1],\n sequenceNumber: interval[2],\n intervalType: interval[3],\n properties: { ...interval[4], [reservedRangeLabelsKey]: [label] },\n };\n}\n\n/**\n * Compress an interval prior to serialization as JSON. The exact format of this\n * compression is unspecified and subject to change\n */\nfunction compressInterval(interval: ISerializedInterval): CompressedSerializedInterval {\n const { start, end, sequenceNumber, intervalType, properties } = interval;\n\n return [\n start,\n end,\n sequenceNumber,\n intervalType,\n // remove the `referenceRangeLabels` property as it is already stored\n // in the `label` field of the summary\n { ...properties, [reservedRangeLabelsKey]: undefined },\n ];\n}\n\nexport interface ISerializableInterval extends IInterval {\n properties: PropertySet;\n propertyManager: PropertiesManager;\n serialize(client: Client): ISerializedInterval;\n addProperties(props: PropertySet, collaborating?: boolean, seq?: number):\n PropertySet | undefined;\n getIntervalId(): string | undefined;\n}\n\nexport interface IIntervalHelpers<TInterval extends ISerializableInterval> {\n compareEnds(a: TInterval, b: TInterval): number;\n /**\n *\n * @param label - label of the interval collection this interval is being added to. This parameter is\n * irrelevant for transient intervals.\n * @param start - numerical start position of the interval\n * @param end - numberical end position of the interval\n * @param client - client creating the interval\n * @param intervalType - Type of interval to create. Default is SlideOnRemove\n * @param op - If this create came from a remote client, op that created it. Default is undefined (i.e. local)\n * @param fromSnapshot - If this create came from loading a snapshot. Default is false.\n */\n create(\n label: string,\n start: number,\n end: number,\n client: Client,\n intervalType?: IntervalType,\n op?: ISequencedDocumentMessage,\n fromSnapshot?: boolean,\n ): TInterval;\n}\n\nexport class Interval implements ISerializableInterval {\n public properties: PropertySet;\n public auxProps: PropertySet[];\n public propertyManager: PropertiesManager;\n constructor(\n public start: number,\n public end: number,\n props?: PropertySet,\n ) {\n this.propertyManager = new PropertiesManager();\n this.properties = {};\n\n if (props) {\n this.addProperties(props);\n }\n }\n\n public getIntervalId(): string | undefined {\n const id = this.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n return undefined;\n }\n return `${id}`;\n }\n\n public getAdditionalPropertySets() {\n return this.auxProps;\n }\n\n public addPropertySet(props: PropertySet) {\n if (this.auxProps === undefined) {\n this.auxProps = [];\n }\n this.auxProps.push(props);\n }\n\n public serialize(client: Client): ISerializedInterval {\n const seq = client?.getCurrentSeq() ?? 0;\n const serializedInterval: ISerializedInterval = {\n end: this.end,\n intervalType: 0,\n sequenceNumber: seq,\n start: this.start,\n };\n if (this.properties) {\n serializedInterval.properties = this.properties;\n }\n return serializedInterval;\n }\n\n public clone() {\n return new Interval(this.start, this.end, this.properties);\n }\n\n public compare(b: Interval) {\n const startResult = this.compareStart(b);\n if (startResult === 0) {\n const endResult = this.compareEnd(b);\n if (endResult === 0) {\n const thisId = this.getIntervalId();\n if (thisId) {\n const bId = b.getIntervalId();\n if (bId) {\n return thisId > bId ? 1 : thisId < bId ? -1 : 0;\n }\n return 0;\n }\n return 0;\n } else {\n return endResult;\n }\n } else {\n return startResult;\n }\n }\n\n public compareStart(b: Interval) {\n return this.start - b.start;\n }\n\n public compareEnd(b: Interval) {\n return this.end - b.end;\n }\n\n public overlaps(b: Interval) {\n const result = (this.start <= b.end) &&\n (this.end >= b.start);\n return result;\n }\n\n public union(b: Interval) {\n return new Interval(Math.min(this.start, b.start),\n Math.max(this.end, b.end), this.properties);\n }\n\n public getProperties() {\n return this.properties;\n }\n\n public addProperties(\n newProps: PropertySet,\n collaborating: boolean = false,\n seq?: number,\n op?: ICombiningOp,\n ): PropertySet | undefined {\n if (newProps) {\n this.initializeProperties();\n return this.propertyManager.addProperties(this.properties, newProps, op, seq, collaborating);\n }\n }\n\n public modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage) {\n const startPos = start ?? this.start;\n const endPos = end ?? this.end;\n if (this.start === startPos && this.end === endPos) {\n // Return undefined to indicate that no change is necessary.\n return;\n }\n const newInterval = new Interval(startPos, endPos);\n if (this.properties) {\n newInterval.initializeProperties();\n this.propertyManager.copyTo(this.properties, newInterval.properties, newInterval.propertyManager);\n }\n return newInterval;\n }\n\n private initializeProperties(): void {\n if (!this.propertyManager) {\n this.propertyManager = new PropertiesManager();\n }\n if (!this.properties) {\n this.properties = createMap<any>();\n }\n }\n}\n\nexport class SequenceInterval implements ISerializableInterval {\n public properties: PropertySet;\n public propertyManager: PropertiesManager;\n\n constructor(\n private readonly client: Client,\n public start: LocalReferencePosition,\n public end: LocalReferencePosition,\n public intervalType: IntervalType,\n props?: PropertySet,\n ) {\n this.propertyManager = new PropertiesManager();\n this.properties = {};\n\n if (props) {\n this.addProperties(props);\n }\n }\n\n private callbacks?: Record<\"beforePositionChange\" | \"afterPositionChange\", () => void>;\n\n /**\n * @internal\n * Subscribes to position change events on this interval if there are no current listeners.\n */\n public addPositionChangeListeners(beforePositionChange: () => void, afterPositionChange: () => void): void {\n if (this.callbacks === undefined) {\n this.callbacks = {\n beforePositionChange,\n afterPositionChange,\n };\n\n const startCbs = this.start.callbacks ??= {};\n const endCbs = this.end.callbacks ??= {};\n startCbs.beforeSlide = endCbs.beforeSlide = beforePositionChange;\n startCbs.afterSlide = endCbs.afterSlide = afterPositionChange;\n }\n }\n\n /**\n * @internal\n * Removes the currently subscribed position change listeners.\n */\n public removePositionChangeListeners(): void {\n if (this.callbacks) {\n this.callbacks = undefined;\n this.start.callbacks = undefined;\n this.end.callbacks = undefined;\n }\n }\n\n public serialize(client: Client): ISerializedInterval {\n const startPosition = client.localReferencePositionToPosition(this.start);\n const endPosition = client.localReferencePositionToPosition(this.end);\n const serializedInterval: ISerializedInterval = {\n end: endPosition,\n intervalType: this.intervalType,\n sequenceNumber: client.getCurrentSeq(),\n start: startPosition,\n };\n\n if (this.properties) {\n serializedInterval.properties = this.properties;\n }\n\n return serializedInterval;\n }\n\n public clone() {\n return new SequenceInterval(this.client, this.start, this.end, this.intervalType, this.properties);\n }\n\n public compare(b: SequenceInterval) {\n const startResult = this.compareStart(b);\n if (startResult === 0) {\n const endResult = this.compareEnd(b);\n if (endResult === 0) {\n const thisId = this.getIntervalId();\n if (thisId) {\n const bId = b.getIntervalId();\n if (bId) {\n return thisId > bId ? 1 : thisId < bId ? -1 : 0;\n }\n return 0;\n }\n return 0;\n } else {\n return endResult;\n }\n } else {\n return startResult;\n }\n }\n\n public compareStart(b: SequenceInterval) {\n return compareReferencePositions(this.start, b.start);\n }\n\n public compareEnd(b: SequenceInterval) {\n return compareReferencePositions(this.end, b.end);\n }\n\n public overlaps(b: SequenceInterval) {\n const result = (compareReferencePositions(this.start, b.end) <= 0) &&\n (compareReferencePositions(this.end, b.start) >= 0);\n return result;\n }\n\n public getIntervalId(): string | undefined {\n const id = this.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n return undefined;\n }\n return `${id}`;\n }\n\n public union(b: SequenceInterval) {\n return new SequenceInterval(this.client, minReferencePosition(this.start, b.start),\n maxReferencePosition(this.end, b.end), this.intervalType);\n }\n\n public addProperties(\n newProps: PropertySet,\n collab: boolean = false,\n seq?: number,\n op?: ICombiningOp,\n ): PropertySet | undefined {\n this.initializeProperties();\n return this.propertyManager.addProperties(this.properties, newProps, op, seq, collab);\n }\n\n public overlapsPos(bstart: number, bend: number) {\n const startPos = this.client.localReferencePositionToPosition(this.start);\n const endPos = this.client.localReferencePositionToPosition(this.end);\n return (endPos > bstart) && (startPos < bend);\n }\n\n public modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage, localSeq?: number) {\n const getRefType = (baseType: ReferenceType): ReferenceType => {\n let refType = baseType;\n if (op === undefined) {\n refType &= ~ReferenceType.SlideOnRemove;\n refType |= ReferenceType.StayOnRemove;\n }\n return refType;\n };\n\n let startRef = this.start;\n if (start !== undefined) {\n startRef = createPositionReference(\n this.client, start, getRefType(this.start.refType), op, undefined, localSeq,\n );\n startRef.addProperties(this.start.properties);\n }\n\n let endRef = this.end;\n if (end !== undefined) {\n endRef = createPositionReference(\n this.client, end, getRefType(this.end.refType), op, undefined, localSeq,\n );\n endRef.addProperties(this.end.properties);\n }\n\n const newInterval = new SequenceInterval(this.client, startRef, endRef, this.intervalType);\n if (this.properties) {\n newInterval.initializeProperties();\n this.propertyManager.copyTo(this.properties, newInterval.properties, newInterval.propertyManager);\n }\n return newInterval;\n }\n\n private initializeProperties(): void {\n if (!this.propertyManager) {\n this.propertyManager = new PropertiesManager();\n }\n if (!this.properties) {\n this.properties = createMap<any>();\n }\n }\n}\n\nfunction createPositionReferenceFromSegoff(\n client: Client,\n segoff: { segment: ISegment | undefined; offset: number | undefined; },\n refType: ReferenceType,\n op?: ISequencedDocumentMessage): LocalReferencePosition {\n if (segoff.segment) {\n const ref = client.createLocalReferencePosition(segoff.segment, segoff.offset, refType, undefined);\n return ref;\n }\n\n if (!op && !refTypeIncludesFlag(refType, ReferenceType.Transient)) {\n // reference to segment that dne locally\n throw new UsageError(\"Non-transient references need segment\");\n }\n\n return createDetachedLocalReferencePosition(refType);\n}\n\nfunction createPositionReference(\n client: Client,\n pos: number,\n refType: ReferenceType,\n op?: ISequencedDocumentMessage,\n fromSnapshot?: boolean,\n localSeq?: number,\n): LocalReferencePosition {\n let segoff;\n if (op) {\n assert((refType & ReferenceType.SlideOnRemove) !== 0, 0x2f5 /* op create references must be SlideOnRemove */);\n segoff = client.getContainingSegment(pos, op);\n segoff = client.getSlideToSegment(segoff);\n } else {\n assert((refType & ReferenceType.SlideOnRemove) === 0 || fromSnapshot,\n 0x2f6 /* SlideOnRemove references must be op created */);\n segoff = client.getContainingSegment(pos, undefined, localSeq);\n }\n return createPositionReferenceFromSegoff(client, segoff, refType, op);\n}\n\nfunction createSequenceInterval(\n label: string,\n start: number,\n end: number,\n client: Client,\n intervalType?: IntervalType,\n op?: ISequencedDocumentMessage,\n fromSnapshot?: boolean): SequenceInterval {\n let beginRefType = ReferenceType.RangeBegin;\n let endRefType = ReferenceType.RangeEnd;\n if (intervalType === IntervalType.Transient) {\n beginRefType = ReferenceType.Transient;\n endRefType = ReferenceType.Transient;\n } else {\n if (intervalType === IntervalType.Nest) {\n beginRefType = ReferenceType.NestBegin;\n endRefType = ReferenceType.NestEnd;\n }\n // All non-transient interval references must eventually be SlideOnRemove\n // To ensure eventual consistency, they must start as StayOnRemove when\n // pending (created locally and creation op is not acked)\n if (op || fromSnapshot) {\n beginRefType |= ReferenceType.SlideOnRemove;\n endRefType |= ReferenceType.SlideOnRemove;\n } else {\n beginRefType |= ReferenceType.StayOnRemove;\n endRefType |= ReferenceType.StayOnRemove;\n }\n }\n\n const startLref = createPositionReference(client, start, beginRefType, op, fromSnapshot);\n const endLref = createPositionReference(client, end, endRefType, op, fromSnapshot);\n const rangeProp = {\n [reservedRangeLabelsKey]: [label],\n };\n startLref.addProperties(rangeProp);\n endLref.addProperties(rangeProp);\n\n const ival = new SequenceInterval(client, startLref, endLref, intervalType, rangeProp);\n return ival;\n}\n\nexport function defaultIntervalConflictResolver(a: Interval, b: Interval) {\n a.addPropertySet(b.properties);\n return a;\n}\n\nexport function createIntervalIndex(conflict?: IntervalConflictResolver<Interval>) {\n const helpers: IIntervalHelpers<Interval> = {\n compareEnds: compareIntervalEnds,\n create: createInterval,\n };\n const lc = new LocalIntervalCollection<Interval>(undefined, \"\", helpers);\n if (conflict) {\n lc.addConflictResolver(conflict);\n } else {\n lc.addConflictResolver(defaultIntervalConflictResolver);\n }\n return lc;\n}\n\nexport class LocalIntervalCollection<TInterval extends ISerializableInterval> {\n private readonly intervalTree = new IntervalTree<TInterval>();\n private readonly endIntervalTree: RedBlackTree<TInterval, TInterval>;\n private readonly intervalIdMap: Map<string, TInterval> = new Map();\n private conflictResolver: IntervalConflictResolver<TInterval> | undefined;\n private endConflictResolver: ConflictAction<TInterval, TInterval> | undefined;\n\n private static readonly legacyIdPrefix = \"legacy\";\n\n constructor(\n private readonly client: Client,\n private readonly label: string,\n private readonly helpers: IIntervalHelpers<TInterval>,\n /** Callback invoked each time one of the endpoints of an interval slides. */\n private readonly onPositionChange?: (interval: TInterval) => void,\n ) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.endIntervalTree = new RedBlackTree<TInterval, TInterval>(helpers.compareEnds);\n }\n\n public addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>) {\n this.conflictResolver = conflictResolver;\n this.endConflictResolver =\n (key: TInterval, currentKey: TInterval) => {\n const ival = conflictResolver(key, currentKey);\n return {\n data: ival,\n key: ival,\n };\n };\n }\n\n public map(fn: (interval: TInterval) => void) {\n this.intervalTree.map(fn);\n }\n\n public createLegacyId(start: number, end: number): string {\n // Create a non-unique ID based on start and end to be used on intervals that come from legacy clients\n // without ID's.\n return `${LocalIntervalCollection.legacyIdPrefix}${start}-${end}`;\n }\n\n /**\n * Validates that a serialized interval has the ID property. Creates an ID\n * if one does not already exist\n *\n * @param serializedInterval - The interval to be checked\n * @returns The interval's existing or newly created id\n */\n public ensureSerializedId(serializedInterval: ISerializedInterval): string {\n let id: string | undefined = serializedInterval.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n // An interval came over the wire without an ID, so create a non-unique one based on start/end.\n // This will allow all clients to refer to this interval consistently.\n id = this.createLegacyId(serializedInterval.start, serializedInterval.end);\n const newProps = {\n [reservedIntervalIdKey]: id,\n };\n serializedInterval.properties = addProperties(serializedInterval.properties, newProps);\n }\n // Make the ID immutable for safety's sake.\n Object.defineProperty(serializedInterval.properties, reservedIntervalIdKey, {\n configurable: false,\n enumerable: true,\n writable: false,\n });\n\n return id;\n }\n\n public mapUntil(fn: (interval: TInterval) => boolean) {\n this.intervalTree.mapUntil(fn);\n }\n\n public gatherIterationResults(\n results: TInterval[],\n iteratesForward: boolean,\n start?: number,\n end?: number) {\n if (this.intervalTree.intervals.isEmpty()) {\n return;\n }\n\n if (start === undefined && end === undefined) {\n // No start/end provided. Gather the whole tree in the specified order.\n if (iteratesForward) {\n this.intervalTree.map((interval: TInterval) => {\n results.push(interval);\n });\n } else {\n this.intervalTree.mapBackward((interval: TInterval) => {\n results.push(interval);\n });\n }\n } else {\n const transientInterval: TInterval = this.helpers.create(\n \"transient\",\n start,\n end,\n this.client,\n IntervalType.Transient,\n );\n\n if (start === undefined) {\n // Only end position provided. Since the tree is not sorted by end position,\n // walk the whole tree in the specified order, gathering intervals that match the end.\n if (iteratesForward) {\n this.intervalTree.map((interval: TInterval) => {\n if (transientInterval.compareEnd(interval) === 0) {\n results.push(interval);\n }\n });\n } else {\n this.intervalTree.mapBackward((interval: TInterval) => {\n if (transientInterval.compareEnd(interval) === 0) {\n results.push(interval);\n }\n });\n }\n } else {\n // Start and (possibly) end provided. Walk the subtrees that may contain\n // this start position.\n const compareFn =\n end === undefined ?\n (node: IntervalNode<TInterval>) => {\n return transientInterval.compareStart(node.key);\n } :\n (node: IntervalNode<TInterval>) => {\n return transientInterval.compare(node.key);\n };\n const continueLeftFn = (cmpResult: number) => cmpResult <= 0;\n const continueRightFn = (cmpResult: number) => cmpResult >= 0;\n const actionFn = (node: IntervalNode<TInterval>) => {\n results.push(node.key);\n };\n\n if (iteratesForward) {\n this.intervalTree.intervals.walkExactMatchesForward(\n compareFn, actionFn, continueLeftFn, continueRightFn,\n );\n } else {\n this.intervalTree.intervals.walkExactMatchesBackward(\n compareFn, actionFn, continueLeftFn, continueRightFn,\n );\n }\n }\n }\n }\n\n public findOverlappingIntervals(startPosition: number, endPosition: number) {\n if (endPosition < startPosition || this.intervalTree.intervals.isEmpty()) {\n return [];\n }\n const transientInterval =\n this.helpers.create(\n \"transient\",\n startPosition,\n endPosition,\n this.client,\n IntervalType.Transient);\n\n const overlappingIntervalNodes = this.intervalTree.match(transientInterval);\n return overlappingIntervalNodes.map((node) => node.key);\n }\n\n public previousInterval(pos: number) {\n const transientInterval = this.helpers.create(\n \"transient\", pos, pos, this.client, IntervalType.Transient);\n const rbNode = this.endIntervalTree.floor(transientInterval);\n if (rbNode) {\n return rbNode.data;\n }\n }\n\n public nextInterval(pos: number) {\n const transientInterval = this.helpers.create(\n \"transient\", pos, pos, this.client, IntervalType.Transient);\n const rbNode = this.endIntervalTree.ceil(transientInterval);\n if (rbNode) {\n return rbNode.data;\n }\n }\n\n public removeInterval(startPosition: number, endPosition: number) {\n const transientInterval = this.helpers.create(\n \"transient\", startPosition, endPosition, this.client, IntervalType.Transient);\n this.intervalTree.remove(transientInterval);\n this.endIntervalTree.remove(transientInterval);\n return transientInterval;\n }\n\n private removeIntervalFromIndex(interval: TInterval) {\n this.intervalTree.removeExisting(interval);\n this.endIntervalTree.remove(interval);\n\n const id = interval.getIntervalId();\n\n assert(id !== undefined, 0x311 /* expected id to exist on interval */);\n\n this.intervalIdMap.delete(id);\n }\n\n public removeExistingInterval(interval: TInterval) {\n this.removeIntervalFromIndex(interval);\n this.removeIntervalListeners(interval);\n }\n\n public createInterval(\n start: number,\n end: number,\n intervalType: IntervalType,\n op?: ISequencedDocumentMessage): TInterval {\n return this.helpers.create(this.label, start, end, this.client, intervalType, op);\n }\n\n public addInterval(\n start: number,\n end: number,\n intervalType: IntervalType,\n props?: PropertySet,\n op?: ISequencedDocumentMessage) {\n const interval: TInterval = this.createInterval(start, end, intervalType, op);\n if (interval) {\n if (!interval.properties) {\n interval.properties = createMap<any>();\n }\n\n if (props) {\n interval.addProperties(props);\n }\n interval.properties[reservedIntervalIdKey] ??= uuid();\n this.add(interval);\n }\n return interval;\n }\n\n private linkEndpointsToInterval(interval: TInterval): void {\n if (interval instanceof SequenceInterval) {\n interval.start.addProperties({ interval });\n interval.end.addProperties({ interval });\n }\n }\n\n private addIntervalToIndex(interval: TInterval) {\n const id = interval.getIntervalId();\n assert(id !== undefined, 0x2c0 /* \"ID must be created before adding interval to collection\" */);\n // Make the ID immutable.\n Object.defineProperty(interval.properties, reservedIntervalIdKey, {\n configurable: false,\n enumerable: true,\n writable: false,\n });\n this.intervalTree.put(interval, this.conflictResolver);\n this.endIntervalTree.put(interval, interval, this.endConflictResolver);\n this.intervalIdMap.set(id, interval);\n }\n\n public add(interval: TInterval) {\n this.linkEndpointsToInterval(interval);\n this.addIntervalToIndex(interval);\n this.addIntervalListeners(interval);\n }\n\n public getIntervalById(id: string) {\n return this.intervalIdMap.get(id);\n }\n\n public changeInterval(\n interval: TInterval,\n start: number,\n end: number,\n op?: ISequencedDocumentMessage,\n localSeq?: number,\n ) {\n const newInterval = interval.modify(this.label, start, end, op, localSeq) as TInterval | undefined;\n if (newInterval) {\n this.removeExistingInterval(interval);\n this.add(newInterval);\n }\n return newInterval;\n }\n\n public serialize(): ISerializedIntervalCollectionV2 {\n const client = this.client;\n const intervals = this.intervalTree.intervals.keys();\n\n return {\n label: this.label,\n intervals: intervals.map((interval) => compressInterval(interval.serialize(client))),\n version: 2,\n };\n }\n\n private addIntervalListeners(interval: TInterval) {\n if (interval instanceof SequenceInterval) {\n interval.addPositionChangeListeners(\n () => this.removeIntervalFromIndex(interval),\n () => {\n this.addIntervalToIndex(interval);\n this.onPositionChange?.(interval);\n },\n );\n }\n }\n\n private removeIntervalListeners(interval: TInterval) {\n if (interval instanceof SequenceInterval) {\n interval.removePositionChangeListeners();\n }\n }\n}\n\nconst compareSequenceIntervalEnds = (a: SequenceInterval, b: SequenceInterval): number =>\n compareReferencePositions(a.end, b.end);\n\nclass SequenceIntervalCollectionFactory\n implements IValueFactory<IntervalCollection<SequenceInterval>> {\n public load(\n emitter: IValueOpEmitter,\n raw: ISerializedInterval[] | ISerializedIntervalCollectionV2 = [],\n ): IntervalCollection<SequenceInterval> {\n const helpers: IIntervalHelpers<SequenceInterval> = {\n compareEnds: compareSequenceIntervalEnds,\n create: createSequenceInterval,\n };\n return new IntervalCollection<SequenceInterval>(helpers, true, emitter, raw);\n }\n\n public store(value: IntervalCollection<SequenceInterval>): ISerializedIntervalCollectionV2 {\n return value.serializeInternal();\n }\n}\n\nexport class SequenceIntervalCollectionValueType\n implements IValueType<IntervalCollection<SequenceInterval>> {\n public static Name = \"sharedStringIntervalCollection\";\n\n public get name(): string {\n return SequenceIntervalCollectionValueType.Name;\n }\n\n public get factory(): IValueFactory<IntervalCollection<SequenceInterval>> {\n return SequenceIntervalCollectionValueType._factory;\n }\n\n public get ops(): Map<string, IValueOperation<IntervalCollection<SequenceInterval>>> {\n return SequenceIntervalCollectionValueType._ops;\n }\n\n private static readonly _factory: IValueFactory<IntervalCollection<SequenceInterval>> =\n new SequenceIntervalCollectionFactory();\n\n private static readonly _ops = makeOpsMap<SequenceInterval>();\n}\n\nconst compareIntervalEnds = (a: Interval, b: Interval) => a.end - b.end;\n\nfunction createInterval(label: string, start: number, end: number, client: Client): Interval {\n const rangeProp: PropertySet = {};\n\n if (label && label.length > 0) {\n rangeProp[reservedRangeLabelsKey] = [label];\n }\n\n return new Interval(start, end, rangeProp);\n}\n\nclass IntervalCollectionFactory\n implements IValueFactory<IntervalCollection<Interval>> {\n public load(\n emitter: IValueOpEmitter,\n raw: ISerializedInterval[] | ISerializedIntervalCollectionV2 = [],\n ): IntervalCollection<Interval> {\n const helpers: IIntervalHelpers<Interval> = {\n compareEnds: compareIntervalEnds,\n create: createInterval,\n };\n const collection = new IntervalCollection<Interval>(helpers, false, emitter, raw);\n collection.attachGraph(undefined, \"\");\n return collection;\n }\n\n public store(value: IntervalCollection<Interval>): ISerializedIntervalCollectionV2 {\n return value.serializeInternal();\n }\n}\n\nexport class IntervalCollectionValueType\n implements IValueType<IntervalCollection<Interval>> {\n public static Name = \"sharedIntervalCollection\";\n\n public get name(): string {\n return IntervalCollectionValueType.Name;\n }\n\n public get factory(): IValueFactory<IntervalCollection<Interval>> {\n return IntervalCollectionValueType._factory;\n }\n\n public get ops(): Map<string, IValueOperation<IntervalCollection<Interval>>> {\n return IntervalCollectionValueType._ops;\n }\n\n private static readonly _factory: IValueFactory<IntervalCollection<Interval>> =\n new IntervalCollectionFactory();\n private static readonly _ops = makeOpsMap<Interval>();\n}\n\nfunction makeOpsMap<T extends ISerializableInterval>(): Map<string, IValueOperation<IntervalCollection<T>>> {\n const rebase = (\n collection: IntervalCollection<T>,\n op: IValueTypeOperationValue,\n localOpMetadata: IMapMessageLocalMetadata,\n ) => {\n const { localSeq } = localOpMetadata;\n const rebasedValue = collection.rebaseLocalInterval(op.opName, op.value, localSeq);\n const rebasedOp = { ...op, value: rebasedValue };\n return { rebasedOp, rebasedLocalOpMetadata: localOpMetadata };\n };\n\n return new Map<string, IValueOperation<IntervalCollection<T>>>(\n [[\n \"add\",\n {\n process: (collection, params, local, op) => {\n // if params is undefined, the interval was deleted during\n // rebasing\n if (!params) {\n return;\n }\n collection.ackAdd(params, local, op);\n },\n rebase,\n },\n ],\n [\n \"delete\",\n {\n process: (collection, params, local, op) => {\n collection.ackDelete(params, local, op);\n },\n rebase: (collection, op, localOpMetadata) => {\n // Deletion of intervals is based on id, so requires no rebasing.\n return { rebasedOp: op, rebasedLocalOpMetadata: localOpMetadata };\n },\n },\n ],\n [\n \"change\",\n {\n process: (collection, params, local, op) => {\n // if params is undefined, the interval was deleted during\n // rebasing\n if (!params) {\n return;\n }\n collection.ackChange(params, local, op);\n },\n rebase,\n },\n ]]);\n}\n\nexport type DeserializeCallback = (properties: PropertySet) => void;\n\nexport class IntervalCollectionIterator<TInterval extends ISerializableInterval> {\n private readonly results: TInterval[];\n private index: number;\n\n constructor(\n collection: IntervalCollection<TInterval>,\n iteratesForward: boolean = true,\n start?: number,\n end?: number) {\n this.results = [];\n this.index = 0;\n\n collection.gatherIterationResults(this.results, iteratesForward, start, end);\n }\n\n public next() {\n let _value: TInterval | undefined;\n let _done: boolean = true;\n\n if (this.index < this.results.length) {\n _value = this.results[this.index++];\n _done = false;\n }\n\n return {\n value: _value,\n done: _done,\n };\n }\n}\n\nexport interface IIntervalCollectionEvent<TInterval extends ISerializableInterval> extends IEvent {\n /**\n * This event is invoked whenever the properties or endpoints of an interval may have changed.\n * This can happen on:\n * - endpoint modification (local or remote)\n * - ack of an endpoint modification\n * - property change (local or remote)\n * - position change due to segment sliding (will always appear as a local change)\n * The `interval` argument reflects the new values.\n */\n (event: \"changeInterval\",\n listener: (interval: TInterval, local: boolean, op: ISequencedDocumentMessage | undefined) => void);\n (event: \"addInterval\" | \"deleteInterval\",\n listener: (interval: TInterval, local: boolean, op: ISequencedDocumentMessage) => void);\n (event: \"propertyChanged\", listener: (interval: TInterval, propertyArgs: PropertySet) => void);\n}\n\nexport class IntervalCollection<TInterval extends ISerializableInterval>\n extends TypedEventEmitter<IIntervalCollectionEvent<TInterval>> {\n private savedSerializedIntervals?: ISerializedInterval[];\n private localCollection: LocalIntervalCollection<TInterval>;\n private onDeserialize: DeserializeCallback | undefined;\n private client: Client | undefined;\n private readonly pendingChangesStart: Map<string, ISerializedInterval[]> = new Map<string, ISerializedInterval[]>();\n private readonly pendingChangesEnd: Map<string, ISerializedInterval[]> = new Map<string, ISerializedInterval[]>();\n\n public get attached(): boolean {\n return !!this.localCollection;\n }\n\n /** @internal */\n constructor(\n private readonly helpers: IIntervalHelpers<TInterval>,\n private readonly requiresClient: boolean,\n private readonly emitter: IValueOpEmitter,\n serializedIntervals: ISerializedInterval[] | ISerializedIntervalCollectionV2,\n ) {\n super();\n\n if (Array.isArray(serializedIntervals)) {\n this.savedSerializedIntervals = serializedIntervals;\n } else {\n this.savedSerializedIntervals =\n serializedIntervals.intervals.map((i) => decompressInterval(i, serializedIntervals.label));\n }\n }\n\n public attachGraph(client: Client, label: string) {\n if (this.attached) {\n throw new LoggingError(\"Only supports one Sequence attach\");\n }\n\n if ((client === undefined) && (this.requiresClient)) {\n throw new LoggingError(\"Client required for this collection\");\n }\n\n // Instantiate the local interval collection based on the saved intervals\n this.client = client;\n this.localCollection = new LocalIntervalCollection<TInterval>(\n client,\n label,\n this.helpers,\n (interval) => this.emit(\"changeInterval\", interval, true, undefined),\n );\n if (this.savedSerializedIntervals) {\n for (const serializedInterval of this.savedSerializedIntervals) {\n this.localCollection.ensureSerializedId(serializedInterval);\n const { start, end, intervalType, properties } = serializedInterval;\n const interval = this.helpers.create(\n label,\n start,\n end,\n client,\n intervalType,\n undefined,\n true,\n );\n interval.addProperties(properties);\n this.localCollection.add(interval);\n }\n }\n this.savedSerializedIntervals = undefined;\n }\n\n /**\n * Gets the next local sequence number, modifying this client's collab window in doing so.\n */\n private getNextLocalSeq(): number {\n if (this.client) {\n return ++this.client.getCollabWindow().localSeq;\n }\n\n return 0;\n }\n\n public getIntervalById(id: string) {\n if (!this.attached) {\n throw new LoggingError(\"attach must be called before accessing intervals\");\n }\n return this.localCollection.getIntervalById(id);\n }\n\n /**\n * Create a new interval and add it to the collection\n * @param start - interval start position\n * @param end - interval end position\n * @param intervalType - type of the interval. All intervals are SlideOnRemove. Intervals may not be Transient.\n * @param props - properties of the interval\n * @returns - the created interval\n */\n public add(\n start: number,\n end: number,\n intervalType: IntervalType,\n props?: PropertySet,\n ) {\n if (!this.attached) {\n throw new LoggingError(\"attach must be called prior to adding intervals\");\n }\n if (intervalType & IntervalType.Transient) {\n throw new LoggingError(\"Can not add transient intervals\");\n }\n\n const interval: TInterval = this.localCollection.addInterval(start, end, intervalType, props);\n\n if (interval) {\n const serializedInterval = {\n end,\n intervalType,\n properties: interval.properties,\n sequenceNumber: this.client?.getCurrentSeq() ?? 0,\n start,\n };\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n this.emitter.emit(\"add\", undefined, serializedInterval, { localSeq: this.getNextLocalSeq() });\n }\n\n this.emit(\"addInterval\", interval, true, undefined);\n\n return interval;\n }\n\n private deleteExistingInterval(interval: TInterval, local: boolean, op?: ISequencedDocumentMessage) {\n // The given interval is known to exist in the collection.\n this.localCollection.removeExistingInterval(interval);\n\n if (interval) {\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n if (local) {\n this.emitter.emit(\n \"delete\",\n undefined,\n interval.serialize(this.client),\n { localSeq: this.getNextLocalSeq() },\n );\n } else {\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n }\n }\n\n this.emit(\"deleteInterval\", interval, local, op);\n }\n\n public removeIntervalById(id: string) {\n const interval = this.localCollection.getIntervalById(id);\n if (interval) {\n this.deleteExistingInterval(interval, true, undefined);\n }\n return interval;\n }\n\n public changeProperties(id: string, props: PropertySet) {\n if (!this.attached) {\n throw new LoggingError(\"Attach must be called before accessing intervals\");\n }\n if (typeof (id) !== \"string\") {\n throw new LoggingError(\"Change API requires an ID that is a string\");\n }\n if (!props) {\n throw new LoggingError(\"changeProperties should be called with a property set\");\n }\n\n const interval = this.getIntervalById(id);\n if (interval) {\n // Pass Unassigned as the sequence number to indicate that this is a local op that is waiting for an ack.\n const deltaProps = interval.addProperties(props, true, UnassignedSequenceNumber);\n const serializedInterval: ISerializedInterval = interval.serialize(this.client);\n\n // Emit a change op that will only change properties. Add the ID to\n // the property bag provided by the caller.\n serializedInterval.start = undefined as any;\n serializedInterval.end = undefined as any;\n\n serializedInterval.properties = props;\n serializedInterval.properties[reservedIntervalIdKey] = interval.getIntervalId();\n this.emitter.emit(\"change\", undefined, serializedInterval, { localSeq: this.getNextLocalSeq() });\n this.emit(\"propertyChanged\", interval, deltaProps);\n }\n this.emit(\"changeInterval\", interval, true, undefined);\n }\n\n public change(id: string, start?: number, end?: number): TInterval | undefined {\n if (!this.attached) {\n throw new LoggingError(\"Attach must be called before accessing intervals\");\n }\n\n // Force id to be a string.\n if (typeof (id) !== \"string\") {\n throw new LoggingError(\"Change API requires an ID that is a string\");\n }\n\n const interval = this.getIntervalById(id);\n if (interval) {\n const newInterval = this.localCollection.changeInterval(interval, start, end);\n const serializedInterval: ISerializedInterval = interval.serialize(this.client);\n serializedInterval.start = start;\n serializedInterval.end = end;\n // Emit a property bag containing only the ID, as we don't intend for this op to change any properties.\n serializedInterval.properties =\n {\n [reservedIntervalIdKey]: interval.getIntervalId(),\n };\n this.emitter.emit(\"change\", undefined, serializedInterval, { localSeq: this.getNextLocalSeq() });\n this.addPendingChange(id, serializedInterval);\n this.emit(\"changeInterval\", newInterval, true, undefined);\n return newInterval;\n }\n // No interval to change\n return undefined;\n }\n\n private addPendingChange(id: string, serializedInterval: ISerializedInterval) {\n if (serializedInterval.start !== undefined) {\n this.addPendingChangeHelper(id, this.pendingChangesStart, serializedInterval);\n }\n if (serializedInterval.end !== undefined) {\n this.addPendingChangeHelper(id, this.pendingChangesEnd, serializedInterval);\n }\n }\n\n private addPendingChangeHelper(\n id: string,\n pendingChanges: Map<string, ISerializedInterval[]>,\n serializedInterval: ISerializedInterval,\n ) {\n let entries: ISerializedInterval[] | undefined = pendingChanges.get(id);\n if (!entries) {\n entries = [];\n pendingChanges.set(id, entries);\n }\n entries.push(serializedInterval);\n }\n\n private removePendingChange(serializedInterval: ISerializedInterval) {\n // Change ops always have an ID.\n const id: string = serializedInterval.properties?.[reservedIntervalIdKey];\n if (serializedInterval.start !== undefined) {\n this.removePendingChangeHelper(id, this.pendingChangesStart, serializedInterval);\n }\n if (serializedInterval.end !== undefined) {\n this.removePendingChangeHelper(id, this.pendingChangesEnd, serializedInterval);\n }\n }\n\n private removePendingChangeHelper(\n id: string,\n pendingChanges: Map<string, ISerializedInterval[]>,\n serializedInterval: ISerializedInterval,\n ) {\n const entries = pendingChanges.get(id);\n if (entries) {\n const pendingChange = entries.shift();\n if (entries.length === 0) {\n pendingChanges.delete(id);\n }\n if (pendingChange?.start !== serializedInterval.start ||\n pendingChange?.end !== serializedInterval.end) {\n throw new LoggingError(\"Mismatch in pending changes\");\n }\n }\n }\n\n private hasPendingChangeStart(id: string) {\n const entries = this.pendingChangesStart.get(id);\n return entries && entries.length !== 0;\n }\n\n private hasPendingChangeEnd(id: string) {\n const entries = this.pendingChangesEnd.get(id);\n return entries && entries.length !== 0;\n }\n\n /** @internal */\n public ackChange(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage) {\n if (!this.attached) {\n throw new LoggingError(\"Attach must be called before accessing intervals\");\n }\n\n let interval: TInterval | undefined;\n\n if (local) {\n // This is an ack from the server. Remove the pending change.\n this.removePendingChange(serializedInterval);\n const id: string = serializedInterval.properties?.[reservedIntervalIdKey];\n interval = this.getIntervalById(id);\n if (interval) {\n // Let the propertyManager prune its pending change-properties set.\n interval.propertyManager?.ackPendingProperties(\n {\n type: MergeTreeDeltaType.ANNOTATE,\n props: serializedInterval.properties ?? {},\n });\n\n this.ackInterval(interval, op);\n }\n } else {\n // If there are pending changes with this ID, don't apply the remote start/end change, as the local ack\n // should be the winning change.\n // Note that the ID is in the property bag only to allow us to find the interval.\n // This API cannot change the ID, and writing to the ID property will result in an exception. So we\n // strip it out of the properties here.\n const { [reservedIntervalIdKey]: id, ...newProps } = serializedInterval.properties;\n interval = this.getIntervalById(id);\n if (interval) {\n let start: number | undefined;\n let end: number | undefined;\n // Track pending start/end independently of one another.\n if (!this.hasPendingChangeStart(id)) {\n start = serializedInterval.start;\n }\n if (!this.hasPendingChangeEnd(id)) {\n end = serializedInterval.end;\n }\n if (start !== undefined || end !== undefined) {\n // If changeInterval gives us a new interval, work with that one. Otherwise keep working with\n // the one we originally found in the tree.\n interval = this.localCollection.changeInterval(interval, start, end, op) ?? interval;\n }\n const deltaProps = interval.addProperties(newProps, true, op.sequenceNumber);\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n this.emit(\"propertyChanged\", interval, deltaProps);\n }\n }\n if (interval) {\n this.emit(\"changeInterval\", interval, local, op);\n }\n }\n\n public addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>): void {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n this.localCollection.addConflictResolver(conflictResolver);\n }\n\n public attachDeserializer(onDeserialize: DeserializeCallback): void {\n // If no deserializer is specified can skip all processing work\n if (!onDeserialize) {\n return;\n }\n\n // Start by storing the callbacks so that any subsequent modifications make use of them\n this.onDeserialize = onDeserialize;\n\n // Trigger the async prepare work across all values in the collection\n this.localCollection.map((interval) => {\n onDeserialize(interval);\n });\n }\n\n /**\n * @internal\n *\n * Returns new interval after rebasing. If undefined, the interval was\n * deleted as a result of rebasing. This can occur if the interval applies\n * to a range that no longer exists, and the interval was unable to slide.\n */\n public rebaseLocalInterval(\n opName: string,\n serializedInterval: ISerializedInterval,\n localSeq: number,\n ): ISerializedInterval | undefined {\n if (!this.client) {\n // If there's no associated mergeTree client, the originally submitted op is still correct.\n return serializedInterval;\n }\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n const { start, end, intervalType, properties, sequenceNumber } = serializedInterval;\n const startRebased = start === undefined ? undefined :\n this.client.rebasePosition(start, sequenceNumber, localSeq);\n const endRebased = end === undefined ? undefined :\n this.client.rebasePosition(end, sequenceNumber, localSeq);\n\n const intervalId = properties?.[reservedIntervalIdKey];\n const localInterval = this.localCollection.getIntervalById(intervalId);\n\n const rebased: ISerializedInterval = {\n start: startRebased,\n end: endRebased,\n intervalType,\n sequenceNumber: this.client?.getCurrentSeq() ?? 0,\n properties,\n };\n\n if (opName === \"change\" && (this.hasPendingChangeStart(intervalId) || this.hasPendingChangeEnd(intervalId))) {\n this.removePendingChange(serializedInterval);\n this.addPendingChange(intervalId, rebased);\n }\n\n // if the interval slid off the string, rebase the op to be a noop and\n // delete the interval\n if (startRebased === DetachedReferencePosition || endRebased === DetachedReferencePosition) {\n if (localInterval) {\n this.localCollection.removeExistingInterval(localInterval);\n }\n return undefined;\n }\n\n if (!localInterval) {\n return rebased;\n }\n\n // we know we must be using `SequenceInterval` because `this.client` exists\n assert(\n localInterval instanceof SequenceInterval,\n 0x3a0 /* localInterval must be `SequenceInterval` when used with client */,\n );\n\n const startSegment = this.getSlideToSegment(localInterval.start);\n const endSegment = this.getSlideToSegment(localInterval.end);\n\n // we need to slide because the reference has been removed\n if (startSegment || endSegment) {\n const newStart =\n startSegment && this.client.getPosition(startSegment.segment, localSeq) + startSegment.offset;\n const newEnd =\n endSegment && this.client.getPosition(endSegment.segment, localSeq) + endSegment.offset;\n\n this.localCollection.changeInterval(localInterval, newStart, newEnd, undefined, localSeq);\n }\n\n return rebased;\n }\n\n private getSlideToSegment(lref: LocalReferencePosition) {\n const segoff = { segment: lref.getSegment(), offset: lref.getOffset() };\n const newSegoff = this.client.getSlideToSegment(segoff);\n const value: { segment: ISegment | undefined; offset: number | undefined; } | undefined\n = (segoff.segment === newSegoff.segment && segoff.offset === newSegoff.offset) ? undefined : newSegoff;\n return value;\n }\n\n private setSlideOnRemove(lref: LocalReferencePosition) {\n let refType = lref.refType;\n refType = refType & ~ReferenceType.StayOnRemove;\n refType = refType | ReferenceType.SlideOnRemove;\n lref.refType = refType;\n }\n\n private ackInterval(interval: TInterval, op: ISequencedDocumentMessage) {\n // Only SequenceIntervals need potential sliding\n if (!(interval instanceof SequenceInterval)) {\n return;\n }\n\n if (!refTypeIncludesFlag(interval.start, ReferenceType.StayOnRemove) &&\n !refTypeIncludesFlag(interval.end, ReferenceType.StayOnRemove)) {\n return;\n }\n\n const newStart = this.getSlideToSegment(interval.start);\n const newEnd = this.getSlideToSegment(interval.end);\n\n const id = interval.properties[reservedIntervalIdKey];\n const hasPendingStartChange = this.hasPendingChangeStart(id);\n const hasPendingEndChange = this.hasPendingChangeEnd(id);\n\n if (!hasPendingStartChange) {\n this.setSlideOnRemove(interval.start);\n }\n\n if (!hasPendingEndChange) {\n this.setSlideOnRemove(interval.end);\n }\n\n const needsStartUpdate = newStart !== undefined && !hasPendingStartChange;\n const needsEndUpdate = newEnd !== undefined && !hasPendingEndChange;\n\n if (needsStartUpdate || needsEndUpdate) {\n // In this case, where we change the start or end of an interval,\n // it is necessary to remove and re-add the interval listeners.\n // This ensures that the correct listeners are added to the LocalReferencePosition.\n this.localCollection.removeExistingInterval(interval);\n\n if (needsStartUpdate) {\n const props = interval.start.properties;\n this.client.removeLocalReferencePosition(interval.start);\n interval.start = createPositionReferenceFromSegoff(this.client, newStart, interval.start.refType, op);\n if (props) {\n interval.start.addProperties(props);\n }\n }\n if (needsEndUpdate) {\n const props = interval.end.properties;\n this.client.removeLocalReferencePosition(interval.end);\n interval.end = createPositionReferenceFromSegoff(this.client, newEnd, interval.end.refType, op);\n if (props) {\n interval.end.addProperties(props);\n }\n }\n this.localCollection.add(interval);\n }\n }\n\n /** @internal */\n public ackAdd(\n serializedInterval: ISerializedInterval,\n local: boolean,\n op: ISequencedDocumentMessage) {\n if (local) {\n const id: string = serializedInterval.properties?.[reservedIntervalIdKey];\n const localInterval = this.getIntervalById(id);\n if (localInterval) {\n this.ackInterval(localInterval, op);\n }\n return;\n }\n\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n this.localCollection.ensureSerializedId(serializedInterval);\n\n const interval: TInterval = this.localCollection.addInterval(\n serializedInterval.start,\n serializedInterval.end,\n serializedInterval.intervalType,\n serializedInterval.properties,\n op);\n\n if (interval) {\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n }\n\n this.emit(\"addInterval\", interval, local, op);\n\n return interval;\n }\n\n /** @internal */\n public ackDelete(\n serializedInterval: ISerializedInterval,\n local: boolean,\n op: ISequencedDocumentMessage): void {\n if (local) {\n // Local ops were applied when the message was created and there's no \"pending delete\"\n // state to bookkeep: remote operation application takes into account possibility of\n // locally deleted interval whenever a lookup happens.\n return;\n }\n\n if (!this.attached) {\n throw new LoggingError(\"attach must be called prior to deleting intervals\");\n }\n\n const id = this.localCollection.ensureSerializedId(serializedInterval);\n const interval = this.localCollection.getIntervalById(id);\n if (interval) {\n this.deleteExistingInterval(interval, local, op);\n }\n }\n\n /**\n * @internal\n */\n public serializeInternal(): ISerializedIntervalCollectionV2 {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n return this.localCollection.serialize();\n }\n\n public [Symbol.iterator](): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this);\n return iterator;\n }\n\n public CreateForwardIteratorWithStartPosition(startPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, true, startPosition);\n return iterator;\n }\n\n public CreateBackwardIteratorWithStartPosition(startPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, false, startPosition);\n return iterator;\n }\n\n public CreateForwardIteratorWithEndPosition(endPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, true, undefined, endPosition);\n return iterator;\n }\n\n public CreateBackwardIteratorWithEndPosition(endPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, false, undefined, endPosition);\n return iterator;\n }\n\n public gatherIterationResults(\n results: TInterval[],\n iteratesForward: boolean,\n start?: number,\n end?: number) {\n if (!this.attached) {\n return;\n }\n\n this.localCollection.gatherIterationResults(results, iteratesForward, start, end);\n }\n\n public findOverlappingIntervals(startPosition: number, endPosition: number): TInterval[] {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n return this.localCollection.findOverlappingIntervals(startPosition, endPosition);\n }\n\n public map(fn: (interval: TInterval) => void) {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n this.localCollection.map(fn);\n }\n\n public previousInterval(pos: number): TInterval {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n return this.localCollection.previousInterval(pos);\n }\n\n public nextInterval(pos: number): TInterval {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n return this.localCollection.nextInterval(pos);\n }\n}\n\n/**\n * Information that identifies an interval within a `Sequence`.\n */\nexport interface IntervalLocator {\n /**\n * Label for the collection the interval is a part of\n */\n label: string;\n /**\n * Interval within that collection\n */\n interval: SequenceInterval;\n}\n\n/**\n * Returns an object that can be used to find the interval a given LocalReferencePosition belongs to.\n * @returns undefined if the reference position is not the endpoint of any interval (e.g. it was created\n * on the merge tree directly by app code), otherwise an {@link IntervalLocator} for the interval this\n * endpoint is a part of.\n */\nexport function intervalLocatorFromEndpoint(potentialEndpoint: LocalReferencePosition): IntervalLocator | undefined {\n const {\n interval,\n [reservedRangeLabelsKey]: collectionNameArray,\n } = potentialEndpoint.properties ?? {};\n return (interval && collectionNameArray?.length === 1) ? { label: collectionNameArray[0], interval } : undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"intervalCollection.js","sourceRoot":"","sources":["../src/intervalCollection.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\n/* eslint-disable no-bitwise */\n\nimport { assert, TypedEventEmitter } from \"@fluidframework/common-utils\";\nimport { IEvent } from \"@fluidframework/common-definitions\";\nimport { UsageError } from \"@fluidframework/container-utils\";\nimport {\n addProperties,\n Client,\n compareReferencePositions,\n ConflictAction,\n createMap,\n ICombiningOp,\n IInterval,\n IntervalConflictResolver,\n IntervalNode,\n IntervalTree,\n ISegment,\n MergeTreeDeltaType,\n minReferencePosition,\n PropertiesManager,\n PropertySet,\n RedBlackTree,\n LocalReferencePosition,\n ReferenceType,\n refTypeIncludesFlag,\n reservedRangeLabelsKey,\n UnassignedSequenceNumber,\n maxReferencePosition,\n createDetachedLocalReferencePosition,\n DetachedReferencePosition,\n} from \"@fluidframework/merge-tree\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { LoggingError } from \"@fluidframework/telemetry-utils\";\nimport { v4 as uuid } from \"uuid\";\nimport {\n IMapMessageLocalMetadata,\n IValueFactory,\n IValueOpEmitter,\n IValueOperation,\n IValueType,\n IValueTypeOperationValue,\n} from \"./defaultMapInterfaces\";\n\nconst reservedIntervalIdKey = \"intervalId\";\n\nexport enum IntervalType {\n Simple = 0x0,\n Nest = 0x1,\n\n /**\n * SlideOnRemove indicates that the ends of the interval will slide if the segment\n * they reference is removed and acked.\n * See `packages\\dds\\merge-tree\\REFERENCEPOSITIONS.md` for details\n * SlideOnRemove is the default interval behavior and does not need to be specified.\n */\n SlideOnRemove = 0x2, // SlideOnRemove is default behavior - all intervals are SlideOnRemove\n\n /**\n * A temporary interval, used internally\n * @internal\n */\n Transient = 0x4,\n}\n\nexport interface ISerializedInterval {\n sequenceNumber: number;\n start: number;\n end: number;\n intervalType: IntervalType;\n properties?: PropertySet;\n}\n\n/**\n * A size optimization to avoid redundantly storing keys when serializing intervals\n * as JSON. Intervals are of the format:\n *\n * [start, end, sequenceNumber, intervalType, properties]\n */\nexport type CompressedSerializedInterval = [number, number, number, IntervalType, PropertySet];\n\n/**\n * @internal\n */\nexport interface ISerializedIntervalCollectionV2 {\n label: string;\n version: 2;\n intervals: CompressedSerializedInterval[];\n}\n\n/**\n * Decompress an interval after loading a summary from JSON. The exact format\n * of this compression is unspecified and subject to change\n */\nfunction decompressInterval(interval: CompressedSerializedInterval, label?: string): ISerializedInterval {\n return {\n start: interval[0],\n end: interval[1],\n sequenceNumber: interval[2],\n intervalType: interval[3],\n properties: { ...interval[4], [reservedRangeLabelsKey]: [label] },\n };\n}\n\n/**\n * Compress an interval prior to serialization as JSON. The exact format of this\n * compression is unspecified and subject to change\n */\nfunction compressInterval(interval: ISerializedInterval): CompressedSerializedInterval {\n const { start, end, sequenceNumber, intervalType, properties } = interval;\n\n return [\n start,\n end,\n sequenceNumber,\n intervalType,\n // remove the `referenceRangeLabels` property as it is already stored\n // in the `label` field of the summary\n { ...properties, [reservedRangeLabelsKey]: undefined },\n ];\n}\n\nexport interface ISerializableInterval extends IInterval {\n properties: PropertySet;\n propertyManager: PropertiesManager;\n serialize(client: Client): ISerializedInterval;\n addProperties(props: PropertySet, collaborating?: boolean, seq?: number):\n PropertySet | undefined;\n getIntervalId(): string | undefined;\n}\n\nexport interface IIntervalHelpers<TInterval extends ISerializableInterval> {\n compareEnds(a: TInterval, b: TInterval): number;\n /**\n *\n * @param label - label of the interval collection this interval is being added to. This parameter is\n * irrelevant for transient intervals.\n * @param start - numerical start position of the interval\n * @param end - numberical end position of the interval\n * @param client - client creating the interval\n * @param intervalType - Type of interval to create. Default is SlideOnRemove\n * @param op - If this create came from a remote client, op that created it. Default is undefined (i.e. local)\n * @param fromSnapshot - If this create came from loading a snapshot. Default is false.\n */\n create(\n label: string,\n start: number,\n end: number,\n client: Client,\n intervalType?: IntervalType,\n op?: ISequencedDocumentMessage,\n fromSnapshot?: boolean,\n ): TInterval;\n}\n\nexport class Interval implements ISerializableInterval {\n public properties: PropertySet;\n public auxProps: PropertySet[];\n public propertyManager: PropertiesManager;\n constructor(\n public start: number,\n public end: number,\n props?: PropertySet,\n ) {\n this.propertyManager = new PropertiesManager();\n this.properties = {};\n\n if (props) {\n this.addProperties(props);\n }\n }\n\n public getIntervalId(): string | undefined {\n const id = this.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n return undefined;\n }\n return `${id}`;\n }\n\n public getAdditionalPropertySets() {\n return this.auxProps;\n }\n\n public addPropertySet(props: PropertySet) {\n if (this.auxProps === undefined) {\n this.auxProps = [];\n }\n this.auxProps.push(props);\n }\n\n public serialize(client: Client): ISerializedInterval {\n const seq = client?.getCurrentSeq() ?? 0;\n const serializedInterval: ISerializedInterval = {\n end: this.end,\n intervalType: 0,\n sequenceNumber: seq,\n start: this.start,\n };\n if (this.properties) {\n serializedInterval.properties = this.properties;\n }\n return serializedInterval;\n }\n\n public clone() {\n return new Interval(this.start, this.end, this.properties);\n }\n\n public compare(b: Interval) {\n const startResult = this.compareStart(b);\n if (startResult === 0) {\n const endResult = this.compareEnd(b);\n if (endResult === 0) {\n const thisId = this.getIntervalId();\n if (thisId) {\n const bId = b.getIntervalId();\n if (bId) {\n return thisId > bId ? 1 : thisId < bId ? -1 : 0;\n }\n return 0;\n }\n return 0;\n } else {\n return endResult;\n }\n } else {\n return startResult;\n }\n }\n\n public compareStart(b: Interval) {\n return this.start - b.start;\n }\n\n public compareEnd(b: Interval) {\n return this.end - b.end;\n }\n\n public overlaps(b: Interval) {\n const result = (this.start <= b.end) &&\n (this.end >= b.start);\n return result;\n }\n\n public union(b: Interval) {\n return new Interval(Math.min(this.start, b.start),\n Math.max(this.end, b.end), this.properties);\n }\n\n public getProperties() {\n return this.properties;\n }\n\n public addProperties(\n newProps: PropertySet,\n collaborating: boolean = false,\n seq?: number,\n op?: ICombiningOp,\n ): PropertySet | undefined {\n if (newProps) {\n this.initializeProperties();\n return this.propertyManager.addProperties(this.properties, newProps, op, seq, collaborating);\n }\n }\n\n public modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage) {\n const startPos = start ?? this.start;\n const endPos = end ?? this.end;\n if (this.start === startPos && this.end === endPos) {\n // Return undefined to indicate that no change is necessary.\n return;\n }\n const newInterval = new Interval(startPos, endPos);\n if (this.properties) {\n newInterval.initializeProperties();\n this.propertyManager.copyTo(this.properties, newInterval.properties, newInterval.propertyManager);\n }\n return newInterval;\n }\n\n private initializeProperties(): void {\n if (!this.propertyManager) {\n this.propertyManager = new PropertiesManager();\n }\n if (!this.properties) {\n this.properties = createMap<any>();\n }\n }\n}\n\nexport class SequenceInterval implements ISerializableInterval {\n public properties: PropertySet;\n public propertyManager: PropertiesManager;\n\n constructor(\n private readonly client: Client,\n public start: LocalReferencePosition,\n public end: LocalReferencePosition,\n public intervalType: IntervalType,\n props?: PropertySet,\n ) {\n this.propertyManager = new PropertiesManager();\n this.properties = {};\n\n if (props) {\n this.addProperties(props);\n }\n }\n\n private callbacks?: Record<\"beforePositionChange\" | \"afterPositionChange\", () => void>;\n\n /**\n * Subscribes to position change events on this interval if there are no current listeners.\n * @internal\n */\n public addPositionChangeListeners(beforePositionChange: () => void, afterPositionChange: () => void): void {\n if (this.callbacks === undefined) {\n this.callbacks = {\n beforePositionChange,\n afterPositionChange,\n };\n\n const startCbs = this.start.callbacks ??= {};\n const endCbs = this.end.callbacks ??= {};\n startCbs.beforeSlide = endCbs.beforeSlide = beforePositionChange;\n startCbs.afterSlide = endCbs.afterSlide = afterPositionChange;\n }\n }\n\n /**\n * Removes the currently subscribed position change listeners.\n * @internal\n */\n public removePositionChangeListeners(): void {\n if (this.callbacks) {\n this.callbacks = undefined;\n this.start.callbacks = undefined;\n this.end.callbacks = undefined;\n }\n }\n\n public serialize(client: Client): ISerializedInterval {\n const startPosition = client.localReferencePositionToPosition(this.start);\n const endPosition = client.localReferencePositionToPosition(this.end);\n const serializedInterval: ISerializedInterval = {\n end: endPosition,\n intervalType: this.intervalType,\n sequenceNumber: client.getCurrentSeq(),\n start: startPosition,\n };\n\n if (this.properties) {\n serializedInterval.properties = this.properties;\n }\n\n return serializedInterval;\n }\n\n public clone() {\n return new SequenceInterval(this.client, this.start, this.end, this.intervalType, this.properties);\n }\n\n public compare(b: SequenceInterval) {\n const startResult = this.compareStart(b);\n if (startResult === 0) {\n const endResult = this.compareEnd(b);\n if (endResult === 0) {\n const thisId = this.getIntervalId();\n if (thisId) {\n const bId = b.getIntervalId();\n if (bId) {\n return thisId > bId ? 1 : thisId < bId ? -1 : 0;\n }\n return 0;\n }\n return 0;\n } else {\n return endResult;\n }\n } else {\n return startResult;\n }\n }\n\n public compareStart(b: SequenceInterval) {\n return compareReferencePositions(this.start, b.start);\n }\n\n public compareEnd(b: SequenceInterval) {\n return compareReferencePositions(this.end, b.end);\n }\n\n public overlaps(b: SequenceInterval) {\n const result = (compareReferencePositions(this.start, b.end) <= 0) &&\n (compareReferencePositions(this.end, b.start) >= 0);\n return result;\n }\n\n public getIntervalId(): string | undefined {\n const id = this.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n return undefined;\n }\n return `${id}`;\n }\n\n public union(b: SequenceInterval) {\n return new SequenceInterval(this.client, minReferencePosition(this.start, b.start),\n maxReferencePosition(this.end, b.end), this.intervalType);\n }\n\n public addProperties(\n newProps: PropertySet,\n collab: boolean = false,\n seq?: number,\n op?: ICombiningOp,\n ): PropertySet | undefined {\n this.initializeProperties();\n return this.propertyManager.addProperties(this.properties, newProps, op, seq, collab);\n }\n\n public overlapsPos(bstart: number, bend: number) {\n const startPos = this.client.localReferencePositionToPosition(this.start);\n const endPos = this.client.localReferencePositionToPosition(this.end);\n return (endPos > bstart) && (startPos < bend);\n }\n\n public modify(label: string, start: number, end: number, op?: ISequencedDocumentMessage, localSeq?: number) {\n const getRefType = (baseType: ReferenceType): ReferenceType => {\n let refType = baseType;\n if (op === undefined) {\n refType &= ~ReferenceType.SlideOnRemove;\n refType |= ReferenceType.StayOnRemove;\n }\n return refType;\n };\n\n let startRef = this.start;\n if (start !== undefined) {\n startRef = createPositionReference(\n this.client, start, getRefType(this.start.refType), op, undefined, localSeq,\n );\n startRef.addProperties(this.start.properties);\n }\n\n let endRef = this.end;\n if (end !== undefined) {\n endRef = createPositionReference(\n this.client, end, getRefType(this.end.refType), op, undefined, localSeq,\n );\n endRef.addProperties(this.end.properties);\n }\n\n const newInterval = new SequenceInterval(this.client, startRef, endRef, this.intervalType);\n if (this.properties) {\n newInterval.initializeProperties();\n this.propertyManager.copyTo(this.properties, newInterval.properties, newInterval.propertyManager);\n }\n return newInterval;\n }\n\n private initializeProperties(): void {\n if (!this.propertyManager) {\n this.propertyManager = new PropertiesManager();\n }\n if (!this.properties) {\n this.properties = createMap<any>();\n }\n }\n}\n\nfunction createPositionReferenceFromSegoff(\n client: Client,\n segoff: { segment: ISegment | undefined; offset: number | undefined; },\n refType: ReferenceType,\n op?: ISequencedDocumentMessage): LocalReferencePosition {\n if (segoff.segment) {\n const ref = client.createLocalReferencePosition(segoff.segment, segoff.offset, refType, undefined);\n return ref;\n }\n\n if (!op && !refTypeIncludesFlag(refType, ReferenceType.Transient)) {\n // reference to segment that dne locally\n throw new UsageError(\"Non-transient references need segment\");\n }\n\n return createDetachedLocalReferencePosition(refType);\n}\n\nfunction createPositionReference(\n client: Client,\n pos: number,\n refType: ReferenceType,\n op?: ISequencedDocumentMessage,\n fromSnapshot?: boolean,\n localSeq?: number,\n): LocalReferencePosition {\n let segoff;\n if (op) {\n assert((refType & ReferenceType.SlideOnRemove) !== 0, 0x2f5 /* op create references must be SlideOnRemove */);\n segoff = client.getContainingSegment(pos, op);\n segoff = client.getSlideToSegment(segoff);\n } else {\n assert((refType & ReferenceType.SlideOnRemove) === 0 || fromSnapshot,\n 0x2f6 /* SlideOnRemove references must be op created */);\n segoff = client.getContainingSegment(pos, undefined, localSeq);\n }\n return createPositionReferenceFromSegoff(client, segoff, refType, op);\n}\n\nfunction createSequenceInterval(\n label: string,\n start: number,\n end: number,\n client: Client,\n intervalType?: IntervalType,\n op?: ISequencedDocumentMessage,\n fromSnapshot?: boolean): SequenceInterval {\n let beginRefType = ReferenceType.RangeBegin;\n let endRefType = ReferenceType.RangeEnd;\n if (intervalType === IntervalType.Transient) {\n beginRefType = ReferenceType.Transient;\n endRefType = ReferenceType.Transient;\n } else {\n if (intervalType === IntervalType.Nest) {\n beginRefType = ReferenceType.NestBegin;\n endRefType = ReferenceType.NestEnd;\n }\n // All non-transient interval references must eventually be SlideOnRemove\n // To ensure eventual consistency, they must start as StayOnRemove when\n // pending (created locally and creation op is not acked)\n if (op || fromSnapshot) {\n beginRefType |= ReferenceType.SlideOnRemove;\n endRefType |= ReferenceType.SlideOnRemove;\n } else {\n beginRefType |= ReferenceType.StayOnRemove;\n endRefType |= ReferenceType.StayOnRemove;\n }\n }\n\n const startLref = createPositionReference(client, start, beginRefType, op, fromSnapshot);\n const endLref = createPositionReference(client, end, endRefType, op, fromSnapshot);\n const rangeProp = {\n [reservedRangeLabelsKey]: [label],\n };\n startLref.addProperties(rangeProp);\n endLref.addProperties(rangeProp);\n\n const ival = new SequenceInterval(client, startLref, endLref, intervalType, rangeProp);\n return ival;\n}\n\nexport function defaultIntervalConflictResolver(a: Interval, b: Interval) {\n a.addPropertySet(b.properties);\n return a;\n}\n\nexport function createIntervalIndex(conflict?: IntervalConflictResolver<Interval>) {\n const helpers: IIntervalHelpers<Interval> = {\n compareEnds: compareIntervalEnds,\n create: createInterval,\n };\n const lc = new LocalIntervalCollection<Interval>(undefined, \"\", helpers);\n if (conflict) {\n lc.addConflictResolver(conflict);\n } else {\n lc.addConflictResolver(defaultIntervalConflictResolver);\n }\n return lc;\n}\n\nexport class LocalIntervalCollection<TInterval extends ISerializableInterval> {\n private readonly intervalTree = new IntervalTree<TInterval>();\n private readonly endIntervalTree: RedBlackTree<TInterval, TInterval>;\n private readonly intervalIdMap: Map<string, TInterval> = new Map();\n private conflictResolver: IntervalConflictResolver<TInterval> | undefined;\n private endConflictResolver: ConflictAction<TInterval, TInterval> | undefined;\n\n private static readonly legacyIdPrefix = \"legacy\";\n\n constructor(\n private readonly client: Client,\n private readonly label: string,\n private readonly helpers: IIntervalHelpers<TInterval>,\n /** Callback invoked each time one of the endpoints of an interval slides. */\n private readonly onPositionChange?: (interval: TInterval) => void,\n ) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.endIntervalTree = new RedBlackTree<TInterval, TInterval>(helpers.compareEnds);\n }\n\n public addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>) {\n this.conflictResolver = conflictResolver;\n this.endConflictResolver =\n (key: TInterval, currentKey: TInterval) => {\n const ival = conflictResolver(key, currentKey);\n return {\n data: ival,\n key: ival,\n };\n };\n }\n\n public map(fn: (interval: TInterval) => void) {\n this.intervalTree.map(fn);\n }\n\n public createLegacyId(start: number, end: number): string {\n // Create a non-unique ID based on start and end to be used on intervals that come from legacy clients\n // without ID's.\n return `${LocalIntervalCollection.legacyIdPrefix}${start}-${end}`;\n }\n\n /**\n * Validates that a serialized interval has the ID property. Creates an ID\n * if one does not already exist\n *\n * @param serializedInterval - The interval to be checked\n * @returns The interval's existing or newly created id\n */\n public ensureSerializedId(serializedInterval: ISerializedInterval): string {\n let id: string | undefined = serializedInterval.properties?.[reservedIntervalIdKey];\n if (id === undefined) {\n // An interval came over the wire without an ID, so create a non-unique one based on start/end.\n // This will allow all clients to refer to this interval consistently.\n id = this.createLegacyId(serializedInterval.start, serializedInterval.end);\n const newProps = {\n [reservedIntervalIdKey]: id,\n };\n serializedInterval.properties = addProperties(serializedInterval.properties, newProps);\n }\n // Make the ID immutable for safety's sake.\n Object.defineProperty(serializedInterval.properties, reservedIntervalIdKey, {\n configurable: false,\n enumerable: true,\n writable: false,\n });\n\n return id;\n }\n\n public mapUntil(fn: (interval: TInterval) => boolean) {\n this.intervalTree.mapUntil(fn);\n }\n\n public gatherIterationResults(\n results: TInterval[],\n iteratesForward: boolean,\n start?: number,\n end?: number) {\n if (this.intervalTree.intervals.isEmpty()) {\n return;\n }\n\n if (start === undefined && end === undefined) {\n // No start/end provided. Gather the whole tree in the specified order.\n if (iteratesForward) {\n this.intervalTree.map((interval: TInterval) => {\n results.push(interval);\n });\n } else {\n this.intervalTree.mapBackward((interval: TInterval) => {\n results.push(interval);\n });\n }\n } else {\n const transientInterval: TInterval = this.helpers.create(\n \"transient\",\n start,\n end,\n this.client,\n IntervalType.Transient,\n );\n\n if (start === undefined) {\n // Only end position provided. Since the tree is not sorted by end position,\n // walk the whole tree in the specified order, gathering intervals that match the end.\n if (iteratesForward) {\n this.intervalTree.map((interval: TInterval) => {\n if (transientInterval.compareEnd(interval) === 0) {\n results.push(interval);\n }\n });\n } else {\n this.intervalTree.mapBackward((interval: TInterval) => {\n if (transientInterval.compareEnd(interval) === 0) {\n results.push(interval);\n }\n });\n }\n } else {\n // Start and (possibly) end provided. Walk the subtrees that may contain\n // this start position.\n const compareFn =\n end === undefined ?\n (node: IntervalNode<TInterval>) => {\n return transientInterval.compareStart(node.key);\n } :\n (node: IntervalNode<TInterval>) => {\n return transientInterval.compare(node.key);\n };\n const continueLeftFn = (cmpResult: number) => cmpResult <= 0;\n const continueRightFn = (cmpResult: number) => cmpResult >= 0;\n const actionFn = (node: IntervalNode<TInterval>) => {\n results.push(node.key);\n };\n\n if (iteratesForward) {\n this.intervalTree.intervals.walkExactMatchesForward(\n compareFn, actionFn, continueLeftFn, continueRightFn,\n );\n } else {\n this.intervalTree.intervals.walkExactMatchesBackward(\n compareFn, actionFn, continueLeftFn, continueRightFn,\n );\n }\n }\n }\n }\n\n public findOverlappingIntervals(startPosition: number, endPosition: number) {\n if (endPosition < startPosition || this.intervalTree.intervals.isEmpty()) {\n return [];\n }\n const transientInterval =\n this.helpers.create(\n \"transient\",\n startPosition,\n endPosition,\n this.client,\n IntervalType.Transient);\n\n const overlappingIntervalNodes = this.intervalTree.match(transientInterval);\n return overlappingIntervalNodes.map((node) => node.key);\n }\n\n public previousInterval(pos: number) {\n const transientInterval = this.helpers.create(\n \"transient\", pos, pos, this.client, IntervalType.Transient);\n const rbNode = this.endIntervalTree.floor(transientInterval);\n if (rbNode) {\n return rbNode.data;\n }\n }\n\n public nextInterval(pos: number) {\n const transientInterval = this.helpers.create(\n \"transient\", pos, pos, this.client, IntervalType.Transient);\n const rbNode = this.endIntervalTree.ceil(transientInterval);\n if (rbNode) {\n return rbNode.data;\n }\n }\n\n public removeInterval(startPosition: number, endPosition: number) {\n const transientInterval = this.helpers.create(\n \"transient\", startPosition, endPosition, this.client, IntervalType.Transient);\n this.intervalTree.remove(transientInterval);\n this.endIntervalTree.remove(transientInterval);\n return transientInterval;\n }\n\n private removeIntervalFromIndex(interval: TInterval) {\n this.intervalTree.removeExisting(interval);\n this.endIntervalTree.remove(interval);\n\n const id = interval.getIntervalId();\n\n assert(id !== undefined, 0x311 /* expected id to exist on interval */);\n\n this.intervalIdMap.delete(id);\n }\n\n public removeExistingInterval(interval: TInterval) {\n this.removeIntervalFromIndex(interval);\n this.removeIntervalListeners(interval);\n }\n\n public createInterval(\n start: number,\n end: number,\n intervalType: IntervalType,\n op?: ISequencedDocumentMessage): TInterval {\n return this.helpers.create(this.label, start, end, this.client, intervalType, op);\n }\n\n public addInterval(\n start: number,\n end: number,\n intervalType: IntervalType,\n props?: PropertySet,\n op?: ISequencedDocumentMessage) {\n const interval: TInterval = this.createInterval(start, end, intervalType, op);\n if (interval) {\n if (!interval.properties) {\n interval.properties = createMap<any>();\n }\n\n if (props) {\n interval.addProperties(props);\n }\n interval.properties[reservedIntervalIdKey] ??= uuid();\n this.add(interval);\n }\n return interval;\n }\n\n private linkEndpointsToInterval(interval: TInterval): void {\n if (interval instanceof SequenceInterval) {\n interval.start.addProperties({ interval });\n interval.end.addProperties({ interval });\n }\n }\n\n private addIntervalToIndex(interval: TInterval) {\n const id = interval.getIntervalId();\n assert(id !== undefined, 0x2c0 /* \"ID must be created before adding interval to collection\" */);\n // Make the ID immutable.\n Object.defineProperty(interval.properties, reservedIntervalIdKey, {\n configurable: false,\n enumerable: true,\n writable: false,\n });\n this.intervalTree.put(interval, this.conflictResolver);\n this.endIntervalTree.put(interval, interval, this.endConflictResolver);\n this.intervalIdMap.set(id, interval);\n }\n\n public add(interval: TInterval) {\n this.linkEndpointsToInterval(interval);\n this.addIntervalToIndex(interval);\n this.addIntervalListeners(interval);\n }\n\n public getIntervalById(id: string) {\n return this.intervalIdMap.get(id);\n }\n\n public changeInterval(\n interval: TInterval,\n start: number,\n end: number,\n op?: ISequencedDocumentMessage,\n localSeq?: number,\n ) {\n const newInterval = interval.modify(this.label, start, end, op, localSeq) as TInterval | undefined;\n if (newInterval) {\n this.removeExistingInterval(interval);\n this.add(newInterval);\n }\n return newInterval;\n }\n\n public serialize(): ISerializedIntervalCollectionV2 {\n const client = this.client;\n const intervals = this.intervalTree.intervals.keys();\n\n return {\n label: this.label,\n intervals: intervals.map((interval) => compressInterval(interval.serialize(client))),\n version: 2,\n };\n }\n\n private addIntervalListeners(interval: TInterval) {\n if (interval instanceof SequenceInterval) {\n interval.addPositionChangeListeners(\n () => this.removeIntervalFromIndex(interval),\n () => {\n this.addIntervalToIndex(interval);\n this.onPositionChange?.(interval);\n },\n );\n }\n }\n\n private removeIntervalListeners(interval: TInterval) {\n if (interval instanceof SequenceInterval) {\n interval.removePositionChangeListeners();\n }\n }\n}\n\nconst compareSequenceIntervalEnds = (a: SequenceInterval, b: SequenceInterval): number =>\n compareReferencePositions(a.end, b.end);\n\nclass SequenceIntervalCollectionFactory\n implements IValueFactory<IntervalCollection<SequenceInterval>> {\n public load(\n emitter: IValueOpEmitter,\n raw: ISerializedInterval[] | ISerializedIntervalCollectionV2 = [],\n ): IntervalCollection<SequenceInterval> {\n const helpers: IIntervalHelpers<SequenceInterval> = {\n compareEnds: compareSequenceIntervalEnds,\n create: createSequenceInterval,\n };\n return new IntervalCollection<SequenceInterval>(helpers, true, emitter, raw);\n }\n\n public store(value: IntervalCollection<SequenceInterval>): ISerializedIntervalCollectionV2 {\n return value.serializeInternal();\n }\n}\n\nexport class SequenceIntervalCollectionValueType\n implements IValueType<IntervalCollection<SequenceInterval>> {\n public static Name = \"sharedStringIntervalCollection\";\n\n public get name(): string {\n return SequenceIntervalCollectionValueType.Name;\n }\n\n public get factory(): IValueFactory<IntervalCollection<SequenceInterval>> {\n return SequenceIntervalCollectionValueType._factory;\n }\n\n public get ops(): Map<string, IValueOperation<IntervalCollection<SequenceInterval>>> {\n return SequenceIntervalCollectionValueType._ops;\n }\n\n private static readonly _factory: IValueFactory<IntervalCollection<SequenceInterval>> =\n new SequenceIntervalCollectionFactory();\n\n private static readonly _ops = makeOpsMap<SequenceInterval>();\n}\n\nconst compareIntervalEnds = (a: Interval, b: Interval) => a.end - b.end;\n\nfunction createInterval(label: string, start: number, end: number, client: Client): Interval {\n const rangeProp: PropertySet = {};\n\n if (label && label.length > 0) {\n rangeProp[reservedRangeLabelsKey] = [label];\n }\n\n return new Interval(start, end, rangeProp);\n}\n\nclass IntervalCollectionFactory\n implements IValueFactory<IntervalCollection<Interval>> {\n public load(\n emitter: IValueOpEmitter,\n raw: ISerializedInterval[] | ISerializedIntervalCollectionV2 = [],\n ): IntervalCollection<Interval> {\n const helpers: IIntervalHelpers<Interval> = {\n compareEnds: compareIntervalEnds,\n create: createInterval,\n };\n const collection = new IntervalCollection<Interval>(helpers, false, emitter, raw);\n collection.attachGraph(undefined, \"\");\n return collection;\n }\n\n public store(value: IntervalCollection<Interval>): ISerializedIntervalCollectionV2 {\n return value.serializeInternal();\n }\n}\n\nexport class IntervalCollectionValueType\n implements IValueType<IntervalCollection<Interval>> {\n public static Name = \"sharedIntervalCollection\";\n\n public get name(): string {\n return IntervalCollectionValueType.Name;\n }\n\n public get factory(): IValueFactory<IntervalCollection<Interval>> {\n return IntervalCollectionValueType._factory;\n }\n\n public get ops(): Map<string, IValueOperation<IntervalCollection<Interval>>> {\n return IntervalCollectionValueType._ops;\n }\n\n private static readonly _factory: IValueFactory<IntervalCollection<Interval>> =\n new IntervalCollectionFactory();\n private static readonly _ops = makeOpsMap<Interval>();\n}\n\nfunction makeOpsMap<T extends ISerializableInterval>(): Map<string, IValueOperation<IntervalCollection<T>>> {\n const rebase = (\n collection: IntervalCollection<T>,\n op: IValueTypeOperationValue,\n localOpMetadata: IMapMessageLocalMetadata,\n ) => {\n const { localSeq } = localOpMetadata;\n const rebasedValue = collection.rebaseLocalInterval(op.opName, op.value, localSeq);\n const rebasedOp = { ...op, value: rebasedValue };\n return { rebasedOp, rebasedLocalOpMetadata: localOpMetadata };\n };\n\n return new Map<string, IValueOperation<IntervalCollection<T>>>(\n [[\n \"add\",\n {\n process: (collection, params, local, op) => {\n // if params is undefined, the interval was deleted during\n // rebasing\n if (!params) {\n return;\n }\n collection.ackAdd(params, local, op);\n },\n rebase,\n },\n ],\n [\n \"delete\",\n {\n process: (collection, params, local, op) => {\n collection.ackDelete(params, local, op);\n },\n rebase: (collection, op, localOpMetadata) => {\n // Deletion of intervals is based on id, so requires no rebasing.\n return { rebasedOp: op, rebasedLocalOpMetadata: localOpMetadata };\n },\n },\n ],\n [\n \"change\",\n {\n process: (collection, params, local, op) => {\n // if params is undefined, the interval was deleted during\n // rebasing\n if (!params) {\n return;\n }\n collection.ackChange(params, local, op);\n },\n rebase,\n },\n ]]);\n}\n\nexport type DeserializeCallback = (properties: PropertySet) => void;\n\nexport class IntervalCollectionIterator<TInterval extends ISerializableInterval> {\n private readonly results: TInterval[];\n private index: number;\n\n constructor(\n collection: IntervalCollection<TInterval>,\n iteratesForward: boolean = true,\n start?: number,\n end?: number) {\n this.results = [];\n this.index = 0;\n\n collection.gatherIterationResults(this.results, iteratesForward, start, end);\n }\n\n public next() {\n let _value: TInterval | undefined;\n let _done: boolean = true;\n\n if (this.index < this.results.length) {\n _value = this.results[this.index++];\n _done = false;\n }\n\n return {\n value: _value,\n done: _done,\n };\n }\n}\n\nexport interface IIntervalCollectionEvent<TInterval extends ISerializableInterval> extends IEvent {\n /**\n * This event is invoked whenever the properties or endpoints of an interval may have changed.\n * This can happen on:\n * - endpoint modification (local or remote)\n * - ack of an endpoint modification\n * - property change (local or remote)\n * - position change due to segment sliding (will always appear as a local change)\n * The `interval` argument reflects the new values.\n */\n (event: \"changeInterval\",\n listener: (interval: TInterval, local: boolean, op: ISequencedDocumentMessage | undefined) => void);\n (event: \"addInterval\" | \"deleteInterval\",\n listener: (interval: TInterval, local: boolean, op: ISequencedDocumentMessage) => void);\n (event: \"propertyChanged\", listener: (interval: TInterval, propertyArgs: PropertySet) => void);\n}\n\nexport class IntervalCollection<TInterval extends ISerializableInterval>\n extends TypedEventEmitter<IIntervalCollectionEvent<TInterval>> {\n private savedSerializedIntervals?: ISerializedInterval[];\n private localCollection: LocalIntervalCollection<TInterval>;\n private onDeserialize: DeserializeCallback | undefined;\n private client: Client | undefined;\n private readonly pendingChangesStart: Map<string, ISerializedInterval[]> = new Map<string, ISerializedInterval[]>();\n private readonly pendingChangesEnd: Map<string, ISerializedInterval[]> = new Map<string, ISerializedInterval[]>();\n\n public get attached(): boolean {\n return !!this.localCollection;\n }\n\n /** @internal */\n constructor(\n private readonly helpers: IIntervalHelpers<TInterval>,\n private readonly requiresClient: boolean,\n private readonly emitter: IValueOpEmitter,\n serializedIntervals: ISerializedInterval[] | ISerializedIntervalCollectionV2,\n ) {\n super();\n\n this.savedSerializedIntervals = Array.isArray(serializedIntervals)\n ? serializedIntervals\n : serializedIntervals.intervals.map((i) => decompressInterval(i, serializedIntervals.label));\n }\n\n public attachGraph(client: Client, label: string) {\n if (this.attached) {\n throw new LoggingError(\"Only supports one Sequence attach\");\n }\n\n if ((client === undefined) && (this.requiresClient)) {\n throw new LoggingError(\"Client required for this collection\");\n }\n\n // Instantiate the local interval collection based on the saved intervals\n this.client = client;\n this.localCollection = new LocalIntervalCollection<TInterval>(\n client,\n label,\n this.helpers,\n (interval) => this.emit(\"changeInterval\", interval, true, undefined),\n );\n if (this.savedSerializedIntervals) {\n for (const serializedInterval of this.savedSerializedIntervals) {\n this.localCollection.ensureSerializedId(serializedInterval);\n const { start, end, intervalType, properties } = serializedInterval;\n const interval = this.helpers.create(\n label,\n start,\n end,\n client,\n intervalType,\n undefined,\n true,\n );\n interval.addProperties(properties);\n this.localCollection.add(interval);\n }\n }\n this.savedSerializedIntervals = undefined;\n }\n\n /**\n * Gets the next local sequence number, modifying this client's collab window in doing so.\n */\n private getNextLocalSeq(): number {\n if (this.client) {\n return ++this.client.getCollabWindow().localSeq;\n }\n\n return 0;\n }\n\n public getIntervalById(id: string) {\n if (!this.attached) {\n throw new LoggingError(\"attach must be called before accessing intervals\");\n }\n return this.localCollection.getIntervalById(id);\n }\n\n /**\n * Create a new interval and add it to the collection\n * @param start - interval start position\n * @param end - interval end position\n * @param intervalType - type of the interval. All intervals are SlideOnRemove. Intervals may not be Transient.\n * @param props - properties of the interval\n * @returns - the created interval\n */\n public add(\n start: number,\n end: number,\n intervalType: IntervalType,\n props?: PropertySet,\n ) {\n if (!this.attached) {\n throw new LoggingError(\"attach must be called prior to adding intervals\");\n }\n if (intervalType & IntervalType.Transient) {\n throw new LoggingError(\"Can not add transient intervals\");\n }\n\n const interval: TInterval = this.localCollection.addInterval(start, end, intervalType, props);\n\n if (interval) {\n const serializedInterval = {\n end,\n intervalType,\n properties: interval.properties,\n sequenceNumber: this.client?.getCurrentSeq() ?? 0,\n start,\n };\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n this.emitter.emit(\"add\", undefined, serializedInterval, { localSeq: this.getNextLocalSeq() });\n }\n\n this.emit(\"addInterval\", interval, true, undefined);\n\n return interval;\n }\n\n private deleteExistingInterval(interval: TInterval, local: boolean, op?: ISequencedDocumentMessage) {\n // The given interval is known to exist in the collection.\n this.localCollection.removeExistingInterval(interval);\n\n if (interval) {\n // Local ops get submitted to the server. Remote ops have the deserializer run.\n if (local) {\n this.emitter.emit(\n \"delete\",\n undefined,\n interval.serialize(this.client),\n { localSeq: this.getNextLocalSeq() },\n );\n } else {\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n }\n }\n\n this.emit(\"deleteInterval\", interval, local, op);\n }\n\n public removeIntervalById(id: string) {\n const interval = this.localCollection.getIntervalById(id);\n if (interval) {\n this.deleteExistingInterval(interval, true, undefined);\n }\n return interval;\n }\n\n public changeProperties(id: string, props: PropertySet) {\n if (!this.attached) {\n throw new LoggingError(\"Attach must be called before accessing intervals\");\n }\n if (typeof (id) !== \"string\") {\n throw new LoggingError(\"Change API requires an ID that is a string\");\n }\n if (!props) {\n throw new LoggingError(\"changeProperties should be called with a property set\");\n }\n\n const interval = this.getIntervalById(id);\n if (interval) {\n // Pass Unassigned as the sequence number to indicate that this is a local op that is waiting for an ack.\n const deltaProps = interval.addProperties(props, true, UnassignedSequenceNumber);\n const serializedInterval: ISerializedInterval = interval.serialize(this.client);\n\n // Emit a change op that will only change properties. Add the ID to\n // the property bag provided by the caller.\n serializedInterval.start = undefined as any;\n serializedInterval.end = undefined as any;\n\n serializedInterval.properties = props;\n serializedInterval.properties[reservedIntervalIdKey] = interval.getIntervalId();\n this.emitter.emit(\"change\", undefined, serializedInterval, { localSeq: this.getNextLocalSeq() });\n this.emit(\"propertyChanged\", interval, deltaProps);\n }\n this.emit(\"changeInterval\", interval, true, undefined);\n }\n\n public change(id: string, start?: number, end?: number): TInterval | undefined {\n if (!this.attached) {\n throw new LoggingError(\"Attach must be called before accessing intervals\");\n }\n\n // Force id to be a string.\n if (typeof (id) !== \"string\") {\n throw new LoggingError(\"Change API requires an ID that is a string\");\n }\n\n const interval = this.getIntervalById(id);\n if (interval) {\n const newInterval = this.localCollection.changeInterval(interval, start, end);\n const serializedInterval: ISerializedInterval = interval.serialize(this.client);\n serializedInterval.start = start;\n serializedInterval.end = end;\n // Emit a property bag containing only the ID, as we don't intend for this op to change any properties.\n serializedInterval.properties =\n {\n [reservedIntervalIdKey]: interval.getIntervalId(),\n };\n this.emitter.emit(\"change\", undefined, serializedInterval, { localSeq: this.getNextLocalSeq() });\n this.addPendingChange(id, serializedInterval);\n this.emit(\"changeInterval\", newInterval, true, undefined);\n return newInterval;\n }\n // No interval to change\n return undefined;\n }\n\n private addPendingChange(id: string, serializedInterval: ISerializedInterval) {\n if (serializedInterval.start !== undefined) {\n this.addPendingChangeHelper(id, this.pendingChangesStart, serializedInterval);\n }\n if (serializedInterval.end !== undefined) {\n this.addPendingChangeHelper(id, this.pendingChangesEnd, serializedInterval);\n }\n }\n\n private addPendingChangeHelper(\n id: string,\n pendingChanges: Map<string, ISerializedInterval[]>,\n serializedInterval: ISerializedInterval,\n ) {\n let entries: ISerializedInterval[] | undefined = pendingChanges.get(id);\n if (!entries) {\n entries = [];\n pendingChanges.set(id, entries);\n }\n entries.push(serializedInterval);\n }\n\n private removePendingChange(serializedInterval: ISerializedInterval) {\n // Change ops always have an ID.\n const id: string = serializedInterval.properties?.[reservedIntervalIdKey];\n if (serializedInterval.start !== undefined) {\n this.removePendingChangeHelper(id, this.pendingChangesStart, serializedInterval);\n }\n if (serializedInterval.end !== undefined) {\n this.removePendingChangeHelper(id, this.pendingChangesEnd, serializedInterval);\n }\n }\n\n private removePendingChangeHelper(\n id: string,\n pendingChanges: Map<string, ISerializedInterval[]>,\n serializedInterval: ISerializedInterval,\n ) {\n const entries = pendingChanges.get(id);\n if (entries) {\n const pendingChange = entries.shift();\n if (entries.length === 0) {\n pendingChanges.delete(id);\n }\n if (pendingChange?.start !== serializedInterval.start ||\n pendingChange?.end !== serializedInterval.end) {\n throw new LoggingError(\"Mismatch in pending changes\");\n }\n }\n }\n\n private hasPendingChangeStart(id: string) {\n const entries = this.pendingChangesStart.get(id);\n return entries && entries.length !== 0;\n }\n\n private hasPendingChangeEnd(id: string) {\n const entries = this.pendingChangesEnd.get(id);\n return entries && entries.length !== 0;\n }\n\n /** @internal */\n public ackChange(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage) {\n if (!this.attached) {\n throw new LoggingError(\"Attach must be called before accessing intervals\");\n }\n\n let interval: TInterval | undefined;\n\n if (local) {\n // This is an ack from the server. Remove the pending change.\n this.removePendingChange(serializedInterval);\n const id: string = serializedInterval.properties?.[reservedIntervalIdKey];\n interval = this.getIntervalById(id);\n if (interval) {\n // Let the propertyManager prune its pending change-properties set.\n interval.propertyManager?.ackPendingProperties(\n {\n type: MergeTreeDeltaType.ANNOTATE,\n props: serializedInterval.properties ?? {},\n });\n\n this.ackInterval(interval, op);\n }\n } else {\n // If there are pending changes with this ID, don't apply the remote start/end change, as the local ack\n // should be the winning change.\n // Note that the ID is in the property bag only to allow us to find the interval.\n // This API cannot change the ID, and writing to the ID property will result in an exception. So we\n // strip it out of the properties here.\n const { [reservedIntervalIdKey]: id, ...newProps } = serializedInterval.properties;\n interval = this.getIntervalById(id);\n if (interval) {\n let start: number | undefined;\n let end: number | undefined;\n // Track pending start/end independently of one another.\n if (!this.hasPendingChangeStart(id)) {\n start = serializedInterval.start;\n }\n if (!this.hasPendingChangeEnd(id)) {\n end = serializedInterval.end;\n }\n if (start !== undefined || end !== undefined) {\n // If changeInterval gives us a new interval, work with that one. Otherwise keep working with\n // the one we originally found in the tree.\n interval = this.localCollection.changeInterval(interval, start, end, op) ?? interval;\n }\n const deltaProps = interval.addProperties(newProps, true, op.sequenceNumber);\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n this.emit(\"propertyChanged\", interval, deltaProps);\n }\n }\n if (interval) {\n this.emit(\"changeInterval\", interval, local, op);\n }\n }\n\n public addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>): void {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n this.localCollection.addConflictResolver(conflictResolver);\n }\n\n public attachDeserializer(onDeserialize: DeserializeCallback): void {\n // If no deserializer is specified can skip all processing work\n if (!onDeserialize) {\n return;\n }\n\n // Start by storing the callbacks so that any subsequent modifications make use of them\n this.onDeserialize = onDeserialize;\n\n // Trigger the async prepare work across all values in the collection\n this.localCollection.map((interval) => {\n onDeserialize(interval);\n });\n }\n\n /**\n * Returns new interval after rebasing. If undefined, the interval was\n * deleted as a result of rebasing. This can occur if the interval applies\n * to a range that no longer exists, and the interval was unable to slide.\n *\n * @internal\n */\n public rebaseLocalInterval(\n opName: string,\n serializedInterval: ISerializedInterval,\n localSeq: number,\n ): ISerializedInterval | undefined {\n if (!this.client) {\n // If there's no associated mergeTree client, the originally submitted op is still correct.\n return serializedInterval;\n }\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n const { start, end, intervalType, properties, sequenceNumber } = serializedInterval;\n const startRebased = start === undefined ? undefined :\n this.client.rebasePosition(start, sequenceNumber, localSeq);\n const endRebased = end === undefined ? undefined :\n this.client.rebasePosition(end, sequenceNumber, localSeq);\n\n const intervalId = properties?.[reservedIntervalIdKey];\n const localInterval = this.localCollection.getIntervalById(intervalId);\n\n const rebased: ISerializedInterval = {\n start: startRebased,\n end: endRebased,\n intervalType,\n sequenceNumber: this.client?.getCurrentSeq() ?? 0,\n properties,\n };\n\n if (opName === \"change\" && (this.hasPendingChangeStart(intervalId) || this.hasPendingChangeEnd(intervalId))) {\n this.removePendingChange(serializedInterval);\n this.addPendingChange(intervalId, rebased);\n }\n\n // if the interval slid off the string, rebase the op to be a noop and\n // delete the interval\n if (startRebased === DetachedReferencePosition || endRebased === DetachedReferencePosition) {\n if (localInterval) {\n this.localCollection.removeExistingInterval(localInterval);\n }\n return undefined;\n }\n\n if (!localInterval) {\n return rebased;\n }\n\n // we know we must be using `SequenceInterval` because `this.client` exists\n assert(\n localInterval instanceof SequenceInterval,\n 0x3a0 /* localInterval must be `SequenceInterval` when used with client */,\n );\n\n const startSegment = this.getSlideToSegment(localInterval.start);\n const endSegment = this.getSlideToSegment(localInterval.end);\n\n // we need to slide because the reference has been removed\n if (startSegment || endSegment) {\n const newStart =\n startSegment && this.client.getPosition(startSegment.segment, localSeq) + startSegment.offset;\n const newEnd =\n endSegment && this.client.getPosition(endSegment.segment, localSeq) + endSegment.offset;\n\n this.localCollection.changeInterval(localInterval, newStart, newEnd, undefined, localSeq);\n }\n\n return rebased;\n }\n\n private getSlideToSegment(lref: LocalReferencePosition) {\n const segoff = { segment: lref.getSegment(), offset: lref.getOffset() };\n const newSegoff = this.client.getSlideToSegment(segoff);\n const value: { segment: ISegment | undefined; offset: number | undefined; } | undefined\n = (segoff.segment === newSegoff.segment && segoff.offset === newSegoff.offset) ? undefined : newSegoff;\n return value;\n }\n\n private setSlideOnRemove(lref: LocalReferencePosition) {\n let refType = lref.refType;\n refType = refType & ~ReferenceType.StayOnRemove;\n refType = refType | ReferenceType.SlideOnRemove;\n lref.refType = refType;\n }\n\n private ackInterval(interval: TInterval, op: ISequencedDocumentMessage) {\n // Only SequenceIntervals need potential sliding\n if (!(interval instanceof SequenceInterval)) {\n return;\n }\n\n if (!refTypeIncludesFlag(interval.start, ReferenceType.StayOnRemove) &&\n !refTypeIncludesFlag(interval.end, ReferenceType.StayOnRemove)) {\n return;\n }\n\n const newStart = this.getSlideToSegment(interval.start);\n const newEnd = this.getSlideToSegment(interval.end);\n\n const id = interval.properties[reservedIntervalIdKey];\n const hasPendingStartChange = this.hasPendingChangeStart(id);\n const hasPendingEndChange = this.hasPendingChangeEnd(id);\n\n if (!hasPendingStartChange) {\n this.setSlideOnRemove(interval.start);\n }\n\n if (!hasPendingEndChange) {\n this.setSlideOnRemove(interval.end);\n }\n\n const needsStartUpdate = newStart !== undefined && !hasPendingStartChange;\n const needsEndUpdate = newEnd !== undefined && !hasPendingEndChange;\n\n if (needsStartUpdate || needsEndUpdate) {\n // In this case, where we change the start or end of an interval,\n // it is necessary to remove and re-add the interval listeners.\n // This ensures that the correct listeners are added to the LocalReferencePosition.\n this.localCollection.removeExistingInterval(interval);\n\n if (needsStartUpdate) {\n const props = interval.start.properties;\n this.client.removeLocalReferencePosition(interval.start);\n interval.start = createPositionReferenceFromSegoff(this.client, newStart, interval.start.refType, op);\n if (props) {\n interval.start.addProperties(props);\n }\n }\n if (needsEndUpdate) {\n const props = interval.end.properties;\n this.client.removeLocalReferencePosition(interval.end);\n interval.end = createPositionReferenceFromSegoff(this.client, newEnd, interval.end.refType, op);\n if (props) {\n interval.end.addProperties(props);\n }\n }\n this.localCollection.add(interval);\n }\n }\n\n /** @internal */\n public ackAdd(\n serializedInterval: ISerializedInterval,\n local: boolean,\n op: ISequencedDocumentMessage) {\n if (local) {\n const id: string = serializedInterval.properties?.[reservedIntervalIdKey];\n const localInterval = this.getIntervalById(id);\n if (localInterval) {\n this.ackInterval(localInterval, op);\n }\n return;\n }\n\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n this.localCollection.ensureSerializedId(serializedInterval);\n\n const interval: TInterval = this.localCollection.addInterval(\n serializedInterval.start,\n serializedInterval.end,\n serializedInterval.intervalType,\n serializedInterval.properties,\n op);\n\n if (interval) {\n if (this.onDeserialize) {\n this.onDeserialize(interval);\n }\n }\n\n this.emit(\"addInterval\", interval, local, op);\n\n return interval;\n }\n\n /** @internal */\n public ackDelete(\n serializedInterval: ISerializedInterval,\n local: boolean,\n op: ISequencedDocumentMessage): void {\n if (local) {\n // Local ops were applied when the message was created and there's no \"pending delete\"\n // state to bookkeep: remote operation application takes into account possibility of\n // locally deleted interval whenever a lookup happens.\n return;\n }\n\n if (!this.attached) {\n throw new LoggingError(\"attach must be called prior to deleting intervals\");\n }\n\n const id = this.localCollection.ensureSerializedId(serializedInterval);\n const interval = this.localCollection.getIntervalById(id);\n if (interval) {\n this.deleteExistingInterval(interval, local, op);\n }\n }\n\n /**\n * @internal\n */\n public serializeInternal(): ISerializedIntervalCollectionV2 {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n return this.localCollection.serialize();\n }\n\n public [Symbol.iterator](): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this);\n return iterator;\n }\n\n public CreateForwardIteratorWithStartPosition(startPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, true, startPosition);\n return iterator;\n }\n\n public CreateBackwardIteratorWithStartPosition(startPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, false, startPosition);\n return iterator;\n }\n\n public CreateForwardIteratorWithEndPosition(endPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, true, undefined, endPosition);\n return iterator;\n }\n\n public CreateBackwardIteratorWithEndPosition(endPosition: number): IntervalCollectionIterator<TInterval> {\n const iterator = new IntervalCollectionIterator<TInterval>(this, false, undefined, endPosition);\n return iterator;\n }\n\n public gatherIterationResults(\n results: TInterval[],\n iteratesForward: boolean,\n start?: number,\n end?: number) {\n if (!this.attached) {\n return;\n }\n\n this.localCollection.gatherIterationResults(results, iteratesForward, start, end);\n }\n\n public findOverlappingIntervals(startPosition: number, endPosition: number): TInterval[] {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n return this.localCollection.findOverlappingIntervals(startPosition, endPosition);\n }\n\n public map(fn: (interval: TInterval) => void) {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n this.localCollection.map(fn);\n }\n\n public previousInterval(pos: number): TInterval {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n return this.localCollection.previousInterval(pos);\n }\n\n public nextInterval(pos: number): TInterval {\n if (!this.attached) {\n throw new LoggingError(\"attachSequence must be called\");\n }\n\n return this.localCollection.nextInterval(pos);\n }\n}\n\n/**\n * Information that identifies an interval within a `Sequence`.\n */\nexport interface IntervalLocator {\n /**\n * Label for the collection the interval is a part of\n */\n label: string;\n /**\n * Interval within that collection\n */\n interval: SequenceInterval;\n}\n\n/**\n * Returns an object that can be used to find the interval a given LocalReferencePosition belongs to.\n * @returns undefined if the reference position is not the endpoint of any interval (e.g. it was created\n * on the merge tree directly by app code), otherwise an {@link IntervalLocator} for the interval this\n * endpoint is a part of.\n */\nexport function intervalLocatorFromEndpoint(potentialEndpoint: LocalReferencePosition): IntervalLocator | undefined {\n const {\n interval,\n [reservedRangeLabelsKey]: collectionNameArray,\n } = potentialEndpoint.properties ?? {};\n return (interval && collectionNameArray?.length === 1) ? { label: collectionNameArray[0], interval } : undefined;\n}\n"]}
|
package/dist/packageVersion.d.ts
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
|
|
6
6
|
*/
|
|
7
7
|
export declare const pkgName = "@fluidframework/sequence";
|
|
8
|
-
export declare const pkgVersion = "2.0.0-internal.1.
|
|
8
|
+
export declare const pkgVersion = "2.0.0-internal.1.2.0";
|
|
9
9
|
//# sourceMappingURL=packageVersion.d.ts.map
|
package/dist/packageVersion.js
CHANGED
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.pkgVersion = exports.pkgName = void 0;
|
|
10
10
|
exports.pkgName = "@fluidframework/sequence";
|
|
11
|
-
exports.pkgVersion = "2.0.0-internal.1.
|
|
11
|
+
exports.pkgVersion = "2.0.0-internal.1.2.0";
|
|
12
12
|
//# sourceMappingURL=packageVersion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,0BAA0B,CAAC;AACrC,QAAA,UAAU,GAAG,sBAAsB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/sequence\";\nexport const pkgVersion = \"2.0.0-internal.1.
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,0BAA0B,CAAC;AACrC,QAAA,UAAU,GAAG,sBAAsB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/sequence\";\nexport const pkgVersion = \"2.0.0-internal.1.2.0\";\n"]}
|
package/dist/sequence.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ import { ISharedIntervalCollection } from "./sharedIntervalCollection";
|
|
|
15
15
|
/**
|
|
16
16
|
* Events emitted in response to changes to the sequence data.
|
|
17
17
|
*
|
|
18
|
-
*
|
|
18
|
+
* @remarks
|
|
19
19
|
*
|
|
20
20
|
* The following is the list of events emitted.
|
|
21
21
|
*
|
|
@@ -146,18 +146,21 @@ export declare abstract class SharedSegmentSequence<T extends ISegment> extends
|
|
|
146
146
|
getCurrentSeq(): number;
|
|
147
147
|
insertAtReferencePosition(pos: ReferencePosition, segment: T): void;
|
|
148
148
|
/**
|
|
149
|
-
* @deprecated
|
|
150
|
-
* are supported. Use
|
|
149
|
+
* @deprecated `IntervalCollection`s are created on a first-write wins basis, and concurrent creates
|
|
150
|
+
* are supported. Use {@link SharedSegmentSequence.getIntervalCollection} instead.
|
|
151
151
|
*/
|
|
152
152
|
waitIntervalCollection(label: string): Promise<IntervalCollection<SequenceInterval>>;
|
|
153
153
|
getIntervalCollection(label: string): IntervalCollection<SequenceInterval>;
|
|
154
154
|
/**
|
|
155
|
-
* @returns
|
|
156
|
-
*
|
|
155
|
+
* @returns An iterable object that enumerates the IntervalCollection labels.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
157
159
|
* const iter = this.getIntervalCollectionKeys();
|
|
158
160
|
* for (key of iter)
|
|
159
161
|
* const collection = this.getIntervalCollection(key);
|
|
160
162
|
* ...
|
|
163
|
+
* ```
|
|
161
164
|
*/
|
|
162
165
|
getIntervalCollectionLabels(): IterableIterator<string>;
|
|
163
166
|
protected summarizeCore(serializer: IFluidSerializer, telemetryContext?: ITelemetryContext): ISummaryTreeWithStats;
|
package/dist/sequence.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../src/sequence.ts"],"names":[],"mappings":"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"}
|