@fluidframework/merge-tree 2.3.1 → 2.4.0-297027

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 (118) hide show
  1. package/api-report/merge-tree.legacy.alpha.api.md +26 -7
  2. package/dist/attributionPolicy.d.ts.map +1 -1
  3. package/dist/attributionPolicy.js +10 -3
  4. package/dist/attributionPolicy.js.map +1 -1
  5. package/dist/client.d.ts +14 -4
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +97 -10
  8. package/dist/client.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/legacy.d.ts +1 -0
  13. package/dist/mergeTree.d.ts +15 -2
  14. package/dist/mergeTree.d.ts.map +1 -1
  15. package/dist/mergeTree.js +68 -48
  16. package/dist/mergeTree.js.map +1 -1
  17. package/dist/mergeTreeNodes.d.ts +6 -9
  18. package/dist/mergeTreeNodes.d.ts.map +1 -1
  19. package/dist/mergeTreeNodes.js +2 -1
  20. package/dist/mergeTreeNodes.js.map +1 -1
  21. package/dist/opBuilder.d.ts +15 -1
  22. package/dist/opBuilder.d.ts.map +1 -1
  23. package/dist/opBuilder.js +28 -1
  24. package/dist/opBuilder.js.map +1 -1
  25. package/dist/ops.d.ts +27 -1
  26. package/dist/ops.d.ts.map +1 -1
  27. package/dist/ops.js +1 -0
  28. package/dist/ops.js.map +1 -1
  29. package/dist/sequencePlace.d.ts +4 -0
  30. package/dist/sequencePlace.d.ts.map +1 -1
  31. package/dist/sequencePlace.js +17 -1
  32. package/dist/sequencePlace.js.map +1 -1
  33. package/dist/test/obliterate.concurrent.spec.js +18 -0
  34. package/dist/test/obliterate.concurrent.spec.js.map +1 -1
  35. package/dist/test/obliterate.partialLength.spec.js +8 -4
  36. package/dist/test/obliterate.partialLength.spec.js.map +1 -1
  37. package/dist/test/obliterate.rangeExpansion.spec.js +109 -53
  38. package/dist/test/obliterate.rangeExpansion.spec.js.map +1 -1
  39. package/dist/test/obliterate.spec.js +14 -8
  40. package/dist/test/obliterate.spec.js.map +1 -1
  41. package/dist/test/reconnectHelper.d.ts +8 -6
  42. package/dist/test/reconnectHelper.d.ts.map +1 -1
  43. package/dist/test/reconnectHelper.js +14 -13
  44. package/dist/test/reconnectHelper.js.map +1 -1
  45. package/dist/test/testClient.d.ts +1 -11
  46. package/dist/test/testClient.d.ts.map +1 -1
  47. package/dist/test/testClient.js +0 -3
  48. package/dist/test/testClient.js.map +1 -1
  49. package/dist/test/testClientLogger.d.ts.map +1 -1
  50. package/dist/test/testClientLogger.js +19 -8
  51. package/dist/test/testClientLogger.js.map +1 -1
  52. package/dist/test/testUtils.d.ts +10 -0
  53. package/dist/test/testUtils.d.ts.map +1 -1
  54. package/dist/test/testUtils.js +5 -1
  55. package/dist/test/testUtils.js.map +1 -1
  56. package/lib/attributionPolicy.d.ts.map +1 -1
  57. package/lib/attributionPolicy.js +10 -3
  58. package/lib/attributionPolicy.js.map +1 -1
  59. package/lib/client.d.ts +14 -4
  60. package/lib/client.d.ts.map +1 -1
  61. package/lib/client.js +98 -11
  62. package/lib/client.js.map +1 -1
  63. package/lib/index.d.ts +1 -1
  64. package/lib/index.d.ts.map +1 -1
  65. package/lib/index.js.map +1 -1
  66. package/lib/legacy.d.ts +1 -0
  67. package/lib/mergeTree.d.ts +15 -2
  68. package/lib/mergeTree.d.ts.map +1 -1
  69. package/lib/mergeTree.js +69 -49
  70. package/lib/mergeTree.js.map +1 -1
  71. package/lib/mergeTreeNodes.d.ts +6 -9
  72. package/lib/mergeTreeNodes.d.ts.map +1 -1
  73. package/lib/mergeTreeNodes.js +2 -1
  74. package/lib/mergeTreeNodes.js.map +1 -1
  75. package/lib/opBuilder.d.ts +15 -1
  76. package/lib/opBuilder.d.ts.map +1 -1
  77. package/lib/opBuilder.js +26 -0
  78. package/lib/opBuilder.js.map +1 -1
  79. package/lib/ops.d.ts +27 -1
  80. package/lib/ops.d.ts.map +1 -1
  81. package/lib/ops.js +1 -0
  82. package/lib/ops.js.map +1 -1
  83. package/lib/sequencePlace.d.ts +4 -0
  84. package/lib/sequencePlace.d.ts.map +1 -1
  85. package/lib/sequencePlace.js +15 -0
  86. package/lib/sequencePlace.js.map +1 -1
  87. package/lib/test/obliterate.concurrent.spec.js +18 -0
  88. package/lib/test/obliterate.concurrent.spec.js.map +1 -1
  89. package/lib/test/obliterate.partialLength.spec.js +9 -5
  90. package/lib/test/obliterate.partialLength.spec.js.map +1 -1
  91. package/lib/test/obliterate.rangeExpansion.spec.js +109 -53
  92. package/lib/test/obliterate.rangeExpansion.spec.js.map +1 -1
  93. package/lib/test/obliterate.spec.js +15 -9
  94. package/lib/test/obliterate.spec.js.map +1 -1
  95. package/lib/test/reconnectHelper.d.ts +8 -6
  96. package/lib/test/reconnectHelper.d.ts.map +1 -1
  97. package/lib/test/reconnectHelper.js +15 -14
  98. package/lib/test/reconnectHelper.js.map +1 -1
  99. package/lib/test/testClient.d.ts +1 -11
  100. package/lib/test/testClient.d.ts.map +1 -1
  101. package/lib/test/testClient.js +0 -3
  102. package/lib/test/testClient.js.map +1 -1
  103. package/lib/test/testClientLogger.d.ts.map +1 -1
  104. package/lib/test/testClientLogger.js +19 -8
  105. package/lib/test/testClientLogger.js.map +1 -1
  106. package/lib/test/testUtils.d.ts +10 -0
  107. package/lib/test/testUtils.d.ts.map +1 -1
  108. package/lib/test/testUtils.js +3 -0
  109. package/lib/test/testUtils.js.map +1 -1
  110. package/package.json +30 -17
  111. package/src/attributionPolicy.ts +5 -0
  112. package/src/client.ts +138 -20
  113. package/src/index.ts +1 -0
  114. package/src/mergeTree.ts +116 -77
  115. package/src/mergeTreeNodes.ts +9 -10
  116. package/src/opBuilder.ts +32 -0
  117. package/src/ops.ts +23 -1
  118. package/src/sequencePlace.ts +16 -0
