@fluidframework/merge-tree 2.30.0 → 2.31.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 (308) hide show
  1. package/CHANGELOG.md +403 -399
  2. package/api-report/merge-tree.legacy.alpha.api.md +1 -0
  3. package/dist/MergeTreeTextHelper.d.ts +9 -3
  4. package/dist/MergeTreeTextHelper.d.ts.map +1 -1
  5. package/dist/MergeTreeTextHelper.js +5 -5
  6. package/dist/MergeTreeTextHelper.js.map +1 -1
  7. package/dist/client.d.ts +7 -13
  8. package/dist/client.d.ts.map +1 -1
  9. package/dist/client.js +136 -110
  10. package/dist/client.js.map +1 -1
  11. package/dist/endOfTreeSegment.d.ts +12 -8
  12. package/dist/endOfTreeSegment.d.ts.map +1 -1
  13. package/dist/endOfTreeSegment.js +2 -4
  14. package/dist/endOfTreeSegment.js.map +1 -1
  15. package/dist/index.d.ts +6 -3
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +2 -3
  18. package/dist/index.js.map +1 -1
  19. package/dist/mergeTree.d.ts +37 -23
  20. package/dist/mergeTree.d.ts.map +1 -1
  21. package/dist/mergeTree.js +400 -483
  22. package/dist/mergeTree.js.map +1 -1
  23. package/dist/mergeTreeDeltaCallback.d.ts +4 -8
  24. package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
  25. package/dist/mergeTreeDeltaCallback.js.map +1 -1
  26. package/dist/mergeTreeNodes.d.ts +32 -10
  27. package/dist/mergeTreeNodes.d.ts.map +1 -1
  28. package/dist/mergeTreeNodes.js +43 -28
  29. package/dist/mergeTreeNodes.js.map +1 -1
  30. package/dist/partialLengths.d.ts +2 -2
  31. package/dist/partialLengths.d.ts.map +1 -1
  32. package/dist/partialLengths.js +181 -109
  33. package/dist/partialLengths.js.map +1 -1
  34. package/dist/perspective.d.ts +8 -27
  35. package/dist/perspective.d.ts.map +1 -1
  36. package/dist/perspective.js +7 -67
  37. package/dist/perspective.js.map +1 -1
  38. package/dist/revertibles.d.ts.map +1 -1
  39. package/dist/revertibles.js +2 -2
  40. package/dist/revertibles.js.map +1 -1
  41. package/dist/segmentInfos.d.ts +20 -106
  42. package/dist/segmentInfos.d.ts.map +1 -1
  43. package/dist/segmentInfos.js +28 -42
  44. package/dist/segmentInfos.js.map +1 -1
  45. package/dist/segmentPropertiesManager.d.ts +1 -14
  46. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  47. package/dist/segmentPropertiesManager.js +3 -17
  48. package/dist/segmentPropertiesManager.js.map +1 -1
  49. package/dist/snapshotLoader.d.ts.map +1 -1
  50. package/dist/snapshotLoader.js +62 -19
  51. package/dist/snapshotLoader.js.map +1 -1
  52. package/dist/snapshotV1.d.ts.map +1 -1
  53. package/dist/snapshotV1.js +55 -24
  54. package/dist/snapshotV1.js.map +1 -1
  55. package/dist/snapshotlegacy.d.ts.map +1 -1
  56. package/dist/snapshotlegacy.js +6 -9
  57. package/dist/snapshotlegacy.js.map +1 -1
  58. package/dist/stamps.d.ts +1 -1
  59. package/dist/stamps.js +1 -1
  60. package/dist/stamps.js.map +1 -1
  61. package/dist/test/Insertion.perf.spec.js +6 -51
  62. package/dist/test/Insertion.perf.spec.js.map +1 -1
  63. package/dist/test/PartialLengths.perf.spec.js +18 -25
  64. package/dist/test/PartialLengths.perf.spec.js.map +1 -1
  65. package/dist/test/Removal.perf.spec.js +13 -41
  66. package/dist/test/Removal.perf.spec.js.map +1 -1
  67. package/dist/test/beastTest.spec.d.ts.map +1 -1
  68. package/dist/test/beastTest.spec.js +41 -66
  69. package/dist/test/beastTest.spec.js.map +1 -1
  70. package/dist/test/client.annotateMarker.spec.js +1 -11
  71. package/dist/test/client.annotateMarker.spec.js.map +1 -1
  72. package/dist/test/client.applyMsg.spec.js +14 -14
  73. package/dist/test/client.applyMsg.spec.js.map +1 -1
  74. package/dist/test/client.getPosition.spec.js +1 -1
  75. package/dist/test/client.getPosition.spec.js.map +1 -1
  76. package/dist/test/client.localReference.spec.js +1 -1
  77. package/dist/test/client.localReference.spec.js.map +1 -1
  78. package/dist/test/client.rollback.spec.js +49 -58
  79. package/dist/test/client.rollback.spec.js.map +1 -1
  80. package/dist/test/client.rollbackFarm.spec.js +1 -1
  81. package/dist/test/client.rollbackFarm.spec.js.map +1 -1
  82. package/dist/test/client.searchForMarker.spec.js +4 -21
  83. package/dist/test/client.searchForMarker.spec.js.map +1 -1
  84. package/dist/test/index.d.ts +2 -2
  85. package/dist/test/index.d.ts.map +1 -1
  86. package/dist/test/index.js +2 -6
  87. package/dist/test/index.js.map +1 -1
  88. package/dist/test/mergeTree.annotate.deltaCallback.spec.js +14 -59
  89. package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  90. package/dist/test/mergeTree.annotate.spec.js +47 -63
  91. package/dist/test/mergeTree.annotate.spec.js.map +1 -1
  92. package/dist/test/mergeTree.insert.deltaCallback.spec.js +9 -62
  93. package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  94. package/dist/test/mergeTree.insertingWalk.spec.js +59 -125
  95. package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
  96. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +12 -93
  97. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  98. package/dist/test/mergeTree.markRangeRemoved.spec.js +10 -7
  99. package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  100. package/dist/test/mergeTree.walk.spec.js +2 -14
  101. package/dist/test/mergeTree.walk.spec.js.map +1 -1
  102. package/dist/test/mergeTreeOperationRunner.js +2 -2
  103. package/dist/test/mergeTreeOperationRunner.js.map +1 -1
  104. package/dist/test/obliterate.concurrent.spec.js +18 -23
  105. package/dist/test/obliterate.concurrent.spec.js.map +1 -1
  106. package/dist/test/obliterate.partialLength.spec.js +166 -136
  107. package/dist/test/obliterate.partialLength.spec.js.map +1 -1
  108. package/dist/test/obliterate.spec.js +16 -126
  109. package/dist/test/obliterate.spec.js.map +1 -1
  110. package/dist/test/partialLength.spec.js +28 -196
  111. package/dist/test/partialLength.spec.js.map +1 -1
  112. package/dist/test/perspective.spec.js +34 -0
  113. package/dist/test/perspective.spec.js.map +1 -1
  114. package/dist/test/propertyManager.spec.js +1 -1
  115. package/dist/test/propertyManager.spec.js.map +1 -1
  116. package/dist/test/resetPendingSegmentsToOp.spec.js +0 -2
  117. package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  118. package/dist/test/segmentGroupCollection.spec.js +10 -4
  119. package/dist/test/segmentGroupCollection.spec.js.map +1 -1
  120. package/dist/test/testClient.d.ts +1 -0
  121. package/dist/test/testClient.d.ts.map +1 -1
  122. package/dist/test/testClient.js +16 -26
  123. package/dist/test/testClient.js.map +1 -1
  124. package/dist/test/testClientLogger.d.ts.map +1 -1
  125. package/dist/test/testClientLogger.js +3 -10
  126. package/dist/test/testClientLogger.js.map +1 -1
  127. package/dist/test/testServer.d.ts +2 -1
  128. package/dist/test/testServer.d.ts.map +1 -1
  129. package/dist/test/testServer.js +7 -5
  130. package/dist/test/testServer.js.map +1 -1
  131. package/dist/test/testUtils.d.ts +36 -56
  132. package/dist/test/testUtils.d.ts.map +1 -1
  133. package/dist/test/testUtils.js +68 -77
  134. package/dist/test/testUtils.js.map +1 -1
  135. package/dist/test/text.d.ts +2 -2
  136. package/dist/test/text.d.ts.map +1 -1
  137. package/dist/test/text.js +5 -2
  138. package/dist/test/text.js.map +1 -1
  139. package/dist/textSegment.d.ts +0 -6
  140. package/dist/textSegment.d.ts.map +1 -1
  141. package/dist/textSegment.js.map +1 -1
  142. package/dist/zamboni.d.ts.map +1 -1
  143. package/dist/zamboni.js +53 -26
  144. package/dist/zamboni.js.map +1 -1
  145. package/lib/MergeTreeTextHelper.d.ts +9 -3
  146. package/lib/MergeTreeTextHelper.d.ts.map +1 -1
  147. package/lib/MergeTreeTextHelper.js +5 -5
  148. package/lib/MergeTreeTextHelper.js.map +1 -1
  149. package/lib/client.d.ts +7 -13
  150. package/lib/client.d.ts.map +1 -1
  151. package/lib/client.js +117 -116
  152. package/lib/client.js.map +1 -1
  153. package/lib/endOfTreeSegment.d.ts +12 -8
  154. package/lib/endOfTreeSegment.d.ts.map +1 -1
  155. package/lib/endOfTreeSegment.js +2 -4
  156. package/lib/endOfTreeSegment.js.map +1 -1
  157. package/lib/index.d.ts +6 -3
  158. package/lib/index.d.ts.map +1 -1
  159. package/lib/index.js +1 -1
  160. package/lib/index.js.map +1 -1
  161. package/lib/mergeTree.d.ts +37 -23
  162. package/lib/mergeTree.d.ts.map +1 -1
  163. package/lib/mergeTree.js +381 -488
  164. package/lib/mergeTree.js.map +1 -1
  165. package/lib/mergeTreeDeltaCallback.d.ts +4 -8
  166. package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
  167. package/lib/mergeTreeDeltaCallback.js.map +1 -1
  168. package/lib/mergeTreeNodes.d.ts +32 -10
  169. package/lib/mergeTreeNodes.d.ts.map +1 -1
  170. package/lib/mergeTreeNodes.js +42 -29
  171. package/lib/mergeTreeNodes.js.map +1 -1
  172. package/lib/partialLengths.d.ts +2 -2
  173. package/lib/partialLengths.d.ts.map +1 -1
  174. package/lib/partialLengths.js +160 -111
  175. package/lib/partialLengths.js.map +1 -1
  176. package/lib/perspective.d.ts +8 -27
  177. package/lib/perspective.d.ts.map +1 -1
  178. package/lib/perspective.js +8 -68
  179. package/lib/perspective.js.map +1 -1
  180. package/lib/revertibles.d.ts.map +1 -1
  181. package/lib/revertibles.js +2 -2
  182. package/lib/revertibles.js.map +1 -1
  183. package/lib/segmentInfos.d.ts +20 -106
  184. package/lib/segmentInfos.d.ts.map +1 -1
  185. package/lib/segmentInfos.js +26 -37
  186. package/lib/segmentInfos.js.map +1 -1
  187. package/lib/segmentPropertiesManager.d.ts +1 -14
  188. package/lib/segmentPropertiesManager.d.ts.map +1 -1
  189. package/lib/segmentPropertiesManager.js +2 -16
  190. package/lib/segmentPropertiesManager.js.map +1 -1
  191. package/lib/snapshotLoader.d.ts.map +1 -1
  192. package/lib/snapshotLoader.js +39 -19
  193. package/lib/snapshotLoader.js.map +1 -1
  194. package/lib/snapshotV1.d.ts.map +1 -1
  195. package/lib/snapshotV1.js +34 -26
  196. package/lib/snapshotV1.js.map +1 -1
  197. package/lib/snapshotlegacy.d.ts.map +1 -1
  198. package/lib/snapshotlegacy.js +7 -10
  199. package/lib/snapshotlegacy.js.map +1 -1
  200. package/lib/stamps.d.ts +1 -1
  201. package/lib/stamps.js +1 -1
  202. package/lib/stamps.js.map +1 -1
  203. package/lib/test/Insertion.perf.spec.js +6 -51
  204. package/lib/test/Insertion.perf.spec.js.map +1 -1
  205. package/lib/test/PartialLengths.perf.spec.js +18 -25
  206. package/lib/test/PartialLengths.perf.spec.js.map +1 -1
  207. package/lib/test/Removal.perf.spec.js +13 -41
  208. package/lib/test/Removal.perf.spec.js.map +1 -1
  209. package/lib/test/beastTest.spec.d.ts.map +1 -1
  210. package/lib/test/beastTest.spec.js +42 -67
  211. package/lib/test/beastTest.spec.js.map +1 -1
  212. package/lib/test/client.annotateMarker.spec.js +1 -11
  213. package/lib/test/client.annotateMarker.spec.js.map +1 -1
  214. package/lib/test/client.applyMsg.spec.js +14 -14
  215. package/lib/test/client.applyMsg.spec.js.map +1 -1
  216. package/lib/test/client.getPosition.spec.js +1 -1
  217. package/lib/test/client.getPosition.spec.js.map +1 -1
  218. package/lib/test/client.localReference.spec.js +1 -1
  219. package/lib/test/client.localReference.spec.js.map +1 -1
  220. package/lib/test/client.rollback.spec.js +50 -59
  221. package/lib/test/client.rollback.spec.js.map +1 -1
  222. package/lib/test/client.rollbackFarm.spec.js +1 -1
  223. package/lib/test/client.rollbackFarm.spec.js.map +1 -1
  224. package/lib/test/client.searchForMarker.spec.js +4 -21
  225. package/lib/test/client.searchForMarker.spec.js.map +1 -1
  226. package/lib/test/index.d.ts +2 -2
  227. package/lib/test/index.d.ts.map +1 -1
  228. package/lib/test/index.js +1 -1
  229. package/lib/test/index.js.map +1 -1
  230. package/lib/test/mergeTree.annotate.deltaCallback.spec.js +15 -60
  231. package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  232. package/lib/test/mergeTree.annotate.spec.js +48 -64
  233. package/lib/test/mergeTree.annotate.spec.js.map +1 -1
  234. package/lib/test/mergeTree.insert.deltaCallback.spec.js +10 -63
  235. package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  236. package/lib/test/mergeTree.insertingWalk.spec.js +61 -127
  237. package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
  238. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +13 -94
  239. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  240. package/lib/test/mergeTree.markRangeRemoved.spec.js +10 -7
  241. package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  242. package/lib/test/mergeTree.walk.spec.js +2 -14
  243. package/lib/test/mergeTree.walk.spec.js.map +1 -1
  244. package/lib/test/mergeTreeOperationRunner.js +3 -3
  245. package/lib/test/mergeTreeOperationRunner.js.map +1 -1
  246. package/lib/test/obliterate.concurrent.spec.js +18 -23
  247. package/lib/test/obliterate.concurrent.spec.js.map +1 -1
  248. package/lib/test/obliterate.partialLength.spec.js +167 -137
  249. package/lib/test/obliterate.partialLength.spec.js.map +1 -1
  250. package/lib/test/obliterate.spec.js +17 -127
  251. package/lib/test/obliterate.spec.js.map +1 -1
  252. package/lib/test/partialLength.spec.js +29 -197
  253. package/lib/test/partialLength.spec.js.map +1 -1
  254. package/lib/test/perspective.spec.js +34 -0
  255. package/lib/test/perspective.spec.js.map +1 -1
  256. package/lib/test/propertyManager.spec.js +2 -2
  257. package/lib/test/propertyManager.spec.js.map +1 -1
  258. package/lib/test/resetPendingSegmentsToOp.spec.js +0 -2
  259. package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  260. package/lib/test/segmentGroupCollection.spec.js +10 -4
  261. package/lib/test/segmentGroupCollection.spec.js.map +1 -1
  262. package/lib/test/testClient.d.ts +1 -0
  263. package/lib/test/testClient.d.ts.map +1 -1
  264. package/lib/test/testClient.js +18 -28
  265. package/lib/test/testClient.js.map +1 -1
  266. package/lib/test/testClientLogger.d.ts.map +1 -1
  267. package/lib/test/testClientLogger.js +3 -10
  268. package/lib/test/testClientLogger.js.map +1 -1
  269. package/lib/test/testServer.d.ts +2 -1
  270. package/lib/test/testServer.d.ts.map +1 -1
  271. package/lib/test/testServer.js +7 -5
  272. package/lib/test/testServer.js.map +1 -1
  273. package/lib/test/testUtils.d.ts +36 -56
  274. package/lib/test/testUtils.d.ts.map +1 -1
  275. package/lib/test/testUtils.js +66 -48
  276. package/lib/test/testUtils.js.map +1 -1
  277. package/lib/test/text.d.ts +2 -2
  278. package/lib/test/text.d.ts.map +1 -1
  279. package/lib/test/text.js +6 -3
  280. package/lib/test/text.js.map +1 -1
  281. package/lib/textSegment.d.ts +0 -6
  282. package/lib/textSegment.d.ts.map +1 -1
  283. package/lib/textSegment.js.map +1 -1
  284. package/lib/tsdoc-metadata.json +1 -1
  285. package/lib/zamboni.d.ts.map +1 -1
  286. package/lib/zamboni.js +32 -28
  287. package/lib/zamboni.js.map +1 -1
  288. package/package.json +17 -20
  289. package/src/MergeTreeTextHelper.ts +17 -12
  290. package/src/client.ts +141 -197
  291. package/src/endOfTreeSegment.ts +11 -8
  292. package/src/index.ts +4 -3
  293. package/src/mergeTree.ts +482 -633
  294. package/src/mergeTreeDeltaCallback.ts +4 -8
  295. package/src/mergeTreeNodes.ts +66 -45
  296. package/src/partialLengths.ts +181 -137
  297. package/src/perspective.ts +17 -95
  298. package/src/revertibles.ts +2 -7
  299. package/src/segmentInfos.ts +48 -141
  300. package/src/segmentPropertiesManager.ts +2 -16
  301. package/src/snapshotLoader.ts +62 -30
  302. package/src/snapshotV1.ts +36 -28
  303. package/src/snapshotlegacy.ts +7 -16
  304. package/src/stamps.ts +1 -1
  305. package/src/textSegment.ts +0 -13
  306. package/src/zamboni.ts +38 -32
  307. package/tsconfig.json +1 -0
  308. package/prettier.config.cjs +0 -8
