@fluidframework/merge-tree 2.5.0 → 2.10.0-304831

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 (112) hide show
  1. package/api-report/merge-tree.legacy.alpha.api.md +0 -230
  2. package/dist/client.d.ts +9 -8
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +7 -6
  5. package/dist/client.js.map +1 -1
  6. package/dist/index.d.ts +3 -4
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -5
  9. package/dist/index.js.map +1 -1
  10. package/dist/legacy.d.ts +0 -12
  11. package/dist/mergeTree.d.ts +14 -13
  12. package/dist/mergeTree.d.ts.map +1 -1
  13. package/dist/mergeTree.js +51 -20
  14. package/dist/mergeTree.js.map +1 -1
  15. package/dist/mergeTreeNodes.d.ts +13 -79
  16. package/dist/mergeTreeNodes.d.ts.map +1 -1
  17. package/dist/mergeTreeNodes.js +5 -95
  18. package/dist/mergeTreeNodes.js.map +1 -1
  19. package/dist/referencePositions.d.ts +0 -12
  20. package/dist/referencePositions.d.ts.map +1 -1
  21. package/dist/referencePositions.js.map +1 -1
  22. package/dist/segmentGroupCollection.d.ts +7 -14
  23. package/dist/segmentGroupCollection.d.ts.map +1 -1
  24. package/dist/segmentGroupCollection.js +2 -9
  25. package/dist/segmentGroupCollection.js.map +1 -1
  26. package/dist/segmentPropertiesManager.d.ts +13 -12
  27. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  28. package/dist/segmentPropertiesManager.js +19 -13
  29. package/dist/segmentPropertiesManager.js.map +1 -1
  30. package/dist/sortedSegmentSet.d.ts +0 -1
  31. package/dist/sortedSegmentSet.d.ts.map +1 -1
  32. package/dist/sortedSegmentSet.js.map +1 -1
  33. package/dist/sortedSet.d.ts +0 -1
  34. package/dist/sortedSet.d.ts.map +1 -1
  35. package/dist/sortedSet.js +0 -1
  36. package/dist/sortedSet.js.map +1 -1
  37. package/dist/test/index.d.ts +2 -2
  38. package/dist/test/index.d.ts.map +1 -1
  39. package/dist/test/index.js +2 -4
  40. package/dist/test/index.js.map +1 -1
  41. package/dist/test/mergeTree.annotate.spec.js +4 -4
  42. package/dist/test/mergeTree.annotate.spec.js.map +1 -1
  43. package/dist/test/segmentGroupCollection.spec.js +22 -18
  44. package/dist/test/segmentGroupCollection.spec.js.map +1 -1
  45. package/dist/test/snapshot.spec.js.map +1 -1
  46. package/dist/test/snapshot.utils.d.ts +4 -4
  47. package/dist/test/snapshot.utils.d.ts.map +1 -1
  48. package/dist/test/snapshot.utils.js.map +1 -1
  49. package/dist/textSegment.d.ts +1 -3
  50. package/dist/textSegment.d.ts.map +1 -1
  51. package/dist/textSegment.js.map +1 -1
  52. package/lib/client.d.ts +9 -8
  53. package/lib/client.d.ts.map +1 -1
  54. package/lib/client.js +8 -7
  55. package/lib/client.js.map +1 -1
  56. package/lib/index.d.ts +3 -4
  57. package/lib/index.d.ts.map +1 -1
  58. package/lib/index.js +2 -3
  59. package/lib/index.js.map +1 -1
  60. package/lib/legacy.d.ts +0 -12
  61. package/lib/mergeTree.d.ts +14 -13
  62. package/lib/mergeTree.d.ts.map +1 -1
  63. package/lib/mergeTree.js +53 -22
  64. package/lib/mergeTree.js.map +1 -1
  65. package/lib/mergeTreeNodes.d.ts +13 -79
  66. package/lib/mergeTreeNodes.d.ts.map +1 -1
  67. package/lib/mergeTreeNodes.js +5 -94
  68. package/lib/mergeTreeNodes.js.map +1 -1
  69. package/lib/referencePositions.d.ts +0 -12
  70. package/lib/referencePositions.d.ts.map +1 -1
  71. package/lib/referencePositions.js.map +1 -1
  72. package/lib/segmentGroupCollection.d.ts +7 -14
  73. package/lib/segmentGroupCollection.d.ts.map +1 -1
  74. package/lib/segmentGroupCollection.js +2 -9
  75. package/lib/segmentGroupCollection.js.map +1 -1
  76. package/lib/segmentPropertiesManager.d.ts +13 -12
  77. package/lib/segmentPropertiesManager.d.ts.map +1 -1
  78. package/lib/segmentPropertiesManager.js +17 -12
  79. package/lib/segmentPropertiesManager.js.map +1 -1
  80. package/lib/sortedSegmentSet.d.ts +0 -1
  81. package/lib/sortedSegmentSet.d.ts.map +1 -1
  82. package/lib/sortedSegmentSet.js.map +1 -1
  83. package/lib/sortedSet.d.ts +0 -1
  84. package/lib/sortedSet.d.ts.map +1 -1
  85. package/lib/sortedSet.js +0 -1
  86. package/lib/sortedSet.js.map +1 -1
  87. package/lib/test/index.d.ts +2 -2
  88. package/lib/test/index.d.ts.map +1 -1
  89. package/lib/test/index.js +2 -2
  90. package/lib/test/index.js.map +1 -1
  91. package/lib/test/mergeTree.annotate.spec.js +4 -4
  92. package/lib/test/mergeTree.annotate.spec.js.map +1 -1
  93. package/lib/test/segmentGroupCollection.spec.js +22 -18
  94. package/lib/test/segmentGroupCollection.spec.js.map +1 -1
  95. package/lib/test/snapshot.spec.js.map +1 -1
  96. package/lib/test/snapshot.utils.d.ts +4 -4
  97. package/lib/test/snapshot.utils.d.ts.map +1 -1
  98. package/lib/test/snapshot.utils.js.map +1 -1
  99. package/lib/textSegment.d.ts +1 -3
  100. package/lib/textSegment.d.ts.map +1 -1
  101. package/lib/textSegment.js.map +1 -1
  102. package/package.json +91 -19
  103. package/src/client.ts +15 -12
  104. package/src/index.ts +6 -3
  105. package/src/mergeTree.ts +87 -38
  106. package/src/mergeTreeNodes.ts +16 -177
  107. package/src/referencePositions.ts +0 -12
  108. package/src/segmentGroupCollection.ts +14 -20
  109. package/src/segmentPropertiesManager.ts +30 -12
  110. package/src/sortedSegmentSet.ts +0 -1
  111. package/src/sortedSet.ts +0 -1
  112. package/src/textSegment.ts +1 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/merge-tree",
