@fluidframework/tree 2.80.0 → 2.81.0-374083

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 (914) hide show
  1. package/api-report/tree.alpha.api.md +43 -7
  2. package/dist/alpha.d.ts +5 -0
  3. package/dist/core/change-family/changeFamily.d.ts +4 -1
  4. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  5. package/dist/core/change-family/changeFamily.js.map +1 -1
  6. package/dist/core/change-family/index.d.ts +1 -1
  7. package/dist/core/change-family/index.d.ts.map +1 -1
  8. package/dist/core/change-family/index.js.map +1 -1
  9. package/dist/core/index.d.ts +3 -3
  10. package/dist/core/index.d.ts.map +1 -1
  11. package/dist/core/index.js +6 -4
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/rebase/changeRebaser.d.ts +6 -1
  14. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  15. package/dist/core/rebase/changeRebaser.js.map +1 -1
  16. package/dist/core/rebase/index.d.ts +1 -1
  17. package/dist/core/rebase/index.d.ts.map +1 -1
  18. package/dist/core/rebase/index.js +2 -1
  19. package/dist/core/rebase/index.js.map +1 -1
  20. package/dist/core/rebase/types.d.ts +46 -8
  21. package/dist/core/rebase/types.d.ts.map +1 -1
  22. package/dist/core/rebase/types.js +5 -1
  23. package/dist/core/rebase/types.js.map +1 -1
  24. package/dist/core/rebase/utils.d.ts.map +1 -1
  25. package/dist/core/rebase/utils.js +30 -8
  26. package/dist/core/rebase/utils.js.map +1 -1
  27. package/dist/core/tree/anchorSet.js +1 -0
  28. package/dist/core/tree/anchorSet.js.map +1 -1
  29. package/dist/core/tree/detachedFieldIndex.d.ts +6 -0
  30. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  31. package/dist/core/tree/detachedFieldIndex.js +9 -0
  32. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  33. package/dist/core/tree/index.d.ts +1 -1
  34. package/dist/core/tree/index.d.ts.map +1 -1
  35. package/dist/core/tree/index.js +4 -3
  36. package/dist/core/tree/index.js.map +1 -1
  37. package/dist/core/tree/pathTree.d.ts +11 -3
  38. package/dist/core/tree/pathTree.d.ts.map +1 -1
  39. package/dist/core/tree/pathTree.js +14 -2
  40. package/dist/core/tree/pathTree.js.map +1 -1
  41. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  42. package/dist/core/tree/visitDelta.js +3 -2
  43. package/dist/core/tree/visitDelta.js.map +1 -1
  44. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  45. package/dist/core/tree/visitorUtils.js +58 -18
  46. package/dist/core/tree/visitorUtils.js.map +1 -1
  47. package/dist/feature-libraries/changeAtomIdBTree.d.ts +10 -4
  48. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  49. package/dist/feature-libraries/changeAtomIdBTree.js +16 -2
  50. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  51. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/basicChunk.js +7 -0
  53. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  54. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  55. package/dist/feature-libraries/chunked-forest/chunkTree.js +4 -1
  56. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  58. package/dist/feature-libraries/chunked-forest/chunkedForest.js +3 -1
  59. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  60. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -0
  61. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  62. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +93 -44
  63. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  64. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +238 -69
  65. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  66. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -1
  67. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  68. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +11 -2
  69. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  70. package/dist/feature-libraries/default-schema/index.d.ts +2 -1
  71. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  72. package/dist/feature-libraries/default-schema/index.js +5 -2
  73. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  74. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +38 -0
  75. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  76. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +132 -0
  77. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  78. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  79. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  80. package/dist/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  81. package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  82. package/dist/feature-libraries/deltaUtils.d.ts +1 -0
  83. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  84. package/dist/feature-libraries/deltaUtils.js +6 -1
  85. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  86. package/dist/feature-libraries/flex-tree/context.d.ts +9 -0
  87. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  88. package/dist/feature-libraries/flex-tree/context.js +6 -0
  89. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  90. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  91. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  92. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  93. package/dist/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  94. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  95. package/dist/feature-libraries/flex-tree/lazyField.js +40 -9
  96. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  97. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  98. package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -1
  99. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  100. package/dist/feature-libraries/index.d.ts +3 -3
  101. package/dist/feature-libraries/index.d.ts.map +1 -1
  102. package/dist/feature-libraries/index.js +8 -3
  103. package/dist/feature-libraries/index.js.map +1 -1
  104. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  105. package/dist/feature-libraries/mapTreeCursor.js +1 -0
  106. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  107. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  108. package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
  109. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  110. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +97 -21
  111. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  112. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +4 -7
  113. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  114. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +20 -51
  115. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  116. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  117. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  118. package/dist/feature-libraries/modular-schema/genericFieldKind.js +3 -9
  119. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  120. package/dist/feature-libraries/modular-schema/index.d.ts +4 -4
  121. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  122. package/dist/feature-libraries/modular-schema/index.js +2 -2
  123. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  124. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +11 -28
  125. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  126. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +255 -161
  127. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  128. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  129. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  130. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +393 -0
  131. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  132. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  133. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +8 -1
  134. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  135. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +48 -20
  136. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  137. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +1350 -476
  138. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  139. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  140. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  141. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +146 -0
  142. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  143. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +32 -0
  144. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  145. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +47 -11
  146. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  147. package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
  148. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  149. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  150. package/dist/feature-libraries/object-forest/objectForest.js +3 -1
  151. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  152. package/dist/feature-libraries/optional-field/index.d.ts +2 -2
  153. package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
  154. package/dist/feature-libraries/optional-field/index.js +1 -2
  155. package/dist/feature-libraries/optional-field/index.js.map +1 -1
  156. package/dist/feature-libraries/optional-field/optionalField.d.ts +5 -26
  157. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  158. package/dist/feature-libraries/optional-field/optionalField.js +221 -443
  159. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  160. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  161. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  162. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +31 -0
  163. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  164. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +24 -33
  165. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  166. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  167. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  168. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  169. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +57 -28
  170. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  171. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  172. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  173. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +57 -0
  174. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  175. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  176. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  177. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  178. package/dist/feature-libraries/sequence-field/compose.d.ts +6 -7
  179. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  180. package/dist/feature-libraries/sequence-field/compose.js +83 -259
  181. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  182. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  183. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  184. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  185. package/dist/feature-libraries/sequence-field/index.d.ts +2 -3
  186. package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
  187. package/dist/feature-libraries/sequence-field/index.js +1 -3
  188. package/dist/feature-libraries/sequence-field/index.js.map +1 -1
  189. package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
  190. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  191. package/dist/feature-libraries/sequence-field/invert.js +65 -167
  192. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  193. package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  194. package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  195. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  196. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  197. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  198. package/dist/feature-libraries/sequence-field/moveEffectTable.js +7 -90
  199. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  200. package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
  201. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  202. package/dist/feature-libraries/sequence-field/rebase.js +107 -114
  203. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  204. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  205. package/dist/feature-libraries/sequence-field/replaceRevisions.js +18 -31
  206. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  207. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  208. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +0 -2
  209. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  210. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  211. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  212. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +365 -187
  213. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  214. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  215. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +20 -62
  216. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  217. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  218. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  219. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
  220. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  221. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  222. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  223. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +14 -109
  224. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  225. package/dist/feature-libraries/sequence-field/types.d.ts +30 -59
  226. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  227. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  228. package/dist/feature-libraries/sequence-field/utils.d.ts +15 -24
  229. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  230. package/dist/feature-libraries/sequence-field/utils.js +116 -305
  231. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  232. package/dist/index.d.ts +3 -2
  233. package/dist/index.d.ts.map +1 -1
  234. package/dist/index.js +4 -1
  235. package/dist/index.js.map +1 -1
  236. package/dist/packageVersion.d.ts +1 -1
  237. package/dist/packageVersion.d.ts.map +1 -1
  238. package/dist/packageVersion.js +1 -1
  239. package/dist/packageVersion.js.map +1 -1
  240. package/dist/shared-tree/index.d.ts +1 -1
  241. package/dist/shared-tree/index.d.ts.map +1 -1
  242. package/dist/shared-tree/index.js.map +1 -1
  243. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  244. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  245. package/dist/shared-tree/schematizeTree.js +2 -1
  246. package/dist/shared-tree/schematizeTree.js.map +1 -1
  247. package/dist/shared-tree/schematizingTreeView.d.ts +1 -5
  248. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  249. package/dist/shared-tree/schematizingTreeView.js +38 -35
  250. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  251. package/dist/shared-tree/sharedTree.d.ts +9 -3
  252. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  253. package/dist/shared-tree/sharedTree.js +11 -0
  254. package/dist/shared-tree/sharedTree.js.map +1 -1
  255. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  256. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  257. package/dist/shared-tree/sharedTreeChangeCodecs.js +1 -0
  258. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  259. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  260. package/dist/shared-tree/sharedTreeChangeEnricher.js +1 -1
  261. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  262. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
  263. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  264. package/dist/shared-tree/sharedTreeChangeFamily.js +10 -4
  265. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  266. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  267. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  268. package/dist/shared-tree/sharedTreeEditBuilder.js +14 -7
  269. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  270. package/dist/shared-tree/treeCheckout.d.ts +9 -10
  271. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  272. package/dist/shared-tree/treeCheckout.js +63 -8
  273. package/dist/shared-tree/treeCheckout.js.map +1 -1
  274. package/dist/shared-tree-core/branch.d.ts +3 -2
  275. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  276. package/dist/shared-tree-core/branch.js +9 -4
  277. package/dist/shared-tree-core/branch.js.map +1 -1
  278. package/dist/shared-tree-core/editManager.d.ts +2 -2
  279. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  280. package/dist/shared-tree-core/editManager.js +20 -14
  281. package/dist/shared-tree-core/editManager.js.map +1 -1
  282. package/dist/shared-tree-core/editManagerCodecs.d.ts +4 -0
  283. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  284. package/dist/shared-tree-core/editManagerCodecs.js +10 -2
  285. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  286. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  287. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  288. package/dist/shared-tree-core/editManagerFormatCommons.js +6 -0
  289. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  290. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  291. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  292. package/dist/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  293. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  294. package/dist/shared-tree-core/index.d.ts +2 -2
  295. package/dist/shared-tree-core/index.d.ts.map +1 -1
  296. package/dist/shared-tree-core/index.js +3 -1
  297. package/dist/shared-tree-core/index.js.map +1 -1
  298. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  299. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  300. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  301. package/dist/shared-tree-core/messageCodecs.d.ts +4 -0
  302. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  303. package/dist/shared-tree-core/messageCodecs.js +10 -2
  304. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  305. package/dist/shared-tree-core/messageFormat.d.ts +1 -0
  306. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  307. package/dist/shared-tree-core/messageFormat.js +6 -0
  308. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  309. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  310. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  311. package/dist/shared-tree-core/messageFormatV1ToV4.js +1 -0
  312. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  313. package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -0
  314. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  315. package/dist/shared-tree-core/sharedTreeCore.js +1 -1
  316. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  317. package/dist/simple-tree/api/index.d.ts +1 -1
  318. package/dist/simple-tree/api/index.d.ts.map +1 -1
  319. package/dist/simple-tree/api/index.js +2 -1
  320. package/dist/simple-tree/api/index.js.map +1 -1
  321. package/dist/simple-tree/api/schemaFactoryAlpha.js +1 -1
  322. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  323. package/dist/simple-tree/api/schemaFactoryBeta.js +1 -1
  324. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  325. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
  326. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  327. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +244 -0
  328. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  329. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +297 -1
  330. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  331. package/dist/simple-tree/api/tree.d.ts +3 -1
  332. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  333. package/dist/simple-tree/api/tree.js.map +1 -1
  334. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  335. package/dist/simple-tree/core/treeNodeKernel.js +6 -2
  336. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  337. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +15 -15
  338. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  339. package/dist/simple-tree/core/unhydratedFlexTree.js +59 -8
  340. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  341. package/dist/simple-tree/fieldSchema.d.ts +4 -4
  342. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  343. package/dist/simple-tree/fieldSchema.js.map +1 -1
  344. package/dist/simple-tree/index.d.ts +3 -3
  345. package/dist/simple-tree/index.d.ts.map +1 -1
  346. package/dist/simple-tree/index.js +4 -3
  347. package/dist/simple-tree/index.js.map +1 -1
  348. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  349. package/dist/simple-tree/node-kinds/array/arrayNode.js +7 -5
  350. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  351. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  352. package/dist/simple-tree/node-kinds/common.js +1 -1
  353. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  354. package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
  355. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  356. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  357. package/dist/simple-tree/node-kinds/object/objectNode.js +19 -19
  358. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  359. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  360. package/dist/simple-tree/node-kinds/record/recordNode.js +4 -2
  361. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  362. package/dist/simple-tree/prepareForInsertion.d.ts +54 -47
  363. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  364. package/dist/simple-tree/prepareForInsertion.js +184 -126
  365. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  366. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +13 -4
  367. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  368. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +31 -13
  369. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  370. package/dist/text/index.d.ts +6 -0
  371. package/dist/text/index.d.ts.map +1 -0
  372. package/dist/text/index.js +10 -0
  373. package/dist/text/index.js.map +1 -0
  374. package/dist/text/textDomain.d.ts +138 -0
  375. package/dist/text/textDomain.d.ts.map +1 -0
  376. package/dist/text/textDomain.js +121 -0
  377. package/dist/text/textDomain.js.map +1 -0
  378. package/dist/treeFactory.d.ts.map +1 -1
  379. package/dist/treeFactory.js +12 -2
  380. package/dist/treeFactory.js.map +1 -1
  381. package/dist/util/bTreeUtils.d.ts +12 -4
  382. package/dist/util/bTreeUtils.d.ts.map +1 -1
  383. package/dist/util/bTreeUtils.js +14 -18
  384. package/dist/util/bTreeUtils.js.map +1 -1
  385. package/dist/util/index.d.ts +1 -1
  386. package/dist/util/index.d.ts.map +1 -1
  387. package/dist/util/index.js +2 -1
  388. package/dist/util/index.js.map +1 -1
  389. package/dist/util/nestedMap.js +12 -12
  390. package/dist/util/nestedMap.js.map +1 -1
  391. package/dist/util/rangeMap.d.ts +24 -12
  392. package/dist/util/rangeMap.d.ts.map +1 -1
  393. package/dist/util/rangeMap.js +46 -6
  394. package/dist/util/rangeMap.js.map +1 -1
  395. package/docs/user-facing/merge-semantics.md +3 -2
  396. package/eslint.config.mts +4 -32
  397. package/lib/alpha.d.ts +5 -0
  398. package/lib/core/change-family/changeFamily.d.ts +4 -1
  399. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  400. package/lib/core/change-family/changeFamily.js.map +1 -1
  401. package/lib/core/change-family/index.d.ts +1 -1
  402. package/lib/core/change-family/index.d.ts.map +1 -1
  403. package/lib/core/change-family/index.js.map +1 -1
  404. package/lib/core/index.d.ts +3 -3
  405. package/lib/core/index.d.ts.map +1 -1
  406. package/lib/core/index.js +2 -2
  407. package/lib/core/index.js.map +1 -1
  408. package/lib/core/rebase/changeRebaser.d.ts +6 -1
  409. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  410. package/lib/core/rebase/changeRebaser.js.map +1 -1
  411. package/lib/core/rebase/index.d.ts +1 -1
  412. package/lib/core/rebase/index.d.ts.map +1 -1
  413. package/lib/core/rebase/index.js +1 -1
  414. package/lib/core/rebase/index.js.map +1 -1
  415. package/lib/core/rebase/types.d.ts +46 -8
  416. package/lib/core/rebase/types.d.ts.map +1 -1
  417. package/lib/core/rebase/types.js +3 -0
  418. package/lib/core/rebase/types.js.map +1 -1
  419. package/lib/core/rebase/utils.d.ts.map +1 -1
  420. package/lib/core/rebase/utils.js +30 -8
  421. package/lib/core/rebase/utils.js.map +1 -1
  422. package/lib/core/tree/anchorSet.js +1 -0
  423. package/lib/core/tree/anchorSet.js.map +1 -1
  424. package/lib/core/tree/detachedFieldIndex.d.ts +6 -0
  425. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  426. package/lib/core/tree/detachedFieldIndex.js +10 -1
  427. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  428. package/lib/core/tree/index.d.ts +1 -1
  429. package/lib/core/tree/index.d.ts.map +1 -1
  430. package/lib/core/tree/index.js +1 -1
  431. package/lib/core/tree/index.js.map +1 -1
  432. package/lib/core/tree/pathTree.d.ts +11 -3
  433. package/lib/core/tree/pathTree.d.ts.map +1 -1
  434. package/lib/core/tree/pathTree.js +12 -1
  435. package/lib/core/tree/pathTree.js.map +1 -1
  436. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  437. package/lib/core/tree/visitDelta.js +3 -2
  438. package/lib/core/tree/visitDelta.js.map +1 -1
  439. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  440. package/lib/core/tree/visitorUtils.js +58 -18
  441. package/lib/core/tree/visitorUtils.js.map +1 -1
  442. package/lib/feature-libraries/changeAtomIdBTree.d.ts +10 -4
  443. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  444. package/lib/feature-libraries/changeAtomIdBTree.js +14 -1
  445. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  446. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  447. package/lib/feature-libraries/chunked-forest/basicChunk.js +8 -1
  448. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  449. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  450. package/lib/feature-libraries/chunked-forest/chunkTree.js +4 -1
  451. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  452. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  453. package/lib/feature-libraries/chunked-forest/chunkedForest.js +3 -1
  454. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  455. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -0
  456. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  457. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +93 -44
  458. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  459. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +236 -70
  460. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  461. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -1
  462. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  463. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +11 -2
  464. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  465. package/lib/feature-libraries/default-schema/index.d.ts +2 -1
  466. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  467. package/lib/feature-libraries/default-schema/index.js +2 -1
  468. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  469. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +38 -0
  470. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  471. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +128 -0
  472. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  473. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  474. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  475. package/lib/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  476. package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  477. package/lib/feature-libraries/deltaUtils.d.ts +1 -0
  478. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  479. package/lib/feature-libraries/deltaUtils.js +5 -1
  480. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  481. package/lib/feature-libraries/flex-tree/context.d.ts +9 -0
  482. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  483. package/lib/feature-libraries/flex-tree/context.js +6 -0
  484. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  485. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  486. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  487. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  488. package/lib/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  489. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  490. package/lib/feature-libraries/flex-tree/lazyField.js +41 -10
  491. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  492. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  493. package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -1
  494. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  495. package/lib/feature-libraries/index.d.ts +3 -3
  496. package/lib/feature-libraries/index.d.ts.map +1 -1
  497. package/lib/feature-libraries/index.js +2 -2
  498. package/lib/feature-libraries/index.js.map +1 -1
  499. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  500. package/lib/feature-libraries/mapTreeCursor.js +2 -1
  501. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  502. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  503. package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
  504. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  505. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +97 -21
  506. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  507. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +3 -5
  508. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  509. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +20 -51
  510. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  511. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  512. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  513. package/lib/feature-libraries/modular-schema/genericFieldKind.js +3 -9
  514. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  515. package/lib/feature-libraries/modular-schema/index.d.ts +4 -4
  516. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  517. package/lib/feature-libraries/modular-schema/index.js +2 -2
  518. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  519. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +11 -28
  520. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  521. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +247 -143
  522. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  523. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  524. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  525. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +389 -0
  526. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  527. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  528. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +8 -1
  529. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  530. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +48 -20
  531. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  532. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +1344 -479
  533. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  534. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  535. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  536. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +146 -0
  537. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  538. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +29 -0
  539. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  540. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +47 -11
  541. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  542. package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
  543. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  544. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  545. package/lib/feature-libraries/object-forest/objectForest.js +3 -1
  546. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  547. package/lib/feature-libraries/optional-field/index.d.ts +2 -2
  548. package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
  549. package/lib/feature-libraries/optional-field/index.js +1 -1
  550. package/lib/feature-libraries/optional-field/index.js.map +1 -1
  551. package/lib/feature-libraries/optional-field/optionalField.d.ts +5 -26
  552. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  553. package/lib/feature-libraries/optional-field/optionalField.js +221 -441
  554. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  555. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  556. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  557. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +27 -0
  558. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  559. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +24 -33
  560. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  561. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  562. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  563. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  564. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +55 -26
  565. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  566. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  567. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  568. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +53 -0
  569. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  570. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  571. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  572. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  573. package/lib/feature-libraries/sequence-field/compose.d.ts +6 -7
  574. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  575. package/lib/feature-libraries/sequence-field/compose.js +85 -261
  576. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  577. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  578. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  579. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  580. package/lib/feature-libraries/sequence-field/index.d.ts +2 -3
  581. package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
  582. package/lib/feature-libraries/sequence-field/index.js +0 -1
  583. package/lib/feature-libraries/sequence-field/index.js.map +1 -1
  584. package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
  585. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  586. package/lib/feature-libraries/sequence-field/invert.js +67 -169
  587. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  588. package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  589. package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  590. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  591. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  592. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  593. package/lib/feature-libraries/sequence-field/moveEffectTable.js +6 -84
  594. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  595. package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
  596. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  597. package/lib/feature-libraries/sequence-field/rebase.js +109 -116
  598. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  599. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  600. package/lib/feature-libraries/sequence-field/replaceRevisions.js +18 -31
  601. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  602. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  603. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +0 -2
  604. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  605. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  606. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  607. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +356 -182
  608. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  609. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  610. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +21 -63
  611. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  612. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  613. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  614. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
  615. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  616. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  617. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  618. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +14 -109
  619. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  620. package/lib/feature-libraries/sequence-field/types.d.ts +30 -59
  621. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  622. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  623. package/lib/feature-libraries/sequence-field/utils.d.ts +15 -24
  624. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  625. package/lib/feature-libraries/sequence-field/utils.js +112 -298
  626. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  627. package/lib/index.d.ts +3 -2
  628. package/lib/index.d.ts.map +1 -1
  629. package/lib/index.js +2 -1
  630. package/lib/index.js.map +1 -1
  631. package/lib/packageVersion.d.ts +1 -1
  632. package/lib/packageVersion.d.ts.map +1 -1
  633. package/lib/packageVersion.js +1 -1
  634. package/lib/packageVersion.js.map +1 -1
  635. package/lib/shared-tree/index.d.ts +1 -1
  636. package/lib/shared-tree/index.d.ts.map +1 -1
  637. package/lib/shared-tree/index.js.map +1 -1
  638. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  639. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  640. package/lib/shared-tree/schematizeTree.js +3 -2
  641. package/lib/shared-tree/schematizeTree.js.map +1 -1
  642. package/lib/shared-tree/schematizingTreeView.d.ts +1 -5
  643. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  644. package/lib/shared-tree/schematizingTreeView.js +41 -38
  645. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  646. package/lib/shared-tree/sharedTree.d.ts +9 -3
  647. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  648. package/lib/shared-tree/sharedTree.js +11 -0
  649. package/lib/shared-tree/sharedTree.js.map +1 -1
  650. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  651. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  652. package/lib/shared-tree/sharedTreeChangeCodecs.js +1 -0
  653. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  654. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  655. package/lib/shared-tree/sharedTreeChangeEnricher.js +2 -2
  656. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  657. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
  658. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  659. package/lib/shared-tree/sharedTreeChangeFamily.js +11 -5
  660. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  661. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  662. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  663. package/lib/shared-tree/sharedTreeEditBuilder.js +12 -6
  664. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  665. package/lib/shared-tree/treeCheckout.d.ts +9 -10
  666. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  667. package/lib/shared-tree/treeCheckout.js +66 -11
  668. package/lib/shared-tree/treeCheckout.js.map +1 -1
  669. package/lib/shared-tree-core/branch.d.ts +3 -2
  670. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  671. package/lib/shared-tree-core/branch.js +9 -4
  672. package/lib/shared-tree-core/branch.js.map +1 -1
  673. package/lib/shared-tree-core/editManager.d.ts +2 -2
  674. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  675. package/lib/shared-tree-core/editManager.js +20 -14
  676. package/lib/shared-tree-core/editManager.js.map +1 -1
  677. package/lib/shared-tree-core/editManagerCodecs.d.ts +4 -0
  678. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  679. package/lib/shared-tree-core/editManagerCodecs.js +8 -1
  680. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  681. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  682. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  683. package/lib/shared-tree-core/editManagerFormatCommons.js +6 -0
  684. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  685. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  686. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  687. package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  688. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  689. package/lib/shared-tree-core/index.d.ts +2 -2
  690. package/lib/shared-tree-core/index.d.ts.map +1 -1
  691. package/lib/shared-tree-core/index.js +2 -2
  692. package/lib/shared-tree-core/index.js.map +1 -1
  693. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  694. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  695. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  696. package/lib/shared-tree-core/messageCodecs.d.ts +4 -0
  697. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  698. package/lib/shared-tree-core/messageCodecs.js +8 -1
  699. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  700. package/lib/shared-tree-core/messageFormat.d.ts +1 -0
  701. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  702. package/lib/shared-tree-core/messageFormat.js +6 -0
  703. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  704. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  705. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  706. package/lib/shared-tree-core/messageFormatV1ToV4.js +1 -0
  707. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  708. package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -0
  709. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  710. package/lib/shared-tree-core/sharedTreeCore.js +1 -1
  711. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  712. package/lib/simple-tree/api/index.d.ts +1 -1
  713. package/lib/simple-tree/api/index.d.ts.map +1 -1
  714. package/lib/simple-tree/api/index.js +1 -1
  715. package/lib/simple-tree/api/index.js.map +1 -1
  716. package/lib/simple-tree/api/schemaFactoryAlpha.js +1 -1
  717. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  718. package/lib/simple-tree/api/schemaFactoryBeta.js +1 -1
  719. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  720. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
  721. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  722. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +244 -0
  723. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  724. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +270 -0
  725. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  726. package/lib/simple-tree/api/tree.d.ts +3 -1
  727. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  728. package/lib/simple-tree/api/tree.js.map +1 -1
  729. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  730. package/lib/simple-tree/core/treeNodeKernel.js +6 -2
  731. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  732. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +15 -15
  733. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  734. package/lib/simple-tree/core/unhydratedFlexTree.js +58 -8
  735. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  736. package/lib/simple-tree/fieldSchema.d.ts +4 -4
  737. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  738. package/lib/simple-tree/fieldSchema.js.map +1 -1
  739. package/lib/simple-tree/index.d.ts +3 -3
  740. package/lib/simple-tree/index.d.ts.map +1 -1
  741. package/lib/simple-tree/index.js +2 -2
  742. package/lib/simple-tree/index.js.map +1 -1
  743. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  744. package/lib/simple-tree/node-kinds/array/arrayNode.js +8 -6
  745. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  746. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  747. package/lib/simple-tree/node-kinds/common.js +2 -2
  748. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  749. package/lib/simple-tree/node-kinds/map/mapNode.js +2 -2
  750. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  751. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  752. package/lib/simple-tree/node-kinds/object/objectNode.js +20 -20
  753. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  754. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  755. package/lib/simple-tree/node-kinds/record/recordNode.js +4 -2
  756. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  757. package/lib/simple-tree/prepareForInsertion.d.ts +54 -47
  758. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  759. package/lib/simple-tree/prepareForInsertion.js +184 -125
  760. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  761. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +13 -4
  762. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  763. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +28 -11
  764. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  765. package/lib/text/index.d.ts +6 -0
  766. package/lib/text/index.d.ts.map +1 -0
  767. package/lib/text/index.js +6 -0
  768. package/lib/text/index.js.map +1 -0
  769. package/lib/text/textDomain.d.ts +138 -0
  770. package/lib/text/textDomain.d.ts.map +1 -0
  771. package/lib/text/textDomain.js +118 -0
  772. package/lib/text/textDomain.js.map +1 -0
  773. package/lib/treeFactory.d.ts.map +1 -1
  774. package/lib/treeFactory.js +13 -3
  775. package/lib/treeFactory.js.map +1 -1
  776. package/lib/util/bTreeUtils.d.ts +12 -4
  777. package/lib/util/bTreeUtils.d.ts.map +1 -1
  778. package/lib/util/bTreeUtils.js +15 -19
  779. package/lib/util/bTreeUtils.js.map +1 -1
  780. package/lib/util/index.d.ts +1 -1
  781. package/lib/util/index.d.ts.map +1 -1
  782. package/lib/util/index.js +1 -1
  783. package/lib/util/index.js.map +1 -1
  784. package/lib/util/nestedMap.js +12 -12
  785. package/lib/util/nestedMap.js.map +1 -1
  786. package/lib/util/rangeMap.d.ts +24 -12
  787. package/lib/util/rangeMap.d.ts.map +1 -1
  788. package/lib/util/rangeMap.js +44 -5
  789. package/lib/util/rangeMap.js.map +1 -1
  790. package/package.json +25 -25
  791. package/src/core/change-family/changeFamily.ts +5 -0
  792. package/src/core/change-family/index.ts +1 -0
  793. package/src/core/index.ts +6 -1
  794. package/src/core/rebase/changeRebaser.ts +6 -1
  795. package/src/core/rebase/index.ts +3 -0
  796. package/src/core/rebase/types.ts +65 -21
  797. package/src/core/rebase/utils.ts +39 -11
  798. package/src/core/tree/anchorSet.ts +1 -0
  799. package/src/core/tree/detachedFieldIndex.ts +17 -1
  800. package/src/core/tree/index.ts +2 -1
  801. package/src/core/tree/pathTree.ts +16 -4
  802. package/src/core/tree/visitDelta.ts +6 -2
  803. package/src/core/tree/visitorUtils.ts +55 -19
  804. package/src/feature-libraries/changeAtomIdBTree.ts +37 -5
  805. package/src/feature-libraries/chunked-forest/basicChunk.ts +7 -1
  806. package/src/feature-libraries/chunked-forest/chunkTree.ts +6 -1
  807. package/src/feature-libraries/chunked-forest/chunkedForest.ts +3 -1
  808. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -0
  809. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +399 -127
  810. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +13 -5
  811. package/src/feature-libraries/default-schema/index.ts +17 -5
  812. package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +188 -0
  813. package/src/feature-libraries/default-schema/mappedEditBuilder.ts +35 -9
  814. package/src/feature-libraries/deltaUtils.ts +6 -1
  815. package/src/feature-libraries/flex-tree/context.ts +17 -0
  816. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +7 -8
  817. package/src/feature-libraries/flex-tree/lazyField.ts +68 -25
  818. package/src/feature-libraries/forest-summary/forestSummarizer.ts +3 -1
  819. package/src/feature-libraries/index.ts +22 -8
  820. package/src/feature-libraries/mapTreeCursor.ts +2 -1
  821. package/src/feature-libraries/mitigatedChangeFamily.ts +3 -1
  822. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +142 -44
  823. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +32 -58
  824. package/src/feature-libraries/modular-schema/genericFieldKind.ts +6 -18
  825. package/src/feature-libraries/modular-schema/index.ts +16 -15
  826. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +560 -351
  827. package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +760 -0
  828. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +14 -1
  829. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +2620 -782
  830. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +1 -0
  831. package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +62 -0
  832. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +58 -11
  833. package/src/feature-libraries/object-forest/objectForest.ts +3 -1
  834. package/src/feature-libraries/optional-field/index.ts +1 -3
  835. package/src/feature-libraries/optional-field/optionalField.ts +318 -562
  836. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +45 -0
  837. package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +24 -38
  838. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +89 -35
  839. package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +94 -0
  840. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -1
  841. package/src/feature-libraries/sequence-field/compose.ts +139 -522
  842. package/src/feature-libraries/sequence-field/helperTypes.ts +34 -19
  843. package/src/feature-libraries/sequence-field/index.ts +0 -9
  844. package/src/feature-libraries/sequence-field/invert.ts +103 -228
  845. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  846. package/src/feature-libraries/sequence-field/moveEffectTable.ts +8 -195
  847. package/src/feature-libraries/sequence-field/rebase.ts +169 -205
  848. package/src/feature-libraries/sequence-field/replaceRevisions.ts +25 -47
  849. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +0 -2
  850. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +648 -228
  851. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +56 -70
  852. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +25 -27
  853. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +19 -129
  854. package/src/feature-libraries/sequence-field/types.ts +34 -64
  855. package/src/feature-libraries/sequence-field/utils.ts +139 -353
  856. package/src/index.ts +7 -0
  857. package/src/packageVersion.ts +1 -1
  858. package/src/shared-tree/index.ts +3 -2
  859. package/src/shared-tree/schematizeTree.ts +21 -8
  860. package/src/shared-tree/schematizingTreeView.ts +56 -70
  861. package/src/shared-tree/sharedTree.ts +20 -3
  862. package/src/shared-tree/sharedTreeChangeCodecs.ts +5 -1
  863. package/src/shared-tree/sharedTreeChangeEnricher.ts +2 -0
  864. package/src/shared-tree/sharedTreeChangeFamily.ts +15 -5
  865. package/src/shared-tree/sharedTreeEditBuilder.ts +39 -8
  866. package/src/shared-tree/treeCheckout.ts +95 -24
  867. package/src/shared-tree-core/branch.ts +13 -3
  868. package/src/shared-tree-core/editManager.ts +42 -28
  869. package/src/shared-tree-core/editManagerCodecs.ts +11 -1
  870. package/src/shared-tree-core/editManagerFormatCommons.ts +6 -0
  871. package/src/shared-tree-core/editManagerFormatV1toV4.ts +3 -1
  872. package/src/shared-tree-core/index.ts +2 -0
  873. package/src/shared-tree-core/messageCodecV1ToV4.ts +2 -1
  874. package/src/shared-tree-core/messageCodecs.ts +11 -1
  875. package/src/shared-tree-core/messageFormat.ts +6 -0
  876. package/src/shared-tree-core/messageFormatV1ToV4.ts +3 -1
  877. package/src/shared-tree-core/sharedTreeCore.ts +4 -1
  878. package/src/simple-tree/api/index.ts +3 -0
  879. package/src/simple-tree/api/schemaFactoryAlpha.ts +1 -1
  880. package/src/simple-tree/api/schemaFactoryBeta.ts +1 -1
  881. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +4 -4
  882. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +501 -0
  883. package/src/simple-tree/api/tree.ts +3 -1
  884. package/src/simple-tree/core/treeNodeKernel.ts +6 -2
  885. package/src/simple-tree/core/unhydratedFlexTree.ts +87 -36
  886. package/src/simple-tree/fieldSchema.ts +6 -4
  887. package/src/simple-tree/index.ts +5 -1
  888. package/src/simple-tree/node-kinds/array/arrayNode.ts +9 -7
  889. package/src/simple-tree/node-kinds/common.ts +2 -5
  890. package/src/simple-tree/node-kinds/map/mapNode.ts +4 -4
  891. package/src/simple-tree/node-kinds/object/objectNode.ts +26 -26
  892. package/src/simple-tree/node-kinds/record/recordNode.ts +10 -9
  893. package/src/simple-tree/prepareForInsertion.ts +343 -201
  894. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +43 -15
  895. package/src/text/README.md +8 -0
  896. package/src/text/index.ts +6 -0
  897. package/src/text/textDomain.ts +199 -0
  898. package/src/treeFactory.ts +14 -4
  899. package/src/util/bTreeUtils.ts +33 -22
  900. package/src/util/index.ts +3 -0
  901. package/src/util/nestedMap.ts +12 -12
  902. package/src/util/rangeMap.ts +72 -18
  903. package/.eslintrc.cjs +0 -125
  904. package/assertTagging.config.mjs +0 -14
  905. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  906. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  907. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -50
  908. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  909. package/docs/main/sequence-field/move-composition.md +0 -46
  910. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  911. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  912. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -46
  913. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  914. package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +0 -57