@@ -186,6 +186,7 @@ export type IMergeTreeDeltaOp = IMergeTreeInsertMsg | IMergeTreeRemoveMsg | IMer
186
186
  export interface IMergeTreeDeltaOpArgs {
187
187
  readonly groupOp?: IMergeTreeGroupMsg;
188
188
  readonly op: IMergeTreeOp;
189
+ readonly rollback?: true;
189
190
  readonly sequencedMessage?: ISequencedDocumentMessage;
190
191
  }
191
192
 
@@ -2,12 +2,18 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { MergeTree } from "./mergeTree.js";
6
- import { IMergeTreeTextHelper } from "./textSegment.js";
5
+ import type { MergeTree } from "./mergeTree.js";
6
+ import type { Perspective } from "./perspective.js";
7
+ /**
8
+ * @internal
9
+ */
10
+ export interface IMergeTreeTextHelper {
11
+ getText(perspective: Perspective, placeholder: string, start?: number, end?: number): string;
12
+ }
7
13
  export declare class MergeTreeTextHelper implements IMergeTreeTextHelper {
8
14
  private readonly mergeTree;
9
15
  constructor(mergeTree: MergeTree);
10
- getText(refSeq: number, clientId: number, placeholder?: string, start?: number, end?: number): string;
16
+ getText(perspective: Perspective, placeholder?: string, start?: number, end?: number): string;
11
17
  private getValidRange;
12
18
  }
