@fluidframework/sequence 2.0.0-internal.7.2.2 → 2.0.0-internal.7.4.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 (208) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/api-extractor-lint.json +13 -0
  3. package/api-extractor.json +9 -1
  4. package/api-report/sequence.api.md +87 -84
  5. package/dist/defaultMap.d.ts +3 -3
  6. package/dist/defaultMap.d.ts.map +1 -1
  7. package/dist/defaultMap.js +7 -2
  8. package/dist/defaultMap.js.map +1 -1
  9. package/dist/defaultMapInterfaces.d.ts +11 -10
  10. package/dist/defaultMapInterfaces.d.ts.map +1 -1
  11. package/dist/defaultMapInterfaces.js.map +1 -1
  12. package/dist/intervalCollection.d.ts +68 -14
  13. package/dist/intervalCollection.d.ts.map +1 -1
  14. package/dist/intervalCollection.js +50 -45
  15. package/dist/intervalCollection.js.map +1 -1
  16. package/dist/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  17. package/dist/intervalIndex/endpointInRangeIndex.js +1 -1
  18. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  19. package/dist/intervalIndex/endpointIndex.d.ts +2 -2
  20. package/dist/intervalIndex/endpointIndex.js +1 -1
  21. package/dist/intervalIndex/endpointIndex.js.map +1 -1
  22. package/dist/intervalIndex/idIntervalIndex.d.ts +2 -2
  23. package/dist/intervalIndex/idIntervalIndex.js +1 -1
  24. package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
  25. package/dist/intervalIndex/intervalIndex.d.ts +1 -1
  26. package/dist/intervalIndex/intervalIndex.js.map +1 -1
  27. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  28. package/dist/intervalIndex/overlappingIntervalsIndex.js +1 -1
  29. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  30. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +1 -1
  31. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +1 -1
  32. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  33. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +2 -1
  34. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  35. package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  36. package/dist/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  37. package/dist/intervalIndex/startpointInRangeIndex.js +1 -1
  38. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  39. package/dist/intervals/interval.d.ts +2 -7
  40. package/dist/intervals/interval.d.ts.map +1 -1
  41. package/dist/intervals/interval.js +1 -5
  42. package/dist/intervals/interval.js.map +1 -1
  43. package/dist/intervals/intervalUtils.d.ts +15 -14
  44. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  45. package/dist/intervals/intervalUtils.js +4 -3
  46. package/dist/intervals/intervalUtils.js.map +1 -1
  47. package/dist/intervals/sequenceInterval.d.ts +3 -12
  48. package/dist/intervals/sequenceInterval.d.ts.map +1 -1
  49. package/dist/intervals/sequenceInterval.js +3 -11
  50. package/dist/intervals/sequenceInterval.js.map +1 -1
  51. package/dist/localValues.d.ts +2 -1
  52. package/dist/localValues.d.ts.map +1 -1
  53. package/dist/localValues.js.map +1 -1
  54. package/dist/packageVersion.d.ts +1 -1
  55. package/dist/packageVersion.js +1 -1
  56. package/dist/packageVersion.js.map +1 -1
  57. package/dist/revertibles.d.ts +9 -15
  58. package/dist/revertibles.d.ts.map +1 -1
  59. package/dist/revertibles.js +41 -21
  60. package/dist/revertibles.js.map +1 -1
  61. package/dist/sequence-alpha.d.ts +1306 -0
  62. package/dist/sequence-beta.d.ts +270 -0
  63. package/dist/sequence-public.d.ts +270 -0
  64. package/dist/sequence-untrimmed.d.ts +1790 -0
  65. package/dist/sequence.d.ts +2 -3
  66. package/dist/sequence.d.ts.map +1 -1
  67. package/dist/sequence.js +4 -5
  68. package/dist/sequence.js.map +1 -1
  69. package/dist/sequenceDeltaEvent.d.ts +4 -4
  70. package/dist/sequenceDeltaEvent.d.ts.map +1 -1
  71. package/dist/sequenceDeltaEvent.js +4 -3
  72. package/dist/sequenceDeltaEvent.js.map +1 -1
  73. package/dist/sequenceFactory.d.ts +1 -1
  74. package/dist/sequenceFactory.js +1 -1
  75. package/dist/sequenceFactory.js.map +1 -1
  76. package/dist/sharedIntervalCollection.d.ts +3 -3
  77. package/dist/sharedIntervalCollection.js +2 -2
  78. package/dist/sharedIntervalCollection.js.map +1 -1
  79. package/dist/sharedSequence.d.ts +3 -3
  80. package/dist/sharedSequence.js +2 -2
  81. package/dist/sharedSequence.js.map +1 -1
  82. package/dist/sharedString.d.ts +8 -5
  83. package/dist/sharedString.d.ts.map +1 -1
  84. package/dist/sharedString.js +6 -3
  85. package/dist/sharedString.js.map +1 -1
  86. package/dist/tsdoc-metadata.json +1 -1
  87. package/lib/defaultMap.d.ts +3 -3
  88. package/lib/defaultMap.d.ts.map +1 -1
  89. package/lib/defaultMap.js +29 -20
  90. package/lib/defaultMap.js.map +1 -1
  91. package/lib/defaultMapInterfaces.d.ts +11 -10
  92. package/lib/defaultMapInterfaces.d.ts.map +1 -1
  93. package/lib/defaultMapInterfaces.js +2 -1
  94. package/lib/defaultMapInterfaces.js.map +1 -1
  95. package/lib/index.js +45 -10
  96. package/lib/index.js.map +1 -1
  97. package/lib/intervalCollection.d.ts +68 -14
  98. package/lib/intervalCollection.d.ts.map +1 -1
  99. package/lib/intervalCollection.js +174 -156
  100. package/lib/intervalCollection.js.map +1 -1
  101. package/lib/intervalIndex/endpointInRangeIndex.d.ts +2 -2
  102. package/lib/intervalIndex/endpointInRangeIndex.js +18 -13
  103. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -1
  104. package/lib/intervalIndex/endpointIndex.d.ts +2 -2
  105. package/lib/intervalIndex/endpointIndex.js +14 -9
  106. package/lib/intervalIndex/endpointIndex.js.map +1 -1
  107. package/lib/intervalIndex/idIntervalIndex.d.ts +2 -2
  108. package/lib/intervalIndex/idIntervalIndex.js +9 -5
  109. package/lib/intervalIndex/idIntervalIndex.js.map +1 -1
  110. package/lib/intervalIndex/index.js +19 -6
  111. package/lib/intervalIndex/index.js.map +1 -1
  112. package/lib/intervalIndex/intervalIndex.d.ts +1 -1
  113. package/lib/intervalIndex/intervalIndex.js +2 -1
  114. package/lib/intervalIndex/intervalIndex.js.map +1 -1
  115. package/lib/intervalIndex/intervalIndexUtils.js +8 -4
  116. package/lib/intervalIndex/intervalIndexUtils.js.map +1 -1
  117. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts +2 -2
  118. package/lib/intervalIndex/overlappingIntervalsIndex.js +16 -11
  119. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  120. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +1 -1
  121. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js +15 -11
  122. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  123. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts +2 -1
  124. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  125. package/lib/intervalIndex/sequenceIntervalIndexes.js +2 -1
  126. package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  127. package/lib/intervalIndex/startpointInRangeIndex.d.ts +2 -2
  128. package/lib/intervalIndex/startpointInRangeIndex.js +18 -13
  129. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -1
  130. package/lib/intervalTree.js +9 -4
  131. package/lib/intervalTree.js.map +1 -1
  132. package/lib/intervals/index.js +18 -3
  133. package/lib/intervals/index.js.map +1 -1
  134. package/lib/intervals/interval.d.ts +2 -7
  135. package/lib/intervals/interval.d.ts.map +1 -1
  136. package/lib/intervals/interval.js +19 -18
  137. package/lib/intervals/interval.js.map +1 -1
  138. package/lib/intervals/intervalUtils.d.ts +15 -14
  139. package/lib/intervals/intervalUtils.d.ts.map +1 -1
  140. package/lib/intervals/intervalUtils.js +22 -16
  141. package/lib/intervals/intervalUtils.js.map +1 -1
  142. package/lib/intervals/sequenceInterval.d.ts +3 -12
  143. package/lib/intervals/sequenceInterval.d.ts.map +1 -1
  144. package/lib/intervals/sequenceInterval.js +68 -70
  145. package/lib/intervals/sequenceInterval.js.map +1 -1
  146. package/lib/localValues.d.ts +2 -1
  147. package/lib/localValues.d.ts.map +1 -1
  148. package/lib/localValues.js +9 -4
  149. package/lib/localValues.js.map +1 -1
  150. package/lib/packageVersion.d.ts +1 -1
  151. package/lib/packageVersion.js +5 -2
  152. package/lib/packageVersion.js.map +1 -1
  153. package/lib/revertibles.d.ts +9 -15
  154. package/lib/revertibles.d.ts.map +1 -1
  155. package/lib/revertibles.js +98 -68
  156. package/lib/revertibles.js.map +1 -1
  157. package/lib/sequence-alpha.d.ts +1306 -0
  158. package/lib/sequence-beta.d.ts +270 -0
  159. package/lib/sequence-public.d.ts +270 -0
  160. package/lib/sequence-untrimmed.d.ts +1790 -0
  161. package/lib/sequence.d.ts +2 -3
  162. package/lib/sequence.d.ts.map +1 -1
  163. package/lib/sequence.js +46 -46
  164. package/lib/sequence.js.map +1 -1
  165. package/lib/sequenceDeltaEvent.d.ts +4 -4
  166. package/lib/sequenceDeltaEvent.d.ts.map +1 -1
  167. package/lib/sequenceDeltaEvent.js +17 -10
  168. package/lib/sequenceDeltaEvent.js.map +1 -1
  169. package/lib/sequenceFactory.d.ts +1 -1
  170. package/lib/sequenceFactory.js +14 -10
  171. package/lib/sequenceFactory.js.map +1 -1
  172. package/lib/sharedIntervalCollection.d.ts +3 -3
  173. package/lib/sharedIntervalCollection.js +20 -15
  174. package/lib/sharedIntervalCollection.js.map +1 -1
  175. package/lib/sharedSequence.d.ts +3 -3
  176. package/lib/sharedSequence.js +13 -8
  177. package/lib/sharedSequence.js.map +1 -1
  178. package/lib/sharedString.d.ts +8 -5
  179. package/lib/sharedString.d.ts.map +1 -1
  180. package/lib/sharedString.js +27 -19
  181. package/lib/sharedString.js.map +1 -1
  182. package/package.json +43 -29
  183. package/sequence.test-files.tar +0 -0
  184. package/src/defaultMap.ts +22 -16
  185. package/src/defaultMapInterfaces.ts +15 -12
  186. package/src/intervalCollection.ts +131 -67
  187. package/src/intervalIndex/endpointInRangeIndex.ts +2 -2
  188. package/src/intervalIndex/endpointIndex.ts +2 -2
  189. package/src/intervalIndex/idIntervalIndex.ts +2 -2
  190. package/src/intervalIndex/intervalIndex.ts +1 -1
  191. package/src/intervalIndex/overlappingIntervalsIndex.ts +2 -2
  192. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +1 -1
  193. package/src/intervalIndex/sequenceIntervalIndexes.ts +2 -1
  194. package/src/intervalIndex/startpointInRangeIndex.ts +2 -2
  195. package/src/intervals/interval.ts +2 -7
  196. package/src/intervals/intervalUtils.ts +16 -15
  197. package/src/intervals/sequenceInterval.ts +3 -12
  198. package/src/localValues.ts +2 -1
  199. package/src/packageVersion.ts +1 -1
  200. package/src/revertibles.ts +95 -24
  201. package/src/sequence.ts +5 -7
  202. package/src/sequenceDeltaEvent.ts +6 -4
  203. package/src/sequenceFactory.ts +1 -1
  204. package/src/sharedIntervalCollection.ts +3 -3
  205. package/src/sharedSequence.ts +3 -3
  206. package/src/sharedString.ts +8 -5
  207. package/tsconfig.esnext.json +1 -2
  208. package/tsconfig.json +5 -3