@@ -3,13 +3,12 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
6
- import { brand } from "../../util/index.js";
7
- import { CrossFieldTarget, NodeAttachState, } from "../modular-schema/index.js";
6
+ import { areEqualChangeAtomIds, } from "../../core/index.js";
7
+ import { NodeAttachState, } from "../modular-schema/index.js";
8
8
  import { MarkListFactory } from "./markListFactory.js";
9
9
  import { MarkQueue } from "./markQueue.js";
10
- import { getMoveEffect, isMoveIn, isMoveMark, isMoveOut, setMoveEffect, } from "./moveEffectTable.js";
11
10
  import { NoopMarkType, } from "./types.js";
12
- import { CellOrder, areInputCellsEmpty, cellSourcesFromMarks, cloneCellId, cloneMark, compareCellPositionsUsingTombstones, extractMarkEffect, getDetachOutputCellId, getEndpoint, getInputCellId, isAttachAndDetachEffect, isDetach, isNewAttach, isRename, isTombstone, markEmptiesCells, markFillsCells, splitMarkEffect, withNodeChange, } from "./utils.js";
11
+ import { CellOrder, areInputCellsEmpty, cellSourcesFromMarks, cloneCellId, cloneMark, compareCellPositionsUsingTombstones, extractMarkEffect, getAttachedRootId, getDetachOutputCellId, getDetachedRootId, getInputCellId, getOutputCellId, isAttach, isDetach, isNewAttach, isRename, isTombstone, markEmptiesCells, markFillsCells, withNodeChange, } from "./utils.js";
13
12
  /**
14
13
  * Rebases `change` over `base` assuming they both apply to the same initial state.
15
14
  * @param change - The changeset to rebase.
@@ -44,8 +43,24 @@ class RebaseQueue {
44
43
  constructor(baseMarks, newMarks, metadata, moveEffects) {
45
44
  this.metadata = metadata;
46
45
  this.moveEffects = moveEffects;
47
- this.baseMarks = new MarkQueue(baseMarks, moveEffects);
48
- this.newMarks = new MarkQueue(newMarks, moveEffects);
46
+ const queryFunc = (mark) => {
47
+ if (isAttach(mark)) {
48
+ return moveEffects.getNewChangesForBaseAttach(getAttachedRootId(mark), mark.count)
49
+ .length;
50
+ }
51
+ else if (isDetach(mark)) {
52
+ return moveEffects.doesBaseAttachNodes(getDetachedRootId(mark), mark.count).length;
53
+ }
54
+ let count = mark.count;
55
+ if (mark.type === "Rename") {
56
+ count = moveEffects.getNewRenameForBaseRename(mark.idOverride, count).length;
57
+ }
58
+ return mark.cellId === undefined
59
+ ? count
60
+ : moveEffects.doesBaseAttachNodes(mark.cellId, count).length;
61
+ };
62
+ this.baseMarks = new MarkQueue(baseMarks, queryFunc);
63
+ this.newMarks = new MarkQueue(newMarks, (mark) => mark.count);
49
64
  this.baseMarksCellSources = cellSourcesFromMarks(baseMarks, getInputCellId);
50
65
  this.newMarksCellSources = cellSourcesFromMarks(newMarks, getInputCellId);
51
66
  }
@@ -133,14 +148,15 @@ class RebaseQueue {
133
148
  * @returns a mark which has the composite effect of `mark` and `effect`.
134
149
  */