13
19
  //# sourceMappingURL=MergeTreeTextHelper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MergeTreeTextHelper.d.ts","sourceRoot":"","sources":["../src/MergeTreeTextHelper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAe,MAAM,kBAAkB,CAAC;AAQrE,qBAAa,mBAAoB,YAAW,oBAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAE1C,OAAO,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAK,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,GACV,MAAM;IAgBT,OAAO,CAAC,aAAa;CAYrB"}
1
+ {"version":3,"file":"MergeTreeTextHelper.d.ts","sourceRoot":"","sources":["../src/MergeTreeTextHelper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AASpD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7F;AAED,qBAAa,mBAAoB,YAAW,oBAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAE1C,OAAO,CACb,WAAW,EAAE,WAAW,EACxB,WAAW,SAAK,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,GACV,MAAM;IAeT,OAAO,CAAC,aAAa;CAWrB"}
@@ -10,15 +10,15 @@ class MergeTreeTextHelper {
10
10
  constructor(mergeTree) {
11
11
  this.mergeTree = mergeTree;
12
12
  }
13
- getText(refSeq, clientId, placeholder = "", start, end) {
14
- const range = this.getValidRange(start, end, refSeq, clientId);
13
+ getText(perspective, placeholder = "", start, end) {
14
+ const range = this.getValidRange(start, end, perspective);
15
15
  const accum = { textSegment: new textSegment_js_1.TextSegment(""), placeholder };
16
- this.mergeTree.mapRange(gatherText, refSeq, clientId, accum, range.start, range.end);
16
+ this.mergeTree.mapRange(gatherText, perspective, accum, range.start, range.end);
17
17
  return accum.textSegment.text;
18
18
  }
19
- getValidRange(start, end, refSeq, clientId) {
19
+ getValidRange(start, end, perspective) {
20
20
  const range = {
21
- end: end ?? this.mergeTree.getLength(refSeq, clientId),
21
+ end: end ?? this.mergeTree.getLength(perspective),
22
22
  start: start ?? 0,
23
23
  };
24
24
  return range;
@@ -1 +1 @@
1
- {"version":3,"file":"MergeTreeTextHelper.js","sourceRoot":"","sources":["../src/MergeTreeTextHelper.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH,qDAAqE;AAQrE,MAAa,mBAAmB;IAC/B,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE9C,OAAO,CACb,MAAc,EACd,QAAgB,EAChB,WAAW,GAAG,EAAE,EAChB,KAAc,EACd,GAAY;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE/D,MAAM,KAAK,GAAqB,EAAE,WAAW,EAAE,IAAI,4BAAW,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;QAElF,IAAI,CAAC,SAAS,CAAC,QAAQ,CACtB,UAAU,EACV,MAAM,EACN,QAAQ,EACR,KAAK,EACL,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,CACT,CAAC;QACF,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAEO,aAAa,CACpB,KAAyB,EACzB,GAAuB,EACvB,MAAc,EACd,QAAgB;QAEhB,MAAM,KAAK,GAAkB;YAC5B,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;YACtD,KAAK,EAAE,KAAK,IAAI,CAAC;SACjB,CAAC;QACF,OAAO,KAAK,CAAC;IACd,CAAC;CACD;AArCD,kDAqCC;AAED,SAAS,UAAU,CAClB,OAAwB,EACxB,GAAW,EACX,MAAc,EACd,QAAgB,EAChB,KAAa,EACb,GAAW,EACX,EAAE,WAAW,EAAE,WAAW,EAAoB;IAE9C,IAAI,4BAAW,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9C,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;QAClC,CAAC;aAAM,CAAC;YACP,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACrC,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7C,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;IACF,CAAC;SAAM,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,eAAe;QACpB,gEAAgE;QAChE,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjF,WAAW,CAAC,IAAI,IAAI,eAAe,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IIntegerRange } from \"./client.js\";\nimport { MergeTree } from \"./mergeTree.js\";\nimport { ISegmentPrivate } from \"./mergeTreeNodes.js\";\nimport { IMergeTreeTextHelper, TextSegment } from \"./textSegment.js\";\n\ninterface ITextAccumulator {\n\ttextSegment: TextSegment;\n\tplaceholder?: string;\n\tparallelArrays?: boolean;\n}\n\nexport class MergeTreeTextHelper implements IMergeTreeTextHelper {\n\tconstructor(private readonly mergeTree: MergeTree) {}\n\n\tpublic getText(\n\t\trefSeq: number,\n\t\tclientId: number,\n\t\tplaceholder = \"\",\n\t\tstart?: number,\n\t\tend?: number,\n\t): string {\n\t\tconst range = this.getValidRange(start, end, refSeq, clientId);\n\n\t\tconst accum: ITextAccumulator = { textSegment: new TextSegment(\"\"), placeholder };\n\n\t\tthis.mergeTree.mapRange<ITextAccumulator>(\n\t\t\tgatherText,\n\t\t\trefSeq,\n\t\t\tclientId,\n\t\t\taccum,\n\t\t\trange.start,\n\t\t\trange.end,\n\t\t);\n\t\treturn accum.textSegment.text;\n\t}\n\n\tprivate getValidRange(\n\t\tstart: number | undefined,\n\t\tend: number | undefined,\n\t\trefSeq: number,\n\t\tclientId: number,\n\t): IIntegerRange {\n\t\tconst range: IIntegerRange = {\n\t\t\tend: end ?? this.mergeTree.getLength(refSeq, clientId),\n\t\t\tstart: start ?? 0,\n\t\t};\n\t\treturn range;\n\t}\n}\n\nfunction gatherText(\n\tsegment: ISegmentPrivate,\n\tpos: number,\n\trefSeq: number,\n\tclientId: number,\n\tstart: number,\n\tend: number,\n\t{ textSegment, placeholder }: ITextAccumulator,\n): boolean {\n\tif (TextSegment.is(segment)) {\n\t\tif (start <= 0 && end >= segment.text.length) {\n\t\t\ttextSegment.text += segment.text;\n\t\t} else {\n\t\t\tconst seglen = segment.text.length;\n\t\t\tconst _start = start < 0 ? 0 : start;\n\t\t\tconst _end = end >= seglen ? undefined : end;\n\t\t\ttextSegment.text += segment.text.slice(_start, _end);\n\t\t}\n\t} else if (placeholder && placeholder.length > 0) {\n\t\tconst placeholderText =\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\t\tplaceholder === \"*\" ? `\\n${segment}` : placeholder.repeat(segment.cachedLength);\n\t\ttextSegment.text += placeholderText;\n\t}\n\n\treturn true;\n}\n"]}
1
+ {"version":3,"file":"MergeTreeTextHelper.js","sourceRoot":"","sources":["../src/MergeTreeTextHelper.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAMH,qDAA+C;AAe/C,MAAa,mBAAmB;IAC/B,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE9C,OAAO,CACb,WAAwB,EACxB,WAAW,GAAG,EAAE,EAChB,KAAc,EACd,GAAY;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAqB,EAAE,WAAW,EAAE,IAAI,4BAAW,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;QAElF,IAAI,CAAC,SAAS,CAAC,QAAQ,CACtB,UAAU,EACV,WAAW,EACX,KAAK,EACL,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,CACT,CAAC;QACF,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAEO,aAAa,CACpB,KAAyB,EACzB,GAAuB,EACvB,WAAwB;QAExB,MAAM,KAAK,GAAkB;YAC5B,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC;YACjD,KAAK,EAAE,KAAK,IAAI,CAAC;SACjB,CAAC;QACF,OAAO,KAAK,CAAC;IACd,CAAC;CACD;AAlCD,kDAkCC;AAED,SAAS,UAAU,CAClB,OAAwB,EACxB,GAAW,EACX,MAAc,EACd,QAAgB,EAChB,KAAa,EACb,GAAW,EACX,EAAE,WAAW,EAAE,WAAW,EAAoB;IAE9C,IAAI,4BAAW,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9C,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;QAClC,CAAC;aAAM,CAAC;YACP,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACrC,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7C,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;IACF,CAAC;SAAM,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,eAAe;QACpB,gEAAgE;QAChE,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACjF,WAAW,CAAC,IAAI,IAAI,eAAe,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IIntegerRange } from \"./client.js\";\nimport type { MergeTree } from \"./mergeTree.js\";\nimport type { ISegmentPrivate } from \"./mergeTreeNodes.js\";\nimport type { Perspective } from \"./perspective.js\";\nimport { TextSegment } from \"./textSegment.js\";\n\ninterface ITextAccumulator {\n\ttextSegment: TextSegment;\n\tplaceholder?: string;\n\tparallelArrays?: boolean;\n}\n\n/**\n * @internal\n */\nexport interface IMergeTreeTextHelper {\n\tgetText(perspective: Perspective, placeholder: string, start?: number, end?: number): string;\n}\n\nexport class MergeTreeTextHelper implements IMergeTreeTextHelper {\n\tconstructor(private readonly mergeTree: MergeTree) {}\n\n\tpublic getText(\n\t\tperspective: Perspective,\n\t\tplaceholder = \"\",\n\t\tstart?: number,\n\t\tend?: number,\n\t): string {\n\t\tconst range = this.getValidRange(start, end, perspective);\n\n\t\tconst accum: ITextAccumulator = { textSegment: new TextSegment(\"\"), placeholder };\n\n\t\tthis.mergeTree.mapRange<ITextAccumulator>(\n\t\t\tgatherText,\n\t\t\tperspective,\n\t\t\taccum,\n\t\t\trange.start,\n\t\t\trange.end,\n\t\t);\n\t\treturn accum.textSegment.text;\n\t}\n\n\tprivate getValidRange(\n\t\tstart: number | undefined,\n\t\tend: number | undefined,\n\t\tperspective: Perspective,\n\t): IIntegerRange {\n\t\tconst range: IIntegerRange = {\n\t\t\tend: end ?? this.mergeTree.getLength(perspective),\n\t\t\tstart: start ?? 0,\n\t\t};\n\t\treturn range;\n\t}\n}\n\nfunction gatherText(\n\tsegment: ISegmentPrivate,\n\tpos: number,\n\trefSeq: number,\n\tclientId: number,\n\tstart: number,\n\tend: number,\n\t{ textSegment, placeholder }: ITextAccumulator,\n): boolean {\n\tif (TextSegment.is(segment)) {\n\t\tif (start <= 0 && end >= segment.text.length) {\n\t\t\ttextSegment.text += segment.text;\n\t\t} else {\n\t\t\tconst seglen = segment.text.length;\n\t\t\tconst _start = start < 0 ? 0 : start;\n\t\t\tconst _end = end >= seglen ? undefined : end;\n\t\t\ttextSegment.text += segment.text.slice(_start, _end);\n\t\t}\n\t} else if (placeholder && placeholder.length > 0) {\n\t\tconst placeholderText =\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\t\tplaceholder === \"*\" ? `\\n${segment}` : placeholder.repeat(segment.cachedLength);\n\t\ttextSegment.text += placeholderText;\n\t}\n\n\treturn true;\n}\n"]}
package/dist/client.d.ts CHANGED
@@ -9,6 +9,7 @@ import { ISequencedDocumentMessage } from "@fluidframework/driver-definitions/in
9
9
  import { ISummaryTreeWithStats } from "@fluidframework/runtime-definitions/internal";
10
10
  import { IFluidSerializer } from "@fluidframework/shared-object-base/internal";
11
11
  import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
12
+ import { type IMergeTreeTextHelper } from "./MergeTreeTextHelper.js";
12
13
  import { LocalReferencePosition, SlidingPreference } from "./localReference.js";
13
14
  import { type IMergeTreeOptionsInternal } from "./mergeTree.js";
14
15
  import type { IMergeTreeDeltaCallbackArgs, IMergeTreeDeltaOpArgs, IMergeTreeMaintenanceCallbackArgs } from "./mergeTreeDeltaCallback.js";
@@ -17,7 +18,6 @@ import { IJSONSegment, IMergeTreeAnnotateMsg, IMergeTreeGroupMsg, IMergeTreeInse
17
18
  import { PropertySet, type MapLike } from "./properties.js";
18
19
  import { ReferencePosition } from "./referencePositions.js";
19
20
  import { type InteriorSequencePlace } from "./sequencePlace.js";
20
- import { IMergeTreeTextHelper } from "./textSegment.js";
21
21
  /**
22
22
  * A range [start, end)
23
23
  * @internal
@@ -175,8 +175,13 @@ export declare class Client extends TypedEventEmitter<IClientEvents> {
175
175
  /**
176
176
  * Revert an op
177
177
  */
178
- rollback?(op: unknown, localOpMetadata: unknown): void;
178
+ rollback(op: unknown, localOpMetadata: unknown): void;
179
179
  private applyObliterateRangeOp;
180
+ private getOperationPerspective;
181
+ /**
182
+ * Returns the operation stamp to apply for a change, minting a new one local one if necessary.
183
+ */
184
+ private getOperationStamp;
180
185
  /**
181
186
  * Performs the remove based on the provided op
182
187
  * @param opArgs - The ops args for the op
@@ -206,16 +211,6 @@ export declare class Client extends TypedEventEmitter<IClientEvents> {
206
211
  * @param clientArgs - The client args for the op
207
212
  */
208
213
  private getValidOpRange;
209
- /**
210
- * Gets the client args from the op if remote, otherwise uses the local clients info
211
- * @param sequencedMessage - The sequencedMessage to get the client sequence args for
212
- */
213
- private getClientSequenceArgsForMessage;
214
- /**
215
- * Gets the client args from the op if remote, otherwise uses the local clients info
216
- * @param opArgs - The op arg to get the client sequence args for
217
- */
218
- private getClientSequenceArgs;
219
214
  private ackPendingSegment;
220
215
  getOrAddShortClientId(longClientId: string): number;
221
216
  protected getShortClientId(longClientId: string): number;
@@ -260,7 +255,6 @@ export declare class Client extends TypedEventEmitter<IClientEvents> {
260
255
  load(runtime: IFluidDataStoreRuntime, storage: IChannelStorageService, serializer: IFluidSerializer): Promise<{
261
256
  catchupOpsP: Promise<ISequencedDocumentMessage[]>;
262
257
  }>;
263
- private getLocalSequenceNumber;
264
258
  localTransaction(groupOp: IMergeTreeGroupMsg): void;
265
259
  updateMinSeq(minSeq: number): void;
266
260
  getContainingSegment<T extends ISegment>(pos: number, sequenceArgs?: Pick<ISequencedDocumentMessage, "referenceSequenceNumber" | "clientId">, localSeq?: number): {
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,KAAK,qBAAqB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,EACN,sBAAsB,EACtB,sBAAsB,EACtB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAEN,yBAAyB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EACN,mBAAmB,EAGnB,MAAM,0CAA0C,CAAC;AASlD,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAGN,KAAK,yBAAyB,EAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAEX,2BAA2B,EAC3B,qBAAqB,EACrB,iCAAiC,EACjC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACN,mBAAmB,EACnB,QAAQ,EACR,cAAc,EAEd,MAAM,EAIN,MAAM,qBAAqB,CAAC;AAY7B,OAAO,EACN,YAAY,EACZ,qBAAqB,EAGrB,kBAAkB,EAClB,mBAAmB,EAEnB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAEjB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAA6B,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AASvF,OAAO,EAAQ,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAItE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAKxD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9E,CACC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CACT,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,2BAA2B,EACtC,MAAM,EAAE,qBAAqB,KACzB,IAAI,GACP,IAAI,CAAC;IACR,CACC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,CACT,IAAI,EAAE,iCAAiC,EACvC,SAAS,EAAE,qBAAqB,GAAG,SAAS,EAC5C,MAAM,EAAE,qBAAqB,KACzB,IAAI,GACP,IAAI,CAAC;CACR;AAID;;;;;;;GAOG;AACH,qBAAa,MAAO,SAAQ,iBAAiB,CAAC,aAAa,CAAC;aAwB1C,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ;aAC/C,MAAM,EAAE,mBAAmB;IAE3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IA1B/B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IAEvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoD;IACpF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IAEjD;;;;;;;;;;;;;;OAcG;gBAEc,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ,EAC/C,MAAM,EAAE,mBAAmB,EAC3C,OAAO,CAAC,EAAE,yBAAyB,GAAG,WAAW,EAChC,oBAAoB,GAAE,MAAM,MAAM,GAAG,SAC5C;IAsBX;;;;;;OAMG;IAEI,wBAAwB,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO;IAe3D;;;;;OAKG;IACI,cAAc,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,GAChB,qBAAqB,GAAG,SAAS;IAMpC;;;;;;OAMG;IACI,kBAAkB,CACxB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,WAAW,GAChB,qBAAqB,GAAG,SAAS;IAMpC;;OAEG;IACI,wBAAwB,CAC9B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3B,2BAA2B;IAa9B;;;;;OAKG;IACI,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB;IAMxE;;;;;;;OAOG;IACI,oBAAoB,CAC1B,KAAK,EAAE,MAAM,GAAG,qBAAqB,EACrC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAEjC,uBAAuB,GAAG,4BAA4B;IAgBzD;;;;OAIG;IACI,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,mBAAmB,GAAG,SAAS;IAS1F;;;;OAIG;IACI,8BAA8B,CACpC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,QAAQ,GACf,mBAAmB,GAAG,SAAS;IAa3B,YAAY,CAAC,WAAW,EAC9B,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,EACpC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,WAAW,EAClB,UAAU,CAAC,EAAE,OAAO,GAClB,IAAI;IACA,YAAY,CAClB,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,EAClC,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,SAAS,EACjB,UAAU,CAAC,EAAE,OAAO,GAClB,IAAI;IAmBP,SAAS,CAAC,eAAe,CAAC,WAAW,EACpC,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,WAAW,KAAK,OAAO,EAC3D,KAAK,CAAC,EAAE,WAAW,GACjB,OAAO;IAOV;;;;OAIG;IACI,eAAe,CACrB,MAAM,EAAE,YAAY,EACpB,0BAA0B,EAAE,gBAAgB,GAC1C,IAAI;IA0BA,eAAe,IAAI,mBAAmB;IAI7C;;;;OAIG;IACI,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAY5E;;;;;;;;;;OAUG;IACI,4BAA4B,CAClC,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,EACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,kBAAkB,CAAC,EAAE,OAAO,GAC1B,sBAAsB;IAczB;;OAEG;IACI,4BAA4B,CAClC,IAAI,EAAE,sBAAsB,GAC1B,sBAAsB,GAAG,SAAS;IAIrC;;;;;;;OAOG;IACI,gCAAgC,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM;IAIxE;;;;OAIG;IACI,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,GAAG,MAAM;IAI1D,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIxD;;OAEG;IACI,QAAQ,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAI7D,OAAO,CAAC,sBAAsB;IAmC9B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAsBrB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAyE1B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IA4EvB;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IA2BvC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,iBAAiB;IAczB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAOnD,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIxD,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAI9C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAK3C,OAAO,CAAC,gCAAgC;IAMxC;;;;;;;;OAQG;IACI,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAY5E,OAAO,CAAC,sBAAsB;IAgM9B,OAAO,CAAC,aAAa;IAsCd,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IA6BtC,QAAQ,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,GAAE,OAAe,GAAG,IAAI;IAuB7E,OAAO,CAAC,gBAAgB;IAYxB;;;;;;;OAOG;IACI,2BAA2B,CACjC,oBAAoB,EAAE,MAAM,EAC5B,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,GACpB,MAAM,GAAG,SAAS;IASrB,OAAO,CAAC,uBAAuB,CAAK;IAEpC,OAAO,CAAC,aAAa,CAA6C;IAElE;;;;;OAKG;IACI,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,OAAO,GAAG,YAAY;IAkElF,gBAAgB,IAAI,oBAAoB;IAIxC,SAAS,CACf,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,gBAAgB,EAC5B,WAAW,EAAE,yBAAyB,EAAE,GACtC,qBAAqB;IAoCX,IAAI,CAChB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,gBAAgB,GAC1B,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAA;KAAE,CAAC;IAMjE,OAAO,CAAC,sBAAsB;IAM9B,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IA+BnD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC,oBAAoB,CAAC,CAAC,SAAS,QAAQ,EACtC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,yBAAyB,GAAG,UAAU,CAAC,EACtF,QAAQ,CAAC,EAAE,MAAM,GACf;QACF,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;QACvB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B;IAcD,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAU7D,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG;QACvC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC;IAaD,aAAa,IAAI,MAAM;IAIvB,WAAW,IAAI,MAAM;IAIrB,SAAS,IAAI,MAAM;IAInB,0BAA0B,CACzB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,MAAM,SAAI,EACV,UAAU,SAAI,GACZ,IAAI;IAyBP;;;;;;;;OAQG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,MAAM,GAAG,SAAS;CAI3F"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,KAAK,qBAAqB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,EACN,sBAAsB,EACtB,sBAAsB,EACtB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAEN,yBAAyB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EACN,mBAAmB,EAGnB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAG1F,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAIN,KAAK,yBAAyB,EAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACX,2BAA2B,EAC3B,qBAAqB,EACrB,iCAAiC,EACjC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACN,mBAAmB,EACnB,QAAQ,EACR,cAAc,EAEd,MAAM,EAIN,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EACN,YAAY,EACZ,qBAAqB,EAGrB,kBAAkB,EAClB,mBAAmB,EAEnB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAEjB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,MAAM,UAAU,CAAC;AAMlB,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAA6B,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAQvF,OAAO,EAAQ,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAUtE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9E,CACC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CACT,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,2BAA2B,EACtC,MAAM,EAAE,qBAAqB,KACzB,IAAI,GACP,IAAI,CAAC;IACR,CACC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,CACT,IAAI,EAAE,iCAAiC,EACvC,SAAS,EAAE,qBAAqB,GAAG,SAAS,EAC5C,MAAM,EAAE,qBAAqB,KACzB,IAAI,GACP,IAAI,CAAC;CACR;AAID;;;;;;;GAOG;AACH,qBAAa,MAAO,SAAQ,iBAAiB,CAAC,aAAa,CAAC;aAwB1C,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ;aAC/C,MAAM,EAAE,mBAAmB;IAE3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IA1B/B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IAEvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoD;IACpF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IAEjD;;;;;;;;;;;;;;OAcG;gBAEc,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ,EAC/C,MAAM,EAAE,mBAAmB,EAC3C,OAAO,CAAC,EAAE,yBAAyB,GAAG,WAAW,EAChC,oBAAoB,GAAE,MAAM,MAAM,GAAG,SAC5C;IAsBX;;;;;;OAMG;IAEI,wBAAwB,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO;IAe3D;;;;;OAKG;IACI,cAAc,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,GAChB,qBAAqB,GAAG,SAAS;IAMpC;;;;;;OAMG;IACI,kBAAkB,CACxB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,WAAW,GAChB,qBAAqB,GAAG,SAAS;IAMpC;;OAEG;IACI,wBAAwB,CAC9B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3B,2BAA2B;IAa9B;;;;;OAKG;IACI,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB;IAMxE;;;;;;;OAOG;IACI,oBAAoB,CAC1B,KAAK,EAAE,MAAM,GAAG,qBAAqB,EACrC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAEjC,uBAAuB,GAAG,4BAA4B;IAgBzD;;;;OAIG;IACI,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,mBAAmB,GAAG,SAAS;IAS1F;;;;OAIG;IACI,8BAA8B,CACpC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,QAAQ,GACf,mBAAmB,GAAG,SAAS;IAa3B,YAAY,CAAC,WAAW,EAC9B,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,EACpC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,WAAW,EAClB,UAAU,CAAC,EAAE,OAAO,GAClB,IAAI;IACA,YAAY,CAClB,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,EAClC,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,SAAS,EACjB,UAAU,CAAC,EAAE,OAAO,GAClB,IAAI;IAkBP,SAAS,CAAC,eAAe,CAAC,WAAW,EACpC,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,WAAW,KAAK,OAAO,EAC3D,KAAK,CAAC,EAAE,WAAW,GACjB,OAAO;IAOV;;;;OAIG;IACI,eAAe,CACrB,MAAM,EAAE,YAAY,EACpB,0BAA0B,EAAE,gBAAgB,GAC1C,IAAI;IAgCA,eAAe,IAAI,mBAAmB;IAI7C;;;;OAIG;IACI,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAY5E;;;;;;;;;;OAUG;IACI,4BAA4B,CAClC,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,EACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,kBAAkB,CAAC,EAAE,OAAO,GAC1B,sBAAsB;IAczB;;OAEG;IACI,4BAA4B,CAClC,IAAI,EAAE,sBAAsB,GAC1B,sBAAsB,GAAG,SAAS;IAIrC;;;;;;;OAOG;IACI,gCAAgC,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM;IAIxE;;;;OAIG;IACI,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,GAAG,MAAM;IAI1D,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIxD;;OAEG;IACI,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAI5D,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,uBAAuB;IAY/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAsE1B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAoEvB,OAAO,CAAC,iBAAiB;IAczB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAOnD,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIxD,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAI9C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAK3C,OAAO,CAAC,gCAAgC;IAMxC;;;;;;;;OAQG;IACI,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAa5E,OAAO,CAAC,sBAAsB;IAoL9B,OAAO,CAAC,aAAa;IAsCd,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IA6BtC,QAAQ,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,GAAE,OAAe,GAAG,IAAI;IAuB7E,OAAO,CAAC,gBAAgB;IAYxB;;;;;;;OAOG;IACI,2BAA2B,CACjC,oBAAoB,EAAE,MAAM,EAC5B,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,GACpB,MAAM,GAAG,SAAS;IASrB,OAAO,CAAC,uBAAuB,CAAK;IAEpC,OAAO,CAAC,aAAa,CAA6C;IAElE;;;;;OAKG;IACI,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,OAAO,GAAG,YAAY;IAkElF,gBAAgB,IAAI,oBAAoB;IAIxC,SAAS,CACf,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,gBAAgB,EAC5B,WAAW,EAAE,yBAAyB,EAAE,GACtC,qBAAqB;IAoCX,IAAI,CAChB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,gBAAgB,GAC1B,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAA;KAAE,CAAC;IAOjE,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IA+BnD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC,oBAAoB,CAAC,CAAC,SAAS,QAAQ,EACtC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,yBAAyB,GAAG,UAAU,CAAC,EACtF,QAAQ,CAAC,EAAE,MAAM,GACf;QACF,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;QACvB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;KAC3B;IAqBD,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAU7D,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG;QACvC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC;IAaD,aAAa,IAAI,MAAM;IAIvB,WAAW,IAAI,MAAM;IAIrB,SAAS,IAAI,MAAM;IAInB,0BAA0B,CACzB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,MAAM,SAAI,EACV,UAAU,SAAI,GACZ,IAAI;IAyBP;;;;;;;;OAQG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,MAAM,GAAG,SAAS;CAG3F"}
package/dist/client.js CHANGED
@@ -3,6 +3,29 @@
3
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
4
  * Licensed under the MIT License.
5
5
  */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
6
29
  Object.defineProperty(exports, "__esModule", { value: true });
7
30
  exports.Client = void 0;
8
31
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
@@ -19,12 +42,14 @@ const mergeTreeNodeWalk_js_1 = require("./mergeTreeNodeWalk.js");
19
42
  const mergeTreeNodes_js_1 = require("./mergeTreeNodes.js");
20
43
  const opBuilder_js_1 = require("./opBuilder.js");
21
44
  const ops_js_1 = require("./ops.js");
45
+ const perspective_js_1 = require("./perspective.js");
22
46
  const referencePositions_js_1 = require("./referencePositions.js");
23
47
  const segmentInfos_js_1 = require("./segmentInfos.js");
24
48
  const sequencePlace_js_1 = require("./sequencePlace.js");
25
49
  const snapshotLoader_js_1 = require("./snapshotLoader.js");
26
50
  const snapshotV1_js_1 = require("./snapshotV1.js");
27
51
  const snapshotlegacy_js_1 = require("./snapshotlegacy.js");
52
+ const opstampUtils = __importStar(require("./stamps.js"));
28
53
  const UNBOUND_SEGMENT_ERROR = "The provided segment is not bound to this DDS.";
29
54
  /**
30
55
  * This class encapsulates a merge-tree, and provides a local client specific view over it and
@@ -187,7 +212,7 @@ class Client extends client_utils_1.TypedEventEmitter {
187
212
  return this.insertSegmentLocal(pos, segment);
188
213
  }
189
214
  walkSegments(handler, start, end, accum, splitRange = false) {
190
- this._mergeTree.mapRange(handler, this.getCurrentSeq(), this.getClientId(), accum, start, end, splitRange);
215
+ this._mergeTree.mapRange(handler, this._mergeTree.localPerspective, accum, start, end, splitRange);
191
216
  }
192
217
  walkAllSegments(action, accum) {
193
218
  return (0, mergeTreeNodeWalk_js_1.walkAllChildSegments)(this._mergeTree.root, accum === undefined ? action : (seg) => action(seg, accum));
@@ -200,12 +225,18 @@ class Client extends client_utils_1.TypedEventEmitter {
200
225
  serializeGCData(handle, handleCollectingSerializer) {
201
226
  let localInserts = 0;
202
227
  let localRemoves = 0;
228
+ let localObliterates = 0;
203
229
  (0, mergeTreeNodeWalk_js_1.walkAllChildSegments)(this._mergeTree.root, (seg) => {
204
- if ((0, segmentInfos_js_1.isInserted)(seg) && seg.seq === constants_js_1.UnassignedSequenceNumber) {
230
+ if ((0, segmentInfos_js_1.isInserted)(seg) && opstampUtils.isLocal(seg.insert)) {
205
231
  localInserts++;
206
232
  }
207
- if ((0, segmentInfos_js_1.isRemoved)(seg) && seg.removedSeq === constants_js_1.UnassignedSequenceNumber) {
208
- localRemoves++;
233
+ if ((0, segmentInfos_js_1.isRemoved)(seg) && opstampUtils.isLocal(seg.removes[seg.removes.length - 1])) {
234
+ if (seg.removes[seg.removes.length - 1].type === "setRemove") {
235
+ localRemoves++;
236
+ }
237
+ else {
238
+ localObliterates++;
239
+ }
209
240
  }
210
241
  // Only serialize segments that have not been removed.
211
242
  if (!(0, segmentInfos_js_1.isRemoved)(seg)) {
@@ -218,6 +249,7 @@ class Client extends client_utils_1.TypedEventEmitter {
218
249
  eventName: "LocalEditsInProcessGCData",
219
250
  localInserts,
220
251
  localRemoves,
252
+ localObliterates,
221
253
  });
222
254
  }
223
255
  }
@@ -233,7 +265,10 @@ class Client extends client_utils_1.TypedEventEmitter {
233
265
  if (!(0, mergeTreeNodes_js_1.isSegmentLeaf)(segment)) {
234
266
  return -1;
235
267
  }
236
- return this._mergeTree.getPosition(segment, this.getCurrentSeq(), this.getClientId(), localSeq);
268
+ const perspective = localSeq === undefined
269
+ ? this._mergeTree.localPerspective
270
+ : new perspective_js_1.LocalReconnectingPerspective(this.getCurrentSeq(), this.getClientId(), localSeq);
271
+ return this._mergeTree.getPosition(segment, perspective);
237
272
  }
238
273
  /**
239
274
  * Creates a `LocalReferencePosition` on this client. If the refType does not include ReferenceType.Transient,
@@ -275,7 +310,7 @@ class Client extends client_utils_1.TypedEventEmitter {
275
310
  * @param relativePos - Id of marker (may be indirect) and whether position is before or after marker.
276
311
  */
277
312
  posFromRelativePos(relativePos) {
278
- return this._mergeTree.posFromRelativePos(relativePos);
313
+ return this._mergeTree.posFromRelativePos(relativePos, this._mergeTree.localPerspective);
279
314
  }
280
315
  getMarkerFromId(id) {
281
316
  return this._mergeTree.getMarkerFromId(id);
@@ -287,41 +322,66 @@ class Client extends client_utils_1.TypedEventEmitter {
287
322
  this._mergeTree.rollback(op, localOpMetadata);
288
323
  }
289
324
  applyObliterateRangeOp(opArgs) {
290
- (0, internal_1.assert)(opArgs.op.type === ops_js_1.MergeTreeDeltaType.OBLITERATE ||
291
- opArgs.op.type === ops_js_1.MergeTreeDeltaType.OBLITERATE_SIDED, 0x866 /* Unexpected op type on range obliterate! */);
292
- const op = opArgs.op;
293
- const clientArgs = this.getClientSequenceArgs(opArgs);
325
+ const { op, sequencedMessage } = opArgs;
326
+ (0, internal_1.assert)(op.type === ops_js_1.MergeTreeDeltaType.OBLITERATE ||
327
+ op.type === ops_js_1.MergeTreeDeltaType.OBLITERATE_SIDED, 0x866 /* Unexpected op type on range obliterate! */);
328
+ const perspective = this.getOperationPerspective(sequencedMessage);
329
+ const stamp = this.getOperationStamp(sequencedMessage);
294
330
  if (this._mergeTree.options?.mergeTreeEnableSidedObliterate) {
295
- const { start, end } = this.getValidSidedRange(op, clientArgs);
296
- this._mergeTree.obliterateRange(start, end, clientArgs.referenceSequenceNumber, clientArgs.clientId, clientArgs.sequenceNumber, opArgs);
331
+ const { start, end } = this.getValidSidedRange(op, perspective);
332
+ this._mergeTree.obliterateRange(start, end, perspective, stamp, opArgs);
297
333
  }
298
334
  else {
299
335
  (0, internal_1.assert)(op.type === ops_js_1.MergeTreeDeltaType.OBLITERATE, 0xa43 /* Unexpected sided obliterate while mergeTreeEnableSidedObliterate is disabled */);
300
- const range = this.getValidOpRange(op, clientArgs);
301
- this._mergeTree.obliterateRange(range.start, range.end, clientArgs.referenceSequenceNumber, clientArgs.clientId, clientArgs.sequenceNumber, opArgs);
336
+ const { start, end } = this.getValidOpRange(op, perspective);
337
+ this._mergeTree.obliterateRange(start, end, perspective, stamp, opArgs);
302
338
  }
303
339
  }
340
+ getOperationPerspective(sequencedMessage) {
341
+ if (!sequencedMessage) {
342
+ return this._mergeTree.localPerspective;
343
+ }
344
+ const clientId = this.getOrAddShortClientIdFromMessage(sequencedMessage);
345
+ const { referenceSequenceNumber: refSeq } = sequencedMessage;
346
+ return new perspective_js_1.PriorPerspective(refSeq, clientId);
347
+ }
348
+ /**
349
+ * Returns the operation stamp to apply for a change, minting a new one local one if necessary.
350
+ */
351
+ getOperationStamp(sequencedMessage) {
352
+ if (!sequencedMessage) {
353
+ return this.getCollabWindow().mintNextLocalOperationStamp();
354
+ }
355
+ const { sequenceNumber: seq } = sequencedMessage;
356
+ const clientId = this.getOrAddShortClientIdFromMessage(sequencedMessage);
357
+ return {
358
+ seq,
359
+ clientId,
360
+ };
361
+ }
304
362
  /**
305
363
  * Performs the remove based on the provided op
306
364
  * @param opArgs - The ops args for the op
307
365
  */
308
366
  applyRemoveRangeOp(opArgs) {
309
- (0, internal_1.assert)(opArgs.op.type === ops_js_1.MergeTreeDeltaType.REMOVE, 0x02d /* "Unexpected op type on range remove!" */);
310
- const op = opArgs.op;
311
- const clientArgs = this.getClientSequenceArgs(opArgs);
312
- const range = this.getValidOpRange(op, clientArgs);
313
- this._mergeTree.markRangeRemoved(range.start, range.end, clientArgs.referenceSequenceNumber, clientArgs.clientId, clientArgs.sequenceNumber, opArgs);
367
+ const { op, sequencedMessage } = opArgs;
368
+ (0, internal_1.assert)(op.type === ops_js_1.MergeTreeDeltaType.REMOVE, 0x02d /* "Unexpected op type on range remove!" */);
369
+ const perspective = this.getOperationPerspective(sequencedMessage);
370
+ const stamp = this.getOperationStamp(sequencedMessage);
371
+ const range = this.getValidOpRange(op, perspective);
372
+ this._mergeTree.markRangeRemoved(range.start, range.end, perspective, stamp, opArgs);
314
373
  }
315
374
  /**
316
375
  * Performs the annotate based on the provided op
317
376
  * @param opArgs - The ops args for the op
318
377
  */
319
378
  applyAnnotateRangeOp(opArgs) {
320
- (0, internal_1.assert)(opArgs.op.type === ops_js_1.MergeTreeDeltaType.ANNOTATE, 0x02e /* "Unexpected op type on range annotate!" */);
321
- const op = opArgs.op;
322
- const clientArgs = this.getClientSequenceArgs(opArgs);
323
- const range = this.getValidOpRange(op, clientArgs);
324
- this._mergeTree.annotateRange(range.start, range.end, op, clientArgs.referenceSequenceNumber, clientArgs.clientId, clientArgs.sequenceNumber, opArgs);
379
+ const { op, sequencedMessage } = opArgs;
380
+ (0, internal_1.assert)(op.type === ops_js_1.MergeTreeDeltaType.ANNOTATE, 0x02e /* "Unexpected op type on range annotate!" */);
381
+ const perspective = this.getOperationPerspective(sequencedMessage);
382
+ const stamp = this.getOperationStamp(sequencedMessage);
383
+ const range = this.getValidOpRange(op, perspective);
384
+ this._mergeTree.annotateRange(range.start, range.end, op, perspective, stamp, opArgs);
325
385
  }
326
386
  /**
327
387
  * Performs the insert based on the provided op
@@ -329,13 +389,14 @@ class Client extends client_utils_1.TypedEventEmitter {
329
389
  * @returns True if the insert was applied. False if it could not be.
330
390
  */
331
391
  applyInsertOp(opArgs) {
332
- (0, internal_1.assert)(opArgs.op.type === ops_js_1.MergeTreeDeltaType.INSERT, 0x02f /* "Unexpected op type on range insert!" */);
333
- const op = opArgs.op;
334
- const clientArgs = this.getClientSequenceArgs(opArgs);
335
- const range = this.getValidOpRange(op, clientArgs);
392
+ const { op, sequencedMessage } = opArgs;
393
+ (0, internal_1.assert)(op.type === ops_js_1.MergeTreeDeltaType.INSERT, 0x02f /* "Unexpected op type on range insert!" */);
394
+ const perspective = this.getOperationPerspective(sequencedMessage);
395
+ const stamp = this.getOperationStamp(sequencedMessage);
396
+ const range = this.getValidOpRange(op, perspective);
336
397
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
337
398
  const segments = [this.specToSegment(op.seg)];
338
- this._mergeTree.insertSegments(range.start, segments, clientArgs.referenceSequenceNumber, clientArgs.clientId, clientArgs.sequenceNumber, opArgs);
399
+ this._mergeTree.insertSegments(range.start, segments, perspective, stamp, opArgs);
339
400
  }
340
401
  /**
341
402
  * Returns a valid range for the op, or throws if the range is invalid
@@ -345,7 +406,7 @@ class Client extends client_utils_1.TypedEventEmitter {
345
406
  */
346
407
  getValidSidedRange(
347
408
  // eslint-disable-next-line import/no-deprecated
348
- op, clientArgs) {
409
+ op, perspective) {
349
410
  const invalidPositions = [];
350
411
  let start;
351
412
  let end;
@@ -368,8 +429,8 @@ class Client extends client_utils_1.TypedEventEmitter {
368
429
  : { pos: op.pos2 - 1, side: sequencePlace_js_1.Side.After };
369
430
  }
370
431
  // Validate if local op
371
- if (clientArgs.clientId === this.getClientId()) {
372
- const length = this._mergeTree.getLength(this.getCollabWindow().currentSeq, this.getClientId());
432
+ if (perspective.clientId === this.getClientId()) {
433
+ const length = this._mergeTree.getLength(this._mergeTree.localPerspective);
373
434
  if (start !== undefined && (start.pos >= length || start.pos < 0)) {
374
435
  // start out of bounds
375
436
  invalidPositions.push("start");
@@ -407,17 +468,17 @@ class Client extends client_utils_1.TypedEventEmitter {
407
468
  * @param op - The op to generate the range for
408
469
  * @param clientArgs - The client args for the op
409
470
  */
410
- getValidOpRange(op, clientArgs) {
471
+ getValidOpRange(op, perspective) {
411
472
  let start = op.pos1;
412
473
  if (start === undefined && op.relativePos1) {
413
- start = this._mergeTree.posFromRelativePos(op.relativePos1, clientArgs.referenceSequenceNumber, clientArgs.clientId);
474
+ start = this._mergeTree.posFromRelativePos(op.relativePos1, perspective);
414
475
  }
415
476
  let end = op.pos2;
416
477
  if (end === undefined && op.relativePos2) {
417
- end = this._mergeTree.posFromRelativePos(op.relativePos2, clientArgs.referenceSequenceNumber, clientArgs.clientId);
478
+ end = this._mergeTree.posFromRelativePos(op.relativePos2, perspective);
418
479
  }
419
480
  // Validate if local op
420
- if (clientArgs.clientId === this.getClientId()) {
481
+ if (perspective.clientId === this.getClientId()) {
421
482
  const length = this.getLength();
422
483
  const invalidPositions = [];
423
484
  // Validate start position
@@ -454,39 +515,6 @@ class Client extends client_utils_1.TypedEventEmitter {
454
515
  // start and end are guaranteed to be non-null here, otherwise we throw above.
455
516
  return { start: start, end: end };
456
517
  }
457
- /**
458
- * Gets the client args from the op if remote, otherwise uses the local clients info
459
- * @param sequencedMessage - The sequencedMessage to get the client sequence args for
460
- */
461
- getClientSequenceArgsForMessage(sequencedMessage) {
462
- // If there this no sequenced message, then the op is local
463
- // and unacked, so use this clients sequenced args
464
- //
465
- if (sequencedMessage) {
466
- return {
467
- clientId: this.getOrAddShortClientIdFromMessage(sequencedMessage),
468
- referenceSequenceNumber: sequencedMessage.referenceSequenceNumber,
469
- // Note: return value satisfies overload signatures despite the cast, as if input argument doesn't contain sequenceNumber,
470
- // return value isn't expected to have it either.
471
- sequenceNumber: sequencedMessage.sequenceNumber,
472
- };
473
- }
474
- else {
475
- const segWindow = this.getCollabWindow();
476
- return {
477
- clientId: segWindow.clientId,
478
- referenceSequenceNumber: segWindow.currentSeq,
479
- sequenceNumber: this.getLocalSequenceNumber(),
480
- };
481
- }
482
- }
483
- /**
484
- * Gets the client args from the op if remote, otherwise uses the local clients info
485
- * @param opArgs - The op arg to get the client sequence args for
486
- */
487
- getClientSequenceArgs(opArgs) {
488
- return this.getClientSequenceArgsForMessage(opArgs.sequencedMessage);
489
- }
490
518
  ackPendingSegment(opArgs) {
491
519
  if (opArgs.op.type === ops_js_1.MergeTreeDeltaType.GROUP) {
492
520
  for (const memberOp of opArgs.op.ops) {
@@ -535,7 +563,8 @@ class Client extends client_utils_1.TypedEventEmitter {
535
563
  if (!(0, mergeTreeNodes_js_1.isSegmentLeaf)(segment)) {
536
564
  throw new internal_4.UsageError(UNBOUND_SEGMENT_ERROR);
537
565
  }
538
- return this._mergeTree.getPosition(segment, currentSeq, clientId, localSeq);
566
+ const perspective = new perspective_js_1.LocalReconnectingPerspective(currentSeq, clientId, localSeq);
567
+ return this._mergeTree.getPosition(segment, perspective);
539
568
  }
540
569
  resetPendingDeltaToOps(resetOp, segmentGroup) {
541
570
  (0, internal_1.assert)(!!segmentGroup, 0x033 /* "Segment group undefined" */);
@@ -571,12 +600,7 @@ class Client extends client_utils_1.TypedEventEmitter {
571
600
  // if the segment has been removed or obliterated, there's no need to send the annotate op
572
601
  // unless the remove was local, in which case the annotate must have come
573
602
  // before the remove
574
- if ((!(0, segmentInfos_js_1.isRemoved)(segment) ||
575
- (segment.localRemovedSeq !== undefined &&
576
- segment.removedSeq === constants_js_1.UnassignedSequenceNumber)) &&
577
- (!(0, segmentInfos_js_1.isMoved)(segment) ||
578
- (segment.localMovedSeq !== undefined &&
579
- segment.movedSeq === constants_js_1.UnassignedSequenceNumber))) {
603
+ if (!(0, mergeTree_js_1.isRemovedAndAcked)(segment)) {
580
604
  newOp =
581
605
  resetOp.props === undefined
582
606
  ? (0, opBuilder_js_1.createAdjustRangeOp)(segmentPosition, segmentPosition + segment.cachedLength, resetOp.adjust)
@@ -585,22 +609,24 @@ class Client extends client_utils_1.TypedEventEmitter {
585
609
  break;
586
610
  }
587
611
  case ops_js_1.MergeTreeDeltaType.INSERT: {
588
- (0, internal_1.assert)((0, segmentInfos_js_1.isInserted)(segment) && segment.seq === constants_js_1.UnassignedSequenceNumber, 0x037 /* "Segment already has assigned sequence number" */);
589
- const moveInfo = (0, segmentInfos_js_1.toMoveInfo)(segment);
590
- if (moveInfo !== undefined) {
612
+ (0, internal_1.assert)((0, segmentInfos_js_1.isInserted)(segment) && opstampUtils.isLocal(segment.insert), 0x037 /* "Segment already has assigned sequence number" */);
613
+ const removeInfo = (0, segmentInfos_js_1.toRemovalInfo)(segment);
614
+ if (removeInfo !== undefined && opstampUtils.isAcked(removeInfo.removes[0])) {
615
+ (0, internal_1.assert)(removeInfo.removes[0].type === "sliceRemove", 0xb5c /* Remove on insertion must be caused by obliterate. */);
591
616
  (0, mergeTree_js_1.errorIfOptionNotTrue)(this._mergeTree.options, "mergeTreeEnableObliterateReconnect");
592
- if (moveInfo.movedSeq !== constants_js_1.UnassignedSequenceNumber) {
593
- // the segment was remotely obliterated, so is considered removed
594
- // we set the seq to the universal seq and remove the local seq,
595
- // so its length is not considered for subsequent local changes
596
- // this allows us to not send the op as even the local client will ignore the segment
597
- (0, segmentInfos_js_1.overwriteInfo)(segment, {
617
+ // the segment was remotely obliterated, so is considered removed
618
+ // we set the seq to the universal seq and remove the local seq,
619
+ // so its length is not considered for subsequent local changes
620
+ // this allows us to not send the op as even the local client will ignore the segment
621
+ (0, segmentInfos_js_1.overwriteInfo)(segment, {
622
+ insert: {
623
+ type: "insert",
598
624
  seq: constants_js_1.UniversalSequenceNumber,
599
625
  localSeq: undefined,
600
626
  clientId: constants_js_1.NonCollabClient,
601
- });
602
- break;
603
- }
627
+ },
628
+ });
629
+ break;
604
630
  }
605
631
  const segInsertOp = segment.clone();
606
632
  const opProps = (0, internal_1.isObject)(resetOp.seg) && "props" in resetOp.seg && (0, internal_1.isObject)(resetOp.seg.props)
@@ -611,24 +637,18 @@ class Client extends client_utils_1.TypedEventEmitter {
611
637
  break;
612
638
  }
613
639
  case ops_js_1.MergeTreeDeltaType.REMOVE: {
614
- if ((0, segmentInfos_js_1.isRemoved)(segment) &&
615
- segment.localRemovedSeq !== undefined &&
616
- segment.removedSeq === constants_js_1.UnassignedSequenceNumber &&
617
- (!(0, segmentInfos_js_1.isMoved)(segment) ||
618
- (segment.localMovedSeq !== undefined &&
619
- segment.movedSeq === constants_js_1.UnassignedSequenceNumber))) {
640
+ // Only bother resubmitting if nobody else has removed it in the meantime.
641
+ // When that happens, the first removal will have been acked.
642
+ if ((0, segmentInfos_js_1.isRemoved)(segment) && opstampUtils.isLocal(segment.removes[0])) {
620
643
  newOp = (0, opBuilder_js_1.createRemoveRangeOp)(segmentPosition, segmentPosition + segment.cachedLength);
621
644
  }
622
645
  break;
623
646
  }
624
647
  case ops_js_1.MergeTreeDeltaType.OBLITERATE: {
625
648
  (0, mergeTree_js_1.errorIfOptionNotTrue)(this._mergeTree.options, "mergeTreeEnableObliterateReconnect");
626
- if ((0, segmentInfos_js_1.isMoved)(segment) &&
627
- segment.localMovedSeq !== undefined &&
628
- segment.movedSeq === constants_js_1.UnassignedSequenceNumber &&
629
- (!(0, segmentInfos_js_1.isRemoved)(segment) ||
630
- (segment.localRemovedSeq !== undefined &&
631
- segment.removedSeq === constants_js_1.UnassignedSequenceNumber))) {
649
+ // Only bother resubmitting if nobody else has removed it in the meantime.
650
+ // When that happens, the first removal will have been acked.
651
+ if ((0, segmentInfos_js_1.isRemoved)(segment) && opstampUtils.isLocal(segment.removes[0])) {
632
652
  newOp = (0, opBuilder_js_1.createObliterateRangeOp)(segmentPosition, segmentPosition + segment.cachedLength);
633
653
  }
634
654
  break;
@@ -784,7 +804,6 @@ class Client extends client_utils_1.TypedEventEmitter {
784
804
  if (Array.isArray(segmentGroup)) {
785
805
  if (segmentGroup.length === 0) {
786
806
  // sometimes we rebase to an empty op
787
- // eslint-disable-next-line import/no-deprecated
788
807
  return (0, opBuilder_js_1.createGroupOp)();
789
808
  }
790
809
  firstGroup = segmentGroup[0];
@@ -822,7 +841,6 @@ class Client extends client_utils_1.TypedEventEmitter {
822
841
  (0, internal_1.assert)(!Array.isArray(segmentGroup), 0x03d /* "segmentGroup is array rather than singleton!" */);
823
842
  opList.push(...this.resetPendingDeltaToOps(resetOp, segmentGroup));
824
843
  }
825
- // eslint-disable-next-line import/no-deprecated
826
844
  return opList.length === 1 ? opList[0] : (0, opBuilder_js_1.createGroupOp)(...opList);
827
845
  }
828
846
  createTextHelper() {
@@ -856,10 +874,6 @@ class Client extends client_utils_1.TypedEventEmitter {
856
874
  const loader = new snapshotLoader_js_1.SnapshotLoader(runtime, this, this._mergeTree, this.logger, serializer);
857
875
  return loader.initialize(storage);
858
876
  }
859
- getLocalSequenceNumber() {
860
- const segWindow = this.getCollabWindow();
861
- return segWindow.collaborating ? constants_js_1.UnassignedSequenceNumber : constants_js_1.UniversalSequenceNumber;
862
- }
863
877
  // eslint-disable-next-line import/no-deprecated
864
878
  localTransaction(groupOp) {
865
879
  for (const op of groupOp.ops) {
@@ -895,8 +909,21 @@ class Client extends client_utils_1.TypedEventEmitter {
895
909
  this._mergeTree.setMinSeq(minSeq);
896
910
  }
897
911
  getContainingSegment(pos, sequenceArgs, localSeq) {
898
- const { referenceSequenceNumber, clientId } = this.getClientSequenceArgsForMessage(sequenceArgs);
899
- return this._mergeTree.getContainingSegment(pos, referenceSequenceNumber, clientId, localSeq);
912
+ let perspective;
913
+ const clientId = sequenceArgs === undefined
914
+ ? this.getClientId()
915
+ : this.getOrAddShortClientIdFromMessage(sequenceArgs);
916
+ const refSeq = sequenceArgs?.referenceSequenceNumber ?? this.getCollabWindow().currentSeq;
917
+ if (localSeq !== undefined) {
918
+ perspective = new perspective_js_1.LocalReconnectingPerspective(refSeq, clientId, localSeq);
919
+ }
920
+ else if (sequenceArgs === undefined) {
921
+ perspective = this._mergeTree.localPerspective;
922
+ }
923
+ else {
924
+ perspective = new perspective_js_1.PriorPerspective(refSeq, clientId);
925
+ }
926
+ return this._mergeTree.getContainingSegment(pos, perspective);
900
927
  }
901
928
  getPropertiesAtPosition(pos) {
902
929
  let propertiesAtPosition;
@@ -958,8 +985,7 @@ class Client extends client_utils_1.TypedEventEmitter {
958
985
  * @param forwards - Whether the desired marker comes before (false) or after (true) `startPos`
959
986
  */
960
987
  searchForMarker(startPos, markerLabel, forwards = true) {
961
- const clientId = this.getClientId();
962
- return this._mergeTree.searchForMarker(startPos, clientId, markerLabel, forwards);
988
+ return this._mergeTree.searchForMarker(startPos, markerLabel, forwards);
963
989
  }
964
990
  }
965
991
  exports.Client = Client;