Skip to main content
Version: v1

MergeTree Class

Signature

export declare class MergeTree

Constructors

ConstructorDescription
(constructor)(options)Constructs a new instance of the MergeTree class

Static Properties

PropertyTypeDescription
options{ incrementalUpdate: boolean; insertAfterRemovedSegs: boolean; zamboniSegments: boolean; }

Properties

PropertyModifiersTypeDescription
collabWindowCollaborationWindow
lengthnumberReturns the current length of the MergeTree for the local client.
mergeTreeDeltaCallbackoptionalMergeTreeDeltaCallback
mergeTreeMaintenanceCallbackoptionalMergeTreeMaintenanceCallback
optionsoptionalPropertySet | undefined
pendingSegmentsList<SegmentGroup> | undefined
rootIMergeBlock

Methods

MethodAlertsReturn TypeDescription
ackPendingSegment(opArgs)voidAssign sequence number to existing segment; update partial lengths to reflect the change
addLocalReference(lref)Deprecatedvoid
addMinSeqListener(minRequired, onMinGE)void
annotateRange(start, end, props, combiningOp, refSeq, clientId, seq, opArgs)voidAnnotate a range with properties
blockClone(block, segments)MergeBlock
clone()void
createLocalReferencePosition(segment, offset, refType, properties, client)LocalReferencePosition
findTile(startPos, clientId, tileLabel, posPrecedesTile){ tile: ReferencePosition; pos: number; } | undefined
getCollabWindow()CollaborationWindow
getContainingSegment(pos, refSeq, clientId){ segment: T | undefined; offset: number | undefined; }
getLength(refSeq, clientId)number
getMarkerFromId(id)ISegment | undefined
getPosition(node, refSeq, clientId)number
getStackContext(startPos, clientId, rangeLabels)RangeStackMap
getStats()MergeTreeStats
incrementalBlockMap(stateStack)void
insertAtReferencePosition(referencePosition, insertSegment, opArgs)void
insertSegments(pos, segments, refSeq, clientId, seq, opArgs)void
localNetLength(segment)number
map(actions, refSeq, clientId, accum)void
mapIdToSegment(id, segment)void
mapRange(actions, refSeq, clientId, accum, start, end, splitRange)void
markRangeRemoved(start, end, refSeq, clientId, seq, overwrite, opArgs)void
posFromRelativePos(relativePos, refseq, clientId)numberGiven a position specified relative to a marker id, lookup the marker and convert the position to a character position.
referencePositionToLocalPosition(refPos, refSeq, clientId)number
reloadFromSegments(segments)void
removeLocalReference(segment, lref)Deprecatedvoid
removeLocalReferencePosition(lref)LocalReferencePosition | undefined
resolveRemoteClientPosition(remoteClientPosition, remoteClientRefSeq, remoteClientId)number | undefinedResolves a remote client's position against the local sequence and returns the remote client's position relative to the local sequence. The client ref seq must be above the minimum sequence number or the return value will be undefined. Generally this method is used in conjunction with signals which provide point in time values for the below parameters, and is useful for things like displaying user position. It should not be used with persisted values as persisted values will quickly become invalid as the remoteClientRefSeq moves below the minimum sequence number
setMinSeq(minSeq)void
startCollaboration(localClientId, minSeq, currentSeq)void
walkAllSegments(block, action, accum)boolean

Constructor Details

(constructor)

Constructs a new instance of the MergeTree class

Signature

constructor(options?: PropertySet | undefined);

Parameters

ParameterModifiersTypeDescription
optionsoptionalPropertySet | undefined

Property Details

collabWindow

Signature

readonly collabWindow: CollaborationWindow;

Type: CollaborationWindow

length

Returns the current length of the MergeTree for the local client.

Signature

get length(): number;

Type: number

mergeTreeDeltaCallback

Signature

mergeTreeDeltaCallback?: MergeTreeDeltaCallback;

Type: MergeTreeDeltaCallback

mergeTreeMaintenanceCallback

Signature

mergeTreeMaintenanceCallback?: MergeTreeMaintenanceCallback;

Type: MergeTreeMaintenanceCallback

options

Signature

options?: PropertySet | undefined;

Type: PropertySet | undefined

options

Signature

static readonly options: {
incrementalUpdate: boolean;
insertAfterRemovedSegs: boolean;
zamboniSegments: boolean;
};

Type: { incrementalUpdate: boolean; insertAfterRemovedSegs: boolean; zamboniSegments: boolean; }

pendingSegments

Signature

pendingSegments: List<SegmentGroup> | undefined;

Type: List<SegmentGroup> | undefined

root

Signature

root: IMergeBlock;

Type: IMergeBlock

Method Details

ackPendingSegment

Assign sequence number to existing segment; update partial lengths to reflect the change

Signature