3
- "version": "2.5.0",
3
+ "version": "2.10.0-304831",
4
4
  "description": "Merge tree",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -81,30 +81,30 @@
81
81
  "temp-directory": "nyc/.nyc_output"
82
82
  },
83
83
  "dependencies": {
84
- "@fluid-internal/client-utils": "~2.5.0",
85
- "@fluidframework/container-definitions": "~2.5.0",
86
- "@fluidframework/core-interfaces": "~2.5.0",
87
- "@fluidframework/core-utils": "~2.5.0",
88
- "@fluidframework/datastore-definitions": "~2.5.0",
89
- "@fluidframework/driver-definitions": "~2.5.0",
90
- "@fluidframework/runtime-definitions": "~2.5.0",
91
- "@fluidframework/runtime-utils": "~2.5.0",
92
- "@fluidframework/shared-object-base": "~2.5.0",
93
- "@fluidframework/telemetry-utils": "~2.5.0"
84
+ "@fluid-internal/client-utils": "2.10.0-304831",
85
+ "@fluidframework/container-definitions": "2.10.0-304831",
86
+ "@fluidframework/core-interfaces": "2.10.0-304831",
87
+ "@fluidframework/core-utils": "2.10.0-304831",
88
+ "@fluidframework/datastore-definitions": "2.10.0-304831",
89
+ "@fluidframework/driver-definitions": "2.10.0-304831",
90
+ "@fluidframework/runtime-definitions": "2.10.0-304831",
91
+ "@fluidframework/runtime-utils": "2.10.0-304831",
92
+ "@fluidframework/shared-object-base": "2.10.0-304831",
93
+ "@fluidframework/telemetry-utils": "2.10.0-304831"
94
94
  },
