@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
@@ -39,7 +39,7 @@ describe("MergeTree.Client", () => {
39
39
  // TODO: The type here is probably MergeTreeDeltaType but
40
40
  // omitting GROUP, given the typing of the rollback method.
41
41
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
42
- clients[msg[0].clientId].rollback?.({ type: msg[0].contents.type }, msg[1]);
42
+ clients[msg[0].clientId].rollback({ type: msg[0].contents.type }, msg[1]);
43
43
  }
44
44
  logger.validate();
45
45
  logger.dispose();
@@ -1 +1 @@
1
- {"version":3,"file":"client.rollbackFarm.spec.js","sourceRoot":"","sources":["../../src/test/client.rollbackFarm.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\n\nimport {\n\tTestOperation,\n\tannotateRange,\n\tapplyMessages,\n\tdoOverRanges,\n\tgenerateOperationMessagesForClients,\n\tinsertAtRefPos,\n\tremoveRange,\n} from \"./mergeTreeOperationRunner.js\";\nimport { TestClientLogger, createClientsAtInitialState } from \"./testClientLogger.js\";\n\nconst allOperations: TestOperation[] = [removeRange, annotateRange, insertAtRefPos];\n\nconst defaultOptions = {\n\tminLength: { min: 1, max: 32 },\n\topsPerRollbackRange: { min: 1, max: 32 },\n\trounds: 10,\n\topsPerRound: 10,\n\toperations: allOperations,\n\tgrowthFunc: (input: number): number => input * 2,\n};\n\ndescribe(\"MergeTree.Client\", () => {\n\tdoOverRanges(defaultOptions, ({ minLength, opsPerRollbackRange: opsPerRollback }) => {\n\t\tit(`RollbackFarm_${minLength} OpsPerRollback: ${opsPerRollback}`, async () => {\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, minLength, opsPerRollback);\n\n\t\t\t// A: readonly, B: rollback, C: rollback + edit, D: edit\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"\", options: { mergeTreeEnableAnnotateAdjust: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t\t\"C\",\n\t\t\t\t\"D\",\n\t\t\t);\n\t\t\tlet seq = 0;\n\n\t\t\tfor (let round = 0; round < defaultOptions.rounds; round++) {\n\t\t\t\tfor (const c of clients.all) c.updateMinSeq(seq);\n\n\t\t\t\tconst logger = new TestClientLogger(clients.all, `Round ${round}`);\n\n\t\t\t\t// initialize and ack 10 random actions on either C or D\n\t\t\t\tconst initialMsgs = generateOperationMessagesForClients(\n\t\t\t\t\trandom,\n\t\t\t\t\tseq,\n\t\t\t\t\t[clients.A, clients.C, clients.D],\n\t\t\t\t\tlogger,\n\t\t\t\t\tdefaultOptions.opsPerRound,\n\t\t\t\t\tminLength,\n\t\t\t\t\tdefaultOptions.operations,\n\t\t\t\t);\n\t\t\t\tseq = applyMessages(seq, initialMsgs, clients.all, logger);\n\n\t\t\t\tlogger.validate();\n\n\t\t\t\t// generate messages to rollback on B or C, then rollback\n\t\t\t\tconst rollbackMsgs = generateOperationMessagesForClients(\n\t\t\t\t\trandom,\n\t\t\t\t\tseq,\n\t\t\t\t\t[clients.A, clients.B, clients.C],\n\t\t\t\t\tlogger,\n\t\t\t\t\topsPerRollback,\n\t\t\t\t\tminLength,\n\t\t\t\t\tdefaultOptions.operations,\n\t\t\t\t);\n\t\t\t\twhile (rollbackMsgs.length > 0) {\n\t\t\t\t\tconst msg = rollbackMsgs.pop();\n\t\t\t\t\t// TODO: The type here is probably MergeTreeDeltaType but\n\t\t\t\t\t// omitting GROUP, given the typing of the rollback method.\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\t\t\t\tclients[msg![0].clientId!].rollback?.(\n\t\t\t\t\t\t{ type: (msg![0].contents as { type?: unknown }).type },\n\t\t\t\t\t\tmsg![1],\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlogger.validate();\n\t\t\t\tlogger.dispose();\n\t\t\t}\n\t\t}).timeout(30 * 10000);\n\t});\n});\n"]}
1
+ {"version":3,"file":"client.rollbackFarm.spec.js","sourceRoot":"","sources":["../../src/test/client.rollbackFarm.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,6DAA6D;AAE7D,gFAAkE;AAElE,+EAQuC;AACvC,+DAAsF;AAEtF,MAAM,aAAa,GAAoB,CAAC,yCAAW,EAAE,2CAAa,EAAE,4CAAc,CAAC,CAAC;AAEpF,MAAM,cAAc,GAAG;IACtB,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAC9B,mBAAmB,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACxC,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,aAAa;IACzB,UAAU,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,GAAG,CAAC;CAChD,CAAC;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,IAAA,0CAAY,EAAC,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,EAAE,EAAE,EAAE;QACnF,EAAE,CAAC,gBAAgB,SAAS,oBAAoB,cAAc,EAAE,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,MAAM,GAAG,IAAA,kCAAU,EAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;YAE5E,wDAAwD;YACxD,MAAM,OAAO,GAAG,IAAA,iDAA2B,EAC1C,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,EAAE,EACtE,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACH,CAAC;YACF,IAAI,GAAG,GAAG,CAAC,CAAC;YAEZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC5D,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG;oBAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAEjD,MAAM,MAAM,GAAG,IAAI,sCAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC;gBAEnE,wDAAwD;gBACxD,MAAM,WAAW,GAAG,IAAA,iEAAmC,EACtD,MAAM,EACN,GAAG,EACH,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACjC,MAAM,EACN,cAAc,CAAC,WAAW,EAC1B,SAAS,EACT,cAAc,CAAC,UAAU,CACzB,CAAC;gBACF,GAAG,GAAG,IAAA,2CAAa,EAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAE3D,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAElB,yDAAyD;gBACzD,MAAM,YAAY,GAAG,IAAA,iEAAmC,EACvD,MAAM,EACN,GAAG,EACH,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACjC,MAAM,EACN,cAAc,EACd,SAAS,EACT,cAAc,CAAC,UAAU,CACzB,CAAC;gBACF,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;oBAC/B,yDAAyD;oBACzD,2DAA2D;oBAC3D,yGAAyG;oBACzG,OAAO,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC,CAAC,QAAQ,CAClC,EAAE,IAAI,EAAG,GAAI,CAAC,CAAC,CAAC,CAAC,QAA+B,CAAC,IAAI,EAAE,EACvD,GAAI,CAAC,CAAC,CAAC,CACP,CAAC;gBACH,CAAC;gBAED,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC;QACF,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\n\nimport {\n\tTestOperation,\n\tannotateRange,\n\tapplyMessages,\n\tdoOverRanges,\n\tgenerateOperationMessagesForClients,\n\tinsertAtRefPos,\n\tremoveRange,\n} from \"./mergeTreeOperationRunner.js\";\nimport { TestClientLogger, createClientsAtInitialState } from \"./testClientLogger.js\";\n\nconst allOperations: TestOperation[] = [removeRange, annotateRange, insertAtRefPos];\n\nconst defaultOptions = {\n\tminLength: { min: 1, max: 32 },\n\topsPerRollbackRange: { min: 1, max: 32 },\n\trounds: 10,\n\topsPerRound: 10,\n\toperations: allOperations,\n\tgrowthFunc: (input: number): number => input * 2,\n};\n\ndescribe(\"MergeTree.Client\", () => {\n\tdoOverRanges(defaultOptions, ({ minLength, opsPerRollbackRange: opsPerRollback }) => {\n\t\tit(`RollbackFarm_${minLength} OpsPerRollback: ${opsPerRollback}`, async () => {\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, minLength, opsPerRollback);\n\n\t\t\t// A: readonly, B: rollback, C: rollback + edit, D: edit\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"\", options: { mergeTreeEnableAnnotateAdjust: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t\t\"C\",\n\t\t\t\t\"D\",\n\t\t\t);\n\t\t\tlet seq = 0;\n\n\t\t\tfor (let round = 0; round < defaultOptions.rounds; round++) {\n\t\t\t\tfor (const c of clients.all) c.updateMinSeq(seq);\n\n\t\t\t\tconst logger = new TestClientLogger(clients.all, `Round ${round}`);\n\n\t\t\t\t// initialize and ack 10 random actions on either C or D\n\t\t\t\tconst initialMsgs = generateOperationMessagesForClients(\n\t\t\t\t\trandom,\n\t\t\t\t\tseq,\n\t\t\t\t\t[clients.A, clients.C, clients.D],\n\t\t\t\t\tlogger,\n\t\t\t\t\tdefaultOptions.opsPerRound,\n\t\t\t\t\tminLength,\n\t\t\t\t\tdefaultOptions.operations,\n\t\t\t\t);\n\t\t\t\tseq = applyMessages(seq, initialMsgs, clients.all, logger);\n\n\t\t\t\tlogger.validate();\n\n\t\t\t\t// generate messages to rollback on B or C, then rollback\n\t\t\t\tconst rollbackMsgs = generateOperationMessagesForClients(\n\t\t\t\t\trandom,\n\t\t\t\t\tseq,\n\t\t\t\t\t[clients.A, clients.B, clients.C],\n\t\t\t\t\tlogger,\n\t\t\t\t\topsPerRollback,\n\t\t\t\t\tminLength,\n\t\t\t\t\tdefaultOptions.operations,\n\t\t\t\t);\n\t\t\t\twhile (rollbackMsgs.length > 0) {\n\t\t\t\t\tconst msg = rollbackMsgs.pop();\n\t\t\t\t\t// TODO: The type here is probably MergeTreeDeltaType but\n\t\t\t\t\t// omitting GROUP, given the typing of the rollback method.\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\t\t\t\tclients[msg![0].clientId!].rollback(\n\t\t\t\t\t\t{ type: (msg![0].contents as { type?: unknown }).type },\n\t\t\t\t\t\tmsg![1],\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlogger.validate();\n\t\t\t\tlogger.dispose();\n\t\t\t}\n\t\t}).timeout(30 * 10000);\n\t});\n});\n"]}
@@ -13,21 +13,12 @@ const referencePositions_js_1 = require("../referencePositions.js");
13
13
  const textSegment_js_1 = require("../textSegment.js");
14
14
  const testClient_js_1 = require("./testClient.js");
15
15
  const testClientLogger_js_1 = require("./testClientLogger.js");
16
- const testUtils_js_1 = require("./testUtils.js");
17
16
  describe("TestClient", () => {
18
17
  const localUserLongId = "localUser";
19
18
  let client;
20
19
  beforeEach(() => {
21
20
  client = new testClient_js_1.TestClient();
22
- (0, testUtils_js_1.insertSegments)({
23
- mergeTree: client.mergeTree,
24
- pos: 0,
25
- segments: [textSegment_js_1.TextSegment.make("")],
26
- refSeq: constants_js_1.UniversalSequenceNumber,
27
- clientId: client.getClientId(),
28
- seq: constants_js_1.UniversalSequenceNumber,
29
- opArgs: undefined,
30
- });
21
+ client.mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("")], client.mergeTree.localPerspective, client.mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
31
22
  client.startOrUpdateCollaboration(localUserLongId);
32
23
  });
33
24
  describe(".searchForMarker", () => {
@@ -277,7 +268,7 @@ describe("TestClient", () => {
277
268
  [referencePositions_js_1.reservedTileLabelsKey]: ["Eop"],
278
269
  });
279
270
  client.removeRangeLocal(0, 1);
280
- client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
271
+ client.rollback({ type: ops_js_1.MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());
281
272
  const marker = client.searchForMarker(0, "Eop", true);
282
273
  (0, node_assert_1.strict)(marker, "Returned marker undefined.");
283
274
  const exp = client.mergeTree.referencePositionToLocalPosition(marker, constants_js_1.UniversalSequenceNumber, client.getClientId());
@@ -289,7 +280,7 @@ describe("TestClient", () => {
289
280
  [mergeTreeNodes_js_1.reservedMarkerIdKey]: "marker",
290
281
  [referencePositions_js_1.reservedTileLabelsKey]: ["Eop"],
291
282
  });
292
- client.rollback?.({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
283
+ client.rollback({ type: ops_js_1.MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());
293
284
  const marker = client.searchForMarker(0, "Eop", true);
294
285
  node_assert_1.strict.equal(marker, undefined, "Returned marker should be undefined.");
295
286
  });
@@ -397,15 +388,7 @@ describe("TestClient", () => {
397
388
  let client2;
398
389
  beforeEach(() => {
399
390
  client2 = new testClient_js_1.TestClient();
400
- (0, testUtils_js_1.insertSegments)({
401
- mergeTree: client2.mergeTree,
402
- pos: 0,
403
- segments: [textSegment_js_1.TextSegment.make("")],
404
- refSeq: constants_js_1.UniversalSequenceNumber,
405
- clientId: client2.getClientId(),
406
- seq: constants_js_1.UniversalSequenceNumber,
407
- opArgs: undefined,
408
- });
391
+ client2.mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("")], client2.mergeTree.localPerspective, client2.mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
409
392
  client2.startOrUpdateCollaboration(remoteUserLongId);
410
393
  });
411
394
  it("Should be able to find remotely inserted marker", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"client.searchForMarker.spec.js","sourceRoot":"","sources":["../../src/test/client.searchForMarker.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\n\nimport { UniversalSequenceNumber } from \"../constants.js\";\nimport { MaxNodesInBlock, reservedMarkerIdKey } from \"../mergeTreeNodes.js\";\nimport { MergeTreeDeltaType, ReferenceType } from \"../ops.js\";\nimport { reservedTileLabelsKey } from \"../referencePositions.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\nimport { createClientsAtInitialState } from \"./testClientLogger.js\";\nimport { insertSegments } from \"./testUtils.js\";\n\ndescribe(\"TestClient\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tinsertSegments({\n\t\t\tmergeTree: client.mergeTree,\n\t\t\tpos: 0,\n\t\t\tsegments: [TextSegment.make(\"\")],\n\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\tclientId: client.getClientId(),\n\t\t\tseq: UniversalSequenceNumber,\n\t\t\topArgs: undefined,\n\t\t});\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tdescribe(\".searchForMarker\", () => {\n\t\tit(\"Should return marker at the search position in either direction\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return the marker at the search position in either direction from multiple blocks\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcd\");\n\t\t\tclient.insertTextLocal(4, \"efg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 3, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label from client with single marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(1, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 6, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\t\t\tassert.equal(exp, 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position based on label from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 6, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tconst offset = index % 3 === 0 ? index % 3 : 3 - (index % 3);\n\t\t\t\tassert.equal(exp, index + offset, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, index - (index % 3), \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant forward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant backward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from forwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from backwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find marker from client with text length 1\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(client.getLength() - 1, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker1 = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find marker position with index out of bound\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker2 = client.searchForMarker(-1, markerLabel, false);\n\n\t\t\tassert.equal(marker2, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a deleted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tclient.rollback?.(\n\t\t\t\t{ type: MergeTreeDeltaType.REMOVE },\n\t\t\t\tclient.peekPendingSegmentGroups(),\n\t\t\t);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find an inserted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.rollback?.(\n\t\t\t\t{ type: MergeTreeDeltaType.INSERT },\n\t\t\t\tclient.peekPendingSegmentGroups(),\n\t\t\t);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at 0 searching at 0 in both directions\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(0, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at length-1 searching at length-1 in both directions\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tconst length = client.getLength();\n\t\t\tassert.equal(length, 4);\n\n\t\t\tconst marker = client.searchForMarker(length - 1, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(length - 1, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length > 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length > 1\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from text without the specified marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from null text\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find a removed marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined\");\n\t\t});\n\n\t\tdescribe(\"with remote client\", () => {\n\t\t\tconst remoteUserLongId = \"remoteUser\";\n\t\t\tlet client2: TestClient;\n\t\t\tbeforeEach(() => {\n\t\t\t\tclient2 = new TestClient();\n\t\t\t\tinsertSegments({\n\t\t\t\t\tmergeTree: client2.mergeTree,\n\t\t\t\t\tpos: 0,\n\t\t\t\t\tsegments: [TextSegment.make(\"\")],\n\t\t\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\t\t\tclientId: client2.getClientId(),\n\t\t\t\t\tseq: UniversalSequenceNumber,\n\t\t\t\t\topArgs: undefined,\n\t\t\t\t});\n\t\t\t\tclient2.startOrUpdateCollaboration(remoteUserLongId);\n\t\t\t});\n\n\t\t\tit(\"Should be able to find remotely inserted marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst markerMsg = client2.makeOpMessage(\n\t\t\t\t\tclient2.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(markerMsg);\n\t\t\t\tclient2.applyMsg(markerMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert(marker, \"Returned marker undefined\");\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t\t});\n\n\t\t\tit(\"Should not be able to find remotely removed marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst mInsertMsg = client.makeOpMessage(\n\t\t\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(mInsertMsg);\n\t\t\t\tclient2.applyMsg(mInsertMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst mRemoveMsg = client2.makeOpMessage(client2.removeRangeLocal(0, 1), ++seq);\n\t\t\t\tclient.applyMsg(mRemoveMsg);\n\t\t\t\tclient2.applyMsg(mRemoveMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 3, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 3, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\".getMarkerById\", () => {\n\t\tit(\"removed marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState({ initialState: \"hello world\" }, \"A\", \"B\");\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.removeRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove after ack\",\n\t\t\t);\n\t\t});\n\t\tit(\"obliterate marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"hello world\", options: { mergeTreeEnableObliterate: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t);\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.obliterateRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate after ack\",\n\t\t\t);\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"client.searchForMarker.spec.js","sourceRoot":"","sources":["../../src/test/client.searchForMarker.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { makeRandom } from \"@fluid-private/stochastic-test-utils\";\n\nimport { UniversalSequenceNumber } from \"../constants.js\";\nimport { MaxNodesInBlock, reservedMarkerIdKey } from \"../mergeTreeNodes.js\";\nimport { MergeTreeDeltaType, ReferenceType } from \"../ops.js\";\nimport { reservedTileLabelsKey } from \"../referencePositions.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\nimport { TestClient } from \"./testClient.js\";\nimport { createClientsAtInitialState } from \"./testClientLogger.js\";\n\ndescribe(\"TestClient\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tclient.mergeTree.insertSegments(\n\t\t\t0,\n\t\t\t[TextSegment.make(\"\")],\n\t\t\tclient.mergeTree.localPerspective,\n\t\t\tclient.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\tundefined,\n\t\t);\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tdescribe(\".searchForMarker\", () => {\n\t\tit(\"Should return marker at the search position in either direction\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcdefg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return the marker at the search position in either direction from multiple blocks\", () => {\n\t\t\tclient.insertTextLocal(0, \"abcd\");\n\t\t\tclient.insertTextLocal(4, \"efg\");\n\t\t\tclient.insertMarkerLocal(4, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tassert.equal(client.getLength(), 8);\n\n\t\t\tconst marker1 = client.searchForMarker(4, \"Eop\", true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker1,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(4, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 4, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 3, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position based on label from client with single marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(1, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 6, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\t\t\tassert.equal(exp, 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position based on label from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position from client with multiple marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc d\");\n\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(7, \"ef\");\n\t\t\tclient.insertMarkerLocal(8, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 10, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 6, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find forward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tconst offset = index % 3 === 0 ? index % 3 : 3 - (index % 3);\n\t\t\t\tassert.equal(exp, index + offset, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find backward marker position with multiple segments and markers\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\t// pad the string with markers on both ends so we never get undefined solely for convenience of this test\n\t\t\tfor (let i = 0; i <= client.getLength(); i += 3) {\n\t\t\t\tclient.insertMarkerLocal(i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst marker = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert(marker, `Returned marker undefined @ ${index}.`);\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, index - (index % 3), \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant forward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find distant backward marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock ** 3 * 2 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tfor (let i = 10; i > 1; i -= 2) {\n\t\t\t\tclient.insertMarkerLocal(client.getLength() - i, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (let index = client.getLength() - 1; index >= 0; index--) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from forwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, true);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, true);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should match results from backwardExcursion for many segments\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tfor (const [i, _] of Array.from({ length: MaxNodesInBlock * 3 }).entries())\n\t\t\t\tclient.insertTextLocal(0, i.toString());\n\t\t\tconst random = makeRandom(0xdeadbeef, 0xfeedbed, client.getLength());\n\t\t\tfor (let i = 0; i <= client.getLength() / 6; i++) {\n\t\t\t\tconst pos = random.integer(0, client.getLength() - 1);\n\t\t\t\tclient.insertMarkerLocal(pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (let index = 0; index < client.getLength(); index++) {\n\t\t\t\tconst exp = client.slowSearchForMarker(index, markerLabel, false);\n\t\t\t\tconst actual = client.searchForMarker(index, markerLabel, false);\n\n\t\t\t\tassert.equal(exp, actual, \"Marker with label not at expected position\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"Should be able to find marker from client with text length 1\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(client.getLength() - 1, markerLabel, false);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker1 = client.searchForMarker(0, markerLabel, true);\n\n\t\t\tassert(marker1, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find marker position with index out of bound\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedTileLabelsKey]: [markerLabel],\n\t\t\t\t[reservedMarkerIdKey]: \"some-id\",\n\t\t\t});\n\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(5, markerLabel, true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(5, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker2 = client.searchForMarker(-1, markerLabel, false);\n\n\t\t\tassert.equal(marker2, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a deleted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tclient.rollback({ type: MergeTreeDeltaType.REMOVE }, client.peekPendingSegmentGroups());\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should not be able to find an inserted and rolled back marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tclient.rollback({ type: MergeTreeDeltaType.INSERT }, client.peekPendingSegmentGroups());\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at 0 searching at 0 in both directions\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(0, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should be able to find a marker at length-1 searching at length-1 in both directions\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tconst length = client.getLength();\n\t\t\tassert.equal(length, 4);\n\n\t\t\tconst marker = client.searchForMarker(length - 1, \"Eop\", true);\n\n\t\t\tassert(marker, \"Returned marker undefined.\");\n\n\t\t\tlet exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\n\t\t\tconst marker2 = client.searchForMarker(length - 1, \"Eop\", false);\n\n\t\t\tassert(marker2, \"Returned marker undefined.\");\n\n\t\t\texp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\tmarker2,\n\t\t\t\tUniversalSequenceNumber,\n\t\t\t\tclient.getClientId(),\n\t\t\t);\n\n\t\t\tassert.equal(exp, length - 1, \"Marker with label not at expected position\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 1);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching past the end of a string length > 1\", () => {\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(client.getLength(), \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when searching before the start of a string length > 1\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4);\n\n\t\t\tconst marker = client.searchForMarker(-1, \"Eop\", false);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from text without the specified marker\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find marker from null text\", () => {\n\t\t\tconst markerLabel = \"EOP\";\n\n\t\t\tconst marker = client.searchForMarker(1, markerLabel);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\n\t\t\tconst marker1 = client.searchForMarker(1, markerLabel, false);\n\n\t\t\tassert.equal(marker1, undefined, \"Returned marker should be undefined.\");\n\t\t});\n\n\t\tit(\"Should return undefined when trying to find a removed marker\", () => {\n\t\t\tclient.insertTextLocal(0, \"abc\");\n\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t});\n\n\t\t\tassert.equal(client.getLength(), 4, \"length not expected\");\n\n\t\t\tclient.removeRangeLocal(0, 1);\n\n\t\t\tassert.equal(client.getLength(), 3, \"length not expected\");\n\n\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined\");\n\t\t});\n\n\t\tdescribe(\"with remote client\", () => {\n\t\t\tconst remoteUserLongId = \"remoteUser\";\n\t\t\tlet client2: TestClient;\n\t\t\tbeforeEach(() => {\n\t\t\t\tclient2 = new TestClient();\n\t\t\t\tclient2.mergeTree.insertSegments(\n\t\t\t\t\t0,\n\t\t\t\t\t[TextSegment.make(\"\")],\n\t\t\t\t\tclient2.mergeTree.localPerspective,\n\t\t\t\t\tclient2.mergeTree.collabWindow.mintNextLocalOperationStamp(),\n\t\t\t\t\tundefined,\n\t\t\t\t);\n\t\t\t\tclient2.startOrUpdateCollaboration(remoteUserLongId);\n\t\t\t});\n\n\t\t\tit(\"Should be able to find remotely inserted marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst markerMsg = client2.makeOpMessage(\n\t\t\t\t\tclient2.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(markerMsg);\n\t\t\t\tclient2.applyMsg(markerMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert(marker, \"Returned marker undefined\");\n\n\t\t\t\tconst exp = client.mergeTree.referencePositionToLocalPosition(\n\t\t\t\t\tmarker,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t);\n\n\t\t\t\tassert.equal(exp, 0, \"Marker with label not at expected position\");\n\t\t\t});\n\n\t\t\tit(\"Should not be able to find remotely removed marker\", () => {\n\t\t\t\tlet seq = 0;\n\t\t\t\tconst textMsg = client.makeOpMessage(client.insertTextLocal(0, \"abc\"), ++seq);\n\t\t\t\tconst mInsertMsg = client.makeOpMessage(\n\t\t\t\t\tclient.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: \"marker\",\n\t\t\t\t\t\t[reservedTileLabelsKey]: [\"Eop\"],\n\t\t\t\t\t}),\n\t\t\t\t\t++seq,\n\t\t\t\t);\n\t\t\t\tclient.applyMsg(textMsg);\n\t\t\t\tclient2.applyMsg(textMsg);\n\t\t\t\tclient.applyMsg(mInsertMsg);\n\t\t\t\tclient2.applyMsg(mInsertMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 4, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 4, \"length not expected - client 2\");\n\n\t\t\t\tconst mRemoveMsg = client2.makeOpMessage(client2.removeRangeLocal(0, 1), ++seq);\n\t\t\t\tclient.applyMsg(mRemoveMsg);\n\t\t\t\tclient2.applyMsg(mRemoveMsg);\n\n\t\t\t\tassert.equal(client.getLength(), 3, \"length not expected - client\");\n\t\t\t\tassert.equal(client2.getLength(), 3, \"length not expected - client 2\");\n\n\t\t\t\tconst marker = client.searchForMarker(0, \"Eop\", true);\n\n\t\t\t\tassert.equal(marker, undefined, \"Returned marker should be undefined.\");\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\".getMarkerById\", () => {\n\t\tit(\"removed marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState({ initialState: \"hello world\" }, \"A\", \"B\");\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.removeRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after remove after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after remove after ack\",\n\t\t\t);\n\t\t});\n\t\tit(\"obliterate marker\", () => {\n\t\t\tconst clients = createClientsAtInitialState(\n\t\t\t\t{ initialState: \"hello world\", options: { mergeTreeEnableObliterate: true } },\n\t\t\t\t\"A\",\n\t\t\t\t\"B\",\n\t\t\t);\n\n\t\t\tconst randomMarkerKey = \"randomKey1\";\n\n\t\t\tassert(!clients.A.getMarkerFromId(randomMarkerKey), \"local client before insert\");\n\n\t\t\tconst ops = [\n\t\t\t\tclients.A.makeOpMessage(\n\t\t\t\t\tclients.A.insertMarkerLocal(5, ReferenceType.Simple, {\n\t\t\t\t\t\t[reservedMarkerIdKey]: randomMarkerKey,\n\t\t\t\t\t}),\n\t\t\t\t\t1,\n\t\t\t\t),\n\t\t\t];\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tclients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after insert after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after insert after ack\",\n\t\t\t);\n\n\t\t\tops.push(clients.A.makeOpMessage(clients.A.obliterateRangeLocal(5, 6), 1));\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate before ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tclients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate before ack\",\n\t\t\t);\n\n\t\t\tfor (const op of ops.splice(0)) {\n\t\t\t\tfor (const c of clients.all) c.applyMsg(op);\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\t!clients.A.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"local client after obliterate after ack\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\t!clients.B.getMarkerFromId(randomMarkerKey),\n\t\t\t\t\"remote client after obliterate after ack\",\n\t\t\t);\n\t\t});\n\t});\n});\n"]}
@@ -4,10 +4,10 @@
4
4
  */
5
5
  export { createRevertDriver, getStats, MergeTreeStats, specToSegment, TestClient, TestClientRevertibleDriver, } from "./testClient.js";
6
6
  export { checkTextMatchRelative, TestServer } from "./testServer.js";
7
- export { countOperations, insertMarker, insertSegments, insertText, loadTextFromFile, loadTextFromFileWithMarkers, markRangeRemoved, nodeOrdinalsHaveIntegrity, validatePartialLengths, useStrictPartialLengthChecks, } from "./testUtils.js";
7
+ export { countOperations, loadTextFromFile, loadTextFromFileWithMarkers, nodeOrdinalsHaveIntegrity, validatePartialLengths, useStrictPartialLengthChecks, } from "./testUtils.js";
8
8
  export { annotateRange, applyMessages, doOverRange, generateClientNames, generateOperationMessagesForClients, IConfigRange, IMergeTreeOperationRunnerConfig, insertAtRefPos, removeRange, ReplayGroup, replayResultsPath, runMergeTreeOperationRunner, TestOperation, } from "./mergeTreeOperationRunner.js";
9
9
  export { LRUSegment, MergeTree, IMergeTreeOptions, IMergeTreeOptionsInternal, } from "../mergeTree.js";
10
10
  export { MergeTreeTextHelper } from "../MergeTreeTextHelper.js";
11
11
  export { SnapshotLegacy } from "../snapshotlegacy.js";
12
- export { addProperties, appendToMergeTreeDeltaRevertibles, BaseSegment, Client, CollaborationWindow, compareReferencePositions, ConflictAction, createAnnotateRangeOp, createDetachedLocalReferencePosition, createGroupOp, createInsertOp, createInsertSegmentOp, createMap, createRemoveRangeOp, DetachedReferencePosition, discardMergeTreeDeltaRevertible, IJSONMarkerSegment, IJSONSegment, IMarkerDef, IMergeTreeAnnotateMsg, IMergeTreeClientSequenceArgs, IMergeTreeDelta, IMergeTreeDeltaCallbackArgs, IMergeTreeDeltaOp, IMergeTreeDeltaOpArgs, IMergeTreeGroupMsg, IMergeTreeInsertMsg, IMergeTreeMaintenanceCallbackArgs, IMergeTreeOp, IMergeTreeRemoveMsg, IMergeTreeSegmentDelta, IMergeTreeTextHelper, IRBAugmentation, IRBMatcher, IRelativePosition, ISegment, ISegmentAction, KeyComparer, LocalReferenceCollection, LocalReferencePosition, MapLike, Marker, matchProperties, maxReferencePosition, MergeTreeDeltaOperationType, MergeTreeDeltaOperationTypes, MergeTreeDeltaRevertible, MergeTreeDeltaType, MergeTreeMaintenanceType, MergeTreeRevertibleDriver, minReferencePosition, PropertiesManager, Property, PropertyAction, PropertySet, RBNode, RBNodeActions, RedBlackTree, ReferencePosition, ReferenceType, refGetTileLabels, refHasTileLabel, refHasTileLabels, refTypeIncludesFlag, reservedMarkerIdKey, reservedMarkerSimpleTypeKey, reservedTileLabelsKey, revertMergeTreeDeltaRevertibles, SortedSegmentSet, SortedSegmentSetItem, SortedSet, TextSegment, Trackable, TrackingGroup, TrackingGroupCollection, UnassignedSequenceNumber, UniversalSequenceNumber, } from "../index.js";
12
+ export { addProperties, appendToMergeTreeDeltaRevertibles, BaseSegment, Client, CollaborationWindow, compareReferencePositions, ConflictAction, createAnnotateRangeOp, createDetachedLocalReferencePosition, createGroupOp, createInsertOp, createInsertSegmentOp, createMap, createRemoveRangeOp, DetachedReferencePosition, discardMergeTreeDeltaRevertible, IJSONMarkerSegment, IJSONSegment, IMarkerDef, IMergeTreeAnnotateMsg, IMergeTreeDelta, IMergeTreeDeltaCallbackArgs, IMergeTreeDeltaOp, IMergeTreeDeltaOpArgs, IMergeTreeGroupMsg, IMergeTreeInsertMsg, IMergeTreeMaintenanceCallbackArgs, IMergeTreeOp, IMergeTreeRemoveMsg, IMergeTreeSegmentDelta, IMergeTreeTextHelper, IRBAugmentation, IRBMatcher, IRelativePosition, ISegment, ISegmentAction, KeyComparer, LocalReferenceCollection, LocalReferencePosition, MapLike, Marker, matchProperties, maxReferencePosition, MergeTreeDeltaOperationType, MergeTreeDeltaOperationTypes, MergeTreeDeltaRevertible, MergeTreeDeltaType, MergeTreeMaintenanceType, MergeTreeRevertibleDriver, minReferencePosition, PropertiesManager, Property, PropertyAction, PropertySet, RBNode, RBNodeActions, RedBlackTree, ReferencePosition, ReferenceType, refGetTileLabels, refHasTileLabel, refHasTileLabels, refTypeIncludesFlag, reservedMarkerIdKey, reservedMarkerSimpleTypeKey, reservedTileLabelsKey, revertMergeTreeDeltaRevertibles, SortedSegmentSet, SortedSegmentSetItem, SortedSet, TextSegment, Trackable, TrackingGroup, TrackingGroupCollection, UnassignedSequenceNumber, UniversalSequenceNumber, } from "../index.js";
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,UAAU,EACV,0BAA0B,GAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACN,eAAe,EACf,YAAY,EACZ,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,aAAa,EACb,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,mCAAmC,EACnC,YAAY,EACZ,+BAA+B,EAC/B,cAAc,EACd,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,yBAAyB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,aAAa,EACb,iCAAiC,EACjC,WAAW,EACX,MAAM,EACN,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,oCAAoC,EACpC,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,SAAS,EACT,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,eAAe,EACf,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,iCAAiC,EACjC,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,WAAW,EACX,wBAAwB,EACxB,sBAAsB,EACtB,OAAO,EACP,MAAM,EACN,eAAe,EACf,oBAAoB,EACpB,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,WAAW,EACX,MAAM,EACN,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,+BAA+B,EAC/B,gBAAgB,EAChB,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,UAAU,EACV,0BAA0B,GAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,aAAa,EACb,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,mCAAmC,EACnC,YAAY,EACZ,+BAA+B,EAC/B,cAAc,EACd,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,yBAAyB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,aAAa,EACb,iCAAiC,EACjC,WAAW,EACX,MAAM,EACN,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,oCAAoC,EACpC,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,SAAS,EACT,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,eAAe,EACf,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,iCAAiC,EACjC,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,WAAW,EACX,wBAAwB,EACxB,sBAAsB,EACtB,OAAO,EACP,MAAM,EACN,eAAe,EACf,oBAAoB,EACpB,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,WAAW,EACX,MAAM,EACN,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,+BAA+B,EAC/B,gBAAgB,EAChB,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,aAAa,CAAC"}
@@ -4,8 +4,8 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.minReferencePosition = exports.MergeTreeMaintenanceType = exports.MergeTreeDeltaType = exports.maxReferencePosition = exports.matchProperties = exports.Marker = exports.LocalReferenceCollection = exports.discardMergeTreeDeltaRevertible = exports.DetachedReferencePosition = exports.createRemoveRangeOp = exports.createMap = exports.createInsertSegmentOp = exports.createInsertOp = exports.createGroupOp = exports.createDetachedLocalReferencePosition = exports.createAnnotateRangeOp = exports.compareReferencePositions = exports.CollaborationWindow = exports.Client = exports.BaseSegment = exports.appendToMergeTreeDeltaRevertibles = exports.addProperties = exports.SnapshotLegacy = exports.MergeTreeTextHelper = exports.MergeTree = exports.runMergeTreeOperationRunner = exports.replayResultsPath = exports.removeRange = exports.insertAtRefPos = exports.generateOperationMessagesForClients = exports.generateClientNames = exports.doOverRange = exports.applyMessages = exports.annotateRange = exports.useStrictPartialLengthChecks = exports.validatePartialLengths = exports.nodeOrdinalsHaveIntegrity = exports.markRangeRemoved = exports.loadTextFromFileWithMarkers = exports.loadTextFromFile = exports.insertText = exports.insertSegments = exports.insertMarker = exports.countOperations = exports.TestServer = exports.checkTextMatchRelative = exports.TestClient = exports.specToSegment = exports.getStats = exports.createRevertDriver = void 0;
8
- exports.UniversalSequenceNumber = exports.UnassignedSequenceNumber = exports.TrackingGroupCollection = exports.TrackingGroup = exports.TextSegment = exports.SortedSet = exports.SortedSegmentSet = exports.revertMergeTreeDeltaRevertibles = exports.reservedTileLabelsKey = exports.reservedMarkerSimpleTypeKey = exports.reservedMarkerIdKey = exports.refTypeIncludesFlag = exports.refHasTileLabels = exports.refHasTileLabel = exports.refGetTileLabels = exports.ReferenceType = exports.RedBlackTree = exports.PropertiesManager = void 0;
7
+ exports.refGetTileLabels = exports.ReferenceType = exports.RedBlackTree = exports.PropertiesManager = exports.minReferencePosition = exports.MergeTreeMaintenanceType = exports.MergeTreeDeltaType = exports.maxReferencePosition = exports.matchProperties = exports.Marker = exports.LocalReferenceCollection = exports.discardMergeTreeDeltaRevertible = exports.DetachedReferencePosition = exports.createRemoveRangeOp = exports.createMap = exports.createInsertSegmentOp = exports.createInsertOp = exports.createGroupOp = exports.createDetachedLocalReferencePosition = exports.createAnnotateRangeOp = exports.compareReferencePositions = exports.CollaborationWindow = exports.Client = exports.BaseSegment = exports.appendToMergeTreeDeltaRevertibles = exports.addProperties = exports.SnapshotLegacy = exports.MergeTreeTextHelper = exports.MergeTree = exports.runMergeTreeOperationRunner = exports.replayResultsPath = exports.removeRange = exports.insertAtRefPos = exports.generateOperationMessagesForClients = exports.generateClientNames = exports.doOverRange = exports.applyMessages = exports.annotateRange = exports.useStrictPartialLengthChecks = exports.validatePartialLengths = exports.nodeOrdinalsHaveIntegrity = exports.loadTextFromFileWithMarkers = exports.loadTextFromFile = exports.countOperations = exports.TestServer = exports.checkTextMatchRelative = exports.TestClient = exports.specToSegment = exports.getStats = exports.createRevertDriver = void 0;
8
+ exports.UniversalSequenceNumber = exports.UnassignedSequenceNumber = exports.TrackingGroupCollection = exports.TrackingGroup = exports.TextSegment = exports.SortedSet = exports.SortedSegmentSet = exports.revertMergeTreeDeltaRevertibles = exports.reservedTileLabelsKey = exports.reservedMarkerSimpleTypeKey = exports.reservedMarkerIdKey = exports.refTypeIncludesFlag = exports.refHasTileLabels = exports.refHasTileLabel = void 0;
9
9
  var testClient_js_1 = require("./testClient.js");
10
10
  Object.defineProperty(exports, "createRevertDriver", { enumerable: true, get: function () { return testClient_js_1.createRevertDriver; } });
11
11
  Object.defineProperty(exports, "getStats", { enumerable: true, get: function () { return testClient_js_1.getStats; } });
@@ -16,12 +16,8 @@ Object.defineProperty(exports, "checkTextMatchRelative", { enumerable: true, get
16
16
  Object.defineProperty(exports, "TestServer", { enumerable: true, get: function () { return testServer_js_1.TestServer; } });
17
17
  var testUtils_js_1 = require("./testUtils.js");
18
18
  Object.defineProperty(exports, "countOperations", { enumerable: true, get: function () { return testUtils_js_1.countOperations; } });
19
- Object.defineProperty(exports, "insertMarker", { enumerable: true, get: function () { return testUtils_js_1.insertMarker; } });
20
- Object.defineProperty(exports, "insertSegments", { enumerable: true, get: function () { return testUtils_js_1.insertSegments; } });
21
- Object.defineProperty(exports, "insertText", { enumerable: true, get: function () { return testUtils_js_1.insertText; } });
22
19
  Object.defineProperty(exports, "loadTextFromFile", { enumerable: true, get: function () { return testUtils_js_1.loadTextFromFile; } });
23
20
  Object.defineProperty(exports, "loadTextFromFileWithMarkers", { enumerable: true, get: function () { return testUtils_js_1.loadTextFromFileWithMarkers; } });
24
- Object.defineProperty(exports, "markRangeRemoved", { enumerable: true, get: function () { return testUtils_js_1.markRangeRemoved; } });
25
21
  Object.defineProperty(exports, "nodeOrdinalsHaveIntegrity", { enumerable: true, get: function () { return testUtils_js_1.nodeOrdinalsHaveIntegrity; } });
26
22
  Object.defineProperty(exports, "validatePartialLengths", { enumerable: true, get: function () { return testUtils_js_1.validatePartialLengths; } });
27
23
  Object.defineProperty(exports, "useStrictPartialLengthChecks", { enumerable: true, get: function () { return testUtils_js_1.useStrictPartialLengthChecks; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AAEH,iDAOyB;AANxB,mHAAA,kBAAkB,OAAA;AAClB,yGAAA,QAAQ,OAAA;AAER,8GAAA,aAAa,OAAA;AACb,2GAAA,UAAU,OAAA;AAGX,iDAAqE;AAA5D,uHAAA,sBAAsB,OAAA;AAAE,2GAAA,UAAU,OAAA;AAC3C,+CAWwB;AAVvB,+GAAA,eAAe,OAAA;AACf,4GAAA,YAAY,OAAA;AACZ,8GAAA,cAAc,OAAA;AACd,0GAAA,UAAU,OAAA;AACV,gHAAA,gBAAgB,OAAA;AAChB,2HAAA,2BAA2B,OAAA;AAC3B,gHAAA,gBAAgB,OAAA;AAChB,yHAAA,yBAAyB,OAAA;AACzB,sHAAA,sBAAsB,OAAA;AACtB,4HAAA,4BAA4B,OAAA;AAE7B,6EAcuC;AAbtC,4HAAA,aAAa,OAAA;AACb,4HAAA,aAAa,OAAA;AACb,0HAAA,WAAW,OAAA;AACX,kIAAA,mBAAmB,OAAA;AACnB,kJAAA,mCAAmC,OAAA;AAGnC,6HAAA,cAAc,OAAA;AACd,0HAAA,WAAW,OAAA;AAEX,gIAAA,iBAAiB,OAAA;AACjB,0IAAA,2BAA2B,OAAA;AAG5B,gDAKyB;AAHxB,yGAAA,SAAS,OAAA;AAIV,oEAAgE;AAAvD,6HAAA,mBAAmB,OAAA;AAC5B,0DAAsD;AAA7C,mHAAA,cAAc,OAAA;AACvB,wCA8EqB;AA7EpB,yGAAA,aAAa,OAAA;AACb,6HAAA,iCAAiC,OAAA;AACjC,uGAAA,WAAW,OAAA;AACX,kGAAA,MAAM,OAAA;AACN,+GAAA,mBAAmB,OAAA;AACnB,qHAAA,yBAAyB,OAAA;AAEzB,iHAAA,qBAAqB,OAAA;AACrB,gIAAA,oCAAoC,OAAA;AACpC,yGAAA,aAAa,OAAA;AACb,0GAAA,cAAc,OAAA;AACd,iHAAA,qBAAqB,OAAA;AACrB,qGAAA,SAAS,OAAA;AACT,+GAAA,mBAAmB,OAAA;AACnB,qHAAA,yBAAyB,OAAA;AACzB,2HAAA,+BAA+B,OAAA;AAuB/B,oHAAA,wBAAwB,OAAA;AAGxB,kGAAA,MAAM,OAAA;AACN,2GAAA,eAAe,OAAA;AACf,gHAAA,oBAAoB,OAAA;AAIpB,8GAAA,kBAAkB,OAAA;AAClB,oHAAA,wBAAwB,OAAA;AAExB,gHAAA,oBAAoB,OAAA;AACpB,6GAAA,iBAAiB,OAAA;AAMjB,wGAAA,YAAY,OAAA;AAEZ,yGAAA,aAAa,OAAA;AACb,4GAAA,gBAAgB,OAAA;AAChB,2GAAA,eAAe,OAAA;AACf,4GAAA,gBAAgB,OAAA;AAChB,+GAAA,mBAAmB,OAAA;AACnB,+GAAA,mBAAmB,OAAA;AACnB,uHAAA,2BAA2B,OAAA;AAC3B,iHAAA,qBAAqB,OAAA;AACrB,2HAAA,+BAA+B,OAAA;AAC/B,4GAAA,gBAAgB,OAAA;AAEhB,qGAAA,SAAS,OAAA;AACT,uGAAA,WAAW,OAAA;AAEX,yGAAA,aAAa,OAAA;AACb,mHAAA,uBAAuB,OAAA;AACvB,oHAAA,wBAAwB,OAAA;AACxB,mHAAA,uBAAuB,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tcreateRevertDriver,\n\tgetStats,\n\tMergeTreeStats,\n\tspecToSegment,\n\tTestClient,\n\tTestClientRevertibleDriver,\n} from \"./testClient.js\";\nexport { checkTextMatchRelative, TestServer } from \"./testServer.js\";\nexport {\n\tcountOperations,\n\tinsertMarker,\n\tinsertSegments,\n\tinsertText,\n\tloadTextFromFile,\n\tloadTextFromFileWithMarkers,\n\tmarkRangeRemoved,\n\tnodeOrdinalsHaveIntegrity,\n\tvalidatePartialLengths,\n\tuseStrictPartialLengthChecks,\n} from \"./testUtils.js\";\nexport {\n\tannotateRange,\n\tapplyMessages,\n\tdoOverRange,\n\tgenerateClientNames,\n\tgenerateOperationMessagesForClients,\n\tIConfigRange,\n\tIMergeTreeOperationRunnerConfig,\n\tinsertAtRefPos,\n\tremoveRange,\n\tReplayGroup,\n\treplayResultsPath,\n\trunMergeTreeOperationRunner,\n\tTestOperation,\n} from \"./mergeTreeOperationRunner.js\";\nexport {\n\tLRUSegment,\n\tMergeTree,\n\tIMergeTreeOptions,\n\tIMergeTreeOptionsInternal,\n} from \"../mergeTree.js\";\nexport { MergeTreeTextHelper } from \"../MergeTreeTextHelper.js\";\nexport { SnapshotLegacy } from \"../snapshotlegacy.js\";\nexport {\n\taddProperties,\n\tappendToMergeTreeDeltaRevertibles,\n\tBaseSegment,\n\tClient,\n\tCollaborationWindow,\n\tcompareReferencePositions,\n\tConflictAction,\n\tcreateAnnotateRangeOp,\n\tcreateDetachedLocalReferencePosition,\n\tcreateGroupOp,\n\tcreateInsertOp,\n\tcreateInsertSegmentOp,\n\tcreateMap,\n\tcreateRemoveRangeOp,\n\tDetachedReferencePosition,\n\tdiscardMergeTreeDeltaRevertible,\n\tIJSONMarkerSegment,\n\tIJSONSegment,\n\tIMarkerDef,\n\tIMergeTreeAnnotateMsg,\n\tIMergeTreeClientSequenceArgs,\n\tIMergeTreeDelta,\n\tIMergeTreeDeltaCallbackArgs,\n\tIMergeTreeDeltaOp,\n\tIMergeTreeDeltaOpArgs,\n\tIMergeTreeGroupMsg,\n\tIMergeTreeInsertMsg,\n\tIMergeTreeMaintenanceCallbackArgs,\n\tIMergeTreeOp,\n\tIMergeTreeRemoveMsg,\n\tIMergeTreeSegmentDelta,\n\tIMergeTreeTextHelper,\n\tIRBAugmentation,\n\tIRBMatcher,\n\tIRelativePosition,\n\tISegment,\n\tISegmentAction,\n\tKeyComparer,\n\tLocalReferenceCollection,\n\tLocalReferencePosition,\n\tMapLike,\n\tMarker,\n\tmatchProperties,\n\tmaxReferencePosition,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaOperationTypes,\n\tMergeTreeDeltaRevertible,\n\tMergeTreeDeltaType,\n\tMergeTreeMaintenanceType,\n\tMergeTreeRevertibleDriver,\n\tminReferencePosition,\n\tPropertiesManager,\n\tProperty,\n\tPropertyAction,\n\tPropertySet,\n\tRBNode,\n\tRBNodeActions,\n\tRedBlackTree,\n\tReferencePosition,\n\tReferenceType,\n\trefGetTileLabels,\n\trefHasTileLabel,\n\trefHasTileLabels,\n\trefTypeIncludesFlag,\n\treservedMarkerIdKey,\n\treservedMarkerSimpleTypeKey,\n\treservedTileLabelsKey,\n\trevertMergeTreeDeltaRevertibles,\n\tSortedSegmentSet,\n\tSortedSegmentSetItem,\n\tSortedSet,\n\tTextSegment,\n\tTrackable,\n\tTrackingGroup,\n\tTrackingGroupCollection,\n\tUnassignedSequenceNumber,\n\tUniversalSequenceNumber,\n} from \"../index.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AAEH,iDAOyB;AANxB,mHAAA,kBAAkB,OAAA;AAClB,yGAAA,QAAQ,OAAA;AAER,8GAAA,aAAa,OAAA;AACb,2GAAA,UAAU,OAAA;AAGX,iDAAqE;AAA5D,uHAAA,sBAAsB,OAAA;AAAE,2GAAA,UAAU,OAAA;AAC3C,+CAOwB;AANvB,+GAAA,eAAe,OAAA;AACf,gHAAA,gBAAgB,OAAA;AAChB,2HAAA,2BAA2B,OAAA;AAC3B,yHAAA,yBAAyB,OAAA;AACzB,sHAAA,sBAAsB,OAAA;AACtB,4HAAA,4BAA4B,OAAA;AAE7B,6EAcuC;AAbtC,4HAAA,aAAa,OAAA;AACb,4HAAA,aAAa,OAAA;AACb,0HAAA,WAAW,OAAA;AACX,kIAAA,mBAAmB,OAAA;AACnB,kJAAA,mCAAmC,OAAA;AAGnC,6HAAA,cAAc,OAAA;AACd,0HAAA,WAAW,OAAA;AAEX,gIAAA,iBAAiB,OAAA;AACjB,0IAAA,2BAA2B,OAAA;AAG5B,gDAKyB;AAHxB,yGAAA,SAAS,OAAA;AAIV,oEAAgE;AAAvD,6HAAA,mBAAmB,OAAA;AAC5B,0DAAsD;AAA7C,mHAAA,cAAc,OAAA;AACvB,wCA6EqB;AA5EpB,yGAAA,aAAa,OAAA;AACb,6HAAA,iCAAiC,OAAA;AACjC,uGAAA,WAAW,OAAA;AACX,kGAAA,MAAM,OAAA;AACN,+GAAA,mBAAmB,OAAA;AACnB,qHAAA,yBAAyB,OAAA;AAEzB,iHAAA,qBAAqB,OAAA;AACrB,gIAAA,oCAAoC,OAAA;AACpC,yGAAA,aAAa,OAAA;AACb,0GAAA,cAAc,OAAA;AACd,iHAAA,qBAAqB,OAAA;AACrB,qGAAA,SAAS,OAAA;AACT,+GAAA,mBAAmB,OAAA;AACnB,qHAAA,yBAAyB,OAAA;AACzB,2HAAA,+BAA+B,OAAA;AAsB/B,oHAAA,wBAAwB,OAAA;AAGxB,kGAAA,MAAM,OAAA;AACN,2GAAA,eAAe,OAAA;AACf,gHAAA,oBAAoB,OAAA;AAIpB,8GAAA,kBAAkB,OAAA;AAClB,oHAAA,wBAAwB,OAAA;AAExB,gHAAA,oBAAoB,OAAA;AACpB,6GAAA,iBAAiB,OAAA;AAMjB,wGAAA,YAAY,OAAA;AAEZ,yGAAA,aAAa,OAAA;AACb,4GAAA,gBAAgB,OAAA;AAChB,2GAAA,eAAe,OAAA;AACf,4GAAA,gBAAgB,OAAA;AAChB,+GAAA,mBAAmB,OAAA;AACnB,+GAAA,mBAAmB,OAAA;AACnB,uHAAA,2BAA2B,OAAA;AAC3B,iHAAA,qBAAqB,OAAA;AACrB,2HAAA,+BAA+B,OAAA;AAC/B,4GAAA,gBAAgB,OAAA;AAEhB,qGAAA,SAAS,OAAA;AACT,uGAAA,WAAW,OAAA;AAEX,yGAAA,aAAa,OAAA;AACb,mHAAA,uBAAuB,OAAA;AACvB,oHAAA,wBAAwB,OAAA;AACxB,mHAAA,uBAAuB,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tcreateRevertDriver,\n\tgetStats,\n\tMergeTreeStats,\n\tspecToSegment,\n\tTestClient,\n\tTestClientRevertibleDriver,\n} from \"./testClient.js\";\nexport { checkTextMatchRelative, TestServer } from \"./testServer.js\";\nexport {\n\tcountOperations,\n\tloadTextFromFile,\n\tloadTextFromFileWithMarkers,\n\tnodeOrdinalsHaveIntegrity,\n\tvalidatePartialLengths,\n\tuseStrictPartialLengthChecks,\n} from \"./testUtils.js\";\nexport {\n\tannotateRange,\n\tapplyMessages,\n\tdoOverRange,\n\tgenerateClientNames,\n\tgenerateOperationMessagesForClients,\n\tIConfigRange,\n\tIMergeTreeOperationRunnerConfig,\n\tinsertAtRefPos,\n\tremoveRange,\n\tReplayGroup,\n\treplayResultsPath,\n\trunMergeTreeOperationRunner,\n\tTestOperation,\n} from \"./mergeTreeOperationRunner.js\";\nexport {\n\tLRUSegment,\n\tMergeTree,\n\tIMergeTreeOptions,\n\tIMergeTreeOptionsInternal,\n} from \"../mergeTree.js\";\nexport { MergeTreeTextHelper } from \"../MergeTreeTextHelper.js\";\nexport { SnapshotLegacy } from \"../snapshotlegacy.js\";\nexport {\n\taddProperties,\n\tappendToMergeTreeDeltaRevertibles,\n\tBaseSegment,\n\tClient,\n\tCollaborationWindow,\n\tcompareReferencePositions,\n\tConflictAction,\n\tcreateAnnotateRangeOp,\n\tcreateDetachedLocalReferencePosition,\n\tcreateGroupOp,\n\tcreateInsertOp,\n\tcreateInsertSegmentOp,\n\tcreateMap,\n\tcreateRemoveRangeOp,\n\tDetachedReferencePosition,\n\tdiscardMergeTreeDeltaRevertible,\n\tIJSONMarkerSegment,\n\tIJSONSegment,\n\tIMarkerDef,\n\tIMergeTreeAnnotateMsg,\n\tIMergeTreeDelta,\n\tIMergeTreeDeltaCallbackArgs,\n\tIMergeTreeDeltaOp,\n\tIMergeTreeDeltaOpArgs,\n\tIMergeTreeGroupMsg,\n\tIMergeTreeInsertMsg,\n\tIMergeTreeMaintenanceCallbackArgs,\n\tIMergeTreeOp,\n\tIMergeTreeRemoveMsg,\n\tIMergeTreeSegmentDelta,\n\tIMergeTreeTextHelper,\n\tIRBAugmentation,\n\tIRBMatcher,\n\tIRelativePosition,\n\tISegment,\n\tISegmentAction,\n\tKeyComparer,\n\tLocalReferenceCollection,\n\tLocalReferencePosition,\n\tMapLike,\n\tMarker,\n\tmatchProperties,\n\tmaxReferencePosition,\n\tMergeTreeDeltaOperationType,\n\tMergeTreeDeltaOperationTypes,\n\tMergeTreeDeltaRevertible,\n\tMergeTreeDeltaType,\n\tMergeTreeMaintenanceType,\n\tMergeTreeRevertibleDriver,\n\tminReferencePosition,\n\tPropertiesManager,\n\tProperty,\n\tPropertyAction,\n\tPropertySet,\n\tRBNode,\n\tRBNodeActions,\n\tRedBlackTree,\n\tReferencePosition,\n\tReferenceType,\n\trefGetTileLabels,\n\trefHasTileLabel,\n\trefHasTileLabels,\n\trefTypeIncludesFlag,\n\treservedMarkerIdKey,\n\treservedMarkerSimpleTypeKey,\n\treservedTileLabelsKey,\n\trevertMergeTreeDeltaRevertibles,\n\tSortedSegmentSet,\n\tSortedSegmentSetItem,\n\tSortedSet,\n\tTextSegment,\n\tTrackable,\n\tTrackingGroup,\n\tTrackingGroupCollection,\n\tUnassignedSequenceNumber,\n\tUniversalSequenceNumber,\n} from \"../index.js\";\n"]}
@@ -5,7 +5,6 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const node_assert_1 = require("node:assert");
8
- const constants_js_1 = require("../constants.js");
9
8
  const mergeTree_js_1 = require("../mergeTree.js");
10
9
  const mergeTreeDeltaCallback_js_1 = require("../mergeTreeDeltaCallback.js");
11
10
  const ops_js_1 = require("../ops.js");
@@ -17,15 +16,7 @@ describe("MergeTree", () => {
17
16
  let currentSequenceNumber;
18
17
  beforeEach(() => {
19
18
  mergeTree = new mergeTree_js_1.MergeTree();
20
- (0, testUtils_js_1.insertSegments)({
21
- mergeTree,
22
- pos: 0,
23
- segments: [textSegment_js_1.TextSegment.make("hello world")],
24
- refSeq: constants_js_1.UniversalSequenceNumber,
25
- clientId: constants_js_1.LocalClientId,
26
- seq: constants_js_1.UniversalSequenceNumber,
27
- opArgs: undefined,
28
- });
19
+ mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("hello world")], mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
29
20
  currentSequenceNumber = 0;
30
21
  mergeTree.startCollaboration(localClientId,
31
22
  /* minSeq: */ currentSequenceNumber,
@@ -36,7 +27,7 @@ describe("MergeTree", () => {
36
27
  const count = (0, testUtils_js_1.countOperations)(mergeTree);
37
28
  mergeTree.annotateRange(4, 6, {
38
29
  props: { foo: "bar" },
39
- }, currentSequenceNumber, localClientId, constants_js_1.UnassignedSequenceNumber, undefined);
30
+ }, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
40
31
  node_assert_1.strict.deepStrictEqual(count, {
41
32
  [ops_js_1.MergeTreeDeltaType.ANNOTATE]: 1,
42
33
  [mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
@@ -46,92 +37,56 @@ describe("MergeTree", () => {
46
37
  const count = (0, testUtils_js_1.countOperations)(mergeTree);
47
38
  mergeTree.annotateRange(3, 3, {
48
39
  props: { foo: "bar" },
49
- }, currentSequenceNumber, localClientId, ++currentSequenceNumber, undefined);
40
+ }, mergeTree.localPerspective, { seq: ++currentSequenceNumber, clientId: localClientId }, undefined);
50
41
  node_assert_1.strict.deepStrictEqual(count, {
51
42
  [mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 1,
52
43
  });
53
44
  });
54
45
  it("Annotate over local insertion", () => {
55
- (0, testUtils_js_1.insertText)({
56
- mergeTree,
57
- pos: 4,
58
- refSeq: currentSequenceNumber,
59
- clientId: localClientId,
60
- seq: constants_js_1.UnassignedSequenceNumber,
61
- text: "a",
62
- props: undefined,
63
- opArgs: undefined,
64
- });
46
+ mergeTree.insertSegments(4, [textSegment_js_1.TextSegment.make("a")], mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
65
47
  const count = (0, testUtils_js_1.countOperations)(mergeTree);
66
48
  mergeTree.annotateRange(3, 8, {
67
49
  props: { foo: "bar" },
68
- }, currentSequenceNumber, localClientId, constants_js_1.UnassignedSequenceNumber, undefined);
50
+ }, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
69
51
  node_assert_1.strict.deepStrictEqual(count, {
70
52
  [ops_js_1.MergeTreeDeltaType.ANNOTATE]: 1,
71
53
  [mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
72
54
  });
73
55
  });
74
56
  it("Annotate over remote insertion", () => {
75
- const remoteClientId = 35;
57
+ const remoteClient = (0, testUtils_js_1.makeRemoteClient)({ clientId: 35 });
76
58
  let remoteSequenceNumber = currentSequenceNumber;
77
- (0, testUtils_js_1.insertText)({
78
- mergeTree,
79
- pos: 4,
80
- refSeq: remoteSequenceNumber,
81
- clientId: remoteClientId,
82
- seq: ++remoteSequenceNumber,
83
- text: "a",
84
- props: undefined,
85
- opArgs: undefined,
86
- });
59
+ mergeTree.insertSegments(4, [textSegment_js_1.TextSegment.make("a")], remoteClient.perspectiveAt({ refSeq: remoteSequenceNumber }), remoteClient.stampAt({ seq: ++remoteSequenceNumber }), undefined);
87
60
  const count = (0, testUtils_js_1.countOperations)(mergeTree);
88
61
  mergeTree.annotateRange(3, 8, {
89
62
  props: { foo: "bar" },
90
- }, currentSequenceNumber, localClientId, constants_js_1.UnassignedSequenceNumber, undefined);
63
+ }, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
91
64
  node_assert_1.strict.deepStrictEqual(count, {
92
65
  [ops_js_1.MergeTreeDeltaType.ANNOTATE]: 1,
93
66
  [mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
94
67
  });
95
68
  });
96
69
  it("Annotate over remote deletion", () => {
97
- const remoteClientId = 35;
70
+ const remoteClient = (0, testUtils_js_1.makeRemoteClient)({ clientId: 35 });
98
71
  let remoteSequenceNumber = currentSequenceNumber;
99
- (0, testUtils_js_1.markRangeRemoved)({
100
- mergeTree,
101
- start: 4,
102
- end: 6,
103
- refSeq: remoteSequenceNumber,
104
- clientId: remoteClientId,
105
- seq: ++remoteSequenceNumber,
106
- overwrite: false,
107
- opArgs: undefined,
108
- });
72
+ mergeTree.markRangeRemoved(4, 6, remoteClient.perspectiveAt({ refSeq: remoteSequenceNumber }), remoteClient.stampAt({ seq: ++remoteSequenceNumber }), undefined);
109
73
  const count = (0, testUtils_js_1.countOperations)(mergeTree);
110
74
  mergeTree.annotateRange(3, 8, {
111
75
  props: { foo: "bar" },
112
- }, currentSequenceNumber, localClientId, constants_js_1.UnassignedSequenceNumber, undefined);
76
+ }, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
113
77
  node_assert_1.strict.deepStrictEqual(count, {
114
78
  [ops_js_1.MergeTreeDeltaType.ANNOTATE]: 1,
115
79
  [mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
116
80
  });
117
81
  });
118
82
  it("Remote annotate within local deletion", () => {
119
- const remoteClientId = 35;
83
+ const remoteClient = (0, testUtils_js_1.makeRemoteClient)({ clientId: 35 });
120
84
  let remoteSequenceNumber = currentSequenceNumber;
121
- (0, testUtils_js_1.markRangeRemoved)({
122
- mergeTree,
123
- start: 3,
124
- end: 8,
125
- refSeq: currentSequenceNumber,
126
- clientId: localClientId,
127
- seq: constants_js_1.UnassignedSequenceNumber,
128
- overwrite: false,
129
- opArgs: undefined,
130
- });
85
+ mergeTree.markRangeRemoved(3, 8, mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
131
86
  const count = (0, testUtils_js_1.countOperations)(mergeTree);
132
87
  mergeTree.annotateRange(4, 6, {
133
88
  props: { foo: "bar" },
134
- }, remoteSequenceNumber, remoteClientId, ++remoteSequenceNumber, undefined);
89
+ }, remoteClient.perspectiveAt({ refSeq: remoteSequenceNumber }), remoteClient.stampAt({ seq: ++remoteSequenceNumber }), undefined);
135
90
  node_assert_1.strict.deepStrictEqual(count, {
136
91
  [mergeTreeDeltaCallback_js_1.MergeTreeMaintenanceType.SPLIT]: 2,
137
92
  });