ackPendingSegment(opArgs: IMergeTreeDeltaOpArgs): void;

Parameters

ParameterTypeDescription
opArgsIMergeTreeDeltaOpArgs

addLocalReference

This API is deprecated and will be removed in a future release.
  • use createLocalReference

Signature

addLocalReference(lref: LocalReference): void;

Parameters

ParameterTypeDescription
lrefLocalReference

addMinSeqListener

Signature

addMinSeqListener(minRequired: number, onMinGE: (minSeq: number) => void): void;

Parameters

ParameterTypeDescription
minRequirednumber
onMinGE(minSeq: number) => void

annotateRange

Annotate a range with properties

Signature

annotateRange(start: number, end: number, props: PropertySet, combiningOp: ICombiningOp | undefined, refSeq: number, clientId: number, seq: number, opArgs: IMergeTreeDeltaOpArgs): void;

Parameters

ParameterTypeDescription
startnumberThe inclusive start position of the range to annotate
endnumberThe exclusive end position of the range to annotate
propsPropertySetThe properties to annotate the range with
combiningOpICombiningOp | undefinedOptional. Specifies how to combine values for the property, such as "incr" for increment.
refSeqnumberThe reference sequence number to use to apply the annotate
clientIdnumberThe id of the client making the annotate
seqnumberThe sequence number of the annotate operation
opArgsIMergeTreeDeltaOpArgsThe op args for the annotate op. this is passed to the merge tree callback if there is one

blockClone

Signature

blockClone(block: IMergeBlock, segments?: ISegment[]): MergeBlock;

Parameters

ParameterModifiersTypeDescription
blockIMergeBlock
segmentsoptionalISegment[]

Returns

Return type: MergeBlock

clone

Signature

clone(): void;

createLocalReferencePosition

Signature

createLocalReferencePosition(segment: ISegment, offset: number | undefined, refType: ReferenceType, properties: PropertySet | undefined, client: Client): LocalReferencePosition;

Parameters

ParameterTypeDescription
segmentISegment
offsetnumber | undefined
refTypeReferenceType
propertiesPropertySet | undefined
clientClient

Returns

Return type: LocalReferencePosition

findTile

Signature

findTile(startPos: number, clientId: number, tileLabel: string, posPrecedesTile?: boolean): {
tile: ReferencePosition;
pos: number;
} | undefined;

Parameters

ParameterModifiersTypeDescription
startPosnumber
clientIdnumber
tileLabelstring
posPrecedesTileoptionalboolean

Returns

Return type: { tile: ReferencePosition; pos: number; } | undefined

getCollabWindow

Signature

getCollabWindow(): CollaborationWindow;

Returns

Return type: CollaborationWindow

getContainingSegment

Signature

getContainingSegment<T extends ISegment>(pos: number, refSeq: number, clientId: number): {
segment: T | undefined;
offset: number | undefined;
};
Type Parameters
ParameterConstraintDescription
TISegment

Parameters

ParameterTypeDescription
posnumber
refSeqnumber
clientIdnumber

Returns

Return type: { segment: T | undefined; offset: number | undefined; }

getLength

Signature

getLength(refSeq: number, clientId: number): number;

Parameters

ParameterTypeDescription
refSeqnumber
clientIdnumber

Returns

Return type: number

getMarkerFromId

Signature

getMarkerFromId(id: string): ISegment | undefined;

Parameters

ParameterTypeDescription
idstring

Returns

Return type: ISegment | undefined

getPosition

Signature

getPosition(node: MergeNode, refSeq: number, clientId: number): number;

Parameters

ParameterTypeDescription
nodeMergeNode
refSeqnumber
clientIdnumber

Returns

Return type: number

getStackContext

Signature

getStackContext(startPos: number, clientId: number, rangeLabels: string[]): RangeStackMap;

Parameters

ParameterTypeDescription
startPosnumber
clientIdnumber
rangeLabelsstring[]

Returns

Return type: RangeStackMap

getStats

Signature

getStats(): MergeTreeStats;

Returns

Return type: MergeTreeStats

incrementalBlockMap

Signature

incrementalBlockMap<TContext>(stateStack: Stack<IncrementalMapState<TContext>>): void;
Type Parameters
ParameterDescription
TContext

Parameters

ParameterTypeDescription
stateStackStack<IncrementalMapState<TContext>>

insertAtReferencePosition

Signature

insertAtReferencePosition(referencePosition: ReferencePosition, insertSegment: ISegment, opArgs: IMergeTreeDeltaOpArgs): void;

Parameters

ParameterTypeDescription
referencePositionReferencePosition
insertSegmentISegment
opArgsIMergeTreeDeltaOpArgs

insertSegments

Signature

insertSegments(pos: number, segments: ISegment[], refSeq: number, clientId: number, seq: number, opArgs: IMergeTreeDeltaOpArgs | undefined): void;

