@fluidframework/sequence 0.59.4000-71130 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.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 */\nimport { Deferred, bufferToString, assert } from \"@fluidframework/common-utils\";\nimport { ChildLogger } from \"@fluidframework/telemetry-utils\";\nimport {\n ISequencedDocumentMessage,\n MessageType,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n IChannelAttributes,\n IFluidDataStoreRuntime,\n IChannelStorageService,\n} from \"@fluidframework/datastore-definitions\";\nimport {\n Client,\n createAnnotateRangeOp,\n createGroupOp,\n createInsertOp,\n createRemoveRangeOp,\n ICombiningOp,\n IJSONSegment,\n IMergeTreeAnnotateMsg,\n IMergeTreeDeltaOp,\n IMergeTreeGroupMsg,\n IMergeTreeOp,\n IMergeTreeRemoveMsg,\n IRelativePosition,\n ISegment,\n ISegmentAction,\n LocalReference,\n matchProperties,\n MergeTreeDeltaType,\n PropertySet,\n RangeStackMap,\n ReferencePosition,\n ReferenceType,\n SegmentGroup,\n} from \"@fluidframework/merge-tree\";\nimport { ObjectStoragePartition, SummaryTreeBuilder } from \"@fluidframework/runtime-utils\";\nimport {\n IFluidSerializer,\n makeHandlesSerializable,\n parseHandles,\n SharedObject,\n ISharedObjectEvents,\n SummarySerializer,\n} from \"@fluidframework/shared-object-base\";\nimport { IEventThisPlaceHolder } from \"@fluidframework/common-definitions\";\nimport { ISummaryTreeWithStats } from \"@fluidframework/runtime-definitions\";\n\nimport {\n IntervalCollection,\n SequenceInterval,\n SequenceIntervalCollectionValueType,\n} from \"./intervalCollection\";\nimport { IMapMessageLocalMetadata, DefaultMap } from \"./defaultMap\";\nimport { IValueChanged } from \"./defaultMapInterfaces\";\nimport { SequenceDeltaEvent, SequenceMaintenanceEvent } from \"./sequenceDeltaEvent\";\nimport { ISharedIntervalCollection } from \"./sharedIntervalCollection\";\n\nconst snapshotFileName = \"header\";\nconst contentPath = \"content\";\n\n/**\n * Events emitted in response to changes to the sequence data.\n *\n * ### \"sequenceDelta\"\n *\n * The sequenceDelta event is emitted when segments are inserted, annotated, or removed.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n *\n * ### \"maintenance\"\n *\n * The maintenance event is emitted when segments are modified during merge-tree maintenance.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n */\nexport interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {\n (event: \"createIntervalCollection\",\n listener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void);\n (event: \"sequenceDelta\", listener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void);\n (event: \"maintenance\",\n listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void);\n}\n\nexport abstract class SharedSegmentSequence<T extends ISegment>\n extends SharedObject<ISharedSegmentSequenceEvents>\n implements ISharedIntervalCollection<SequenceInterval> {\n get loaded(): Promise<void> {\n return this.loadedDeferred.promise;\n }\n\n private static createOpsFromDelta(event: SequenceDeltaEvent): IMergeTreeDeltaOp[] {\n const ops: IMergeTreeDeltaOp[] = [];\n for (const r of event.ranges) {\n switch (event.deltaOperation) {\n case MergeTreeDeltaType.ANNOTATE: {\n const lastAnnotate = ops[ops.length - 1] as IMergeTreeAnnotateMsg;\n const props = {};\n for (const key of Object.keys(r.propertyDeltas)) {\n props[key] =\n r.segment.properties[key] === undefined ? null : r.segment.properties[key];\n }\n if (lastAnnotate && lastAnnotate.pos2 === r.position &&\n matchProperties(lastAnnotate.props, props)) {\n lastAnnotate.pos2 += r.segment.cachedLength;\n } else {\n ops.push(createAnnotateRangeOp(\n r.position,\n r.position + r.segment.cachedLength,\n props,\n undefined));\n }\n break;\n }\n\n case MergeTreeDeltaType.INSERT:\n ops.push(createInsertOp(\n r.position,\n r.segment.clone().toJSONObject()));\n break;\n\n case MergeTreeDeltaType.REMOVE: {\n const lastRem = ops[ops.length - 1] as IMergeTreeRemoveMsg;\n if (lastRem?.pos1 === r.position) {\n lastRem.pos2 += r.segment.cachedLength;\n } else {\n ops.push(createRemoveRangeOp(\n r.position,\n r.position + r.segment.cachedLength));\n }\n break;\n }\n\n default:\n }\n }\n return ops;\n }\n\n protected client: Client;\n // Deferred that triggers once the object is loaded\n protected loadedDeferred = new Deferred<void>();\n // cache out going ops created when partial loading\n private readonly loadedDeferredOutgoingOps:\n [IMergeTreeOp, SegmentGroup | SegmentGroup[]][] = [];\n // cache incoming ops that arrive when partial loading\n private deferIncomingOps = true;\n private readonly loadedDeferredIncomingOps: ISequencedDocumentMessage[] = [];\n\n private messagesSinceMSNChange: ISequencedDocumentMessage[] = [];\n private readonly intervalCollections: DefaultMap<IntervalCollection<SequenceInterval>>;\n constructor(\n private readonly dataStoreRuntime: IFluidDataStoreRuntime,\n public id: string,\n attributes: IChannelAttributes,\n public readonly segmentFromSpec: (spec: IJSONSegment) => ISegment,\n ) {\n super(id, dataStoreRuntime, attributes);\n\n this.loadedDeferred.promise.catch((error) => {\n this.logger.sendErrorEvent({ eventName: \"SequenceLoadFailed\" }, error);\n });\n\n this.client = new Client(\n segmentFromSpec,\n ChildLogger.create(this.logger, \"SharedSegmentSequence.MergeTreeClient\"),\n dataStoreRuntime.options);\n\n super.on(\"newListener\", (event) => {\n switch (event) {\n case \"sequenceDelta\":\n if (!this.client.mergeTreeDeltaCallback) {\n this.client.mergeTreeDeltaCallback = (opArgs, deltaArgs) => {\n this.emit(\"sequenceDelta\", new SequenceDeltaEvent(opArgs, deltaArgs, this.client), this);\n };\n }\n break;\n case \"maintenance\":\n if (!this.client.mergeTreeMaintenanceCallback) {\n this.client.mergeTreeMaintenanceCallback = (args, opArgs) => {\n this.emit(\"maintenance\", new SequenceMaintenanceEvent(opArgs, args, this.client), this);\n };\n }\n break;\n default:\n }\n });\n super.on(\"removeListener\", (event: string | symbol) => {\n switch (event) {\n case \"sequenceDelta\":\n if (super.listenerCount(event) === 0) {\n this.client.mergeTreeDeltaCallback = undefined;\n }\n break;\n case \"maintenance\":\n if (super.listenerCount(event) === 0) {\n this.client.mergeTreeMaintenanceCallback = undefined;\n }\n break;\n default:\n break;\n }\n });\n\n this.intervalCollections = new DefaultMap(\n this.serializer,\n this.handle,\n (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n new SequenceIntervalCollectionValueType(),\n );\n }\n\n /**\n * @param start - The inclusive start of the range to remove\n * @param end - The exclusive end of the range to remove\n */\n public removeRange(start: number, end: number) {\n const removeOp = this.client.removeRangeLocal(start, end);\n if (removeOp) {\n this.submitSequenceMessage(removeOp);\n }\n return removeOp;\n }\n\n public groupOperation(groupOp: IMergeTreeGroupMsg) {\n this.client.localTransaction(groupOp);\n this.submitSequenceMessage(groupOp);\n }\n\n public getContainingSegment(pos: number) {\n return this.client.getContainingSegment<T>(pos);\n }\n\n /**\n * Returns the length of the current sequence for the client\n */\n public getLength() {\n return this.client.getLength();\n }\n\n /**\n * Returns the current position of a segment, and -1 if the segment\n * does not exist in this sequence\n * @param segment - The segment to get the position of\n */\n public getPosition(segment: ISegment): number {\n return this.client.getPosition(segment);\n }\n\n /**\n * Annotates the range with the provided properties\n *\n * @param start - The inclusive start position of the range to annotate\n * @param end - The exclusive end position of the range to annotate\n * @param props - The properties to annotate the range with\n * @param combiningOp - Optional. Specifies how to combine values for the property, such as \"incr\" for increment.\n *\n */\n public annotateRange(\n start: number,\n end: number,\n props: PropertySet,\n combiningOp?: ICombiningOp) {\n const annotateOp =\n this.client.annotateRangeLocal(start, end, props, combiningOp);\n if (annotateOp) {\n this.submitSequenceMessage(annotateOp);\n }\n }\n\n public getPropertiesAtPosition(pos: number) {\n return this.client.getPropertiesAtPosition(pos);\n }\n\n public getRangeExtentsOfPosition(pos: number) {\n return this.client.getRangeExtentsOfPosition(pos);\n }\n\n /**\n * @deprecated - use createLocalReferencePosition\n */\n public createPositionReference(\n segment: T,\n offset: number,\n refType: ReferenceType): LocalReference {\n const lref = new LocalReference(this.client, segment, offset, refType);\n if (refType !== ReferenceType.Transient) {\n this.addLocalReference(lref);\n }\n return lref;\n }\n\n public createLocalReferencePosition(\n segment: T,\n offset: number,\n refType: ReferenceType,\n properties: PropertySet | undefined): ReferencePosition {\n return this.client.createLocalReferencePosition(\n segment,\n offset,\n refType,\n properties);\n }\n\n /**\n * @deprecated - use localReferencePositionToPosition\n */\n public localRefToPos(localRef: LocalReference) {\n return this.client.localReferencePositionToPosition(localRef);\n }\n\n public localReferencePositionToPosition(lref: ReferencePosition): number {\n return this.client.localReferencePositionToPosition(lref);\n }\n\n /**\n * Resolves a remote client's position against the local sequence\n * and returns the remote client's position relative to the local\n * sequence. The client ref seq must be above the minimum sequence number\n * or the return value will be undefined.\n * Generally this method is used in conjunction with signals which provide\n * point in time values for the below parameters, and is useful for things\n * like displaying user position. It should not be used with persisted values\n * as persisted values will quickly become invalid as the remoteClientRefSeq\n * moves below the minimum sequence number\n * @param remoteClientPosition - The remote client's position to resolve\n * @param remoteClientRefSeq - The reference sequence number of the remote client\n * @param remoteClientId - The client id of the remote client\n */\n public resolveRemoteClientPosition(\n remoteClientPosition: number,\n remoteClientRefSeq: number,\n remoteClientId: string): number {\n return this.client.resolveRemoteClientPosition(\n remoteClientPosition,\n remoteClientRefSeq,\n remoteClientId);\n }\n\n public submitSequenceMessage(message: IMergeTreeOp) {\n if (!this.isAttached()) {\n return;\n }\n const translated = makeHandlesSerializable(message, this.serializer, this.handle);\n const metadata = this.client.peekPendingSegmentGroups(\n message.type === MergeTreeDeltaType.GROUP ? message.ops.length : 1);\n\n // if loading isn't complete, we need to cache\n // local ops until loading is complete, and then\n // they will be resent\n if (!this.loadedDeferred.isCompleted) {\n this.loadedDeferredOutgoingOps.push([translated, metadata]);\n } else {\n this.submitLocalMessage(translated, metadata);\n }\n }\n\n /**\n * @deprecated - use createLocalReferencePosition\n */\n public addLocalReference(lref: LocalReference) {\n return this.client.addLocalReference(lref);\n }\n\n /**\n * @deprecated - use removeLocalReferencePosition\n */\n public removeLocalReference(lref: LocalReference) {\n return this.client.removeLocalReferencePosition(lref);\n }\n\n public removeLocalReferencePosition(lref: ReferencePosition) {\n return this.client.removeLocalReferencePosition(lref);\n }\n\n /**\n * Given a position specified relative to a marker id, lookup the marker\n * and convert the position to a character position.\n * @param relativePos - Id of marker (may be indirect) and whether position is before or after marker.\n */\n public posFromRelativePos(relativePos: IRelativePosition) {\n return this.client.posFromRelativePos(relativePos);\n }\n\n /**\n * Walk the underlying segments of the sequence.\n * The walked segments may extend beyond the range\n * if the segments cross the ranges start or end boundaries.\n * Set split range to true to ensure only segments within the\n * range are walked.\n *\n * @param handler - The function to handle each segment\n * @param start - Optional. The start of range walk.\n * @param end - Optional. The end of range walk\n * @param accum - Optional. An object that will be passed to the handler for accumulation\n * @param splitRange - Optional. Splits boundary segments on the range boundaries\n */\n public walkSegments<TClientData>(\n handler: ISegmentAction<TClientData>,\n start?: number, end?: number, accum?: TClientData,\n splitRange: boolean = false) {\n return this.client.walkSegments<TClientData>(handler, start, end, accum, splitRange);\n }\n\n public getStackContext(startPos: number, rangeLabels: string[]): RangeStackMap {\n return this.client.getStackContext(startPos, rangeLabels);\n }\n\n public getCurrentSeq() {\n return this.client.getCurrentSeq();\n }\n\n public insertAtReferencePosition(pos: ReferencePosition, segment: T) {\n const insertOp = this.client.insertAtReferencePositionLocal(pos, segment);\n if (insertOp) {\n this.submitSequenceMessage(insertOp);\n }\n }\n\n /**\n * @deprecated - IntervalCollections are created on a first-write wins basis, and concurrent creates\n * are supported. Use `getIntervalCollection` instead.\n */\n public async waitIntervalCollection(\n label: string,\n ): Promise<IntervalCollection<SequenceInterval>> {\n return this.intervalCollections.get(this.getIntervalCollectionPath(label));\n }\n\n public getIntervalCollection(label: string): IntervalCollection<SequenceInterval> {\n const labelPath = this.getIntervalCollectionPath(label);\n const sharedCollection = this.intervalCollections.get(labelPath);\n return sharedCollection;\n }\n\n /**\n * @returns an iterable object that enumerates the IntervalCollection labels\n * Usage:\n * const iter = this.getIntervalCollectionKeys();\n * for (key of iter)\n * const collection = this.getIntervalCollection(key);\n * ...\n */\n public getIntervalCollectionLabels(): IterableIterator<string> {\n return this.intervalCollections.keys();\n }\n\n protected summarizeCore(serializer: IFluidSerializer): ISummaryTreeWithStats {\n const builder = new SummaryTreeBuilder();\n\n // conditionally write the interval collection blob\n // only if it has entries\n if (this.intervalCollections.size > 0) {\n builder.addBlob(snapshotFileName, this.intervalCollections.serialize(serializer));\n }\n\n builder.addWithStats(contentPath, this.summarizeMergeTree(serializer));\n\n return builder.getSummaryTree();\n }\n\n /**\n * Runs serializer over the GC data for this SharedMatrix.\n * All the IFluidHandle's represent routes to other objects.\n */\n protected processGCDataCore(serializer: SummarySerializer) {\n if (this.intervalCollections.size > 0) {\n this.intervalCollections.serialize(serializer);\n }\n\n this.client.serializeGCData(this.handle, serializer);\n }\n\n /**\n * Replace the range specified from start to end with the provided segment\n * This is done by inserting the segment at the end of the range, followed\n * by removing the contents of the range\n * For a zero or reverse range (start \\>= end), insert at end do not remove anything\n * @param start - The start of the range to replace\n * @param end - The end of the range to replace\n * @param segment - The segment that will replace the range\n */\n protected replaceRange(start: number, end: number, segment: ISegment) {\n // Insert at the max end of the range when start > end, but still remove the range later\n const insertIndex: number = Math.max(start, end);\n\n // Insert first, so local references can slide to the inserted seg if any\n const insert = this.client.insertSegmentLocal(insertIndex, segment);\n if (insert) {\n if (start < end) {\n const remove = this.client.removeRangeLocal(start, end);\n this.submitSequenceMessage(createGroupOp(insert, remove));\n } else {\n this.submitSequenceMessage(insert);\n }\n }\n }\n\n protected onConnect() {\n // Update merge tree collaboration information with new client ID and then resend pending ops\n this.client.startOrUpdateCollaboration(this.runtime.clientId);\n }\n\n protected onDisconnect() {}\n\n protected reSubmitCore(content: any, localOpMetadata: unknown) {\n if (!this.intervalCollections.trySubmitMessage(content, localOpMetadata as IMapMessageLocalMetadata)) {\n this.submitSequenceMessage(\n this.client.regeneratePendingOp(\n content as IMergeTreeOp,\n localOpMetadata as SegmentGroup | SegmentGroup[]));\n }\n }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n */\n protected async loadCore(storage: IChannelStorageService) {\n if (await storage.contains(snapshotFileName)) {\n const blob = await storage.readBlob(snapshotFileName);\n const header = bufferToString(blob, \"utf8\");\n this.intervalCollections.populate(header);\n }\n\n try {\n // this will load the header, and return a promise\n // that will resolve when the body is loaded\n // and the catchup ops are available.\n const { catchupOpsP } = await this.client.load(\n this.runtime,\n new ObjectStoragePartition(storage, contentPath),\n this.serializer);\n\n // setup a promise to process the\n // catch up ops, and finishing the loading process\n const loadCatchUpOps = catchupOpsP\n .then((msgs) => {\n msgs.forEach((m) => {\n const collabWindow = this.client.getCollabWindow();\n if (m.minimumSequenceNumber < collabWindow.minSeq\n || m.referenceSequenceNumber < collabWindow.minSeq\n || m.sequenceNumber <= collabWindow.minSeq\n || m.sequenceNumber <= collabWindow.currentSeq) {\n throw new Error(`Invalid catchup operations in snapshot: ${\n JSON.stringify({\n op: {\n seq: m.sequenceNumber,\n minSeq: m.minimumSequenceNumber,\n refSeq: m.referenceSequenceNumber,\n },\n collabWindow: {\n seq: collabWindow.currentSeq,\n minSeq: collabWindow.minSeq,\n },\n })}`);\n }\n this.processMergeTreeMsg(m);\n });\n this.loadFinished();\n })\n .catch((error) => {\n this.loadFinished(error);\n });\n if (this.dataStoreRuntime.options?.sequenceInitializeFromHeaderOnly !== true) {\n // if we not doing partial load, await the catch up ops,\n // and the finalization of the load\n await loadCatchUpOps;\n }\n } catch (error) {\n this.loadFinished(error);\n }\n }\n\n protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown) {\n // if loading isn't complete, we need to cache all\n // incoming ops to be applied after loading is complete\n if (this.deferIncomingOps) {\n assert(!local, 0x072 /* \"Unexpected local op when loading not finished\" */);\n this.loadedDeferredIncomingOps.push(message);\n } else {\n assert(message.type === MessageType.Operation, 0x073 /* \"Sequence message not operation\" */);\n\n const handled = this.intervalCollections.tryProcessMessage(\n message.contents,\n local,\n message,\n localOpMetadata,\n );\n\n if (!handled) {\n this.processMergeTreeMsg(message, local);\n }\n }\n }\n\n protected didAttach() {\n // If we are not local, and we've attached we need to start generating and sending ops\n // so start collaboration and provide a default client id incase we are not connected\n if (this.isAttached()) {\n this.client.startOrUpdateCollaboration(this.runtime.clientId ?? \"attached\");\n }\n }\n\n protected initializeLocalCore() {\n super.initializeLocalCore();\n this.loadFinished();\n }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}\n */\n protected applyStashedOp(content: any): unknown {\n return this.client.applyStashedOp(content);\n }\n\n private summarizeMergeTree(serializer: IFluidSerializer): ISummaryTreeWithStats {\n // Are we fully loaded? If not, things will go south\n assert(this.loadedDeferred.isCompleted, 0x074 /* \"Snapshot called when not fully loaded\" */);\n const minSeq = this.runtime.deltaManager.minimumSequenceNumber;\n\n this.processMinSequenceNumberChanged(minSeq);\n\n this.messagesSinceMSNChange.forEach((m) => { m.minimumSequenceNumber = minSeq; });\n\n return this.client.summarize(this.runtime, this.handle, serializer, this.messagesSinceMSNChange);\n }\n\n private processMergeTreeMsg(rawMessage: ISequencedDocumentMessage, local?: boolean) {\n const message = parseHandles(rawMessage, this.serializer);\n\n const ops: IMergeTreeDeltaOp[] = [];\n function transformOps(event: SequenceDeltaEvent) {\n ops.push(...SharedSegmentSequence.createOpsFromDelta(event));\n }\n const needsTransformation = message.referenceSequenceNumber !== message.sequenceNumber - 1;\n let stashMessage: Readonly<ISequencedDocumentMessage> = message;\n if (this.runtime.options?.newMergeTreeSnapshotFormat !== true) {\n if (needsTransformation) {\n this.on(\"sequenceDelta\", transformOps);\n }\n }\n\n this.client.applyMsg(message, local);\n\n if (this.runtime.options?.newMergeTreeSnapshotFormat !== true) {\n if (needsTransformation) {\n this.removeListener(\"sequenceDelta\", transformOps);\n // shallow clone the message as we only overwrite top level properties,\n // like referenceSequenceNumber and content only\n stashMessage = {\n ... message,\n referenceSequenceNumber: stashMessage.sequenceNumber - 1,\n contents: ops.length !== 1 ? createGroupOp(...ops) : ops[0],\n };\n }\n\n this.messagesSinceMSNChange.push(stashMessage);\n\n // Do GC every once in a while...\n if (this.messagesSinceMSNChange.length > 20\n && this.messagesSinceMSNChange[20].sequenceNumber < message.minimumSequenceNumber) {\n this.processMinSequenceNumberChanged(message.minimumSequenceNumber);\n }\n }\n }\n\n private getIntervalCollectionPath(label: string) {\n return `intervalCollections/${label}`;\n }\n\n private processMinSequenceNumberChanged(minSeq: number) {\n let index = 0;\n for (; index < this.messagesSinceMSNChange.length; index++) {\n if (this.messagesSinceMSNChange[index].sequenceNumber > minSeq) {\n break;\n }\n }\n if (index !== 0) {\n this.messagesSinceMSNChange = this.messagesSinceMSNChange.slice(index);\n }\n }\n\n private loadFinished(error?: any) {\n if (!this.loadedDeferred.isCompleted) {\n // Initialize the interval collections\n this.initializeIntervalCollections();\n if (error) {\n this.loadedDeferred.reject(error);\n throw error;\n } else {\n // it is important this series remains synchronous\n // first we stop deferring incoming ops, and apply then all\n this.deferIncomingOps = false;\n while (this.loadedDeferredIncomingOps.length > 0) {\n this.processCore(this.loadedDeferredIncomingOps.shift(), false, undefined);\n }\n // then resolve the loaded promise\n // and resubmit all the outstanding ops, as the snapshot\n // is fully loaded, and all outstanding ops are applied\n this.loadedDeferred.resolve();\n\n while (this.loadedDeferredOutgoingOps.length > 0) {\n const opData = this.loadedDeferredOutgoingOps.shift();\n this.reSubmitCore(opData[0], opData[1]);\n }\n }\n }\n }\n\n private initializeIntervalCollections() {\n // Listen and initialize new SharedIntervalCollections\n this.intervalCollections.eventEmitter.on(\"create\", ({ key, previousValue }: IValueChanged, local: boolean) => {\n const intervalCollection = this.intervalCollections.get(key);\n if (!intervalCollection.attached) {\n intervalCollection.attachGraph(this.client, key);\n }\n assert(previousValue === undefined, 0x2c1 /* \"Creating an interval collection that already exists?\" */);\n this.emit(\"createIntervalCollection\", key, local, this);\n });\n\n // Initialize existing SharedIntervalCollections\n for (const key of this.intervalCollections.keys()) {\n const intervalCollection = this.intervalCollections.get(key);\n intervalCollection.attachGraph(this.client, key);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../src/sequence.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 */\nimport { Deferred, bufferToString, assert } from \"@fluidframework/common-utils\";\nimport { ChildLogger } from \"@fluidframework/telemetry-utils\";\nimport {\n ISequencedDocumentMessage,\n MessageType,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n IChannelAttributes,\n IFluidDataStoreRuntime,\n IChannelStorageService,\n} from \"@fluidframework/datastore-definitions\";\nimport {\n Client,\n createAnnotateRangeOp,\n createGroupOp,\n createInsertOp,\n createRemoveRangeOp,\n ICombiningOp,\n IJSONSegment,\n IMergeTreeAnnotateMsg,\n IMergeTreeDeltaOp,\n IMergeTreeGroupMsg,\n IMergeTreeOp,\n IMergeTreeRemoveMsg,\n IRelativePosition,\n ISegment,\n ISegmentAction,\n LocalReference,\n matchProperties,\n MergeTreeDeltaType,\n PropertySet,\n RangeStackMap,\n ReferencePosition,\n ReferenceType,\n SegmentGroup,\n} from \"@fluidframework/merge-tree\";\nimport { ObjectStoragePartition, SummaryTreeBuilder } from \"@fluidframework/runtime-utils\";\nimport {\n IFluidSerializer,\n makeHandlesSerializable,\n parseHandles,\n SharedObject,\n ISharedObjectEvents,\n SummarySerializer,\n} from \"@fluidframework/shared-object-base\";\nimport { IEventThisPlaceHolder } from \"@fluidframework/common-definitions\";\nimport { ISummaryTreeWithStats, ITelemetryContext } from \"@fluidframework/runtime-definitions\";\n\nimport {\n IntervalCollection,\n SequenceInterval,\n SequenceIntervalCollectionValueType,\n} from \"./intervalCollection\";\nimport { IMapMessageLocalMetadata, DefaultMap } from \"./defaultMap\";\nimport { IValueChanged } from \"./defaultMapInterfaces\";\nimport { SequenceDeltaEvent, SequenceMaintenanceEvent } from \"./sequenceDeltaEvent\";\nimport { ISharedIntervalCollection } from \"./sharedIntervalCollection\";\n\nconst snapshotFileName = \"header\";\nconst contentPath = \"content\";\n\n/**\n * Events emitted in response to changes to the sequence data.\n *\n * ### \"sequenceDelta\"\n *\n * The sequenceDelta event is emitted when segments are inserted, annotated, or removed.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n *\n * ### \"maintenance\"\n *\n * The maintenance event is emitted when segments are modified during merge-tree maintenance.\n *\n * #### Listener signature\n *\n * ```typescript\n * (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void\n * ```\n * - `event` - Various information on the segments that were modified.\n *\n * - `target` - The sequence itself.\n */\nexport interface ISharedSegmentSequenceEvents extends ISharedObjectEvents {\n (event: \"createIntervalCollection\",\n listener: (label: string, local: boolean, target: IEventThisPlaceHolder) => void);\n (event: \"sequenceDelta\", listener: (event: SequenceDeltaEvent, target: IEventThisPlaceHolder) => void);\n (event: \"maintenance\",\n listener: (event: SequenceMaintenanceEvent, target: IEventThisPlaceHolder) => void);\n}\n\nexport abstract class SharedSegmentSequence<T extends ISegment>\n extends SharedObject<ISharedSegmentSequenceEvents>\n implements ISharedIntervalCollection<SequenceInterval> {\n get loaded(): Promise<void> {\n return this.loadedDeferred.promise;\n }\n\n private static createOpsFromDelta(event: SequenceDeltaEvent): IMergeTreeDeltaOp[] {\n const ops: IMergeTreeDeltaOp[] = [];\n for (const r of event.ranges) {\n switch (event.deltaOperation) {\n case MergeTreeDeltaType.ANNOTATE: {\n const lastAnnotate = ops[ops.length - 1] as IMergeTreeAnnotateMsg;\n const props = {};\n for (const key of Object.keys(r.propertyDeltas)) {\n props[key] =\n r.segment.properties[key] === undefined ? null : r.segment.properties[key];\n }\n if (lastAnnotate && lastAnnotate.pos2 === r.position &&\n matchProperties(lastAnnotate.props, props)) {\n lastAnnotate.pos2 += r.segment.cachedLength;\n } else {\n ops.push(createAnnotateRangeOp(\n r.position,\n r.position + r.segment.cachedLength,\n props,\n undefined));\n }\n break;\n }\n\n case MergeTreeDeltaType.INSERT:\n ops.push(createInsertOp(\n r.position,\n r.segment.clone().toJSONObject()));\n break;\n\n case MergeTreeDeltaType.REMOVE: {\n const lastRem = ops[ops.length - 1] as IMergeTreeRemoveMsg;\n if (lastRem?.pos1 === r.position) {\n lastRem.pos2 += r.segment.cachedLength;\n } else {\n ops.push(createRemoveRangeOp(\n r.position,\n r.position + r.segment.cachedLength));\n }\n break;\n }\n\n default:\n }\n }\n return ops;\n }\n\n protected client: Client;\n // Deferred that triggers once the object is loaded\n protected loadedDeferred = new Deferred<void>();\n // cache out going ops created when partial loading\n private readonly loadedDeferredOutgoingOps:\n [IMergeTreeOp, SegmentGroup | SegmentGroup[]][] = [];\n // cache incoming ops that arrive when partial loading\n private deferIncomingOps = true;\n private readonly loadedDeferredIncomingOps: ISequencedDocumentMessage[] = [];\n\n private messagesSinceMSNChange: ISequencedDocumentMessage[] = [];\n private readonly intervalCollections: DefaultMap<IntervalCollection<SequenceInterval>>;\n constructor(\n private readonly dataStoreRuntime: IFluidDataStoreRuntime,\n public id: string,\n attributes: IChannelAttributes,\n public readonly segmentFromSpec: (spec: IJSONSegment) => ISegment,\n ) {\n super(id, dataStoreRuntime, attributes, \"fluid_sequence_\");\n\n this.loadedDeferred.promise.catch((error) => {\n this.logger.sendErrorEvent({ eventName: \"SequenceLoadFailed\" }, error);\n });\n\n this.client = new Client(\n segmentFromSpec,\n ChildLogger.create(this.logger, \"SharedSegmentSequence.MergeTreeClient\"),\n dataStoreRuntime.options);\n\n super.on(\"newListener\", (event) => {\n switch (event) {\n case \"sequenceDelta\":\n if (!this.client.mergeTreeDeltaCallback) {\n this.client.mergeTreeDeltaCallback = (opArgs, deltaArgs) => {\n this.emit(\"sequenceDelta\", new SequenceDeltaEvent(opArgs, deltaArgs, this.client), this);\n };\n }\n break;\n case \"maintenance\":\n if (!this.client.mergeTreeMaintenanceCallback) {\n this.client.mergeTreeMaintenanceCallback = (args, opArgs) => {\n this.emit(\"maintenance\", new SequenceMaintenanceEvent(opArgs, args, this.client), this);\n };\n }\n break;\n default:\n }\n });\n super.on(\"removeListener\", (event: string | symbol) => {\n switch (event) {\n case \"sequenceDelta\":\n if (super.listenerCount(event) === 0) {\n this.client.mergeTreeDeltaCallback = undefined;\n }\n break;\n case \"maintenance\":\n if (super.listenerCount(event) === 0) {\n this.client.mergeTreeMaintenanceCallback = undefined;\n }\n break;\n default:\n break;\n }\n });\n\n this.intervalCollections = new DefaultMap(\n this.serializer,\n this.handle,\n (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n new SequenceIntervalCollectionValueType(),\n );\n }\n\n /**\n * @param start - The inclusive start of the range to remove\n * @param end - The exclusive end of the range to remove\n */\n public removeRange(start: number, end: number) {\n const removeOp = this.client.removeRangeLocal(start, end);\n if (removeOp) {\n this.submitSequenceMessage(removeOp);\n }\n return removeOp;\n }\n\n public groupOperation(groupOp: IMergeTreeGroupMsg) {\n this.client.localTransaction(groupOp);\n this.submitSequenceMessage(groupOp);\n }\n\n public getContainingSegment(pos: number) {\n return this.client.getContainingSegment<T>(pos);\n }\n\n /**\n * Returns the length of the current sequence for the client\n */\n public getLength() {\n return this.client.getLength();\n }\n\n /**\n * Returns the current position of a segment, and -1 if the segment\n * does not exist in this sequence\n * @param segment - The segment to get the position of\n */\n public getPosition(segment: ISegment): number {\n return this.client.getPosition(segment);\n }\n\n /**\n * Annotates the range with the provided properties\n *\n * @param start - The inclusive start position of the range to annotate\n * @param end - The exclusive end position of the range to annotate\n * @param props - The properties to annotate the range with\n * @param combiningOp - Optional. Specifies how to combine values for the property, such as \"incr\" for increment.\n *\n */\n public annotateRange(\n start: number,\n end: number,\n props: PropertySet,\n combiningOp?: ICombiningOp) {\n const annotateOp =\n this.client.annotateRangeLocal(start, end, props, combiningOp);\n if (annotateOp) {\n this.submitSequenceMessage(annotateOp);\n }\n }\n\n public getPropertiesAtPosition(pos: number) {\n return this.client.getPropertiesAtPosition(pos);\n }\n\n public getRangeExtentsOfPosition(pos: number) {\n return this.client.getRangeExtentsOfPosition(pos);\n }\n\n /**\n * @deprecated - use createLocalReferencePosition\n */\n public createPositionReference(\n segment: T,\n offset: number,\n refType: ReferenceType): LocalReference {\n const lref = new LocalReference(this.client, segment, offset, refType);\n if (refType !== ReferenceType.Transient) {\n this.addLocalReference(lref);\n }\n return lref;\n }\n\n public createLocalReferencePosition(\n segment: T,\n offset: number,\n refType: ReferenceType,\n properties: PropertySet | undefined): ReferencePosition {\n return this.client.createLocalReferencePosition(\n segment,\n offset,\n refType,\n properties);\n }\n\n /**\n * @deprecated - use localReferencePositionToPosition\n */\n public localRefToPos(localRef: LocalReference) {\n return this.client.localReferencePositionToPosition(localRef);\n }\n\n public localReferencePositionToPosition(lref: ReferencePosition): number {\n return this.client.localReferencePositionToPosition(lref);\n }\n\n /**\n * Resolves a remote client's position against the local sequence\n * and returns the remote client's position relative to the local\n * sequence. The client ref seq must be above the minimum sequence number\n * or the return value will be undefined.\n * Generally this method is used in conjunction with signals which provide\n * point in time values for the below parameters, and is useful for things\n * like displaying user position. It should not be used with persisted values\n * as persisted values will quickly become invalid as the remoteClientRefSeq\n * moves below the minimum sequence number\n * @param remoteClientPosition - The remote client's position to resolve\n * @param remoteClientRefSeq - The reference sequence number of the remote client\n * @param remoteClientId - The client id of the remote client\n */\n public resolveRemoteClientPosition(\n remoteClientPosition: number,\n remoteClientRefSeq: number,\n remoteClientId: string): number {\n return this.client.resolveRemoteClientPosition(\n remoteClientPosition,\n remoteClientRefSeq,\n remoteClientId);\n }\n\n public submitSequenceMessage(message: IMergeTreeOp) {\n if (!this.isAttached()) {\n return;\n }\n const translated = makeHandlesSerializable(message, this.serializer, this.handle);\n const metadata = this.client.peekPendingSegmentGroups(\n message.type === MergeTreeDeltaType.GROUP ? message.ops.length : 1);\n\n // if loading isn't complete, we need to cache\n // local ops until loading is complete, and then\n // they will be resent\n if (!this.loadedDeferred.isCompleted) {\n this.loadedDeferredOutgoingOps.push([translated, metadata]);\n } else {\n this.submitLocalMessage(translated, metadata);\n }\n }\n\n /**\n * @deprecated - use createLocalReferencePosition\n */\n public addLocalReference(lref: LocalReference) {\n return this.client.addLocalReference(lref);\n }\n\n /**\n * @deprecated - use removeLocalReferencePosition\n */\n public removeLocalReference(lref: LocalReference) {\n return this.client.removeLocalReferencePosition(lref);\n }\n\n public removeLocalReferencePosition(lref: ReferencePosition) {\n return this.client.removeLocalReferencePosition(lref);\n }\n\n /**\n * Given a position specified relative to a marker id, lookup the marker\n * and convert the position to a character position.\n * @param relativePos - Id of marker (may be indirect) and whether position is before or after marker.\n */\n public posFromRelativePos(relativePos: IRelativePosition) {\n return this.client.posFromRelativePos(relativePos);\n }\n\n /**\n * Walk the underlying segments of the sequence.\n * The walked segments may extend beyond the range\n * if the segments cross the ranges start or end boundaries.\n * Set split range to true to ensure only segments within the\n * range are walked.\n *\n * @param handler - The function to handle each segment\n * @param start - Optional. The start of range walk.\n * @param end - Optional. The end of range walk\n * @param accum - Optional. An object that will be passed to the handler for accumulation\n * @param splitRange - Optional. Splits boundary segments on the range boundaries\n */\n public walkSegments<TClientData>(\n handler: ISegmentAction<TClientData>,\n start?: number, end?: number, accum?: TClientData,\n splitRange: boolean = false) {\n return this.client.walkSegments<TClientData>(handler, start, end, accum, splitRange);\n }\n\n public getStackContext(startPos: number, rangeLabels: string[]): RangeStackMap {\n return this.client.getStackContext(startPos, rangeLabels);\n }\n\n public getCurrentSeq() {\n return this.client.getCurrentSeq();\n }\n\n public insertAtReferencePosition(pos: ReferencePosition, segment: T) {\n const insertOp = this.client.insertAtReferencePositionLocal(pos, segment);\n if (insertOp) {\n this.submitSequenceMessage(insertOp);\n }\n }\n\n /**\n * @deprecated - IntervalCollections are created on a first-write wins basis, and concurrent creates\n * are supported. Use `getIntervalCollection` instead.\n */\n public async waitIntervalCollection(\n label: string,\n ): Promise<IntervalCollection<SequenceInterval>> {\n return this.intervalCollections.get(this.getIntervalCollectionPath(label));\n }\n\n public getIntervalCollection(label: string): IntervalCollection<SequenceInterval> {\n const labelPath = this.getIntervalCollectionPath(label);\n const sharedCollection = this.intervalCollections.get(labelPath);\n return sharedCollection;\n }\n\n /**\n * @returns an iterable object that enumerates the IntervalCollection labels\n * Usage:\n * const iter = this.getIntervalCollectionKeys();\n * for (key of iter)\n * const collection = this.getIntervalCollection(key);\n * ...\n */\n public getIntervalCollectionLabels(): IterableIterator<string> {\n return this.intervalCollections.keys();\n }\n\n protected summarizeCore(\n serializer: IFluidSerializer,\n telemetryContext?: ITelemetryContext,\n ): ISummaryTreeWithStats {\n const builder = new SummaryTreeBuilder();\n\n // conditionally write the interval collection blob\n // only if it has entries\n if (this.intervalCollections.size > 0) {\n builder.addBlob(snapshotFileName, this.intervalCollections.serialize(serializer));\n }\n\n builder.addWithStats(contentPath, this.summarizeMergeTree(serializer));\n\n return builder.getSummaryTree();\n }\n\n /**\n * Runs serializer over the GC data for this SharedMatrix.\n * All the IFluidHandle's represent routes to other objects.\n */\n protected processGCDataCore(serializer: SummarySerializer) {\n if (this.intervalCollections.size > 0) {\n this.intervalCollections.serialize(serializer);\n }\n\n this.client.serializeGCData(this.handle, serializer);\n }\n\n /**\n * Replace the range specified from start to end with the provided segment\n * This is done by inserting the segment at the end of the range, followed\n * by removing the contents of the range\n * For a zero or reverse range (start \\>= end), insert at end do not remove anything\n * @param start - The start of the range to replace\n * @param end - The end of the range to replace\n * @param segment - The segment that will replace the range\n */\n protected replaceRange(start: number, end: number, segment: ISegment) {\n // Insert at the max end of the range when start > end, but still remove the range later\n const insertIndex: number = Math.max(start, end);\n\n // Insert first, so local references can slide to the inserted seg if any\n const insert = this.client.insertSegmentLocal(insertIndex, segment);\n if (insert) {\n if (start < end) {\n const remove = this.client.removeRangeLocal(start, end);\n this.submitSequenceMessage(createGroupOp(insert, remove));\n } else {\n this.submitSequenceMessage(insert);\n }\n }\n }\n\n protected onConnect() {\n // Update merge tree collaboration information with new client ID and then resend pending ops\n this.client.startOrUpdateCollaboration(this.runtime.clientId);\n }\n\n protected onDisconnect() { }\n\n protected reSubmitCore(content: any, localOpMetadata: unknown) {\n if (!this.intervalCollections.trySubmitMessage(content, localOpMetadata as IMapMessageLocalMetadata)) {\n this.submitSequenceMessage(\n this.client.regeneratePendingOp(\n content as IMergeTreeOp,\n localOpMetadata as SegmentGroup | SegmentGroup[]));\n }\n }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n */\n protected async loadCore(storage: IChannelStorageService) {\n if (await storage.contains(snapshotFileName)) {\n const blob = await storage.readBlob(snapshotFileName);\n const header = bufferToString(blob, \"utf8\");\n this.intervalCollections.populate(header);\n }\n\n try {\n // this will load the header, and return a promise\n // that will resolve when the body is loaded\n // and the catchup ops are available.\n const { catchupOpsP } = await this.client.load(\n this.runtime,\n new ObjectStoragePartition(storage, contentPath),\n this.serializer);\n\n // setup a promise to process the\n // catch up ops, and finishing the loading process\n const loadCatchUpOps = catchupOpsP\n .then((msgs) => {\n msgs.forEach((m) => {\n const collabWindow = this.client.getCollabWindow();\n if (m.minimumSequenceNumber < collabWindow.minSeq\n || m.referenceSequenceNumber < collabWindow.minSeq\n || m.sequenceNumber <= collabWindow.minSeq\n || m.sequenceNumber <= collabWindow.currentSeq) {\n throw new Error(`Invalid catchup operations in snapshot: ${JSON.stringify({\n op: {\n seq: m.sequenceNumber,\n minSeq: m.minimumSequenceNumber,\n refSeq: m.referenceSequenceNumber,\n },\n collabWindow: {\n seq: collabWindow.currentSeq,\n minSeq: collabWindow.minSeq,\n },\n })}`);\n }\n this.processMergeTreeMsg(m);\n });\n this.loadFinished();\n })\n .catch((error) => {\n this.loadFinished(error);\n });\n if (this.dataStoreRuntime.options?.sequenceInitializeFromHeaderOnly !== true) {\n // if we not doing partial load, await the catch up ops,\n // and the finalization of the load\n await loadCatchUpOps;\n }\n } catch (error) {\n this.loadFinished(error);\n }\n }\n\n protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown) {\n // if loading isn't complete, we need to cache all\n // incoming ops to be applied after loading is complete\n if (this.deferIncomingOps) {\n assert(!local, 0x072 /* \"Unexpected local op when loading not finished\" */);\n this.loadedDeferredIncomingOps.push(message);\n } else {\n assert(message.type === MessageType.Operation, 0x073 /* \"Sequence message not operation\" */);\n\n const handled = this.intervalCollections.tryProcessMessage(\n message.contents,\n local,\n message,\n localOpMetadata,\n );\n\n if (!handled) {\n this.processMergeTreeMsg(message, local);\n }\n }\n }\n\n protected didAttach() {\n // If we are not local, and we've attached we need to start generating and sending ops\n // so start collaboration and provide a default client id incase we are not connected\n if (this.isAttached()) {\n this.client.startOrUpdateCollaboration(this.runtime.clientId ?? \"attached\");\n }\n }\n\n protected initializeLocalCore() {\n super.initializeLocalCore();\n this.loadFinished();\n }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}\n */\n protected applyStashedOp(content: any): unknown {\n return this.client.applyStashedOp(content);\n }\n\n private summarizeMergeTree(serializer: IFluidSerializer): ISummaryTreeWithStats {\n // Are we fully loaded? If not, things will go south\n assert(this.loadedDeferred.isCompleted, 0x074 /* \"Snapshot called when not fully loaded\" */);\n const minSeq = this.runtime.deltaManager.minimumSequenceNumber;\n\n this.processMinSequenceNumberChanged(minSeq);\n\n this.messagesSinceMSNChange.forEach((m) => { m.minimumSequenceNumber = minSeq; });\n\n return this.client.summarize(this.runtime, this.handle, serializer, this.messagesSinceMSNChange);\n }\n\n private processMergeTreeMsg(rawMessage: ISequencedDocumentMessage, local?: boolean) {\n const message = parseHandles(rawMessage, this.serializer);\n\n const ops: IMergeTreeDeltaOp[] = [];\n function transformOps(event: SequenceDeltaEvent) {\n ops.push(...SharedSegmentSequence.createOpsFromDelta(event));\n }\n const needsTransformation = message.referenceSequenceNumber !== message.sequenceNumber - 1;\n let stashMessage: Readonly<ISequencedDocumentMessage> = message;\n if (this.runtime.options?.newMergeTreeSnapshotFormat !== true) {\n if (needsTransformation) {\n this.on(\"sequenceDelta\", transformOps);\n }\n }\n\n this.client.applyMsg(message, local);\n\n if (this.runtime.options?.newMergeTreeSnapshotFormat !== true) {\n if (needsTransformation) {\n this.removeListener(\"sequenceDelta\", transformOps);\n // shallow clone the message as we only overwrite top level properties,\n // like referenceSequenceNumber and content only\n stashMessage = {\n ...message,\n referenceSequenceNumber: stashMessage.sequenceNumber - 1,\n contents: ops.length !== 1 ? createGroupOp(...ops) : ops[0],\n };\n }\n\n this.messagesSinceMSNChange.push(stashMessage);\n\n // Do GC every once in a while...\n if (this.messagesSinceMSNChange.length > 20\n && this.messagesSinceMSNChange[20].sequenceNumber < message.minimumSequenceNumber) {\n this.processMinSequenceNumberChanged(message.minimumSequenceNumber);\n }\n }\n }\n\n private getIntervalCollectionPath(label: string) {\n return `intervalCollections/${label}`;\n }\n\n private processMinSequenceNumberChanged(minSeq: number) {\n let index = 0;\n for (; index < this.messagesSinceMSNChange.length; index++) {\n if (this.messagesSinceMSNChange[index].sequenceNumber > minSeq) {\n break;\n }\n }\n if (index !== 0) {\n this.messagesSinceMSNChange = this.messagesSinceMSNChange.slice(index);\n }\n }\n\n private loadFinished(error?: any) {\n if (!this.loadedDeferred.isCompleted) {\n // Initialize the interval collections\n this.initializeIntervalCollections();\n if (error) {\n this.loadedDeferred.reject(error);\n throw error;\n } else {\n // it is important this series remains synchronous\n // first we stop deferring incoming ops, and apply then all\n this.deferIncomingOps = false;\n while (this.loadedDeferredIncomingOps.length > 0) {\n this.processCore(this.loadedDeferredIncomingOps.shift(), false, undefined);\n }\n // then resolve the loaded promise\n // and resubmit all the outstanding ops, as the snapshot\n // is fully loaded, and all outstanding ops are applied\n this.loadedDeferred.resolve();\n\n while (this.loadedDeferredOutgoingOps.length > 0) {\n const opData = this.loadedDeferredOutgoingOps.shift();\n this.reSubmitCore(opData[0], opData[1]);\n }\n }\n }\n }\n\n private initializeIntervalCollections() {\n // Listen and initialize new SharedIntervalCollections\n this.intervalCollections.eventEmitter.on(\"create\", ({ key, previousValue }: IValueChanged, local: boolean) => {\n const intervalCollection = this.intervalCollections.get(key);\n if (!intervalCollection.attached) {\n intervalCollection.attachGraph(this.client, key);\n }\n assert(previousValue === undefined, 0x2c1 /* \"Creating an interval collection that already exists?\" */);\n this.emit(\"createIntervalCollection\", key, local, this);\n });\n\n // Initialize existing SharedIntervalCollections\n for (const key of this.intervalCollections.keys()) {\n const intervalCollection = this.intervalCollections.get(key);\n intervalCollection.attachGraph(this.client, key);\n }\n }\n}\n"]}
@@ -54,7 +54,7 @@ class SharedIntervalCollection extends shared_object_base_1.SharedObject {
54
54
  * be provided
55
55
  */
56
56
  constructor(id, runtime, attributes) {
57
- super(id, runtime, attributes);
57
+ super(id, runtime, attributes, "fluid_sharedIntervalCollection_");
58
58
  this[_a] = "SharedIntervalCollection";
59
59
  this.intervalCollections = new defaultMap_1.DefaultMap(this.serializer, this.handle, (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata), new intervalCollection_1.IntervalCollectionValueType());
60
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sharedIntervalCollection.js","sourceRoot":"","sources":["../src/sharedIntervalCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { bufferToString } from \"@fluidframework/common-utils\";\nimport {\n IChannelAttributes,\n IFluidDataStoreRuntime,\n IChannelStorageService,\n IChannelServices,\n IChannelFactory,\n} from \"@fluidframework/datastore-definitions\";\nimport { ISequencedDocumentMessage, MessageType } from \"@fluidframework/protocol-definitions\";\nimport { ISummaryTreeWithStats } from \"@fluidframework/runtime-definitions\";\nimport {\n createSingleBlobSummary,\n IFluidSerializer,\n SharedObject,\n} from \"@fluidframework/shared-object-base\";\nimport {\n Interval,\n IntervalCollection,\n IntervalCollectionValueType,\n ISerializableInterval,\n} from \"./intervalCollection\";\nimport { IMapMessageLocalMetadata, DefaultMap } from \"./defaultMap\";\nimport { pkgVersion } from \"./packageVersion\";\n\nconst snapshotFileName = \"header\";\n\n/**\n * The factory that defines the SharedIntervalCollection\n * @deprecated - SharedIntervalCollection is not maintained and is planned to be removed.\n */\nexport class SharedIntervalCollectionFactory implements IChannelFactory {\n public static readonly Type = \"https://graph.microsoft.com/types/sharedIntervalCollection\";\n\n public static readonly Attributes: IChannelAttributes = {\n type: SharedIntervalCollectionFactory.Type,\n snapshotFormatVersion: \"0.1\",\n packageVersion: pkgVersion,\n };\n\n public get type() {\n return SharedIntervalCollectionFactory.Type;\n }\n\n public get attributes() {\n return SharedIntervalCollectionFactory.Attributes;\n }\n\n /**\n * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}\n */\n public async load(\n runtime: IFluidDataStoreRuntime,\n id: string,\n services: IChannelServices,\n attributes: IChannelAttributes): Promise<SharedIntervalCollection> {\n const map = new SharedIntervalCollection(id, runtime, attributes);\n await map.load(services);\n\n return map;\n }\n\n public create(runtime: IFluidDataStoreRuntime, id: string): SharedIntervalCollection {\n const map = new SharedIntervalCollection(\n id,\n runtime,\n this.attributes);\n map.initializeLocal();\n\n return map;\n }\n}\n\nexport interface ISharedIntervalCollection<TInterval extends ISerializableInterval> {\n waitIntervalCollection(label: string): Promise<IntervalCollection<TInterval>>;\n getIntervalCollection(label: string): IntervalCollection<TInterval>;\n}\n\n/**\n * @deprecated - SharedIntervalCollection is not maintained and is planned to be removed.\n */\nexport class SharedIntervalCollection\n extends SharedObject implements ISharedIntervalCollection<Interval> {\n /**\n * Create a SharedIntervalCollection\n *\n * @param runtime - data store runtime the new shared map belongs to\n * @param id - optional name of the shared map\n * @returns newly create shared map (but not attached yet)\n */\n public static create(runtime: IFluidDataStoreRuntime, id?: string) {\n return runtime.createChannel(id, SharedIntervalCollectionFactory.Type) as SharedIntervalCollection;\n }\n\n /**\n * Get a factory for SharedIntervalCollection to register with the data store.\n *\n * @returns a factory that creates and load SharedIntervalCollection\n */\n public static getFactory(): IChannelFactory {\n return new SharedIntervalCollectionFactory();\n }\n\n public readonly [Symbol.toStringTag]: string = \"SharedIntervalCollection\";\n private readonly intervalCollections: DefaultMap<IntervalCollection<Interval>>;\n\n /**\n * Constructs a new shared SharedIntervalCollection. If the object is non-local an id and service interfaces will\n * be provided\n */\n constructor(\n id: string,\n runtime: IFluidDataStoreRuntime,\n attributes: IChannelAttributes,\n ) {\n super(id, runtime, attributes);\n this.intervalCollections = new DefaultMap(\n this.serializer,\n this.handle,\n (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n new IntervalCollectionValueType(),\n );\n }\n\n /**\n * @deprecated - IntervalCollections are created on a first-write wins basis, and concurrent creates\n * are supported. Use `getIntervalCollection` instead.\n */\n public async waitIntervalCollection(\n label: string,\n ): Promise<IntervalCollection<Interval>> {\n return this.intervalCollections.get(this.getIntervalCollectionPath(label));\n }\n\n public getIntervalCollection(label: string): IntervalCollection<Interval> {\n const realLabel = this.getIntervalCollectionPath(label);\n const sharedCollection = this.intervalCollections.get(realLabel);\n return sharedCollection;\n }\n\n protected summarizeCore(serializer: IFluidSerializer): ISummaryTreeWithStats {\n return createSingleBlobSummary(snapshotFileName, this.intervalCollections.serialize(serializer));\n }\n\n protected reSubmitCore(content: any, localOpMetadata: unknown) {\n this.intervalCollections.trySubmitMessage(content, localOpMetadata as IMapMessageLocalMetadata);\n }\n\n protected onDisconnect() { }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n */\n protected async loadCore(storage: IChannelStorageService) {\n const blob = await storage.readBlob(snapshotFileName);\n const header = bufferToString(blob, \"utf8\");\n this.intervalCollections.populate(header);\n }\n\n protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown) {\n if (message.type === MessageType.Operation) {\n this.intervalCollections.tryProcessMessage(message.contents, local, message, localOpMetadata);\n }\n }\n\n /**\n * Creates the full path of the intervalCollection label\n * @param label - the incoming label\n */\n protected getIntervalCollectionPath(label: string): string {\n return label;\n }\n\n protected applyStashedOp() {\n throw new Error(\"not implemented\");\n }\n}\n"]}
1
+ {"version":3,"file":"sharedIntervalCollection.js","sourceRoot":"","sources":["../src/sharedIntervalCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { bufferToString } from \"@fluidframework/common-utils\";\nimport {\n IChannelAttributes,\n IFluidDataStoreRuntime,\n IChannelStorageService,\n IChannelServices,\n IChannelFactory,\n} from \"@fluidframework/datastore-definitions\";\nimport { ISequencedDocumentMessage, MessageType } from \"@fluidframework/protocol-definitions\";\nimport { ISummaryTreeWithStats } from \"@fluidframework/runtime-definitions\";\nimport {\n createSingleBlobSummary,\n IFluidSerializer,\n SharedObject,\n} from \"@fluidframework/shared-object-base\";\nimport {\n Interval,\n IntervalCollection,\n IntervalCollectionValueType,\n ISerializableInterval,\n} from \"./intervalCollection\";\nimport { IMapMessageLocalMetadata, DefaultMap } from \"./defaultMap\";\nimport { pkgVersion } from \"./packageVersion\";\n\nconst snapshotFileName = \"header\";\n\n/**\n * The factory that defines the SharedIntervalCollection\n * @deprecated - SharedIntervalCollection is not maintained and is planned to be removed.\n */\nexport class SharedIntervalCollectionFactory implements IChannelFactory {\n public static readonly Type = \"https://graph.microsoft.com/types/sharedIntervalCollection\";\n\n public static readonly Attributes: IChannelAttributes = {\n type: SharedIntervalCollectionFactory.Type,\n snapshotFormatVersion: \"0.1\",\n packageVersion: pkgVersion,\n };\n\n public get type() {\n return SharedIntervalCollectionFactory.Type;\n }\n\n public get attributes() {\n return SharedIntervalCollectionFactory.Attributes;\n }\n\n /**\n * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}\n */\n public async load(\n runtime: IFluidDataStoreRuntime,\n id: string,\n services: IChannelServices,\n attributes: IChannelAttributes): Promise<SharedIntervalCollection> {\n const map = new SharedIntervalCollection(id, runtime, attributes);\n await map.load(services);\n\n return map;\n }\n\n public create(runtime: IFluidDataStoreRuntime, id: string): SharedIntervalCollection {\n const map = new SharedIntervalCollection(\n id,\n runtime,\n this.attributes);\n map.initializeLocal();\n\n return map;\n }\n}\n\nexport interface ISharedIntervalCollection<TInterval extends ISerializableInterval> {\n waitIntervalCollection(label: string): Promise<IntervalCollection<TInterval>>;\n getIntervalCollection(label: string): IntervalCollection<TInterval>;\n}\n\n/**\n * @deprecated - SharedIntervalCollection is not maintained and is planned to be removed.\n */\nexport class SharedIntervalCollection\n extends SharedObject implements ISharedIntervalCollection<Interval> {\n /**\n * Create a SharedIntervalCollection\n *\n * @param runtime - data store runtime the new shared map belongs to\n * @param id - optional name of the shared map\n * @returns newly create shared map (but not attached yet)\n */\n public static create(runtime: IFluidDataStoreRuntime, id?: string) {\n return runtime.createChannel(id, SharedIntervalCollectionFactory.Type) as SharedIntervalCollection;\n }\n\n /**\n * Get a factory for SharedIntervalCollection to register with the data store.\n *\n * @returns a factory that creates and load SharedIntervalCollection\n */\n public static getFactory(): IChannelFactory {\n return new SharedIntervalCollectionFactory();\n }\n\n public readonly [Symbol.toStringTag]: string = \"SharedIntervalCollection\";\n private readonly intervalCollections: DefaultMap<IntervalCollection<Interval>>;\n\n /**\n * Constructs a new shared SharedIntervalCollection. If the object is non-local an id and service interfaces will\n * be provided\n */\n constructor(\n id: string,\n runtime: IFluidDataStoreRuntime,\n attributes: IChannelAttributes,\n ) {\n super(id, runtime, attributes, \"fluid_sharedIntervalCollection_\");\n this.intervalCollections = new DefaultMap(\n this.serializer,\n this.handle,\n (op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n new IntervalCollectionValueType(),\n );\n }\n\n /**\n * @deprecated - IntervalCollections are created on a first-write wins basis, and concurrent creates\n * are supported. Use `getIntervalCollection` instead.\n */\n public async waitIntervalCollection(\n label: string,\n ): Promise<IntervalCollection<Interval>> {\n return this.intervalCollections.get(this.getIntervalCollectionPath(label));\n }\n\n public getIntervalCollection(label: string): IntervalCollection<Interval> {\n const realLabel = this.getIntervalCollectionPath(label);\n const sharedCollection = this.intervalCollections.get(realLabel);\n return sharedCollection;\n }\n\n protected summarizeCore(serializer: IFluidSerializer): ISummaryTreeWithStats {\n return createSingleBlobSummary(snapshotFileName, this.intervalCollections.serialize(serializer));\n }\n\n protected reSubmitCore(content: any, localOpMetadata: unknown) {\n this.intervalCollections.trySubmitMessage(content, localOpMetadata as IMapMessageLocalMetadata);\n }\n\n protected onDisconnect() { }\n\n /**\n * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n */\n protected async loadCore(storage: IChannelStorageService) {\n const blob = await storage.readBlob(snapshotFileName);\n const header = bufferToString(blob, \"utf8\");\n this.intervalCollections.populate(header);\n }\n\n protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown) {\n if (message.type === MessageType.Operation) {\n this.intervalCollections.tryProcessMessage(message.contents, local, message, localOpMetadata);\n }\n }\n\n /**\n * Creates the full path of the intervalCollection label\n * @param label - the incoming label\n */\n protected getIntervalCollectionPath(label: string): string {\n return label;\n }\n\n protected applyStashedOp() {\n throw new Error(\"not implemented\");\n }\n}\n"]}
@@ -10,7 +10,17 @@ import { IValueFactory, IValueOpEmitter, IValueOperation, IValueType } from "./d
10
10
  export declare enum IntervalType {
11
11
  Simple = 0,
12
12
  Nest = 1,
13
+ /**
14
+ * SlideOnRemove indicates that the ends of the interval will slide if the segment
15
+ * they reference is removed and acked.
16
+ * See `packages\dds\merge-tree\REFERENCEPOSITIONS.md` for details
17
+ * SlideOnRemove is the default interval behavior and does not need to be specified.
18
+ */
13
19
  SlideOnRemove = 2,
20
+ /**
21
+ * @internal
22
+ * A temporary interval, used internally
23
+ */
14
24
  Transient = 4
15
25
  }
