@fluidframework/tree 2.83.0 → 2.90.0-378676

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 (781) hide show
  1. package/api-report/tree.alpha.api.md +1 -0
  2. package/dist/core/change-family/changeFamily.d.ts +4 -1
  3. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  4. package/dist/core/change-family/changeFamily.js.map +1 -1
  5. package/dist/core/change-family/index.d.ts +1 -1
  6. package/dist/core/change-family/index.d.ts.map +1 -1
  7. package/dist/core/change-family/index.js.map +1 -1
  8. package/dist/core/index.d.ts +3 -3
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +6 -4
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/rebase/changeRebaser.d.ts +6 -1
  13. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  14. package/dist/core/rebase/changeRebaser.js.map +1 -1
  15. package/dist/core/rebase/index.d.ts +1 -1
  16. package/dist/core/rebase/index.d.ts.map +1 -1
  17. package/dist/core/rebase/index.js +2 -1
  18. package/dist/core/rebase/index.js.map +1 -1
  19. package/dist/core/rebase/types.d.ts +1 -0
  20. package/dist/core/rebase/types.d.ts.map +1 -1
  21. package/dist/core/rebase/types.js +5 -1
  22. package/dist/core/rebase/types.js.map +1 -1
  23. package/dist/core/rebase/utils.d.ts.map +1 -1
  24. package/dist/core/rebase/utils.js +25 -7
  25. package/dist/core/rebase/utils.js.map +1 -1
  26. package/dist/core/tree/delta.d.ts +5 -0
  27. package/dist/core/tree/delta.d.ts.map +1 -1
  28. package/dist/core/tree/delta.js.map +1 -1
  29. package/dist/core/tree/detachedFieldIndex.d.ts +13 -1
  30. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  31. package/dist/core/tree/detachedFieldIndex.js +14 -1
  32. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  33. package/dist/core/tree/detachedFieldIndexTypes.d.ts +4 -0
  34. package/dist/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  35. package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
  36. package/dist/core/tree/index.d.ts +2 -2
  37. package/dist/core/tree/index.d.ts.map +1 -1
  38. package/dist/core/tree/index.js +4 -3
  39. package/dist/core/tree/index.js.map +1 -1
  40. package/dist/core/tree/pathTree.d.ts +11 -3
  41. package/dist/core/tree/pathTree.d.ts.map +1 -1
  42. package/dist/core/tree/pathTree.js +14 -2
  43. package/dist/core/tree/pathTree.js.map +1 -1
  44. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  45. package/dist/core/tree/visitDelta.js +17 -13
  46. package/dist/core/tree/visitDelta.js.map +1 -1
  47. package/dist/feature-libraries/changeAtomIdBTree.d.ts +3 -2
  48. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  49. package/dist/feature-libraries/changeAtomIdBTree.js +15 -2
  50. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  51. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +92 -44
  52. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  53. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +220 -70
  54. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  55. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  56. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +12 -2
  57. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  58. package/dist/feature-libraries/default-schema/index.d.ts +2 -1
  59. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  60. package/dist/feature-libraries/default-schema/index.js +4 -2
  61. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  62. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +40 -0
  63. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  64. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +153 -0
  65. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  66. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  67. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  68. package/dist/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  69. package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  70. package/dist/feature-libraries/deltaUtils.d.ts +1 -0
  71. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  72. package/dist/feature-libraries/deltaUtils.js +6 -1
  73. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  74. package/dist/feature-libraries/flex-tree/context.d.ts +9 -0
  75. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  76. package/dist/feature-libraries/flex-tree/context.js +6 -0
  77. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  78. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  79. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  80. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  81. package/dist/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  82. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  83. package/dist/feature-libraries/flex-tree/lazyField.js +39 -8
  84. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  85. package/dist/feature-libraries/index.d.ts +3 -3
  86. package/dist/feature-libraries/index.d.ts.map +1 -1
  87. package/dist/feature-libraries/index.js +8 -4
  88. package/dist/feature-libraries/index.js.map +1 -1
  89. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  90. package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
  91. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  92. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +100 -24
  93. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  94. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +8 -12
  95. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  96. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +85 -51
  97. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  98. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  99. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  100. package/dist/feature-libraries/modular-schema/genericFieldKind.js +4 -9
  101. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  102. package/dist/feature-libraries/modular-schema/index.d.ts +3 -3
  103. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  104. package/dist/feature-libraries/modular-schema/index.js +2 -3
  105. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  106. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +18 -22
  107. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  108. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +276 -158
  109. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  110. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  111. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  112. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  113. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  114. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  115. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +296 -0
  116. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  117. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -0
  118. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  119. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +8 -0
  120. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  121. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +56 -22
  122. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  123. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +1390 -462
  124. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  125. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  126. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  127. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +1 -2
  128. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  129. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +3 -3
  130. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  131. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +74 -0
  132. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  133. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +35 -0
  134. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  135. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +49 -10
  136. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  137. package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
  138. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  139. package/dist/feature-libraries/optional-field/optionalField.d.ts +13 -32
  140. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  141. package/dist/feature-libraries/optional-field/optionalField.js +257 -446
  142. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  143. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  144. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  145. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +31 -0
  146. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  147. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +31 -31
  148. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  149. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  150. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  151. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  152. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +57 -28
  153. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  154. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  155. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  156. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +57 -0
  157. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  158. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  159. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  160. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  161. package/dist/feature-libraries/optional-field/requiredField.d.ts +3 -2
  162. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  163. package/dist/feature-libraries/optional-field/requiredField.js +6 -1
  164. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -1
  165. package/dist/feature-libraries/sequence-field/compose.d.ts +6 -7
  166. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  167. package/dist/feature-libraries/sequence-field/compose.js +81 -259
  168. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  169. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  170. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  171. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  172. package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
  173. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  174. package/dist/feature-libraries/sequence-field/invert.js +65 -167
  175. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  176. package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  177. package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  178. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  179. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  180. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  181. package/dist/feature-libraries/sequence-field/moveEffectTable.js +7 -90
  182. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  183. package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
  184. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  185. package/dist/feature-libraries/sequence-field/rebase.js +109 -116
  186. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  187. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  188. package/dist/feature-libraries/sequence-field/replaceRevisions.js +19 -32
  189. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  190. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  191. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +1 -2
  192. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  193. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  194. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  195. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +388 -187
  196. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  197. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  198. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +20 -62
  199. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  200. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  201. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  202. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -13
  203. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  204. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  205. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  206. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +16 -111
  207. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  208. package/dist/feature-libraries/sequence-field/types.d.ts +37 -74
  209. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  210. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  211. package/dist/feature-libraries/sequence-field/utils.d.ts +20 -25
  212. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  213. package/dist/feature-libraries/sequence-field/utils.js +159 -320
  214. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  215. package/dist/packageVersion.d.ts +1 -1
  216. package/dist/packageVersion.d.ts.map +1 -1
  217. package/dist/packageVersion.js +1 -1
  218. package/dist/packageVersion.js.map +1 -1
  219. package/dist/shared-tree/independentView.d.ts.map +1 -1
  220. package/dist/shared-tree/independentView.js +1 -1
  221. package/dist/shared-tree/independentView.js.map +1 -1
  222. package/dist/shared-tree/index.d.ts +1 -1
  223. package/dist/shared-tree/index.d.ts.map +1 -1
  224. package/dist/shared-tree/index.js.map +1 -1
  225. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  226. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  227. package/dist/shared-tree/schematizeTree.js +2 -1
  228. package/dist/shared-tree/schematizeTree.js.map +1 -1
  229. package/dist/shared-tree/schematizingTreeView.d.ts +1 -5
  230. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  231. package/dist/shared-tree/schematizingTreeView.js +21 -35
  232. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  233. package/dist/shared-tree/sharedTree.d.ts +9 -3
  234. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  235. package/dist/shared-tree/sharedTree.js +4 -1
  236. package/dist/shared-tree/sharedTree.js.map +1 -1
  237. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -0
  238. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  239. package/dist/shared-tree/sharedTreeChangeCodecs.js +8 -0
  240. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  241. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +4 -4
  242. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  243. package/dist/shared-tree/sharedTreeChangeFamily.js +2 -2
  244. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  245. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  246. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  247. package/dist/shared-tree/sharedTreeEditBuilder.js +14 -7
  248. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  249. package/dist/shared-tree/treeCheckout.d.ts +13 -11
  250. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  251. package/dist/shared-tree/treeCheckout.js +56 -6
  252. package/dist/shared-tree/treeCheckout.js.map +1 -1
  253. package/dist/shared-tree-core/branch.d.ts +3 -2
  254. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  255. package/dist/shared-tree-core/branch.js +4 -3
  256. package/dist/shared-tree-core/branch.js.map +1 -1
  257. package/dist/shared-tree-core/editManager.d.ts +2 -2
  258. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  259. package/dist/shared-tree-core/editManager.js +9 -9
  260. package/dist/shared-tree-core/editManager.js.map +1 -1
  261. package/dist/shared-tree-core/editManagerCodecs.d.ts +4 -0
  262. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  263. package/dist/shared-tree-core/editManagerCodecs.js +10 -2
  264. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  265. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  266. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  267. package/dist/shared-tree-core/editManagerFormatCommons.js +6 -0
  268. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  269. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  270. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  271. package/dist/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  272. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  273. package/dist/shared-tree-core/index.d.ts +2 -2
  274. package/dist/shared-tree-core/index.d.ts.map +1 -1
  275. package/dist/shared-tree-core/index.js +3 -1
  276. package/dist/shared-tree-core/index.js.map +1 -1
  277. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  278. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  279. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  280. package/dist/shared-tree-core/messageCodecs.d.ts +4 -0
  281. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  282. package/dist/shared-tree-core/messageCodecs.js +10 -2
  283. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  284. package/dist/shared-tree-core/messageFormat.d.ts +1 -0
  285. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  286. package/dist/shared-tree-core/messageFormat.js +6 -0
  287. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  288. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  289. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  290. package/dist/shared-tree-core/messageFormatV1ToV4.js +1 -0
  291. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  292. package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -0
  293. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  294. package/dist/shared-tree-core/sharedTreeCore.js +1 -1
  295. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  296. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +16 -12
  297. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  298. package/dist/simple-tree/core/unhydratedFlexTree.js +59 -8
  299. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  300. package/dist/simple-tree/fieldSchema.d.ts +4 -4
  301. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  302. package/dist/simple-tree/fieldSchema.js.map +1 -1
  303. package/dist/simple-tree/index.d.ts +2 -2
  304. package/dist/simple-tree/index.d.ts.map +1 -1
  305. package/dist/simple-tree/index.js +1 -1
  306. package/dist/simple-tree/index.js.map +1 -1
  307. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  308. package/dist/simple-tree/node-kinds/array/arrayNode.js +5 -3
  309. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  310. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  311. package/dist/simple-tree/node-kinds/common.js +1 -1
  312. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  313. package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
  314. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  315. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  316. package/dist/simple-tree/node-kinds/object/objectNode.js +19 -19
  317. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  318. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  319. package/dist/simple-tree/node-kinds/record/recordNode.js +4 -2
  320. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  321. package/dist/simple-tree/prepareForInsertion.d.ts +54 -47
  322. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  323. package/dist/simple-tree/prepareForInsertion.js +183 -125
  324. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  325. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +8 -3
  326. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  327. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +27 -13
  328. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  329. package/dist/treeFactory.d.ts.map +1 -1
  330. package/dist/treeFactory.js +12 -2
  331. package/dist/treeFactory.js.map +1 -1
  332. package/dist/util/index.d.ts +1 -1
  333. package/dist/util/index.d.ts.map +1 -1
  334. package/dist/util/index.js +2 -1
  335. package/dist/util/index.js.map +1 -1
  336. package/dist/util/rangeMap.d.ts +23 -11
  337. package/dist/util/rangeMap.d.ts.map +1 -1
  338. package/dist/util/rangeMap.js +43 -10
  339. package/dist/util/rangeMap.js.map +1 -1
  340. package/lib/core/change-family/changeFamily.d.ts +4 -1
  341. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  342. package/lib/core/change-family/changeFamily.js.map +1 -1
  343. package/lib/core/change-family/index.d.ts +1 -1
  344. package/lib/core/change-family/index.d.ts.map +1 -1
  345. package/lib/core/change-family/index.js.map +1 -1
  346. package/lib/core/index.d.ts +3 -3
  347. package/lib/core/index.d.ts.map +1 -1
  348. package/lib/core/index.js +2 -2
  349. package/lib/core/index.js.map +1 -1
  350. package/lib/core/rebase/changeRebaser.d.ts +6 -1
  351. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  352. package/lib/core/rebase/changeRebaser.js.map +1 -1
  353. package/lib/core/rebase/index.d.ts +1 -1
  354. package/lib/core/rebase/index.d.ts.map +1 -1
  355. package/lib/core/rebase/index.js +1 -1
  356. package/lib/core/rebase/index.js.map +1 -1
  357. package/lib/core/rebase/types.d.ts +1 -0
  358. package/lib/core/rebase/types.d.ts.map +1 -1
  359. package/lib/core/rebase/types.js +3 -0
  360. package/lib/core/rebase/types.js.map +1 -1
  361. package/lib/core/rebase/utils.d.ts.map +1 -1
  362. package/lib/core/rebase/utils.js +25 -7
  363. package/lib/core/rebase/utils.js.map +1 -1
  364. package/lib/core/tree/delta.d.ts +5 -0
  365. package/lib/core/tree/delta.d.ts.map +1 -1
  366. package/lib/core/tree/delta.js.map +1 -1
  367. package/lib/core/tree/detachedFieldIndex.d.ts +13 -1
  368. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  369. package/lib/core/tree/detachedFieldIndex.js +15 -2
  370. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  371. package/lib/core/tree/detachedFieldIndexTypes.d.ts +4 -0
  372. package/lib/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  373. package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
  374. package/lib/core/tree/index.d.ts +2 -2
  375. package/lib/core/tree/index.d.ts.map +1 -1
  376. package/lib/core/tree/index.js +1 -1
  377. package/lib/core/tree/index.js.map +1 -1
  378. package/lib/core/tree/pathTree.d.ts +11 -3
  379. package/lib/core/tree/pathTree.d.ts.map +1 -1
  380. package/lib/core/tree/pathTree.js +12 -1
  381. package/lib/core/tree/pathTree.js.map +1 -1
  382. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  383. package/lib/core/tree/visitDelta.js +17 -13
  384. package/lib/core/tree/visitDelta.js.map +1 -1
  385. package/lib/feature-libraries/changeAtomIdBTree.d.ts +3 -2
  386. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  387. package/lib/feature-libraries/changeAtomIdBTree.js +15 -3
  388. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  389. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +92 -44
  390. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  391. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +217 -69
  392. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  393. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  394. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +12 -2
  395. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  396. package/lib/feature-libraries/default-schema/index.d.ts +2 -1
  397. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  398. package/lib/feature-libraries/default-schema/index.js +2 -1
  399. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  400. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +40 -0
  401. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  402. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +149 -0
  403. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  404. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  405. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  406. package/lib/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  407. package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  408. package/lib/feature-libraries/deltaUtils.d.ts +1 -0
  409. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  410. package/lib/feature-libraries/deltaUtils.js +5 -1
  411. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  412. package/lib/feature-libraries/flex-tree/context.d.ts +9 -0
  413. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  414. package/lib/feature-libraries/flex-tree/context.js +6 -0
  415. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  416. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  417. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  418. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  419. package/lib/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  420. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  421. package/lib/feature-libraries/flex-tree/lazyField.js +40 -9
  422. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  423. package/lib/feature-libraries/index.d.ts +3 -3
  424. package/lib/feature-libraries/index.d.ts.map +1 -1
  425. package/lib/feature-libraries/index.js +3 -3
  426. package/lib/feature-libraries/index.js.map +1 -1
  427. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  428. package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
  429. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  430. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +100 -24
  431. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  432. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +7 -10
  433. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  434. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +85 -51
  435. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  436. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  437. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  438. package/lib/feature-libraries/modular-schema/genericFieldKind.js +4 -9
  439. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  440. package/lib/feature-libraries/modular-schema/index.d.ts +3 -3
  441. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  442. package/lib/feature-libraries/modular-schema/index.js +1 -1
  443. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  444. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +18 -22
  445. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  446. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +267 -144
  447. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  448. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  449. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  450. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  451. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  452. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  453. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +292 -0
  454. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  455. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -0
  456. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  457. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +8 -0
  458. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  459. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +56 -22
  460. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  461. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +1387 -468
  462. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  463. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  464. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  465. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +1 -2
  466. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  467. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js +1 -1
  468. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  469. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +74 -0
  470. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  471. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +32 -0
  472. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  473. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +49 -10
  474. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  475. package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
  476. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  477. package/lib/feature-libraries/optional-field/optionalField.d.ts +13 -32
  478. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  479. package/lib/feature-libraries/optional-field/optionalField.js +254 -442
  480. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  481. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  482. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  483. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +27 -0
  484. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  485. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +31 -31
  486. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  487. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  488. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  489. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  490. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +55 -26
  491. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  492. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  493. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  494. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +53 -0
  495. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  496. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  497. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  498. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  499. package/lib/feature-libraries/optional-field/requiredField.d.ts +3 -2
  500. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  501. package/lib/feature-libraries/optional-field/requiredField.js +5 -1
  502. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -1
  503. package/lib/feature-libraries/sequence-field/compose.d.ts +6 -7
  504. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  505. package/lib/feature-libraries/sequence-field/compose.js +83 -261
  506. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  507. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  508. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  509. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  510. package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
  511. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  512. package/lib/feature-libraries/sequence-field/invert.js +67 -169
  513. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  514. package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  515. package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  516. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  517. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  518. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  519. package/lib/feature-libraries/sequence-field/moveEffectTable.js +6 -84
  520. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  521. package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
  522. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  523. package/lib/feature-libraries/sequence-field/rebase.js +111 -118
  524. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  525. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  526. package/lib/feature-libraries/sequence-field/replaceRevisions.js +19 -32
  527. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  528. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  529. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -3
  530. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  531. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  532. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  533. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +379 -182
  534. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  535. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  536. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +21 -63
  537. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  538. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  539. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  540. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -13
  541. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  542. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  543. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  544. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +16 -111
  545. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  546. package/lib/feature-libraries/sequence-field/types.d.ts +37 -74
  547. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  548. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  549. package/lib/feature-libraries/sequence-field/utils.d.ts +20 -25
  550. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  551. package/lib/feature-libraries/sequence-field/utils.js +155 -313
  552. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  553. package/lib/packageVersion.d.ts +1 -1
  554. package/lib/packageVersion.d.ts.map +1 -1
  555. package/lib/packageVersion.js +1 -1
  556. package/lib/packageVersion.js.map +1 -1
  557. package/lib/shared-tree/independentView.d.ts.map +1 -1
  558. package/lib/shared-tree/independentView.js +1 -1
  559. package/lib/shared-tree/independentView.js.map +1 -1
  560. package/lib/shared-tree/index.d.ts +1 -1
  561. package/lib/shared-tree/index.d.ts.map +1 -1
  562. package/lib/shared-tree/index.js.map +1 -1
  563. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  564. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  565. package/lib/shared-tree/schematizeTree.js +3 -2
  566. package/lib/shared-tree/schematizeTree.js.map +1 -1
  567. package/lib/shared-tree/schematizingTreeView.d.ts +1 -5
  568. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  569. package/lib/shared-tree/schematizingTreeView.js +24 -38
  570. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  571. package/lib/shared-tree/sharedTree.d.ts +9 -3
  572. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  573. package/lib/shared-tree/sharedTree.js +4 -1
  574. package/lib/shared-tree/sharedTree.js.map +1 -1
  575. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -0
  576. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  577. package/lib/shared-tree/sharedTreeChangeCodecs.js +8 -0
  578. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  579. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +4 -4
  580. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  581. package/lib/shared-tree/sharedTreeChangeFamily.js +3 -3
  582. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  583. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  584. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  585. package/lib/shared-tree/sharedTreeEditBuilder.js +12 -6
  586. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  587. package/lib/shared-tree/treeCheckout.d.ts +13 -11
  588. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  589. package/lib/shared-tree/treeCheckout.js +59 -9
  590. package/lib/shared-tree/treeCheckout.js.map +1 -1
  591. package/lib/shared-tree-core/branch.d.ts +3 -2
  592. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  593. package/lib/shared-tree-core/branch.js +4 -3
  594. package/lib/shared-tree-core/branch.js.map +1 -1
  595. package/lib/shared-tree-core/editManager.d.ts +2 -2
  596. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  597. package/lib/shared-tree-core/editManager.js +9 -9
  598. package/lib/shared-tree-core/editManager.js.map +1 -1
  599. package/lib/shared-tree-core/editManagerCodecs.d.ts +4 -0
  600. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  601. package/lib/shared-tree-core/editManagerCodecs.js +8 -1
  602. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  603. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  604. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  605. package/lib/shared-tree-core/editManagerFormatCommons.js +6 -0
  606. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  607. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  608. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  609. package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  610. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  611. package/lib/shared-tree-core/index.d.ts +2 -2
  612. package/lib/shared-tree-core/index.d.ts.map +1 -1
  613. package/lib/shared-tree-core/index.js +2 -2
  614. package/lib/shared-tree-core/index.js.map +1 -1
  615. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  616. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  617. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  618. package/lib/shared-tree-core/messageCodecs.d.ts +4 -0
  619. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  620. package/lib/shared-tree-core/messageCodecs.js +8 -1
  621. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  622. package/lib/shared-tree-core/messageFormat.d.ts +1 -0
  623. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  624. package/lib/shared-tree-core/messageFormat.js +6 -0
  625. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  626. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  627. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  628. package/lib/shared-tree-core/messageFormatV1ToV4.js +1 -0
  629. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  630. package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -0
  631. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  632. package/lib/shared-tree-core/sharedTreeCore.js +1 -1
  633. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  634. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +16 -12
  635. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  636. package/lib/simple-tree/core/unhydratedFlexTree.js +58 -8
  637. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  638. package/lib/simple-tree/fieldSchema.d.ts +4 -4
  639. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  640. package/lib/simple-tree/fieldSchema.js.map +1 -1
  641. package/lib/simple-tree/index.d.ts +2 -2
  642. package/lib/simple-tree/index.d.ts.map +1 -1
  643. package/lib/simple-tree/index.js +1 -1
  644. package/lib/simple-tree/index.js.map +1 -1
  645. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  646. package/lib/simple-tree/node-kinds/array/arrayNode.js +6 -4
  647. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  648. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  649. package/lib/simple-tree/node-kinds/common.js +2 -2
  650. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  651. package/lib/simple-tree/node-kinds/map/mapNode.js +2 -2
  652. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  653. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  654. package/lib/simple-tree/node-kinds/object/objectNode.js +20 -20
  655. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  656. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  657. package/lib/simple-tree/node-kinds/record/recordNode.js +4 -2
  658. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  659. package/lib/simple-tree/prepareForInsertion.d.ts +54 -47
  660. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  661. package/lib/simple-tree/prepareForInsertion.js +184 -125
  662. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  663. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +8 -3
  664. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  665. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +23 -10
  666. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  667. package/lib/treeFactory.d.ts.map +1 -1
  668. package/lib/treeFactory.js +13 -3
  669. package/lib/treeFactory.js.map +1 -1
  670. package/lib/util/index.d.ts +1 -1
  671. package/lib/util/index.d.ts.map +1 -1
  672. package/lib/util/index.js +1 -1
  673. package/lib/util/index.js.map +1 -1
  674. package/lib/util/rangeMap.d.ts +23 -11
  675. package/lib/util/rangeMap.d.ts.map +1 -1
  676. package/lib/util/rangeMap.js +41 -9
  677. package/lib/util/rangeMap.js.map +1 -1
  678. package/package.json +21 -21
  679. package/src/core/change-family/changeFamily.ts +5 -0
  680. package/src/core/change-family/index.ts +1 -0
  681. package/src/core/index.ts +4 -1
  682. package/src/core/rebase/changeRebaser.ts +6 -1
  683. package/src/core/rebase/index.ts +1 -0
  684. package/src/core/rebase/types.ts +4 -0
  685. package/src/core/rebase/utils.ts +31 -7
  686. package/src/core/tree/delta.ts +6 -0
  687. package/src/core/tree/detachedFieldIndex.ts +29 -1
  688. package/src/core/tree/detachedFieldIndexTypes.ts +5 -0
  689. package/src/core/tree/index.ts +13 -12
  690. package/src/core/tree/pathTree.ts +16 -4
  691. package/src/core/tree/visitDelta.ts +31 -11
  692. package/src/feature-libraries/changeAtomIdBTree.ts +28 -3
  693. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +369 -127
  694. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +13 -4
  695. package/src/feature-libraries/default-schema/index.ts +16 -5
  696. package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +231 -0
  697. package/src/feature-libraries/default-schema/mappedEditBuilder.ts +35 -9
  698. package/src/feature-libraries/deltaUtils.ts +6 -1
  699. package/src/feature-libraries/flex-tree/context.ts +17 -0
  700. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +7 -8
  701. package/src/feature-libraries/flex-tree/lazyField.ts +65 -24
  702. package/src/feature-libraries/index.ts +22 -9
  703. package/src/feature-libraries/mitigatedChangeFamily.ts +3 -1
  704. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +144 -47
  705. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +113 -58
  706. package/src/feature-libraries/modular-schema/genericFieldKind.ts +7 -18
  707. package/src/feature-libraries/modular-schema/index.ts +16 -16
  708. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +623 -348
  709. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +1 -0
  710. package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +649 -0
  711. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +14 -0
  712. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +2694 -748
  713. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +1 -0
  714. package/src/feature-libraries/modular-schema/modularChangeFormatV2.ts +1 -1
  715. package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +67 -0
  716. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +62 -10
  717. package/src/feature-libraries/optional-field/optionalField.ts +359 -568
  718. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +45 -0
  719. package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +31 -35
  720. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +89 -35
  721. package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +94 -0
  722. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -1
  723. package/src/feature-libraries/optional-field/requiredField.ts +15 -2
  724. package/src/feature-libraries/sequence-field/compose.ts +137 -522
  725. package/src/feature-libraries/sequence-field/helperTypes.ts +34 -19
  726. package/src/feature-libraries/sequence-field/invert.ts +102 -228
  727. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  728. package/src/feature-libraries/sequence-field/moveEffectTable.ts +8 -195
  729. package/src/feature-libraries/sequence-field/rebase.ts +171 -207
  730. package/src/feature-libraries/sequence-field/replaceRevisions.ts +26 -52
  731. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +8 -3
  732. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +677 -229
  733. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +56 -70
  734. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +28 -30
  735. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +21 -131
  736. package/src/feature-libraries/sequence-field/types.ts +40 -79
  737. package/src/feature-libraries/sequence-field/utils.ts +211 -370
  738. package/src/packageVersion.ts +1 -1
  739. package/src/shared-tree/independentView.ts +12 -6
  740. package/src/shared-tree/index.ts +3 -2
  741. package/src/shared-tree/schematizeTree.ts +21 -8
  742. package/src/shared-tree/schematizingTreeView.ts +38 -68
  743. package/src/shared-tree/sharedTree.ts +30 -15
  744. package/src/shared-tree/sharedTreeChangeCodecs.ts +8 -0
  745. package/src/shared-tree/sharedTreeChangeFamily.ts +7 -4
  746. package/src/shared-tree/sharedTreeEditBuilder.ts +43 -8
  747. package/src/shared-tree/treeCheckout.ts +93 -17
  748. package/src/shared-tree-core/branch.ts +8 -2
  749. package/src/shared-tree-core/editManager.ts +16 -2
  750. package/src/shared-tree-core/editManagerCodecs.ts +11 -1
  751. package/src/shared-tree-core/editManagerFormatCommons.ts +6 -0
  752. package/src/shared-tree-core/editManagerFormatV1toV4.ts +3 -1
  753. package/src/shared-tree-core/index.ts +2 -0
  754. package/src/shared-tree-core/messageCodecV1ToV4.ts +2 -1
  755. package/src/shared-tree-core/messageCodecs.ts +11 -1
  756. package/src/shared-tree-core/messageFormat.ts +6 -0
  757. package/src/shared-tree-core/messageFormatV1ToV4.ts +3 -1
  758. package/src/shared-tree-core/sharedTreeCore.ts +4 -1
  759. package/src/simple-tree/core/unhydratedFlexTree.ts +82 -35
  760. package/src/simple-tree/fieldSchema.ts +6 -4
  761. package/src/simple-tree/index.ts +2 -1
  762. package/src/simple-tree/node-kinds/array/arrayNode.ts +7 -5
  763. package/src/simple-tree/node-kinds/common.ts +2 -5
  764. package/src/simple-tree/node-kinds/map/mapNode.ts +4 -4
  765. package/src/simple-tree/node-kinds/object/objectNode.ts +26 -26
  766. package/src/simple-tree/node-kinds/record/recordNode.ts +10 -9
  767. package/src/simple-tree/prepareForInsertion.ts +342 -200
  768. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +35 -15
  769. package/src/treeFactory.ts +16 -4
  770. package/src/util/index.ts +3 -0
  771. package/src/util/rangeMap.ts +68 -26
  772. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  773. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  774. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -50
  775. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  776. package/docs/main/sequence-field/move-composition.md +0 -46
  777. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  778. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  779. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -46
  780. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  781. package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +0 -57