package/src/opBuilder.ts CHANGED
@@ -14,8 +14,10 @@ import {
14
14
  IMergeTreeObliterateMsg,
15
15
  IMergeTreeRemoveMsg,
16
16
  MergeTreeDeltaType,
17
+ type IMergeTreeObliterateSidedMsg,
17
18
  } from "./ops.js";
18
19
  import { PropertySet } from "./properties.js";
20
+ import { normalizePlace, Side, type SequencePlace } from "./sequencePlace.js";
19
21
 
20
22
  /**
21
23
  * Creates the op for annotating the markers with the provided properties
@@ -97,6 +99,36 @@ export function createObliterateRangeOp(start: number, end: number): IMergeTreeO
97
99
  };
98
100
  }
99
101
 
102
+ /**
103
+ * Creates the op to obliterate a range
104
+ *
105
+ * @param start - The start of the range to obliterate.
106
+ * If a number is provided, the range will start before that index.
107
+ * @param end - The end of the range to obliterate.
108
+ * If a number is provided, the range will end after that index -1.
109
+ * This preserves the previous behavior of not expanding obliteration ranges at the endpoints
110
+ * for uses which predate the availability of endpoint expansion.
111
+ *
112
+ * @internal
113
+ */
114
+ export function createObliterateRangeOpSided(
115
+ start: SequencePlace,
116
+ end: SequencePlace,
117
+ ): IMergeTreeObliterateSidedMsg {
118
+ const startPlace = normalizePlace(start);
119
+ // If a number is provided, default to after the previous index.
120
+ // This preserves the behavior of obliterate prior to the introduction of endpoint expansion.
121
+ const endPlace =
122
+ typeof end === "number"
123
+ ? { pos: end - 1, side: Side.After } // default to inclusive bounds
124
+ : normalizePlace(end);
125
+ return {
126
+ type: MergeTreeDeltaType.OBLITERATE_SIDED,
127
+ pos1: { pos: startPlace.pos, before: startPlace.side === Side.Before },
128
+ pos2: { pos: endPlace.pos, before: endPlace.side === Side.Before },
129
+ };
130
+ }
131
+
100
132
  /**
101
133
  * Creates an op for inserting a segment at the specified position.
102
134
  *
package/src/ops.ts CHANGED
@@ -70,6 +70,7 @@ export const MergeTreeDeltaType = {
70
70
  */