95
95
  "devDependencies": {
96
96
  "@arethetypeswrong/cli": "^0.16.4",
97
97
  "@biomejs/biome": "~1.9.3",
98
- "@fluid-internal/mocha-test-setup": "~2.5.0",
99
- "@fluid-private/stochastic-test-utils": "~2.5.0",
100
- "@fluid-private/test-pairwise-generator": "~2.5.0",
98
+ "@fluid-internal/mocha-test-setup": "2.10.0-304831",
99
+ "@fluid-private/stochastic-test-utils": "2.10.0-304831",
100
+ "@fluid-private/test-pairwise-generator": "2.10.0-304831",
101
101
  "@fluid-tools/benchmark": "^0.50.0",
102
- "@fluid-tools/build-cli": "^0.49.0",
102
+ "@fluid-tools/build-cli": "^0.50.0",
103
103
  "@fluidframework/build-common": "^2.0.3",
104
- "@fluidframework/build-tools": "^0.49.0",
104
+ "@fluidframework/build-tools": "^0.50.0",
105
105
  "@fluidframework/eslint-config-fluid": "^5.4.0",
106
- "@fluidframework/merge-tree-previous": "npm:@fluidframework/merge-tree@~2.4.0",
107
- "@fluidframework/test-runtime-utils": "~2.5.0",
106
+ "@fluidframework/merge-tree-previous": "npm:@fluidframework/merge-tree@2.5.0",
107
+ "@fluidframework/test-runtime-utils": "2.10.0-304831",
108
108
  "@microsoft/api-extractor": "7.47.8",
109
109
  "@types/diff": "^3.5.1",
110
110
  "@types/mocha": "^9.1.1",
@@ -124,7 +124,79 @@
124
124
  "typescript": "~5.4.5"
125
125
  },
126
126
  "typeValidation": {
127
- "broken": {},
127
+ "broken": {
128
+ "Class_BaseSegment": {
129
+ "backCompat": false
130
+ },
131
+ "Class_Marker": {
132
+ "backCompat": false
133
+ },
134
+ "Class_MergeNode": {
135
+ "backCompat": false,
136
+ "forwardCompat": false
137
+ },
138
+ "Class_TextSegment": {
139
+ "backCompat": false
140
+ },
141
+ "Class_TrackingGroup": {
142
+ "backCompat": false
143
+ },
144
+ "Class_SegmentGroupCollection": {
145
+ "backCompat": false,
146
+ "forwardCompat": false
147
+ },
148
+ "ClassStatics_BaseSegment": {
149
+ "backCompat": false
150
+ },
151
+ "ClassStatics_Marker": {
152
+ "backCompat": false
153
+ },
154
+ "ClassStatics_MergeNode": {
155
+ "backCompat": false
156
+ },
157
+ "ClassStatics_TextSegment": {
158
+ "backCompat": false
159
+ },
160
+ "ClassStatics_TrackingGroup": {
161
+ "backCompat": false
162
+ },
163
+ "ClassStatics_SegmentGroupCollection": {
164
+ "backCompat": false
165
+ },
166
+ "Interface_IMergeTreeDeltaCallbackArgs": {
167
+ "backCompat": false
168
+ },
169
+ "Interface_IMergeTreeMaintenanceCallbackArgs": {
170
+ "backCompat": false
171
+ },
172
+ "Interface_IMergeTreeSegmentDelta": {
173
+ "backCompat": false
174
+ },
175
+ "Interface_IMoveInfo": {
176
+ "backCompat": false
177
+ },
178
+ "Interface_ISegment": {
179
+ "backCompat": false
180
+ },
181
+ "Interface_ITrackingGroup": {
182
+ "backCompat": false
183
+ },
184
+ "Interface_ObliterateInfo": {
185
+ "backCompat": false
186
+ },
187
+ "Interface_ReferencePosition": {
188
+ "backCompat": false
189
+ },
190
+ "Interface_SegmentGroup": {
191
+ "backCompat": false
192
+ },
193
+ "TypeAlias_MergeTreeDeltaRevertible": {
194
+ "backCompat": false
195
+ },
196
+ "TypeAlias_Trackable": {
197
+ "backCompat": false
198
+ }
199
+ },
128
200
  "entrypoint": "legacy"
129
201
  },