@@ -1,46 +1,50 @@
1
+ "use strict";
1
2
  /*!
2
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
4
  * Licensed under the MIT License.
4
5
  */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.intervalLocatorFromEndpoint = exports.IntervalCollection = exports.makeOpsMap = exports.IntervalCollectionValueType = exports.SequenceIntervalCollectionValueType = exports.LocalIntervalCollection = exports.createIntervalIndex = exports.computeStickinessFromSide = exports.endpointPosAndSide = exports.sidesFromStickiness = exports.Side = void 0;
5
8
  /* eslint-disable no-bitwise */
6
9
  /* eslint-disable import/no-deprecated */
7
- import { TypedEventEmitter } from "@fluid-internal/client-utils";
8
- import { assert } from "@fluidframework/core-utils";
9
- import { addProperties, createMap, getSlideToSegoff, MergeTreeDeltaType, ReferenceType, refTypeIncludesFlag, reservedRangeLabelsKey, UnassignedSequenceNumber, DetachedReferencePosition, UniversalSequenceNumber, SlidingPreference, } from "@fluidframework/merge-tree";
10
- import { LoggingError, UsageError } from "@fluidframework/telemetry-utils";
11
- import { v4 as uuid } from "uuid";
12
- import { IntervalOpType, IntervalStickiness, IntervalType, SequenceInterval, createPositionReferenceFromSegoff, endReferenceSlidingPreference, startReferenceSlidingPreference, sequenceIntervalHelpers, createInterval, } from "./intervals";
13
- import { EndpointIndex, OverlappingIntervalsIndex, createIdIntervalIndex, } from "./intervalIndex";
10
+ const client_utils_1 = require("@fluid-internal/client-utils");
11
+ const core_utils_1 = require("@fluidframework/core-utils");
12
+ const merge_tree_1 = require("@fluidframework/merge-tree");
13
+ const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
14
+ const uuid_1 = require("uuid");
15
+ const intervals_1 = require("./intervals");
16
+ const intervalIndex_1 = require("./intervalIndex");
14
17
  /**
15
18
  * Defines a side relative to a character in a sequence.
16
19
  *
17
20
  * @remarks See {@link SequencePlace} for additional context on usage.
18
- * @public
21
+ * @alpha
19
22
  */
20
- export var Side;
23
+ var Side;
21
24
  (function (Side) {
22
25
  Side[Side["Before"] = 0] = "Before";
23
26
  Side[Side["After"] = 1] = "After";
24
- })(Side || (Side = {}));
27
+ })(Side || (exports.Side = Side = {}));
25
28
  const reservedIntervalIdKey = "intervalId";