71
71
  GROUP: 3,
72
72
  OBLITERATE: 4,
73
+ OBLITERATE_SIDED: 5,
73
74
  } as const;
74
75
 
75
76
  /**
@@ -162,6 +163,26 @@ export interface IMergeTreeObliterateMsg extends IMergeTreeDelta {
162
163
  relativePos2?: never;
163
164
  }
164
165
 
166
+ /**
167
+ * @legacy
168
+ * @alpha
169
+ */
170
+ export interface IMergeTreeObliterateSidedMsg extends IMergeTreeDelta {
171
+ type: typeof MergeTreeDeltaType.OBLITERATE_SIDED;
172
+ pos1: { pos: number; before: boolean };
173
+ /**
174
+ * This field is currently unused, but we keep it around to make the union
175
+ * type of all merge-tree messages have the same fields
176
+ */
177
+ relativePos1?: never;
178
+ pos2: { pos: number; before: boolean };
179
+ /**
180
+ * This field is currently unused, but we keep it around to make the union
181
+ * type of all merge-tree messages have the same fields
182
+ */
183
+ relativePos2?: never;
184
+ }
185
+
165
186
  /**
166
187
  * @legacy
167
188
  * @alpha
@@ -206,7 +227,8 @@ export type IMergeTreeDeltaOp =
206
227
  | IMergeTreeInsertMsg
207
228
  | IMergeTreeRemoveMsg
208
229
  | IMergeTreeAnnotateMsg
209
- | IMergeTreeObliterateMsg;
230
+ | IMergeTreeObliterateMsg
231
+ | IMergeTreeObliterateSidedMsg;
210
232
 
211
233
  /**
212
234
  * @legacy
@@ -87,3 +87,19 @@ export function endpointPosAndSide(
87
87
  endPos,
88
88
  };
89
89
  }
90
+
91
+ /**
92
+ * Returns the given place in InteriorSequencePlace form.
93
+ */
94
+ export function normalizePlace(place: SequencePlace): InteriorSequencePlace {
95
+ if (typeof place === "number") {
96
+ return { pos: place, side: Side.Before };
97
+ }
98
+ if (place === "start") {
99
+ return { pos: -1, side: Side.After };
100
+ }
101
+ if (place === "end") {
102
+ return { pos: -1, side: Side.Before };
103
+ }
104
+ return place;
105
+ }