@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
@@ -7,25 +7,15 @@ import { assert } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import {
9
9
  type ChangeAtomId,
10
- type ChangeAtomIdMap,
11
10
  type ChangesetLocalId,
12
- type DeltaDetachedNodeChanges,
13
- type DeltaDetachedNodeId,
11
+ type DeltaFieldChanges,
14
12
  type DeltaMark,
15
13
  type RevisionReplacer,
16
14
  type RevisionTag,
17
- areEqualChangeAtomIds,
15
+ areEqualChangeAtomIdOpts,
18
16
  makeChangeAtomId,
19
- taggedAtomId,
20
17
  } from "../../core/index.js";
21
- import {
22
- type IdAllocator,
23
- type Mutable,
24
- SizedNestedMap,
25
- deleteFromNestedMap,
26
- setInNestedMap,
27
- tryGetFromNestedMap,
28
- } from "../../util/index.js";
18
+ import type { IdAllocator, Mutable } from "../../util/index.js";
29
19
  import { nodeIdFromChangeAtom } from "../deltaUtils.js";
30
20
  import {
31
21
  type FieldChangeHandler,
@@ -34,397 +24,159 @@ import {
34
24
  type NodeChangeComposer,
35
25
  type NodeChangePruner,
36
26
  type NodeChangeRebaser,
37
- NodeAttachState,
38
27
  type NodeId,
39
- type RelevantRemovedRootsFromChild,
40
28
  type ToDelta,
41
29
  type NestedChangesIndices,
42
- type FieldChangeDelta,
30
+ type RebaseNodeManager,
31
+ type ComposeNodeManager,
32
+ type InvertNodeManager,
33
+ type CrossFieldKeyRange,
34
+ CrossFieldTarget,
35
+ type RebaseVersion,
36
+ type RebaseRevisionMetadata,
43
37
  } from "../modular-schema/index.js";
44
38
 
45
- import type {
46
- ChildChange,
47
- Move,
48
- OptionalChangeset,
49
- RegisterId,
50
- Replace,
51
- } from "./optionalFieldChangeTypes.js";
39
+ import type { OptionalChangeset, Replace } from "./optionalFieldChangeTypes.js";
52
40
  import { makeOptionalFieldCodecFamily } from "./optionalFieldCodecs.js";
53
41
 
54
- export interface IRegisterMap<T> {
55
- set(id: RegisterId, childChange: T): void;
56
- get(id: RegisterId): T | undefined;
57
- delete(id: RegisterId): boolean;
58
- keys(): Iterable<RegisterId>;
59
- values(): Iterable<T>;
60
- entries(): Iterable<[RegisterId, T]>;
61
- readonly size: number;
62
- }
63
-
64
- export class RegisterMap<T> implements IRegisterMap<T> {
65
- private readonly nestedMapData = new SizedNestedMap<
66
- ChangesetLocalId | "self",
67
- RevisionTag | undefined,
68
- T
69
- >();
70
-
71
- public clone(): RegisterMap<T> {
72
- const clone = new RegisterMap<T>();
73
- for (const [id, t] of this.entries()) {
74
- clone.set(id, t);
75
- }
76
- return clone;
77
- }
78
-
79
- public set(id: RegisterId, childChange: T): void {
80
- if (id === "self") {
81
- this.nestedMapData.set("self", undefined, childChange);
82
- } else {
83
- this.nestedMapData.set(id.localId, id.revision, childChange);
84
- }
85
- }
86
-
87
- public get(id: RegisterId): T | undefined {
88
- return id === "self"
89
- ? this.nestedMapData.tryGet(id, undefined)
90
- : this.nestedMapData.tryGet(id.localId, id.revision);
91
- }
92
-
93
- public has(id: RegisterId): boolean {
94
- return this.get(id) !== undefined;
95
- }
96
-
97
- public delete(id: RegisterId): boolean {
98
- return id === "self"
99
- ? this.nestedMapData.delete("self", undefined)
100
- : this.nestedMapData.delete(id.localId, id.revision);
101
- }
102
-
103
- public keys(): Iterable<RegisterId> {
104
- const changeIds: RegisterId[] = [];
105
- for (const [localId, nestedMap] of this.nestedMapData) {
106
- if (localId === "self") {
107
- changeIds.push("self");
108
- } else {
109
- for (const [revisionTag, _] of nestedMap) {
110
- changeIds.push(
111
- revisionTag === undefined ? { localId } : { localId, revision: revisionTag },
112
- );
113
- }
114
- }
115
- }
116
-
117
- return changeIds;
118
- }
119
- public values(): Iterable<T> {
120
- return this.nestedMapData.values();
121
- }
122
- public entries(): Iterable<[RegisterId, T]> {
123
- const entries: [RegisterId, T][] = [];
124
- for (const changeId of this.keys()) {
125
- if (changeId === "self") {
126
- const entry = this.nestedMapData.tryGet("self", undefined);
127
- assert(
128
- entry !== undefined,
129
- 0x770 /* Entry should not be undefined when iterating keys. */,
130
- );
131
- entries.push(["self", entry]);
132
- } else {
133
- const entry = this.nestedMapData.tryGet(changeId.localId, changeId.revision);
134
- assert(
135
- entry !== undefined,
136
- 0x771 /* Entry should not be undefined when iterating keys. */,
137
- );
138
- entries.push([changeId, entry]);
139
- }
140
- }
141
-
142
- return entries;
143
- }
144
- public get size(): number {
145
- return this.nestedMapData.size;
146
- }
147
- }
148
-
149
42
  export const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {
150
- compose: (
151
- change1: OptionalChangeset,
152
- change2: OptionalChangeset,
153
- composeChild: NodeChangeComposer,
154
- ): OptionalChangeset => {
155
- const { srcToDst, dstToSrc } = getBidirectionalMaps(change1.moves);
156
- const change1FieldSrc = change1.valueReplace?.src;
157
- const change1FieldDst = getEffectfulDst(change1.valueReplace);
158
-
159
- const change2FieldSrc = change2.valueReplace?.src;
160
- let composedFieldSrc: RegisterId | undefined;
161
- if (change2FieldSrc !== undefined) {
162
- if (change2FieldSrc === "self") {
163
- composedFieldSrc = change1FieldSrc ?? change2FieldSrc;
164
- } else if (
165
- change1FieldDst !== undefined &&
166
- areEqualRegisterIds(change1FieldDst, change2FieldSrc)
167
- ) {
168
- composedFieldSrc = "self";
169
- } else {
170
- composedFieldSrc =
171
- tryGetFromNestedMap(dstToSrc, change2FieldSrc.revision, change2FieldSrc.localId) ??
172
- change2FieldSrc;
173
- }
174
- } else if (change1FieldSrc !== undefined && change2.valueReplace === undefined) {
175
- composedFieldSrc = change1FieldSrc;
176
- }
177
-
178
- const childChanges2ByOriginalId = new RegisterMap<NodeId>();
179
- for (const [id, change] of change2.childChanges) {
180
- if (id === "self") {
181
- if (change1FieldSrc === undefined) {
182
- childChanges2ByOriginalId.set("self", change);
183
- } else {
184
- childChanges2ByOriginalId.set(change1FieldSrc, change);
185
- }
186
- } else {
187
- if (change1FieldDst !== undefined && areEqualChangeAtomIds(change1FieldDst, id)) {
188
- childChanges2ByOriginalId.set("self", change);
189
- } else {
190
- const originalId = tryGetFromNestedMap(dstToSrc, id.revision, id.localId);
191
- childChanges2ByOriginalId.set(originalId ?? id, change);
192
- }
193
- }
194
- }
195
-
196
- const composedMoves: Move[] = [];
197
- const composedChildChanges: ChildChange[] = [];
198
- const composed: Mutable<OptionalChangeset> = {
199
- moves: composedMoves,
200
- childChanges: composedChildChanges,
201
- };
202
-
203
- for (const [id, childChange1] of change1.childChanges) {
204
- const childChange2 = childChanges2ByOriginalId.get(id);
205
- composedChildChanges.push([id, composeChild(childChange1, childChange2)]);
206
- childChanges2ByOriginalId.delete(id);
207
- }
208
-
209
- for (const [id, childChange2] of childChanges2ByOriginalId.entries()) {
210
- composedChildChanges.push([id, composeChild(undefined, childChange2)]);
211
- }
212
-
213
- for (const [leg2Src, leg2Dst] of change2.moves) {
214
- const leg1Src = tryGetFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);
215
- if (leg1Src !== undefined) {
216
- composedMoves.push([leg1Src, leg2Dst]);
217
- deleteFromNestedMap(srcToDst, leg1Src.revision, leg1Src.localId);
218
- deleteFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);
219
- } else if (
220
- change1FieldDst === undefined ||
221
- !areEqualChangeAtomIds(change1FieldDst, leg2Src)
222
- ) {
223
- composedMoves.push([leg2Src, leg2Dst]);
224
- }
225
- }
226
-
227
- for (const [revision, innerMap] of srcToDst.entries()) {
228
- for (const [localId, dst] of innerMap.entries()) {
229
- const src = makeChangeAtomId(localId, revision);
230
- if (composedFieldSrc === undefined || !areEqualRegisterIds(src, composedFieldSrc)) {
231
- composedMoves.push([src, dst]);
232
- }
233
- }
234
- }
235
-
236
- if (
237
- change1FieldSrc !== undefined &&
238
- change1FieldSrc !== "self" &&
239
- change2.valueReplace !== undefined
240
- ) {
241
- const change2FieldDst = change2.valueReplace.dst;
242
- if (
243
- isReplaceEffectful(change2.valueReplace) &&
244
- !areEqualChangeAtomIds(change1FieldSrc, change2FieldDst)
245
- ) {
246
- composedMoves.push([change1FieldSrc, change2FieldDst]);
247
- }
248
- }
249
-
250
- const firstChange = change1.valueReplace ?? change2.valueReplace;
251
- if (firstChange === undefined) {
252
- return composed;
253
- }
254
-
255
- const replace: Mutable<Replace> = {
256
- isEmpty: firstChange.isEmpty,
257
- dst: getComposedReplaceDst(change1.valueReplace, change2),
258
- };
259
- if (composedFieldSrc !== undefined) {
260
- replace.src = composedFieldSrc;
261
- }
262
- composed.valueReplace = replace;
263
- return composed;
264
- },
265
-
43
+ compose,
266
44
  invert: (
267
45
  change: OptionalChangeset,
268
46
  isRollback: boolean,
269
47
  genId: IdAllocator<ChangesetLocalId>,
270
48
  revision: RevisionTag | undefined,
49
+ nodeManager: InvertNodeManager,
271
50
  ): OptionalChangeset => {
272
- const { moves, childChanges, valueReplace } = change;
51
+ const inverted: Mutable<OptionalChangeset> = {};
52
+ const detachId = getEffectiveDetachId(change);
273
53
 
274
- const invertIdMap = new RegisterMap<RegisterId>();
275
- const invertedMoves: Move[] = [];
276
- for (const [src, dst] of moves) {
277
- invertIdMap.set(src, dst);
278
- invertedMoves.push([dst, src]);
279
- }
280
- if (valueReplace !== undefined) {
281
- const effectfulDst = getEffectfulDst(valueReplace);
282
- if (effectfulDst !== undefined) {
283
- invertIdMap.set("self", valueReplace.dst);
284
- }
285
- if (valueReplace.src !== undefined) {
286
- invertIdMap.set(valueReplace.src, "self");
287
- }
54
+ if (detachId !== undefined) {
55
+ const attachIdForInverse = isRollback
56
+ ? detachId
57
+ : makeChangeAtomId(detachId.localId, revision);
58
+
59
+ nodeManager.invertDetach(detachId, 1, change.childChange, attachIdForInverse);
60
+
61
+ inverted.valueReplace = {
62
+ isEmpty: change.valueReplace?.src === undefined,
63
+ dst: makeChangeAtomId(genId.allocate(), revision),
64
+ src: attachIdForInverse,
65
+ };
288
66
  }
289
67
 
290
- const inverted: Mutable<OptionalChangeset> = {
291
- moves: invertedMoves,
292
- childChanges: childChanges.map(([id, childChange]) => {
293
- return [invertIdMap.get(id) ?? id, childChange];
294
- }),
295
- };
68
+ if (change.valueReplace?.src !== undefined) {
69
+ const attachEntry = nodeManager.invertAttach(change.valueReplace.src, 1);
70
+ const detachIdForInverse = invertAttachId(
71
+ change.valueReplace.src,
72
+ revision,
73
+ isRollback,
74
+ attachEntry.value?.detachId,
75
+ );
296
76
 
297
- if (valueReplace !== undefined) {
298
- if (isReplaceEffectful(valueReplace)) {
299
- const replace: Mutable<Replace> =
300
- valueReplace.src === undefined
301
- ? {
302
- isEmpty: true,
303
- dst: makeChangeAtomId(genId.allocate(), revision),
304
- }
305
- : {
306
- isEmpty: false,
307
- dst: isRollback
308
- ? valueReplace.src
309
- : makeChangeAtomId(genId.allocate(), revision),
310
- };
311
- if (valueReplace.isEmpty === false) {
312
- replace.src = valueReplace.dst;
313
- }
314
- inverted.valueReplace = replace;
315
- } else if (!isRollback && valueReplace.src === "self") {
316
- inverted.valueReplace = {
317
- isEmpty: false,
318
- src: "self",
319
- dst: makeChangeAtomId(genId.allocate(), revision),
320
- };
77
+ if (attachEntry.value?.nodeChange !== undefined) {
78
+ inverted.childChange = attachEntry.value.nodeChange;
321
79
  }
80
+
81
+ // TODO: Use nodeDetach instead of valueReplace if not supporting older client versions.
82
+ // inverted.nodeDetach = detachIdForInverse;
83
+ if (inverted.valueReplace === undefined) {
84
+ inverted.valueReplace = { isEmpty: false, dst: detachIdForInverse };
85
+ } else {
86
+ (inverted.valueReplace as Mutable<Replace>).dst = detachIdForInverse;
87
+ }
88
+ } else if (detachId === undefined && change.childChange !== undefined) {
89
+ // This change does not affect which node is in the field, so its child change should remain here.
90
+ inverted.childChange = change.childChange;
322
91
  }
92
+
323
93
  return inverted;
324
94
  },
325
95
 
326
96
  rebase: (
327
- change: OptionalChangeset,
97
+ newChange: OptionalChangeset,
328
98
  overChange: OptionalChangeset,
329
99
  rebaseChild: NodeChangeRebaser,
100
+ _genId: IdAllocator,
101
+ nodeManager: RebaseNodeManager,
102
+ _metadata: RebaseRevisionMetadata,
103
+ rebaseVersion: RebaseVersion,
330
104
  ): OptionalChangeset => {
331
- const { moves, childChanges, valueReplace: field } = change;
332
-
333
- // TODO: avoid computing the dstToSrc map if it's not needed.
334
- // TODO: de-dupe overSrcToDst and forwardMap
335
- const { srcToDst: overSrcToDst } = getBidirectionalMaps(overChange.moves);
105
+ const rebased: Mutable<OptionalChangeset> = {};
106
+
107
+ const rebasedChild = rebaseChild(newChange.childChange, overChange.childChange);
108
+ const overDetach = getEffectiveDetachId(overChange);
109
+ if (overDetach !== undefined) {
110
+ const isPin = areEqualChangeAtomIdOpts(
111
+ newChange.nodeDetach,
112
+ newChange.valueReplace?.src,
113
+ );
336
114
 
337
- const forwardMap = new RegisterMap<RegisterId>();
338
- for (const [src, dst] of overChange.moves) {
339
- forwardMap.set(src, dst);
340
- }
341
- if (overChange.valueReplace !== undefined) {
342
- const effectfulDst = getEffectfulDst(overChange.valueReplace);
343
- if (effectfulDst !== undefined) {
344
- forwardMap.set("self", overChange.valueReplace.dst);
345
- }
346
- if (overChange.valueReplace.src !== undefined) {
347
- forwardMap.set(overChange.valueReplace.src, "self");
348
- }
115
+ const nodeDetach = rebaseVersion < 2 && !isPin ? undefined : newChange.nodeDetach;
116
+ nodeManager.rebaseOverDetach(overDetach, 1, nodeDetach, rebasedChild);
349
117
  }
350
118
 
351
- const rebasedMoves: Move[] = [];
352
- for (const [src, dst] of moves) {
353
- const newDst = tryGetFromNestedMap(overSrcToDst, src.revision, src.localId);
354
- rebasedMoves.push([src, newDst ?? dst]);
355
- }
119
+ const overAttach = overChange.valueReplace?.src;
120
+ if (overAttach !== undefined) {
121
+ const movedChangeEntry = nodeManager.getNewChangesForBaseAttach(overAttach, 1).value;
356
122
 
357
- const overChildChangesBySrc = new RegisterMap<NodeId>();
358
- for (const [id, childChange] of overChange.childChanges) {
359
- overChildChangesBySrc.set(id, childChange);
360
- }
123
+ if (movedChangeEntry?.nodeChange !== undefined) {
124
+ rebased.childChange = movedChangeEntry.nodeChange;
125
+ }
361
126
 
362
- const rebasedChildChanges: ChildChange[] = [];
363
- for (const [id, childChange] of childChanges) {
364
- const overChildChange = overChildChangesBySrc.get(id);
365
- if (overChildChange !== undefined) {
366
- overChildChangesBySrc.delete(id);
127
+ if (movedChangeEntry?.detachId !== undefined) {
128
+ rebased.nodeDetach = movedChangeEntry.detachId;
129
+ if (rebased.valueReplace !== undefined) {
130
+ // Now that the rebased change has a node detach,
131
+ // the detach from the value replace no longer takes effect.
132
+ nodeManager.removeDetach(rebased.valueReplace.dst, 1);
133
+ }
134
+ }
135
+ } else if (overDetach === undefined) {
136
+ // `overChange` did not change which node is in the field.
137
+ if (rebasedChild !== undefined) {
138
+ rebased.childChange = rebasedChild;
367
139
  }
368
140
 
369
- const rebasedId = forwardMap.get(id) ?? id;
370
- const rebasedChildChange = rebaseChild(
371
- childChange,
372
- overChildChange,
373
- rebasedId === "self" ? NodeAttachState.Attached : NodeAttachState.Detached,
374
- );
375
- if (rebasedChildChange !== undefined) {
376
- rebasedChildChanges.push([rebasedId, rebasedChildChange]);
141
+ if (newChange.nodeDetach !== undefined) {
142
+ rebased.nodeDetach = newChange.nodeDetach;
377
143
  }
378
144
  }
379
145
 
380
- for (const [id, overChildChange] of overChildChangesBySrc.entries()) {
381
- const rebasedId = forwardMap.get(id) ?? id;
382
- const rebasedChildChange = rebaseChild(
383
- undefined,
384
- overChildChange,
385
- rebasedId === "self" ? NodeAttachState.Attached : NodeAttachState.Detached,
386
- );
387
- if (rebasedChildChange !== undefined) {
388
- rebasedChildChanges.push([rebasedId, rebasedChildChange]);
389
- }
146
+ if (newChange.valueReplace !== undefined) {
147
+ const isEmpty =
148
+ overDetach !== undefined || overChange.valueReplace !== undefined
149
+ ? overChange.valueReplace?.src === undefined
150
+ : newChange.valueReplace.isEmpty;
151
+
152
+ rebased.valueReplace = { ...newChange.valueReplace, isEmpty };
390
153
  }
391
154
 
392
- const rebased: Mutable<OptionalChangeset> = {
393
- moves: rebasedMoves,
394
- childChanges: rebasedChildChanges,
395
- };
396
-
397
- if (field !== undefined) {
398
- const replace: Mutable<Replace> = {
399
- isEmpty:
400
- overChange.valueReplace === undefined
401
- ? field.isEmpty
402
- : overChange.valueReplace.src === undefined,
403
- dst: field.dst,
404
- };
405
- if (field.src !== undefined) {
406
- replace.src = forwardMap.get(field.src) ?? field.src;
407
- }
408
- rebased.valueReplace = replace;
155
+ const detachId = getEffectiveDetachId(newChange);
156
+ const rebasedDetachId = getEffectiveDetachId(rebased);
157
+
158
+ if (detachId !== undefined && !areEqualChangeAtomIdOpts(detachId, rebasedDetachId)) {
159
+ nodeManager.removeDetach(detachId, 1);
160
+ }
161
+
162
+ if (
163
+ rebasedDetachId !== undefined &&
164
+ !areEqualChangeAtomIdOpts(rebasedDetachId, detachId)
165
+ ) {
166
+ nodeManager.addDetach(rebasedDetachId, 1);
409
167
  }
410
168
 
411
169
  return rebased;
412
170
  },
413
171
 
414
172
  prune: (change: OptionalChangeset, pruneChild: NodeChangePruner): OptionalChangeset => {
415
- const childChanges: ChildChange[] = [];
416
- const prunedChange: Mutable<OptionalChangeset> = {
417
- moves: change.moves,
418
- childChanges,
419
- };
420
- if (change.valueReplace !== undefined) {
421
- prunedChange.valueReplace = change.valueReplace;
422
- }
173
+ const prunedChange: Mutable<OptionalChangeset> = { ...change };
423
174
 
424
- for (const [id, childChange] of change.childChanges) {
425
- const prunedChildChange = pruneChild(childChange);
426
- if (prunedChildChange !== undefined) {
427
- childChanges.push([id, prunedChildChange]);
175
+ delete prunedChange.childChange;
176
+ if (change.childChange !== undefined) {
177
+ const childChange = pruneChild(change.childChange);
178
+ if (childChange !== undefined) {
179
+ prunedChange.childChange = childChange;
428
180
  }
429
181
  }
430
182
 
@@ -435,22 +187,14 @@ export const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {
435
187
  change: OptionalChangeset,
436
188
  replacer: RevisionReplacer,
437
189
  ): OptionalChangeset => {
438
- const valueReplace = replaceReplaceRevisions(change.valueReplace, replacer);
190
+ const updated: Mutable<OptionalChangeset> = {};
439
191
 
440
- const childChanges: ChildChange[] = [];
441
- for (const [id, childChange] of change.childChanges) {
442
- childChanges.push([
443
- replaceRegisterRevisions(id, replacer),
444
- replacer.getUpdatedAtomId(childChange),
445
- ]);
446
- }
192
+ const valueReplace = replaceReplaceRevisions(change.valueReplace, replacer);
447
193
 
448
- const moves: Move[] = [];
449
- for (const [src, dst] of change.moves) {
450
- moves.push([replacer.getUpdatedAtomId(src), replacer.getUpdatedAtomId(dst)]);
194
+ if (change.childChange !== undefined) {
195
+ updated.childChange = replacer.getUpdatedAtomId(change.childChange);
451
196
  }
452
197
 
453
- const updated: Mutable<OptionalChangeset> = { childChanges, moves };
454
198
  if (valueReplace !== undefined) {
455
199
  updated.valueReplace = valueReplace;
456
200
  }
@@ -459,130 +203,189 @@ export const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {
459
203
  },
460
204
 
461
205
  mute: (change: OptionalChangeset): OptionalChangeset => {
462
- return { childChanges: change.childChanges, moves: [] };
206
+ return { childChange: change.childChange };
463
207
  },
464
208
  };
465
209
 
466
- function replaceReplaceRevisions(
467
- replace: Replace | undefined,
468
- replacer: RevisionReplacer,
469
- ): Replace | undefined {
470
- if (replace === undefined) {
471
- return undefined;
210
+ function compose(
211
+ change1: OptionalChangeset,
212
+ change2: OptionalChangeset,
213
+ composeChild: NodeChangeComposer,
214
+ _genId: IdAllocator,
215
+ nodeManager: ComposeNodeManager,
216
+ ): OptionalChangeset {
217
+ const detachId2 = getEffectiveDetachId(change2);
218
+ if (change1.valueReplace?.src !== undefined && detachId2 !== undefined) {
219
+ nodeManager.composeAttachDetach(change1.valueReplace.src, detachId2, 1);
472
220
  }
473
221
 
474
- const updated: Mutable<Replace> = {
475
- ...replace,
476
- dst: replacer.getUpdatedAtomId(replace.dst),
477
- };
222
+ const composedDetach = composeNodeDetaches(change1, change2, nodeManager);
223
+ const composedReplace = composeReplaces(change1, change2);
224
+ const composedChildChange = getComposedChildChanges(
225
+ change1,
226
+ change2,
227
+ nodeManager,
228
+ composeChild,
229
+ );
478
230
 
479
- if (replace.src !== undefined) {
480
- updated.src = replaceRegisterRevisions(replace.src, replacer);
231
+ sendNewChildChanges(change1, change2, nodeManager);
232
+
233
+ if (
234
+ change1.nodeDetach !== undefined &&
235
+ areEqualChangeAtomIdOpts(change1.nodeDetach, change2.valueReplace?.src)
236
+ ) {
237
+ nodeManager.composeDetachAttach(change1.nodeDetach, change1.nodeDetach, 1, true);
481
238
  }
482
239
 
483
- return updated;
240
+ return makeChangeset(composedReplace, composedDetach, composedChildChange);
484
241
  }
485
242
 
486
- function replaceRegisterRevisions(
487
- register: RegisterId,
488
- replacer: RevisionReplacer,
489
- ): RegisterId {
490
- return register === "self" ? register : replacer.getUpdatedAtomId(register);
243
+ function composeNodeDetaches(
244
+ change1: OptionalChangeset,
245
+ change2: OptionalChangeset,
246
+ nodeManager: ComposeNodeManager,
247
+ ): ChangeAtomId | undefined {
248
+ const detach1 = getEffectiveDetachId(change1);
249
+ if (detach1 !== undefined) {
250
+ const newDetachId = nodeManager.getNewChangesForBaseDetach(detach1, 1).value?.detachId;
251
+ if (newDetachId !== undefined) {
252
+ return newDetachId;
253
+ }
254
+ }
255
+
256
+ if (change1.nodeDetach !== undefined) {
257
+ return change1.nodeDetach;
258
+ }
259
+
260
+ return detach1 !== undefined || change1.valueReplace?.isEmpty === true
261
+ ? undefined
262
+ : change2.nodeDetach;
491
263
  }
492
264
 
493
- function getComposedReplaceDst(
494
- change1: Replace | undefined,
265
+ function composeReplaces(
266
+ change1: OptionalChangeset,
495
267
  change2: OptionalChangeset,
496
- ): ChangeAtomId {
497
- const dst1 = change1?.dst;
498
- if (change2.valueReplace === undefined) {
499
- assert(dst1 !== undefined, 0x8ce /* Both replace replaces should not be undefined */);
500
- return getIdAfterMoves(dst1, change2.moves);
268
+ ): Replace | undefined {
269
+ const firstReplace = change1.valueReplace ?? change2.valueReplace;
270
+ if (firstReplace === undefined) {
271
+ return undefined;
501
272
  }
502
273
 
503
- if (
504
- dst1 === undefined ||
505
- change1?.src === "self" ||
506
- (change2.valueReplace.src !== undefined &&
507
- areEqualRegisterIds(change2.valueReplace.src, dst1))
274
+ const isEmpty = change1.nodeDetach === undefined ? firstReplace.isEmpty : false;
275
+ const replace: Mutable<Replace> = { isEmpty, dst: firstReplace.dst };
276
+ if (change2.valueReplace?.src !== undefined) {
277
+ replace.src = change2.valueReplace.src;
278
+ } else if (
279
+ getEffectiveDetachId(change2) === undefined &&
280
+ change1.valueReplace?.src !== undefined
508
281
  ) {
509
- assert(
510
- change2.valueReplace !== undefined,
511
- 0x8cf /* Both replace replaces should not be undefined */,
512
- );
513
- return change2.valueReplace.dst;
514
- } else {
515
- return getIdAfterMoves(dst1, change2.moves);
282
+ replace.src = change1.valueReplace.src;
516
283
  }
284
+
285
+ return replace;
517
286
  }
518
287
 
519
- function getIdAfterMoves(id: ChangeAtomId, moves: readonly Move[]): ChangeAtomId {
520
- for (const [src, dst] of moves) {
521
- if (areEqualChangeAtomIds(id, src)) {
522
- return dst;
523
- }
288
+ /**
289
+ * Informs the node manager of any child changes in `change2` that may need to be represented somewhere else in the input context of the composed changeset.
290
+ * See {@link ComposeNodeManager.sendNewChangesToBaseSourceLocation} for motivation.
291
+ * @param change1 - The first change to compose. Conceptually applies before `change2`.
292
+ * @param change2 - The second change to compose. Conceptually applies after `change1`.
293
+ * @param nodeManager - The node manager that needs to be informed of the child changes.
294
+ */
295
+ function sendNewChildChanges(
296
+ change1: OptionalChangeset,
297
+ change2: OptionalChangeset,
298
+ nodeManager: ComposeNodeManager,
299
+ ): void {
300
+ if (change2.childChange !== undefined && change1.valueReplace?.src !== undefined) {
301
+ // The presence of new child implies that there is some node present in the field in the input context of change2.
302
+ // The fact that the change1 has a shallow effect implies that this node was attached by change1.
303
+ nodeManager.sendNewChangesToBaseSourceLocation(
304
+ change1.valueReplace.src,
305
+ change2.childChange,
306
+ );
524
307
  }
525
- return id;
526
308
  }
527
309
 
528
- function areEqualRegisterIds(id1: RegisterId, id2: RegisterId): boolean {
529
- return id1 === "self" || id2 === "self" ? id1 === id2 : areEqualChangeAtomIds(id1, id2);
310
+ /**
311
+ * Computes the child changes that should be included in the composed changeset.
312
+ * @param change1 - The first change to compose. Conceptually applies before `change2`.
313
+ * @param change2 - The second change to compose. Conceptually applies after `change1`.
314
+ * @param nodeManager - The node manager. Provides information about potential child changes from `change2`.
315
+ * @param composeChild - The delegate to compose child changes.
316
+ * @returns The composed child changes (if any) for the node (if any) present in the field in the input context of `change1`.
317
+ */
318
+ function getComposedChildChanges(
319
+ change1: OptionalChangeset,
320
+ change2: OptionalChangeset,
321
+ nodeManager: ComposeNodeManager,
322
+ composeChild: NodeChangeComposer,
323
+ ): NodeId | undefined {
324
+ const detachId1 = getEffectiveDetachId(change1);
325
+
326
+ // We need to determine what the child changes are in change2 for the node (if any) that resides in the field in the input context of change1.
327
+ const childChangesFromChange2: NodeId | undefined =
328
+ // If such a node did exist, the changes for it in change2 would come from wherever change1 sends that node.
329
+ // Note: in both branches of this ternary, we are leveraging the fact querying for changes of a non-existent node safely yields undefined
330
+ detachId1 === undefined
331
+ ? change1.valueReplace?.src === undefined
332
+ ? change2.childChange
333
+ : undefined
334
+ : nodeManager.getNewChangesForBaseDetach(detachId1, 1).value?.nodeChange;
335
+
336
+ let composedChildChange: NodeId | undefined;
337
+ if (change1.childChange !== undefined || childChangesFromChange2 !== undefined) {
338
+ composedChildChange = composeChild(change1.childChange, childChangesFromChange2);
339
+ }
340
+ return composedChildChange;
530
341
  }
531
342
 
532
- function areEqualRegisterIdsOpt(
533
- id1: RegisterId | undefined,
534
- id2: RegisterId | undefined,
535
- ): boolean {
536
- if (id1 === undefined || id2 === undefined) {
537
- return id1 === id2;
343
+ function makeChangeset(
344
+ replace: Replace | undefined,
345
+ detachId: ChangeAtomId | undefined,
346
+ childChange: NodeId | undefined,
347
+ ): OptionalChangeset {
348
+ const changeset: Mutable<OptionalChangeset> = {};
349
+ if (replace !== undefined) {
350
+ changeset.valueReplace = replace;
538
351
  }
539
- return areEqualRegisterIds(id1, id2);
540
- }
541
352
 
542
- function getBidirectionalMaps(moves: OptionalChangeset["moves"]): {
543
- srcToDst: ChangeAtomIdMap<ChangeAtomId>;
544
- dstToSrc: ChangeAtomIdMap<ChangeAtomId>;
545
- } {
546
- const srcToDst: ChangeAtomIdMap<ChangeAtomId> = new Map();
547
- const dstToSrc: ChangeAtomIdMap<ChangeAtomId> = new Map();
548
- for (const [src, dst] of moves) {
549
- setInNestedMap(srcToDst, src.revision, src.localId, dst);
550
- setInNestedMap(dstToSrc, dst.revision, dst.localId, src);
353
+ if (detachId !== undefined) {
354
+ changeset.nodeDetach = detachId;
551
355
  }
552
- return { srcToDst, dstToSrc };
553
- }
554
356
 
555
- type EffectfulReplace =
556
- | {
557
- isEmpty: true;
558
- src?: ChangeAtomId;
559
- dst: ChangeAtomId;
560
- }
561
- | {
562
- isEmpty: boolean;
563
- src: ChangeAtomId;
564
- dst: ChangeAtomId;
565
- };
566
-
567
- function isReplaceEffectful(replace: Replace): replace is EffectfulReplace {
568
- if (replace.src === "self") {
569
- return false;
357
+ if (childChange !== undefined) {
358
+ changeset.childChange = childChange;
570
359
  }
571
- return !replace.isEmpty || replace.src !== undefined;
360
+ return changeset;
572
361
  }
573
362
 
574
- function getEffectfulDst(replace: Replace | undefined): ChangeAtomId | undefined {
575
- return replace === undefined || replace.isEmpty || replace.src === "self"
576
- ? undefined
577
- : replace.dst;
363
+ function replaceReplaceRevisions(
364
+ replace: Replace | undefined,
365
+ replacer: RevisionReplacer,
366
+ ): Replace | undefined {
367
+ if (replace === undefined) {
368
+ return undefined;
369
+ }
370
+
371
+ const updated: Mutable<Replace> = {
372
+ ...replace,
373
+ dst: replacer.getUpdatedAtomId(replace.dst),
374
+ };
375
+
376
+ if (replace.src !== undefined) {
377
+ updated.src = replacer.getUpdatedAtomId(replace.src);
378
+ }
379
+
380
+ return updated;
578
381
  }
579
382
 
580
- export function taggedRegister(id: RegisterId, revision: RevisionTag | undefined): RegisterId {
581
- if (id === "self") {
582
- return id;
383
+ function getEffectiveDetachId(change: OptionalChangeset): ChangeAtomId | undefined {
384
+ if (change.nodeDetach !== undefined) {
385
+ return change.nodeDetach;
583
386
  }
584
387
 
585
- return taggedAtomId(id, revision);
388
+ return change.valueReplace?.isEmpty === false ? change.valueReplace.dst : undefined;
586
389
  }
587
390
 
588
391
  export interface OptionalFieldEditor extends FieldEditor<OptionalChangeset> {
@@ -599,6 +402,7 @@ export interface OptionalFieldEditor extends FieldEditor<OptionalChangeset> {
599
402
  ids: {
600
403
  fill: ChangeAtomId;
601
404
  detach: ChangeAtomId;
405
+ detachNode?: ChangeAtomId;
602
406
  },
603
407
  ): OptionalChangeset;
604
408
 
@@ -617,20 +421,18 @@ export const optionalFieldEditor: OptionalFieldEditor = {
617
421
  fill: ChangeAtomId;
618
422
  // Should be interpreted as a set of an empty field if undefined.
619
423
  detach: ChangeAtomId;
424
+ detachNode?: ChangeAtomId;
620
425
  },
621
426
  ): OptionalChangeset => ({
622
- moves: [],
623
- childChanges: [],
624
427
  valueReplace: {
625
428
  isEmpty: wasEmpty,
626
429
  src: ids.fill,
627
430
  dst: ids.detach,
628
431
  },
432
+ nodeDetach: ids.detachNode,
629
433
  }),
630
434
 
631
435
  clear: (wasEmpty: boolean, detachId: ChangeAtomId): OptionalChangeset => ({
632
- moves: [],
633
- childChanges: [],
634
436
  valueReplace: {
635
437
  isEmpty: wasEmpty,
636
438
  dst: detachId,
@@ -638,74 +440,44 @@ export const optionalFieldEditor: OptionalFieldEditor = {
638
440
  }),
639
441
 
640
442
  buildChildChanges: (changes: Iterable<[number, NodeId]>): OptionalChangeset => {
641
- const childChanges: ChildChange[] = Array.from(changes, ([index, childChange]) => {
443
+ const childChanges: NodeId[] = Array.from(changes, ([index, child]) => {
642
444
  assert(index === 0, 0x404 /* Optional fields only support a single child node */);
643
- return ["self", childChange];
445
+ return child;
644
446
  });
645
447
  assert(
646
448
  childChanges.length <= 1,
647
449
  0xabd /* Optional fields only support a single child node */,
648
450
  );
649
- return {
650
- moves: [],
651
- childChanges,
652
- };
451
+
452
+ const childChange = childChanges[0];
453
+ return childChange === undefined ? {} : { childChange };
653
454
  },
654
455
  };
655
456
 
656
457
  export function optionalFieldIntoDelta(
657
458
  change: OptionalChangeset,
658
459
  deltaFromChild: ToDelta,
659
- ): FieldChangeDelta {
660
- const delta: Mutable<FieldChangeDelta> = {};
661
-
460
+ ): DeltaFieldChanges {
662
461
  let markIsANoop = true;
663
462
  const mark: Mutable<DeltaMark> = { count: 1 };
664
-
665
- if (change.valueReplace !== undefined && isReplaceEffectful(change.valueReplace)) {
666
- if (!change.valueReplace.isEmpty) {
667
- mark.detach = nodeIdFromChangeAtom(change.valueReplace.dst);
668
- }
669
- if (change.valueReplace.src !== undefined) {
670
- mark.attach = nodeIdFromChangeAtom(change.valueReplace.src);
671
- }
463
+ const detachId = getEffectiveDetachId(change);
464
+ const attachId = change.valueReplace?.src;
465
+ if (detachId !== undefined && !areEqualChangeAtomIdOpts(detachId, attachId)) {
466
+ mark.detach = nodeIdFromChangeAtom(detachId);
672
467
  markIsANoop = false;
673
468
  }
674
469
 
675
- if (change.moves.length > 0) {
676
- delta.rename = change.moves.map(([src, dst]) => ({
677
- count: 1,
678
- oldId: nodeIdFromChangeAtom(src),
679
- newId: nodeIdFromChangeAtom(dst),
680
- }));
681
- }
682
-
683
- if (change.childChanges.length > 0) {
684
- const globals: DeltaDetachedNodeChanges[] = [];
685
- for (const [id, childChange] of change.childChanges) {
686
- const childDelta = deltaFromChild(childChange);
687
- if (id === "self") {
688
- mark.fields = childDelta;
689
- markIsANoop = false;
690
- } else {
691
- const fields = childDelta;
692
- globals.push({
693
- id: { major: id.revision, minor: id.localId },
694
- fields,
695
- });
696
- }
697
- }
698
-
699
- if (globals.length > 0) {
700
- delta.global = globals;
701
- }
470
+ if (attachId !== undefined && !areEqualChangeAtomIdOpts(attachId, detachId)) {
471
+ mark.attach = nodeIdFromChangeAtom(attachId);
472
+ markIsANoop = false;
702
473
  }
703
474
 
704
- if (!markIsANoop) {
705
- delta.local = [mark];
475
+ if (change.childChange !== undefined) {
476
+ mark.fields = deltaFromChild(change.childChange);
477
+ markIsANoop = false;
706
478
  }
707
479
 
708
- return delta;
480
+ return markIsANoop ? [] : [mark];
709
481
  }
710
482
 
711
483
  export const optionalChangeHandler: FieldChangeHandler<
@@ -717,69 +489,53 @@ export const optionalChangeHandler: FieldChangeHandler<
717
489
  editor: optionalFieldEditor,
718
490
 
719
491
  intoDelta: optionalFieldIntoDelta,
720
- relevantRemovedRoots,
721
492
 
722
493
  isEmpty: (change: OptionalChangeset) =>
723
- change.childChanges.length === 0 &&
724
- change.moves.length === 0 &&
725
- change.valueReplace === undefined,
494
+ change.childChange === undefined &&
495
+ change.valueReplace === undefined &&
496
+ change.nodeDetach === undefined,
726
497
 
727
498
  getNestedChanges,
728
499
 
729
- createEmpty: () => ({ moves: [], childChanges: [] }),
730
- getCrossFieldKeys: (_change) => [],
500
+ createEmpty: () => ({}),
501
+ getCrossFieldKeys,
731
502
  };
732
503
 
733
- function getNestedChanges(change: OptionalChangeset): NestedChangesIndices {
734
- // True iff the content of the field changes in some way
735
- const isFieldContentChanged =
736
- change.valueReplace !== undefined && change.valueReplace.src !== "self";
737
-
738
- // The node that is moved into the field (if any).
739
- const nodeMovedIntoField = change.valueReplace?.src;
740
-
741
- return change.childChanges.map(([register, nodeId]) => {
742
- // The node is removed in the input context iif register is not self.
743
- const inputIndex = register === "self" ? 0 : undefined;
744
- const outputIndex =
745
- register === "self"
746
- ? // If the node starts out as not-removed, it is removed in the output context iff the field content is changed
747
- isFieldContentChanged
748
- ? undefined
749
- : 0
750
- : // If the node starts out as removed, then it remains removed in the output context iff it is not the node that is moved into the field
751
- areEqualRegisterIdsOpt(register, nodeMovedIntoField)
752
- ? 0
753
- : undefined;
754
- return [nodeId, inputIndex, outputIndex];
755
- });
756
- }
504
+ function getCrossFieldKeys(change: OptionalChangeset): CrossFieldKeyRange[] {
505
+ const keys: CrossFieldKeyRange[] = [];
506
+ if (change.valueReplace?.src !== undefined) {
507
+ keys.push({
508
+ key: { ...change.valueReplace.src, target: CrossFieldTarget.Destination },
509
+ count: 1,
510
+ });
511
+ }
757
512
 
758
- function* relevantRemovedRoots(
759
- change: OptionalChangeset,
760
- relevantRemovedRootsFromChild: RelevantRemovedRootsFromChild,
761
- ): Iterable<DeltaDetachedNodeId> {
762
- const alreadyYielded = new RegisterMap<boolean>();
763
-
764
- for (const [src] of change.moves) {
765
- if (!alreadyYielded.has(src)) {
766
- alreadyYielded.set(src, true);
767
- yield nodeIdFromChangeAtom(src);
768
- }
513
+ const detachId = getEffectiveDetachId(change);
514
+
515
+ if (detachId !== undefined) {
516
+ keys.push({ key: { ...detachId, target: CrossFieldTarget.Source }, count: 1 });
769
517
  }
770
518
 
771
- for (const [id, childChange] of change.childChanges) {
772
- // Child changes make the tree they apply to relevant unless that tree existed in the starting context of
773
- // of this change.
774
- if (id !== "self" && !alreadyYielded.has(id)) {
775
- alreadyYielded.set(id, true);
776
- yield nodeIdFromChangeAtom(id);
777
- }
778
- yield* relevantRemovedRootsFromChild(childChange);
519
+ return keys;
520
+ }
521
+
522
+ function getNestedChanges(change: OptionalChangeset): NestedChangesIndices {
523
+ if (change.childChange === undefined) {
524
+ return [];
779
525
  }
780
526
 
781
- const selfSrc = change.valueReplace?.src;
782
- if (selfSrc !== undefined && selfSrc !== "self" && !alreadyYielded.has(selfSrc)) {
783
- yield nodeIdFromChangeAtom(selfSrc);
527
+ return [[change.childChange, 0]];
528
+ }
529
+
530
+ function invertAttachId(
531
+ attachId: ChangeAtomId,
532
+ revision: RevisionTag | undefined,
533
+ isRollback: boolean,
534
+ detachId: ChangeAtomId | undefined,
535
+ ): ChangeAtomId {
536
+ if (!isRollback) {
537
+ return makeChangeAtomId(attachId.localId, revision);
784
538
  }
539
+
540
+ return detachId ?? attachId;
785
541
  }