26
- export function sidesFromStickiness(stickiness) {
27
- const startSide = (stickiness & IntervalStickiness.START) !== 0 ? Side.After : Side.Before;
28
- const endSide = (stickiness & IntervalStickiness.END) !== 0 ? Side.Before : Side.After;
29
+ function sidesFromStickiness(stickiness) {
30
+ const startSide = (stickiness & intervals_1.IntervalStickiness.START) !== 0 ? Side.After : Side.Before;
31
+ const endSide = (stickiness & intervals_1.IntervalStickiness.END) !== 0 ? Side.Before : Side.After;
29
32
  return { startSide, endSide };
30
33
  }
34
+ exports.sidesFromStickiness = sidesFromStickiness;
31
35
  /**
32
36
  * Decompress an interval after loading a summary from JSON. The exact format
33
37
  * of this compression is unspecified and subject to change
34
38
  */
35
39
  function decompressInterval(interval, label) {
36
- const stickiness = interval[5] ?? IntervalStickiness.END;
40
+ const stickiness = interval[5] ?? intervals_1.IntervalStickiness.END;
37
41
  const { startSide, endSide } = sidesFromStickiness(stickiness);
38
42
  return {
39
43
  start: interval[0],
40
44
  end: interval[1],
41
45
  sequenceNumber: interval[2],
42
46
  intervalType: interval[3],
43
- properties: { ...interval[4], [reservedRangeLabelsKey]: [label] },
47
+ properties: { ...interval[4], [merge_tree_1.reservedRangeLabelsKey]: [label] },
44
48
  stickiness,
45
49
  startSide,
46
50
  endSide,
@@ -59,15 +63,15 @@ function compressInterval(interval) {
59
63
  intervalType,
60
64
  // remove the `referenceRangeLabels` property as it is already stored
61
65
  // in the `label` field of the summary
62
- { ...properties, [reservedRangeLabelsKey]: undefined },
66
+ { ...properties, [merge_tree_1.reservedRangeLabelsKey]: undefined },
63
67
  ];
64
- if (interval.stickiness !== undefined && interval.stickiness !== IntervalStickiness.END) {
68
+ if (interval.stickiness !== undefined && interval.stickiness !== intervals_1.IntervalStickiness.END) {
65
69
  // reassignment to make it easier for typescript to reason about types
66
70
  base = [...base, interval.stickiness];
67
71
  }
68
72
  return base;
69
73
  }
70
- export function endpointPosAndSide(start, end) {
74
+ function endpointPosAndSide(start, end) {
71
75
  const startIsPlainEndpoint = typeof start === "number" || start === "start" || start === "end";
72
76
  const endIsPlainEndpoint = typeof end === "number" || end === "start" || end === "end";
73
77
  const startSide = startIsPlainEndpoint ? Side.Before : start?.side;
@@ -81,30 +85,33 @@ export function endpointPosAndSide(start, end) {
81
85
  endPos,
82
86
  };
83
87
  }
88
+ exports.endpointPosAndSide = endpointPosAndSide;
84
89
  function toSequencePlace(pos, side) {
85
90
  return typeof pos === "number" ? { pos, side } : pos;
86
91
  }
87
92
  function toOptionalSequencePlace(pos, side = Side.Before) {
88
93
  return typeof pos === "number" ? { pos, side } : pos;
89
94
  }
90
- export function computeStickinessFromSide(startPos = -1, startSide = Side.Before, endPos = -1, endSide = Side.Before) {
91
- let stickiness = IntervalStickiness.NONE;
95
+ function computeStickinessFromSide(startPos = -1, startSide = Side.Before, endPos = -1, endSide = Side.Before) {
96
+ let stickiness = intervals_1.IntervalStickiness.NONE;
92
97
  if (startSide === Side.After || startPos === "start") {
93
- stickiness |= IntervalStickiness.START;
98
+ stickiness |= intervals_1.IntervalStickiness.START;
94
99
  }
95
100
  if (endSide === Side.Before || endPos === "end") {
96
- stickiness |= IntervalStickiness.END;
101
+ stickiness |= intervals_1.IntervalStickiness.END;
97
102
  }
98
103
  return stickiness;
99
104
  }
100
- export function createIntervalIndex() {
105
+ exports.computeStickinessFromSide = computeStickinessFromSide;
106
+ function createIntervalIndex() {
101
107
  const helpers = {
102
- create: createInterval,
108
+ create: intervals_1.createInterval,
103
109
  };
104
110
  const lc = new LocalIntervalCollection(undefined, "", helpers, {});
105
111
  return lc;
106
112
  }
107
- export class LocalIntervalCollection {
113
+ exports.createIntervalIndex = createIntervalIndex;
114
+ class LocalIntervalCollection {
108
115
  constructor(client, label, helpers, options,
109
116
  /** Callback invoked each time one of the endpoints of an interval slides. */
110
117
  onPositionChange) {
@@ -113,9 +120,9 @@ export class LocalIntervalCollection {
113
120
  this.helpers = helpers;
114
121
  this.options = options;
115
122
  this.onPositionChange = onPositionChange;
116
- this.overlappingIntervalsIndex = new OverlappingIntervalsIndex(client, helpers);
117
- this.idIntervalIndex = createIdIntervalIndex();
118
- this.endIntervalIndex = new EndpointIndex(client, helpers);
123
+ this.overlappingIntervalsIndex = new intervalIndex_1.OverlappingIntervalsIndex(client, helpers);
124
+ this.idIntervalIndex = (0, intervalIndex_1.createIdIntervalIndex)();
125
+ this.endIntervalIndex = new intervalIndex_1.EndpointIndex(client, helpers);
119
126
  this.indexes = new Set([
120
127
  this.overlappingIntervalsIndex,
121
128
  this.idIntervalIndex,
@@ -144,7 +151,7 @@ export class LocalIntervalCollection {
144
151
  const newProps = {
145
152
  [reservedIntervalIdKey]: id,
146
153
  };
147
- serializedInterval.properties = addProperties(serializedInterval.properties, newProps);
154
+ serializedInterval.properties = (0, merge_tree_1.addProperties)(serializedInterval.properties, newProps);
148
155
  }
149
156
  // Make the ID immutable for safety's sake.
150
157
  Object.defineProperty(serializedInterval.properties, reservedIntervalIdKey, {
@@ -177,25 +184,25 @@ export class LocalIntervalCollection {
177
184
  const interval = this.createInterval(start, end, intervalType, op);
178
185
  if (interval) {
179
186
  if (!interval.properties) {
180
- interval.properties = createMap();
187
+ interval.properties = (0, merge_tree_1.createMap)();
181
188
  }
182
189
  if (props) {
183
190
  // This check is intended to prevent scenarios where a random interval is created and then
184
191
  // inserted into a collection. The aim is to ensure that the collection is created first
185
192
  // then the user can create/add intervals based on the collection
186
- if (props[reservedRangeLabelsKey] !== undefined &&
187
- props[reservedRangeLabelsKey][0] !== this.label) {
188
- throw new LoggingError("Adding an interval that belongs to another interval collection is not permitted");
193
+ if (props[merge_tree_1.reservedRangeLabelsKey] !== undefined &&
194
+ props[merge_tree_1.reservedRangeLabelsKey][0] !== this.label) {
195
+ throw new telemetry_utils_1.LoggingError("Adding an interval that belongs to another interval collection is not permitted");
189
196
  }
190
197
  interval.addProperties(props);
191
198
  }
192
- (_a = interval.properties)[reservedIntervalIdKey] ?? (_a[reservedIntervalIdKey] = uuid());
199
+ (_a = interval.properties)[reservedIntervalIdKey] ?? (_a[reservedIntervalIdKey] = (0, uuid_1.v4)());
193
200
  this.add(interval);
194
201
  }
195
202
  return interval;
196
203
  }
197
204
  linkEndpointsToInterval(interval) {
198
- if (interval instanceof SequenceInterval) {
205
+ if (interval instanceof intervals_1.SequenceInterval) {
199
206
  interval.start.addProperties({ interval });
200
207
  interval.end.addProperties({ interval });
201
208
  }
@@ -234,9 +241,9 @@ export class LocalIntervalCollection {
234
241
  // either, so this must be special-cased.
235
242
  return ref;
236
243
  }
237
- return this.client.createLocalReferencePosition(segment, ref.getOffset(), ReferenceType.Transient, ref.properties, ref.slidingPreference, ref.canSlideToEndpoint);
244
+ return this.client.createLocalReferencePosition(segment, ref.getOffset(), merge_tree_1.ReferenceType.Transient, ref.properties, ref.slidingPreference, ref.canSlideToEndpoint);
238
245
  };
239
- if (interval instanceof SequenceInterval) {
246
+ if (interval instanceof intervals_1.SequenceInterval) {
240
247
  let previousInterval;
241
248
  let pendingChanges = 0;
242
249
  interval.addPositionChangeListeners(() => {
@@ -249,7 +256,7 @@ export class LocalIntervalCollection {
249
256
  this.removeIntervalFromIndexes(interval);
250
257
  }
251
258
  }, () => {
252
- assert(previousInterval !== undefined, 0x3fa /* Invalid interleaving of before/after slide */);
259
+ (0, core_utils_1.assert)(previousInterval !== undefined, 0x3fa /* Invalid interleaving of before/after slide */);
253
260
  pendingChanges--;
254
261
  if (pendingChanges === 0) {
255
262
  this.addIntervalToIndexes(interval);
@@ -260,21 +267,22 @@ export class LocalIntervalCollection {
260
267
  }
261
268
  }
262
269
  removeIntervalListeners(interval) {
263
- if (interval instanceof SequenceInterval) {
270
+ if (interval instanceof intervals_1.SequenceInterval) {
264
271
  interval.removePositionChangeListeners();
265
272
  }
266
273
  }
267
274
  }
275
+ exports.LocalIntervalCollection = LocalIntervalCollection;
268
276
  LocalIntervalCollection.legacyIdPrefix = "legacy";
269
277
  class SequenceIntervalCollectionFactory {
270
278
  load(emitter, raw = [], options) {
271
- return new IntervalCollection(sequenceIntervalHelpers, true, emitter, raw, options);
279
+ return new IntervalCollection(intervals_1.sequenceIntervalHelpers, true, emitter, raw, options);
272
280
  }
273
281
  store(value) {
274
282
  return value.serializeInternal();
275
283
  }
276
284
  }
277
- export class SequenceIntervalCollectionValueType {
285
+ class SequenceIntervalCollectionValueType {
278
286
  get name() {
279
287
  return SequenceIntervalCollectionValueType.Name;
280
288
  }
@@ -285,13 +293,14 @@ export class SequenceIntervalCollectionValueType {
285
293
  return SequenceIntervalCollectionValueType._ops;
286
294
  }
287
295
  }
296
+ exports.SequenceIntervalCollectionValueType = SequenceIntervalCollectionValueType;
288
297
  SequenceIntervalCollectionValueType.Name = "sharedStringIntervalCollection";
289
298
  SequenceIntervalCollectionValueType._factory = new SequenceIntervalCollectionFactory();
290
299
  SequenceIntervalCollectionValueType._ops = makeOpsMap();
291
300
  class IntervalCollectionFactory {
292
301
  load(emitter, raw = [], options) {
293
302
  const helpers = {
294
- create: createInterval,
303
+ create: intervals_1.createInterval,
295
304
  };
296
305
  const collection = new IntervalCollection(helpers, false, emitter, raw, options);
297
306
  collection.attachGraph(undefined, "");
@@ -301,7 +310,7 @@ class IntervalCollectionFactory {
301
310
  return value.serializeInternal();
302
311
  }
303
312
  }
304
- export class IntervalCollectionValueType {
313
+ class IntervalCollectionValueType {
305
314
  get name() {
306
315
  return IntervalCollectionValueType.Name;
307
316
  }
@@ -312,19 +321,23 @@ export class IntervalCollectionValueType {
312
321
  return IntervalCollectionValueType._ops;
313
322
  }
314
323
  }
324
+ exports.IntervalCollectionValueType = IntervalCollectionValueType;
315
325
  IntervalCollectionValueType.Name = "sharedIntervalCollection";
316
326
  IntervalCollectionValueType._factory = new IntervalCollectionFactory();
317
327
  IntervalCollectionValueType._ops = makeOpsMap();
318
- export function makeOpsMap() {
328
+ function makeOpsMap() {
319
329
  const rebase = (collection, op, localOpMetadata) => {
320
330
  const { localSeq } = localOpMetadata;
321
331
  const rebasedValue = collection.rebaseLocalInterval(op.opName, op.value, localSeq);
332
+ if (rebasedValue === undefined) {
333
+ return undefined;
334
+ }
322
335
  const rebasedOp = { ...op, value: rebasedValue };
323
336
  return { rebasedOp, rebasedLocalOpMetadata: localOpMetadata };
324
337
  };
325
338
  return new Map([
326
339
  [
327
- IntervalOpType.ADD,
340
+ intervals_1.IntervalOpType.ADD,
328
341
  {
329
342
  process: (collection, params, local, op, localOpMetadata) => {
330
343
  // if params is undefined, the interval was deleted during
@@ -332,17 +345,17 @@ export function makeOpsMap() {
332
345
  if (!params) {
333
346
  return;
334
347
  }
335
- assert(op !== undefined, 0x3fb /* op should exist here */);
348
+ (0, core_utils_1.assert)(op !== undefined, 0x3fb /* op should exist here */);
336
349
  collection.ackAdd(params, local, op, localOpMetadata);
337
350
  },
338
351
  rebase,
339
352
  },
340
353
  ],
341
354
  [
342
- IntervalOpType.DELETE,
355
+ intervals_1.IntervalOpType.DELETE,
343
356
  {
344
357
  process: (collection, params, local, op) => {
345
- assert(op !== undefined, 0x3fc /* op should exist here */);
358
+ (0, core_utils_1.assert)(op !== undefined, 0x3fc /* op should exist here */);
346
359
  collection.ackDelete(params, local, op);
347
360
  },
348
361
  rebase: (collection, op, localOpMetadata) => {
@@ -352,7 +365,7 @@ export function makeOpsMap() {
352
365
  },
353
366
  ],
354
367
  [
355
- IntervalOpType.CHANGE,
368
+ intervals_1.IntervalOpType.CHANGE,
356
369
  {
357
370
  process: (collection, params, local, op, localOpMetadata) => {
358
371
  // if params is undefined, the interval was deleted during
@@ -360,7 +373,7 @@ export function makeOpsMap() {
360
373
  if (!params) {
361
374
  return;
362
375
  }
363
- assert(op !== undefined, 0x3fd /* op should exist here */);
376
+ (0, core_utils_1.assert)(op !== undefined, 0x3fd /* op should exist here */);
364
377
  collection.ackChange(params, local, op, localOpMetadata);
365
378
  },
366
379
  rebase,
@@ -368,6 +381,7 @@ export function makeOpsMap() {
368
381
  ],
369
382
  ]);
370
383
  }
384
+ exports.makeOpsMap = makeOpsMap;
371
385
  class IntervalCollectionIterator {
372
386
  constructor(collection, iteratesForward = true, start, end) {
373
387
  this.results = [];
@@ -395,7 +409,7 @@ const isSequencePlace = (place) => {
395
409
  /**
396
410
  * {@inheritdoc IIntervalCollection}
397
411
  */
398
- export class IntervalCollection extends TypedEventEmitter {
412
+ class IntervalCollection extends client_utils_1.TypedEventEmitter {
399
413
  get attached() {
400
414
  return !!this.localCollection;
401
415
  }
@@ -419,7 +433,7 @@ export class IntervalCollection extends TypedEventEmitter {
419
433
  */
420
434
  attachIndex(index) {
421
435
  if (!this.attached) {
422
- throw new LoggingError("The local interval collection must exist");
436
+ throw new telemetry_utils_1.LoggingError("The local interval collection must exist");
423
437
  }
424
438
  for (const interval of this) {
425
439
  index.add(interval);
@@ -431,7 +445,7 @@ export class IntervalCollection extends TypedEventEmitter {
431
445
  */
432
446
  detachIndex(index) {
433
447
  if (!this.attached) {
434
- throw new LoggingError("The local interval collection must exist");
448
+ throw new telemetry_utils_1.LoggingError("The local interval collection must exist");
435
449
  }
436
450
  // Avoid removing intervals if the index does not exist
437
451
  if (!this.localCollection?.removeIndex(index)) {
@@ -444,7 +458,7 @@ export class IntervalCollection extends TypedEventEmitter {
444
458
  }
445
459
  rebasePositionWithSegmentSlide(pos, seqNumberFrom, localSeq) {
446
460
  if (!this.client) {
447
- throw new LoggingError("mergeTree client must exist");
461
+ throw new telemetry_utils_1.LoggingError("mergeTree client must exist");
448
462
  }
449
463
  if (pos === "start" || pos === "end") {
450
464
  return pos;
@@ -455,19 +469,19 @@ export class IntervalCollection extends TypedEventEmitter {
455
469
  clientId: this.client.getLongClientId(clientId),
456
470
  }, localSeq);
457
471
  // if segment is undefined, it slid off the string
458
- assert(segment !== undefined, 0x54e /* No segment found */);
459
- const segoff = getSlideToSegoff({ segment, offset }, undefined, this.options.mergeTreeReferencesCanSlideToEndpoint) ?? segment;
472
+ (0, core_utils_1.assert)(segment !== undefined, 0x54e /* No segment found */);
473
+ const segoff = (0, merge_tree_1.getSlideToSegoff)({ segment, offset }, undefined, this.options.mergeTreeReferencesCanSlideToEndpoint) ?? segment;
460
474
  // case happens when rebasing op, but concurrently entire string has been deleted
461
475
  if (segoff.segment === undefined || segoff.offset === undefined) {
462
- return DetachedReferencePosition;
476
+ return merge_tree_1.DetachedReferencePosition;
463
477
  }
464
- assert(offset !== undefined && 0 <= offset && offset < segment.cachedLength, 0x54f /* Invalid offset */);
478
+ (0, core_utils_1.assert)(offset !== undefined && 0 <= offset && offset < segment.cachedLength, 0x54f /* Invalid offset */);
465
479
  return this.client.findReconnectionPosition(segoff.segment, localSeq) + segoff.offset;
466
480
  }
467
481
  computeRebasedPositions(localSeq) {
468
- assert(this.client !== undefined, 0x550 /* Client should be defined when computing rebased position */);
482
+ (0, core_utils_1.assert)(this.client !== undefined, 0x550 /* Client should be defined when computing rebased position */);
469
483
  const original = this.localSeqToSerializedInterval.get(localSeq);
470
- assert(original !== undefined, 0x551 /* Failed to store pending serialized interval info for this localSeq. */);
484
+ (0, core_utils_1.assert)(original !== undefined, 0x551 /* Failed to store pending serialized interval info for this localSeq. */);
471
485
  const rebased = { ...original };
472
486
  const { start, end, sequenceNumber } = original;
473
487
  if (start !== undefined) {
@@ -481,10 +495,10 @@ export class IntervalCollection extends TypedEventEmitter {
481
495
  /** @internal */
482
496
  attachGraph(client, label) {
483
497
  if (this.attached) {
484
- throw new LoggingError("Only supports one Sequence attach");
498
+ throw new telemetry_utils_1.LoggingError("Only supports one Sequence attach");
485
499
  }
486
500
  if (client === undefined && this.requiresClient) {
487
- throw new LoggingError("Client required for this collection");
501
+ throw new telemetry_utils_1.LoggingError("Client required for this collection");
488
502
  }
489
503
  // Instantiate the local interval collection based on the saved intervals
490
504
  this.client = client;
@@ -530,11 +544,11 @@ export class IntervalCollection extends TypedEventEmitter {
530
544
  // is restored as single-endpoint changes re-use previous references.
531
545
  let startRefType;
532
546
  let endRefType;
533
- if (previousInterval instanceof SequenceInterval) {
547
+ if (previousInterval instanceof intervals_1.SequenceInterval) {
534
548
  startRefType = previousInterval.start.refType;
535
549
  endRefType = previousInterval.end.refType;
536
- previousInterval.start.refType = ReferenceType.Transient;
537
- previousInterval.end.refType = ReferenceType.Transient;
550
+ previousInterval.start.refType = merge_tree_1.ReferenceType.Transient;
551
+ previousInterval.end.refType = merge_tree_1.ReferenceType.Transient;
538
552
  this.emit("changeInterval", interval, previousInterval, local, op, slide);
539
553
  previousInterval.start.refType = startRefType;
540
554
  previousInterval.end.refType = endRefType;
@@ -548,14 +562,14 @@ export class IntervalCollection extends TypedEventEmitter {
548
562
  */
549
563
  getIntervalById(id) {
550
564
  if (!this.localCollection) {
551
- throw new LoggingError("attach must be called before accessing intervals");
565
+ throw new telemetry_utils_1.LoggingError("attach must be called before accessing intervals");
552
566
  }
553
567
  return this.localCollection.idIntervalIndex.getIntervalById(id);
554
568
  }
555
569
  assertStickinessEnabled(start, end) {
556
570
  if (!(typeof start === "number" && typeof end === "number") &&
557
571
  !this.options.intervalStickinessEnabled) {
558
- throw new UsageError("attempted to set interval stickiness without enabling `intervalStickinessEnabled` feature flag");
572
+ throw new telemetry_utils_1.UsageError("attempted to set interval stickiness without enabling `intervalStickinessEnabled` feature flag");
559
573
  }
560
574
  }
561
575
  add(start, end, intervalType, props) {
@@ -565,26 +579,26 @@ export class IntervalCollection extends TypedEventEmitter {
565
579
  let properties;
566
580
  if (isSequencePlace(start)) {
567
581
  intStart = start;
568
- assert(end !== undefined, 0x7c0 /* end must be defined */);
582
+ (0, core_utils_1.assert)(end !== undefined, 0x7c0 /* end must be defined */);
569
583
  intEnd = end;
570
- assert(intervalType !== undefined, 0x7c1 /* intervalType must be defined */);
584
+ (0, core_utils_1.assert)(intervalType !== undefined, 0x7c1 /* intervalType must be defined */);
571
585
  type = intervalType;
572
586
  properties = props;
573
587
  }
574
588
  else {
575
589
  intStart = start.start;
576
590
  intEnd = start.end;
577
- type = IntervalType.SlideOnRemove;
591
+ type = intervals_1.IntervalType.SlideOnRemove;
578
592
  properties = start.props;
579
593
  }
580
594
  if (!this.localCollection) {
581
- throw new LoggingError("attach must be called prior to adding intervals");
595
+ throw new telemetry_utils_1.LoggingError("attach must be called prior to adding intervals");
582
596
  }
583
- if (type & IntervalType.Transient) {
584
- throw new LoggingError("Can not add transient intervals");
597
+ if (type & intervals_1.IntervalType.Transient) {
598
+ throw new telemetry_utils_1.LoggingError("Can not add transient intervals");
585
599
  }
586
600
  const { startSide, endSide, startPos, endPos } = endpointPosAndSide(intStart, intEnd);
587
- assert(startPos !== undefined &&
601
+ (0, core_utils_1.assert)(startPos !== undefined &&
588
602
  endPos !== undefined &&
589
603
  startSide !== undefined &&
590
604
  endSide !== undefined, 0x793 /* start and end cannot be undefined because they were not passed in as undefined */);
@@ -592,7 +606,7 @@ export class IntervalCollection extends TypedEventEmitter {
592
606
  this.assertStickinessEnabled(intStart, intEnd);
593
607
  const interval = this.localCollection.addInterval(toSequencePlace(startPos, startSide), toSequencePlace(endPos, endSide), type, properties);
594
608
  if (interval) {
595
- if (!this.isCollaborating && interval instanceof SequenceInterval) {
609
+ if (!this.isCollaborating && interval instanceof intervals_1.SequenceInterval) {
596
610
  setSlideOnRemove(interval.start);
597
611
  setSlideOnRemove(interval.end);
598
612
  }
@@ -616,7 +630,7 @@ export class IntervalCollection extends TypedEventEmitter {
616
630
  }
617
631
  deleteExistingInterval(interval, local, op) {
618
632
  if (!this.localCollection) {
619
- throw new LoggingError("Attach must be called before accessing intervals");
633
+ throw new telemetry_utils_1.LoggingError("Attach must be called before accessing intervals");
620
634
  }
621
635
  // The given interval is known to exist in the collection.
622
636
  this.localCollection.removeExistingInterval(interval);
@@ -640,7 +654,7 @@ export class IntervalCollection extends TypedEventEmitter {
640
654
  */
641
655
  removeIntervalById(id) {
642
656
  if (!this.localCollection) {
643
- throw new LoggingError("Attach must be called before accessing intervals");
657
+ throw new telemetry_utils_1.LoggingError("Attach must be called before accessing intervals");
644
658
  }
645
659
  const interval = this.localCollection.idIntervalIndex.getIntervalById(id);
646
660
  if (interval) {
@@ -650,58 +664,54 @@ export class IntervalCollection extends TypedEventEmitter {
650
664
  }
651
665
  /**
652
666
  * {@inheritdoc IIntervalCollection.changeProperties}
667
+ * @deprecated - call change with the id and an object containing the new props values
653
668
  */
654
669
  changeProperties(id, props) {
655
- if (!this.attached) {
656
- throw new LoggingError("Attach must be called before accessing intervals");
657
- }
658
- if (typeof id !== "string") {
659
- throw new LoggingError("Change API requires an ID that is a string");
660
- }
661
- if (!props) {
662
- throw new LoggingError("changeProperties should be called with a property set");
663
- }
664
- // prevent the overwriting of an interval label, it should remain unchanged
665
- // once it has been inserted into the collection.
666
- if (props[reservedRangeLabelsKey] !== undefined) {
667
- throw new LoggingError("The label property should not be modified once inserted to the collection");
670
+ this.change(id, { props });
671
+ }
672
+ change(arg1, arg2, arg3) {
673
+ const id = arg1;
674
+ let start;
675
+ let end;
676
+ let props;
677
+ if (isSequencePlace(arg2)) {
678
+ start = arg2;
679
+ end = arg3;
668
680
  }
669
- const interval = this.getIntervalById(id);
670
- if (interval) {
671
- const deltaProps = interval.addProperties(props, true, this.isCollaborating ? UnassignedSequenceNumber : UniversalSequenceNumber);
672
- const serializedInterval = interval.serialize();
673
- // Emit a change op that will only change properties. Add the ID to
674
- // the property bag provided by the caller.
675
- serializedInterval.start = undefined;
676
- serializedInterval.end = undefined;
677
- serializedInterval.properties = props;
678
- serializedInterval.properties[reservedIntervalIdKey] = interval.getIntervalId();
679
- const localSeq = this.getNextLocalSeq();
680
- this.localSeqToSerializedInterval.set(localSeq, serializedInterval);
681
- this.emitter.emit("change", undefined, serializedInterval, { localSeq });
682
- this.emit("propertyChanged", interval, deltaProps, true, undefined);
681
+ else {
682
+ start = arg2.start;
683
+ end = arg2.end;
684
+ props = arg2.props;
683
685
  }
684
- }
685
- /**
686
- * {@inheritdoc IIntervalCollection.change}
687
- */
688
- change(id, start, end) {
689
686
  if (!this.localCollection) {
690
- throw new LoggingError("Attach must be called before accessing intervals");
687
+ throw new telemetry_utils_1.LoggingError("Attach must be called before accessing intervals");
691
688
  }
692
689
  // Force id to be a string.
693
690
  if (typeof id !== "string") {
694
- throw new LoggingError("Change API requires an ID that is a string");
691
+ throw new telemetry_utils_1.UsageError("Change API requires an ID that is a string");
692
+ }
693
+ // Ensure that both start and end are defined or both are undefined.
694
+ if ((start === undefined) !== (end === undefined)) {
695
+ throw new telemetry_utils_1.UsageError("Change API requires both start and end to be defined or undefined");
696
+ }
697
+ // prevent the overwriting of an interval label, it should remain unchanged
698
+ // once it has been inserted into the collection.
699
+ if (props?.[merge_tree_1.reservedRangeLabelsKey] !== undefined) {
700
+ throw new telemetry_utils_1.UsageError("The label property should not be modified once inserted to the collection");
695
701
  }
696
702
  const interval = this.getIntervalById(id);
697
703
  if (interval) {
698
- const newInterval = this.localCollection.changeInterval(interval, start, end);
699
- if (!newInterval) {
700
- return undefined;
704
+ let deltaProps;
705
+ let newInterval;
706
+ if (props !== undefined) {
707
+ deltaProps = interval.addProperties(props, true, this.isCollaborating ? merge_tree_1.UnassignedSequenceNumber : merge_tree_1.UniversalSequenceNumber);
701
708
  }
702
- if (!this.isCollaborating && newInterval instanceof SequenceInterval) {
703
- setSlideOnRemove(newInterval.start);
704
- setSlideOnRemove(newInterval.end);
709
+ if (start !== undefined && end !== undefined) {
710
+ newInterval = this.localCollection.changeInterval(interval, start, end);
711
+ if (!this.isCollaborating && newInterval instanceof intervals_1.SequenceInterval) {
712
+ setSlideOnRemove(newInterval.start);
713
+ setSlideOnRemove(newInterval.end);
714
+ }
705
715
  }
706
716
  const serializedInterval = interval.serialize();
707
717
  const { startPos, startSide, endPos, endSide } = endpointPosAndSide(start, end);
@@ -711,15 +721,21 @@ export class IntervalCollection extends TypedEventEmitter {
711
721
  serializedInterval.startSide = startSide;
712
722
  serializedInterval.endSide = endSide;
713
723
  serializedInterval.stickiness = stickiness;
714
- // Emit a property bag containing only the ID, as we don't intend for this op to change any properties.
724
+ // Emit a property bag containing the ID and the other (if any) properties changed
715
725
  serializedInterval.properties = {
716
726
  [reservedIntervalIdKey]: interval.getIntervalId(),
727
+ ...props,
717
728
  };
718
729
  const localSeq = this.getNextLocalSeq();
719
730
  this.localSeqToSerializedInterval.set(localSeq, serializedInterval);
720
731
  this.emitter.emit("change", undefined, serializedInterval, { localSeq });
721
- this.addPendingChange(id, serializedInterval);
722
- this.emitChange(newInterval, interval, true, false);
732
+ if (deltaProps !== undefined) {
733
+ this.emit("propertyChanged", interval, deltaProps, true, undefined);
734
+ }
735
+ if (newInterval) {
736
+ this.addPendingChange(id, serializedInterval);
737
+ this.emitChange(newInterval, interval, true, false);
738
+ }
723
739
  return newInterval;
724
740
  }
725
741
  // No interval to change
@@ -766,7 +782,7 @@ export class IntervalCollection extends TypedEventEmitter {
766
782
  }
767
783
  if (pendingChange?.start !== serializedInterval.start ||
768
784
  pendingChange?.end !== serializedInterval.end) {
769
- throw new LoggingError("Mismatch in pending changes");
785
+ throw new telemetry_utils_1.LoggingError("Mismatch in pending changes");
770
786
  }
771
787
  }
772
788
  }
@@ -781,10 +797,10 @@ export class IntervalCollection extends TypedEventEmitter {
781
797
  /** @internal */
782
798
  ackChange(serializedInterval, local, op, localOpMetadata) {
783
799
  if (!this.localCollection) {
784
- throw new LoggingError("Attach must be called before accessing intervals");
800
+ throw new telemetry_utils_1.LoggingError("Attach must be called before accessing intervals");
785
801
  }
786
802
  if (local) {
787
- assert(localOpMetadata !== undefined, 0x552 /* op metadata should be defined for local op */);
803
+ (0, core_utils_1.assert)(localOpMetadata !== undefined, 0x552 /* op metadata should be defined for local op */);
788
804
  this.localSeqToSerializedInterval.delete(localOpMetadata?.localSeq);
789
805
  // This is an ack from the server. Remove the pending change.
790
806
  this.removePendingChange(serializedInterval);
@@ -793,7 +809,7 @@ export class IntervalCollection extends TypedEventEmitter {
793
809
  // This API cannot change the ID, and writing to the ID property will result in an exception. So we
794
810
  // strip it out of the properties here.
795
811
  const { [reservedIntervalIdKey]: id, ...newProps } = serializedInterval.properties ?? {};
796
- assert(id !== undefined, 0x3fe /* id must exist on the interval */);
812
+ (0, core_utils_1.assert)(id !== undefined, 0x3fe /* id must exist on the interval */);
797
813
  const interval = this.getIntervalById(id);
798
814
  if (!interval) {
799
815
  // The interval has been removed locally; no-op.
@@ -802,7 +818,7 @@ export class IntervalCollection extends TypedEventEmitter {
802
818
  if (local) {
803
819
  // Let the propertyManager prune its pending change-properties set.
804
820
  interval.propertyManager?.ackPendingProperties({
805
- type: MergeTreeDeltaType.ANNOTATE,
821
+ type: merge_tree_1.MergeTreeDeltaType.ANNOTATE,
806
822
  props: serializedInterval.properties ?? {},
807
823
  });
808
824
  this.ackInterval(interval, op);
@@ -867,7 +883,7 @@ export class IntervalCollection extends TypedEventEmitter {
867
883
  return serializedInterval;
868
884
  }
869
885
  if (!this.attached) {
870
- throw new LoggingError("attachSequence must be called");
886
+ throw new telemetry_utils_1.LoggingError("attachSequence must be called");
871
887
  }
872
888
  const { intervalType, properties, stickiness, startSide, endSide } = serializedInterval;
873
889
  const { start: startRebased, end: endRebased } = this.localSeqToRebasedInterval.get(localSeq) ?? this.computeRebasedPositions(localSeq);
@@ -890,8 +906,8 @@ export class IntervalCollection extends TypedEventEmitter {
890
906
  this.addPendingChange(intervalId, rebased);
891
907
  }
892
908
  // if the interval slid off the string, rebase the op to be a noop and delete the interval.
893
- if (startRebased === DetachedReferencePosition ||
894
- endRebased === DetachedReferencePosition) {
909
+ if (startRebased === merge_tree_1.DetachedReferencePosition ||
910
+ endRebased === merge_tree_1.DetachedReferencePosition) {
895
911
  if (localInterval) {
896
912
  this.localCollection?.removeExistingInterval(localInterval);
897
913
  }
@@ -899,7 +915,7 @@ export class IntervalCollection extends TypedEventEmitter {
899
915
  }
900
916
  if (localInterval !== undefined) {
901
917
  // we know we must be using `SequenceInterval` because `this.client` exists
902
- assert(localInterval instanceof SequenceInterval, 0x3a0 /* localInterval must be `SequenceInterval` when used with client */);
918
+ (0, core_utils_1.assert)(localInterval instanceof intervals_1.SequenceInterval, 0x3a0 /* localInterval must be `SequenceInterval` when used with client */);
903
919
  // The rebased op may place this interval's endpoints on different segments. Calling `changeInterval` here
904
920
  // updates the local client's state to be consistent with the emitted op.
905
921
  this.localCollection?.changeInterval(localInterval, toOptionalSequencePlace(startRebased, startSide), toOptionalSequencePlace(endRebased, endSide), undefined, localSeq);
@@ -908,13 +924,13 @@ export class IntervalCollection extends TypedEventEmitter {
908
924
  }
909
925
  getSlideToSegment(lref) {
910
926
  if (!this.client) {
911
- throw new LoggingError("client does not exist");
927
+ throw new telemetry_utils_1.LoggingError("client does not exist");
912
928
  }
913
929
  const segoff = { segment: lref.getSegment(), offset: lref.getOffset() };
914
930
  if (segoff.segment?.localRefs?.has(lref) !== true) {
915
931
  return undefined;
916
932
  }
917
- const newSegoff = getSlideToSegoff(segoff, undefined, this.options.mergeTreeReferencesCanSlideToEndpoint);
933
+ const newSegoff = (0, merge_tree_1.getSlideToSegoff)(segoff, undefined, this.options.mergeTreeReferencesCanSlideToEndpoint);
918
934
  const value = segoff.segment === newSegoff.segment && segoff.offset === newSegoff.offset
919
935
  ? undefined
920
936
  : newSegoff;
@@ -922,11 +938,11 @@ export class IntervalCollection extends TypedEventEmitter {
922
938
  }
923
939
  ackInterval(interval, op) {
924
940
  // Only SequenceIntervals need potential sliding
925
- if (!(interval instanceof SequenceInterval)) {
941
+ if (!(interval instanceof intervals_1.SequenceInterval)) {
926
942
  return;
927
943
  }
928
- if (!refTypeIncludesFlag(interval.start, ReferenceType.StayOnRemove) &&
929
- !refTypeIncludesFlag(interval.end, ReferenceType.StayOnRemove)) {
944
+ if (!(0, merge_tree_1.refTypeIncludesFlag)(interval.start, merge_tree_1.ReferenceType.StayOnRemove) &&
945
+ !(0, merge_tree_1.refTypeIncludesFlag)(interval.end, merge_tree_1.ReferenceType.StayOnRemove)) {
930
946
  return;
931
947
  }
932
948
  const newStart = this.getSlideToSegment(interval.start);
@@ -944,7 +960,7 @@ export class IntervalCollection extends TypedEventEmitter {
944
960
  const needsEndUpdate = newEnd !== undefined && !hasPendingEndChange;
945
961
  if (needsStartUpdate || needsEndUpdate) {
946
962
  if (!this.localCollection) {
947
- throw new LoggingError("Attach must be called before accessing intervals");
963
+ throw new telemetry_utils_1.LoggingError("Attach must be called before accessing intervals");
948
964
  }
949
965
  // `interval`'s endpoints will get modified in-place, so clone it prior to doing so for event emission.
950
966
  const oldInterval = interval.clone();
@@ -953,32 +969,32 @@ export class IntervalCollection extends TypedEventEmitter {
953
969
  // This ensures that the correct listeners are added to the LocalReferencePosition.
954
970
  this.localCollection.removeExistingInterval(interval);
955
971
  if (!this.client) {
956
- throw new LoggingError("client does not exist");
972
+ throw new telemetry_utils_1.LoggingError("client does not exist");
957
973
  }
958
974
  if (needsStartUpdate) {
959
975
  const props = interval.start.properties;
960
- interval.start = createPositionReferenceFromSegoff(this.client, newStart, interval.start.refType, op, undefined, undefined, startReferenceSlidingPreference(interval.stickiness), startReferenceSlidingPreference(interval.stickiness) ===
961
- SlidingPreference.BACKWARD);
976
+ interval.start = (0, intervals_1.createPositionReferenceFromSegoff)(this.client, newStart, interval.start.refType, op, undefined, undefined, (0, intervals_1.startReferenceSlidingPreference)(interval.stickiness), (0, intervals_1.startReferenceSlidingPreference)(interval.stickiness) ===
977
+ merge_tree_1.SlidingPreference.BACKWARD);
962
978
  if (props) {
963
979
  interval.start.addProperties(props);
964
980
  }
965
981
  const oldSeg = oldInterval.start.getSegment();
966
982
  // remove and rebuild start interval as transient for event
967
983
  this.client.removeLocalReferencePosition(oldInterval.start);
968
- oldInterval.start.refType = ReferenceType.Transient;
984
+ oldInterval.start.refType = merge_tree_1.ReferenceType.Transient;
969
985
  oldSeg?.localRefs?.addLocalRef(oldInterval.start, oldInterval.start.getOffset());
970
986
  }
971
987
  if (needsEndUpdate) {
972
988
  const props = interval.end.properties;
973
- interval.end = createPositionReferenceFromSegoff(this.client, newEnd, interval.end.refType, op, undefined, undefined, endReferenceSlidingPreference(interval.stickiness), endReferenceSlidingPreference(interval.stickiness) ===
974
- SlidingPreference.FORWARD);
989
+ interval.end = (0, intervals_1.createPositionReferenceFromSegoff)(this.client, newEnd, interval.end.refType, op, undefined, undefined, (0, intervals_1.endReferenceSlidingPreference)(interval.stickiness), (0, intervals_1.endReferenceSlidingPreference)(interval.stickiness) ===
990
+ merge_tree_1.SlidingPreference.FORWARD);
975
991
  if (props) {
976
992
  interval.end.addProperties(props);
977
993
  }
978
994
  // remove and rebuild end interval as transient for event
979
995
  const oldSeg = oldInterval.end.getSegment();
980
996
  this.client.removeLocalReferencePosition(oldInterval.end);
981
- oldInterval.end.refType = ReferenceType.Transient;
997
+ oldInterval.end.refType = merge_tree_1.ReferenceType.Transient;
982
998
  oldSeg?.localRefs?.addLocalRef(oldInterval.end, oldInterval.end.getOffset());
983
999
  }
984
1000
  this.localCollection.add(interval);
@@ -988,7 +1004,7 @@ export class IntervalCollection extends TypedEventEmitter {
988
1004
  /** @internal */
989
1005
  ackAdd(serializedInterval, local, op, localOpMetadata) {
990
1006
  if (local) {
991
- assert(localOpMetadata !== undefined, 0x553 /* op metadata should be defined for local op */);
1007
+ (0, core_utils_1.assert)(localOpMetadata !== undefined, 0x553 /* op metadata should be defined for local op */);
992
1008
  this.localSeqToSerializedInterval.delete(localOpMetadata.localSeq);
993
1009
  const id = serializedInterval.properties?.[reservedIntervalIdKey];
994
1010
  const localInterval = this.getIntervalById(id);
@@ -998,7 +1014,7 @@ export class IntervalCollection extends TypedEventEmitter {
998
1014
  return;
999
1015
  }
1000
1016
  if (!this.localCollection) {
1001
- throw new LoggingError("attachSequence must be called");
1017
+ throw new telemetry_utils_1.LoggingError("attachSequence must be called");
1002
1018
  }
1003
1019
  this.localCollection.ensureSerializedId(serializedInterval);
1004
1020
  const interval = this.localCollection.addInterval(toSequencePlace(serializedInterval.start, serializedInterval.startSide ?? Side.Before), toSequencePlace(serializedInterval.end, serializedInterval.endSide ?? Side.Before), serializedInterval.intervalType, serializedInterval.properties, op);
@@ -1014,12 +1030,12 @@ export class IntervalCollection extends TypedEventEmitter {
1014
1030
  ackDelete(serializedInterval, local, op) {
1015
1031
  if (local) {
1016
1032
  // Local ops were applied when the message was created and there's no "pending delete"
1017
- // state to bookkeep: remote operation application takes into account possibility of
1033
+ // state to book keep: remote operation application takes into account possibility of
1018
1034
  // locally deleted interval whenever a lookup happens.
1019
1035
  return;
1020
1036
  }
1021
1037
  if (!this.localCollection) {
1022
- throw new LoggingError("attach must be called prior to deleting intervals");
1038
+ throw new telemetry_utils_1.LoggingError("attach must be called prior to deleting intervals");
1023
1039
  }
1024
1040
  const id = this.localCollection.ensureSerializedId(serializedInterval);
1025
1041
  const interval = this.localCollection.idIntervalIndex.getIntervalById(id);
@@ -1032,7 +1048,7 @@ export class IntervalCollection extends TypedEventEmitter {
1032
1048
  */
1033
1049
  serializeInternal() {
1034
1050
  if (!this.localCollection) {
1035
- throw new LoggingError("attachSequence must be called");
1051
+ throw new telemetry_utils_1.LoggingError("attachSequence must be called");
1036
1052
  }
1037
1053
  return this.localCollection.serialize();
1038
1054
  }
@@ -1085,7 +1101,7 @@ export class IntervalCollection extends TypedEventEmitter {
1085
1101
  */
1086
1102
  findOverlappingIntervals(startPosition, endPosition) {
1087
1103
  if (!this.localCollection) {
1088
- throw new LoggingError("attachSequence must be called");
1104
+ throw new telemetry_utils_1.LoggingError("attachSequence must be called");
1089
1105
  }
1090
1106
  return this.localCollection.overlappingIntervalsIndex.findOverlappingIntervals(startPosition, endPosition);
1091
1107
  }
@@ -1094,7 +1110,7 @@ export class IntervalCollection extends TypedEventEmitter {
1094
1110
  */
1095
1111
  map(fn) {
1096
1112
  if (!this.localCollection) {
1097
- throw new LoggingError("attachSequence must be called");
1113
+ throw new telemetry_utils_1.LoggingError("attachSequence must be called");
1098
1114
  }
1099
1115
  for (const interval of this.localCollection.idIntervalIndex) {
1100
1116
  fn(interval);
@@ -1105,7 +1121,7 @@ export class IntervalCollection extends TypedEventEmitter {
1105
1121
  */
1106
1122
  previousInterval(pos) {
1107
1123
  if (!this.localCollection) {
1108
- throw new LoggingError("attachSequence must be called");
1124
+ throw new telemetry_utils_1.LoggingError("attachSequence must be called");
1109
1125
  }
1110
1126
  return this.localCollection.endIntervalIndex.previousInterval(pos);
1111
1127
  }
@@ -1114,15 +1130,16 @@ export class IntervalCollection extends TypedEventEmitter {
1114
1130
  */
1115
1131
  nextInterval(pos) {
1116
1132
  if (!this.localCollection) {
1117
- throw new LoggingError("attachSequence must be called");
1133
+ throw new telemetry_utils_1.LoggingError("attachSequence must be called");
1118
1134
  }
1119
1135
  return this.localCollection.endIntervalIndex.nextInterval(pos);
1120
1136
  }
1121
1137
  }
1138
+ exports.IntervalCollection = IntervalCollection;
1122
1139
  function setSlideOnRemove(lref) {
1123
1140
  let refType = lref.refType;
1124
- refType = refType & ~ReferenceType.StayOnRemove;
1125
- refType = refType | ReferenceType.SlideOnRemove;
1141
+ refType = refType & ~merge_tree_1.ReferenceType.StayOnRemove;
1142
+ refType = refType | merge_tree_1.ReferenceType.SlideOnRemove;
1126
1143
  lref.refType = refType;
1127
1144
  }
1128
1145
  /**
@@ -1130,12 +1147,13 @@ function setSlideOnRemove(lref) {
1130
1147
  * @returns undefined if the reference position is not the endpoint of any interval (e.g. it was created
1131
1148
  * on the merge tree directly by app code), otherwise an {@link IntervalLocator} for the interval this
1132
1149
  * endpoint is a part of.
1133
- * @public
1150
+ * @internal
1134
1151
  */
1135
- export function intervalLocatorFromEndpoint(potentialEndpoint) {
1136
- const { interval, [reservedRangeLabelsKey]: collectionNameArray } = potentialEndpoint.properties ?? {};
1152
+ function intervalLocatorFromEndpoint(potentialEndpoint) {
1153
+ const { interval, [merge_tree_1.reservedRangeLabelsKey]: collectionNameArray } = potentialEndpoint.properties ?? {};
1137
1154
  return interval && collectionNameArray?.length === 1
1138
1155
  ? { label: collectionNameArray[0], interval }
1139
1156
  : undefined;
1140
1157
  }
1158
+ exports.intervalLocatorFromEndpoint = intervalLocatorFromEndpoint;
1141
1159
  //# sourceMappingURL=intervalCollection.js.map