@@ -6,71 +6,55 @@
6
6
  import { assert, unreachableCase, fail } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import {
9
+ areEqualChangeAtomIdOpts,
10
+ areEqualChangeAtomIds,
9
11
  type ChangeAtomId,
10
12
  type RevisionMetadataSource,
11
13
  type RevisionTag,
12
- offsetChangeAtomId,
13
14
  } from "../../core/index.js";
14
15
  import type { IdAllocator } from "../../util/index.js";
15
- import {
16
- type CrossFieldManager,
17
- CrossFieldTarget,
18
- type NodeChangeComposer,
19
- type NodeId,
16
+ import type {
17
+ ComposeNodeManager,
18
+ NodeChangeComposer,
19
+ NodeId,
20
20
  } from "../modular-schema/index.js";
21
21
 
22
- import type { MoveMarkEffect } from "./helperTypes.js";
23
22
  import { MarkListFactory } from "./markListFactory.js";
24
23
  import { MarkQueue } from "./markQueue.js";
25
- import {
26
- type MoveEffect,
27
- type MoveEffectTable,
28
- getCrossFieldTargetFromMove,
29
- getMoveEffect,
30
- getMoveIn,
31
- isMoveIn,
32
- isMoveMark,
33
- isMoveOut,
34
- setMoveEffect,
35
- } from "./moveEffectTable.js";
36
- import {
37
- type Attach,
38
- type CellMark,
39
- type Changeset,
40
- type Detach,
41
- type Mark,
42
- type MarkEffect,
43
- type MarkList,
44
- type MoveId,
45
- type NoopMark,
46
- NoopMarkType,
24
+ import type { NodeRangeQueryFunc } from "./moveEffectTable.js";
25
+ import type {
26
+ CellMark,
27
+ Changeset,
28
+ Detach,
29
+ Mark,
30
+ MarkEffect,
31
+ MarkList,
32
+ NoopMark,
47
33
  } from "./types.js";
48
34
  import {
49
35
  CellOrder,
50
36
  areEqualCellIds,
51
37
  areInputCellsEmpty,
52
38
  areOutputCellsEmpty,
53
- asAttachAndDetach,
54
39
  cellSourcesFromMarks,
55
40
  compareCellPositionsUsingTombstones,
56
41
  extractMarkEffect,
57
- getEndpoint,
42
+ getAttachedRootId,
43
+ getDetachOutputCellId,
44
+ getDetachedRootId,
58
45
  getInputCellId,
46
+ getMovedNodeId,
59
47
  getOutputCellId,
60
48
  isAttach,
61
- isAttachAndDetachEffect,
62
49
  isDetach,
63
- isImpactfulCellRename,
64
50
  isNewAttach,
65
51
  isNoopMark,
52
+ isPin,
66
53
  isRename,
67
54
  markEmptiesCells,
68
- markFillsCells,
69
55
  markHasCellEffect,
70
56
  normalizeCellRename,
71
- settleMark,
72
57
  withNodeChange,
73
- withRevision,
74
58
  } from "./utils.js";
75
59
 
76
60
  /**
@@ -90,63 +74,25 @@ export function compose(
90
74
  change2: Changeset,
91
75
  composeChild: NodeChangeComposer,
92
76
  _genId: IdAllocator,
93
- manager: CrossFieldManager,
77
+ manager: ComposeNodeManager,
94
78
  revisionMetadata: RevisionMetadataSource,
95
79
  ): Changeset {
96
- return composeMarkLists(
97
- change1,
98
- change2,
99
- composeChild,
100
- manager as MoveEffectTable,
101
- revisionMetadata,
102
- );
80
+ return composeMarkLists(change1, change2, composeChild, manager, revisionMetadata);
103
81
  }
104
82
 
105
83
  function composeMarkLists(
106
84
  baseMarkList: MarkList,
107
85
  newMarkList: MarkList,
108
86
  composeChild: NodeChangeComposer,
109
- moveEffects: MoveEffectTable,
87
+ moveEffects: ComposeNodeManager,
110
88
  revisionMetadata: RevisionMetadataSource,
111
89
  ): MarkList {
112
90
  const factory = new MarkListFactory();
113
91
  const queue = new ComposeQueue(baseMarkList, newMarkList, moveEffects, revisionMetadata);
114
92
  while (!queue.isEmpty()) {
115
93
  const { baseMark, newMark } = queue.pop();
116
- if (newMark === undefined) {
117
- assert(
118
- baseMark !== undefined,
119
- 0x4db /* Non-empty queue should not return two undefined marks */,
120
- );
121
- factory.push(
122
- composeMark(baseMark, moveEffects, (node: NodeId) =>
123
- composeChildChanges(node, undefined, composeChild),
124
- ),
125
- );
126
- } else {
127
- // We only compose changesets that will not be further rebased.
128
- // It is therefore safe to remove any intentions that have no impact in the context they apply to.
129
- const settledNewMark = settleMark(newMark);
130
- if (baseMark === undefined) {
131
- factory.push(
132
- composeMark(settledNewMark, moveEffects, (node: NodeId) =>
133
- composeChildChanges(undefined, node, composeChild),
134
- ),
135
- );
136
- } else {
137
- // Past this point, we are guaranteed that `settledNewMark` and `baseMark` have the same length and
138
- // start at the same location in the revision after the base changes.
139
- // They therefore refer to the same range for that revision.
140
- const settledBaseMark = settleMark(baseMark);
141
- const composedMark = composeMarks(
142
- settledBaseMark,
143
- settledNewMark,
144
- composeChild,
145
- moveEffects,
146
- );
147
- factory.push(composedMark);
148
- }
149
- }
94
+ const composedMark = composeMarks(baseMark, newMark, composeChild, moveEffects);
95
+ factory.push(composedMark);
150
96
  }