Parameters

ParameterTypeDescription
posnumber
segmentsISegment[]
refSeqnumber
clientIdnumber
seqnumber
opArgsIMergeTreeDeltaOpArgs | undefined

localNetLength

Signature

localNetLength(segment: ISegment): number;

Parameters

ParameterTypeDescription
segmentISegment

Returns

Return type: number

map

Signature

map<TClientData>(actions: SegmentActions<TClientData>, refSeq: number, clientId: number, accum: TClientData): void;
Type Parameters
ParameterDescription
TClientData

Parameters

ParameterTypeDescription
actionsSegmentActions<TClientData>
refSeqnumber
clientIdnumber
accumTClientData

mapIdToSegment

Signature

mapIdToSegment(id: string, segment: ISegment): void;

Parameters

ParameterTypeDescription
idstring
segmentISegment

mapRange

Signature

mapRange<TClientData>(actions: SegmentActions<TClientData>, refSeq: number, clientId: number, accum: TClientData, start?: number, end?: number, splitRange?: boolean): void;
Type Parameters
ParameterDescription
TClientData

Parameters

ParameterModifiersTypeDescription
actionsSegmentActions<TClientData>
refSeqnumber
clientIdnumber
accumTClientData
startoptionalnumber
endoptionalnumber
splitRangeoptionalboolean

markRangeRemoved

Signature

markRangeRemoved(start: number, end: number, refSeq: number, clientId: number, seq: number, overwrite: boolean | undefined, opArgs: IMergeTreeDeltaOpArgs): void;

Parameters

ParameterTypeDescription
startnumber
endnumber
refSeqnumber
clientIdnumber
seqnumber
overwriteboolean | undefined
opArgsIMergeTreeDeltaOpArgs

posFromRelativePos

Given a position specified relative to a marker id, lookup the marker and convert the position to a character position.

Signature

posFromRelativePos(relativePos: IRelativePosition, refseq?: number, clientId?: number): number;

Parameters

ParameterModifiersTypeDescription
relativePosIRelativePositionId of marker (may be indirect) and whether position is before or after marker.
refseqoptionalnumberThe reference sequence number at which to compute the position.
clientIdoptionalnumberThe client id with which to compute the position.

Returns

Return type: number

referencePositionToLocalPosition

Signature

referencePositionToLocalPosition(refPos: ReferencePosition, refSeq?: number, clientId?: number): number;

Parameters

ParameterModifiersTypeDescription
refPosReferencePosition
refSeqoptionalnumber
clientIdoptionalnumber

Returns

Return type: number

reloadFromSegments

Signature

reloadFromSegments(segments: ISegment[]): void;

Parameters

ParameterTypeDescription
segmentsISegment[]

removeLocalReference

This API is deprecated and will be removed in a future release.
  • use removeLocalReferencePosition

Signature

removeLocalReference(segment: ISegment, lref: LocalReference): void;

Parameters

ParameterTypeDescription
segmentISegment
lrefLocalReference

removeLocalReferencePosition

Signature

removeLocalReferencePosition(lref: LocalReferencePosition): LocalReferencePosition | undefined;

Parameters

ParameterTypeDescription
lrefLocalReferencePosition

Returns

Return type: LocalReferencePosition | undefined

resolveRemoteClientPosition

Resolves a remote client's position against the local sequence and returns the remote client's position relative to the local sequence. The client ref seq must be above the minimum sequence number or the return value will be undefined. Generally this method is used in conjunction with signals which provide point in time values for the below parameters, and is useful for things like displaying user position. It should not be used with persisted values as persisted values will quickly become invalid as the remoteClientRefSeq moves below the minimum sequence number

Signature

resolveRemoteClientPosition(remoteClientPosition: number, remoteClientRefSeq: number, remoteClientId: number): number | undefined;

Parameters

ParameterTypeDescription
remoteClientPositionnumberThe remote client's position to resolve
remoteClientRefSeqnumberThe reference sequence number of the remote client
remoteClientIdnumberThe client id of the remote client

Returns

Return type: number | undefined

setMinSeq

Signature

setMinSeq(minSeq: number): void;

Parameters

ParameterTypeDescription
minSeqnumber

startCollaboration

Signature

startCollaboration(localClientId: number, minSeq: number, currentSeq: number): void;

Parameters

ParameterTypeDescription
localClientIdnumber
minSeqnumber
currentSeqnumber

walkAllSegments

Signature

walkAllSegments<TClientData>(block: IMergeBlock, action: (segment: ISegment, accum?: TClientData) => boolean, accum?: TClientData): boolean;
Type Parameters
ParameterDescription
TClientData

Parameters

ParameterModifiersTypeDescription
blockIMergeBlock
action(segment: ISegment, accum?: TClientData) => boolean
accumoptionalTClientData

Returns

Return type: boolean