@fluidframework/merge-tree 2.1.0 → 2.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.
Files changed (152) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +2 -2
  3. package/api-report/merge-tree.legacy.alpha.api.md +47 -11
  4. package/dist/attributionCollection.d.ts.map +1 -1
  5. package/dist/attributionCollection.js +9 -2
  6. package/dist/attributionCollection.js.map +1 -1
  7. package/dist/attributionPolicy.d.ts.map +1 -1
  8. package/dist/attributionPolicy.js +5 -9
  9. package/dist/attributionPolicy.js.map +1 -1
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +18 -19
  12. package/dist/client.js.map +1 -1
  13. package/dist/index.d.ts +1 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +5 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/legacy.d.ts +4 -0
  18. package/dist/localReference.d.ts +6 -0
  19. package/dist/localReference.d.ts.map +1 -1
  20. package/dist/localReference.js.map +1 -1
  21. package/dist/mergeTree.d.ts +11 -1
  22. package/dist/mergeTree.d.ts.map +1 -1
  23. package/dist/mergeTree.js +51 -14
  24. package/dist/mergeTree.js.map +1 -1
  25. package/dist/mergeTreeNodes.d.ts +35 -1
  26. package/dist/mergeTreeNodes.d.ts.map +1 -1
  27. package/dist/mergeTreeNodes.js +35 -12
  28. package/dist/mergeTreeNodes.js.map +1 -1
  29. package/dist/properties.d.ts.map +1 -1
  30. package/dist/properties.js +7 -21
  31. package/dist/properties.js.map +1 -1
  32. package/dist/referencePositions.d.ts +6 -0
  33. package/dist/referencePositions.d.ts.map +1 -1
  34. package/dist/referencePositions.js.map +1 -1
  35. package/dist/segmentGroupCollection.d.ts +3 -0
  36. package/dist/segmentGroupCollection.d.ts.map +1 -1
  37. package/dist/segmentGroupCollection.js +3 -0
  38. package/dist/segmentGroupCollection.js.map +1 -1
  39. package/dist/segmentPropertiesManager.d.ts +8 -0
  40. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  41. package/dist/segmentPropertiesManager.js +11 -8
  42. package/dist/segmentPropertiesManager.js.map +1 -1
  43. package/dist/sequencePlace.d.ts +66 -0
  44. package/dist/sequencePlace.d.ts.map +1 -0
  45. package/dist/sequencePlace.js +41 -0
  46. package/dist/sequencePlace.js.map +1 -0
  47. package/dist/snapshotlegacy.js +1 -1
  48. package/dist/snapshotlegacy.js.map +1 -1
  49. package/dist/test/obliterate.rangeExpansion.spec.d.ts +6 -0
  50. package/dist/test/obliterate.rangeExpansion.spec.d.ts.map +1 -0
  51. package/dist/test/obliterate.rangeExpansion.spec.js +288 -0
  52. package/dist/test/obliterate.rangeExpansion.spec.js.map +1 -0
  53. package/dist/test/obliterate.reconnect.spec.js +5 -5
  54. package/dist/test/obliterate.reconnect.spec.js.map +1 -1
  55. package/dist/test/reconnectHelper.d.ts +3 -3
  56. package/dist/test/reconnectHelper.d.ts.map +1 -1
  57. package/dist/test/reconnectHelper.js +14 -3
  58. package/dist/test/reconnectHelper.js.map +1 -1
  59. package/dist/test/resetPendingSegmentsToOp.spec.js +12 -0
  60. package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  61. package/dist/test/testClient.d.ts +3 -3
  62. package/dist/test/testClient.d.ts.map +1 -1
  63. package/dist/test/testClient.js +4 -16
  64. package/dist/test/testClient.js.map +1 -1
  65. package/dist/test/text.js +1 -1
  66. package/dist/test/text.js.map +1 -1
  67. package/dist/textSegment.d.ts +2 -2
  68. package/dist/textSegment.d.ts.map +1 -1
  69. package/dist/textSegment.js +3 -7
  70. package/dist/textSegment.js.map +1 -1
  71. package/lib/attributionCollection.d.ts.map +1 -1
  72. package/lib/attributionCollection.js +9 -2
  73. package/lib/attributionCollection.js.map +1 -1
  74. package/lib/attributionPolicy.d.ts.map +1 -1
  75. package/lib/attributionPolicy.js +5 -9
  76. package/lib/attributionPolicy.js.map +1 -1
  77. package/lib/client.d.ts.map +1 -1
  78. package/lib/client.js +21 -22
  79. package/lib/client.js.map +1 -1
  80. package/lib/index.d.ts +1 -0
  81. package/lib/index.d.ts.map +1 -1
  82. package/lib/index.js +1 -0
  83. package/lib/index.js.map +1 -1
  84. package/lib/legacy.d.ts +4 -0
  85. package/lib/localReference.d.ts +6 -0
  86. package/lib/localReference.d.ts.map +1 -1
  87. package/lib/localReference.js.map +1 -1
  88. package/lib/mergeTree.d.ts +11 -1
  89. package/lib/mergeTree.d.ts.map +1 -1
  90. package/lib/mergeTree.js +49 -13
  91. package/lib/mergeTree.js.map +1 -1
  92. package/lib/mergeTreeNodes.d.ts +35 -1
  93. package/lib/mergeTreeNodes.d.ts.map +1 -1
  94. package/lib/mergeTreeNodes.js +35 -12
  95. package/lib/mergeTreeNodes.js.map +1 -1
  96. package/lib/properties.d.ts.map +1 -1
  97. package/lib/properties.js +7 -21
  98. package/lib/properties.js.map +1 -1
  99. package/lib/referencePositions.d.ts +6 -0
  100. package/lib/referencePositions.d.ts.map +1 -1
  101. package/lib/referencePositions.js.map +1 -1
  102. package/lib/segmentGroupCollection.d.ts +3 -0
  103. package/lib/segmentGroupCollection.d.ts.map +1 -1
  104. package/lib/segmentGroupCollection.js +3 -0
  105. package/lib/segmentGroupCollection.js.map +1 -1
  106. package/lib/segmentPropertiesManager.d.ts +8 -0
  107. package/lib/segmentPropertiesManager.d.ts.map +1 -1
  108. package/lib/segmentPropertiesManager.js +12 -9
  109. package/lib/segmentPropertiesManager.js.map +1 -1
  110. package/lib/sequencePlace.d.ts +66 -0
  111. package/lib/sequencePlace.d.ts.map +1 -0
  112. package/lib/sequencePlace.js +37 -0
  113. package/lib/sequencePlace.js.map +1 -0
  114. package/lib/snapshotlegacy.js +1 -1
  115. package/lib/snapshotlegacy.js.map +1 -1
  116. package/lib/test/obliterate.rangeExpansion.spec.d.ts +6 -0
  117. package/lib/test/obliterate.rangeExpansion.spec.d.ts.map +1 -0
  118. package/lib/test/obliterate.rangeExpansion.spec.js +286 -0
  119. package/lib/test/obliterate.rangeExpansion.spec.js.map +1 -0
  120. package/lib/test/obliterate.reconnect.spec.js +5 -5
  121. package/lib/test/obliterate.reconnect.spec.js.map +1 -1
  122. package/lib/test/reconnectHelper.d.ts +3 -3
  123. package/lib/test/reconnectHelper.d.ts.map +1 -1
  124. package/lib/test/reconnectHelper.js +14 -3
  125. package/lib/test/reconnectHelper.js.map +1 -1
  126. package/lib/test/resetPendingSegmentsToOp.spec.js +12 -0
  127. package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  128. package/lib/test/testClient.d.ts +3 -3
  129. package/lib/test/testClient.d.ts.map +1 -1
  130. package/lib/test/testClient.js +4 -16
  131. package/lib/test/testClient.js.map +1 -1
  132. package/lib/test/text.js +1 -1
  133. package/lib/test/text.js.map +1 -1
  134. package/lib/textSegment.d.ts +2 -2
  135. package/lib/textSegment.d.ts.map +1 -1
  136. package/lib/textSegment.js +3 -7
  137. package/lib/textSegment.js.map +1 -1
  138. package/package.json +19 -19
  139. package/src/attributionCollection.ts +12 -2
  140. package/src/attributionPolicy.ts +6 -7
  141. package/src/client.ts +28 -23
  142. package/src/index.ts +6 -0
  143. package/src/localReference.ts +8 -1
  144. package/src/mergeTree.ts +74 -17
  145. package/src/mergeTreeNodes.ts +66 -14
  146. package/src/properties.ts +7 -22
  147. package/src/referencePositions.ts +6 -0
  148. package/src/segmentGroupCollection.ts +3 -0
  149. package/src/segmentPropertiesManager.ts +13 -9
  150. package/src/sequencePlace.ts +89 -0
  151. package/src/snapshotlegacy.ts +1 -1
  152. package/src/textSegment.ts +8 -9
@@ -13,6 +13,7 @@ import { PropertySet, type MapLike } from "./properties.js";
13
13
  import { ReferencePosition } from "./referencePositions.js";
14
14
  import { SegmentGroupCollection } from "./segmentGroupCollection.js";
15
15
  import { PropertiesManager, PropertiesRollback } from "./segmentPropertiesManager.js";
16
+ import { Side } from "./sequencePlace.js";
16
17
  /**
17
18
  * Common properties for a node in a merge tree.
18
19
  * @legacy
@@ -136,6 +137,9 @@ export declare function toMoveInfo(maybe: Partial<IMoveInfo> | undefined): IMove
136
137
  */