130
202
  "scripts": {
package/src/client.ts CHANGED
@@ -29,7 +29,11 @@ import { MergeTreeTextHelper } from "./MergeTreeTextHelper.js";
29
29
  import { DoublyLinkedList, RedBlackTree } from "./collections/index.js";
30
30
  import { UnassignedSequenceNumber, UniversalSequenceNumber } from "./constants.js";
31
31
  import { LocalReferencePosition, SlidingPreference } from "./localReference.js";
32
- import { IMergeTreeOptions, MergeTree, errorIfOptionNotTrue } from "./mergeTree.js";
32
+ import {
33
+ MergeTree,
34
+ errorIfOptionNotTrue,
35
+ type IMergeTreeOptionsInternal,
36
+ } from "./mergeTree.js";
33
37
  import type {
34
38
  IMergeTreeClientSequenceArgs,
35
39
  IMergeTreeDeltaCallbackArgs,
@@ -100,9 +104,7 @@ export interface IIntegerRange {
100
104
  * Emitted before this client's merge-tree normalizes its segments on reconnect, potentially
101
105
  * ordering them. Useful for DDS-like consumers built atop the merge-tree to compute any information
102
106
  * they need for rebasing their ops on reconnection.
103
- * @legacy
104
- * @alpha
105
- * @deprecated This functionality was not meant to be exported and will be removed in a future release
107
+ * @internal
106
108
  */
107
109
  export interface IClientEvents {
108
110
  (event: "normalize", listener: (target: IEventThisPlaceHolder) => void): void;
@@ -125,9 +127,12 @@ export interface IClientEvents {
125
127
  }
126
128
 
127
129
  /**
128
- * @deprecated This functionality was not meant to be exported and will be removed in a future release
129
- * @legacy
130
- * @alpha
130
+ * This class encapsulates a merge-tree, and provides a local client specific view over it and
131
+ * the capability to modify it as the local client. Additionally it provides
132
+ * binding for processing remote ops on the encapsulated merge tree, and projects local and remote events
133
+ * caused by all modification to the underlying merge-tree.
134
+ *
135
+ * @internal
131
136
  */
132
137
  export class Client extends TypedEventEmitter<IClientEvents> {
133
138
  public longClientId: string | undefined;
@@ -155,7 +160,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
155
160
  constructor(
156
161
  public readonly specToSegment: (spec: IJSONSegment) => ISegment,
157
162
  public readonly logger: ITelemetryLoggerExt,
158
- options?: IMergeTreeOptions & PropertySet,
163
+ options?: IMergeTreeOptionsInternal & PropertySet,
159
164
  private readonly getMinInFlightRefSeq: () => number | undefined = (): undefined =>
160
165
  undefined,
161
166
  ) {
@@ -857,7 +862,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
857
862
  private resetPendingDeltaToOps(
858
863
  resetOp: IMergeTreeDeltaOp,
859
864
  // eslint-disable-next-line import/no-deprecated
860
- segmentGroup: SegmentGroup,
865
+ segmentGroup: SegmentGroup<ISegmentLeaf>,
861
866
  ): IMergeTreeDeltaOp[] {
862
867
  assert(!!segmentGroup, 0x033 /* "Segment group undefined" */);
863
868
  const NACKedSegmentGroup = this.pendingRebase?.shift()?.data;
@@ -890,7 +895,7 @@ export class Client extends TypedEventEmitter<IClientEvents> {
890
895
  a.ordinal < b.ordinal ? -1 : 1,
891
896
  )) {
892
897
  assert(
893
- segment.segmentGroups.remove?.(segmentGroup) === true,
898
+ segment.segmentGroups?.remove?.(segmentGroup) === true,
894
899
  0x035 /* "Segment group not in segment pending queue" */,
895
900
  );
896
901
  assert(
@@ -1010,7 +1015,6 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1010
1015
  opList.push(newOp);
1011
1016
  }
1012
1017
  } else if (newOp) {
1013
- // eslint-disable-next-line import/no-deprecated
1014
1018
  const newSegmentGroup: SegmentGroup = {
1015
1019
  segments: [],
1016
1020
  localSeq: segmentGroup.localSeq,
@@ -1174,7 +1178,6 @@ export class Client extends TypedEventEmitter<IClientEvents> {
1174
1178
  segmentGroup: SegmentGroup | SegmentGroup[],
1175
1179
  ): IMergeTreeOp {
1176
1180
  if (this.pendingRebase === undefined || this.pendingRebase.empty) {
1177
- // eslint-disable-next-line import/no-deprecated
1178
1181
  let firstGroup: SegmentGroup;
1179
1182
  if (Array.isArray(segmentGroup)) {
1180
1183
  if (segmentGroup.length === 0) {
package/src/index.ts CHANGED
@@ -42,6 +42,7 @@ export {
42
42
  AttributionPolicy,
43
43
  IMergeTreeAttributionOptions,
44
44
  IMergeTreeOptions,
45
+ IMergeTreeOptionsInternal,
45
46
  getSlideToSegoff,
46
47
  } from "./mergeTree.js";
47
48
  export {
@@ -65,7 +66,6 @@ export {
65
66
  ISegment,
66
67
  ISegmentAction,
67
68
  Marker,
68
- MergeNode,
69
69
  reservedMarkerIdKey,
70
70
  reservedMarkerSimpleTypeKey,
71
71
  SegmentGroup,
@@ -123,8 +123,11 @@ export {
123
123
  reservedRangeLabelsKey,
124
124
  reservedTileLabelsKey,
125
125
  } from "./referencePositions.js";
126
- export { SegmentGroupCollection } from "./segmentGroupCollection.js";
127
- export { PropertiesManager, PropertiesRollback } from "./segmentPropertiesManager.js";
126
+ export {
127
+ copyPropertiesAndManager,
128
+ PropertiesManager,
129
+ PropertiesRollback,
130
+ } from "./segmentPropertiesManager.js";
128
131
  export {
129
132
  InteriorSequencePlace,
130
133
  Side,
package/src/mergeTree.ts CHANGED
@@ -10,7 +10,6 @@ import { assert, Heap, IComparer } from "@fluidframework/core-utils/internal";
10
10
  import { DataProcessingError, UsageError } from "@fluidframework/telemetry-utils/internal";
11
11
 
12
12
  import { IAttributionCollectionSerializer } from "./attributionCollection.js";
13
- // eslint-disable-next-line import/no-deprecated
14
13
  import { Client } from "./client.js";
15
14
  import { DoublyLinkedList, ListNode } from "./collections/index.js";
16
15
  import {
@@ -80,7 +79,7 @@ import {
80
79
  } from "./ops.js";
81
80
  import { PartialSequenceLengths } from "./partialLengths.js";
82
81
  import { PerspectiveImpl, isSegmentPresent } from "./perspective.js";
83
- import { PropertySet, clone, createMap, extend, extendIfUndefined } from "./properties.js";
82
+ import { PropertySet, createMap, extend, extendIfUndefined } from "./properties.js";
84
83
  import {
85
84
  DetachedReferencePosition,
86
85
  ReferencePosition,
@@ -91,7 +90,11 @@ import {
91
90
  // eslint-disable-next-line import/no-deprecated
92
91
  import { SegmentGroupCollection } from "./segmentGroupCollection.js";
93
92
  // eslint-disable-next-line import/no-deprecated
94
- import { PropertiesManager, PropertiesRollback } from "./segmentPropertiesManager.js";
93
+ import {
94
+ copyPropertiesAndManager,
95
+ PropertiesManager,
96
+ PropertiesRollback,
97
+ } from "./segmentPropertiesManager.js";
95
98
  import { Side, type InteriorSequencePlace } from "./sequencePlace.js";
96
99
  import { SortedSegmentSet } from "./sortedSegmentSet.js";
97
100
  import { zamboniSegments } from "./zamboni.js";
@@ -143,6 +146,70 @@ const LRUSegmentComparer: IComparer<LRUSegment> = {
143
146
  compare: (a, b) => a.maxSeq - b.maxSeq,
144
147
  };
145
148
 
149
+ function ackSegment(
150
+ segment: ISegmentLeaf,
151
+ segmentGroup: SegmentGroup,
152
+ opArgs: IMergeTreeDeltaOpArgs,
153
+ ): boolean {
154
+ const currentSegmentGroup = segment.segmentGroups?.dequeue();
155
+ assert(currentSegmentGroup === segmentGroup, 0x043 /* "On ack, unexpected segmentGroup!" */);
156
+ switch (opArgs.op.type) {
157
+ case MergeTreeDeltaType.ANNOTATE: {
158
+ assert(
159
+ !!segment.propertyManager,
160
+ 0x044 /* "On annotate ack, missing segment property manager!" */,
161
+ );
162
+ segment.propertyManager.ackPendingProperties(opArgs.op);
163
+ return true;
164
+ }
165
+
166
+ case MergeTreeDeltaType.INSERT: {
167
+ assert(
168
+ segment.seq === UnassignedSequenceNumber,
169
+ 0x045 /* "On insert, seq number already assigned!" */,
170
+ );
171
+ segment.seq = opArgs.sequencedMessage!.sequenceNumber;
172
+ segment.localSeq = undefined;
173
+ return true;
174
+ }
175
+
176
+ case MergeTreeDeltaType.REMOVE: {
177
+ const removalInfo: IRemovalInfo | undefined = toRemovalInfo(segment);
178
+ assert(removalInfo !== undefined, 0x046 /* "On remove ack, missing removal info!" */);
179
+ segment.localRemovedSeq = undefined;
180
+ if (removalInfo.removedSeq === UnassignedSequenceNumber) {
181
+ removalInfo.removedSeq = opArgs.sequencedMessage!.sequenceNumber;
182
+ return true;
183
+ }
184
+ return false;
185
+ }
186
+
187
+ case MergeTreeDeltaType.OBLITERATE:
188
+ case MergeTreeDeltaType.OBLITERATE_SIDED: {
189
+ const moveInfo: IMoveInfo | undefined = toMoveInfo(segment);
190
+ assert(moveInfo !== undefined, 0x86e /* On obliterate ack, missing move info! */);
191
+ const obliterateInfo = segmentGroup.obliterateInfo;
192
+ assert(obliterateInfo !== undefined, 0xa40 /* must have obliterate info */);
193
+ segment.localMovedSeq = obliterateInfo.localSeq = undefined;
194
+ const seqIdx = moveInfo.movedSeqs.indexOf(UnassignedSequenceNumber);
195
+ assert(seqIdx !== -1, 0x86f /* expected movedSeqs to contain unacked seq */);
196
+ moveInfo.movedSeqs[seqIdx] = obliterateInfo.seq =
197
+ opArgs.sequencedMessage!.sequenceNumber;
198
+
199
+ if (moveInfo.movedSeq === UnassignedSequenceNumber) {
200
+ moveInfo.movedSeq = opArgs.sequencedMessage!.sequenceNumber;
201
+ return true;
202
+ }
203
+
204
+ return false;
205
+ }
206
+
207
+ default: {
208
+ throw new Error(`${opArgs.op.type} is in unrecognized operation type`);
209
+ }
210
+ }
211
+ }
212
+
146
213
  /**
147
214
  * @legacy
148
215
  * @alpha
@@ -177,11 +244,6 @@ export interface IMergeTreeOptions {
177
244
  */
178
245
  newMergeTreeSnapshotFormat?: boolean;
179
246
 
180
- /**
181
- * Options related to attribution
182
- */
183
- attribution?: IMergeTreeAttributionOptions;
184
-
185
247
  /**
186
248
  * Enables support for the obliterate operation -- a stronger form of remove
187
249
  * which deletes concurrently inserted segments
@@ -212,6 +274,17 @@ export interface IMergeTreeOptions {
212
274
  */
213
275
  mergeTreeEnableSidedObliterate?: boolean;
214
276
  }
277
+
278
+ /**
279
+ * @internal
280
+ */
281
+ export interface IMergeTreeOptionsInternal extends IMergeTreeOptions {
282
+ /**
283
+ * Options related to attribution
284
+ */
285
+ attribution?: IMergeTreeAttributionOptions;
286
+ }
287
+
215
288
  export function errorIfOptionNotTrue(
216
289
  options: IMergeTreeOptions | undefined,
217
290
  option: keyof IMergeTreeOptions,
@@ -222,9 +295,7 @@ export function errorIfOptionNotTrue(
222
295
  }
223
296
 
224
297
  /**
225
- * @legacy
226
- * @alpha
227
- * @deprecated This functionality was not meant to be exported and will be removed in a future release
298
+ * @internal
228
299
  */
229
300
  export interface IMergeTreeAttributionOptions {
230
301
  /**
@@ -250,9 +321,7 @@ export interface IMergeTreeAttributionOptions {
250
321
  /**
251
322
  * Implements policy dictating which kinds of operations should be attributed and how.
252
323
  * @sealed
253
- * @legacy
254
- * @alpha
255
- * @deprecated This functionality was not meant to be exported and will be removed in a future release
324
+ * @internal
256
325
  */
257
326
  export interface AttributionPolicy {
258
327
  /**
@@ -262,7 +331,6 @@ export interface AttributionPolicy {
262
331
  *
263
332
  * This must be done in an eventually consistent fashion.
264
333
  */
265
- // eslint-disable-next-line import/no-deprecated
266
334
  attach: (client: Client) => void;
267
335
  /**
268
336
  * Disables tracking attribution information on segments.
@@ -477,7 +545,6 @@ class Obliterates {
477
545
  const overlapping: ObliterateInfo[] = [];
478
546
  for (const start of this.startOrdered.items) {
479
547
  if (start.getSegment()!.ordinal <= seg.ordinal) {
480
- // eslint-disable-next-line import/no-deprecated
481
548
  const ob = start.properties?.obliterate as ObliterateInfo;
482
549
  if (ob.end.getSegment()!.ordinal >= seg.ordinal) {
483
550
  overlapping.push(ob);
@@ -527,7 +594,7 @@ export class MergeTree {
527
594
 
528
595
  private readonly obliterates = new Obliterates(this);
529
596
 
530
- public constructor(public options?: IMergeTreeOptions) {
597
+ public constructor(public options?: IMergeTreeOptionsInternal) {
531
598
  this._root = this.makeBlock(0);
532
599
  this._root.mergeTree = this;
533
600
  this.attributionPolicy = options?.attribution?.policyFactory?.();
@@ -1234,7 +1301,7 @@ export class MergeTree {
1234
1301
  const deltaSegments: IMergeTreeSegmentDelta[] = [];
1235
1302
  const overlappingRemoves: boolean[] = [];
1236
1303
  pendingSegmentGroup.segments.map((pendingSegment: ISegmentLeaf) => {
1237
- const overlappingRemove = !pendingSegment.ack(pendingSegmentGroup, opArgs);
1304
+ const overlappingRemove = !ackSegment(pendingSegment, pendingSegmentGroup, opArgs);
1238
1305
 
1239
1306
  overwrite = overlappingRemove || overwrite;
1240
1307
 
@@ -1538,10 +1605,8 @@ export class MergeTree {
1538
1605
  continue;
1539
1606
  }
1540
1607
 
1541
- // eslint-disable-next-line import/no-deprecated
1542
1608
  let oldest: ObliterateInfo | undefined;
1543
1609
  let normalizedOldestSeq: number = 0;
1544
- // eslint-disable-next-line import/no-deprecated
1545
1610
  let newest: ObliterateInfo | undefined;
1546
1611
  let normalizedNewestSeq: number = 0;
1547
1612
  const movedClientIds: number[] = [];
@@ -1615,28 +1680,14 @@ export class MergeTree {
1615
1680
  const next: ISegmentLeaf = segment.splitAt(pos)!;
1616
1681
 
1617
1682
  if (segment?.segmentGroups) {
1618
- // eslint-disable-next-line import/no-deprecated
1619
1683
  next.segmentGroups ??= new SegmentGroupCollection(next);
1620
- segment.segmentGroups.copyTo(next);
1684
+ segment.segmentGroups.copyTo(next.segmentGroups);
1621
1685
  }
1622
1686
 
1623
1687
  if (segment.prevObliterateByInserter) {
1624
1688
  next.prevObliterateByInserter = segment.prevObliterateByInserter;
1625
1689
  }
1626
-
1627
- if (segment.properties) {
1628
- if (segment.propertyManager === undefined) {
1629
- next.properties = clone(segment.properties);
1630
- } else {
1631
- // eslint-disable-next-line import/no-deprecated
1632
- next.propertyManager ??= new PropertiesManager();
1633
- next.properties = segment.propertyManager.copyTo(
1634
- segment.properties,
1635
- next.properties,
1636
- next.propertyManager,
1637
- );
1638
- }
1639
- }
1690
+ copyPropertiesAndManager(segment, next);
1640
1691
  if (segment.localRefs) {
1641
1692
  segment.localRefs.split(pos, next);
1642
1693
  }
@@ -1876,7 +1927,6 @@ export class MergeTree {
1876
1927
  0x5ad /* Cannot change the markerId of an existing marker */,
1877
1928
  );
1878
1929
 
1879
- // eslint-disable-next-line import/no-deprecated
1880
1930
  const propertyManager = (segment.propertyManager ??= new PropertiesManager());
1881
1931
  const properties = (segment.properties ??= createMap());
1882
1932
  const propertyDeltas = propertyManager.addProperties(
@@ -2363,7 +2413,6 @@ export class MergeTree {
2363
2413
  UniversalSequenceNumber,
2364
2414
  { op: annotateOp },
2365
2415
 
2366
- // eslint-disable-next-line import/no-deprecated
2367
2416
  PropertiesRollback.Rollback,
2368
2417
  );
2369
2418
  i++;