16
26
  export interface ISerializedInterval {
@@ -145,6 +155,14 @@ export declare class IntervalCollection<TInterval extends ISerializableInterval>
145
155
  constructor(helpers: IIntervalHelpers<TInterval>, requiresClient: boolean, emitter: IValueOpEmitter, serializedIntervals: ISerializedInterval[]);
146
156
  attachGraph(client: Client, label: string): void;
147
157
  getIntervalById(id: string): TInterval;
158
+ /**
159
+ * Create a new interval and add it to the collection
160
+ * @param start - interval start position
161
+ * @param end - interval end position
162
+ * @param intervalType - type of the interval. All intervals are SlideOnRemove. Intervals may not be Transient.
163
+ * @param props - properties of the interval
164
+ * @returns - the created interval
165
+ */
148
166
  add(start: number, end: number, intervalType: IntervalType, props?: PropertySet): TInterval;
149
167
  private deleteExistingInterval;
150
168
  removeIntervalById(id: string): TInterval;
@@ -162,6 +180,9 @@ export declare class IntervalCollection<TInterval extends ISerializableInterval>
162
180
  ackChange(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage): void;
163
181
  addConflictResolver(conflictResolver: IntervalConflictResolver<TInterval>): void;
164
182
  attachDeserializer(onDeserialize: DeserializeCallback): void;
183
+ private getSlideToSegment;
184
+ private setSlideOnRemove;
185
+ private ackInterval;
165
186
  /** @deprecated - use ackAdd */
166
187
  addInternal(serializedInterval: ISerializedInterval, local: boolean, op: ISequencedDocumentMessage): TInterval;
167
188
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intervalCollection.d.ts","sourceRoot":"","sources":["../src/intervalCollection.ts"],"names":[],"mappings":"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"}
@@ -15,14 +15,25 @@ var __rest = (this && this.__rest) || function (s, e) {
15
15
  };
16
16
  /* eslint-disable no-bitwise */
17
17
  import { assert, TypedEventEmitter } from "@fluidframework/common-utils";
18
- import { addProperties, createMap, IntervalTree, LocalReference, PropertiesManager, RedBlackTree, ReferenceType, reservedRangeLabelsKey, UnassignedSequenceNumber, } from "@fluidframework/merge-tree";
18
+ import { UsageError } from "@fluidframework/container-utils";
19
+ import { addProperties, createMap, IntervalTree, LocalReference, MergeTreeDeltaType, PropertiesManager, RedBlackTree, ReferenceType, refTypeIncludesFlag, reservedRangeLabelsKey, UnassignedSequenceNumber, } from "@fluidframework/merge-tree";
19
20
  import { v4 as uuid } from "uuid";
20
21
  const reservedIntervalIdKey = "intervalId";
21
22
  export var IntervalType;
22
23
  (function (IntervalType) {
23
24
  IntervalType[IntervalType["Simple"] = 0] = "Simple";
24
25
  IntervalType[IntervalType["Nest"] = 1] = "Nest";
26
+ /**
27
+ * SlideOnRemove indicates that the ends of the interval will slide if the segment
28
+ * they reference is removed and acked.
29
+ * See `packages\dds\merge-tree\REFERENCEPOSITIONS.md` for details
30
+ * SlideOnRemove is the default interval behavior and does not need to be specified.
31
+ */
25
32
  IntervalType[IntervalType["SlideOnRemove"] = 2] = "SlideOnRemove";
33
+ /**
34
+ * @internal
35
+ * A temporary interval, used internally
36
+ */
26
37
  IntervalType[IntervalType["Transient"] = 4] = "Transient";
27
38
  })(IntervalType || (IntervalType = {}));
28
39
  export class Interval {
@@ -229,46 +240,66 @@ export class SequenceInterval {
229
240
  return newInterval;
230
241
  }
231
242
  }
232
- function createPositionReference(client, pos, refType, op) {
233
- const segoff = client.getContainingSegment(pos, op);
234
- if (segoff === null || segoff === void 0 ? void 0 : segoff.segment) {
235
- const lref = new LocalReference(client, segoff.segment, segoff.offset, refType);
236
- if (refType !== ReferenceType.Transient) {
237
- client.addLocalReference(lref);
243
+ function createPositionReferenceFromSegoff(client, segoff, refType, op) {
244
+ if (segoff.segment) {
245
+ const ref = client.createLocalReferencePosition(segoff.segment, segoff.offset, refType, undefined);
246
+ return ref;
247
+ }
248
+ else {
249
+ if (!op && !refTypeIncludesFlag(refType, ReferenceType.Transient)) {
250
+ throw new UsageError("Non-transient references need segment");
238
251
  }
239
- return lref;
252
+ return new LocalReference(client, undefined, 0, refType);
253
+ }
254
+ }
255
+ function createPositionReference(client, pos, refType, op) {
256
+ let segoff;
257
+ if (op) {
258
+ assert((refType & ReferenceType.SlideOnRemove) !== 0, 0x2f5 /* op create references must be SlideOnRemove */);
259
+ segoff = client.getContainingSegment(pos, op);
260
+ segoff = client.getSlideToSegment(segoff);
261
+ }
262
+ else {
263
+ assert((refType & ReferenceType.SlideOnRemove) === 0, 0x2f6 /* SlideOnRemove references must be op created */);
264
+ segoff = client.getContainingSegment(pos);
240
265
  }
241
- return new LocalReference(client, undefined);
266
+ return createPositionReferenceFromSegoff(client, segoff, refType, op);
242
267
  }
243
268
  function createSequenceInterval(label, start, end, client, intervalType, op) {
244
269
  let beginRefType = ReferenceType.RangeBegin;
245
270
  let endRefType = ReferenceType.RangeEnd;
246
- if (intervalType === IntervalType.Nest) {
247
- beginRefType = ReferenceType.NestBegin;
248
- endRefType = ReferenceType.NestEnd;
249
- }
250
- else if (intervalType === IntervalType.Transient) {
271
+ if (intervalType === IntervalType.Transient) {
251
272
  beginRefType = ReferenceType.Transient;
252
273
  endRefType = ReferenceType.Transient;
253
274
  }
254
- // TODO: Should SlideOnRemove be the default behavior?
255
- if (intervalType & IntervalType.SlideOnRemove) {
256
- beginRefType |= ReferenceType.SlideOnRemove;
257
- endRefType |= ReferenceType.SlideOnRemove;
275
+ else {
276
+ if (intervalType === IntervalType.Nest) {
277
+ beginRefType = ReferenceType.NestBegin;
278
+ endRefType = ReferenceType.NestEnd;
279
+ }
280
+ // All non-transient interval references must eventually be SlideOnRemove
281
+ // To ensure eventual consistency, they must start as StayOnRemove when
282
+ // pending (created locally and creation op is not acked)
283
+ if (op) {
284
+ beginRefType |= ReferenceType.SlideOnRemove;
285
+ endRefType |= ReferenceType.SlideOnRemove;
286
+ }
287
+ else {
288
+ beginRefType |= ReferenceType.StayOnRemove;
289
+ endRefType |= ReferenceType.StayOnRemove;
290
+ }
258
291
  }
259
292
  const startLref = createPositionReference(client, start, beginRefType, op);
260
293
  const endLref = createPositionReference(client, end, endRefType, op);
261
- if (startLref && endLref) {
262
- startLref.pairedRef = endLref;
263
- endLref.pairedRef = startLref;
264
- const rangeProp = {
265
- [reservedRangeLabelsKey]: [label],
266
- };
267
- startLref.addProperties(rangeProp);
268
- endLref.addProperties(rangeProp);
269
- const ival = new SequenceInterval(startLref, endLref, intervalType, rangeProp);
270
- return ival;
271
- }
294
+ startLref.pairedRef = endLref;
295
+ endLref.pairedRef = startLref;
296
+ const rangeProp = {
297
+ [reservedRangeLabelsKey]: [label],
298
+ };
299
+ startLref.addProperties(rangeProp);
300
+ endLref.addProperties(rangeProp);
301
+ const ival = new SequenceInterval(startLref, endLref, intervalType, rangeProp);
302
+ return ival;
272
303
  }
273
304
  export function defaultIntervalConflictResolver(a, b) {
274
305
  a.addPropertySet(b.properties);
@@ -398,14 +429,12 @@ export class LocalIntervalCollection {
398
429
  }
399
430
  }
400
431
  findOverlappingIntervals(startPosition, endPosition) {
401
- if (!this.intervalTree.intervals.isEmpty()) {
402
- const transientInterval = this.helpers.create("transient", startPosition, endPosition, this.client, IntervalType.Transient);
403
- const overlappingIntervalNodes = this.intervalTree.match(transientInterval);
404
- return overlappingIntervalNodes.map((node) => node.key);
405
- }
406
- else {
432
+ if (endPosition < startPosition || this.intervalTree.intervals.isEmpty()) {
407
433
  return [];
408
434
  }
435
+ const transientInterval = this.helpers.create("transient", startPosition, endPosition, this.client, IntervalType.Transient);
436
+ const overlappingIntervalNodes = this.intervalTree.match(transientInterval);
437
+ return overlappingIntervalNodes.map((node) => node.key);
409
438
  }
410
439
  previousInterval(pos) {
411
440
  const transientInterval = this.helpers.create("transient", pos, pos, this.client, IntervalType.Transient);
@@ -653,11 +682,22 @@ export class IntervalCollection extends TypedEventEmitter {
653
682
  }
654
683
  return this.localCollection.getIntervalById(id);
655
684
  }
685
+ /**
686
+ * Create a new interval and add it to the collection
687
+ * @param start - interval start position
688
+ * @param end - interval end position
689
+ * @param intervalType - type of the interval. All intervals are SlideOnRemove. Intervals may not be Transient.
690
+ * @param props - properties of the interval
691
+ * @returns - the created interval
692
+ */
656
693
  add(start, end, intervalType, props) {
657
694
  var _a, _b;
658
695
  if (!this.attached) {
659
696
  throw new Error("attach must be called prior to adding intervals");
660
697
  }
698
+ if (intervalType & IntervalType.Transient) {
699
+ throw new Error("Can not add transient intervals");
700
+ }
661
701
  const interval = this.localCollection.addInterval(start, end, intervalType, props);
662
702
  if (interval) {
663
703
  const serializedInterval = {
@@ -816,13 +856,15 @@ export class IntervalCollection extends TypedEventEmitter {
816
856
  // This is an ack from the server. Remove the pending change.
817
857
  this.removePendingChange(serializedInterval);
818
858
  const id = serializedInterval.properties[reservedIntervalIdKey];
859
+ // Could store the interval in the localOpMetadata to avoid the getIntervalById call
819
860
  interval = this.getIntervalById(id);
820
861
  if (interval) {
821
862
  // Let the propertyManager prune its pending change-properties set.
822
863
  (_a = interval.propertyManager) === null || _a === void 0 ? void 0 : _a.ackPendingProperties({
823
- type: 2 /* ANNOTATE */,
864
+ type: MergeTreeDeltaType.ANNOTATE,
824
865
  props: serializedInterval.properties,
825
866
  });
867
+ this.ackInterval(interval, op);
826
868
  }
827
869
  }
828
870
  else {
@@ -877,6 +919,46 @@ export class IntervalCollection extends TypedEventEmitter {
877
919
  this.onDeserialize(interval);
878
920
  });
879
921
  }
922
+ getSlideToSegment(lref) {
923
+ const segoff = { segment: lref.segment, offset: lref.offset };
924
+ const newSegoff = this.client.getSlideToSegment(segoff);
925
+ const value = (segoff === newSegoff) ? undefined : newSegoff;
926
+ return value;
927
+ }
928
+ setSlideOnRemove(lref) {
929
+ let refType = lref.refType;
930
+ refType = refType & ~ReferenceType.StayOnRemove;
931
+ refType = refType | ReferenceType.SlideOnRemove;
932
+ lref.refType = refType;
933
+ }
934
+ ackInterval(interval, op) {
935
+ // in current usage, interval is always a SequenceInterval
936
+ if (!(interval instanceof SequenceInterval)) {
937
+ return;
938
+ }
939
+ if (!refTypeIncludesFlag(interval.start, ReferenceType.StayOnRemove)) {
940
+ return;
941
+ }
942
+ assert(refTypeIncludesFlag(interval.end, ReferenceType.StayOnRemove), 0x2f7 /* start and end must both be StayOnRemove */);
943
+ const newStart = this.getSlideToSegment(interval.start);
944
+ const newEnd = this.getSlideToSegment(interval.end);
945
+ this.setSlideOnRemove(interval.start);
946
+ this.setSlideOnRemove(interval.end);
947
+ if (newStart || newEnd) {
948
+ this.localCollection.removeExistingInterval(interval);
949
+ if (newStart) {
950
+ const props = interval.start.properties;
951
+ interval.start = createPositionReferenceFromSegoff(this.client, newStart, interval.start.refType, op);
952
+ interval.start.addProperties(props);
953
+ }
954
+ if (newEnd) {
955
+ const props = interval.end.properties;
956
+ interval.end = createPositionReferenceFromSegoff(this.client, newEnd, interval.end.refType, op);
957
+ interval.end.addProperties(props);
958
+ }
959
+ this.localCollection.add(interval);
960
+ }
961
+ }
880
962
  /** @deprecated - use ackAdd */
881
963
  addInternal(serializedInterval, local, op) {
882
964
  return this.ackAdd(serializedInterval, local, op);
@@ -884,8 +966,12 @@ export class IntervalCollection extends TypedEventEmitter {
884
966
  /** @internal */
885
967
  ackAdd(serializedInterval, local, op) {
886
968
  if (local) {
887
- // Local ops were applied when the message was created and there's no "pending add"
888
- // state to bookkeep
969
+ const id = serializedInterval.properties[reservedIntervalIdKey];
970
+ // Could store the interval in the localOpMetadata to avoid the getIntervalById call
971
+ const localInterval = this.getIntervalById(id);
972
+ if (localInterval) {
973
+ this.ackInterval(localInterval, op);
974
+ }
889
975
  return;
890
976
  }
891
977
  if (!this.attached) {