135
150
  function addMovedMarkEffect(mark, effect) {
136
- if (isMoveIn(mark) && isMoveOut(effect)) {
151
+ if (isAttach(mark) && isDetach(effect)) {
137
152
  return { ...mark, type: "Insert" };
138
153
  }
139
- else if (isRename(mark) && isMoveOut(effect)) {
140
- return { ...effect, count: mark.count, idOverride: mark.idOverride };
141
- }
142
- else if (isAttachAndDetachEffect(mark) && isMoveIn(mark.attach) && isMoveOut(effect)) {
143
- return { ...mark.detach, count: mark.count };
154
+ else if (isRename(mark) && isDetach(effect)) {
155
+ const result = { ...effect, count: mark.count };
156
+ if (!areEqualChangeAtomIds(mark.idOverride, getDetachedRootId(effect))) {
157
+ result.detachCellId = mark.idOverride;
158
+ }
159
+ return result;
144
160
  }
145
161
  else if (isTombstone(mark)) {
146
162
  return { ...mark, ...effect };
@@ -153,7 +169,6 @@ function rebaseMark(currMark, baseMark, rebaseChild, moveEffects) {
153
169
  if (movedNodeChanges !== undefined) {
154
170
  assert(rebasedMark.changes === undefined, 0x8dc /* Unexpected collision of new node changes */);
155
171
  rebasedMark.changes = movedNodeChanges;
156
- moveEffects.onMoveIn(movedNodeChanges);
157
172
  }
158
173
  return rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects);
159
174
  }
@@ -166,80 +181,85 @@ function rebaseMarkIgnoreChild(currMark, baseMark, moveEffects) {
166
181
  }
167
182
  assert(!isNewAttach(currMark), 0x69d /* A new attach should not be rebased over its cell being emptied */);
168
183
  const baseCellId = getDetachOutputCellId(baseMark);
169
- if (isMoveOut(baseMark)) {
170
- assert(isMoveMark(baseMark), 0x6f0 /* Only move marks have move IDs */);
171
- assert(!isNewAttach(currMark), 0x819 /* New attaches should not be rebased over moves */);
172
- const { remains, follows } = separateEffectsForMove(extractMarkEffect(currMark));
173
- if (follows !== undefined) {
174
- sendEffectToDest(follows, moveEffects, getEndpoint(baseMark), baseMark.count);
175
- }
176
- if (currMark.changes !== undefined) {
177
- moveRebasedChanges(currMark.changes, moveEffects, getEndpoint(baseMark));
178
- }
179
- rebasedMark = { ...(remains ?? {}), count: baseMark.count };
180
- }
181
- else {
182
- rebasedMark = currMark;
183
- }
184
- rebasedMark = makeDetachedMark(rebasedMark, cloneCellId(baseCellId));
184
+ const baseDetachId = getDetachedRootId(baseMark);
185
+ const { remains, follows } = separateEffectsForMove(extractMarkEffect(currMark), baseMark, moveEffects);
186
+ moveRebasedChanges(moveEffects, baseDetachId, baseMark.count, currMark.changes, follows);
187
+ rebasedMark = { ...remains, count: baseMark.count };
188
+ return makeDetachedMark(rebasedMark, cloneCellId(baseCellId));
185
189
  }
186
190
  else if (markFillsCells(baseMark)) {
187
- rebasedMark = isAttachAndDetachEffect(currMark)
188
- ? withNodeChange({ ...currMark.detach, count: currMark.count }, currMark.changes)
189
- : withCellId(currMark, undefined);
190
- }
191
- else if (isAttachAndDetachEffect(baseMark)) {
192
- assert(baseMark.cellId !== undefined, 0x81a /* AttachAndDetach mark should target an empty cell */);
193
- const halfRebasedMark = rebaseMarkIgnoreChild(currMark, { ...baseMark.attach, cellId: cloneCellId(baseMark.cellId), count: baseMark.count }, moveEffects);
194
- rebasedMark = rebaseMarkIgnoreChild(halfRebasedMark, { ...baseMark.detach, count: baseMark.count }, moveEffects);
191
+ return withCellId(currMark, undefined);
195
192
  }
196
193
  else if (isRename(baseMark)) {
197
- return withCellId(currMark, getDetachOutputCellId(baseMark));
194
+ if (currMark.type === "Rename") {
195
+ const doesBaseMoveAndAttach = moveEffects.doesBaseAttachNodes(baseMark.idOverride, baseMark.count).value;
196
+ assert(baseMark.cellId !== undefined, "Rename should target empty cells");
197
+ const baseRootRename = moveEffects.getBaseRename(baseMark.cellId, baseMark.count).value;
198
+ const doesBaseMoveAndDetach = baseRootRename !== undefined &&
199
+ !areEqualChangeAtomIds(baseRootRename, baseMark.idOverride);
200
+ if (doesBaseMoveAndAttach || doesBaseMoveAndDetach) {
201
+ // `newMark` represents a node-targeting rename.
202
+ // The base changeset has moved the node which was last detached from the cell,
203
+ // so we should remove the rename from this location.
204
+ return { cellId: baseMark.idOverride, count: baseMark.count };
205
+ }
206
+ }
207
+ const newRenameId = moveEffects.getNewRenameForBaseRename(baseMark.idOverride, baseMark.count).value;
208
+ if (newRenameId !== undefined && currMark.type !== "Insert") {
209
+ return {
210
+ type: "Rename",
211
+ cellId: baseMark.idOverride,
212
+ count: baseMark.count,
213
+ idOverride: newRenameId,
214
+ };
215
+ }
216
+ return withCellId(currMark, getOutputCellId(baseMark));
198
217
  }
199
218
  else {
200
- rebasedMark = currMark;
219
+ return currMark;
201
220
  }
202
- return rebasedMark;
203
221
  }
204
222
  /**
205
223
  * Returns a pair of marks that represent the effects which should remain in place in the face of concurrent move,
206
224
  * and the effects that should be sent to the move destination.
207
225
  */
208
- function separateEffectsForMove(mark) {
226
+ function separateEffectsForMove(mark, baseMark, nodeManager) {
209
227
  const type = mark.type;
210
228
  switch (type) {
211
- case "Remove":
212
- case "MoveOut": {
213
- // There are two scenarios that lead to a Detach mark having an idOverride:
214
- // 1. The detach is a rollback (the idOverride the original id that the cell had in the input context of the attach being rolled back).
215
- // 2. The detach has been composed with a Rename (the idOverride is the cell id in the output context of the rename).
216
- // Since rollbacks are never rebased, we can safely assume that the idOverride is due to a Rename (scenario #2).
217
- // While the detach must follow the node that it targets, the rename must remain in place because it targets the cell.
218
- if (mark.idOverride !== undefined) {
219
- const remains = { type: "Rename", idOverride: mark.idOverride };
220
- const follows = { ...mark };
221
- delete follows.idOverride;
222
- return { remains, follows };
223
- }
224
- return { follows: mark };
229
+ case NoopMarkType: {
230
+ return {};
225
231
  }
226
- case "AttachAndDetach": {
227
- return { follows: mark.detach, remains: mark.attach };
232
+ case "Remove": {
233
+ if (mark.cellRename !== undefined) {
234
+ return { remains: { type: "Rename", idOverride: mark.cellRename }, follows: mark };
235
+ }
236
+ const baseDetachId = getDetachedRootId(baseMark);
237
+ const outputCellId = getDetachOutputCellId(baseMark);
238
+ const doesBaseMoveNodes = !areEqualChangeAtomIds(outputCellId, baseDetachId) ||
239
+ nodeManager.doesBaseAttachNodes(baseDetachId, baseMark.count).value;
240
+ // We should rename these cells unless the nodes are reattached elsewhere,
241
+ // in which case we will rename those cells instead.
242
+ const remains = doesBaseMoveNodes
243
+ ? {}
244
+ : {
245
+ type: "Rename",
246
+ idOverride: getDetachOutputCellId(mark),
247
+ };
248
+ return { remains, follows: mark };
228
249
  }
229
- case "MoveIn":
230
250
  case "Rename": {
231
251
  return { remains: mark };
232
252
  }
233
- case NoopMarkType: {
234
- return {};
235
- }
236
253
  case "Insert": {
237
254
  const follows = {
238
- type: "MoveOut",
255
+ type: "Remove",
239
256
  id: mark.id,
240
257
  };
258
+ if (mark.detachCellId !== undefined) {
259
+ follows.detachCellId = mark.detachCellId;
260
+ }
241
261
  const remains = {
242
- type: "MoveIn",
262
+ type: "Insert",
243
263
  id: mark.id,
244
264
  };
245
265
  if (mark.revision !== undefined) {
@@ -253,30 +273,10 @@ function separateEffectsForMove(mark) {
253
273
  }
254
274
  }
255
275
  }
256
- // TODO: Reduce the duplication between this and other MoveEffect helpers
257
- function sendEffectToDest(markEffect, moveEffects, { revision, localId: id }, count) {
258
- const effect = getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count, false);
259
- if (effect.length < count) {
260
- const [markEffect1, markEffect2] = splitMarkEffect(markEffect, effect.length);
261
- const newEffect = effect.value === undefined
262
- ? { movedMark: markEffect1 }
263
- : { ...effect.value, movedMark: markEffect1 };
264
- setMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, effect.length, newEffect);
265
- sendEffectToDest(markEffect2, moveEffects, { revision, localId: brand(id + effect.length) }, count - effect.length);
266
- }
267
- else {
268
- const newEffect = effect.value === undefined
269
- ? { movedEffect: markEffect }
270
- : { ...effect.value, movedEffect: markEffect };
271
- setMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count, newEffect);
272
- }
273
- }
274
- function moveRebasedChanges(nodeChange, moveEffects, { revision, localId: id }) {
275
- const effect = getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, 1, false).value;
276
- const newEffect = effect === undefined
277
- ? { rebasedChanges: nodeChange }
278
- : { ...effect, rebasedChanges: nodeChange };
279
- setMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, 1, newEffect);
276
+ function moveRebasedChanges(moveEffects, baseId, count, nodeChange, newDetach) {
277
+ const newId = newDetach === undefined ? undefined : getDetachedRootId(newDetach);
278
+ const detachCellId = newDetach?.detachCellId;
279
+ moveEffects.rebaseOverDetach(baseId, count, newId, nodeChange, detachCellId);
280
280
  }
281
281
  function rebaseNodeChange(currMark, baseMark, nodeRebaser) {
282
282
  const baseChange = baseMark.changes;
@@ -310,45 +310,38 @@ function withCellId(mark, cellId) {
310
310
  return newMark;
311
311
  }
312
312
  function getMovedEffectFromBaseMark(moveEffects, baseMark) {
313
- if (isMoveIn(baseMark)) {
314
- return getMovedEffect(moveEffects, baseMark.revision, baseMark.id, baseMark.count);
315
- }
316
- else if (isAttachAndDetachEffect(baseMark) && isMoveIn(baseMark.attach)) {
317
- return getMovedEffect(moveEffects, baseMark.attach.revision, baseMark.attach.id, baseMark.count);
318
- }
319
- else {
320
- return undefined;
321
- }
313
+ return isAttach(baseMark)
314
+ ? getMovedEffect(moveEffects, baseMark.revision, baseMark.id, baseMark.count)
315
+ : undefined;
322
316
  }
323
317
  // It is expected that the range from `id` to `id + count - 1` has the same move effect.
324
318
  // The call sites to this function are making queries about a mark which has already been split by a `MarkQueue`
325
319
  // to match the ranges in `moveEffects`.
326
320
  // TODO: Reduce the duplication between this and other MoveEffect helpers
327
- function getMovedEffect(moveEffects, revision, id, count) {
328
- const effect = getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count);
329
- assert(effect.length === count, 0x6f3 /* Expected effect to cover entire mark */);
330
- const movedEffect = effect.value?.movedEffect;
331
- if (movedEffect === undefined) {
321
+ function getMovedEffect(moveEffects, revision, localId, count) {
322
+ const entry = moveEffects.getNewChangesForBaseAttach({ revision, localId }, count);
323
+ assert(entry.length === count, 0x6f3 /* Expected effect to cover entire mark */);
324
+ const detachId = entry.value?.detachId;
325
+ if (detachId === undefined) {
326
+ assert(entry.value?.cellRename === undefined, "Cell detach should be accompanied by node detach");
332
327
  return undefined;
333
328
  }
334
- if (isMoveOut(movedEffect)) {
335
- moveEffects.moveKey(CrossFieldTarget.Source, movedEffect.revision, movedEffect.id, count);
329
+ const detach = {
330
+ type: "Remove",
331
+ revision: detachId.revision,
332
+ id: detachId.localId,
333
+ };
334
+ if (entry.value?.cellRename !== undefined) {
335
+ detach.detachCellId = entry.value.cellRename;
336
336
  }
337
- return movedEffect;
337
+ return detach;
338
338
  }
339
339
  function getMovedChangesFromBaseMark(moveEffects, baseMark) {
340
- if (isMoveIn(baseMark)) {
341
- return getMovedNodeChanges(moveEffects, baseMark.revision, baseMark.id, baseMark.count);
342
- }
343
- else if (isAttachAndDetachEffect(baseMark) && isMoveIn(baseMark.attach)) {
344
- return getMovedNodeChanges(moveEffects, baseMark.attach.revision, baseMark.attach.id, baseMark.count);
345
- }
346
- else {
347
- return undefined;
348
- }
340
+ return isAttach(baseMark)
341
+ ? getMovedNodeChanges(moveEffects, baseMark.revision, baseMark.id)
342
+ : undefined;
349
343
  }
350
- function getMovedNodeChanges(moveEffects, revision, id, count) {
351
- return getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count).value
352
- ?.rebasedChanges;
344
+ function getMovedNodeChanges(moveEffects, revision, localId) {
345
+ return moveEffects.getNewChangesForBaseAttach({ revision, localId }, 1).value?.nodeChange;
353
346
  }
354
347
  //# sourceMappingURL=rebase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rebase.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/rebase.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 { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport type { ChangeAtomId, RevisionMetadataSource, RevisionTag } from \"../../core/index.js\";\nimport { type IdAllocator, type Mutable, brand } from \"../../util/index.js\";\nimport {\n\ttype CrossFieldManager,\n\tCrossFieldTarget,\n\ttype NodeChangeRebaser,\n\tNodeAttachState,\n\ttype NodeId,\n\ttype RebaseRevisionMetadata,\n} from \"../modular-schema/index.js\";\n\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport { MarkQueue } from \"./markQueue.js\";\nimport {\n\ttype MoveEffect,\n\ttype MoveEffectTable,\n\tgetMoveEffect,\n\tisMoveIn,\n\tisMoveMark,\n\tisMoveOut,\n\tsetMoveEffect,\n} from \"./moveEffectTable.js\";\nimport {\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Detach,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MarkList,\n\ttype MoveId,\n\ttype MoveIn,\n\ttype MoveOut,\n\ttype NoopMark,\n\tNoopMarkType,\n} from \"./types.js\";\nimport {\n\tCellOrder,\n\tareInputCellsEmpty,\n\tcellSourcesFromMarks,\n\tcloneCellId,\n\tcloneMark,\n\tcompareCellPositionsUsingTombstones,\n\textractMarkEffect,\n\tgetDetachOutputCellId,\n\tgetEndpoint,\n\tgetInputCellId,\n\tisAttachAndDetachEffect,\n\tisDetach,\n\tisNewAttach,\n\tisRename,\n\tisTombstone,\n\tmarkEmptiesCells,\n\tmarkFillsCells,\n\tsplitMarkEffect,\n\twithNodeChange,\n} from \"./utils.js\";\n\n/**\n * Rebases `change` over `base` assuming they both apply to the same initial state.\n * @param change - The changeset to rebase.\n * @param base - The changeset to rebase over.\n * @returns A changeset that performs the changes in `change` but does so assuming `base` has been applied first.\n */\nexport function rebase(\n\tchange: Changeset,\n\tbase: Changeset,\n\trebaseChild: NodeChangeRebaser,\n\tgenId: IdAllocator,\n\tmanager: CrossFieldManager,\n\trevisionMetadata: RebaseRevisionMetadata,\n): Changeset {\n\treturn rebaseMarkList(\n\t\tchange,\n\t\tbase,\n\t\trevisionMetadata,\n\t\trebaseChild,\n\t\tgenId,\n\t\tmanager as MoveEffectTable,\n\t);\n}\n\nfunction rebaseMarkList(\n\tcurrMarkList: MarkList,\n\tbaseMarkList: MarkList,\n\tmetadata: RebaseRevisionMetadata,\n\trebaseChild: NodeChangeRebaser,\n\tgenId: IdAllocator,\n\tmoveEffects: CrossFieldManager<MoveEffect>,\n): MarkList {\n\tconst factory = new MarkListFactory();\n\tconst queue = new RebaseQueue(baseMarkList, currMarkList, metadata, moveEffects);\n\n\twhile (!queue.isEmpty()) {\n\t\tconst { baseMark, newMark: currMark } = queue.pop();\n\t\tconst rebasedMark = rebaseMark(currMark, baseMark, rebaseChild, moveEffects);\n\t\tfactory.push(rebasedMark);\n\t}\n\n\treturn factory.list;\n}\n\n/**\n * Generates a NoOp mark that targets the same cells as the input mark.\n * @param mark - The mark the NoOp should target.\n * @param revision - The revision, if available.\n * @returns A NoOp mark that targets the same cells as the input mark.\n */\nfunction generateNoOpWithCellId(mark: Mark): CellMark<NoopMark> {\n\tconst length = mark.count;\n\tconst cellId = getInputCellId(mark);\n\treturn cellId === undefined ? { count: length } : { count: length, cellId };\n}\n\nclass RebaseQueue {\n\tprivate readonly baseMarks: MarkQueue;\n\tprivate readonly newMarks: MarkQueue;\n\tprivate readonly baseMarksCellSources: ReadonlySet<RevisionTag | undefined>;\n\tprivate readonly newMarksCellSources: ReadonlySet<RevisionTag | undefined>;\n\n\tpublic constructor(\n\t\tbaseMarks: Changeset,\n\t\tnewMarks: Changeset,\n\t\tprivate readonly metadata: RevisionMetadataSource,\n\t\tprivate readonly moveEffects: MoveEffectTable,\n\t) {\n\t\tthis.baseMarks = new MarkQueue(baseMarks, moveEffects);\n\t\tthis.newMarks = new MarkQueue(newMarks, moveEffects);\n\t\tthis.baseMarksCellSources = cellSourcesFromMarks(baseMarks, getInputCellId);\n\t\tthis.newMarksCellSources = cellSourcesFromMarks(newMarks, getInputCellId);\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\treturn this.baseMarks.isEmpty() && this.newMarks.isEmpty();\n\t}\n\n\tpublic pop(): RebaseMarks {\n\t\tconst baseMark = this.baseMarks.peek();\n\t\tconst newMark = this.newMarks.peek();\n\t\tassert(\n\t\t\t!(baseMark === undefined && newMark === undefined),\n\t\t\t0x722 /* Cannot pop from empty queue */,\n\t\t);\n\n\t\tif (baseMark === undefined) {\n\t\t\tconst dequeuedNewMark = this.newMarks.dequeue();\n\t\t\treturn {\n\t\t\t\tbaseMark: generateNoOpWithCellId(dequeuedNewMark),\n\t\t\t\tnewMark: dequeuedNewMark,\n\t\t\t};\n\t\t} else if (newMark === undefined) {\n\t\t\treturn this.dequeueBase();\n\t\t} else if (areInputCellsEmpty(baseMark) && areInputCellsEmpty(newMark)) {\n\t\t\tconst baseId = getInputCellId(baseMark);\n\t\t\tconst newId = getInputCellId(newMark);\n\t\t\tassert(\n\t\t\t\tbaseId !== undefined && newId !== undefined,\n\t\t\t\t0x89f /* Both marks should have cell IDs */,\n\t\t\t);\n\t\t\tconst comparison = compareCellPositionsUsingTombstones(\n\t\t\t\tbaseId,\n\t\t\t\tnewId,\n\t\t\t\tthis.baseMarksCellSources,\n\t\t\t\tthis.newMarksCellSources,\n\t\t\t\tthis.metadata,\n\t\t\t);\n\t\t\tswitch (comparison) {\n\t\t\t\tcase CellOrder.SameCell: {\n\t\t\t\t\treturn this.dequeueBoth();\n\t\t\t\t}\n\t\t\t\tcase CellOrder.OldThenNew: {\n\t\t\t\t\treturn this.dequeueBase();\n\t\t\t\t}\n\t\t\t\tcase CellOrder.NewThenOld: {\n\t\t\t\t\treturn this.dequeueNew();\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tunreachableCase(comparison);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (areInputCellsEmpty(newMark)) {\n\t\t\treturn this.dequeueNew();\n\t\t} else if (areInputCellsEmpty(baseMark)) {\n\t\t\treturn this.dequeueBase();\n\t\t} else {\n\t\t\treturn this.dequeueBoth();\n\t\t}\n\t}\n\n\tprivate dequeueBase(length?: number): RebaseMarks {\n\t\tconst baseMark =\n\t\t\tlength === undefined ? this.baseMarks.dequeue() : this.baseMarks.dequeueUpTo(length);\n\n\t\tlet newMark: Mark = generateNoOpWithCellId(baseMark);\n\n\t\tconst movedEffect = getMovedEffectFromBaseMark(this.moveEffects, baseMark);\n\n\t\tif (movedEffect !== undefined) {\n\t\t\tnewMark = addMovedMarkEffect(newMark, movedEffect);\n\t\t}\n\n\t\treturn {\n\t\t\tbaseMark,\n\t\t\tnewMark,\n\t\t};\n\t}\n\n\tprivate dequeueNew(): RebaseMarks {\n\t\tconst newMark = this.newMarks.dequeue();\n\t\treturn { newMark, baseMark: generateNoOpWithCellId(newMark) };\n\t}\n\n\tprivate dequeueBoth(): RebaseMarks {\n\t\tconst baseMark = this.baseMarks.peek();\n\t\tconst newMark = this.newMarks.peek();\n\t\tassert(\n\t\t\tbaseMark !== undefined && newMark !== undefined,\n\t\t\t0x69c /* Cannot dequeue both unless both mark queues are non-empty */,\n\t\t);\n\t\tconst length = Math.min(newMark.count, baseMark.count);\n\t\tconst sizedBaseMark = this.baseMarks.dequeueUpTo(length);\n\t\tconst sizedNewMark = this.newMarks.dequeueUpTo(length);\n\t\tconst movedMark = getMovedEffectFromBaseMark(this.moveEffects, sizedBaseMark);\n\t\treturn {\n\t\t\tbaseMark: sizedBaseMark,\n\t\t\tnewMark:\n\t\t\t\tmovedMark === undefined ? sizedNewMark : addMovedMarkEffect(sizedNewMark, movedMark),\n\t\t};\n\t}\n}\n\n/**\n * Combines `mark` and `effect` into a single mark.\n * This function is only intended to handle cases where `mark` is part of a changeset being rebased\n * and `effect` is an effect from the same changeset whose target has been moved by the base changeset.\n * @returns a mark which has the composite effect of `mark` and `effect`.\n */\nfunction addMovedMarkEffect(mark: Mark, effect: Detach): Mark {\n\tif (isMoveIn(mark) && isMoveOut(effect)) {\n\t\treturn { ...mark, type: \"Insert\" };\n\t} else if (isRename(mark) && isMoveOut(effect)) {\n\t\treturn { ...effect, count: mark.count, idOverride: mark.idOverride };\n\t} else if (isAttachAndDetachEffect(mark) && isMoveIn(mark.attach) && isMoveOut(effect)) {\n\t\treturn { ...mark.detach, count: mark.count };\n\t} else if (isTombstone(mark)) {\n\t\treturn { ...mark, ...effect };\n\t}\n\tassert(false, 0x818 /* Unexpected combination of mark effects at source and destination */);\n}\n\n/**\n * Represents the marks rebasing should process next.\n * If `baseMark` and `newMark` are both defined, then they are `SizedMark`s covering the same range of nodes.\n */\ninterface RebaseMarks {\n\tbaseMark: Mark;\n\tnewMark: Mark;\n}\n\nfunction rebaseMark(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\trebaseChild: NodeChangeRebaser,\n\tmoveEffects: MoveEffectTable,\n): Mark {\n\tconst rebasedMark = rebaseNodeChange(cloneMark(currMark), baseMark, rebaseChild);\n\tconst movedNodeChanges = getMovedChangesFromBaseMark(moveEffects, baseMark);\n\tif (movedNodeChanges !== undefined) {\n\t\tassert(\n\t\t\trebasedMark.changes === undefined,\n\t\t\t0x8dc /* Unexpected collision of new node changes */,\n\t\t);\n\t\trebasedMark.changes = movedNodeChanges;\n\t\tmoveEffects.onMoveIn(movedNodeChanges);\n\t}\n\n\treturn rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects);\n}\n\nfunction rebaseMarkIgnoreChild(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\tmoveEffects: MoveEffectTable,\n): Mark {\n\tlet rebasedMark: Mark;\n\tif (isDetach(baseMark)) {\n\t\tif (baseMark.cellId !== undefined) {\n\t\t\t// Detaches on empty cells have an implicit revive effect.\n\t\t\tdelete currMark.cellId;\n\t\t}\n\t\tassert(\n\t\t\t!isNewAttach(currMark),\n\t\t\t0x69d /* A new attach should not be rebased over its cell being emptied */,\n\t\t);\n\t\tconst baseCellId = getDetachOutputCellId(baseMark);\n\n\t\tif (isMoveOut(baseMark)) {\n\t\t\tassert(isMoveMark(baseMark), 0x6f0 /* Only move marks have move IDs */);\n\t\t\tassert(\n\t\t\t\t!isNewAttach(currMark),\n\t\t\t\t0x819 /* New attaches should not be rebased over moves */,\n\t\t\t);\n\t\t\tconst { remains, follows } = separateEffectsForMove(extractMarkEffect(currMark));\n\t\t\tif (follows !== undefined) {\n\t\t\t\tsendEffectToDest(follows, moveEffects, getEndpoint(baseMark), baseMark.count);\n\t\t\t}\n\n\t\t\tif (currMark.changes !== undefined) {\n\t\t\t\tmoveRebasedChanges(currMark.changes, moveEffects, getEndpoint(baseMark));\n\t\t\t}\n\t\t\trebasedMark = { ...(remains ?? {}), count: baseMark.count };\n\t\t} else {\n\t\t\trebasedMark = currMark;\n\t\t}\n\t\trebasedMark = makeDetachedMark(rebasedMark, cloneCellId(baseCellId));\n\t} else if (markFillsCells(baseMark)) {\n\t\trebasedMark = isAttachAndDetachEffect(currMark)\n\t\t\t? withNodeChange({ ...currMark.detach, count: currMark.count }, currMark.changes)\n\t\t\t: withCellId(currMark, undefined);\n\t} else if (isAttachAndDetachEffect(baseMark)) {\n\t\tassert(\n\t\t\tbaseMark.cellId !== undefined,\n\t\t\t0x81a /* AttachAndDetach mark should target an empty cell */,\n\t\t);\n\t\tconst halfRebasedMark = rebaseMarkIgnoreChild(\n\t\t\tcurrMark,\n\t\t\t{ ...baseMark.attach, cellId: cloneCellId(baseMark.cellId), count: baseMark.count },\n\t\t\tmoveEffects,\n\t\t);\n\t\trebasedMark = rebaseMarkIgnoreChild(\n\t\t\thalfRebasedMark,\n\t\t\t{ ...baseMark.detach, count: baseMark.count },\n\t\t\tmoveEffects,\n\t\t);\n\t} else if (isRename(baseMark)) {\n\t\treturn withCellId(currMark, getDetachOutputCellId(baseMark));\n\t} else {\n\t\trebasedMark = currMark;\n\t}\n\treturn rebasedMark;\n}\n\n/**\n * Returns a pair of marks that represent the effects which should remain in place in the face of concurrent move,\n * and the effects that should be sent to the move destination.\n */\nfunction separateEffectsForMove(mark: MarkEffect): {\n\tremains?: MarkEffect;\n\tfollows?: Detach;\n} {\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase \"Remove\":\n\t\tcase \"MoveOut\": {\n\t\t\t// There are two scenarios that lead to a Detach mark having an idOverride:\n\t\t\t// 1. The detach is a rollback (the idOverride the original id that the cell had in the input context of the attach being rolled back).\n\t\t\t// 2. The detach has been composed with a Rename (the idOverride is the cell id in the output context of the rename).\n\t\t\t// Since rollbacks are never rebased, we can safely assume that the idOverride is due to a Rename (scenario #2).\n\t\t\t// While the detach must follow the node that it targets, the rename must remain in place because it targets the cell.\n\t\t\tif (mark.idOverride !== undefined) {\n\t\t\t\tconst remains: MarkEffect = { type: \"Rename\", idOverride: mark.idOverride };\n\t\t\t\tconst follows: Mutable<MarkEffect> = { ...mark };\n\t\t\t\tdelete follows.idOverride;\n\t\t\t\treturn { remains, follows };\n\t\t\t}\n\t\t\treturn { follows: mark };\n\t\t}\n\t\tcase \"AttachAndDetach\": {\n\t\t\treturn { follows: mark.detach, remains: mark.attach };\n\t\t}\n\t\tcase \"MoveIn\":\n\t\tcase \"Rename\": {\n\t\t\treturn { remains: mark };\n\t\t}\n\t\tcase NoopMarkType: {\n\t\t\treturn {};\n\t\t}\n\t\tcase \"Insert\": {\n\t\t\tconst follows: MoveOut = {\n\t\t\t\ttype: \"MoveOut\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\t\t\tconst remains: MoveIn = {\n\t\t\t\ttype: \"MoveIn\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\t\t\tif (mark.revision !== undefined) {\n\t\t\t\tfollows.revision = mark.revision;\n\t\t\t\tremains.revision = mark.revision;\n\t\t\t}\n\t\t\treturn { remains, follows };\n\t\t}\n\t\tdefault: {\n\t\t\tunreachableCase(type);\n\t\t}\n\t}\n}\n\n// TODO: Reduce the duplication between this and other MoveEffect helpers\nfunction sendEffectToDest(\n\tmarkEffect: Detach,\n\tmoveEffects: MoveEffectTable,\n\t{ revision, localId: id }: ChangeAtomId,\n\tcount: number,\n): void {\n\tconst effect = getMoveEffect(\n\t\tmoveEffects,\n\t\tCrossFieldTarget.Destination,\n\t\trevision,\n\t\tid,\n\t\tcount,\n\t\tfalse,\n\t);\n\tif (effect.length < count) {\n\t\tconst [markEffect1, markEffect2] = splitMarkEffect(markEffect, effect.length);\n\t\tconst newEffect =\n\t\t\teffect.value === undefined\n\t\t\t\t? { movedMark: markEffect1 }\n\t\t\t\t: { ...effect.value, movedMark: markEffect1 };\n\t\tsetMoveEffect(\n\t\t\tmoveEffects,\n\t\t\tCrossFieldTarget.Destination,\n\t\t\trevision,\n\t\t\tid,\n\t\t\teffect.length,\n\t\t\tnewEffect,\n\t\t);\n\t\tsendEffectToDest(\n\t\t\tmarkEffect2,\n\t\t\tmoveEffects,\n\t\t\t{ revision, localId: brand(id + effect.length) },\n\t\t\tcount - effect.length,\n\t\t);\n\t} else {\n\t\tconst newEffect: MoveEffect =\n\t\t\teffect.value === undefined\n\t\t\t\t? { movedEffect: markEffect }\n\t\t\t\t: { ...effect.value, movedEffect: markEffect };\n\t\tsetMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count, newEffect);\n\t}\n}\n\nfunction moveRebasedChanges(\n\tnodeChange: NodeId,\n\tmoveEffects: MoveEffectTable,\n\t{ revision, localId: id }: ChangeAtomId,\n): void {\n\tconst effect = getMoveEffect(\n\t\tmoveEffects,\n\t\tCrossFieldTarget.Destination,\n\t\trevision,\n\t\tid,\n\t\t1,\n\t\tfalse,\n\t).value;\n\n\tconst newEffect =\n\t\teffect === undefined\n\t\t\t? { rebasedChanges: nodeChange }\n\t\t\t: { ...effect, rebasedChanges: nodeChange };\n\n\tsetMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, 1, newEffect);\n}\n\nfunction rebaseNodeChange(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\tnodeRebaser: NodeChangeRebaser,\n): Mark {\n\tconst baseChange = baseMark.changes;\n\tconst currChange = currMark.changes;\n\n\tif (baseChange === undefined && currChange === undefined) {\n\t\treturn currMark;\n\t}\n\n\tconst nodeState = nodeStateAfterMark(baseMark);\n\treturn withNodeChange(currMark, nodeRebaser(currChange, baseChange, nodeState));\n}\n\nfunction nodeStateAfterMark(mark: Mark): NodeAttachState {\n\tif (markEmptiesCells(mark)) {\n\t\treturn NodeAttachState.Detached;\n\t} else if (markFillsCells(mark)) {\n\t\treturn NodeAttachState.Attached;\n\t} else {\n\t\treturn mark.cellId === undefined ? NodeAttachState.Attached : NodeAttachState.Detached;\n\t}\n}\n\nfunction makeDetachedMark(mark: Mark, cellId: ChangeAtomId): Mark {\n\tassert(mark.cellId === undefined, 0x69f /* Expected mark to be attached */);\n\treturn { ...mark, cellId };\n}\n\nfunction withCellId<TMark extends Mark>(mark: TMark, cellId: CellId | undefined): TMark {\n\tconst newMark = { ...mark, cellId };\n\tif (cellId === undefined) {\n\t\tdelete newMark.cellId;\n\t}\n\treturn newMark;\n}\n\nfunction getMovedEffectFromBaseMark(\n\tmoveEffects: MoveEffectTable,\n\tbaseMark: Mark,\n): Detach | undefined {\n\tif (isMoveIn(baseMark)) {\n\t\treturn getMovedEffect(moveEffects, baseMark.revision, baseMark.id, baseMark.count);\n\t} else if (isAttachAndDetachEffect(baseMark) && isMoveIn(baseMark.attach)) {\n\t\treturn getMovedEffect(\n\t\t\tmoveEffects,\n\t\t\tbaseMark.attach.revision,\n\t\t\tbaseMark.attach.id,\n\t\t\tbaseMark.count,\n\t\t);\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\n// It is expected that the range from `id` to `id + count - 1` has the same move effect.\n// The call sites to this function are making queries about a mark which has already been split by a `MarkQueue`\n// to match the ranges in `moveEffects`.\n// TODO: Reduce the duplication between this and other MoveEffect helpers\nfunction getMovedEffect(\n\tmoveEffects: MoveEffectTable,\n\trevision: RevisionTag | undefined,\n\tid: MoveId,\n\tcount: number,\n): Detach | undefined {\n\tconst effect = getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count);\n\tassert(effect.length === count, 0x6f3 /* Expected effect to cover entire mark */);\n\tconst movedEffect = effect.value?.movedEffect;\n\tif (movedEffect === undefined) {\n\t\treturn undefined;\n\t}\n\tif (isMoveOut(movedEffect)) {\n\t\tmoveEffects.moveKey(CrossFieldTarget.Source, movedEffect.revision, movedEffect.id, count);\n\t}\n\treturn movedEffect;\n}\n\nfunction getMovedChangesFromBaseMark(\n\tmoveEffects: MoveEffectTable,\n\tbaseMark: Mark,\n): NodeId | undefined {\n\tif (isMoveIn(baseMark)) {\n\t\treturn getMovedNodeChanges(moveEffects, baseMark.revision, baseMark.id, baseMark.count);\n\t} else if (isAttachAndDetachEffect(baseMark) && isMoveIn(baseMark.attach)) {\n\t\treturn getMovedNodeChanges(\n\t\t\tmoveEffects,\n\t\t\tbaseMark.attach.revision,\n\t\t\tbaseMark.attach.id,\n\t\t\tbaseMark.count,\n\t\t);\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\nfunction getMovedNodeChanges(\n\tmoveEffects: MoveEffectTable,\n\trevision: RevisionTag | undefined,\n\tid: MoveId,\n\tcount: number,\n): NodeId | undefined {\n\treturn getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count).value\n\t\t?.rebasedChanges;\n}\n"]}
1
+ {"version":3,"file":"rebase.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/rebase.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 { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tareEqualChangeAtomIds,\n\ttype ChangeAtomId,\n\ttype RevisionMetadataSource,\n\ttype RevisionTag,\n} from \"../../core/index.js\";\nimport type { IdAllocator, Mutable } from \"../../util/index.js\";\nimport {\n\ttype RebaseNodeManager,\n\ttype NodeChangeRebaser,\n\tNodeAttachState,\n\ttype NodeId,\n\ttype RebaseRevisionMetadata,\n} from \"../modular-schema/index.js\";\n\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport { MarkQueue } from \"./markQueue.js\";\nimport type { NodeRangeQueryFunc } from \"./moveEffectTable.js\";\nimport {\n\ttype Attach,\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Detach,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MarkList,\n\ttype MoveId,\n\ttype NoopMark,\n\tNoopMarkType,\n} from \"./types.js\";\nimport {\n\tCellOrder,\n\tareInputCellsEmpty,\n\tcellSourcesFromMarks,\n\tcloneCellId,\n\tcloneMark,\n\tcompareCellPositionsUsingTombstones,\n\textractMarkEffect,\n\tgetAttachedRootId,\n\tgetDetachOutputCellId,\n\tgetDetachedRootId,\n\tgetInputCellId,\n\tgetOutputCellId,\n\tisAttach,\n\tisDetach,\n\tisNewAttach,\n\tisRename,\n\tisTombstone,\n\tmarkEmptiesCells,\n\tmarkFillsCells,\n\twithNodeChange,\n} from \"./utils.js\";\n\n/**\n * Rebases `change` over `base` assuming they both apply to the same initial state.\n * @param change - The changeset to rebase.\n * @param base - The changeset to rebase over.\n * @returns A changeset that performs the changes in `change` but does so assuming `base` has been applied first.\n */\nexport function rebase(\n\tchange: Changeset,\n\tbase: Changeset,\n\trebaseChild: NodeChangeRebaser,\n\tgenId: IdAllocator,\n\tmanager: RebaseNodeManager,\n\trevisionMetadata: RebaseRevisionMetadata,\n): Changeset {\n\treturn rebaseMarkList(change, base, revisionMetadata, rebaseChild, genId, manager);\n}\n\nfunction rebaseMarkList(\n\tcurrMarkList: MarkList,\n\tbaseMarkList: MarkList,\n\tmetadata: RebaseRevisionMetadata,\n\trebaseChild: NodeChangeRebaser,\n\tgenId: IdAllocator,\n\tmoveEffects: RebaseNodeManager,\n): MarkList {\n\tconst factory = new MarkListFactory();\n\tconst queue = new RebaseQueue(baseMarkList, currMarkList, metadata, moveEffects);\n\n\twhile (!queue.isEmpty()) {\n\t\tconst { baseMark, newMark: currMark } = queue.pop();\n\t\tconst rebasedMark = rebaseMark(currMark, baseMark, rebaseChild, moveEffects);\n\t\tfactory.push(rebasedMark);\n\t}\n\n\treturn factory.list;\n}\n\n/**\n * Generates a NoOp mark that targets the same cells as the input mark.\n * @param mark - The mark the NoOp should target.\n * @param revision - The revision, if available.\n * @returns A NoOp mark that targets the same cells as the input mark.\n */\nfunction generateNoOpWithCellId(mark: Mark): CellMark<NoopMark> {\n\tconst length = mark.count;\n\tconst cellId = getInputCellId(mark);\n\treturn cellId === undefined ? { count: length } : { count: length, cellId };\n}\n\nclass RebaseQueue {\n\tprivate readonly baseMarks: MarkQueue;\n\tprivate readonly newMarks: MarkQueue;\n\tprivate readonly baseMarksCellSources: ReadonlySet<RevisionTag | undefined>;\n\tprivate readonly newMarksCellSources: ReadonlySet<RevisionTag | undefined>;\n\n\tpublic constructor(\n\t\tbaseMarks: Changeset,\n\t\tnewMarks: Changeset,\n\t\tprivate readonly metadata: RevisionMetadataSource,\n\t\tprivate readonly moveEffects: RebaseNodeManager,\n\t) {\n\t\tconst queryFunc: NodeRangeQueryFunc = (mark) => {\n\t\t\tif (isAttach(mark)) {\n\t\t\t\treturn moveEffects.getNewChangesForBaseAttach(getAttachedRootId(mark), mark.count)\n\t\t\t\t\t.length;\n\t\t\t} else if (isDetach(mark)) {\n\t\t\t\treturn moveEffects.doesBaseAttachNodes(getDetachedRootId(mark), mark.count).length;\n\t\t\t}\n\n\t\t\tlet count = mark.count;\n\t\t\tif (mark.type === \"Rename\") {\n\t\t\t\tcount = moveEffects.getNewRenameForBaseRename(mark.idOverride, count).length;\n\t\t\t}\n\n\t\t\treturn mark.cellId === undefined\n\t\t\t\t? count\n\t\t\t\t: moveEffects.doesBaseAttachNodes(mark.cellId, count).length;\n\t\t};\n\n\t\tthis.baseMarks = new MarkQueue(baseMarks, queryFunc);\n\t\tthis.newMarks = new MarkQueue(newMarks, (mark) => mark.count);\n\t\tthis.baseMarksCellSources = cellSourcesFromMarks(baseMarks, getInputCellId);\n\t\tthis.newMarksCellSources = cellSourcesFromMarks(newMarks, getInputCellId);\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\treturn this.baseMarks.isEmpty() && this.newMarks.isEmpty();\n\t}\n\n\tpublic pop(): RebaseMarks {\n\t\tconst baseMark = this.baseMarks.peek();\n\t\tconst newMark = this.newMarks.peek();\n\t\tassert(\n\t\t\t!(baseMark === undefined && newMark === undefined),\n\t\t\t0x722 /* Cannot pop from empty queue */,\n\t\t);\n\n\t\tif (baseMark === undefined) {\n\t\t\tconst dequeuedNewMark = this.newMarks.dequeue();\n\t\t\treturn {\n\t\t\t\tbaseMark: generateNoOpWithCellId(dequeuedNewMark),\n\t\t\t\tnewMark: dequeuedNewMark,\n\t\t\t};\n\t\t} else if (newMark === undefined) {\n\t\t\treturn this.dequeueBase();\n\t\t} else if (areInputCellsEmpty(baseMark) && areInputCellsEmpty(newMark)) {\n\t\t\tconst baseId = getInputCellId(baseMark);\n\t\t\tconst newId = getInputCellId(newMark);\n\t\t\tassert(\n\t\t\t\tbaseId !== undefined && newId !== undefined,\n\t\t\t\t0x89f /* Both marks should have cell IDs */,\n\t\t\t);\n\t\t\tconst comparison = compareCellPositionsUsingTombstones(\n\t\t\t\tbaseId,\n\t\t\t\tnewId,\n\t\t\t\tthis.baseMarksCellSources,\n\t\t\t\tthis.newMarksCellSources,\n\t\t\t\tthis.metadata,\n\t\t\t);\n\t\t\tswitch (comparison) {\n\t\t\t\tcase CellOrder.SameCell: {\n\t\t\t\t\treturn this.dequeueBoth();\n\t\t\t\t}\n\t\t\t\tcase CellOrder.OldThenNew: {\n\t\t\t\t\treturn this.dequeueBase();\n\t\t\t\t}\n\t\t\t\tcase CellOrder.NewThenOld: {\n\t\t\t\t\treturn this.dequeueNew();\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tunreachableCase(comparison);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (areInputCellsEmpty(newMark)) {\n\t\t\treturn this.dequeueNew();\n\t\t} else if (areInputCellsEmpty(baseMark)) {\n\t\t\treturn this.dequeueBase();\n\t\t} else {\n\t\t\treturn this.dequeueBoth();\n\t\t}\n\t}\n\n\tprivate dequeueBase(length?: number): RebaseMarks {\n\t\tconst baseMark =\n\t\t\tlength === undefined ? this.baseMarks.dequeue() : this.baseMarks.dequeueUpTo(length);\n\n\t\tlet newMark: Mark = generateNoOpWithCellId(baseMark);\n\n\t\tconst movedEffect = getMovedEffectFromBaseMark(this.moveEffects, baseMark);\n\n\t\tif (movedEffect !== undefined) {\n\t\t\tnewMark = addMovedMarkEffect(newMark, movedEffect);\n\t\t}\n\n\t\treturn {\n\t\t\tbaseMark,\n\t\t\tnewMark,\n\t\t};\n\t}\n\n\tprivate dequeueNew(): RebaseMarks {\n\t\tconst newMark = this.newMarks.dequeue();\n\t\treturn { newMark, baseMark: generateNoOpWithCellId(newMark) };\n\t}\n\n\tprivate dequeueBoth(): RebaseMarks {\n\t\tconst baseMark = this.baseMarks.peek();\n\t\tconst newMark = this.newMarks.peek();\n\t\tassert(\n\t\t\tbaseMark !== undefined && newMark !== undefined,\n\t\t\t0x69c /* Cannot dequeue both unless both mark queues are non-empty */,\n\t\t);\n\t\tconst length = Math.min(newMark.count, baseMark.count);\n\t\tconst sizedBaseMark = this.baseMarks.dequeueUpTo(length);\n\t\tconst sizedNewMark = this.newMarks.dequeueUpTo(length);\n\t\tconst movedMark = getMovedEffectFromBaseMark(this.moveEffects, sizedBaseMark);\n\t\treturn {\n\t\t\tbaseMark: sizedBaseMark,\n\t\t\tnewMark:\n\t\t\t\tmovedMark === undefined ? sizedNewMark : addMovedMarkEffect(sizedNewMark, movedMark),\n\t\t};\n\t}\n}\n\n/**\n * Combines `mark` and `effect` into a single mark.\n * This function is only intended to handle cases where `mark` is part of a changeset being rebased\n * and `effect` is an effect from the same changeset whose target has been moved by the base changeset.\n * @returns a mark which has the composite effect of `mark` and `effect`.\n */\nfunction addMovedMarkEffect(mark: Mark, effect: Detach): Mark {\n\tif (isAttach(mark) && isDetach(effect)) {\n\t\treturn { ...mark, type: \"Insert\" };\n\t} else if (isRename(mark) && isDetach(effect)) {\n\t\tconst result = { ...effect, count: mark.count };\n\t\tif (!areEqualChangeAtomIds(mark.idOverride, getDetachedRootId(effect))) {\n\t\t\tresult.detachCellId = mark.idOverride;\n\t\t}\n\t\treturn result;\n\t} else if (isTombstone(mark)) {\n\t\treturn { ...mark, ...effect };\n\t}\n\tassert(false, 0x818 /* Unexpected combination of mark effects at source and destination */);\n}\n\n/**\n * Represents the marks rebasing should process next.\n * If `baseMark` and `newMark` are both defined, then they are `SizedMark`s covering the same range of nodes.\n */\ninterface RebaseMarks {\n\tbaseMark: Mark;\n\tnewMark: Mark;\n}\n\nfunction rebaseMark(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\trebaseChild: NodeChangeRebaser,\n\tmoveEffects: RebaseNodeManager,\n): Mark {\n\tconst rebasedMark = rebaseNodeChange(cloneMark(currMark), baseMark, rebaseChild);\n\tconst movedNodeChanges = getMovedChangesFromBaseMark(moveEffects, baseMark);\n\tif (movedNodeChanges !== undefined) {\n\t\tassert(\n\t\t\trebasedMark.changes === undefined,\n\t\t\t0x8dc /* Unexpected collision of new node changes */,\n\t\t);\n\t\trebasedMark.changes = movedNodeChanges;\n\t}\n\n\treturn rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects);\n}\n\nfunction rebaseMarkIgnoreChild(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\tmoveEffects: RebaseNodeManager,\n): Mark {\n\tlet rebasedMark: Mark;\n\tif (isDetach(baseMark)) {\n\t\tif (baseMark.cellId !== undefined) {\n\t\t\t// Detaches on empty cells have an implicit revive effect.\n\t\t\tdelete currMark.cellId;\n\t\t}\n\t\tassert(\n\t\t\t!isNewAttach(currMark),\n\t\t\t0x69d /* A new attach should not be rebased over its cell being emptied */,\n\t\t);\n\t\tconst baseCellId = getDetachOutputCellId(baseMark);\n\t\tconst baseDetachId = getDetachedRootId(baseMark);\n\n\t\tconst { remains, follows } = separateEffectsForMove(\n\t\t\textractMarkEffect(currMark),\n\t\t\tbaseMark,\n\t\t\tmoveEffects,\n\t\t);\n\n\t\tmoveRebasedChanges(moveEffects, baseDetachId, baseMark.count, currMark.changes, follows);\n\t\trebasedMark = { ...remains, count: baseMark.count };\n\t\treturn makeDetachedMark(rebasedMark, cloneCellId(baseCellId));\n\t} else if (markFillsCells(baseMark)) {\n\t\treturn withCellId(currMark, undefined);\n\t} else if (isRename(baseMark)) {\n\t\tif (currMark.type === \"Rename\") {\n\t\t\tconst doesBaseMoveAndAttach = moveEffects.doesBaseAttachNodes(\n\t\t\t\tbaseMark.idOverride,\n\t\t\t\tbaseMark.count,\n\t\t\t).value;\n\n\t\t\tassert(baseMark.cellId !== undefined, \"Rename should target empty cells\");\n\t\t\tconst baseRootRename = moveEffects.getBaseRename(baseMark.cellId, baseMark.count).value;\n\t\t\tconst doesBaseMoveAndDetach =\n\t\t\t\tbaseRootRename !== undefined &&\n\t\t\t\t!areEqualChangeAtomIds(baseRootRename, baseMark.idOverride);\n\n\t\t\tif (doesBaseMoveAndAttach || doesBaseMoveAndDetach) {\n\t\t\t\t// `newMark` represents a node-targeting rename.\n\t\t\t\t// The base changeset has moved the node which was last detached from the cell,\n\t\t\t\t// so we should remove the rename from this location.\n\t\t\t\treturn { cellId: baseMark.idOverride, count: baseMark.count };\n\t\t\t}\n\t\t}\n\n\t\tconst newRenameId = moveEffects.getNewRenameForBaseRename(\n\t\t\tbaseMark.idOverride,\n\t\t\tbaseMark.count,\n\t\t).value;\n\n\t\tif (newRenameId !== undefined && currMark.type !== \"Insert\") {\n\t\t\treturn {\n\t\t\t\ttype: \"Rename\",\n\t\t\t\tcellId: baseMark.idOverride,\n\t\t\t\tcount: baseMark.count,\n\t\t\t\tidOverride: newRenameId,\n\t\t\t};\n\t\t}\n\n\t\treturn withCellId(currMark, getOutputCellId(baseMark));\n\t} else {\n\t\treturn currMark;\n\t}\n}\n\n/**\n * Returns a pair of marks that represent the effects which should remain in place in the face of concurrent move,\n * and the effects that should be sent to the move destination.\n */\nfunction separateEffectsForMove(\n\tmark: MarkEffect,\n\tbaseMark: CellMark<Detach>,\n\tnodeManager: RebaseNodeManager,\n): {\n\tremains?: MarkEffect;\n\tfollows?: Detach;\n} {\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType: {\n\t\t\treturn {};\n\t\t}\n\t\tcase \"Remove\": {\n\t\t\tif (mark.cellRename !== undefined) {\n\t\t\t\treturn { remains: { type: \"Rename\", idOverride: mark.cellRename }, follows: mark };\n\t\t\t}\n\n\t\t\tconst baseDetachId = getDetachedRootId(baseMark);\n\t\t\tconst outputCellId = getDetachOutputCellId(baseMark);\n\t\t\tconst doesBaseMoveNodes =\n\t\t\t\t!areEqualChangeAtomIds(outputCellId, baseDetachId) ||\n\t\t\t\tnodeManager.doesBaseAttachNodes(baseDetachId, baseMark.count).value;\n\n\t\t\t// We should rename these cells unless the nodes are reattached elsewhere,\n\t\t\t// in which case we will rename those cells instead.\n\t\t\tconst remains: MarkEffect = doesBaseMoveNodes\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\ttype: \"Rename\",\n\t\t\t\t\t\tidOverride: getDetachOutputCellId(mark),\n\t\t\t\t\t};\n\n\t\t\treturn { remains, follows: mark };\n\t\t}\n\t\tcase \"Rename\": {\n\t\t\treturn { remains: mark };\n\t\t}\n\t\tcase \"Insert\": {\n\t\t\tconst follows: Mutable<Detach> = {\n\t\t\t\ttype: \"Remove\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\n\t\t\tif (mark.detachCellId !== undefined) {\n\t\t\t\tfollows.detachCellId = mark.detachCellId;\n\t\t\t}\n\n\t\t\tconst remains: Attach = {\n\t\t\t\ttype: \"Insert\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\t\t\tif (mark.revision !== undefined) {\n\t\t\t\tfollows.revision = mark.revision;\n\t\t\t\tremains.revision = mark.revision;\n\t\t\t}\n\t\t\treturn { remains, follows };\n\t\t}\n\t\tdefault: {\n\t\t\tunreachableCase(type);\n\t\t}\n\t}\n}\n\nfunction moveRebasedChanges(\n\tmoveEffects: RebaseNodeManager,\n\tbaseId: ChangeAtomId,\n\tcount: number,\n\tnodeChange: NodeId | undefined,\n\tnewDetach: Detach | undefined,\n): void {\n\tconst newId = newDetach === undefined ? undefined : getDetachedRootId(newDetach);\n\tconst detachCellId = newDetach?.detachCellId;\n\tmoveEffects.rebaseOverDetach(baseId, count, newId, nodeChange, detachCellId);\n}\n\nfunction rebaseNodeChange(\n\tcurrMark: Mark,\n\tbaseMark: Mark,\n\tnodeRebaser: NodeChangeRebaser,\n): Mark {\n\tconst baseChange = baseMark.changes;\n\tconst currChange = currMark.changes;\n\n\tif (baseChange === undefined && currChange === undefined) {\n\t\treturn currMark;\n\t}\n\n\tconst nodeState = nodeStateAfterMark(baseMark);\n\treturn withNodeChange(currMark, nodeRebaser(currChange, baseChange, nodeState));\n}\n\nfunction nodeStateAfterMark(mark: Mark): NodeAttachState {\n\tif (markEmptiesCells(mark)) {\n\t\treturn NodeAttachState.Detached;\n\t} else if (markFillsCells(mark)) {\n\t\treturn NodeAttachState.Attached;\n\t} else {\n\t\treturn mark.cellId === undefined ? NodeAttachState.Attached : NodeAttachState.Detached;\n\t}\n}\n\nfunction makeDetachedMark(mark: Mark, cellId: ChangeAtomId): Mark {\n\tassert(mark.cellId === undefined, 0x69f /* Expected mark to be attached */);\n\treturn { ...mark, cellId };\n}\n\nfunction withCellId<TMark extends Mark>(mark: TMark, cellId: CellId | undefined): TMark {\n\tconst newMark = { ...mark, cellId };\n\tif (cellId === undefined) {\n\t\tdelete newMark.cellId;\n\t}\n\treturn newMark;\n}\n\nfunction getMovedEffectFromBaseMark(\n\tmoveEffects: RebaseNodeManager,\n\tbaseMark: Mark,\n): Detach | undefined {\n\treturn isAttach(baseMark)\n\t\t? getMovedEffect(moveEffects, baseMark.revision, baseMark.id, baseMark.count)\n\t\t: undefined;\n}\n\n// It is expected that the range from `id` to `id + count - 1` has the same move effect.\n// The call sites to this function are making queries about a mark which has already been split by a `MarkQueue`\n// to match the ranges in `moveEffects`.\n// TODO: Reduce the duplication between this and other MoveEffect helpers\nfunction getMovedEffect(\n\tmoveEffects: RebaseNodeManager,\n\trevision: RevisionTag | undefined,\n\tlocalId: MoveId,\n\tcount: number,\n): Detach | undefined {\n\tconst entry = moveEffects.getNewChangesForBaseAttach({ revision, localId }, count);\n\tassert(entry.length === count, 0x6f3 /* Expected effect to cover entire mark */);\n\tconst detachId = entry.value?.detachId;\n\tif (detachId === undefined) {\n\t\tassert(\n\t\t\tentry.value?.cellRename === undefined,\n\t\t\t\"Cell detach should be accompanied by node detach\",\n\t\t);\n\t\treturn undefined;\n\t}\n\n\tconst detach: Mutable<Detach> = {\n\t\ttype: \"Remove\",\n\t\trevision: detachId.revision,\n\t\tid: detachId.localId,\n\t};\n\tif (entry.value?.cellRename !== undefined) {\n\t\tdetach.detachCellId = entry.value.cellRename;\n\t}\n\n\treturn detach;\n}\n\nfunction getMovedChangesFromBaseMark(\n\tmoveEffects: RebaseNodeManager,\n\tbaseMark: Mark,\n): NodeId | undefined {\n\treturn isAttach(baseMark)\n\t\t? getMovedNodeChanges(moveEffects, baseMark.revision, baseMark.id)\n\t\t: undefined;\n}\n\nfunction getMovedNodeChanges(\n\tmoveEffects: RebaseNodeManager,\n\trevision: RevisionTag | undefined,\n\tlocalId: MoveId,\n): NodeId | undefined {\n\treturn moveEffects.getNewChangesForBaseAttach({ revision, localId }, 1).value?.nodeChange;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"replaceRevisions.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/replaceRevisions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAGN,KAAK,gBAAgB,EAErB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACN,KAAK,SAAS,EAWd,MAAM,YAAY,CAAC;AAGpB,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAQ5F"}
1
+ {"version":3,"file":"replaceRevisions.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/replaceRevisions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAGN,KAAK,gBAAgB,EAErB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAEN,KAAK,SAAS,EAOd,MAAM,YAAY,CAAC;AAGpB,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAQ5F"}
@@ -6,7 +6,6 @@ import { unreachableCase } from "@fluidframework/core-utils/internal";
6
6
  import { makeChangeAtomId, } from "../../core/index.js";
7
7
  import { MarkListFactory } from "./markListFactory.js";
8
8
  import { NoopMarkType, } from "./types.js";
9
- import { isDetach, isRename } from "./utils.js";
10
9
  export function replaceRevisions(changeset, replacer) {
11
10
  const updatedMarks = new MarkListFactory();
12
11
  for (const mark of changeset) {
@@ -16,7 +15,7 @@ export function replaceRevisions(changeset, replacer) {
16
15
  return updatedMarks.list;
17
16
  }
18
17
  function updateMark(mark, replacer) {
19
- const updatedMark = { ...updateEffect(mark, replacer) };
18
+ const updatedMark = { ...replaceEffectRevisions(mark, replacer) };
20
19
  if (mark.cellId !== undefined) {
21
20
  updatedMark.cellId = replacer.getUpdatedAtomId(mark.cellId);
22
21
  }
@@ -25,50 +24,38 @@ function updateMark(mark, replacer) {
25
24
  }
26
25
  return updatedMark;
27
26
  }
28
- function updateEffect(input, replacer) {
29
- const mark = isDetach(input) || isRename(input) ? updateIdOverride(input, replacer) : input;
27
+ function replaceEffectRevisions(mark, replacer) {
30
28
  const type = mark.type;
31
29
  switch (type) {
32
- case "Rename":
33
30
  case NoopMarkType: {
34
31
  return mark;
35
32
  }
36
- case "AttachAndDetach": {
33
+ case "Insert": {
34
+ return updateRevisionAndId(mark, replacer);
35
+ }
36
+ case "Remove": {
37
+ return replaceDetachRevisions(mark, replacer);
38
+ }
39
+ case "Rename": {
37
40
  return {
38
41
  ...mark,
39
- attach: updateEffect(mark.attach, replacer),
40
- detach: updateEffect(mark.detach, replacer),
42
+ idOverride: replacer.getUpdatedAtomId(mark.idOverride),
41
43
  };
42
44
  }
43
- case "MoveIn":
44
- case "MoveOut": {
45
- return updateMoveEffect(
46
- // For some reason, TypeScript is not able to infer that `mark` cannot be a `NoopMark` here.
47
- mark, replacer);
48
- }
49
- case "Insert":
50
- case "Remove": {
51
- return updateRevisionAndId(mark, replacer);
52
- }
53
45
  default: {
54
46
  unreachableCase(type);
55
47
  }
56
48
  }
57
49
  }
58
- function updateIdOverride(effect, replacer) {
59
- if (effect.idOverride === undefined) {
60
- return effect;
50
+ function replaceDetachRevisions(detach, replacer) {
51
+ const updated = updateRevisionAndId(detach, replacer);
52
+ if (updated.cellRename !== undefined) {
53
+ updated.cellRename = replacer.getUpdatedAtomId(updated.cellRename);
61
54
  }
62
- const idOverride = replacer.getUpdatedAtomId(effect.idOverride);
63
- return { ...effect, idOverride };
64
- }
65
- function updateMoveEffect(effect, replacer) {
66
- return effect.finalEndpoint === undefined
67
- ? updateRevisionAndId(effect, replacer)
68
- : updateRevisionAndId({
69
- ...effect,
70
- finalEndpoint: replacer.getUpdatedAtomId(effect.finalEndpoint),
71
- }, replacer);
55
+ if (updated.detachCellId !== undefined) {
56
+ updated.detachCellId = replacer.getUpdatedAtomId(updated.detachCellId);
57
+ }
58
+ return updated;
72
59
  }
73
60
  function updateRevisionAndId(input, replacer) {
74
61
  if (!replacer.isObsolete(input.revision)) {
@@ -1 +1 @@
1
- {"version":3,"file":"replaceRevisions.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/replaceRevisions.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 { unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tmakeChangeAtomId,\n\ttype ChangesetLocalId,\n\ttype RevisionReplacer,\n\ttype RevisionTag,\n} from \"../../core/index.js\";\n\nimport type { MoveMarkEffect } from \"./helperTypes.js\";\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport {\n\ttype Changeset,\n\ttype Detach,\n\ttype HasMoveFields,\n\ttype HasMoveId,\n\ttype HasRevisionTag,\n\ttype Insert,\n\ttype Mark,\n\ttype MarkEffect,\n\tNoopMarkType,\n\ttype Remove,\n\ttype Rename,\n} from \"./types.js\";\nimport { isDetach, isRename } from \"./utils.js\";\n\nexport function replaceRevisions(changeset: Changeset, replacer: RevisionReplacer): Changeset {\n\tconst updatedMarks = new MarkListFactory();\n\tfor (const mark of changeset) {\n\t\tconst updatedMark = updateMark(mark, replacer);\n\t\tupdatedMarks.push(updatedMark);\n\t}\n\n\treturn updatedMarks.list;\n}\n\nfunction updateMark(mark: Mark, replacer: RevisionReplacer): Mark {\n\tconst updatedMark = { ...updateEffect(mark, replacer) };\n\tif (mark.cellId !== undefined) {\n\t\tupdatedMark.cellId = replacer.getUpdatedAtomId(mark.cellId);\n\t}\n\n\tif (mark.changes !== undefined) {\n\t\tupdatedMark.changes = replacer.getUpdatedAtomId(mark.changes);\n\t}\n\n\treturn updatedMark;\n}\n\nfunction updateEffect<TMark extends MarkEffect>(\n\tinput: TMark,\n\treplacer: RevisionReplacer,\n): TMark {\n\tconst mark = isDetach(input) || isRename(input) ? updateIdOverride(input, replacer) : input;\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase \"Rename\":\n\t\tcase NoopMarkType: {\n\t\t\treturn mark;\n\t\t}\n\t\tcase \"AttachAndDetach\": {\n\t\t\treturn {\n\t\t\t\t...mark,\n\t\t\t\tattach: updateEffect(mark.attach, replacer),\n\t\t\t\tdetach: updateEffect(mark.detach, replacer),\n\t\t\t};\n\t\t}\n\t\tcase \"MoveIn\":\n\t\tcase \"MoveOut\": {\n\t\t\treturn updateMoveEffect<TMark & MoveMarkEffect>(\n\t\t\t\t// For some reason, TypeScript is not able to infer that `mark` cannot be a `NoopMark` here.\n\t\t\t\tmark as MoveMarkEffect,\n\t\t\t\treplacer,\n\t\t\t);\n\t\t}\n\t\tcase \"Insert\":\n\t\tcase \"Remove\": {\n\t\t\treturn updateRevisionAndId(mark as (TMark & Insert) | (TMark & Remove), replacer);\n\t\t}\n\t\tdefault: {\n\t\t\tunreachableCase(type);\n\t\t}\n\t}\n}\n\nfunction updateIdOverride<TEffect extends Detach | Rename>(\n\teffect: TEffect,\n\treplacer: RevisionReplacer,\n): TEffect {\n\tif (effect.idOverride === undefined) {\n\t\treturn effect;\n\t}\n\tconst idOverride = replacer.getUpdatedAtomId(effect.idOverride);\n\treturn { ...effect, idOverride };\n}\n\nfunction updateMoveEffect<TEffect extends HasMoveFields>(\n\teffect: TEffect,\n\treplacer: RevisionReplacer,\n): TEffect {\n\treturn effect.finalEndpoint === undefined\n\t\t? updateRevisionAndId(effect, replacer)\n\t\t: updateRevisionAndId(\n\t\t\t\t{\n\t\t\t\t\t...effect,\n\t\t\t\t\tfinalEndpoint: replacer.getUpdatedAtomId(effect.finalEndpoint),\n\t\t\t\t},\n\t\t\t\treplacer,\n\t\t\t);\n}\n\nfunction updateRevisionAndId<T extends HasRevisionTag & HasMoveId>(\n\tinput: T,\n\treplacer: RevisionReplacer,\n): T {\n\tif (!replacer.isObsolete(input.revision)) {\n\t\treturn input;\n\t}\n\tconst newAtom = replacer.getUpdatedAtomId(makeChangeAtomId(input.id, input.revision));\n\treturn withRevisionAndId(input, newAtom.revision, newAtom.localId);\n}\n\nfunction withRevisionAndId<T extends HasRevisionTag>(\n\tinput: T,\n\trevision: RevisionTag | undefined,\n\tid: ChangesetLocalId,\n): T {\n\tconst updated = { ...input, revision, id };\n\tif (revision === undefined) {\n\t\tdelete updated.revision;\n\t}\n\n\treturn updated;\n}\n"]}
1
+ {"version":3,"file":"replaceRevisions.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/replaceRevisions.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 { unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tmakeChangeAtomId,\n\ttype ChangesetLocalId,\n\ttype RevisionReplacer,\n\ttype RevisionTag,\n} from \"../../core/index.js\";\n\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport {\n\ttype Attach,\n\ttype Changeset,\n\ttype Detach,\n\ttype HasMoveId,\n\ttype HasRevisionTag,\n\ttype Mark,\n\ttype MarkEffect,\n\tNoopMarkType,\n} from \"./types.js\";\nimport type { Mutable } from \"../../util/index.js\";\n\nexport function replaceRevisions(changeset: Changeset, replacer: RevisionReplacer): Changeset {\n\tconst updatedMarks = new MarkListFactory();\n\tfor (const mark of changeset) {\n\t\tconst updatedMark = updateMark(mark, replacer);\n\t\tupdatedMarks.push(updatedMark);\n\t}\n\n\treturn updatedMarks.list;\n}\n\nfunction updateMark(mark: Mark, replacer: RevisionReplacer): Mark {\n\tconst updatedMark = { ...replaceEffectRevisions(mark, replacer) };\n\tif (mark.cellId !== undefined) {\n\t\tupdatedMark.cellId = replacer.getUpdatedAtomId(mark.cellId);\n\t}\n\n\tif (mark.changes !== undefined) {\n\t\tupdatedMark.changes = replacer.getUpdatedAtomId(mark.changes);\n\t}\n\n\treturn updatedMark;\n}\n\nfunction replaceEffectRevisions<TMark extends MarkEffect>(\n\tmark: TMark,\n\treplacer: RevisionReplacer,\n): TMark {\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType: {\n\t\t\treturn mark;\n\t\t}\n\t\tcase \"Insert\": {\n\t\t\treturn updateRevisionAndId(mark as TMark & Attach, replacer);\n\t\t}\n\n\t\tcase \"Remove\": {\n\t\t\treturn replaceDetachRevisions<TMark & Detach>(mark as Detach & TMark, replacer);\n\t\t}\n\t\tcase \"Rename\": {\n\t\t\treturn {\n\t\t\t\t...mark,\n\t\t\t\tidOverride: replacer.getUpdatedAtomId(mark.idOverride),\n\t\t\t};\n\t\t}\n\t\tdefault: {\n\t\t\tunreachableCase(type);\n\t\t}\n\t}\n}\n\nfunction replaceDetachRevisions<TDetach extends Detach>(\n\tdetach: TDetach,\n\treplacer: RevisionReplacer,\n): TDetach {\n\tconst updated = updateRevisionAndId(detach, replacer) as Mutable<TDetach>;\n\tif (updated.cellRename !== undefined) {\n\t\tupdated.cellRename = replacer.getUpdatedAtomId(updated.cellRename);\n\t}\n\n\tif (updated.detachCellId !== undefined) {\n\t\tupdated.detachCellId = replacer.getUpdatedAtomId(updated.detachCellId);\n\t}\n\n\treturn updated;\n}\n\nfunction updateRevisionAndId<T extends HasRevisionTag & HasMoveId>(\n\tinput: T,\n\treplacer: RevisionReplacer,\n): T {\n\tif (!replacer.isObsolete(input.revision)) {\n\t\treturn input;\n\t}\n\tconst newAtom = replacer.getUpdatedAtomId(makeChangeAtomId(input.id, input.revision));\n\treturn withRevisionAndId(input, newAtom.revision, newAtom.localId);\n}\n\nfunction withRevisionAndId<T extends HasRevisionTag>(\n\tinput: T,\n\trevision: RevisionTag | undefined,\n\tid: ChangesetLocalId,\n): T {\n\tconst updated = { ...input, revision, id };\n\tif (revision === undefined) {\n\t\tdelete updated.revision;\n\t}\n\n\treturn updated;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sequenceFieldChangeHandler.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,0BAA0B,CAAC;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAE5F,eAAO,MAAM,0BAA0B,EAAE,0BAUxC,CAAC"}
1
+ {"version":3,"file":"sequenceFieldChangeHandler.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIrE,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,0BAA0B,CAAC;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAE5F,eAAO,MAAM,0BAA0B,EAAE,0BASxC,CAAC"}
@@ -2,7 +2,6 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { relevantRemovedRoots } from "./relevantRemovedRoots.js";
6
5
  import { sequenceFieldChangeRebaser } from "./sequenceFieldChangeRebaser.js";
7
6
  import { sequenceFieldChangeCodecFactory } from "./sequenceFieldCodecs.js";
8
7
  import { sequenceFieldEditor } from "./sequenceFieldEditor.js";
@@ -13,7 +12,6 @@ export const sequenceFieldChangeHandler = {
13
12
  codecsFactory: sequenceFieldChangeCodecFactory,
14
13
  editor: sequenceFieldEditor,
15
14
  intoDelta: sequenceFieldToDelta,
16
- relevantRemovedRoots,
17
15
  isEmpty,
18
16
  getNestedChanges,
19
17
  createEmpty,
@@ -1 +1 @@
1
- {"version":3,"file":"sequenceFieldChangeHandler.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAA4B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIvF,MAAM,CAAC,MAAM,0BAA0B,GAA+B;IACrE,OAAO,EAAE,0BAA0B;IACnC,aAAa,EAAE,+BAA+B;IAC9C,MAAM,EAAE,mBAAmB;IAC3B,SAAS,EAAE,oBAAoB;IAC/B,oBAAoB;IACpB,OAAO;IACP,gBAAgB;IAChB,WAAW;IACX,iBAAiB;CACjB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { FieldChangeHandler } from \"../modular-schema/index.js\";\n\nimport { relevantRemovedRoots } from \"./relevantRemovedRoots.js\";\nimport { sequenceFieldChangeRebaser } from \"./sequenceFieldChangeRebaser.js\";\nimport { sequenceFieldChangeCodecFactory } from \"./sequenceFieldCodecs.js\";\nimport { type SequenceFieldEditor, sequenceFieldEditor } from \"./sequenceFieldEditor.js\";\nimport { sequenceFieldToDelta } from \"./sequenceFieldToDelta.js\";\nimport type { Changeset } from \"./types.js\";\nimport { createEmpty, getCrossFieldKeys, getNestedChanges, isEmpty } from \"./utils.js\";\n\nexport type SequenceFieldChangeHandler = FieldChangeHandler<Changeset, SequenceFieldEditor>;\n\nexport const sequenceFieldChangeHandler: SequenceFieldChangeHandler = {\n\trebaser: sequenceFieldChangeRebaser,\n\tcodecsFactory: sequenceFieldChangeCodecFactory,\n\teditor: sequenceFieldEditor,\n\tintoDelta: sequenceFieldToDelta,\n\trelevantRemovedRoots,\n\tisEmpty,\n\tgetNestedChanges,\n\tcreateEmpty,\n\tgetCrossFieldKeys,\n};\n"]}
1
+ {"version":3,"file":"sequenceFieldChangeHandler.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAA4B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIvF,MAAM,CAAC,MAAM,0BAA0B,GAA+B;IACrE,OAAO,EAAE,0BAA0B;IACnC,aAAa,EAAE,+BAA+B;IAC9C,MAAM,EAAE,mBAAmB;IAC3B,SAAS,EAAE,oBAAoB;IAC/B,OAAO;IACP,gBAAgB;IAChB,WAAW;IACX,iBAAiB;CACjB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { FieldChangeHandler } from \"../modular-schema/index.js\";\n\nimport { sequenceFieldChangeRebaser } from \"./sequenceFieldChangeRebaser.js\";\nimport { sequenceFieldChangeCodecFactory } from \"./sequenceFieldCodecs.js\";\nimport { type SequenceFieldEditor, sequenceFieldEditor } from \"./sequenceFieldEditor.js\";\nimport { sequenceFieldToDelta } from \"./sequenceFieldToDelta.js\";\nimport type { Changeset } from \"./types.js\";\nimport { createEmpty, getCrossFieldKeys, getNestedChanges, isEmpty } from \"./utils.js\";\n\nexport type SequenceFieldChangeHandler = FieldChangeHandler<Changeset, SequenceFieldEditor>;\n\nexport const sequenceFieldChangeHandler: SequenceFieldChangeHandler = {\n\trebaser: sequenceFieldChangeRebaser,\n\tcodecsFactory: sequenceFieldChangeCodecFactory,\n\teditor: sequenceFieldEditor,\n\tintoDelta: sequenceFieldToDelta,\n\tisEmpty,\n\tgetNestedChanges,\n\tcreateEmpty,\n\tgetCrossFieldKeys,\n};\n"]}