@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
@@ -13,8 +13,10 @@ import {
13
13
  type ChangeFamily,
14
14
  type ChangeFamilyEditor,
15
15
  type ChangeRebaser,
16
+ type ChangesetLocalId,
16
17
  type DeltaDetachedNodeId,
17
18
  type DeltaRoot,
19
+ type EditorOptions,
18
20
  type FieldUpPath,
19
21
  type NormalizedFieldUpPath,
20
22
  type NormalizedUpPath,
@@ -23,21 +25,23 @@ import {
23
25
  type TreeChunk,
24
26
  type UpPath,
25
27
  compareFieldUpPaths,
28
+ getDetachedFieldContainingFieldPath,
29
+ rootField,
26
30
  topDownPath,
27
31
  } from "../../core/index.js";
28
- import { brand } from "../../util/index.js";
32
+ import { brand, RangeMap } from "../../util/index.js";
29
33
  import {
30
34
  type EditDescription,
31
35
  type FieldChangeset,
32
36
  type FieldEditDescription,
37
+ type GlobalEditDescription,
33
38
  ModularChangeFamily,
34
39
  type ModularChangeset,
35
40
  ModularEditBuilder,
36
41
  intoDelta as intoModularDelta,
37
42
  relevantRemovedRoots as relevantModularRemovedRoots,
43
+ getBuildIds as getModularBuildIds,
38
44
  } from "../modular-schema/index.js";
39
- import type { OptionalChangeset } from "../optional-field/index.js";
40
- import type { CellId } from "../sequence-field/index.js";
41
45
 
42
46
  import {
43
47
  fieldKinds,
@@ -45,6 +49,7 @@ import {
45
49
  sequence,
46
50
  required as valueFieldKind,
47
51
  } from "./defaultFieldKinds.js";
52
+ import type { CellId } from "../sequence-field/index.js";
48
53
 
49
54
  export type DefaultChangeset = ModularChangeset;
50
55
 
@@ -54,7 +59,7 @@ export type DefaultChangeset = ModularChangeset;
54
59
  * @sealed
55
60
  */
56
61
  export class DefaultChangeFamily
57
- implements ChangeFamily<DefaultEditBuilder, DefaultChangeset>
62
+ implements ChangeFamily<IdBasedChangeFamilyDataEditor, DefaultChangeset>
58
63
  {
59
64
  private readonly modularFamily: ModularChangeFamily;
60
65
 
@@ -76,11 +81,13 @@ export class DefaultChangeFamily
76
81
  public buildEditor(
77
82
  mintRevisionTag: () => RevisionTag,
78
83
  changeReceiver: (change: TaggedChange<DefaultChangeset>) => void,
79
- ): DefaultEditBuilder {
80
- return new DefaultEditBuilder(
84
+ options?: EditorOptions,
85
+ ): IdBasedChangeFamilyDataEditor {
86
+ return new DefaultIdBasedDataEditor(
81
87
  this,
82
88
  mintRevisionTag,
83
89
  changeReceiver,
90
+ options,
84
91
  this.modularFamily.codecOptions,
85
92
  );
86
93
  }
@@ -111,8 +118,18 @@ export function relevantRemovedRoots(change: ModularChangeset): Iterable<DeltaDe
111
118
  return relevantModularRemovedRoots(change, fieldKinds);
112
119
  }
113
120
 
121
+ export function getBuildsIds(change: ModularChangeset): Iterable<DeltaDetachedNodeId> {
122
+ return getModularBuildIds(change);
123
+ }
124
+
125
+ export type DetachedRootIds = readonly DetachedRootIdRange[];
126
+ export interface DetachedRootIdRange {
127
+ readonly first: ChangeAtomId;
128
+ readonly count: number;
129
+ }
130
+
114
131
  /**
115
- * Default editor for transactional tree data changes.
132
+ * Default editor for tree data changes.
116
133
  * @privateRemarks
117
134
  * When taking into account not just the content of the tree,
118
135
  * but also how the merge identities (and thus anchors, flex-tree and simple-tree nodes) of nodes before and after the edits correspond,
@@ -128,32 +145,7 @@ export function relevantRemovedRoots(change: ModularChangeset): Iterable<DeltaDe
128
145
  * If/when such a mechanism becomes available, an evaluation should be done to determine if any existing editing operations should be changed to leverage it
129
146
  * (Possibly by adding opt ins at the view schema layer).
130
147
  */
131
- export interface IDefaultEditBuilder<TContent = TreeChunk> {
132
- /**
133
- * @param field - the value field which is being edited under the parent node
134
- * @returns An object with methods to edit the given field of the given parent.
135
- * The returned object can be used (i.e., have its methods called) multiple times but its lifetime
136
- * is bounded by the lifetime of this edit builder.
137
- */
138
- valueField(field: NormalizedFieldUpPath): ValueFieldEditBuilder<TContent>;
139
-
140
- /**
141
- * @param field - the optional field which is being edited under the parent node
142
- * @returns An object with methods to edit the given field of the given parent.
143
- * The returned object can be used (i.e., have its methods called) multiple times but its lifetime
144
- * is bounded by the lifetime of this edit builder.
145
- */
146
- optionalField(field: NormalizedFieldUpPath): OptionalFieldEditBuilder<TContent>;
147
-
148
- /**
149
- * @param field - the sequence field which is being edited under the parent node
150
- *
151
- * @returns An object with methods to edit the given field of the given parent.
152
- * The returned object can be used (i.e., have its methods called) multiple times but its lifetime
153
- * is bounded by the lifetime of this edit builder.
154
- */
155
- sequenceField(field: NormalizedFieldUpPath): SequenceFieldEditBuilder<TContent>;
156
-
148
+ export interface DataEditor<TContent, TDetachedRoot, TDetachedRoots> {
157
149
  /**
158
150
  * Moves a subsequence from one sequence field to another sequence field.
159
151
  *
@@ -189,19 +181,71 @@ export interface IDefaultEditBuilder<TContent = TreeChunk> {
189
181
  * Add a constraint that, for the revert of this change to apply, the document must be in the same state immediately before the revert is applied as it was after this change was applied.
190
182
  */
191
183
  addNoChangeConstraintOnRevert(): void;
184
+
185
+ /**
186
+ * Builds the detached roots for the given content.
187
+ * @param content - The content to be built into detached nodes.
188
+ *
189
+ * Requires SharedTreeFormatVersion.vDetachedRoots or later.
190
+ */
191
+ buildRoots(content: TContent): TDetachedRoots;
192
+
193
+ /**
194
+ * @param field - the value field which is being edited under the parent node
195
+ * @returns An object with methods to edit the given field of the given parent.
196
+ * The returned object can be used (i.e., have its methods called) multiple times but its lifetime
197
+ * is bounded by the lifetime of this edit builder.
198
+ */
199
+ valueField(field: NormalizedFieldUpPath): RequiredFieldEditor<TContent, TDetachedRoot>;
200
+
201
+ /**
202
+ * @param field - the optional field which is being edited under the parent node
203
+ * @returns An object with methods to edit the given field of the given parent.
204
+ * The returned object can be used (i.e., have its methods called) multiple times but its lifetime
205
+ * is bounded by the lifetime of this edit builder.
206
+ */
207
+ optionalField(field: NormalizedFieldUpPath): OptionalFieldEditor<TContent, TDetachedRoot>;
208
+
209
+ /**
210
+ * @param field - the sequence field which is being edited under the parent node
211
+ *
212
+ * @returns An object with methods to edit the given field of the given parent.
213
+ * The returned object can be used (i.e., have its methods called) multiple times but its lifetime
214
+ * is bounded by the lifetime of this edit builder.
215
+ */
216
+ sequenceField(field: NormalizedFieldUpPath): SequenceFieldEditor<TContent, TDetachedRoots>;
217
+ }
218
+
219
+ export type IdBasedChangeFamilyDataEditor = ChangeFamilyEditor &
220
+ DataEditor<TreeChunk, ChangeAtomId, DetachedRootIds>;
221
+
222
+ export function offsetChangesetLocalId(
223
+ id: ChangesetLocalId,
224
+ offset: number,
225
+ ): ChangesetLocalId {
226
+ return brand(id + offset);
227
+ }
228
+
229
+ export function subtractChangesetLocalId(a: ChangesetLocalId, b: ChangesetLocalId): number {
230
+ return a - b;
192
231
  }
193
232
 
194
233
  /**
195
- * Implementation of {@link IDefaultEditBuilder} based on the default set of supported field kinds.
234
+ * Implementation of {@link IdBasedChangeFamilyDataEditor} based on the default set of supported field kinds.
196
235
  * @sealed
197
236
  */
198
- export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuilder {
237
+ export class DefaultIdBasedDataEditor implements IdBasedChangeFamilyDataEditor {
199
238
  private readonly modularBuilder: ModularEditBuilder;
239
+ private readonly nodesWithoutCells: RangeMap<ChangesetLocalId, true> = new RangeMap(
240
+ offsetChangesetLocalId,
241
+ subtractChangesetLocalId,
242
+ );
200
243
 
201
244
  public constructor(
202
245
  family: ChangeFamily<ChangeFamilyEditor, DefaultChangeset>,
203
246
  private readonly mintRevisionTag: () => RevisionTag,
204
247
  changeReceiver: (change: TaggedChange<DefaultChangeset>) => void,
248
+ private readonly options: EditorOptions = { canMakeDetachedRootEdits: false },
205
249
  codecOptions: CodecWriteOptions,
206
250
  ) {
207
251
  this.modularBuilder = new ModularEditBuilder(
@@ -213,17 +257,31 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
213
257
  }
214
258
 
215
259
  public enterTransaction(): void {
260
+ if (this.modularBuilder.isInTransaction() === false) {
261
+ this.nodesWithoutCells.clear();
262
+ }
216
263
  this.modularBuilder.enterTransaction();
217
264
  }
218
265
  public exitTransaction(): void {
219
266
  this.modularBuilder.exitTransaction();
267
+ if (this.modularBuilder.isInTransaction() === false) {
268
+ this.nodesWithoutCells.clear();
269
+ }
220
270
  }
221
271
 
222
- public addNodeExistsConstraint(path: UpPath): void {
272
+ public addNodeExistsConstraint(path: NormalizedUpPath): void {
273
+ enforceEditsToDetachedTreesOptions(
274
+ { parent: path.parent, field: path.parentField },
275
+ this.options,
276
+ );
223
277
  this.modularBuilder.addNodeExistsConstraint(path, this.mintRevisionTag());
224
278
  }
225
279
 
226
- public addNodeExistsConstraintOnRevert(path: UpPath): void {
280
+ public addNodeExistsConstraintOnRevert(path: NormalizedUpPath): void {
281
+ enforceEditsToDetachedTreesOptions(
282
+ { parent: path.parent, field: path.parentField },
283
+ this.options,
284
+ );
227
285
  this.modularBuilder.addNodeExistsConstraintOnRevert(path, this.mintRevisionTag());
228
286
  }
229
287
 
@@ -235,61 +293,138 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
235
293
  this.modularBuilder.addNoChangeConstraintOnRevert(this.mintRevisionTag());
236
294
  }
237
295
 
238
- public valueField(field: FieldUpPath): ValueFieldEditBuilder<TreeChunk> {
296
+ public buildRoots(content: TreeChunk): DetachedRootIds {
297
+ const detachedRoots = [];
298
+ const count = content.topLevelLength;
299
+ if (count > 0) {
300
+ const buildRevision = this.mintRevisionTag();
301
+ const buildId = {
302
+ localId: this.modularBuilder.generateId(count),
303
+ revision: buildRevision,
304
+ };
305
+ const build = this.modularBuilder.buildTrees(buildId.localId, content, buildRevision);
306
+ this.modularBuilder.submitChanges([build], buildRevision);
307
+ detachedRoots.push({ first: buildId, count });
308
+ this.nodesWithoutCells.set(buildId.localId, count, true);
309
+ }
310
+ return detachedRoots;
311
+ }
312
+
313
+ public valueField(
314
+ field: NormalizedFieldUpPath,
315
+ ): RequiredFieldEditor<TreeChunk, ChangeAtomId> {
316
+ enforceEditsToDetachedTreesOptions(field, this.options);
317
+ const makeAttachEditDescription = (
318
+ fill: ChangeAtomId,
319
+ revision: RevisionTag,
320
+ ): FieldEditDescription => {
321
+ const detachLocalId = this.modularBuilder.generateId();
322
+ const detach = { localId: detachLocalId, revision };
323
+ const change = valueFieldKind.changeHandler.editor.set({ fill, detach });
324
+ return {
325
+ type: "field",
326
+ field,
327
+ fieldKind: valueFieldKind.identifier,
328
+ change: brand(change),
329
+ revision,
330
+ };
331
+ };
239
332
  return {
240
333
  set: (newContent: TreeChunk): void => {
241
- assert(
242
- newContent.topLevelLength === 1,
243
- 0xc12 /* Value fields should have a single top level node */,
244
- );
334
+ assert(newContent.topLevelLength === 1, "Expected exactly one node");
245
335
  const revision = this.mintRevisionTag();
246
- const fill: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
247
- const detach: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
248
- const build = this.modularBuilder.buildTrees(fill.localId, newContent, revision);
249
- const change: FieldChangeset = brand(
250
- valueFieldKind.changeHandler.editor.set({
251
- fill,
252
- detach,
253
- }),
254
- );
336
+ const buildLocalId = this.modularBuilder.generateId();
337
+ const buildId = { localId: buildLocalId, revision };
338
+ const build = this.modularBuilder.buildTrees(buildLocalId, newContent, revision);
339
+ const attach = makeAttachEditDescription(buildId, revision);
340
+ this.modularBuilder.submitChanges([build, attach], revision);
341
+ },
255
342
 
256
- const edit: FieldEditDescription = {
257
- type: "field",
258
- field,
259
- fieldKind: valueFieldKind.identifier,
260
- change,
261
- revision,
262
- };
263
- this.modularBuilder.submitChanges([build, edit], revision);
343
+ attach: (newContent: ChangeAtomId): void => {
344
+ const isWithoutCell = this.nodesWithoutCells.delete(newContent.localId, 1) === 1;
345
+ if (!isWithoutCell) {
346
+ throw new UsageError(
347
+ "A hydrated node that has been attached before cannot be attached into an object's required field. Assign new content to the field instead.",
348
+ );
349
+ }
350
+ const revision = this.mintRevisionTag();
351
+ const attach = makeAttachEditDescription(newContent, revision);
352
+ this.modularBuilder.submitChanges([attach], revision);
264
353
  },
265
354
  };
266
355
  }
267
356
 
268
- public optionalField(field: FieldUpPath): OptionalFieldEditBuilder<TreeChunk> {
269
- return {
357
+ public optionalField(
358
+ field: NormalizedFieldUpPath,
359
+ ): OptionalFieldEditor<TreeChunk, ChangeAtomId> {
360
+ enforceEditsToDetachedTreesOptions(field, this.options);
361
+ const makeAttachEditDescription = (
362
+ fill: ChangeAtomId,
363
+ revision: RevisionTag,
364
+ wasEmpty: boolean,
365
+ ): FieldEditDescription => {
366
+ const detachLocalId = this.modularBuilder.generateId();
367
+ const detach = { localId: detachLocalId, revision };
368
+ const change = optional.changeHandler.editor.set(wasEmpty, { fill, detach });
369
+ return {
370
+ type: "field",
371
+ field,
372
+ fieldKind: optional.identifier,
373
+ change: brand(change),
374
+ revision,
375
+ };
376
+ };
377
+ const editBuilder = {
270
378
  set: (newContent: TreeChunk | undefined, wasEmpty: boolean): void => {
271
- // The choice to ban empty chunks here instead of treating them as a clear is a subjective choice made to err of the side of more explicitness and stricter validation.
272
- assert(
273
- newContent === undefined || newContent.topLevelLength === 1,
274
- 0xc13 /* optional fields should have a single top level node, or undefined */,
275
- );
276
- const edits: EditDescription[] = [];
277
- let optionalChange: OptionalChangeset;
278
- const revision = this.mintRevisionTag();
279
- const detach: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
280
379
  if (newContent === undefined) {
281
- optionalChange = optional.changeHandler.editor.clear(wasEmpty, detach);
380
+ editBuilder.clear(wasEmpty);
381
+ return;
382
+ }
383
+ assert(newContent.topLevelLength === 1, "Expected exactly one node");
384
+ const revision = this.mintRevisionTag();
385
+ const buildLocalId = this.modularBuilder.generateId();
386
+ const buildId = { localId: buildLocalId, revision };
387
+ const build = this.modularBuilder.buildTrees(buildLocalId, newContent, revision);
388
+ const attach = makeAttachEditDescription(buildId, revision, wasEmpty);
389
+ this.modularBuilder.submitChanges([build, attach], revision);
390
+ },
391
+ attach: (content: ChangeAtomId | undefined, wasEmpty: boolean): void => {
392
+ if (content === undefined) {
393
+ editBuilder.clear(wasEmpty);
394
+ return;
395
+ }
396
+ const isWithoutCell = this.nodesWithoutCells.delete(content.localId, 1) === 1;
397
+ if (!isWithoutCell && this.options.canMakeDetachedRootEdits !== true) {
398
+ throw new UsageError(
399
+ `Attach edits require a minimum version for collaboration >= TBD.`,
400
+ );
401
+ }
402
+ const revision = this.mintRevisionTag();
403
+ const edits: EditDescription[] = [];
404
+ let stableSrcId: ChangeAtomId;
405
+ if (isWithoutCell) {
406
+ stableSrcId = content;
282
407
  } else {
283
- const fill: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
284
- const build = this.modularBuilder.buildTrees(fill.localId, newContent, revision);
285
- edits.push(build);
286
-
287
- optionalChange = optional.changeHandler.editor.set(wasEmpty, {
288
- fill,
289
- detach,
290
- });
408
+ // If the node has an associated cell, then it may be concurrently moved to another location.
409
+ // We use a rename to ensure that the node will be moved to a specific grave before the attach.
410
+ stableSrcId = { localId: this.modularBuilder.generateId(), revision };
411
+ const rename: GlobalEditDescription = {
412
+ type: "global",
413
+ revision,
414
+ renames: [
415
+ { count: 1, oldId: content, newId: stableSrcId, detachLocation: undefined },
416
+ ],
417
+ };
418
+ edits.push(rename);
291
419
  }
292
-
420
+ const attach = makeAttachEditDescription(stableSrcId, revision, wasEmpty);
421
+ edits.push(attach);
422
+ this.modularBuilder.submitChanges(edits, revision);
423
+ },
424
+ clear: (wasEmpty: boolean): void => {
425
+ const revision = this.mintRevisionTag();
426
+ const detach: ChangeAtomId = { localId: this.modularBuilder.generateId(), revision };
427
+ const optionalChange = optional.changeHandler.editor.clear(wasEmpty, detach);
293
428
  const change: FieldChangeset = brand(optionalChange);
294
429
  const edit: FieldEditDescription = {
295
430
  type: "field",
@@ -298,18 +433,17 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
298
433
  change,
299
434
  revision,
300
435
  };
301
- edits.push(edit);
302
-
303
- this.modularBuilder.submitChanges(edits, revision);
436
+ this.modularBuilder.submitChanges([edit], revision);
304
437
  },
305
438
  };
439
+ return editBuilder;
306
440
  }
307
441
 
308
442
  public move(
309
- sourceField: FieldUpPath,
443
+ sourceField: NormalizedFieldUpPath,
310
444
  sourceIndex: number,
311
445
  count: number,
312
- destinationField: FieldUpPath,
446
+ destinationField: NormalizedFieldUpPath,
313
447
  destIndex: number,
314
448
  ): void {
315
449
  if (count === 0) {
@@ -317,6 +451,8 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
317
451
  } else if (count < 0 || !Number.isSafeInteger(count)) {
318
452
  throw new UsageError(`Expected non-negative integer count, got ${count}.`);
319
453
  }
454
+ enforceEditsToDetachedTreesOptions(sourceField, this.options);
455
+ enforceEditsToDetachedTreesOptions(destinationField, this.options);
320
456
  const revision = this.mintRevisionTag();
321
457
  const detachCellId = this.modularBuilder.generateId(count);
322
458
  const attachCellId: CellId = { localId: this.modularBuilder.generateId(count), revision };
@@ -340,13 +476,13 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
340
476
  const attachPath = topDownPath(destinationField.parent);
341
477
  const sharedDepth = getSharedPrefixLength(detachPath, attachPath);
342
478
  let adjustedAttachField = destinationField;
343
- // After the above loop, `sharedDepth` is the number of elements, starting from the root,
344
- // that both paths have in common.
479
+ // `sharedDepth` is the number of elements, starting from the root, that both paths have in common.
345
480
  if (sharedDepth === detachPath.length) {
346
- const attachField = attachPath[sharedDepth]?.parentField ?? destinationField.field;
481
+ const lowestCommonAncestor: NormalizedUpPath | undefined = attachPath[sharedDepth];
482
+ const attachField = lowestCommonAncestor?.parentField ?? destinationField.field;
347
483
  if (attachField === sourceField.field) {
348
484
  // The detach occurs in an ancestor field of the field where the attach occurs.
349
- let attachAncestorIndex = attachPath[sharedDepth]?.parentIndex ?? sourceIndex;
485
+ const attachAncestorIndex = lowestCommonAncestor?.parentIndex ?? destIndex;
350
486
  if (attachAncestorIndex < sourceIndex) {
351
487
  // The attach path runs through a node located before the detached nodes.
352
488
  // No need to adjust the attach path.
@@ -354,14 +490,19 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
354
490
  // The attach path runs through a node located after the detached nodes.
355
491
  // adjust the index for the node at that depth of the path, so that it is interpreted correctly
356
492
  // in the composition performed by `submitChanges`.
357
- attachAncestorIndex -= count;
358
- let parent: UpPath | undefined = attachPath[sharedDepth - 1];
359
- const parentField = attachPath[sharedDepth] ?? oob();
360
- parent = {
361
- parent,
362
- parentIndex: attachAncestorIndex,
363
- parentField: parentField.parentField,
364
- };
493
+ const adjustedAttachAncestorIndex = attachAncestorIndex - count;
494
+ let parent: NormalizedUpPath =
495
+ lowestCommonAncestor === undefined
496
+ ? {
497
+ parent: undefined,
498
+ detachedNodeId: undefined,
499
+ parentIndex: adjustedAttachAncestorIndex,
500
+ parentField: destinationField.field,
501
+ }
502
+ : {
503
+ ...lowestCommonAncestor,
504
+ parentIndex: adjustedAttachAncestorIndex,
505
+ };
365
506
  for (let i = sharedDepth + 1; i < attachPath.length; i += 1) {
366
507
  parent = {
367
508
  ...(attachPath[i] ?? oob()),
@@ -376,19 +517,20 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
376
517
  }
377
518
  }
378
519
  }
379
- const moveOut = sequence.changeHandler.editor.moveOut(
520
+ const moveOut = sequence.changeHandler.editor.remove(
380
521
  sourceIndex,
381
522
  count,
382
523
  detachCellId,
383
524
  revision,
384
525
  );
385
- const moveIn = sequence.changeHandler.editor.moveIn(
526
+ const moveIn = sequence.changeHandler.editor.insert(
386
527
  destIndex,
387
528
  count,
388
- detachCellId,
389
529
  attachCellId,
390
530
  revision,
531
+ detachCellId,
391
532
  );
533
+
392
534
  this.modularBuilder.submitChanges(
393
535
  [
394
536
  {
@@ -411,30 +553,114 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
411
553
  }
412
554
  }
413
555
 
414
- public sequenceField(field: FieldUpPath): SequenceFieldEditBuilder<TreeChunk> {
415
- return {
556
+ public sequenceField(
557
+ field: NormalizedFieldUpPath,
558
+ ): SequenceFieldEditor<TreeChunk, DetachedRootIds> {
559
+ enforceEditsToDetachedTreesOptions(field, this.options);
560
+ const makeAttachEditDescription = (
561
+ index: number,
562
+ { first, count }: DetachedRootIdRange,
563
+ revision: RevisionTag,
564
+ areWithoutCells: boolean,
565
+ ): EditDescription[] => {
566
+ const edits: EditDescription[] = [];
567
+ // If the nodes have never been attached in cell, then we must use a cell ID that matches the build ID.
568
+ // This ensures back-compatibility with the v1 ModularChangeFamily model which requires that every node be associated with cell
569
+ // by generating an insert whose destination cell is the cell associated with the build ID.
570
+ let stableSrcId: ChangeAtomId;
571
+ if (areWithoutCells) {
572
+ stableSrcId = first;
573
+ } else {
574
+ // If the node has an associated cell, then it may be concurrently moved to another location.
575
+ // We use a rename to ensure that the node will be moved to a specific grave before the attach.
576
+ stableSrcId = { localId: this.modularBuilder.generateId(count), revision };
577
+ const rename: GlobalEditDescription = {
578
+ type: "global",
579
+ revision,
580
+ renames: [
581
+ {
582
+ count,
583
+ oldId: first,
584
+ newId: stableSrcId,
585
+ detachLocation: undefined,
586
+ },
587
+ ],
588
+ };
589
+ edits.push(rename);
590
+ }
591
+ assert(stableSrcId.revision !== undefined, "Detached nodes ID must have a revision");
592
+ const change = sequence.changeHandler.editor.insert(
593
+ index,
594
+ count,
595
+ stableSrcId,
596
+ stableSrcId.revision,
597
+ stableSrcId.localId,
598
+ );
599
+ const attach: FieldEditDescription = {
600
+ type: "field",
601
+ field,
602
+ fieldKind: sequence.identifier,
603
+ change: brand(change),
604
+ revision,
605
+ };
606
+ edits.push(attach);
607
+ return edits;
608
+ };
609
+ const editBuilder = {
416
610
  insert: (index: number, content: TreeChunk): void => {
417
- const length = content.topLevelLength;
418
- if (length === 0) {
611
+ const count = content.topLevelLength;
612
+ if (count === 0) {
419
613
  return;
420
614
  }
421
-
422
615
  const revision = this.mintRevisionTag();
423
- const firstId: CellId = { localId: this.modularBuilder.generateId(length), revision };
424
- const build = this.modularBuilder.buildTrees(firstId.localId, content, revision);
425
- const change: FieldChangeset = brand(
426
- sequence.changeHandler.editor.insert(index, length, firstId, revision),
427
- );
428
- const attach: FieldEditDescription = {
429
- type: "field",
430
- field,
431
- fieldKind: sequence.identifier,
432
- change,
433
- revision,
616
+ const buildLocalId = this.modularBuilder.generateId();
617
+ const build = this.modularBuilder.buildTrees(buildLocalId, content, revision);
618
+ const roots: DetachedRootIdRange = {
619
+ first: { localId: buildLocalId, revision },
620
+ count,
434
621
  };
435
- // The changes have to be submitted together, otherwise they will be assigned different revisions,
436
- // which will prevent the build ID and the insert ID from matching.
437
- this.modularBuilder.submitChanges([build, attach], revision);
622
+
623
+ const attach = makeAttachEditDescription(index, roots, revision, true);
624
+ this.modularBuilder.submitChanges([build, ...attach], revision);
625
+ },
626
+ attach: (index: number, newContent: DetachedRootIds): void => {
627
+ const attachRevision = this.mintRevisionTag();
628
+ let areAllWithoutCells = true;
629
+ let insertOffset = 0;
630
+ const edits: EditDescription[] = [];
631
+ for (const range of newContent) {
632
+ if (range.count === 0) {
633
+ continue;
634
+ }
635
+ const countWithoutCells = this.nodesWithoutCells.delete(
636
+ range.first.localId,
637
+ range.count,
638
+ );
639
+ assert(
640
+ countWithoutCells === 0 || countWithoutCells === range.count,
641
+ "All detached roots within the same ID range must either all have or all not have a cell",
642
+ );
643
+ const areWithoutCells = countWithoutCells === range.count;
644
+ if (!areWithoutCells) {
645
+ areAllWithoutCells = false;
646
+ }
647
+ const renameAndAttach = makeAttachEditDescription(
648
+ index + insertOffset,
649
+ range,
650
+ attachRevision,
651
+ areWithoutCells,
652
+ );
653
+ edits.push(...renameAndAttach);
654
+ insertOffset += range.count;
655
+ }
656
+ if (!areAllWithoutCells && this.options.canMakeDetachedRootEdits !== true) {
657
+ throw new UsageError(
658
+ `Attach edits require a minimum version for collaboration >= TBD.`,
659
+ );
660
+ }
661
+ if (edits.length > 0) {
662
+ this.modularBuilder.submitChanges(edits, attachRevision);
663
+ }
438
664
  },
439
665
  remove: (index: number, count: number): void => {
440
666
  if (count === 0) {
@@ -448,34 +674,80 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
448
674
  this.modularBuilder.submitChange(field, sequence.identifier, change, revision);
449
675
  },
450
676
  };
677
+ return editBuilder;
451
678
  }
452
679
  }
453
680
 
454
- export interface ValueFieldEditBuilder<TContent> {
681
+ function enforceEditsToDetachedTreesOptions(field: FieldUpPath, options: EditorOptions): void {
682
+ if (options.canMakeDetachedRootEdits !== true) {
683
+ const topField = getDetachedFieldContainingFieldPath(field);
684
+ if (topField !== rootField) {
685
+ throw new UsageError(
686
+ `Edits and constraints on detached trees require a minimum version for collaboration >= TBD.`,
687
+ );
688
+ }
689
+ }
690
+ }
691
+
692
+ export interface RequiredFieldEditor<TContent, TDetachedRoot> {
693
+ /**
694
+ * Issues a change which replaces the content of the field with the given detached node.
695
+ * @param content - The content to be attached in the field in the given order.
696
+ * Must represent a single detached node.
697
+ * Must have been created in the same JS turn.
698
+ *
699
+ * Requires SharedTreeFormatVersion.vDetachedRoots or later.
700
+ */
701
+ attach(content: TDetachedRoot): void;
702
+
455
703
  /**
456
- * Issues a change which replaces the current newContent of the field with `newContent`.
704
+ * Issues a change which replaces the content of the field with `newContent`.
457
705
  * @param newContent - the new content for the field.
458
706
  */
459
707
  set(newContent: TContent): void;
460
708
  }
461
709
 
462
- export interface OptionalFieldEditBuilder<TContent> {
710
+ export interface OptionalFieldEditor<TContent, TDetachedRoots> {
463
711
  /**
464
- * Issues a change which replaces the current newContent of the field with `newContent`.
712
+ * Issues a change which replaces the content of the field with the given detached node.
713
+ * @param content - The content to be attached in the field in the given order.
714
+ * Must represent a single detached node.
715
+ *
716
+ * Requires SharedTreeFormatVersion.vDetachedRoots or later.
717
+ */
718
+ attach(content: TDetachedRoots | undefined, wasEmpty: boolean): void;
719
+
720
+ /**
721
+ * Issues a change which clears content of the field.
722
+ * @param wasEmpty - whether the field is empty when creating this change
723
+ */
724
+ clear(wasEmpty: boolean): void;
725
+
726
+ /**
727
+ * Issues a change which replaces the content of the field with `newContent`
465
728
  * @param newContent - the new content for the field.
466
- * @param wasEmpty - whether the field is empty when creating this change.
729
+ * @param wasEmpty - whether the field is empty when creating this change
467
730
  */
468
731
  set(newContent: TContent | undefined, wasEmpty: boolean): void;
469
732
  }
470
733
 
471
734
  /**
472
- * Edit builder for the sequence field kind.
735
+ * Editor for the sequence field kind.
473
736
  */
474
- export interface SequenceFieldEditBuilder<TContent, TRemoved = void> {
737
+ export interface SequenceFieldEditor<TContent, TDetachedRoots, TRemoved = void> {
738
+ /**
739
+ * Issues a change which attaches a sequence of detached nodes at the given `index`.
740
+ * @param index - The index at which to attach the detached nodes.
741
+ * @param detachedContent - The content to be attached in the field in the given order. Each node must be detached.
742
+ *
743
+ * Requires SharedTreeFormatVersion.vDetachedRoots or later.
744
+ */
745
+ attach(index: number, detachedContent: TDetachedRoots): void;
746
+
475
747
  /**
476
748
  * Issues a change which inserts the `newContent` at the given `index`.
477
749
  * @param index - the index at which to insert the `newContent`.
478
- * @param newContent - the new content to be inserted in the field. Cursor can be in either Field or Node mode.
750
+ * @param newContent - the new content to be inserted in the field.
479
751
  */
480
752
  insert(index: number, newContent: TContent): void;
481
753