@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
@@ -18,7 +18,7 @@ const intervalIndex_1 = require("./intervalIndex");
18
18
  * Defines a side relative to a character in a sequence.
19
19
  *
20
20
  * @remarks See {@link SequencePlace} for additional context on usage.
21
- * @public
21
+ * @alpha
22
22
  */
23
23
  var Side;
24
24
  (function (Side) {
@@ -329,6 +329,9 @@ function makeOpsMap() {
329
329
  const rebase = (collection, op, localOpMetadata) => {
330
330
  const { localSeq } = localOpMetadata;
331
331
  const rebasedValue = collection.rebaseLocalInterval(op.opName, op.value, localSeq);
332
+ if (rebasedValue === undefined) {
333
+ return undefined;
334
+ }
332
335
  const rebasedOp = { ...op, value: rebasedValue };
333
336
  return { rebasedOp, rebasedLocalOpMetadata: localOpMetadata };
334
337
  };
@@ -661,58 +664,54 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
661
664
  }
662
665
  /**
663
666
  * {@inheritdoc IIntervalCollection.changeProperties}
667
+ * @deprecated - call change with the id and an object containing the new props values
664
668
  */
665
669
  changeProperties(id, props) {
666
- if (!this.attached) {
667
- throw new telemetry_utils_1.LoggingError("Attach must be called before accessing intervals");
668
- }
669
- if (typeof id !== "string") {
670
- throw new telemetry_utils_1.LoggingError("Change API requires an ID that is a string");
671
- }
672
- if (!props) {
673
- throw new telemetry_utils_1.LoggingError("changeProperties should be called with a property set");
674
- }
675
- // prevent the overwriting of an interval label, it should remain unchanged
676
- // once it has been inserted into the collection.
677
- if (props[merge_tree_1.reservedRangeLabelsKey] !== undefined) {
678
- throw new telemetry_utils_1.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;
679
680
  }
680
- const interval = this.getIntervalById(id);
681
- if (interval) {
682
- const deltaProps = interval.addProperties(props, true, this.isCollaborating ? merge_tree_1.UnassignedSequenceNumber : merge_tree_1.UniversalSequenceNumber);
683
- const serializedInterval = interval.serialize();
684
- // Emit a change op that will only change properties. Add the ID to
685
- // the property bag provided by the caller.
686
- serializedInterval.start = undefined;
687
- serializedInterval.end = undefined;
688
- serializedInterval.properties = props;
689
- serializedInterval.properties[reservedIntervalIdKey] = interval.getIntervalId();
690
- const localSeq = this.getNextLocalSeq();
691
- this.localSeqToSerializedInterval.set(localSeq, serializedInterval);
692
- this.emitter.emit("change", undefined, serializedInterval, { localSeq });
693
- this.emit("propertyChanged", interval, deltaProps, true, undefined);
681
+ else {
682
+ start = arg2.start;
683
+ end = arg2.end;
684
+ props = arg2.props;
694
685
  }
695
- }
696
- /**
697
- * {@inheritdoc IIntervalCollection.change}
698
- */
699
- change(id, start, end) {
700
686
  if (!this.localCollection) {
701
687
  throw new telemetry_utils_1.LoggingError("Attach must be called before accessing intervals");
702
688
  }
703
689
  // Force id to be a string.
704
690
  if (typeof id !== "string") {
705
- throw new telemetry_utils_1.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");
706
701
  }
707
702
  const interval = this.getIntervalById(id);
708
703
  if (interval) {
709
- const newInterval = this.localCollection.changeInterval(interval, start, end);
710
- if (!newInterval) {
711
- 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);
712
708
  }
713
- if (!this.isCollaborating && newInterval instanceof intervals_1.SequenceInterval) {
714
- setSlideOnRemove(newInterval.start);
715
- 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
+ }
716
715
  }
717
716
  const serializedInterval = interval.serialize();
718
717
  const { startPos, startSide, endPos, endSide } = endpointPosAndSide(start, end);
@@ -722,15 +721,21 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
722
721
  serializedInterval.startSide = startSide;
723
722
  serializedInterval.endSide = endSide;
724
723
  serializedInterval.stickiness = stickiness;
725
- // 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
726
725
  serializedInterval.properties = {
727
726
  [reservedIntervalIdKey]: interval.getIntervalId(),
727
+ ...props,
728
728
  };
729
729
  const localSeq = this.getNextLocalSeq();
730
730
  this.localSeqToSerializedInterval.set(localSeq, serializedInterval);
731
731
  this.emitter.emit("change", undefined, serializedInterval, { localSeq });
732
- this.addPendingChange(id, serializedInterval);
733
- 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
+ }
734
739
  return newInterval;
735
740
  }
736
741
  // No interval to change
@@ -1025,7 +1030,7 @@ class IntervalCollection extends client_utils_1.TypedEventEmitter {
1025
1030
  ackDelete(serializedInterval, local, op) {
1026
1031
  if (local) {
1027
1032
  // Local ops were applied when the message was created and there's no "pending delete"
1028
- // state to bookkeep: remote operation application takes into account possibility of
1033
+ // state to book keep: remote operation application takes into account possibility of
1029
1034
  // locally deleted interval whenever a lookup happens.
1030
1035
  return;
1031
1036
  }
@@ -1142,7 +1147,7 @@ function setSlideOnRemove(lref) {
1142
1147
  * @returns undefined if the reference position is not the endpoint of any interval (e.g. it was created
1143
1148
  * on the merge tree directly by app code), otherwise an {@link IntervalLocator} for the interval this
1144
1149
  * endpoint is a part of.
1145
- * @public
1150
+ * @internal
1146
1151
  */
1147
1152
  function intervalLocatorFromEndpoint(potentialEndpoint) {
1148
1153
  const { interval, [merge_tree_1.reservedRangeLabelsKey]: collectionNameArray } = potentialEndpoint.properties ?? {};