137
138
  export interface ISegment extends IMergeNodeCommon, Partial<IRemovalInfo>, Partial<IMoveInfo> {
138
139
  readonly type: string;
140
+ /**
141
+ * @deprecated - This property should not be used externally and will be removed in a subsequent release.
142
+ */
139
143
  readonly segmentGroups: SegmentGroupCollection;
140
144
  readonly trackingCollection: TrackingGroupCollection;
141
145
  /**
@@ -170,6 +174,8 @@ export interface ISegment extends IMergeNodeCommon, Partial<IRemovalInfo>, Parti
170
174
  attribution?: IAttributionCollection<AttributionKey>;
171
175
  /**
172
176
  * Manages pending local state for properties on this segment.
177
+ *
178
+ * @deprecated - This property should not be used externally and will be removed in a subsequent release.
173
179
  */
174
180
  propertyManager?: PropertiesManager;
175
181
  /**
@@ -206,9 +212,19 @@ export interface ISegment extends IMergeNodeCommon, Partial<IRemovalInfo>, Parti
206
212
  * Properties that have been added to this segment via annotation.
207
213
  */
208
214
  properties?: PropertySet;
215
+ /**
216
+ * Stores side information passed to obliterate for the start of a range.
217
+ */
218
+ startSide?: Side.Before | Side.After;
219
+ /**
220
+ * Stores side information passed to obliterate for the end of a range.
221
+ */
222
+ endSide?: Side.Before | Side.After;
209
223
  /**
210
224
  * Add properties to this segment via annotation.
211
225
  *
226
+ * @deprecated - This function should not be used externally and will be removed in a subsequent release.
227
+ *
212
228
  * @remarks This function should not be called directly. Properties should
213
229
  * be added through the `annotateRange` functions.
214
230
  */
@@ -219,6 +235,7 @@ export interface ISegment extends IMergeNodeCommon, Partial<IRemovalInfo>, Parti
219
235
  splitAt(pos: number): ISegment | undefined;
220
236
  toJSONObject(): any;
221
237
  /**
238
+ * @deprecated - This function should not be used externally and will be removed in a subsequent release.
222
239
  * Acks the current segment against the segment group, op, and merge tree.
223
240
  *
224
241
  * @param segmentGroup - Pending segment group associated with this op.
@@ -366,10 +383,18 @@ export declare abstract class BaseSegment implements ISegment {
366
383
  index: number;
367
384
  ordinal: string;
368
385
  cachedLength: number;
386
+ /**
387
+ * {@inheritdoc ISegment.segmentGroups}
388
+ * @deprecated - This property should not be used externally and will be removed in a subsequent release.
389
+ */
369
390
  readonly segmentGroups: SegmentGroupCollection;
370
391
  readonly trackingCollection: TrackingGroupCollection;
371
392
  /***/
372
393
  attribution?: IAttributionCollection<AttributionKey>;
394
+ /**
395
+ * {@inheritdoc ISegment.propertyManager}
396
+ * @deprecated - This property should not be used externally and will be removed in a subsequent release.
397
+ */
373
398
  propertyManager?: PropertiesManager;
374
399
  properties?: PropertySet;
375
400
  localRefs?: LocalReferenceCollection;
@@ -377,6 +402,11 @@ export declare abstract class BaseSegment implements ISegment {
377
402
  localSeq?: number;
378
403
  localRemovedSeq?: number;
379
404
  localMovedSeq?: number;
405
+ constructor(properties?: PropertySet);
406
+ /**
407
+ * {@inheritdoc ISegment.addProperties}
408
+ * @deprecated - This function should not be used externally and will be removed in a subsequent release.
409
+ */
380
410
  addProperties(newProps: PropertySet, seq?: number, collaborating?: boolean, rollback?: PropertiesRollback): PropertySet;
381
411
  hasProperty(key: string): boolean;
382
412
  isLeaf(): this is ISegment;
@@ -384,6 +414,10 @@ export declare abstract class BaseSegment implements ISegment {
384
414
  canAppend(segment: ISegment): boolean;
385
415
  protected addSerializedProps(jseg: IJSONSegment): void;
386
416
  abstract toJSONObject(): any;
417
+ /**
418
+ * {@inheritdoc ISegment.ack}
419
+ * @deprecated - This function should not be used externally and will be removed in a subsequent release.
420
+ */
387
421
  ack(segmentGroup: SegmentGroup, opArgs: IMergeTreeDeltaOpArgs): boolean;
388
422
  splitAt(pos: number): ISegment | undefined;
389
423
  private copyPropertiesTo;
@@ -429,7 +463,7 @@ export declare class Marker extends BaseSegment implements ReferencePosition, IS
429
463
  static is(segment: ISegment): segment is Marker;
430
464
  readonly type = "Marker";
431
465
  static make(refType: ReferenceType, props?: PropertySet): Marker;
432
- constructor(refType: ReferenceType);
466
+ constructor(refType: ReferenceType, props?: PropertySet);
433
467
  toJSONObject(): IJSONMarkerSegment;
434
468
  static fromJSONObject(spec: IJSONSegment): Marker | undefined;
435
469
  clone(): Marker;
@@ -1 +1 @@
1
- {"version":3,"file":"mergeTreeNodes.d.ts","sourceRoot":"","sources":["../src/mergeTreeNodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mergeTreeNodes.d.ts","sourceRoot":"","sources":["../src/mergeTreeNodes.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,9 @@ const ops_js_1 = require("./ops.js");
14
14
  const ordinal_js_1 = require("./ordinal.js");
15
15
  const properties_js_1 = require("./properties.js");
16
16
  const referencePositions_js_1 = require("./referencePositions.js");
17
+ // eslint-disable-next-line import/no-deprecated
17
18
  const segmentGroupCollection_js_1 = require("./segmentGroupCollection.js");
19
+ // eslint-disable-next-line import/no-deprecated
18
20
  const segmentPropertiesManager_js_1 = require("./segmentPropertiesManager.js");
19
21
  /**
20
22
  * Returns the removal information for a segment.
@@ -106,16 +108,31 @@ exports.seqLTE = seqLTE;
106
108
  * @alpha
107
109
  */
108
110
  class BaseSegment {
109
- constructor() {
111
+ constructor(properties) {
110
112
  this.clientId = constants_js_1.LocalClientId;
111
113
  this.seq = constants_js_1.UniversalSequenceNumber;
112
114
  this.index = 0;
113
115
  this.ordinal = "";
114
116
  this.cachedLength = 0;
117
+ /**
118
+ * {@inheritdoc ISegment.segmentGroups}
119
+ * @deprecated - This property should not be used externally and will be removed in a subsequent release.
120
+ */
121
+ // eslint-disable-next-line import/no-deprecated
115
122
  this.segmentGroups = new segmentGroupCollection_js_1.SegmentGroupCollection(this);
116
123
  this.trackingCollection = new mergeTreeTracking_js_1.TrackingGroupCollection(this);
124
+ if (properties !== undefined) {
125
+ this.properties = (0, properties_js_1.clone)(properties);
126
+ }
117
127
  }
118
- addProperties(newProps, seq, collaborating, rollback = segmentPropertiesManager_js_1.PropertiesRollback.None) {
128
+ /**
129
+ * {@inheritdoc ISegment.addProperties}
130
+ * @deprecated - This function should not be used externally and will be removed in a subsequent release.
131
+ */
132
+ addProperties(newProps, seq, collaborating,
133
+ // eslint-disable-next-line import/no-deprecated
134
+ rollback = segmentPropertiesManager_js_1.PropertiesRollback.None) {
135
+ // eslint-disable-next-line import/no-deprecated
119
136
  this.propertyManager ?? (this.propertyManager = new segmentPropertiesManager_js_1.PropertiesManager());
120
137
  // A property set must be able to hold properties of any type, so the any is needed.
121
138
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -150,6 +167,10 @@ class BaseSegment {
150
167
  jseg.props = { ...this.properties };
151
168
  }
152
169
  }
170
+ /**
171
+ * {@inheritdoc ISegment.ack}
172
+ * @deprecated - This function should not be used externally and will be removed in a subsequent release.
173
+ */
153
174
  ack(segmentGroup, opArgs) {
154
175
  const currentSegmentGroup = this.segmentGroups.dequeue();
155
176
  (0, internal_1.assert)(currentSegmentGroup === segmentGroup, 0x043 /* "On ack, unexpected segmentGroup!" */);
@@ -234,9 +255,15 @@ class BaseSegment {
234
255
  return leafSegment;
235
256
  }
236
257
  copyPropertiesTo(other) {
237
- if (this.propertyManager && this.properties) {
238
- other.propertyManager = new segmentPropertiesManager_js_1.PropertiesManager();
239
- other.properties = this.propertyManager.copyTo(this.properties, other.properties, other.propertyManager);
258
+ if (this.properties !== undefined) {
259
+ if (this.propertyManager) {
260
+ // eslint-disable-next-line import/no-deprecated
261
+ other.propertyManager = new segmentPropertiesManager_js_1.PropertiesManager();
262
+ other.properties = this.propertyManager.copyTo(this.properties, other.properties, other.propertyManager);
263
+ }
264
+ else {
265
+ other.properties = (0, properties_js_1.clone)(this.properties);
266
+ }
240
267
  }
241
268
  }
242
269
  append(other) {
@@ -285,14 +312,10 @@ class Marker extends BaseSegment {
285
312
  return segment.type === Marker.type;
286
313
  }
287
314
  static make(refType, props) {
288
- const marker = new Marker(refType);
289
- if (props) {
290
- marker.addProperties(props);
291
- }
292
- return marker;
315
+ return new Marker(refType, props);
293
316
  }
294
- constructor(refType) {
295
- super();
317
+ constructor(refType, props) {
318
+ super(props);
296
319
  this.refType = refType;
297
320
  this.type = Marker.type;
298
321
  this.cachedLength = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"mergeTreeNodes.js","sourceRoot":"","sources":["../src/mergeTreeNodes.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 @typescript-eslint/no-non-null-assertion */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { AttributionKey } from \"@fluidframework/runtime-definitions/internal\";\n\nimport { IAttributionCollection } from \"./attributionCollection.js\";\nimport {\n\tLocalClientId,\n\tUnassignedSequenceNumber,\n\tUniversalSequenceNumber,\n} from \"./constants.js\";\nimport { LocalReferenceCollection } from \"./localReference.js\";\nimport { IMergeTreeDeltaOpArgs } from \"./mergeTreeDeltaCallback.js\";\nimport { TrackingGroupCollection } from \"./mergeTreeTracking.js\";\nimport { IJSONSegment, IMarkerDef, MergeTreeDeltaType, ReferenceType } from \"./ops.js\";\nimport { computeHierarchicalOrdinal } from \"./ordinal.js\";\nimport type { PartialSequenceLengths } from \"./partialLengths.js\";\nimport { PropertySet, clone, createMap, type MapLike } from \"./properties.js\";\nimport {\n\tReferencePosition,\n\trefGetTileLabels,\n\trefTypeIncludesFlag,\n} from \"./referencePositions.js\";\nimport { SegmentGroupCollection } from \"./segmentGroupCollection.js\";\nimport { PropertiesManager, PropertiesRollback } from \"./segmentPropertiesManager.js\";\n\n/**\n * Common properties for a node in a merge tree.\n * @legacy\n * @alpha\n */\nexport interface IMergeNodeCommon {\n\t/**\n\t * The index of this node in its parent's list of children.\n\t */\n\tindex: number;\n\t/**\n\t * A string that can be used for comparing the location of this node to other `MergeNode`s in the same tree.\n\t * `a.ordinal < b.ordinal` if and only if `a` comes before `b` in a pre-order traversal of the tree.\n\t */\n\tordinal: string;\n\tisLeaf(): this is ISegment;\n}\n/**\n * someday we may split tree leaves from segments, but for now they are the same\n * this is just a convenience type that makes it clear that we need something that is both a segment and a leaf node\n */\nexport type ISegmentLeaf = ISegment & { parent?: MergeBlock };\nexport type IMergeNode = MergeBlock | ISegmentLeaf;\n\n/**\n * Contains removal information associated to an {@link ISegment}.\n * @legacy\n * @alpha\n */\nexport interface IRemovalInfo {\n\t/**\n\t * Local seq at which this segment was removed, if the removal is yet-to-be acked.\n\t */\n\tlocalRemovedSeq?: number;\n\t/**\n\t * Seq at which this segment was removed.\n\t */\n\tremovedSeq: number;\n\t/**\n\t * List of client IDs that have removed this segment.\n\t * The client that actually removed the segment (i.e. whose removal op was sequenced first) is stored as the first\n\t * client in this list. Other clients in the list have all issued concurrent ops to remove the segment.\n\t * @remarks When this list has length \\> 1, this is referred to as the \"overlapping remove\" case.\n\t */\n\tremovedClientIds: number[];\n}\n\n/**\n * Returns the removal information for a segment.\n *\n * @internal\n */\nexport function toRemovalInfo(\n\tmaybe: Partial<IRemovalInfo> | undefined,\n): IRemovalInfo | undefined {\n\tif (maybe?.removedClientIds !== undefined && maybe?.removedSeq !== undefined) {\n\t\treturn maybe as IRemovalInfo;\n\t}\n\tassert(\n\t\tmaybe?.removedClientIds === undefined && maybe?.removedSeq === undefined,\n\t\t0x2bf /* \"both removedClientIds and removedSeq should be set or not set\" */,\n\t);\n}\n\n/**\n * Tracks information about when and where this segment was moved to.\n *\n * Note that merge-tree does not currently support moving and only supports\n * obliterate. The fields below include \"move\" in their names to avoid renaming\n * in the future, when moves _are_ supported.\n * @legacy\n * @alpha\n */\nexport interface IMoveInfo {\n\t/**\n\t * Local seq at which this segment was moved if the move is yet-to-be\n\t * acked.\n\t */\n\tlocalMovedSeq?: number;\n\n\t/**\n\t * The first seq at which this segment was moved.\n\t */\n\tmovedSeq: number;\n\n\t/**\n\t * All seqs at which this segment was moved. In the case of overlapping,\n\t * concurrent moves this array will contain multiple seqs.\n\t *\n\t * The seq at `movedSeqs[i]` corresponds to the client id at `movedClientIds[i]`.\n\t *\n\t * The first element corresponds to the seq of the first move\n\t */\n\tmovedSeqs: number[];\n\n\t/**\n\t * A reference to the inserted destination segment corresponding to this\n\t * segment's move.\n\t *\n\t * If undefined, the move was an obliterate.\n\t *\n\t * Currently this field is unused, as we only support obliterate operations\n\t */\n\tmoveDst?: ReferencePosition;\n\n\t/**\n\t * List of client IDs that have moved this segment.\n\t *\n\t * The client that actually moved the segment (i.e. whose move op was sequenced\n\t * first) is stored as the first client in this list. Other clients in the\n\t * list have all issued concurrent ops to move the segment.\n\t */\n\tmovedClientIds: number[];\n\n\t/**\n\t * If this segment was inserted into a concurrently moved range and\n\t * the move op was sequenced before the insertion op. In this case,\n\t * the segment is visible only to the inserting client\n\t *\n\t * `wasMovedOnInsert` only applies for acked obliterates. That is, if\n\t * a segment inserted by a remote client is moved on insertion by a local\n\t * and unacked obliterate, we do not consider it as having been moved\n\t * on insert\n\t *\n\t * If a segment is moved on insertion, its length is only ever visible to\n\t * the client that inserted the segment. This is relevant in partial length\n\t * calculations\n\t */\n\twasMovedOnInsert: boolean;\n}\n\nexport function toMoveInfo(maybe: Partial<IMoveInfo> | undefined): IMoveInfo | undefined {\n\tif (maybe?.movedClientIds !== undefined && maybe?.movedSeq !== undefined) {\n\t\treturn maybe as IMoveInfo;\n\t}\n\tassert(\n\t\tmaybe?.movedClientIds === undefined &&\n\t\t\tmaybe?.movedSeq === undefined &&\n\t\t\tmaybe?.movedSeqs === undefined &&\n\t\t\tmaybe?.wasMovedOnInsert === undefined,\n\t\t0x86d /* movedClientIds, movedSeq, wasMovedOnInsert, and movedSeqs should all be either set or not set */,\n\t);\n}\n\n/**\n * A segment representing a portion of the merge tree.\n * Segments are leaf nodes of the merge tree and contain data.\n * @legacy\n * @alpha\n */\nexport interface ISegment extends IMergeNodeCommon, Partial<IRemovalInfo>, Partial<IMoveInfo> {\n\treadonly type: string;\n\treadonly segmentGroups: SegmentGroupCollection;\n\treadonly trackingCollection: TrackingGroupCollection;\n\t/**\n\t * Whether or not this segment is a special segment denoting the start or\n\t * end of the tree\n\t *\n\t * Endpoint segments are imaginary segments positioned immediately before or\n\t * after the tree. These segments cannot be referenced by regular operations\n\t * and exist primarily as a bucket for local references to slide onto during\n\t * deletion of regular segments.\n\t */\n\treadonly endpointType?: \"start\" | \"end\";\n\n\t/**\n\t * The length of the contents of the node.\n\t */\n\tcachedLength: number;\n\t/**\n\t * Stores attribution keys associated with offsets of this segment.\n\t * This data is only persisted if MergeTree's `attributions.track` flag is set to true.\n\t * Pending segments (i.e. ones that only exist locally and haven't been acked by the server) also have\n\t * `attribution === undefined` until ack.\n\t *\n\t * Keys can be used opaquely with an IAttributor or a container runtime that provides attribution.\n\t * @remarks There are plans to make the shape of the data stored extensible in a couple ways:\n\t *\n\t * 1. Injection of custom attribution information associated with the segment (ex: copy-paste of\n\t * content but keeping the old attribution information).\n\t *\n\t * 2. Storage of multiple \"channels\" of information (ex: track property changes separately from insertion,\n\t * or only attribute certain property modifications, etc.)\n\t */\n\tattribution?: IAttributionCollection<AttributionKey>;\n\n\t/**\n\t * Manages pending local state for properties on this segment.\n\t */\n\tpropertyManager?: PropertiesManager;\n\t/**\n\t * Local seq at which this segment was inserted.\n\t * This is defined if and only if the insertion of the segment is pending ack, i.e. `seq` is UnassignedSequenceNumber.\n\t * Once the segment is acked, this field is cleared.\n\t *\n\t * See {@link CollaborationWindow.localSeq} for more information on the semantics of localSeq.\n\t */\n\tlocalSeq?: number;\n\t/**\n\t * Local seq at which this segment was removed. If this is defined, `removedSeq` will initially be set to\n\t * UnassignedSequenceNumber. However, if another client concurrently removes the same segment, `removedSeq`\n\t * will be updated to the seq at which that client removed this segment.\n\t *\n\t * Like {@link ISegment.localSeq}, this field is cleared once the local removal of the segment is acked.\n\t * See {@link CollaborationWindow.localSeq} for more information on the semantics of localSeq.\n\t */\n\tlocalRemovedSeq?: number;\n\t/**\n\t * Seq at which this segment was inserted.\n\t * If undefined, it is assumed the segment was inserted prior to the collab window's minimum sequence number.\n\t */\n\tseq?: number;\n\t/**\n\t * Short clientId for the client that inserted this segment.\n\t */\n\tclientId: number;\n\t/**\n\t * Local references added to this segment.\n\t */\n\tlocalRefs?: LocalReferenceCollection;\n\t/**\n\t * Properties that have been added to this segment via annotation.\n\t */\n\tproperties?: PropertySet;\n\n\t/**\n\t * Add properties to this segment via annotation.\n\t *\n\t * @remarks This function should not be called directly. Properties should\n\t * be added through the `annotateRange` functions.\n\t */\n\taddProperties(\n\t\tnewProps: PropertySet,\n\t\tseq?: number,\n\t\tcollaborating?: boolean,\n\t\trollback?: PropertiesRollback,\n\t): PropertySet;\n\tclone(): ISegment;\n\tcanAppend(segment: ISegment): boolean;\n\tappend(segment: ISegment): void;\n\tsplitAt(pos: number): ISegment | undefined;\n\t// Changing this to something other than any would break consumers.\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\ttoJSONObject(): any;\n\t/**\n\t * Acks the current segment against the segment group, op, and merge tree.\n\t *\n\t * @param segmentGroup - Pending segment group associated with this op.\n\t * @param opArgs - Information about the op that was acked\n\t * @returns `true` if the op modifies the segment, otherwise `false`.\n\t * The only current false case is overlapping remove, where a segment is removed\n\t * by a previously sequenced operation before the current operation is acked.\n\t * @throws - error if the segment state doesn't match segment group or op.\n\t * E.g. if the segment group is not first in the pending queue, or\n\t * an inserted segment does not have unassigned sequence number.\n\t */\n\tack(segmentGroup: SegmentGroup, opArgs: IMergeTreeDeltaOpArgs): boolean;\n}\n\n/**\n * @internal\n */\nexport interface IMarkerModifiedAction {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(marker: Marker): void;\n}\n\n/**\n * @legacy\n * @alpha\n */\nexport interface ISegmentAction<TClientData> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(\n\t\tsegment: ISegment,\n\t\tpos: number,\n\t\trefSeq: number,\n\t\tclientId: number,\n\t\tstart: number,\n\t\tend: number,\n\t\taccum: TClientData,\n\t): boolean;\n}\n/**\n * @internal\n */\nexport interface ISegmentChanges {\n\tnext?: ISegment;\n\treplaceCurrent?: ISegment;\n}\n/**\n * @internal\n */\nexport interface BlockAction<TClientData> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(\n\t\tblock: MergeBlock,\n\t\tpos: number,\n\t\trefSeq: number,\n\t\tclientId: number,\n\t\tstart: number | undefined,\n\t\tend: number | undefined,\n\t\taccum: TClientData,\n\t): boolean;\n}\n\n/**\n * @internal\n */\nexport interface NodeAction<TClientData> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(\n\t\tnode: MergeNode,\n\t\tpos: number,\n\t\trefSeq: number,\n\t\tclientId: number,\n\t\tstart: number | undefined,\n\t\tend: number | undefined,\n\t\tclientData: TClientData,\n\t): boolean;\n}\n\n/**\n * @internal\n */\nexport interface InsertContext {\n\tcandidateSegment?: ISegment;\n\tleaf: (segment: ISegment | undefined, pos: number, ic: InsertContext) => ISegmentChanges;\n\tcontinuePredicate?: (continueFromBlock: MergeBlock) => boolean;\n}\n\n/**\n * @internal\n */\nexport interface SegmentActions<TClientData> {\n\tleaf?: ISegmentAction<TClientData>;\n\tshift?: NodeAction<TClientData>;\n\tcontains?: NodeAction<TClientData>;\n\tpre?: BlockAction<TClientData>;\n\tpost?: BlockAction<TClientData>;\n}\n\n/**\n * @deprecated This functionality was not meant to be exported and will be removed in a future release\n * @legacy\n * @alpha\n */\nexport interface SegmentGroup {\n\tsegments: ISegment[];\n\tpreviousProps?: PropertySet[];\n\tlocalSeq?: number;\n\trefSeq: number;\n}\n\n/**\n * @legacy\n * @alpha\n * @deprecated - unused and will be removed\n */\nexport class MergeNode implements IMergeNodeCommon {\n\tindex: number = 0;\n\tordinal: string = \"\";\n\tcachedLength: number = 0;\n\n\tisLeaf(): this is ISegment {\n\t\treturn false;\n\t}\n}\n\n/**\n * Note that the actual branching factor of the MergeTree is `MaxNodesInBlock - 1`. This is because\n * the MergeTree always inserts first, then checks for overflow and splits if the child count equals\n * `MaxNodesInBlock`. (i.e., `MaxNodesInBlock` contains 1 extra slot for temporary storage to\n * facilitate splits.)\n * @internal\n */\nexport const MaxNodesInBlock = 8;\n/**\n * @internal\n */\nexport class MergeBlock implements IMergeNodeCommon {\n\tpublic children: IMergeNode[];\n\tpublic needsScour?: boolean;\n\tpublic parent?: MergeBlock;\n\tpublic index: number = 0;\n\tpublic ordinal: string = \"\";\n\tpublic cachedLength: number | undefined = 0;\n\n\t/**\n\t * Maps each tile label in this block to the rightmost (i.e. furthest) marker associated with that tile label.\n\t * When combined with the tree structure of MergeBlocks, this allows accelerated queries for nearest tile\n\t * with a certain label before a given position\n\t */\n\tpublic rightmostTiles: Readonly<MapLike<Marker>>;\n\t/**\n\t * Maps each tile label in this block to the leftmost (i.e. nearest) marker associated with that tile label.\n\t * When combined with the tree structure of MergeBlocks, this allows accelerated queries for nearest tile\n\t * with a certain label before a given position\n\t */\n\tpublic leftmostTiles: Readonly<MapLike<Marker>>;\n\n\tisLeaf(): this is ISegment {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Supports querying the total length of all descendants of this IMergeBlock from the perspective of any\n\t * (clientId, seq) within the collab window.\n\t *\n\t * @remarks This is only optional for implementation reasons (internal nodes can be created/moved without\n\t * immediately initializing the partial lengths). Aside from mid-update on tree operations, these lengths\n\t * objects are always defined.\n\t */\n\tpartialLengths?: PartialSequenceLengths;\n\n\tpublic constructor(public childCount: number) {\n\t\t// Suppression needed due to the way the merge tree children are initalized - we\n\t\t// allocate 8 children blocks, but any unused blocks are not counted in the childCount.\n\t\t// Using Array.from leads to unused children being undefined, which are counted in childCount.\n\t\t// eslint-disable-next-line unicorn/no-new-array\n\t\tthis.children = new Array<IMergeNode>(MaxNodesInBlock);\n\t\tthis.rightmostTiles = createMap<Marker>();\n\t\tthis.leftmostTiles = createMap<Marker>();\n\t}\n\n\tpublic setOrdinal(child: IMergeNode, index: number): void {\n\t\tconst childCount = this.childCount;\n\t\tassert(\n\t\t\tchildCount >= 1 && childCount <= MaxNodesInBlock,\n\t\t\t0x040 /* \"Child count is not within [1,8] range!\" */,\n\t\t);\n\t\tchild.ordinal = computeHierarchicalOrdinal(\n\t\t\tMaxNodesInBlock,\n\t\t\tchildCount,\n\t\t\tthis.ordinal,\n\t\t\tindex === 0 ? undefined : this.children[index - 1]?.ordinal,\n\t\t);\n\t}\n\n\tpublic assignChild(child: IMergeNode, index: number, updateOrdinal = true): void {\n\t\tchild.parent = this;\n\t\tchild.index = index;\n\t\tif (updateOrdinal) {\n\t\t\tthis.setOrdinal(child, index);\n\t\t}\n\t\tthis.children[index] = child;\n\t}\n}\n\nexport function seqLTE(seq: number, minOrRefSeq: number): boolean {\n\treturn seq !== UnassignedSequenceNumber && seq <= minOrRefSeq;\n}\n\n/**\n * @legacy\n * @alpha\n */\nexport abstract class BaseSegment implements ISegment {\n\tpublic clientId: number = LocalClientId;\n\tpublic seq: number = UniversalSequenceNumber;\n\tpublic removedSeq?: number;\n\tpublic removedClientIds?: number[];\n\tpublic movedSeq?: number;\n\tpublic movedSeqs?: number[];\n\tpublic movedClientIds?: number[];\n\tpublic wasMovedOnInsert?: boolean | undefined;\n\tpublic index: number = 0;\n\tpublic ordinal: string = \"\";\n\tpublic cachedLength: number = 0;\n\n\tpublic readonly segmentGroups: SegmentGroupCollection = new SegmentGroupCollection(this);\n\tpublic readonly trackingCollection: TrackingGroupCollection = new TrackingGroupCollection(\n\t\tthis,\n\t);\n\t/***/\n\tpublic attribution?: IAttributionCollection<AttributionKey>;\n\tpublic propertyManager?: PropertiesManager;\n\tpublic properties?: PropertySet;\n\tpublic localRefs?: LocalReferenceCollection;\n\tpublic abstract readonly type: string;\n\tpublic localSeq?: number;\n\tpublic localRemovedSeq?: number;\n\tpublic localMovedSeq?: number;\n\n\tpublic addProperties(\n\t\tnewProps: PropertySet,\n\t\tseq?: number,\n\t\tcollaborating?: boolean,\n\t\trollback: PropertiesRollback = PropertiesRollback.None,\n\t): PropertySet {\n\t\tthis.propertyManager ??= new PropertiesManager();\n\t\t// A property set must be able to hold properties of any type, so the any is needed.\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tthis.properties ??= createMap<any>();\n\t\treturn this.propertyManager.addProperties(\n\t\t\tthis.properties,\n\t\t\tnewProps,\n\t\t\tseq,\n\t\t\tcollaborating,\n\t\t\trollback,\n\t\t);\n\t}\n\n\tpublic hasProperty(key: string): boolean {\n\t\treturn !!this.properties && this.properties[key] !== undefined;\n\t}\n\n\tpublic isLeaf(): this is ISegment {\n\t\treturn true;\n\t}\n\n\tprotected cloneInto(b: ISegment): void {\n\t\tb.clientId = this.clientId;\n\t\t// TODO: deep clone properties\n\t\tb.properties = clone(this.properties);\n\t\tb.removedClientIds = this.removedClientIds?.slice();\n\t\t// TODO: copy removed client overlap and branch removal info\n\t\tb.removedSeq = this.removedSeq;\n\t\tb.movedClientIds = this.movedClientIds?.slice();\n\t\tb.movedSeq = this.movedSeq;\n\t\tb.movedSeqs = this.movedSeqs;\n\t\tb.wasMovedOnInsert = this.wasMovedOnInsert;\n\t\tb.seq = this.seq;\n\t\tb.attribution = this.attribution?.clone();\n\t}\n\n\tpublic canAppend(segment: ISegment): boolean {\n\t\treturn false;\n\t}\n\n\tprotected addSerializedProps(jseg: IJSONSegment): void {\n\t\tif (this.properties) {\n\t\t\tjseg.props = { ...this.properties };\n\t\t}\n\t}\n\t// This has to return any type because the return type is different for different segment types.\n\t// TODO: If possible, change the return type to match what should be returned for each segment type.\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic abstract toJSONObject(): any;\n\n\tpublic ack(segmentGroup: SegmentGroup, opArgs: IMergeTreeDeltaOpArgs): boolean {\n\t\tconst currentSegmentGroup = this.segmentGroups.dequeue();\n\t\tassert(\n\t\t\tcurrentSegmentGroup === segmentGroup,\n\t\t\t0x043 /* \"On ack, unexpected segmentGroup!\" */,\n\t\t);\n\t\tswitch (opArgs.op.type) {\n\t\t\tcase MergeTreeDeltaType.ANNOTATE: {\n\t\t\t\tassert(\n\t\t\t\t\t!!this.propertyManager,\n\t\t\t\t\t0x044 /* \"On annotate ack, missing segment property manager!\" */,\n\t\t\t\t);\n\t\t\t\tthis.propertyManager.ackPendingProperties(opArgs.op);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase MergeTreeDeltaType.INSERT: {\n\t\t\t\tassert(\n\t\t\t\t\tthis.seq === UnassignedSequenceNumber,\n\t\t\t\t\t0x045 /* \"On insert, seq number already assigned!\" */,\n\t\t\t\t);\n\t\t\t\tthis.seq = opArgs.sequencedMessage!.sequenceNumber;\n\t\t\t\tthis.localSeq = undefined;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase MergeTreeDeltaType.REMOVE: {\n\t\t\t\tconst removalInfo: IRemovalInfo | undefined = toRemovalInfo(this);\n\t\t\t\tassert(removalInfo !== undefined, 0x046 /* \"On remove ack, missing removal info!\" */);\n\t\t\t\tthis.localRemovedSeq = undefined;\n\t\t\t\tif (removalInfo.removedSeq === UnassignedSequenceNumber) {\n\t\t\t\t\tremovalInfo.removedSeq = opArgs.sequencedMessage!.sequenceNumber;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcase MergeTreeDeltaType.OBLITERATE: {\n\t\t\t\tconst moveInfo: IMoveInfo | undefined = toMoveInfo(this);\n\t\t\t\tassert(moveInfo !== undefined, 0x86e /* On obliterate ack, missing move info! */);\n\t\t\t\tthis.localMovedSeq = undefined;\n\t\t\t\tconst seqIdx = moveInfo.movedSeqs.indexOf(UnassignedSequenceNumber);\n\t\t\t\tassert(seqIdx !== -1, 0x86f /* expected movedSeqs to contain unacked seq */);\n\t\t\t\tmoveInfo.movedSeqs[seqIdx] = opArgs.sequencedMessage!.sequenceNumber;\n\n\t\t\t\tif (moveInfo.movedSeq === UnassignedSequenceNumber) {\n\t\t\t\t\tmoveInfo.movedSeq = opArgs.sequencedMessage!.sequenceNumber;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tthrow new Error(`${opArgs.op.type} is in unrecognized operation type`);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic splitAt(pos: number): ISegment | undefined {\n\t\tif (pos <= 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst leafSegment: ISegmentLeaf | undefined = this.createSplitSegmentAt(pos);\n\n\t\tif (!leafSegment) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tthis.copyPropertiesTo(leafSegment);\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias, unicorn/no-this-assignment\n\t\tconst thisAsMergeSegment: ISegmentLeaf = this;\n\t\tleafSegment.parent = thisAsMergeSegment.parent;\n\n\t\t// Give the leaf a temporary yet valid ordinal.\n\t\t// when this segment is put in the tree, it will get its real ordinal,\n\t\t// but this ordinal meets all the necessary invariants for now.\n\t\t// Ordinals exist purely for lexicographical sort order and use a small set of valid bytes for each string character.\n\t\t// The extra handling fromCodePoint has for things like surrogate pairs is therefore unnecessary.\n\t\t// eslint-disable-next-line unicorn/prefer-code-point\n\t\tleafSegment.ordinal = this.ordinal + String.fromCharCode(0);\n\n\t\tleafSegment.removedClientIds = this.removedClientIds?.slice();\n\t\tleafSegment.removedSeq = this.removedSeq;\n\t\tleafSegment.localRemovedSeq = this.localRemovedSeq;\n\t\tleafSegment.seq = this.seq;\n\t\tleafSegment.localSeq = this.localSeq;\n\t\tleafSegment.clientId = this.clientId;\n\t\tleafSegment.movedClientIds = this.movedClientIds?.slice();\n\t\tleafSegment.movedSeq = this.movedSeq;\n\t\tleafSegment.movedSeqs = this.movedSeqs?.slice();\n\t\tleafSegment.localMovedSeq = this.localMovedSeq;\n\t\tleafSegment.wasMovedOnInsert = this.wasMovedOnInsert;\n\t\tthis.segmentGroups.copyTo(leafSegment);\n\t\tthis.trackingCollection.copyTo(leafSegment);\n\t\tif (this.localRefs) {\n\t\t\tthis.localRefs.split(pos, leafSegment);\n\t\t}\n\t\tif (this.attribution) {\n\t\t\tleafSegment.attribution = this.attribution.splitAt(pos);\n\t\t}\n\n\t\treturn leafSegment;\n\t}\n\n\tprivate copyPropertiesTo(other: ISegment): void {\n\t\tif (this.propertyManager && this.properties) {\n\t\t\tother.propertyManager = new PropertiesManager();\n\t\t\tother.properties = this.propertyManager.copyTo(\n\t\t\t\tthis.properties,\n\t\t\t\tother.properties,\n\t\t\t\tother.propertyManager,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic abstract clone(): ISegment;\n\n\tpublic append(other: ISegment): void {\n\t\t// Note: Must call 'appendLocalRefs' before modifying this segment's length as\n\t\t// 'this.cachedLength' is used to adjust the offsets of the local refs.\n\t\tLocalReferenceCollection.append(this, other);\n\t\tif (this.attribution) {\n\t\t\tassert(\n\t\t\t\tother.attribution !== undefined,\n\t\t\t\t0x4bd /* attribution should be set on appendee */,\n\t\t\t);\n\t\t\tthis.attribution.append(other.attribution);\n\t\t} else {\n\t\t\tassert(\n\t\t\t\tother.attribution === undefined,\n\t\t\t\t0x4be /* attribution should not be set on appendee */,\n\t\t\t);\n\t\t}\n\n\t\tthis.cachedLength ??= 0;\n\t\tthis.cachedLength += other.cachedLength;\n\t}\n\n\tprotected abstract createSplitSegmentAt(pos: number): BaseSegment | undefined;\n}\n\n/**\n * The special-cased property key that tracks the id of a {@link Marker}.\n *\n * @remarks In general, marker ids should be accessed using the inherent method\n * {@link Marker.getId}. Marker ids should not be updated after creation.\n * @legacy\n * @alpha\n */\nexport const reservedMarkerIdKey = \"markerId\";\n\n/**\n * @internal\n */\nexport const reservedMarkerSimpleTypeKey = \"markerSimpleType\";\n\n/**\n * @legacy\n * @alpha\n */\nexport interface IJSONMarkerSegment extends IJSONSegment {\n\tmarker: IMarkerDef;\n}\n\n/**\n * Markers are a special kind of segment that do not hold any content.\n *\n * Markers with a reference type of {@link ReferenceType.Tile} support spatially\n * accelerated queries for finding the next marker to the left or right of it in\n * sub-linear time. This is useful, for example, in the case of jumping from the\n * start of a paragraph to the end, assuming a paragraph is bound by markers at\n * the start and end.\n *\n * @legacy\n * @alpha\n */\nexport class Marker extends BaseSegment implements ReferencePosition, ISegment {\n\tpublic static readonly type = \"Marker\";\n\tpublic static is(segment: ISegment): segment is Marker {\n\t\treturn segment.type === Marker.type;\n\t}\n\tpublic readonly type = Marker.type;\n\n\tpublic static make(refType: ReferenceType, props?: PropertySet): Marker {\n\t\tconst marker = new Marker(refType);\n\t\tif (props) {\n\t\t\tmarker.addProperties(props);\n\t\t}\n\t\treturn marker;\n\t}\n\n\tconstructor(public refType: ReferenceType) {\n\t\tsuper();\n\t\tthis.cachedLength = 1;\n\t}\n\n\ttoJSONObject(): IJSONMarkerSegment {\n\t\tconst obj: IJSONMarkerSegment = { marker: { refType: this.refType } };\n\t\tsuper.addSerializedProps(obj);\n\t\treturn obj;\n\t}\n\n\tstatic fromJSONObject(spec: IJSONSegment): Marker | undefined {\n\t\tif (spec && typeof spec === \"object\" && \"marker\" in spec) {\n\t\t\treturn Marker.make((spec.marker as Marker).refType, spec.props as PropertySet);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tclone(): Marker {\n\t\tconst b = Marker.make(this.refType, this.properties);\n\t\tthis.cloneInto(b);\n\t\treturn b;\n\t}\n\n\tgetSegment(): Marker {\n\t\treturn this;\n\t}\n\n\tgetOffset(): number {\n\t\treturn 0;\n\t}\n\n\tgetProperties(): PropertySet | undefined {\n\t\treturn this.properties;\n\t}\n\n\tgetId(): string | undefined {\n\t\treturn this.properties?.[reservedMarkerIdKey] as string;\n\t}\n\n\ttoString(): string {\n\t\treturn `M${this.getId()}`;\n\t}\n\n\tprotected createSplitSegmentAt(pos: number): undefined {\n\t\treturn undefined;\n\t}\n\n\tcanAppend(segment: ISegment): boolean {\n\t\treturn false;\n\t}\n\n\tappend(): void {\n\t\tthrow new Error(\"Can not append to marker\");\n\t}\n}\n\n/**\n * @deprecated This functionality was not meant to be exported and will be removed in a future release\n * @legacy\n * @alpha\n */\nexport class CollaborationWindow {\n\tclientId = LocalClientId;\n\tcollaborating = false;\n\n\t/**\n\t * Lowest-numbered segment in window; no client can reference a state before this one\n\t */\n\tminSeq = 0;\n\t/**\n\t * Highest-numbered segment in window and current reference sequence number for this client.\n\t */\n\tcurrentSeq = 0;\n\n\t/**\n\t * Highest-numbered localSeq used for a pending segment.\n\t * Semantically, `localSeq`s provide an ordering on in-flight merge-tree operations:\n\t * for operations stamped with localSeqs `a` and `b`, `a < b` if and only if `a` was submitted before `b`.\n\t *\n\t * @remarks - This field is analogous to the `clientSequenceNumber` field on ops, but it's accessible to merge-tree\n\t * at op submission time rather than only at ack time. This enables more natural state tracking for in-flight ops.\n\t *\n\t * It's useful to stamp ops with such an incrementing counter because it enables reasoning about which segments existed from\n\t * the perspective of the local client at a given point in 'un-acked' time, which is necessary to support the reconnect flow.\n\t *\n\t * For example, imagine a client with initial state \"123456\" submits some ops to create the text \"123456ABC\".\n\t * If they insert the \"C\" first, then \"B\", then \"A\", their local segment state might look like this:\n\t * ```js\n\t * [\n\t * { seq: 0, text: \"1234\" },\n\t * { seq: 5, text: \"56\" },\n\t * { localSeq: 3, seq: UnassignedSequenceNumber, text: \"A\" },\n\t * { localSeq: 2, seq: UnassignedSequenceNumber, text: \"B\" },\n\t * { localSeq: 1, seq: UnassignedSequenceNumber, text: \"C\" },\n\t * ]\n\t * ```\n\t * (note that {@link ISegment.localSeq} tracks the localSeq at which a segment was inserted)\n\t *\n\t * Suppose the client then disconnects and reconnects before any of its insertions are acked. The reconnect flow will necessitate\n\t * that the client regenerates and resubmits ops based on its current segment state as well as the original op that was sent.\n\t *\n\t * It will generate the ops\n\t * 1. \\{ pos: 6, text: \"C\" \\}\n\t * 2. \\{ pos: 6, text: \"B\" \\}\n\t * 3. \\{ pos: 6, text: \"A\" \\}\n\t *\n\t * since when submitting the first op, remote clients don't know that this client is about to submit the \"A\" and \"B\".\n\t *\n\t * On the other hand, imagine if the client had originally submitted the ops in the order \"A\", \"B\", \"C\"\n\t * such that the segments' local state was instead:\n\t *\n\t * ```js\n\t * [\n\t * { seq: 0, text: \"1234\" },\n\t * { seq: 5, text: \"56\" },\n\t * { localSeq: 1, seq: UnassignedSequenceNumber, text: \"A\" },\n\t * { localSeq: 2, seq: UnassignedSequenceNumber, text: \"B\" },\n\t * { localSeq: 3, seq: UnassignedSequenceNumber, text: \"C\" },\n\t * ]\n\t * ```\n\t *\n\t * The resubmitted ops should instead be:\n\t * 1. \\{ pos: 6, text: \"A\" \\}\n\t * 2. \\{ pos: 7, text: \"B\" \\}\n\t * 3. \\{ pos: 8, text: \"C\" \\}\n\t *\n\t * since remote clients will have seen the \"A\" when processing the \"B\" as well as both the \"A\" and \"B\" when processing the \"C\".\n\t * As can be seen, the list of resubmitted ops is different in the two cases despite the merge-tree's segment state only differing\n\t * in `localSeq`.\n\t *\n\t * This example is a bit simplified from the general scenario: since no remote clients modified the merge-tree while the client\n\t * was disconnected, the resubmitted ops end up matching the original ops exactly.\n\t * However, this is not generally true: the production reconnect code takes into account visibility of segments based on both acked\n\t * and local information as appropriate.\n\t * Nonetheless, this simple scenario is enough to understand why it's useful to be able to determine if a segment should be visible\n\t * from a given (seq, localSeq) perspective.\n\t */\n\tlocalSeq = 0;\n\n\tloadFrom(a: CollaborationWindow): void {\n\t\tthis.clientId = a.clientId;\n\t\tthis.collaborating = a.collaborating;\n\t\tthis.minSeq = a.minSeq;\n\t\tthis.currentSeq = a.currentSeq;\n\t}\n}\n\n/**\n * Compares two numbers.\n */\nexport const compareNumbers = (a: number, b: number): number => a - b;\n\n/**\n * Compares two strings.\n */\nexport const compareStrings = (a: string, b: string): number => a.localeCompare(b);\n\n/**\n * Get a human-readable string for a given {@link Marker}.\n *\n * @remarks This function is intended for debugging only. The exact format of\n * this string should not be relied upon between versions.\n * @internal\n */\nexport function debugMarkerToString(marker: Marker): string {\n\tlet bbuf = \"\";\n\tif (refTypeIncludesFlag(marker, ReferenceType.Tile)) {\n\t\tbbuf += \"Tile\";\n\t}\n\tlet lbuf = \"\";\n\tconst id = marker.getId();\n\tif (id) {\n\t\tbbuf += ` (${id}) `;\n\t}\n\tconst tileLabels = refGetTileLabels(marker);\n\tif (tileLabels) {\n\t\tlbuf += \"tile -- \";\n\t\tfor (let i = 0, len = tileLabels.length; i < len; i++) {\n\t\t\tconst tileLabel = tileLabels[i];\n\t\t\tif (i > 0) {\n\t\t\t\tlbuf += \"; \";\n\t\t\t}\n\t\t\tlbuf += tileLabel;\n\t\t}\n\t}\n\n\tlet pbuf = \"\";\n\tif (marker.properties) {\n\t\tpbuf += JSON.stringify(marker.properties, (key, value) => {\n\t\t\t// Avoid circular reference when stringifying makers containing handles.\n\t\t\t// (Substitute a debug string instead.)\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n\t\t\tconst handle = !!value && value.IFluidHandle;\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n\t\t\treturn handle ? `#Handle(${handle.routeContext.path}/${handle.path})` : value;\n\t\t});\n\t}\n\treturn `M ${bbuf}: ${lbuf} ${pbuf}`;\n}\n"]}
1
+ {"version":3,"file":"mergeTreeNodes.js","sourceRoot":"","sources":["../src/mergeTreeNodes.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 @typescript-eslint/no-non-null-assertion */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { AttributionKey } from \"@fluidframework/runtime-definitions/internal\";\n\nimport { IAttributionCollection } from \"./attributionCollection.js\";\nimport {\n\tLocalClientId,\n\tUnassignedSequenceNumber,\n\tUniversalSequenceNumber,\n} from \"./constants.js\";\nimport { LocalReferenceCollection } from \"./localReference.js\";\nimport { IMergeTreeDeltaOpArgs } from \"./mergeTreeDeltaCallback.js\";\nimport { TrackingGroupCollection } from \"./mergeTreeTracking.js\";\nimport { IJSONSegment, IMarkerDef, MergeTreeDeltaType, ReferenceType } from \"./ops.js\";\nimport { computeHierarchicalOrdinal } from \"./ordinal.js\";\nimport type { PartialSequenceLengths } from \"./partialLengths.js\";\nimport { PropertySet, clone, createMap, type MapLike } from \"./properties.js\";\nimport {\n\tReferencePosition,\n\trefGetTileLabels,\n\trefTypeIncludesFlag,\n} from \"./referencePositions.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { SegmentGroupCollection } from \"./segmentGroupCollection.js\";\n// eslint-disable-next-line import/no-deprecated\nimport { PropertiesManager, PropertiesRollback } from \"./segmentPropertiesManager.js\";\nimport { Side } from \"./sequencePlace.js\";\n\n/**\n * Common properties for a node in a merge tree.\n * @legacy\n * @alpha\n */\nexport interface IMergeNodeCommon {\n\t/**\n\t * The index of this node in its parent's list of children.\n\t */\n\tindex: number;\n\t/**\n\t * A string that can be used for comparing the location of this node to other `MergeNode`s in the same tree.\n\t * `a.ordinal < b.ordinal` if and only if `a` comes before `b` in a pre-order traversal of the tree.\n\t */\n\tordinal: string;\n\tisLeaf(): this is ISegment;\n}\n/**\n * someday we may split tree leaves from segments, but for now they are the same\n * this is just a convenience type that makes it clear that we need something that is both a segment and a leaf node\n */\nexport type ISegmentLeaf = ISegment & { parent?: MergeBlock };\nexport type IMergeNode = MergeBlock | ISegmentLeaf;\n\n/**\n * Contains removal information associated to an {@link ISegment}.\n * @legacy\n * @alpha\n */\nexport interface IRemovalInfo {\n\t/**\n\t * Local seq at which this segment was removed, if the removal is yet-to-be acked.\n\t */\n\tlocalRemovedSeq?: number;\n\t/**\n\t * Seq at which this segment was removed.\n\t */\n\tremovedSeq: number;\n\t/**\n\t * List of client IDs that have removed this segment.\n\t * The client that actually removed the segment (i.e. whose removal op was sequenced first) is stored as the first\n\t * client in this list. Other clients in the list have all issued concurrent ops to remove the segment.\n\t * @remarks When this list has length \\> 1, this is referred to as the \"overlapping remove\" case.\n\t */\n\tremovedClientIds: number[];\n}\n\n/**\n * Returns the removal information for a segment.\n *\n * @internal\n */\nexport function toRemovalInfo(\n\tmaybe: Partial<IRemovalInfo> | undefined,\n): IRemovalInfo | undefined {\n\tif (maybe?.removedClientIds !== undefined && maybe?.removedSeq !== undefined) {\n\t\treturn maybe as IRemovalInfo;\n\t}\n\tassert(\n\t\tmaybe?.removedClientIds === undefined && maybe?.removedSeq === undefined,\n\t\t0x2bf /* \"both removedClientIds and removedSeq should be set or not set\" */,\n\t);\n}\n\n/**\n * Tracks information about when and where this segment was moved to.\n *\n * Note that merge-tree does not currently support moving and only supports\n * obliterate. The fields below include \"move\" in their names to avoid renaming\n * in the future, when moves _are_ supported.\n * @legacy\n * @alpha\n */\nexport interface IMoveInfo {\n\t/**\n\t * Local seq at which this segment was moved if the move is yet-to-be\n\t * acked.\n\t */\n\tlocalMovedSeq?: number;\n\n\t/**\n\t * The first seq at which this segment was moved.\n\t */\n\tmovedSeq: number;\n\n\t/**\n\t * All seqs at which this segment was moved. In the case of overlapping,\n\t * concurrent moves this array will contain multiple seqs.\n\t *\n\t * The seq at `movedSeqs[i]` corresponds to the client id at `movedClientIds[i]`.\n\t *\n\t * The first element corresponds to the seq of the first move\n\t */\n\tmovedSeqs: number[];\n\n\t/**\n\t * A reference to the inserted destination segment corresponding to this\n\t * segment's move.\n\t *\n\t * If undefined, the move was an obliterate.\n\t *\n\t * Currently this field is unused, as we only support obliterate operations\n\t */\n\tmoveDst?: ReferencePosition;\n\n\t/**\n\t * List of client IDs that have moved this segment.\n\t *\n\t * The client that actually moved the segment (i.e. whose move op was sequenced\n\t * first) is stored as the first client in this list. Other clients in the\n\t * list have all issued concurrent ops to move the segment.\n\t */\n\tmovedClientIds: number[];\n\n\t/**\n\t * If this segment was inserted into a concurrently moved range and\n\t * the move op was sequenced before the insertion op. In this case,\n\t * the segment is visible only to the inserting client\n\t *\n\t * `wasMovedOnInsert` only applies for acked obliterates. That is, if\n\t * a segment inserted by a remote client is moved on insertion by a local\n\t * and unacked obliterate, we do not consider it as having been moved\n\t * on insert\n\t *\n\t * If a segment is moved on insertion, its length is only ever visible to\n\t * the client that inserted the segment. This is relevant in partial length\n\t * calculations\n\t */\n\twasMovedOnInsert: boolean;\n}\n\nexport function toMoveInfo(maybe: Partial<IMoveInfo> | undefined): IMoveInfo | undefined {\n\tif (maybe?.movedClientIds !== undefined && maybe?.movedSeq !== undefined) {\n\t\treturn maybe as IMoveInfo;\n\t}\n\tassert(\n\t\tmaybe?.movedClientIds === undefined &&\n\t\t\tmaybe?.movedSeq === undefined &&\n\t\t\tmaybe?.movedSeqs === undefined &&\n\t\t\tmaybe?.wasMovedOnInsert === undefined,\n\t\t0x86d /* movedClientIds, movedSeq, wasMovedOnInsert, and movedSeqs should all be either set or not set */,\n\t);\n}\n\n/**\n * A segment representing a portion of the merge tree.\n * Segments are leaf nodes of the merge tree and contain data.\n * @legacy\n * @alpha\n */\nexport interface ISegment extends IMergeNodeCommon, Partial<IRemovalInfo>, Partial<IMoveInfo> {\n\treadonly type: string;\n\t/**\n\t * @deprecated - This property should not be used externally and will be removed in a subsequent release.\n\t */\n\t// eslint-disable-next-line import/no-deprecated\n\treadonly segmentGroups: SegmentGroupCollection;\n\treadonly trackingCollection: TrackingGroupCollection;\n\t/**\n\t * Whether or not this segment is a special segment denoting the start or\n\t * end of the tree\n\t *\n\t * Endpoint segments are imaginary segments positioned immediately before or\n\t * after the tree. These segments cannot be referenced by regular operations\n\t * and exist primarily as a bucket for local references to slide onto during\n\t * deletion of regular segments.\n\t */\n\treadonly endpointType?: \"start\" | \"end\";\n\n\t/**\n\t * The length of the contents of the node.\n\t */\n\tcachedLength: number;\n\t/**\n\t * Stores attribution keys associated with offsets of this segment.\n\t * This data is only persisted if MergeTree's `attributions.track` flag is set to true.\n\t * Pending segments (i.e. ones that only exist locally and haven't been acked by the server) also have\n\t * `attribution === undefined` until ack.\n\t *\n\t * Keys can be used opaquely with an IAttributor or a container runtime that provides attribution.\n\t * @remarks There are plans to make the shape of the data stored extensible in a couple ways:\n\t *\n\t * 1. Injection of custom attribution information associated with the segment (ex: copy-paste of\n\t * content but keeping the old attribution information).\n\t *\n\t * 2. Storage of multiple \"channels\" of information (ex: track property changes separately from insertion,\n\t * or only attribute certain property modifications, etc.)\n\t */\n\tattribution?: IAttributionCollection<AttributionKey>;\n\n\t/**\n\t * Manages pending local state for properties on this segment.\n\t *\n\t * @deprecated - This property should not be used externally and will be removed in a subsequent release.\n\t */\n\t// eslint-disable-next-line import/no-deprecated\n\tpropertyManager?: PropertiesManager;\n\t/**\n\t * Local seq at which this segment was inserted.\n\t * This is defined if and only if the insertion of the segment is pending ack, i.e. `seq` is UnassignedSequenceNumber.\n\t * Once the segment is acked, this field is cleared.\n\t *\n\t * See {@link CollaborationWindow.localSeq} for more information on the semantics of localSeq.\n\t */\n\tlocalSeq?: number;\n\t/**\n\t * Local seq at which this segment was removed. If this is defined, `removedSeq` will initially be set to\n\t * UnassignedSequenceNumber. However, if another client concurrently removes the same segment, `removedSeq`\n\t * will be updated to the seq at which that client removed this segment.\n\t *\n\t * Like {@link ISegment.localSeq}, this field is cleared once the local removal of the segment is acked.\n\t * See {@link CollaborationWindow.localSeq} for more information on the semantics of localSeq.\n\t */\n\tlocalRemovedSeq?: number;\n\t/**\n\t * Seq at which this segment was inserted.\n\t * If undefined, it is assumed the segment was inserted prior to the collab window's minimum sequence number.\n\t */\n\tseq?: number;\n\t/**\n\t * Short clientId for the client that inserted this segment.\n\t */\n\tclientId: number;\n\t/**\n\t * Local references added to this segment.\n\t */\n\tlocalRefs?: LocalReferenceCollection;\n\t/**\n\t * Properties that have been added to this segment via annotation.\n\t */\n\tproperties?: PropertySet;\n\t/**\n\t * Stores side information passed to obliterate for the start of a range.\n\t */\n\tstartSide?: Side.Before | Side.After;\n\t/**\n\t * Stores side information passed to obliterate for the end of a range.\n\t */\n\tendSide?: Side.Before | Side.After;\n\n\t/**\n\t * Add properties to this segment via annotation.\n\t *\n\t * @deprecated - This function should not be used externally and will be removed in a subsequent release.\n\t *\n\t * @remarks This function should not be called directly. Properties should\n\t * be added through the `annotateRange` functions.\n\t */\n\taddProperties(\n\t\tnewProps: PropertySet,\n\t\tseq?: number,\n\t\tcollaborating?: boolean,\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\trollback?: PropertiesRollback,\n\t): PropertySet;\n\tclone(): ISegment;\n\tcanAppend(segment: ISegment): boolean;\n\tappend(segment: ISegment): void;\n\tsplitAt(pos: number): ISegment | undefined;\n\t// Changing this to something other than any would break consumers.\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\ttoJSONObject(): any;\n\t/**\n\t * @deprecated - This function should not be used externally and will be removed in a subsequent release.\n\t * Acks the current segment against the segment group, op, and merge tree.\n\t *\n\t * @param segmentGroup - Pending segment group associated with this op.\n\t * @param opArgs - Information about the op that was acked\n\t * @returns `true` if the op modifies the segment, otherwise `false`.\n\t * The only current false case is overlapping remove, where a segment is removed\n\t * by a previously sequenced operation before the current operation is acked.\n\t * @throws - error if the segment state doesn't match segment group or op.\n\t * E.g. if the segment group is not first in the pending queue, or\n\t * an inserted segment does not have unassigned sequence number.\n\t */\n\tack(segmentGroup: SegmentGroup, opArgs: IMergeTreeDeltaOpArgs): boolean;\n}\n\n/**\n * @internal\n */\nexport interface IMarkerModifiedAction {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(marker: Marker): void;\n}\n\n/**\n * @legacy\n * @alpha\n */\nexport interface ISegmentAction<TClientData> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(\n\t\tsegment: ISegment,\n\t\tpos: number,\n\t\trefSeq: number,\n\t\tclientId: number,\n\t\tstart: number,\n\t\tend: number,\n\t\taccum: TClientData,\n\t): boolean;\n}\n/**\n * @internal\n */\nexport interface ISegmentChanges {\n\tnext?: ISegment;\n\treplaceCurrent?: ISegment;\n}\n/**\n * @internal\n */\nexport interface BlockAction<TClientData> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(\n\t\tblock: MergeBlock,\n\t\tpos: number,\n\t\trefSeq: number,\n\t\tclientId: number,\n\t\tstart: number | undefined,\n\t\tend: number | undefined,\n\t\taccum: TClientData,\n\t): boolean;\n}\n\n/**\n * @internal\n */\nexport interface NodeAction<TClientData> {\n\t// eslint-disable-next-line @typescript-eslint/prefer-function-type\n\t(\n\t\tnode: MergeNode,\n\t\tpos: number,\n\t\trefSeq: number,\n\t\tclientId: number,\n\t\tstart: number | undefined,\n\t\tend: number | undefined,\n\t\tclientData: TClientData,\n\t): boolean;\n}\n\n/**\n * @internal\n */\nexport interface InsertContext {\n\tcandidateSegment?: ISegment;\n\tleaf: (segment: ISegment | undefined, pos: number, ic: InsertContext) => ISegmentChanges;\n\tcontinuePredicate?: (continueFromBlock: MergeBlock) => boolean;\n}\n\n/**\n * @internal\n */\nexport interface SegmentActions<TClientData> {\n\tleaf?: ISegmentAction<TClientData>;\n\tshift?: NodeAction<TClientData>;\n\tcontains?: NodeAction<TClientData>;\n\tpre?: BlockAction<TClientData>;\n\tpost?: BlockAction<TClientData>;\n}\n\n/**\n * @deprecated This functionality was not meant to be exported and will be removed in a future release\n * @legacy\n * @alpha\n */\nexport interface SegmentGroup {\n\tsegments: ISegment[];\n\tpreviousProps?: PropertySet[];\n\tlocalSeq?: number;\n\trefSeq: number;\n}\n\n/**\n * @legacy\n * @alpha\n * @deprecated - unused and will be removed\n */\nexport class MergeNode implements IMergeNodeCommon {\n\tindex: number = 0;\n\tordinal: string = \"\";\n\tcachedLength: number = 0;\n\n\tisLeaf(): this is ISegment {\n\t\treturn false;\n\t}\n}\n\n/**\n * Note that the actual branching factor of the MergeTree is `MaxNodesInBlock - 1`. This is because\n * the MergeTree always inserts first, then checks for overflow and splits if the child count equals\n * `MaxNodesInBlock`. (i.e., `MaxNodesInBlock` contains 1 extra slot for temporary storage to\n * facilitate splits.)\n * @internal\n */\nexport const MaxNodesInBlock = 8;\n/**\n * @internal\n */\nexport class MergeBlock implements IMergeNodeCommon {\n\tpublic children: IMergeNode[];\n\tpublic needsScour?: boolean;\n\tpublic parent?: MergeBlock;\n\tpublic index: number = 0;\n\tpublic ordinal: string = \"\";\n\tpublic cachedLength: number | undefined = 0;\n\n\t/**\n\t * Maps each tile label in this block to the rightmost (i.e. furthest) marker associated with that tile label.\n\t * When combined with the tree structure of MergeBlocks, this allows accelerated queries for nearest tile\n\t * with a certain label before a given position\n\t */\n\tpublic rightmostTiles: Readonly<MapLike<Marker>>;\n\t/**\n\t * Maps each tile label in this block to the leftmost (i.e. nearest) marker associated with that tile label.\n\t * When combined with the tree structure of MergeBlocks, this allows accelerated queries for nearest tile\n\t * with a certain label before a given position\n\t */\n\tpublic leftmostTiles: Readonly<MapLike<Marker>>;\n\n\tisLeaf(): this is ISegment {\n\t\treturn false;\n\t}\n\n\t/**\n\t * Supports querying the total length of all descendants of this IMergeBlock from the perspective of any\n\t * (clientId, seq) within the collab window.\n\t *\n\t * @remarks This is only optional for implementation reasons (internal nodes can be created/moved without\n\t * immediately initializing the partial lengths). Aside from mid-update on tree operations, these lengths\n\t * objects are always defined.\n\t */\n\tpartialLengths?: PartialSequenceLengths;\n\n\tpublic constructor(public childCount: number) {\n\t\t// Suppression needed due to the way the merge tree children are initalized - we\n\t\t// allocate 8 children blocks, but any unused blocks are not counted in the childCount.\n\t\t// Using Array.from leads to unused children being undefined, which are counted in childCount.\n\t\t// eslint-disable-next-line unicorn/no-new-array\n\t\tthis.children = new Array<IMergeNode>(MaxNodesInBlock);\n\t\tthis.rightmostTiles = createMap<Marker>();\n\t\tthis.leftmostTiles = createMap<Marker>();\n\t}\n\n\tpublic setOrdinal(child: IMergeNode, index: number): void {\n\t\tconst childCount = this.childCount;\n\t\tassert(\n\t\t\tchildCount >= 1 && childCount <= MaxNodesInBlock,\n\t\t\t0x040 /* \"Child count is not within [1,8] range!\" */,\n\t\t);\n\t\tchild.ordinal = computeHierarchicalOrdinal(\n\t\t\tMaxNodesInBlock,\n\t\t\tchildCount,\n\t\t\tthis.ordinal,\n\t\t\tindex === 0 ? undefined : this.children[index - 1]?.ordinal,\n\t\t);\n\t}\n\n\tpublic assignChild(child: IMergeNode, index: number, updateOrdinal = true): void {\n\t\tchild.parent = this;\n\t\tchild.index = index;\n\t\tif (updateOrdinal) {\n\t\t\tthis.setOrdinal(child, index);\n\t\t}\n\t\tthis.children[index] = child;\n\t}\n}\n\nexport function seqLTE(seq: number, minOrRefSeq: number): boolean {\n\treturn seq !== UnassignedSequenceNumber && seq <= minOrRefSeq;\n}\n\n/**\n * @legacy\n * @alpha\n */\nexport abstract class BaseSegment implements ISegment {\n\tpublic clientId: number = LocalClientId;\n\tpublic seq: number = UniversalSequenceNumber;\n\tpublic removedSeq?: number;\n\tpublic removedClientIds?: number[];\n\tpublic movedSeq?: number;\n\tpublic movedSeqs?: number[];\n\tpublic movedClientIds?: number[];\n\tpublic wasMovedOnInsert?: boolean | undefined;\n\tpublic index: number = 0;\n\tpublic ordinal: string = \"\";\n\tpublic cachedLength: number = 0;\n\n\t/**\n\t * {@inheritdoc ISegment.segmentGroups}\n\t * @deprecated - This property should not be used externally and will be removed in a subsequent release.\n\t */\n\t// eslint-disable-next-line import/no-deprecated\n\tpublic readonly segmentGroups: SegmentGroupCollection = new SegmentGroupCollection(this);\n\tpublic readonly trackingCollection: TrackingGroupCollection = new TrackingGroupCollection(\n\t\tthis,\n\t);\n\t/***/\n\tpublic attribution?: IAttributionCollection<AttributionKey>;\n\t/**\n\t * {@inheritdoc ISegment.propertyManager}\n\t * @deprecated - This property should not be used externally and will be removed in a subsequent release.\n\t */\n\t// eslint-disable-next-line import/no-deprecated\n\tpublic propertyManager?: PropertiesManager;\n\tpublic properties?: PropertySet;\n\tpublic localRefs?: LocalReferenceCollection;\n\tpublic abstract readonly type: string;\n\tpublic localSeq?: number;\n\tpublic localRemovedSeq?: number;\n\tpublic localMovedSeq?: number;\n\n\tpublic constructor(properties?: PropertySet) {\n\t\tif (properties !== undefined) {\n\t\t\tthis.properties = clone(properties);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritdoc ISegment.addProperties}\n\t * @deprecated - This function should not be used externally and will be removed in a subsequent release.\n\t */\n\tpublic addProperties(\n\t\tnewProps: PropertySet,\n\t\tseq?: number,\n\t\tcollaborating?: boolean,\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\trollback: PropertiesRollback = PropertiesRollback.None,\n\t): PropertySet {\n\t\t// eslint-disable-next-line import/no-deprecated\n\t\tthis.propertyManager ??= new PropertiesManager();\n\t\t// A property set must be able to hold properties of any type, so the any is needed.\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tthis.properties ??= createMap<any>();\n\t\treturn this.propertyManager.addProperties(\n\t\t\tthis.properties,\n\t\t\tnewProps,\n\t\t\tseq,\n\t\t\tcollaborating,\n\t\t\trollback,\n\t\t);\n\t}\n\n\tpublic hasProperty(key: string): boolean {\n\t\treturn !!this.properties && this.properties[key] !== undefined;\n\t}\n\n\tpublic isLeaf(): this is ISegment {\n\t\treturn true;\n\t}\n\n\tprotected cloneInto(b: ISegment): void {\n\t\tb.clientId = this.clientId;\n\t\t// TODO: deep clone properties\n\t\tb.properties = clone(this.properties);\n\t\tb.removedClientIds = this.removedClientIds?.slice();\n\t\t// TODO: copy removed client overlap and branch removal info\n\t\tb.removedSeq = this.removedSeq;\n\t\tb.movedClientIds = this.movedClientIds?.slice();\n\t\tb.movedSeq = this.movedSeq;\n\t\tb.movedSeqs = this.movedSeqs;\n\t\tb.wasMovedOnInsert = this.wasMovedOnInsert;\n\t\tb.seq = this.seq;\n\t\tb.attribution = this.attribution?.clone();\n\t}\n\n\tpublic canAppend(segment: ISegment): boolean {\n\t\treturn false;\n\t}\n\n\tprotected addSerializedProps(jseg: IJSONSegment): void {\n\t\tif (this.properties) {\n\t\t\tjseg.props = { ...this.properties };\n\t\t}\n\t}\n\t// This has to return any type because the return type is different for different segment types.\n\t// TODO: If possible, change the return type to match what should be returned for each segment type.\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic abstract toJSONObject(): any;\n\n\t/**\n\t * {@inheritdoc ISegment.ack}\n\t * @deprecated - This function should not be used externally and will be removed in a subsequent release.\n\t */\n\tpublic ack(segmentGroup: SegmentGroup, opArgs: IMergeTreeDeltaOpArgs): boolean {\n\t\tconst currentSegmentGroup = this.segmentGroups.dequeue();\n\t\tassert(\n\t\t\tcurrentSegmentGroup === segmentGroup,\n\t\t\t0x043 /* \"On ack, unexpected segmentGroup!\" */,\n\t\t);\n\t\tswitch (opArgs.op.type) {\n\t\t\tcase MergeTreeDeltaType.ANNOTATE: {\n\t\t\t\tassert(\n\t\t\t\t\t!!this.propertyManager,\n\t\t\t\t\t0x044 /* \"On annotate ack, missing segment property manager!\" */,\n\t\t\t\t);\n\t\t\t\tthis.propertyManager.ackPendingProperties(opArgs.op);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase MergeTreeDeltaType.INSERT: {\n\t\t\t\tassert(\n\t\t\t\t\tthis.seq === UnassignedSequenceNumber,\n\t\t\t\t\t0x045 /* \"On insert, seq number already assigned!\" */,\n\t\t\t\t);\n\t\t\t\tthis.seq = opArgs.sequencedMessage!.sequenceNumber;\n\t\t\t\tthis.localSeq = undefined;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase MergeTreeDeltaType.REMOVE: {\n\t\t\t\tconst removalInfo: IRemovalInfo | undefined = toRemovalInfo(this);\n\t\t\t\tassert(removalInfo !== undefined, 0x046 /* \"On remove ack, missing removal info!\" */);\n\t\t\t\tthis.localRemovedSeq = undefined;\n\t\t\t\tif (removalInfo.removedSeq === UnassignedSequenceNumber) {\n\t\t\t\t\tremovalInfo.removedSeq = opArgs.sequencedMessage!.sequenceNumber;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcase MergeTreeDeltaType.OBLITERATE: {\n\t\t\t\tconst moveInfo: IMoveInfo | undefined = toMoveInfo(this);\n\t\t\t\tassert(moveInfo !== undefined, 0x86e /* On obliterate ack, missing move info! */);\n\t\t\t\tthis.localMovedSeq = undefined;\n\t\t\t\tconst seqIdx = moveInfo.movedSeqs.indexOf(UnassignedSequenceNumber);\n\t\t\t\tassert(seqIdx !== -1, 0x86f /* expected movedSeqs to contain unacked seq */);\n\t\t\t\tmoveInfo.movedSeqs[seqIdx] = opArgs.sequencedMessage!.sequenceNumber;\n\n\t\t\t\tif (moveInfo.movedSeq === UnassignedSequenceNumber) {\n\t\t\t\t\tmoveInfo.movedSeq = opArgs.sequencedMessage!.sequenceNumber;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tthrow new Error(`${opArgs.op.type} is in unrecognized operation type`);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic splitAt(pos: number): ISegment | undefined {\n\t\tif (pos <= 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst leafSegment: ISegmentLeaf | undefined = this.createSplitSegmentAt(pos);\n\n\t\tif (!leafSegment) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tthis.copyPropertiesTo(leafSegment);\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias, unicorn/no-this-assignment\n\t\tconst thisAsMergeSegment: ISegmentLeaf = this;\n\t\tleafSegment.parent = thisAsMergeSegment.parent;\n\n\t\t// Give the leaf a temporary yet valid ordinal.\n\t\t// when this segment is put in the tree, it will get its real ordinal,\n\t\t// but this ordinal meets all the necessary invariants for now.\n\t\t// Ordinals exist purely for lexicographical sort order and use a small set of valid bytes for each string character.\n\t\t// The extra handling fromCodePoint has for things like surrogate pairs is therefore unnecessary.\n\t\t// eslint-disable-next-line unicorn/prefer-code-point\n\t\tleafSegment.ordinal = this.ordinal + String.fromCharCode(0);\n\n\t\tleafSegment.removedClientIds = this.removedClientIds?.slice();\n\t\tleafSegment.removedSeq = this.removedSeq;\n\t\tleafSegment.localRemovedSeq = this.localRemovedSeq;\n\t\tleafSegment.seq = this.seq;\n\t\tleafSegment.localSeq = this.localSeq;\n\t\tleafSegment.clientId = this.clientId;\n\t\tleafSegment.movedClientIds = this.movedClientIds?.slice();\n\t\tleafSegment.movedSeq = this.movedSeq;\n\t\tleafSegment.movedSeqs = this.movedSeqs?.slice();\n\t\tleafSegment.localMovedSeq = this.localMovedSeq;\n\t\tleafSegment.wasMovedOnInsert = this.wasMovedOnInsert;\n\t\tthis.segmentGroups.copyTo(leafSegment);\n\t\tthis.trackingCollection.copyTo(leafSegment);\n\t\tif (this.localRefs) {\n\t\t\tthis.localRefs.split(pos, leafSegment);\n\t\t}\n\t\tif (this.attribution) {\n\t\t\tleafSegment.attribution = this.attribution.splitAt(pos);\n\t\t}\n\n\t\treturn leafSegment;\n\t}\n\n\tprivate copyPropertiesTo(other: ISegment): void {\n\t\tif (this.properties !== undefined) {\n\t\t\tif (this.propertyManager) {\n\t\t\t\t// eslint-disable-next-line import/no-deprecated\n\t\t\t\tother.propertyManager = new PropertiesManager();\n\t\t\t\tother.properties = this.propertyManager.copyTo(\n\t\t\t\t\tthis.properties,\n\t\t\t\t\tother.properties,\n\t\t\t\t\tother.propertyManager,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tother.properties = clone(this.properties);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic abstract clone(): ISegment;\n\n\tpublic append(other: ISegment): void {\n\t\t// Note: Must call 'appendLocalRefs' before modifying this segment's length as\n\t\t// 'this.cachedLength' is used to adjust the offsets of the local refs.\n\t\tLocalReferenceCollection.append(this, other);\n\t\tif (this.attribution) {\n\t\t\tassert(\n\t\t\t\tother.attribution !== undefined,\n\t\t\t\t0x4bd /* attribution should be set on appendee */,\n\t\t\t);\n\t\t\tthis.attribution.append(other.attribution);\n\t\t} else {\n\t\t\tassert(\n\t\t\t\tother.attribution === undefined,\n\t\t\t\t0x4be /* attribution should not be set on appendee */,\n\t\t\t);\n\t\t}\n\n\t\tthis.cachedLength ??= 0;\n\t\tthis.cachedLength += other.cachedLength;\n\t}\n\n\tprotected abstract createSplitSegmentAt(pos: number): BaseSegment | undefined;\n}\n\n/**\n * The special-cased property key that tracks the id of a {@link Marker}.\n *\n * @remarks In general, marker ids should be accessed using the inherent method\n * {@link Marker.getId}. Marker ids should not be updated after creation.\n * @legacy\n * @alpha\n */\nexport const reservedMarkerIdKey = \"markerId\";\n\n/**\n * @internal\n */\nexport const reservedMarkerSimpleTypeKey = \"markerSimpleType\";\n\n/**\n * @legacy\n * @alpha\n */\nexport interface IJSONMarkerSegment extends IJSONSegment {\n\tmarker: IMarkerDef;\n}\n\n/**\n * Markers are a special kind of segment that do not hold any content.\n *\n * Markers with a reference type of {@link ReferenceType.Tile} support spatially\n * accelerated queries for finding the next marker to the left or right of it in\n * sub-linear time. This is useful, for example, in the case of jumping from the\n * start of a paragraph to the end, assuming a paragraph is bound by markers at\n * the start and end.\n *\n * @legacy\n * @alpha\n */\nexport class Marker extends BaseSegment implements ReferencePosition, ISegment {\n\tpublic static readonly type = \"Marker\";\n\tpublic static is(segment: ISegment): segment is Marker {\n\t\treturn segment.type === Marker.type;\n\t}\n\tpublic readonly type = Marker.type;\n\n\tpublic static make(refType: ReferenceType, props?: PropertySet): Marker {\n\t\treturn new Marker(refType, props);\n\t}\n\n\tconstructor(\n\t\tpublic refType: ReferenceType,\n\t\tprops?: PropertySet,\n\t) {\n\t\tsuper(props);\n\t\tthis.cachedLength = 1;\n\t}\n\n\ttoJSONObject(): IJSONMarkerSegment {\n\t\tconst obj: IJSONMarkerSegment = { marker: { refType: this.refType } };\n\t\tsuper.addSerializedProps(obj);\n\t\treturn obj;\n\t}\n\n\tstatic fromJSONObject(spec: IJSONSegment): Marker | undefined {\n\t\tif (spec && typeof spec === \"object\" && \"marker\" in spec) {\n\t\t\treturn Marker.make((spec.marker as Marker).refType, spec.props as PropertySet);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tclone(): Marker {\n\t\tconst b = Marker.make(this.refType, this.properties);\n\t\tthis.cloneInto(b);\n\t\treturn b;\n\t}\n\n\tgetSegment(): Marker {\n\t\treturn this;\n\t}\n\n\tgetOffset(): number {\n\t\treturn 0;\n\t}\n\n\tgetProperties(): PropertySet | undefined {\n\t\treturn this.properties;\n\t}\n\n\tgetId(): string | undefined {\n\t\treturn this.properties?.[reservedMarkerIdKey] as string;\n\t}\n\n\ttoString(): string {\n\t\treturn `M${this.getId()}`;\n\t}\n\n\tprotected createSplitSegmentAt(pos: number): undefined {\n\t\treturn undefined;\n\t}\n\n\tcanAppend(segment: ISegment): boolean {\n\t\treturn false;\n\t}\n\n\tappend(): void {\n\t\tthrow new Error(\"Can not append to marker\");\n\t}\n}\n\n/**\n * @deprecated This functionality was not meant to be exported and will be removed in a future release\n * @legacy\n * @alpha\n */\nexport class CollaborationWindow {\n\tclientId = LocalClientId;\n\tcollaborating = false;\n\n\t/**\n\t * Lowest-numbered segment in window; no client can reference a state before this one\n\t */\n\tminSeq = 0;\n\t/**\n\t * Highest-numbered segment in window and current reference sequence number for this client.\n\t */\n\tcurrentSeq = 0;\n\n\t/**\n\t * Highest-numbered localSeq used for a pending segment.\n\t * Semantically, `localSeq`s provide an ordering on in-flight merge-tree operations:\n\t * for operations stamped with localSeqs `a` and `b`, `a < b` if and only if `a` was submitted before `b`.\n\t *\n\t * @remarks - This field is analogous to the `clientSequenceNumber` field on ops, but it's accessible to merge-tree\n\t * at op submission time rather than only at ack time. This enables more natural state tracking for in-flight ops.\n\t *\n\t * It's useful to stamp ops with such an incrementing counter because it enables reasoning about which segments existed from\n\t * the perspective of the local client at a given point in 'un-acked' time, which is necessary to support the reconnect flow.\n\t *\n\t * For example, imagine a client with initial state \"123456\" submits some ops to create the text \"123456ABC\".\n\t * If they insert the \"C\" first, then \"B\", then \"A\", their local segment state might look like this:\n\t * ```js\n\t * [\n\t * { seq: 0, text: \"1234\" },\n\t * { seq: 5, text: \"56\" },\n\t * { localSeq: 3, seq: UnassignedSequenceNumber, text: \"A\" },\n\t * { localSeq: 2, seq: UnassignedSequenceNumber, text: \"B\" },\n\t * { localSeq: 1, seq: UnassignedSequenceNumber, text: \"C\" },\n\t * ]\n\t * ```\n\t * (note that {@link ISegment.localSeq} tracks the localSeq at which a segment was inserted)\n\t *\n\t * Suppose the client then disconnects and reconnects before any of its insertions are acked. The reconnect flow will necessitate\n\t * that the client regenerates and resubmits ops based on its current segment state as well as the original op that was sent.\n\t *\n\t * It will generate the ops\n\t * 1. \\{ pos: 6, text: \"C\" \\}\n\t * 2. \\{ pos: 6, text: \"B\" \\}\n\t * 3. \\{ pos: 6, text: \"A\" \\}\n\t *\n\t * since when submitting the first op, remote clients don't know that this client is about to submit the \"A\" and \"B\".\n\t *\n\t * On the other hand, imagine if the client had originally submitted the ops in the order \"A\", \"B\", \"C\"\n\t * such that the segments' local state was instead:\n\t *\n\t * ```js\n\t * [\n\t * { seq: 0, text: \"1234\" },\n\t * { seq: 5, text: \"56\" },\n\t * { localSeq: 1, seq: UnassignedSequenceNumber, text: \"A\" },\n\t * { localSeq: 2, seq: UnassignedSequenceNumber, text: \"B\" },\n\t * { localSeq: 3, seq: UnassignedSequenceNumber, text: \"C\" },\n\t * ]\n\t * ```\n\t *\n\t * The resubmitted ops should instead be:\n\t * 1. \\{ pos: 6, text: \"A\" \\}\n\t * 2. \\{ pos: 7, text: \"B\" \\}\n\t * 3. \\{ pos: 8, text: \"C\" \\}\n\t *\n\t * since remote clients will have seen the \"A\" when processing the \"B\" as well as both the \"A\" and \"B\" when processing the \"C\".\n\t * As can be seen, the list of resubmitted ops is different in the two cases despite the merge-tree's segment state only differing\n\t * in `localSeq`.\n\t *\n\t * This example is a bit simplified from the general scenario: since no remote clients modified the merge-tree while the client\n\t * was disconnected, the resubmitted ops end up matching the original ops exactly.\n\t * However, this is not generally true: the production reconnect code takes into account visibility of segments based on both acked\n\t * and local information as appropriate.\n\t * Nonetheless, this simple scenario is enough to understand why it's useful to be able to determine if a segment should be visible\n\t * from a given (seq, localSeq) perspective.\n\t */\n\tlocalSeq = 0;\n\n\tloadFrom(a: CollaborationWindow): void {\n\t\tthis.clientId = a.clientId;\n\t\tthis.collaborating = a.collaborating;\n\t\tthis.minSeq = a.minSeq;\n\t\tthis.currentSeq = a.currentSeq;\n\t}\n}\n\n/**\n * Compares two numbers.\n */\nexport const compareNumbers = (a: number, b: number): number => a - b;\n\n/**\n * Compares two strings.\n */\nexport const compareStrings = (a: string, b: string): number => a.localeCompare(b);\n\n/**\n * Get a human-readable string for a given {@link Marker}.\n *\n * @remarks This function is intended for debugging only. The exact format of\n * this string should not be relied upon between versions.\n * @internal\n */\nexport function debugMarkerToString(marker: Marker): string {\n\tlet bbuf = \"\";\n\tif (refTypeIncludesFlag(marker, ReferenceType.Tile)) {\n\t\tbbuf += \"Tile\";\n\t}\n\tlet lbuf = \"\";\n\tconst id = marker.getId();\n\tif (id) {\n\t\tbbuf += ` (${id}) `;\n\t}\n\tconst tileLabels = refGetTileLabels(marker);\n\tif (tileLabels) {\n\t\tlbuf += \"tile -- \";\n\t\tfor (let i = 0, len = tileLabels.length; i < len; i++) {\n\t\t\tconst tileLabel = tileLabels[i];\n\t\t\tif (i > 0) {\n\t\t\t\tlbuf += \"; \";\n\t\t\t}\n\t\t\tlbuf += tileLabel;\n\t\t}\n\t}\n\n\tlet pbuf = \"\";\n\tif (marker.properties) {\n\t\tpbuf += JSON.stringify(marker.properties, (key, value) => {\n\t\t\t// Avoid circular reference when stringifying makers containing handles.\n\t\t\t// (Substitute a debug string instead.)\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n\t\t\tconst handle = !!value && value.IFluidHandle;\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n\t\t\treturn handle ? `#Handle(${handle.routeContext.path}/${handle.path})` : value;\n\t\t});\n\t}\n\treturn `M ${bbuf}: ${lbuf} ${pbuf}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../src/properties.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC;IACzB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,CAAC,EAAE,WAAW,GAAG,SAAS,EAC1B,CAAC,EAAE,WAAW,GAAG,SAAS,GACxB,OAAO,CA0BT;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAiBzF;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAelF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,WAAW,GAAG,SAAS,EACjC,QAAQ,EAAE,WAAW,GACnB,WAAW,CAKb;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAClC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GAC/B,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAEzC"}
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../src/properties.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC;IACzB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,CAAC,EAAE,WAAW,GAAG,SAAS,EAC1B,CAAC,EAAE,WAAW,GAAG,SAAS,GACxB,OAAO,CA0BT;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAczF;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAMlF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,WAAW,GAAG,SAAS,EACjC,QAAQ,EAAE,WAAW,GACnB,WAAW,CAEb;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAClC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,GAC/B,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAEzC"}
@@ -43,17 +43,15 @@ exports.matchProperties = matchProperties;
43
43
  */
44
44
  function extend(base, extension) {
45
45
  if (extension !== undefined) {
46
- // eslint-disable-next-line guard-for-in, no-restricted-syntax
47
- for (const key in extension) {
48
- const v = extension[key];
49
- // TODO Non null asserting, why is this not null?
50
- if (v === null) {
46
+ for (const [key, v] of Object.entries(extension)) {
47
+ if (v === undefined) {
48
+ continue;
49
+ }
50
+ else if (v === null) {
51
51
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
52
52
  delete base[key];
53
53
  }
54
54
  else {
55
- // Non null aseerting here since we are checking if v is not null
56
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
57
55
  base[key] = v;
58
56
  }
59
57
  }
@@ -71,16 +69,7 @@ function clone(extension) {
71
69
  return undefined;
72
70
  }
73
71
  const cloneMap = createMap();
74
- // eslint-disable-next-line guard-for-in, no-restricted-syntax
75
- for (const key in extension) {
76
- const v = extension[key];
77
- if (v !== null) {
78
- // If `v` is undefined, undefined must have been assignable to `T`.
79
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
80
- cloneMap[key] = v;
81
- }
82
- }
83
- return cloneMap;
72
+ return extend(cloneMap, extension);
84
73
  }
85
74
  exports.clone = clone;
86
75
  /**
@@ -90,10 +79,7 @@ exports.clone = clone;
90
79
  * @internal
91
80
  */
92
81
  function addProperties(oldProps, newProps) {
93
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
94
- const _oldProps = oldProps ?? createMap();
95
- extend(_oldProps, newProps);
96
- return { ..._oldProps };
82
+ return extend(oldProps ?? createMap(), newProps);
97
83
  }
98
84
  exports.addProperties = addProperties;
99
85
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"properties.js","sourceRoot":"","sources":["../src/properties.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/**\n * Any mapping from a string to values of type `T`\n * @legacy\n * @alpha\n */\nexport interface MapLike<T> {\n\t[index: string]: T;\n}\n\n/**\n * A loosely-typed mapping from strings to any value.\n *\n * @remarks Property sets are expected to be JSON-stringify-able.\n *\n * @privateRemarks PropertySet is typed using `any` because when you include\n * custom methods such as toJSON(), JSON.stringify accepts most types other than\n * functions\n * @legacy\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PropertySet = MapLike<any>;\n\n/**\n * Compares two PropertySets for equality.\n *\n * @internal\n */\nexport function matchProperties(\n\ta: PropertySet | undefined,\n\tb: PropertySet | undefined,\n): boolean {\n\tif (!a && !b) {\n\t\treturn true;\n\t}\n\n\tconst keysA = a ? Object.keys(a) : [];\n\tconst keysB = b ? Object.keys(b) : [];\n\n\tif (keysA.length !== keysB.length) {\n\t\treturn false;\n\t}\n\n\tfor (const key of keysA) {\n\t\tif (b?.[key] === undefined) {\n\t\t\treturn false;\n\t\t} else if (typeof b[key] === \"object\") {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tif (!matchProperties(a?.[key], b[key])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (b[key] !== a?.[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Adds properties from one PropertySet to another.\n *\n * @internal\n */\nexport function extend<T>(base: MapLike<T>, extension: MapLike<T> | undefined): MapLike<T> {\n\tif (extension !== undefined) {\n\t\t// eslint-disable-next-line guard-for-in, no-restricted-syntax\n\t\tfor (const key in extension) {\n\t\t\tconst v = extension[key];\n\t\t\t// TODO Non null asserting, why is this not null?\n\t\t\tif (v === null) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\tdelete base[key];\n\t\t\t} else {\n\t\t\t\t// Non null aseerting here since we are checking if v is not null\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tbase[key] = v!;\n\t\t\t}\n\t\t}\n\t}\n\treturn base;\n}\n\n/**\n * Clones properties in a given PropertySet into a new PropertySet.\n *\n * @internal\n */\nexport function clone<T>(extension: MapLike<T> | undefined): MapLike<T> | undefined {\n\tif (extension === undefined) {\n\t\treturn undefined;\n\t}\n\tconst cloneMap = createMap<T>();\n\t// eslint-disable-next-line guard-for-in, no-restricted-syntax\n\tfor (const key in extension) {\n\t\tconst v = extension[key];\n\t\tif (v !== null) {\n\t\t\t// If `v` is undefined, undefined must have been assignable to `T`.\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tcloneMap[key] = v!;\n\t\t}\n\t}\n\treturn cloneMap;\n}\n\n/**\n * Add properties in one PropertySet to another PropertySet. If the PropertySet we are adding\n * to does not exist, create one.\n *\n * @internal\n */\nexport function addProperties(\n\toldProps: PropertySet | undefined,\n\tnewProps: PropertySet,\n): PropertySet {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst _oldProps = oldProps ?? createMap<any>();\n\textend(_oldProps, newProps);\n\treturn { ..._oldProps };\n}\n\n/**\n * Replace values of undefined in one PropertySet with values for the same key from another PropertySet.\n *\n * @internal\n */\nexport function extendIfUndefined<T>(\n\tbase: MapLike<T>,\n\textension: MapLike<T> | undefined,\n): MapLike<T> {\n\tif (extension !== undefined) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tfor (const key in extension) {\n\t\t\tif (base[key] === undefined) {\n\t\t\t\t// TODO Non null asserting, why is this not null?\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tbase[key] = extension[key]!;\n\t\t\t}\n\t\t}\n\t}\n\treturn base;\n}\n\n/**\n * Create a MapLike with good performance.\n *\n * @internal\n */\nexport function createMap<T>(): MapLike<T> {\n\treturn Object.create(null) as MapLike<T>;\n}\n"]}
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../src/properties.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/**\n * Any mapping from a string to values of type `T`\n * @legacy\n * @alpha\n */\nexport interface MapLike<T> {\n\t[index: string]: T;\n}\n\n/**\n * A loosely-typed mapping from strings to any value.\n *\n * @remarks Property sets are expected to be JSON-stringify-able.\n *\n * @privateRemarks PropertySet is typed using `any` because when you include\n * custom methods such as toJSON(), JSON.stringify accepts most types other than\n * functions\n * @legacy\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PropertySet = MapLike<any>;\n\n/**\n * Compares two PropertySets for equality.\n *\n * @internal\n */\nexport function matchProperties(\n\ta: PropertySet | undefined,\n\tb: PropertySet | undefined,\n): boolean {\n\tif (!a && !b) {\n\t\treturn true;\n\t}\n\n\tconst keysA = a ? Object.keys(a) : [];\n\tconst keysB = b ? Object.keys(b) : [];\n\n\tif (keysA.length !== keysB.length) {\n\t\treturn false;\n\t}\n\n\tfor (const key of keysA) {\n\t\tif (b?.[key] === undefined) {\n\t\t\treturn false;\n\t\t} else if (typeof b[key] === \"object\") {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tif (!matchProperties(a?.[key], b[key])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (b[key] !== a?.[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Adds properties from one PropertySet to another.\n *\n * @internal\n */\nexport function extend<T>(base: MapLike<T>, extension: MapLike<T> | undefined): MapLike<T> {\n\tif (extension !== undefined) {\n\t\tfor (const [key, v] of Object.entries(extension)) {\n\t\t\tif (v === undefined) {\n\t\t\t\tcontinue;\n\t\t\t} else if (v === null) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\tdelete base[key];\n\t\t\t} else {\n\t\t\t\tbase[key] = v;\n\t\t\t}\n\t\t}\n\t}\n\treturn base;\n}\n\n/**\n * Clones properties in a given PropertySet into a new PropertySet.\n *\n * @internal\n */\nexport function clone<T>(extension: MapLike<T> | undefined): MapLike<T> | undefined {\n\tif (extension === undefined) {\n\t\treturn undefined;\n\t}\n\tconst cloneMap = createMap<T>();\n\treturn extend(cloneMap, extension);\n}\n\n/**\n * Add properties in one PropertySet to another PropertySet. If the PropertySet we are adding\n * to does not exist, create one.\n *\n * @internal\n */\nexport function addProperties(\n\toldProps: PropertySet | undefined,\n\tnewProps: PropertySet,\n): PropertySet {\n\treturn extend(oldProps ?? createMap<unknown>(), newProps);\n}\n\n/**\n * Replace values of undefined in one PropertySet with values for the same key from another PropertySet.\n *\n * @internal\n */\nexport function extendIfUndefined<T>(\n\tbase: MapLike<T>,\n\textension: MapLike<T> | undefined,\n): MapLike<T> {\n\tif (extension !== undefined) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tfor (const key in extension) {\n\t\t\tif (base[key] === undefined) {\n\t\t\t\t// TODO Non null asserting, why is this not null?\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tbase[key] = extension[key]!;\n\t\t\t}\n\t\t}\n\t}\n\treturn base;\n}\n\n/**\n * Create a MapLike with good performance.\n *\n * @internal\n */\nexport function createMap<T>(): MapLike<T> {\n\treturn Object.create(null) as MapLike<T>;\n}\n"]}
@@ -74,6 +74,12 @@ export interface ReferencePosition {
74
74
  * @param newProps - Properties to add to this reference.
75
75
  * @remarks Note that merge-tree does not broadcast changes to other clients. It is up to the consumer
76
76
  * to ensure broadcast happens if that is desired.
77
+ *
78
+ * @deprecated - This function should not be used externally and will be removed in a subsequent release.
79
+ *
80
+ * @privateRemarks This interface is used by both marker segments and local reference positions. We will remove
81
+ * this function from segments, but keep it on local reference positions for now. So it has been added to local reference
82
+ * positions, and must be removed here to not apply to marker segments.
77
83
  */
78
84
  addProperties(newProps: PropertySet): void;
79
85
  isLeaf(): this is ISegment;
@@ -1 +1 @@
1
- {"version":3,"file":"referencePositions.d.ts","sourceRoot":"","sources":["../src/referencePositions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAC3D;;GAEG;AACH,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,YAAY,EAAE,iBAAiB,GAAG,aAAa,EAC/C,KAAK,EAAE,aAAa,GAClB,OAAO,CAIT;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,WAAY,iBAAiB,KAAG,MAAM,EAAE,GAAG,SAG3D,CAAC;AAEd;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGjF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAEnE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IAEzB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC,OAAO,EAAE,aAAa,CAAC;IAEvB;;;OAGG;IACH,UAAU,IAAI,QAAQ,GAAG,SAAS,CAAC;IAEnC;;;;;;;OAOG;IACH,SAAS,IAAI,MAAM,CAAC;IAEpB;;;;OAIG;IACH,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,MAAM,IAAI,IAAI,IAAI,QAAQ,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAE/E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAE/E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAQ5F"}
1
+ {"version":3,"file":"referencePositions.d.ts","sourceRoot":"","sources":["../src/referencePositions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAC3D;;GAEG;AACH,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,YAAY,EAAE,iBAAiB,GAAG,aAAa,EAC/C,KAAK,EAAE,aAAa,GAClB,OAAO,CAIT;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,WAAY,iBAAiB,KAAG,MAAM,EAAE,GAAG,SAG3D,CAAC;AAEd;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGjF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAEnE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IAEzB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC,OAAO,EAAE,aAAa,CAAC;IAEvB;;;OAGG;IACH,UAAU,IAAI,QAAQ,GAAG,SAAS,CAAC;IAEnC;;;;;;;OAOG;IACH,SAAS,IAAI,MAAM,CAAC;IAEpB;;;;;;;;;;OAUG;IACH,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,MAAM,IAAI,IAAI,IAAI,QAAQ,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAE/E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAE/E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAQ5F"}
@@ -1 +1 @@
1
- {"version":3,"file":"referencePositions.js","sourceRoot":"","sources":["../src/referencePositions.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,qCAAyC;AAGzC;;GAEG;AACU,QAAA,qBAAqB,GAAG,qBAAqB,CAAC;AAC3D;;GAEG;AACU,QAAA,sBAAsB,GAAG,sBAAsB,CAAC;AAE7D;;;GAGG;AACH,SAAgB,mBAAmB,CAClC,YAA+C,EAC/C,KAAoB;IAEpB,MAAM,OAAO,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;IACvF,sCAAsC;IACtC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAPD,kDAOC;AAED;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,MAAyB,EAAwB,EAAE,CACnF,mBAAmB,CAAC,MAAM,EAAE,sBAAa,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU;IACnE,CAAC,CAAE,MAAM,CAAC,UAAU,CAAC,6BAAqB,CAAc;IACxD,CAAC,CAAC,SAAS,CAAC;AAHD,QAAA,gBAAgB,oBAGf;AAEd;;;;GAIG;AACH,SAAgB,eAAe,CAAC,MAAyB,EAAE,KAAa;IACvE,MAAM,UAAU,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAC7C,CAAC;AAHD,0CAGC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,MAAyB;IACzD,OAAO,IAAA,wBAAgB,EAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AAC/C,CAAC;AAFD,4CAEC;AAkDD;;GAEG;AACU,QAAA,yBAAyB,GAAG,CAAC,CAAC,CAAC;AAE5C;;;GAGG;AACH,SAAgB,oBAAoB,CAA8B,CAAI,EAAE,CAAI;IAC3E,OAAO,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAFD,oDAEC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAA8B,CAAI,EAAE,CAAI;IAC3E,OAAO,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAFD,oDAEC;AAED;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,CAAoB,EAAE,CAAoB;IACnF,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;IAC5B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC;SAAM,CAAC;QACP,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;AACF,CAAC;AARD,8DAQC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { SlidingPreference } from \"./localReference.js\";\nimport { ISegment } from \"./mergeTreeNodes.js\";\nimport { ReferenceType } from \"./ops.js\";\nimport { PropertySet } from \"./properties.js\";\n\n/**\n * @internal\n */\nexport const reservedTileLabelsKey = \"referenceTileLabels\";\n/**\n * @internal\n */\nexport const reservedRangeLabelsKey = \"referenceRangeLabels\";\n\n/**\n * Determines if the given reference type includes the given flags.\n * @internal\n */\nexport function refTypeIncludesFlag(\n\trefPosOrType: ReferencePosition | ReferenceType,\n\tflags: ReferenceType,\n): boolean {\n\tconst refType = typeof refPosOrType === \"number\" ? refPosOrType : refPosOrType.refType;\n\t// eslint-disable-next-line no-bitwise\n\treturn (refType & flags) !== 0;\n}\n\n/**\n * Gets the tile labels stored in the given reference position.\n * @legacy\n * @alpha\n */\nexport const refGetTileLabels = (refPos: ReferencePosition): string[] | undefined =>\n\trefTypeIncludesFlag(refPos, ReferenceType.Tile) && refPos.properties\n\t\t? (refPos.properties[reservedTileLabelsKey] as string[])\n\t\t: undefined;\n\n/**\n * Determines if a reference position has the given tile label.\n * @legacy\n * @alpha\n */\nexport function refHasTileLabel(refPos: ReferencePosition, label: string): boolean {\n\tconst tileLabels = refGetTileLabels(refPos);\n\treturn tileLabels?.includes(label) ?? false;\n}\n\n/**\n * Determines if a reference position has any tile labels.\n * @internal\n */\nexport function refHasTileLabels(refPos: ReferencePosition): boolean {\n\treturn refGetTileLabels(refPos) !== undefined;\n}\n\n/**\n * Represents a reference to a place within a merge tree. This place conceptually remains stable over time\n * by referring to a particular segment and offset within that segment.\n * Thus, this reference's character position changes as the tree is edited.\n * @legacy\n * @alpha\n */\nexport interface ReferencePosition {\n\t/**\n\t * Properties associated with this reference\n\t */\n\tproperties?: PropertySet;\n\n\t/**\n\t * The direction for this reference position to slide when the segment it\n\t * points to is removed. See {@link (SlidingPreference:type)} for additional context.\n\t *\n\t * Defaults to SlidingPreference.Forward\n\t */\n\tslidingPreference?: SlidingPreference;\n\n\trefType: ReferenceType;\n\n\t/**\n\t * Gets the segment that this reference position is semantically associated with. Returns undefined iff the\n\t * reference became detached from the string.\n\t */\n\tgetSegment(): ISegment | undefined;\n\n\t/**\n\t * Gets the offset for this reference position within its associated segment.\n\t *\n\t * @example\n\t *\n\t * If a merge-tree has 3 leaf segments [\"hello\", \" \", \"world\"] and a ReferencePosition refers to the \"l\"\n\t * in \"world\", that reference's offset would be 3 as \"l\" is the character at index 3 within \"world\".\n\t */\n\tgetOffset(): number;\n\n\t/**\n\t * @param newProps - Properties to add to this reference.\n\t * @remarks Note that merge-tree does not broadcast changes to other clients. It is up to the consumer\n\t * to ensure broadcast happens if that is desired.\n\t */\n\taddProperties(newProps: PropertySet): void;\n\tisLeaf(): this is ISegment;\n}\n\n/**\n * @internal\n */\nexport const DetachedReferencePosition = -1;\n\n/**\n * Finds the minimum reference position.\n * @internal\n */\nexport function minReferencePosition<T extends ReferencePosition>(a: T, b: T): T {\n\treturn compareReferencePositions(a, b) < 0 ? a : b;\n}\n\n/**\n * Finds the maximum reference position.\n * @internal\n */\nexport function maxReferencePosition<T extends ReferencePosition>(a: T, b: T): T {\n\treturn compareReferencePositions(a, b) > 0 ? a : b;\n}\n\n/**\n * Compares two reference positions.\n * @internal\n */\nexport function compareReferencePositions(a: ReferencePosition, b: ReferencePosition): number {\n\tconst aSeg = a.getSegment();\n\tconst bSeg = b.getSegment();\n\tif (aSeg === bSeg) {\n\t\treturn a.getOffset() - b.getOffset();\n\t} else {\n\t\treturn aSeg === undefined || (bSeg !== undefined && aSeg.ordinal < bSeg.ordinal) ? -1 : 1;\n\t}\n}\n"]}
1
+ {"version":3,"file":"referencePositions.js","sourceRoot":"","sources":["../src/referencePositions.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,qCAAyC;AAGzC;;GAEG;AACU,QAAA,qBAAqB,GAAG,qBAAqB,CAAC;AAC3D;;GAEG;AACU,QAAA,sBAAsB,GAAG,sBAAsB,CAAC;AAE7D;;;GAGG;AACH,SAAgB,mBAAmB,CAClC,YAA+C,EAC/C,KAAoB;IAEpB,MAAM,OAAO,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;IACvF,sCAAsC;IACtC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAPD,kDAOC;AAED;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,MAAyB,EAAwB,EAAE,CACnF,mBAAmB,CAAC,MAAM,EAAE,sBAAa,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU;IACnE,CAAC,CAAE,MAAM,CAAC,UAAU,CAAC,6BAAqB,CAAc;IACxD,CAAC,CAAC,SAAS,CAAC;AAHD,QAAA,gBAAgB,oBAGf;AAEd;;;;GAIG;AACH,SAAgB,eAAe,CAAC,MAAyB,EAAE,KAAa;IACvE,MAAM,UAAU,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAC7C,CAAC;AAHD,0CAGC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,MAAyB;IACzD,OAAO,IAAA,wBAAgB,EAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AAC/C,CAAC;AAFD,4CAEC;AAwDD;;GAEG;AACU,QAAA,yBAAyB,GAAG,CAAC,CAAC,CAAC;AAE5C;;;GAGG;AACH,SAAgB,oBAAoB,CAA8B,CAAI,EAAE,CAAI;IAC3E,OAAO,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAFD,oDAEC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAA8B,CAAI,EAAE,CAAI;IAC3E,OAAO,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAFD,oDAEC;AAED;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,CAAoB,EAAE,CAAoB;IACnF,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;IAC5B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC;SAAM,CAAC;QACP,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;AACF,CAAC;AARD,8DAQC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { SlidingPreference } from \"./localReference.js\";\nimport { ISegment } from \"./mergeTreeNodes.js\";\nimport { ReferenceType } from \"./ops.js\";\nimport { PropertySet } from \"./properties.js\";\n\n/**\n * @internal\n */\nexport const reservedTileLabelsKey = \"referenceTileLabels\";\n/**\n * @internal\n */\nexport const reservedRangeLabelsKey = \"referenceRangeLabels\";\n\n/**\n * Determines if the given reference type includes the given flags.\n * @internal\n */\nexport function refTypeIncludesFlag(\n\trefPosOrType: ReferencePosition | ReferenceType,\n\tflags: ReferenceType,\n): boolean {\n\tconst refType = typeof refPosOrType === \"number\" ? refPosOrType : refPosOrType.refType;\n\t// eslint-disable-next-line no-bitwise\n\treturn (refType & flags) !== 0;\n}\n\n/**\n * Gets the tile labels stored in the given reference position.\n * @legacy\n * @alpha\n */\nexport const refGetTileLabels = (refPos: ReferencePosition): string[] | undefined =>\n\trefTypeIncludesFlag(refPos, ReferenceType.Tile) && refPos.properties\n\t\t? (refPos.properties[reservedTileLabelsKey] as string[])\n\t\t: undefined;\n\n/**\n * Determines if a reference position has the given tile label.\n * @legacy\n * @alpha\n */\nexport function refHasTileLabel(refPos: ReferencePosition, label: string): boolean {\n\tconst tileLabels = refGetTileLabels(refPos);\n\treturn tileLabels?.includes(label) ?? false;\n}\n\n/**\n * Determines if a reference position has any tile labels.\n * @internal\n */\nexport function refHasTileLabels(refPos: ReferencePosition): boolean {\n\treturn refGetTileLabels(refPos) !== undefined;\n}\n\n/**\n * Represents a reference to a place within a merge tree. This place conceptually remains stable over time\n * by referring to a particular segment and offset within that segment.\n * Thus, this reference's character position changes as the tree is edited.\n * @legacy\n * @alpha\n */\nexport interface ReferencePosition {\n\t/**\n\t * Properties associated with this reference\n\t */\n\tproperties?: PropertySet;\n\n\t/**\n\t * The direction for this reference position to slide when the segment it\n\t * points to is removed. See {@link (SlidingPreference:type)} for additional context.\n\t *\n\t * Defaults to SlidingPreference.Forward\n\t */\n\tslidingPreference?: SlidingPreference;\n\n\trefType: ReferenceType;\n\n\t/**\n\t * Gets the segment that this reference position is semantically associated with. Returns undefined iff the\n\t * reference became detached from the string.\n\t */\n\tgetSegment(): ISegment | undefined;\n\n\t/**\n\t * Gets the offset for this reference position within its associated segment.\n\t *\n\t * @example\n\t *\n\t * If a merge-tree has 3 leaf segments [\"hello\", \" \", \"world\"] and a ReferencePosition refers to the \"l\"\n\t * in \"world\", that reference's offset would be 3 as \"l\" is the character at index 3 within \"world\".\n\t */\n\tgetOffset(): number;\n\n\t/**\n\t * @param newProps - Properties to add to this reference.\n\t * @remarks Note that merge-tree does not broadcast changes to other clients. It is up to the consumer\n\t * to ensure broadcast happens if that is desired.\n\t *\n\t * @deprecated - This function should not be used externally and will be removed in a subsequent release.\n\t *\n\t * @privateRemarks This interface is used by both marker segments and local reference positions. We will remove\n\t * this function from segments, but keep it on local reference positions for now. So it has been added to local reference\n\t * positions, and must be removed here to not apply to marker segments.\n\t */\n\taddProperties(newProps: PropertySet): void;\n\tisLeaf(): this is ISegment;\n}\n\n/**\n * @internal\n */\nexport const DetachedReferencePosition = -1;\n\n/**\n * Finds the minimum reference position.\n * @internal\n */\nexport function minReferencePosition<T extends ReferencePosition>(a: T, b: T): T {\n\treturn compareReferencePositions(a, b) < 0 ? a : b;\n}\n\n/**\n * Finds the maximum reference position.\n * @internal\n */\nexport function maxReferencePosition<T extends ReferencePosition>(a: T, b: T): T {\n\treturn compareReferencePositions(a, b) > 0 ? a : b;\n}\n\n/**\n * Compares two reference positions.\n * @internal\n */\nexport function compareReferencePositions(a: ReferencePosition, b: ReferencePosition): number {\n\tconst aSeg = a.getSegment();\n\tconst bSeg = b.getSegment();\n\tif (aSeg === bSeg) {\n\t\treturn a.getOffset() - b.getOffset();\n\t} else {\n\t\treturn aSeg === undefined || (bSeg !== undefined && aSeg.ordinal < bSeg.ordinal) ? -1 : 1;\n\t}\n}\n"]}