151
97
 
152
98
  return factory.list;
@@ -165,206 +111,77 @@ function composeMarks(
165
111
  baseMark: Mark,
166
112
  newMark: Mark,
167
113
  composeChild: NodeChangeComposer,
168
- moveEffects: MoveEffectTable,
114
+ moveEffects: ComposeNodeManager,
169
115
  ): Mark {
170
116
  const nodeChange = handleNodeChanges(baseMark, newMark, composeChild, moveEffects);
171
-
172
- return withUpdatedEndpoint(
173
- withNodeChange(composeMarksIgnoreChild(baseMark, newMark, moveEffects), nodeChange),
174
- baseMark.count,
175
- moveEffects,
176
- );
117
+ return withNodeChange(composeMarksIgnoreChild(baseMark, newMark, moveEffects), nodeChange);
177
118
  }
178
119
 
179
120
  function composeMarksIgnoreChild(
180
121
  baseMark: Mark,
181
122
  newMark: Mark,
182
- moveEffects: MoveEffectTable,
123
+ moveEffects: ComposeNodeManager,
183
124
  ): Mark {
184
125
  if (isNoopMark(baseMark)) {
185
126
  return newMark;
186
127
  } else if (isNoopMark(newMark)) {
187
- return baseMark;
128
+ return updateBaseMarkId(moveEffects, baseMark);
188
129
  }
189
130
 
190
131
  if (isRename(baseMark) && isRename(newMark)) {
132
+ if (areEqualChangeAtomIdOpts(baseMark.cellId, newMark.idOverride)) {
133
+ return createNoopMark(baseMark.count, undefined, baseMark.cellId);
134
+ }
191
135
  return { ...baseMark, idOverride: newMark.idOverride };
192
136
  } else if (isRename(baseMark)) {
137
+ assert(isAttach(newMark), 0x9f1 /* Unexpected mark type */);
193
138
  assert(
194
- isAttach(newMark) || isAttachAndDetachEffect(newMark),
195
- 0x9f1 /* Unexpected mark type */,
139
+ baseMark.cellId !== undefined && newMark.cellId !== undefined,
140
+ "Expected marks to target an empty cell",
196
141
  );
197
142
  return { ...newMark, cellId: baseMark.cellId };
198
143
  } else if (isRename(newMark)) {
199
- assert(
200
- isDetach(baseMark) || isAttachAndDetachEffect(baseMark),
201
- 0x9f2 /* Unexpected mark type */,
202
- );
203
- return isDetach(baseMark)
204
- ? { ...baseMark, idOverride: newMark.idOverride }
205
- : { ...baseMark, detach: { ...baseMark.detach, idOverride: newMark.idOverride } };
144
+ assert(isDetach(baseMark), 0x9f2 /* Unexpected mark type */);
145
+ return updateBaseMarkId(moveEffects, { ...baseMark, cellRename: newMark.idOverride });
206
146
  }
207
147
 
208
- if (isImpactfulCellRename(newMark)) {
209
- const newAttachAndDetach = asAttachAndDetach(newMark);
210
- assert(
211
- newAttachAndDetach.cellId !== undefined,
212
- 0x9f3 /* Impactful cell rename must target empty cell */,
148
+ if (!markHasCellEffect(baseMark)) {
149
+ assert(baseMark.type === "Attach", "Expected baseMark to be a pin");
150
+
151
+ // `newMark` can be either a remove or another pin.
152
+ // A pin is treated as a detach and attach, so we call `composeAttachDetach` in either case.
153
+ moveEffects.composeAttachDetach(
154
+ getAttachedRootId(baseMark),
155
+ {
156
+ revision: newMark.revision,
157
+ localId: newMark.id,
158
+ },
159
+ baseMark.count,
213
160
  );
214
- const newDetachRevision = newAttachAndDetach.detach.revision;
215
- if (markEmptiesCells(baseMark)) {
216
- // baseMark is a detach which cancels with the attach portion of the AttachAndDetach,
217
- // so we are just left with the detach portion of the AttachAndDetach.
218
- const newDetach: CellMark<Detach> = {
219
- ...newAttachAndDetach.detach,
220
- count: baseMark.count,
221
- };
222
-
223
- if (isMoveIn(newAttachAndDetach.attach) && isMoveOut(newAttachAndDetach.detach)) {
224
- assert(isMoveOut(baseMark), 0x808 /* Unexpected mark type */);
225
-
226
- // The base changeset and new changeset both move these nodes.
227
- // Call the original position of the nodes A, the position after the base changeset is applied B,
228
- // and the position after the new changeset is applied C.
229
- // The new changeset moves the nodes from B, temporarily returns them to A, and then moves them to C.
230
- // The composition of the base and new changesets will be a move directly from A to C,
231
- // since the move from A to B cancels out with the return from B to A.
232
- // This if-block is handling marks at A.
233
- // When we compose the marks at B we will link the start of the base move (A to B)
234
- // with the end of the new move (B to C).
235
- // Because we are replacing the mark representing the start of the move with the new changeset's
236
- // move-out from A, we update the base move-in at B to consider that its start point.
237
- const newDetachId = {
238
- revision: newDetachRevision,
239
- localId: newAttachAndDetach.detach.id,
240
- };
241
-
242
- setTruncatedEndpointForInner(
243
- moveEffects,
244
- CrossFieldTarget.Destination,
245
- getEndpoint(baseMark),
246
- baseMark.count,
247
- newDetachId,
248
- );
249
-
250
- const newEndpoint = getComposedEndpoint(
251
- moveEffects,
252
- CrossFieldTarget.Source,
253
- baseMark.revision,
254
- baseMark.id,
255
- baseMark.count,
256
- );
257
161
 
258
- if (newEndpoint !== undefined) {
259
- changeFinalEndpoint(newDetach as MoveMarkEffect, newEndpoint);
260
- setTruncatedEndpoint(
261
- moveEffects,
262
- CrossFieldTarget.Destination,
263
- newEndpoint,
264
- baseMark.count,
265
- newDetachId,
266
- );
162
+ const pinId = getAttachedRootId(baseMark);
163
+ return newMark.type === "Detach"
164
+ ? {
165
+ ...newMark,
166
+ detachCellId: baseMark.detachCellId ?? pinId,
167
+ cellRename: getDetachOutputCellId(newMark),
267
168
  }
268
- }
269
-
270
- return newDetach;
271
- }
272
-
273
- if (isImpactfulCellRename(baseMark)) {
274
- assert(
275
- baseMark.cellId !== undefined,
276
- 0x9f4 /* Impactful cell rename must target empty cell */,
277
- );
278
- const baseAttachAndDetach = asAttachAndDetach(baseMark);
279
- const newOutputId = getOutputCellId(newAttachAndDetach);
280
-
281
- const originalAttach = { ...baseAttachAndDetach.attach };
282
- const finalDetach = { ...newAttachAndDetach.detach };
283
-
284
- handleMovePivot(baseMark.count, originalAttach, finalDetach, moveEffects);
285
-
286
- if (areEqualCellIds(newOutputId, baseAttachAndDetach.cellId)) {
287
- return { count: baseAttachAndDetach.count, cellId: baseAttachAndDetach.cellId };
288
- }
289
-
290
- // `newMark`'s attach portion cancels with `baseMark`'s detach portion.
291
- const detachRevision = finalDetach.revision;
292
- if (detachRevision !== undefined) {
293
- finalDetach.revision = detachRevision;
294
- }
295
-
296
- return normalizeCellRename(baseMark.cellId, baseMark.count, originalAttach, finalDetach);
297
- }
298
-
299
- return normalizeCellRename(
300
- newAttachAndDetach.cellId,
301
- newAttachAndDetach.count,
302
- newAttachAndDetach.attach,
303
- newAttachAndDetach.detach,
304
- );
305
- }
306
- if (isImpactfulCellRename(baseMark)) {
307
- const baseAttachAndDetach = asAttachAndDetach(baseMark);
308
- if (markFillsCells(newMark)) {
309
- const originalAttach = withRevision(
310
- {
311
- ...baseAttachAndDetach.attach,
312
- cellId: baseAttachAndDetach.cellId,
313
- count: baseAttachAndDetach.count,
314
- },
315
- baseAttachAndDetach.attach.revision,
169
+ : newMark;
170
+ } else if (!markHasCellEffect(newMark)) {
171
+ if (isAttach(newMark) && isAttach(baseMark)) {
172
+ // When composing two inserts, the second insert (which is a pin) should take precedence.
173
+ // We treat the pin as a detach and reattach.
174
+ moveEffects.composeAttachDetach(
175
+ getAttachedRootId(baseMark),
176
+ getAttachedRootId(newMark),
177
+ baseMark.count,
316
178
  );
317
179
 
318
- if (isMoveIn(baseAttachAndDetach.attach) && isMoveOut(baseAttachAndDetach.detach)) {
319
- assert(isMoveIn(newMark), 0x809 /* Unexpected mark type */);
320
-
321
- const originalAttachId = {
322
- revision: baseAttachAndDetach.attach.revision,
323
- localId: baseAttachAndDetach.attach.id,
324
- };
325
-
326
- setTruncatedEndpointForInner(
327
- moveEffects,
328
- CrossFieldTarget.Source,
329
- getEndpoint(newMark),
330
- baseAttachAndDetach.count,
331
- originalAttachId,
332
- );
333
-
334
- const newEndpoint = getComposedEndpoint(
335
- moveEffects,
336
- CrossFieldTarget.Destination,
337
- newMark.revision,
338
- newMark.id,
339
- newMark.count,
340
- );
341
-
342
- if (newEndpoint !== undefined) {
343
- changeFinalEndpoint(originalAttach as MoveMarkEffect, newEndpoint);
344
- setTruncatedEndpoint(
345
- moveEffects,
346
- CrossFieldTarget.Source,
347
- newEndpoint,
348
- baseMark.count,
349
- originalAttachId,
350
- );
351
- }
352
- }
353
-
354
- return originalAttach;
355
- } else {
356
- // Other mark types have been handled by previous conditional branches.
357
- assert(newMark.type === NoopMarkType, 0x80a /* Unexpected mark type */);
358
- return baseMark;
180
+ const composed = { cellId: baseMark.cellId, ...newMark };
181
+ delete composed.detachCellId;
182
+ return composed;
359
183
  }
360
- }
361
-
362
- if (!markHasCellEffect(baseMark) && !markHasCellEffect(newMark)) {
363
- return createNoopMark(newMark.count, undefined, getInputCellId(baseMark));
364
- } else if (!markHasCellEffect(baseMark)) {
365
- return newMark;
366
- } else if (!markHasCellEffect(newMark)) {
367
- return baseMark;
184
+ return updateBaseMarkId(moveEffects, baseMark);
368
185
  } else if (areInputCellsEmpty(baseMark)) {
369
186
  assert(isDetach(newMark), 0x71c /* Unexpected mark type */);
370
187
  assert(isAttach(baseMark), 0x71d /* Expected generative mark */);
@@ -372,7 +189,11 @@ function composeMarksIgnoreChild(
372
189
  const attach = extractMarkEffect(baseMark);
373
190
  const detach = extractMarkEffect(newMark);
374
191
 
375
- handleMovePivot(baseMark.count, attach, detach, moveEffects);
192
+ moveEffects.composeAttachDetach(
193
+ getAttachedRootId(baseMark),
194
+ getDetachedRootId(newMark),
195
+ baseMark.count,
196
+ );
376
197
 
377
198
  if (areEqualCellIds(getOutputCellId(newMark), baseMark.cellId)) {
378
199
  // The output and input cell IDs are the same, so this mark has no effect.
@@ -380,74 +201,43 @@ function composeMarksIgnoreChild(
380
201
  }
381
202
  return normalizeCellRename(baseMark.cellId, baseMark.count, attach, detach);
382
203
  } else {
383
- const length = baseMark.count;
384
- return createNoopMark(length, undefined);
385
- }
386
- }
387
-
388
- /**
389
- * Checks if `baseAttach` and `newDetach` are both moves, and if so updates their move endpoints as appropriate,
390
- * and removes their `finalEndpoint` endpoint fields. Note that can mutate `baseAttach` and `newDetach`.
391
- * If the effects are not both moves this function does nothing.
392
- * @param count - The number of cells targeted
393
- * @param baseAttach - The base attach effect at this location
394
- * @param newDetach - The new detach effect at this location
395
- */
396
- function handleMovePivot(
397
- count: number,
398
- baseAttach: Attach,
399
- newDetach: Detach,
400
- moveEffects: MoveEffectTable,
401
- ): void {
402
- if (isMoveIn(baseAttach) && isMoveOut(newDetach)) {
403
- const finalSource = getEndpoint(baseAttach);
404
- const finalDest = getEndpoint(newDetach);
405
-
406
- setEndpoint(moveEffects, CrossFieldTarget.Source, finalSource, count, finalDest);
407
-
408
- const truncatedEndpoint1 = getTruncatedEndpointForInner(
409
- moveEffects,
410
- CrossFieldTarget.Destination,
411
- baseAttach.revision,
412
- baseAttach.id,
413
- count,
414
- );
415
-
416
- if (truncatedEndpoint1 !== undefined) {
417
- setTruncatedEndpoint(
418
- moveEffects,
419
- CrossFieldTarget.Destination,
420
- finalDest,
421
- count,
422
- truncatedEndpoint1,
423
- );
204
+ assert(baseMark.type === "Detach", "Unexpected mark type");
205
+ assert(newMark.type === "Attach", "Unexpected mark type");
206
+ const detachId = getDetachedRootId(baseMark);
207
+ const attachId = getAttachedRootId(newMark);
208
+
209
+ moveEffects.composeDetachAttach(detachId, attachId, baseMark.count, true);
210
+
211
+ // The composition has no net effect but we preserve the second change's intention to pin the nodes here.
212
+ const composedMark = { ...newMark };
213
+ delete composedMark.cellId;
214
+ const baseDetachCellId = baseMark.detachCellId ?? detachId;
215
+ if (!areEqualChangeAtomIds(baseDetachCellId, attachId)) {
216
+ composedMark.detachCellId = baseDetachCellId;
424
217
  }
425
218
 
426
- setEndpoint(moveEffects, CrossFieldTarget.Destination, finalDest, count, finalSource);
427
-
428
- const truncatedEndpoint2 = getTruncatedEndpointForInner(
429
- moveEffects,
430
- CrossFieldTarget.Source,
431
- newDetach.revision,
432
- newDetach.id,
433
- count,
434
- );
219
+ return composedMark;
220
+ }
221
+ }
435
222
 
436
- if (truncatedEndpoint2 !== undefined) {
437
- setTruncatedEndpoint(
438
- moveEffects,
439
- CrossFieldTarget.Source,
440
- finalSource,
441
- count,
442
- truncatedEndpoint2,
443
- );
223
+ function updateBaseMarkId(moveEffects: ComposeNodeManager, baseMark: Mark): Mark {
224
+ if (isDetach(baseMark)) {
225
+ const baseDetachId = getDetachedRootId(baseMark);
226
+ const updatedDetachId = getUpdatedDetachId(moveEffects, baseMark);
227
+ if (
228
+ updatedDetachId !== undefined &&
229
+ !areEqualChangeAtomIds(updatedDetachId, baseDetachId)
230
+ ) {
231
+ return {
232
+ ...baseMark,
233
+ revision: updatedDetachId.revision,
234
+ id: updatedDetachId.localId,
235
+ detachCellId: baseMark.detachCellId ?? baseDetachId,
236
+ };
444
237
  }
445
-
446
- // The `finalEndpoint` field of AttachAndDetach move effect pairs is not used,
447
- // so we remove it as a normalization.
448
- delete baseAttach.finalEndpoint;
449
- delete newDetach.finalEndpoint;
450
238
  }
239
+
240
+ return baseMark;
451
241
  }
452
242
 
453
243
  function createNoopMark(
@@ -470,18 +260,21 @@ function handleNodeChanges(
470
260
  baseMark: Mark,
471
261
  newMark: Mark,
472
262
  composeChild: NodeChangeComposer,
473
- moveEffects: MoveEffectTable,
263
+ moveEffects: ComposeNodeManager,
474
264
  ): NodeId | undefined {
475
- if (newMark.changes !== undefined) {
476
- const baseSource = getMoveIn(baseMark);
477
-
478
- // TODO: Make sure composeChild is not called twice on the node changes.
479
- if (baseSource !== undefined) {
480
- setModifyAfter(moveEffects, getEndpoint(baseSource), newMark.changes);
481
- return undefined;
482
- }
265
+ if (
266
+ newMark.changes !== undefined &&
267
+ baseMark.type === "Attach" &&
268
+ baseMark.cellId !== undefined
269
+ ) {
270
+ moveEffects.sendNewChangesToBaseSourceLocation(
271
+ getAttachedRootId(baseMark),
272
+ newMark.changes,
273
+ );
274
+ return undefined;
483
275
  }
484
276
 
277
+ // TODO: Make sure composeChild is not called twice on the node changes.
485
278
  return composeChildChanges(baseMark.changes, newMark.changes, composeChild);
486
279
  }
487
280
 
@@ -497,16 +290,6 @@ function composeChildChanges(
497
290
  return composeChild(baseChange, newChange);
498
291
  }
499
292
 
500
- function composeMark<TMark extends Mark>(
501
- mark: TMark,
502
- moveEffects: MoveEffectTable,
503
- composeChild: (node: NodeId) => NodeId | undefined,
504
- ): TMark {
505
- const nodeChanges = mark.changes === undefined ? undefined : composeChild(mark.changes);
506
- const updatedMark = withUpdatedEndpoint(mark, mark.count, moveEffects);
507
- return withNodeChange(updatedMark, nodeChanges);
508
- }
509
-
510
293
  export class ComposeQueue {
511
294
  private readonly baseMarks: MarkQueue;
512
295
  private readonly newMarks: MarkQueue;
@@ -516,11 +299,16 @@ export class ComposeQueue {
516
299
  public constructor(
517
300
  baseMarks: Changeset,
518
301
  newMarks: Changeset,
519
- private readonly moveEffects: MoveEffectTable,
302
+ private readonly moveEffects: ComposeNodeManager,
520
303
  private readonly revisionMetadata: RevisionMetadataSource,
521
304
  ) {
522
- this.baseMarks = new MarkQueue(baseMarks, moveEffects);
523
- this.newMarks = new MarkQueue(newMarks, moveEffects);
305
+ const queryFunc: NodeRangeQueryFunc = (mark) =>
306
+ isDetach(mark) || isPin(mark)
307
+ ? moveEffects.getNewChangesForBaseDetach(getMovedNodeId(mark), mark.count).length
308
+ : mark.count;
309
+
310
+ this.baseMarks = new MarkQueue(baseMarks, queryFunc);
311
+ this.newMarks = new MarkQueue(newMarks, (mark) => mark.count);
524
312
  this.baseMarksCellSources = cellSourcesFromMarks(baseMarks, getOutputCellId);
525
313
  this.newMarksCellSources = cellSourcesFromMarks(newMarks, getInputCellId);
526
314
  }
@@ -533,7 +321,7 @@ export class ComposeQueue {
533
321
  const baseMark = this.baseMarks.peek();
534
322
  const newMark = this.newMarks.peek();
535
323
  if (baseMark === undefined && newMark === undefined) {
536
- return {};
324
+ fail("Should not pop when queue is empty");
537
325
  } else if (baseMark === undefined) {
538
326
  return this.dequeueNew();
539
327
  } else if (newMark === undefined) {
@@ -589,10 +377,6 @@ export class ComposeQueue {
589
377
  private dequeueBase(length: number = Number.POSITIVE_INFINITY): ComposeMarks {
590
378
  const baseMark = this.baseMarks.dequeueUpTo(length);
591
379
  const movedChanges = getMovedChangesFromMark(this.moveEffects, baseMark);
592
- if (movedChanges !== undefined) {
593
- this.moveEffects.onMoveIn(movedChanges);
594
- }
595
-
596
380
  const newMark = createNoopMark(baseMark.count, movedChanges, getOutputCellId(baseMark));
597
381
  return { baseMark, newMark };
598
382
  }
@@ -637,195 +421,26 @@ export class ComposeQueue {
637
421
  }
638
422
 
639
423
  interface ComposeMarks {
640
- baseMark?: Mark;
641
- newMark?: Mark;
424
+ baseMark: Mark;
425
+ newMark: Mark;
642
426
  }
643
427
 
644
428
  function getMovedChangesFromMark(
645
- moveEffects: MoveEffectTable,
429
+ moveEffects: ComposeNodeManager,
646
430
  markEffect: MarkEffect,
647
431
  ): NodeId | undefined {
648
- if (isAttachAndDetachEffect(markEffect)) {
649
- return getMovedChangesFromMark(moveEffects, markEffect.detach);
650
- }
651
- if (!isMoveOut(markEffect)) {
432
+ if (!isDetach(markEffect)) {
652
433
  return undefined;
653
434
  }
654
435
 
655
- return getModifyAfter(moveEffects, markEffect.revision, markEffect.id);
656
- }
657
-
658
- // It is expected that the range from `id` to `id + count - 1` has the same move effect.
659
- // The call sites to this function are making queries about a mark which has already been split by a `MarkQueue`
660
- // to match the ranges in `moveEffects`.
661
- // TODO: Reduce the duplication between this and other MoveEffect helpers
662
- function getModifyAfter(
663
- moveEffects: MoveEffectTable,
664
- revision: RevisionTag | undefined,
665
- id: MoveId,
666
- ): NodeId | undefined {
667
- const target = CrossFieldTarget.Source;
668
- const effect = getMoveEffect(moveEffects, target, revision, id, 1);
669
-
670
- if (effect.value?.modifyAfter !== undefined) {
671
- return effect.value.modifyAfter;
672
- }
673
-
674
- return undefined;
675
- }
676
-
677
- // TODO: Reduce the duplication between this and other MoveEffect helpers
678
- function setModifyAfter(
679
- moveEffects: MoveEffectTable,
680
- { revision, localId: id }: ChangeAtomId,
681
- modifyAfter: NodeId,
682
- ): void {
683
- const target = CrossFieldTarget.Source;
684
- const count = 1;
685
- const effect = getMoveEffect(moveEffects, target, revision, id, count, false);
686
- const newEffect: MoveEffect =
687
- effect.value === undefined ? { modifyAfter } : { ...effect.value, modifyAfter };
688
- setMoveEffect(moveEffects, target, revision, id, count, newEffect);
689
- }
690
-
691
- function setEndpoint(
692
- moveEffects: MoveEffectTable,
693
- target: CrossFieldTarget,
694
- id: ChangeAtomId,
695
- count: number,
696
- endpoint: ChangeAtomId,
697
- ): void {
698
- const effect = getMoveEffect(moveEffects, target, id.revision, id.localId, count, false);
699
- const newEffect = effect.value === undefined ? { endpoint } : { ...effect.value, endpoint };
700
- setMoveEffect(moveEffects, target, id.revision, id.localId, effect.length, newEffect);
701
-
702
- const remainingCount = count - effect.length;
703
- if (remainingCount > 0) {
704
- setEndpoint(
705
- moveEffects,
706
- target,
707
- offsetChangeAtomId(id, effect.length),
708
- remainingCount,
709
- offsetChangeAtomId(endpoint, effect.length),
710
- );
711
- }
712
- }
713
-
714
- function setTruncatedEndpoint(
715
- moveEffects: MoveEffectTable,
716
- target: CrossFieldTarget,
717
- id: ChangeAtomId,
718
- count: number,
719
- truncatedEndpoint: ChangeAtomId,
720
- ): void {
721
- const effect = getMoveEffect(moveEffects, target, id.revision, id.localId, count);
722
- const newEffect =
723
- effect.value === undefined
724
- ? { truncatedEndpoint }
725
- : { ...effect.value, truncatedEndpoint };
726
-
727
- setMoveEffect(moveEffects, target, id.revision, id.localId, effect.length, newEffect);
728
-
729
- const remainingCount = count - effect.length;
730
- if (remainingCount > 0) {
731
- setTruncatedEndpoint(
732
- moveEffects,
733
- target,
734
- offsetChangeAtomId(id, effect.length),
735
- remainingCount,
736
- offsetChangeAtomId(truncatedEndpoint, effect.length),
737
- );
738
- }
739
- }
740
-
741
- function setTruncatedEndpointForInner(
742
- moveEffects: MoveEffectTable,
743
- target: CrossFieldTarget,
744
- id: ChangeAtomId,
745
- count: number,
746
- truncatedEndpointForInner: ChangeAtomId,
747
- ): void {
748
- const effect = getMoveEffect(moveEffects, target, id.revision, id.localId, count);
749
- const newEffect =
750
- effect.value === undefined
751
- ? { truncatedEndpointForInner }
752
- : { ...effect.value, truncatedEndpointForInner };
753
- setMoveEffect(moveEffects, target, id.revision, id.localId, effect.length, newEffect);
754
-
755
- const remainingCount = count - effect.length;
756
- if (remainingCount > 0) {
757
- setTruncatedEndpointForInner(
758
- moveEffects,
759
- target,
760
- offsetChangeAtomId(id, effect.length),
761
- remainingCount,
762
- offsetChangeAtomId(truncatedEndpointForInner, effect.length),
763
- );
764
- }
765
- }
766
-
767
- function withUpdatedEndpoint<TMark extends MarkEffect>(
768
- mark: TMark,
769
- count: number,
770
- effects: MoveEffectTable,
771
- ): TMark {
772
- if (isAttachAndDetachEffect(mark)) {
773
- return {
774
- ...mark,
775
- attach: withUpdatedEndpoint(mark.attach, count, effects),
776
- detach: withUpdatedEndpoint(mark.detach, count, effects),
777
- };
778
- }
779
-
780
- if (!isMoveMark(mark)) {
781
- return mark;
782
- }
783
- const finalDest = getComposedEndpoint(
784
- effects,
785
- getCrossFieldTargetFromMove(mark),
786
- mark.revision,
787
- mark.id,
788
- count,
789
- );
790
-
791
- if (finalDest === undefined) {
792
- return mark;
793
- }
794
-
795
- const output = { ...mark };
796
- changeFinalEndpoint(output, finalDest);
797
-
798
- return output;
799
- }
800
-
801
- function changeFinalEndpoint(mark: MoveMarkEffect, endpoint: ChangeAtomId): void {
802
- if (areEqualCellIds(endpoint, { revision: mark.revision, localId: mark.id })) {
803
- delete mark.finalEndpoint;
804
- } else {
805
- mark.finalEndpoint = endpoint;
806
- }
807
- }
808
-
809
- function getComposedEndpoint(
810
- moveEffects: MoveEffectTable,
811
- target: CrossFieldTarget,
812
- revision: RevisionTag | undefined,
813
- id: MoveId,
814
- count: number,
815
- ): ChangeAtomId | undefined {
816
- const effect = getMoveEffect(moveEffects, target, revision, id, count);
817
- assert(effect.length === count, 0x815 /* Expected effect to cover entire mark */);
818
- return effect.value?.truncatedEndpoint ?? effect.value?.endpoint;
436
+ return moveEffects.getNewChangesForBaseDetach(getDetachedRootId(markEffect), 1).value
437
+ ?.nodeChange;
819
438
  }
820
439
 
821
- function getTruncatedEndpointForInner(
822
- moveEffects: MoveEffectTable,
823
- target: CrossFieldTarget,
824
- revision: RevisionTag | undefined,
825
- id: MoveId,
826
- count: number,
440
+ function getUpdatedDetachId(
441
+ manager: ComposeNodeManager,
442
+ mark: CellMark<Detach>,
827
443
  ): ChangeAtomId | undefined {
828
- const effect = getMoveEffect(moveEffects, target, revision, id, count);
829
- assert(effect.length === count, 0x934 /* Expected effect to cover entire mark */);
830
- return effect.value?.truncatedEndpointForInner;
444
+ return manager.getNewChangesForBaseDetach(getDetachedRootId(mark), mark.count).value
445
+ ?.detachId;
831
446
  }