@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
@@ -11,16 +11,19 @@ import {
11
11
  type DiscriminatedUnionLibrary,
12
12
  type IJsonCodec,
13
13
  } from "../../codec/index.js";
14
- import type {
15
- ChangeEncodingContext,
16
- ChangesetLocalId,
17
- EncodedRevisionTag,
18
- RevisionTag,
14
+ import {
15
+ areEqualChangeAtomIds,
16
+ type ChangeAtomId,
17
+ type ChangeEncodingContext,
18
+ type ChangesetLocalId,
19
+ type EncodedRevisionTag,
20
+ type RevisionTag,
19
21
  } from "../../core/index.js";
20
22
  import { type JsonCompatibleReadOnly, type Mutable, brand } from "../../util/index.js";
21
23
  import { makeChangeAtomIdCodec } from "../changeAtomIdCodec.js";
22
24
  import {
23
25
  EncodedNodeChangeset,
26
+ type EncodedChangeAtomId,
24
27
  type FieldChangeEncodingContext,
25
28
  } from "../modular-schema/index.js";
26
29
 
@@ -28,19 +31,16 @@ import { Changeset as ChangesetSchema, type Encoded } from "./formatV2.js";
28
31
  import type { SequenceCodecHelpers } from "./helperTypes.js";
29
32
  import {
30
33
  type Attach,
31
- type AttachAndDetach,
34
+ type CellMark,
32
35
  type Changeset,
33
36
  type Detach,
34
- type Insert,
35
37
  type Mark,
36
38
  type MarkEffect,
37
- type MoveIn,
38
- type MoveOut,
39
39
  NoopMarkType,
40
- type Remove,
41
40
  type Rename,
42
41
  } from "./types.js";
43
- import { isNoopMark, normalizeCellRename } from "./utils.js";
42
+ import { getAttachedRootId, getDetachedRootId, isNoopMark, splitMark } from "./utils.js";
43
+ import { getFromChangeAtomIdMap, rangeQueryChangeAtomIdMap } from "../changeAtomIdBTree.js";
44
44
 
45
45
  export function makeV2CodecHelpers(
46
46
  revisionTagCodec: IJsonCodec<
@@ -49,108 +49,8 @@ export function makeV2CodecHelpers(
49
49
  EncodedRevisionTag,
50
50
  ChangeEncodingContext
51
51
  >,
52
- ): SequenceCodecHelpers<MarkEffect, Encoded.MarkEffect> {
52
+ ): SequenceCodecHelpers {
53
53
  const changeAtomIdCodec = makeChangeAtomIdCodec(revisionTagCodec);
54
- const markEffectCodec: IJsonCodec<
55
- MarkEffect,
56
- Encoded.MarkEffect,
57
- Encoded.MarkEffect,
58
- ChangeEncodingContext
59
- > = {
60
- encode(effect: MarkEffect, context: ChangeEncodingContext): Encoded.MarkEffect {
61
- function encodeRevision(
62
- revision: RevisionTag | undefined,
63
- ): EncodedRevisionTag | undefined {
64
- if (revision === undefined || revision === context.revision) {
65
- return undefined;
66
- }
67
-
68
- return revisionTagCodec.encode(revision, context);
69
- }
70
-
71
- const type = effect.type;
72
- switch (type) {
73
- case "MoveIn": {
74
- return {
75
- moveIn: {
76
- revision: encodeRevision(effect.revision),
77
- finalEndpoint:
78
- effect.finalEndpoint === undefined
79
- ? undefined
80
- : changeAtomIdCodec.encode(effect.finalEndpoint, context),
81
- id: effect.id,
82
- },
83
- };
84
- }
85
- case "Insert": {
86
- return {
87
- insert: {
88
- revision: encodeRevision(effect.revision),
89
- id: effect.id,
90
- },
91
- };
92
- }
93
- case "Remove": {
94
- return {
95
- remove: {
96
- revision: encodeRevision(effect.revision),
97
- idOverride:
98
- effect.idOverride === undefined
99
- ? undefined
100
- : changeAtomIdCodec.encode(effect.idOverride, context),
101
- id: effect.id,
102
- },
103
- };
104
- }
105
- case "MoveOut": {
106
- return {
107
- moveOut: {
108
- revision: encodeRevision(effect.revision),
109
- finalEndpoint:
110
- effect.finalEndpoint === undefined
111
- ? undefined
112
- : changeAtomIdCodec.encode(effect.finalEndpoint, context),
113
- idOverride:
114
- effect.idOverride === undefined
115
- ? undefined
116
- : changeAtomIdCodec.encode(effect.idOverride, context),
117
- id: effect.id,
118
- },
119
- };
120
- }
121
- case "AttachAndDetach": {
122
- return {
123
- attachAndDetach: {
124
- attach: markEffectCodec.encode(effect.attach, context) as Encoded.Attach,
125
- detach: markEffectCodec.encode(effect.detach, context) as Encoded.Detach,
126
- },
127
- };
128
- }
129
- case "Rename": {
130
- // In documents generated by clients on release >=2.2 (i.e., running the code from the PR that added this comment),
131
- // renames are encoded as AttachAndDetach with a special id.
132
- // This ensures forward-compatibility of clients on release <=2.1 with documents/ops generated by clients on release >=2.2.
133
- return markEffectCodec.encode(
134
- {
135
- type: "AttachAndDetach",
136
- attach: { type: "MoveIn", id: renameLocalId },
137
- detach: { type: "MoveOut", id: renameLocalId, idOverride: effect.idOverride },
138
- },
139
- context,
140
- );
141
- }
142
- case NoopMarkType: {
143
- fail(0xb2c /* Mark type: NoopMarkType should not be encoded. */);
144
- }
145
- default: {
146
- unreachableCase(type);
147
- }
148
- }
149
- },
150
- decode(encoded: Encoded.MarkEffect, context: ChangeEncodingContext): MarkEffect {
151
- return decoderDispatcher.dispatch(encoded, context);
152
- },
153
- };
154
54
 
155
55
  function decodeRevision(
156
56
  encodedRevision: EncodedRevisionTag | undefined,
@@ -164,102 +64,312 @@ export function makeV2CodecHelpers(
164
64
  return revisionTagCodec.decode(encodedRevision, context);
165
65
  }
166
66
 
167
- const decoderLibrary: DiscriminatedUnionLibrary<
67
+ const decoderLibrary = makeMarkEffectDecoder(changeAtomIdCodec, decodeRevision);
68
+
69
+ const decoderDispatcher = new DiscriminatedUnionDispatcher<
168
70
  Encoded.MarkEffect,
169
- /* args */ [context: ChangeEncodingContext],
71
+ /* args */ [
72
+ count: number,
73
+ cellId: ChangeAtomId | undefined,
74
+ context: FieldChangeEncodingContext,
75
+ ],
170
76
  MarkEffect
171
- > = {
172
- moveIn(encoded: Encoded.MoveIn, context: ChangeEncodingContext): MoveIn {
173
- const { id, finalEndpoint, revision } = encoded;
174
- const mark: MoveIn = {
175
- type: "MoveIn",
176
- id,
177
- };
77
+ >(decoderLibrary);
178
78
 
179
- mark.revision = decodeRevision(revision, context);
180
- if (finalEndpoint !== undefined) {
181
- mark.finalEndpoint = changeAtomIdCodec.decode(finalEndpoint, context);
79
+ return {
80
+ changeAtomIdCodec,
81
+ decoderLibrary,
82
+
83
+ encodeMarkEffect(mark: Mark, context: FieldChangeEncodingContext): Encoded.MarkEffect {
84
+ return encodeMarkEffectV2(
85
+ mark,
86
+ context,
87
+ (revision) =>
88
+ encodeRevisionWithContext(revision, context.baseContext, revisionTagCodec),
89
+ changeAtomIdCodec,
90
+ );
91
+ },
92
+
93
+ decodeRevision: (
94
+ encoded: EncodedRevisionTag | undefined,
95
+ context: ChangeEncodingContext,
96
+ ): RevisionTag =>
97
+ encoded === undefined
98
+ ? (context.revision ?? fail("Expected a default revision"))
99
+ : revisionTagCodec.decode(encoded, context),
100
+
101
+ decodeMarkEffect: (
102
+ encoded: Encoded.MarkEffect,
103
+ count: number,
104
+ cellId: ChangeAtomId | undefined,
105
+ context: FieldChangeEncodingContext,
106
+ ): MarkEffect => {
107
+ return decoderDispatcher.dispatch(encoded, count, cellId, context);
108
+ },
109
+ };
110
+ }
111
+
112
+ export type DecodeMarkEffect = (
113
+ encoded: Encoded.MarkEffect,
114
+ count: number,
115
+ cellId: ChangeAtomId | undefined,
116
+ context: FieldChangeEncodingContext,
117
+ ) => MarkEffect;
118
+
119
+ export function decodeSequenceChangeset(
120
+ changeset: Encoded.Changeset<NodeChangeSchema>,
121
+ context: FieldChangeEncodingContext,
122
+ changeAtomIdCodec: IJsonCodec<
123
+ ChangeAtomId,
124
+ EncodedChangeAtomId,
125
+ EncodedChangeAtomId,
126
+ ChangeEncodingContext
127
+ >,
128
+ decodeMarkEffect: DecodeMarkEffect,
129
+ ): Changeset {
130
+ const marks: Changeset = [];
131
+ for (const mark of changeset) {
132
+ const decodedMark: Mark = {
133
+ count: mark.count,
134
+ };
135
+
136
+ if (mark.cellId !== undefined) {
137
+ decodedMark.cellId = changeAtomIdCodec.decode(mark.cellId, context.baseContext);
138
+ }
139
+
140
+ if (mark.effect !== undefined) {
141
+ Object.assign(
142
+ decodedMark,
143
+ decodeMarkEffect(mark.effect, mark.count, decodedMark.cellId, context),
144
+ );
145
+ }
146
+
147
+ if (mark.changes !== undefined) {
148
+ if (decodedMark.cellId === undefined) {
149
+ decodedMark.changes = context.decodeNode(mark.changes);
150
+ } else {
151
+ context.decodeRootNodeChange(decodedMark.cellId, mark.changes);
182
152
  }
183
- return mark;
153
+ }
154
+
155
+ marks.push(decodedMark);
156
+ }
157
+ return marks;
158
+ }
159
+
160
+ function makeMarkEffectDecoder(
161
+ changeAtomIdCodec: IJsonCodec<
162
+ ChangeAtomId,
163
+ EncodedChangeAtomId,
164
+ EncodedChangeAtomId,
165
+ ChangeEncodingContext
166
+ >,
167
+ decodeRevision: (
168
+ revision: EncodedRevisionTag | undefined,
169
+ context: ChangeEncodingContext,
170
+ ) => RevisionTag,
171
+ ): DiscriminatedUnionLibrary<
172
+ Encoded.MarkEffect,
173
+ /* args */ [
174
+ count: number,
175
+ cellId: ChangeAtomId | undefined,
176
+ context: FieldChangeEncodingContext,
177
+ ],
178
+ MarkEffect
179
+ > {
180
+ function decodeMoveIn(encoded: Encoded.MoveIn, context: FieldChangeEncodingContext): Attach {
181
+ const { id, revision } = encoded;
182
+ const endpoint =
183
+ encoded.finalEndpoint === undefined
184
+ ? undefined
185
+ : changeAtomIdCodec.decode(encoded.finalEndpoint, context.baseContext);
186
+
187
+ const mark: Attach = {
188
+ type: "Insert",
189
+ id: endpoint?.localId ?? id,
190
+ revision: endpoint?.revision ?? decodeRevision(revision, context.baseContext),
191
+ };
192
+
193
+ return mark;
194
+ }
195
+
196
+ const decoderLibrary: DiscriminatedUnionLibrary<
197
+ Encoded.MarkEffect,
198
+ /* args */ [
199
+ count: number,
200
+ cellId: ChangeAtomId | undefined,
201
+ context: FieldChangeEncodingContext,
202
+ ],
203
+ MarkEffect
204
+ > = {
205
+ moveIn(
206
+ encoded: Encoded.MoveIn,
207
+ count: number,
208
+ cellId: ChangeAtomId | undefined,
209
+ context: FieldChangeEncodingContext,
210
+ ): Attach {
211
+ return decodeMoveIn(encoded, context);
184
212
  },
185
- insert(encoded: Encoded.Insert, context: ChangeEncodingContext): Insert {
213
+ insert(
214
+ encoded: Encoded.Insert,
215
+ count: number,
216
+ cellId: ChangeAtomId | undefined,
217
+ context: FieldChangeEncodingContext,
218
+ ): Attach {
186
219
  const { id, revision } = encoded;
187
- const mark: Insert = {
220
+ const mark: Attach = {
188
221
  type: "Insert",
189
222
  id,
190
223
  };
191
224
 
192
- mark.revision = decodeRevision(revision, context);
193
- return mark;
194
- },
195
- remove(encoded: Encoded.Remove, context: ChangeEncodingContext): Remove {
196
- const { id, revision, idOverride } = encoded;
197
- const mark: Mutable<Remove> = {
198
- type: "Remove",
199
- id,
200
- };
225
+ mark.revision = decodeRevision(revision, context.baseContext);
201
226
 
202
- mark.revision = decodeRevision(revision, context);
203
- if (idOverride !== undefined) {
204
- mark.idOverride = changeAtomIdCodec.decode(idOverride, context);
227
+ const attachId = getAttachedRootId(mark);
228
+ if (cellId !== undefined && !areEqualChangeAtomIds(cellId, attachId)) {
229
+ context.decodeRootRename(cellId, attachId, count);
205
230
  }
231
+
206
232
  return mark;
207
233
  },
208
- moveOut(encoded: Encoded.MoveOut, context: ChangeEncodingContext): MoveOut {
209
- const { id, finalEndpoint, idOverride, revision } = encoded;
210
- const mark: Mutable<MoveOut> = {
211
- type: "MoveOut",
234
+ remove(
235
+ encoded: Encoded.Remove,
236
+ count: number,
237
+ cellId: ChangeAtomId | undefined,
238
+ context: FieldChangeEncodingContext,
239
+ ): Detach | Rename {
240
+ const { id, revision, idOverride } = encoded;
241
+
242
+ const cellRename =
243
+ idOverride === undefined
244
+ ? undefined
245
+ : changeAtomIdCodec.decode(idOverride, context.baseContext);
246
+
247
+ return decodeDetach(
248
+ cellId,
249
+ count,
250
+ decodeRevision(revision, context.baseContext),
212
251
  id,
213
- };
252
+ cellRename,
253
+ undefined,
254
+ context,
255
+ );
256
+ },
257
+ moveOut(
258
+ encoded: Encoded.MoveOut,
259
+ count: number,
260
+ cellId: ChangeAtomId | undefined,
261
+ context: FieldChangeEncodingContext,
262
+ ): Detach | Rename {
263
+ const { id, idOverride, revision, finalEndpoint } = encoded;
264
+ const cellRename =
265
+ idOverride === undefined
266
+ ? undefined
267
+ : changeAtomIdCodec.decode(idOverride, context.baseContext);
214
268
 
215
- mark.revision = decodeRevision(revision, context);
269
+ const decodedRevision = decodeRevision(revision, context.baseContext);
216
270
  if (finalEndpoint !== undefined) {
217
- mark.finalEndpoint = changeAtomIdCodec.decode(finalEndpoint, context);
218
- }
219
- if (idOverride !== undefined) {
220
- mark.idOverride = changeAtomIdCodec.decode(idOverride, context);
271
+ const decodedEndpoint = changeAtomIdCodec.decode(finalEndpoint, context.baseContext);
272
+ return decodeDetach(
273
+ cellId,
274
+ count,
275
+ decodedEndpoint.revision ?? fail("Revision should be defined"),
276
+ decodedEndpoint.localId,
277
+ cellRename,
278
+ { revision: decodedRevision, localId: id },
279
+ context,
280
+ );
221
281
  }
222
282
 
223
- return mark;
283
+ return decodeDetach(cellId, count, decodedRevision, id, cellRename, undefined, context);
224
284
  },
225
285
  attachAndDetach(
226
286
  encoded: Encoded.AttachAndDetach,
227
- context: ChangeEncodingContext,
228
- ): AttachAndDetach | Rename {
229
- const attach = decoderDispatcher.dispatch(encoded.attach, context) as Attach;
230
- const detach = decoderDispatcher.dispatch(encoded.detach, context) as Detach;
287
+ count: number,
288
+ cellId: ChangeAtomId | undefined,
289
+ context: FieldChangeEncodingContext,
290
+ ): Rename {
231
291
  // In documents generated by clients on release >=2.2 (i.e., running the code from the PR that added this comment),
232
292
  // renames are encoded as AttachAndDetach with a special id.
233
293
  // This ensures forward-compatibility of clients on release <=2.1 with documents/ops generated by clients on release >=2.2.
234
- if (attach.id === renameLocalId) {
235
- assert(detach.idOverride !== undefined, 0x9f8 /* Rename must have idOverride */);
294
+ const encodedRenameId = tryGetEncodedCellRenameFromAttachAndDetach(encoded);
295
+ if (encodedRenameId !== undefined) {
236
296
  return {
237
297
  type: "Rename",
238
- idOverride: detach.idOverride,
298
+ idOverride: changeAtomIdCodec.decode(encodedRenameId, context.baseContext),
239
299
  };
240
300
  }
301
+
302
+ assert(
303
+ encoded.detach.remove !== undefined,
304
+ "Attach and detach should always contains a remove",
305
+ );
306
+
307
+ const detachId: ChangeAtomId =
308
+ encoded.detach.remove.idOverride === undefined
309
+ ? {
310
+ revision: decodeRevision(encoded.detach.remove.revision, context.baseContext),
311
+ localId: encoded.detach.remove.id,
312
+ }
313
+ : changeAtomIdCodec.decode(encoded.detach.remove.idOverride, context.baseContext);
314
+
315
+ assert(cellId !== undefined, "Attach and detach should target an empty cell");
316
+ if (encoded.attach.moveIn === undefined) {
317
+ context.decodeRootRename(cellId, detachId, count);
318
+ } else {
319
+ context.decodeMoveAndDetach(detachId, count);
320
+ }
321
+
241
322
  return {
242
- type: "AttachAndDetach",
243
- attach,
244
- detach,
323
+ type: "Rename",
324
+ idOverride: detachId,
245
325
  };
246
326
  },
247
327
  };
248
328
 
249
- const decoderDispatcher = new DiscriminatedUnionDispatcher<
250
- Encoded.MarkEffect,
251
- /* args */ [context: ChangeEncodingContext],
252
- MarkEffect
253
- >(decoderLibrary);
329
+ return decoderLibrary;
330
+ }
254
331
 
255
- return {
256
- changeAtomIdCodec,
257
- markEffectCodec,
258
- decoderLibrary,
259
- decodeRevision,
332
+ function decodeDetach(
333
+ cellId: ChangeAtomId | undefined,
334
+ count: number,
335
+ revision: RevisionTag,
336
+ localId: ChangesetLocalId,
337
+ cellRename: ChangeAtomId | undefined,
338
+ detachCellId: ChangeAtomId | undefined,
339
+ context: FieldChangeEncodingContext,
340
+ ): Detach | Rename {
341
+ const detachId: ChangeAtomId = { revision, localId };
342
+ if (cellId !== undefined) {
343
+ context.decodeRootRename(cellId, detachId, count);
344
+ return {
345
+ type: "Rename",
346
+ idOverride: cellRename ?? detachId,
347
+ };
348
+ }
349
+
350
+ const mark: Mutable<Detach> = {
351
+ type: "Remove",
352
+ revision,
353
+ id: localId,
260
354
  };
355
+
356
+ if (cellRename !== undefined) {
357
+ mark.cellRename = cellRename;
358
+ }
359
+
360
+ if (detachCellId !== undefined) {
361
+ mark.detachCellId = detachCellId;
362
+ }
363
+
364
+ return mark;
261
365
  }
262
366
 
367
+ /**
368
+ * If we want to make the node change aspect of this codec more type-safe, we could adjust generics
369
+ * to be in terms of the schema rather than the concrete type of the node change.
370
+ */
371
+ type NodeChangeSchema = TAnySchema;
372
+
263
373
  export function makeV2Codec(
264
374
  revisionTagCodec: IJsonCodec<
265
375
  RevisionTag,
@@ -273,78 +383,388 @@ export function makeV2Codec(
273
383
  JsonCompatibleReadOnly,
274
384
  FieldChangeEncodingContext
275
385
  > {
276
- const { markEffectCodec, changeAtomIdCodec } = makeV2CodecHelpers(revisionTagCodec);
277
- /**
278
- * If we want to make the node change aspect of this codec more type-safe, we could adjust generics
279
- * to be in terms of the schema rather than the concrete type of the node change.
280
- */
281
- type NodeChangeSchema = TAnySchema;
386
+ const { decodeMarkEffect, changeAtomIdCodec } = makeV2CodecHelpers(revisionTagCodec);
282
387
 
283
388
  return {
284
389
  encode: (
285
390
  changeset: Changeset,
286
391
  context: FieldChangeEncodingContext,
287
- ): JsonCompatibleReadOnly & Encoded.Changeset<NodeChangeSchema> => {
288
- const jsonMarks: Encoded.Changeset<NodeChangeSchema> = [];
289
- for (const mark of changeset) {
290
- const encodedMark: Encoded.Mark<NodeChangeSchema> = {
291
- count: mark.count,
292
- };
293
- if (!isNoopMark(mark)) {
294
- encodedMark.effect = markEffectCodec.encode(mark, context.baseContext);
295
- }
296
- if (mark.cellId !== undefined) {
297
- encodedMark.cellId = changeAtomIdCodec.encode(mark.cellId, context.baseContext);
298
- }
299
- if (mark.changes !== undefined) {
300
- encodedMark.changes = context.encodeNode(mark.changes);
301
- }
302
- jsonMarks.push(encodedMark);
303
- }
304
- return jsonMarks;
305
- },
392
+ ): JsonCompatibleReadOnly & Encoded.Changeset<NodeChangeSchema> =>
393
+ encodeSequenceChangeset(
394
+ changeset,
395
+ context,
396
+ (revision) =>
397
+ encodeRevisionWithContext(revision, context.baseContext, revisionTagCodec),
398
+ changeAtomIdCodec,
399
+ encodeMarkEffectV2,
400
+ ),
306
401
  decode: (
307
402
  changeset: Encoded.Changeset<NodeChangeSchema>,
308
403
  context: FieldChangeEncodingContext,
309
- ): Changeset => {
310
- const marks: Changeset = [];
311
- for (const mark of changeset) {
312
- const decodedMark: Mark = {
313
- count: mark.count,
314
- };
404
+ ): Changeset =>
405
+ decodeSequenceChangeset(changeset, context, changeAtomIdCodec, decodeMarkEffect),
406
+ encodedSchema: ChangesetSchema(EncodedNodeChangeset),
407
+ };
408
+ }
315
409
 
316
- if (mark.effect !== undefined) {
317
- Object.assign(decodedMark, markEffectCodec.decode(mark.effect, context.baseContext));
318
- }
319
- if (mark.cellId !== undefined) {
320
- decodedMark.cellId = changeAtomIdCodec.decode(mark.cellId, context.baseContext);
321
- }
322
- // Type deduction wrongly narrows the type of `decodedMark` to `NoopMark & HasMarkFields`.
323
- // We declare a new casted copy of `decodedMark` to recover the correct type.
324
- let decodedMark2 = decodedMark as Mark;
325
- if (decodedMark2.cellId !== undefined && decodedMark2.type === "AttachAndDetach") {
326
- // In documents generated by clients on release <=2.1 (i.e., not running the code from the PR that added this comment),
327
- // rename-like AttachAndDetach marks are not normalized to Rename marks thus requiring this normalization step.
328
- // This ensures backward compatibility with documents generated by clients on release <=2.1.
329
- decodedMark2 = normalizeCellRename(
330
- decodedMark2.cellId,
331
- decodedMark2.count,
332
- decodedMark2.attach,
333
- decodedMark2.detach,
334
- );
335
- }
336
- if (mark.changes !== undefined) {
337
- decodedMark2.changes = context.decodeNode(mark.changes);
338
- }
339
- marks.push(decodedMark2);
340
- }
341
- return marks;
410
+ export function encodeSequenceChangeset(
411
+ changeset: Changeset,
412
+ context: FieldChangeEncodingContext,
413
+ encodeRevision: (revision: RevisionTag | undefined) => EncodedRevisionTag | undefined,
414
+ changeAtomIdCodec: IJsonCodec<
415
+ ChangeAtomId,
416
+ EncodedChangeAtomId,
417
+ EncodedChangeAtomId,
418
+ ChangeEncodingContext
419
+ >,
420
+ encodeMarkEffect: EncodeMarkEffect,
421
+ ): JsonCompatibleReadOnly & Encoded.Changeset<NodeChangeSchema> {
422
+ const jsonMarks: Encoded.Changeset<NodeChangeSchema> = [];
423
+ for (const mark of changeset) {
424
+ jsonMarks.push(
425
+ ...encodeMark(mark, context, encodeRevision, changeAtomIdCodec, encodeMarkEffect),
426
+ );
427
+ }
428
+ return jsonMarks;
429
+ }
430
+
431
+ function encodeMark(
432
+ mark: Mark,
433
+ context: FieldChangeEncodingContext,
434
+ encodeRevision: (revision: RevisionTag | undefined) => EncodedRevisionTag | undefined,
435
+ changeAtomIdCodec: IJsonCodec<
436
+ ChangeAtomId,
437
+ EncodedChangeAtomId,
438
+ EncodedChangeAtomId,
439
+ ChangeEncodingContext
440
+ >,
441
+ encodeMarkEffect: EncodeMarkEffect,
442
+ ): Encoded.Mark<TAnySchema>[] {
443
+ const splitLength = getLengthToSplitMark(mark, context);
444
+ if (splitLength < mark.count) {
445
+ const [mark1, mark2] = splitMark(mark, splitLength);
446
+ return [
447
+ encodeSplitMark(mark1, context, encodeRevision, changeAtomIdCodec, encodeMarkEffect),
448
+ ...encodeMark(mark2, context, encodeRevision, changeAtomIdCodec, encodeMarkEffect),
449
+ ];
450
+ }
451
+
452
+ return [encodeSplitMark(mark, context, encodeRevision, changeAtomIdCodec, encodeMarkEffect)];
453
+ }
454
+
455
+ function encodeRename(
456
+ mark: CellMark<Rename>,
457
+ context: FieldChangeEncodingContext,
458
+ changeAtomIdCodec: IJsonCodec<
459
+ ChangeAtomId,
460
+ EncodedChangeAtomId,
461
+ EncodedChangeAtomId,
462
+ ChangeEncodingContext
463
+ >,
464
+ encodeRevision: (revision: RevisionTag | undefined) => EncodedRevisionTag | undefined,
465
+ ): Encoded.MarkEffect {
466
+ assert(mark.cellId !== undefined, "Rename should target empty cell");
467
+
468
+ const inputDetachId = context.getInputRootId(mark.idOverride, mark.count).value;
469
+ const isMoveInAndDetach =
470
+ !context.isAttachId(mark.idOverride, mark.count).value &&
471
+ (context.isDetachId(mark.idOverride, mark.count).value ||
472
+ (inputDetachId !== undefined && !areEqualChangeAtomIds(inputDetachId, mark.cellId)));
473
+
474
+ if (isMoveInAndDetach) {
475
+ // These cells are the final detach location of moved nodes.
476
+ const encodedRevision = encodeRevision(mark.idOverride.revision);
477
+
478
+ // XXX: Use finalEndpoint if there is an associated cellDetachId.
479
+ return {
480
+ attachAndDetach: {
481
+ attach: {
482
+ moveIn: {
483
+ revision: encodedRevision,
484
+ id: mark.idOverride.localId,
485
+ },
486
+ },
487
+ detach: {
488
+ remove: {
489
+ revision: encodedRevision,
490
+ id: mark.idOverride.localId,
491
+ },
492
+ },
493
+ },
494
+ };
495
+ }
496
+
497
+ const renamedRootId = context.rootRenames.getFirst(mark.cellId, mark.count).value;
498
+
499
+ const outputRootId = renamedRootId ?? mark.cellId;
500
+ const isMoveOutAndAttach = context.isAttachId(outputRootId, mark.count).value;
501
+ const isMoveOutAndDetach =
502
+ renamedRootId !== undefined && !areEqualChangeAtomIds(renamedRootId, mark.idOverride);
503
+
504
+ if (isMoveOutAndAttach || isMoveOutAndDetach) {
505
+ // Detached nodes which were last at this cell location have been moved.
506
+ // XXX: mark.idOverride represents detachCellId, so we should represent it using the moveOut's ID and use outputRootId as the finalDetachId.
507
+ // Is that always true?
508
+ return {
509
+ moveOut: {
510
+ revision: encodeRevision(outputRootId.revision),
511
+ id: outputRootId.localId,
512
+ idOverride: changeAtomIdCodec.encode(mark.idOverride, context.baseContext),
513
+ },
514
+ };
515
+ }
516
+
517
+ if (renamedRootId !== undefined) {
518
+ return {
519
+ remove: {
520
+ revision: encodeRevision(outputRootId.revision),
521
+ id: outputRootId.localId,
522
+ },
523
+ };
524
+ }
525
+
526
+ // In documents generated by clients on release >=2.2 (i.e., running the code from the PR that added this comment),
527
+ // renames are encoded as AttachAndDetach with a special id.
528
+ // This ensures forward-compatibility of clients on release <=2.1 with documents/ops generated by clients on release >=2.2.
529
+ return {
530
+ attachAndDetach: {
531
+ attach: { insert: { id: renameLocalId } },
532
+ detach: {
533
+ remove: {
534
+ id: renameLocalId,
535
+ idOverride: changeAtomIdCodec.encode(mark.idOverride, context.baseContext),
536
+ },
537
+ },
342
538
  },
343
- encodedSchema: ChangesetSchema(EncodedNodeChangeset),
344
539
  };
345
540
  }
346
541
 
542
+ function getLengthToSplitMark(mark: Mark, context: FieldChangeEncodingContext): number {
543
+ let count: number =
544
+ mark.cellId === undefined
545
+ ? mark.count
546
+ : rangeQueryChangeAtomIdMap(context.rootNodeChanges, mark.cellId, mark.count).length;
547
+
548
+ if (mark.cellId !== undefined) {
549
+ count = context.getInputRootId(mark.cellId, count).length;
550
+ }
551
+
552
+ switch (mark.type) {
553
+ case "Insert": {
554
+ count = context.isDetachId(getAttachedRootId(mark), count).length;
555
+ break;
556
+ }
557
+ case "Remove": {
558
+ count = context.isAttachId(getDetachedRootId(mark), count).length;
559
+ break;
560
+ }
561
+ case "Rename": {
562
+ count = context.getInputRootId(mark.idOverride, count).length;
563
+ count = context.isAttachId(mark.idOverride, count).length;
564
+ count = context.isDetachId(mark.idOverride, count).length;
565
+ const cellId = mark.cellId ?? fail("Rename should have cell ID");
566
+ const renameEntry = context.rootRenames.getFirst(cellId, count);
567
+ count = renameEntry.length;
568
+ count = context.isAttachId(renameEntry.value ?? cellId, count).length;
569
+ break;
570
+ }
571
+ default: {
572
+ break;
573
+ }
574
+ }
575
+
576
+ return count;
577
+ }
578
+
579
+ function encodeSplitMark(
580
+ mark: Mark,
581
+ context: FieldChangeEncodingContext,
582
+ encodeRevision: (revision: RevisionTag | undefined) => EncodedRevisionTag | undefined,
583
+ changeAtomIdCodec: IJsonCodec<
584
+ ChangeAtomId,
585
+ EncodedChangeAtomId,
586
+ EncodedChangeAtomId,
587
+ ChangeEncodingContext
588
+ >,
589
+ encodeMarkEffect: EncodeMarkEffect,
590
+ ): Encoded.Mark<TAnySchema> {
591
+ const encodedMark: Encoded.Mark<TAnySchema> = {
592
+ count: mark.count,
593
+ };
594
+ if (!isNoopMark(mark)) {
595
+ encodedMark.effect = encodeMarkEffect(mark, context, encodeRevision, changeAtomIdCodec);
596
+ }
597
+ if (mark.cellId !== undefined) {
598
+ assert(mark.changes === undefined, "Empty cells should not have node changes");
599
+ encodedMark.cellId = changeAtomIdCodec.encode(mark.cellId, context.baseContext);
600
+ const nodeId = getFromChangeAtomIdMap(context.rootNodeChanges, mark.cellId);
601
+ if (nodeId !== undefined) {
602
+ encodedMark.changes = context.encodeNode(nodeId);
603
+ }
604
+ } else if (mark.changes !== undefined) {
605
+ encodedMark.changes = context.encodeNode(mark.changes);
606
+ }
607
+
608
+ return encodedMark;
609
+ }
610
+
611
+ type EncodeMarkEffect = (
612
+ mark: Mark,
613
+ context: FieldChangeEncodingContext,
614
+ encodeRevision: (revision: RevisionTag | undefined) => EncodedRevisionTag | undefined,
615
+ changeAtomIdCodec: IJsonCodec<
616
+ ChangeAtomId,
617
+ EncodedChangeAtomId,
618
+ EncodedChangeAtomId,
619
+ ChangeEncodingContext
620
+ >,
621
+ ) => Encoded.MarkEffect;
622
+
623
+ function encodeMarkEffectV2(
624
+ mark: Mark,
625
+ context: FieldChangeEncodingContext,
626
+ encodeRevision: (revision: RevisionTag | undefined) => EncodedRevisionTag | undefined,
627
+ changeAtomIdCodec: IJsonCodec<
628
+ ChangeAtomId,
629
+ EncodedChangeAtomId,
630
+ EncodedChangeAtomId,
631
+ ChangeEncodingContext
632
+ >,
633
+ ): Encoded.MarkEffect {
634
+ const type = mark.type;
635
+ switch (type) {
636
+ case "Insert": {
637
+ const attachId = getAttachedRootId(mark);
638
+ const isMove = context.isDetachId(attachId, 1).value;
639
+
640
+ // If the input context ID for these nodes is not the cell ID,
641
+ // then these nodes are being moved from the location at which they were last detached.
642
+ const inputId = context.getInputRootId(attachId, mark.count).value ?? attachId;
643
+ const isInitialAttachLocation =
644
+ mark.cellId === undefined || areEqualChangeAtomIds(mark.cellId, inputId);
645
+
646
+ return isMove || !isInitialAttachLocation
647
+ ? {
648
+ moveIn: { revision: encodeRevision(mark.revision), id: mark.id },
649
+ }
650
+ : {
651
+ insert: {
652
+ revision: encodeRevision(mark.revision),
653
+ id: mark.id,
654
+ },
655
+ };
656
+ }
657
+ case "Remove": {
658
+ const encodedIdOverride =
659
+ mark.cellRename === undefined
660
+ ? undefined
661
+ : changeAtomIdCodec.encode(mark.cellRename, context.baseContext);
662
+
663
+ const detachId = getDetachedRootId(mark);
664
+ const isMove = context.isAttachId(detachId, 1).value;
665
+
666
+ const outputCellId = mark.cellRename ?? mark.detachCellId ?? detachId;
667
+
668
+ // If the final detach location for the nodes were here,
669
+ // then the output cell ID would be the same as the detach ID.
670
+ // So if the cell ID is different from the detach ID, the nodes must have been moved.
671
+ const isFinalDetachLocation = areEqualChangeAtomIds(detachId, outputCellId);
672
+
673
+ const isMoveOrDetachedMove = isMove || !isFinalDetachLocation;
674
+ if (mark.detachCellId !== undefined) {
675
+ assert(
676
+ isMoveOrDetachedMove,
677
+ "Only detaches representing a move out should specify a detach cell ID",
678
+ );
679
+
680
+ // XXX: Set final endpoint on the move in.
681
+ return {
682
+ moveOut: {
683
+ revision: encodeRevision(mark.detachCellId.revision),
684
+ id: mark.detachCellId.localId,
685
+ idOverride: encodedIdOverride,
686
+ finalEndpoint: changeAtomIdCodec.encode(
687
+ { revision: mark.revision, localId: mark.id },
688
+ context.baseContext,
689
+ ),
690
+ },
691
+ };
692
+ }
693
+
694
+ const encodedRevision = encodeRevision(mark.revision);
695
+ return isMoveOrDetachedMove
696
+ ? {
697
+ moveOut: {
698
+ revision: encodedRevision,
699
+ id: mark.id,
700
+ idOverride: encodedIdOverride,
701
+ },
702
+ }
703
+ : {
704
+ remove: {
705
+ revision: encodedRevision,
706
+ idOverride: encodedIdOverride,
707
+ id: mark.id,
708
+ },
709
+ };
710
+ }
711
+ case "Rename": {
712
+ return encodeRename(mark, context, changeAtomIdCodec, encodeRevision);
713
+ }
714
+ case NoopMarkType: {
715
+ fail(0xb2c /* Mark type: NoopMarkType should not be encoded. */);
716
+ }
717
+ default: {
718
+ unreachableCase(type);
719
+ }
720
+ }
721
+ }
722
+
723
+ export function encodeRevisionWithContext(
724
+ revision: RevisionTag | undefined,
725
+ context: ChangeEncodingContext,
726
+ revisionTagCodec: IJsonCodec<
727
+ RevisionTag,
728
+ EncodedRevisionTag,
729
+ EncodedRevisionTag,
730
+ ChangeEncodingContext
731
+ >,
732
+ ): EncodedRevisionTag | undefined {
733
+ return revision === undefined || revision === context.revision
734
+ ? undefined
735
+ : revisionTagCodec.encode(revision, context);
736
+ }
737
+
347
738
  /**
348
739
  * Arbitrary ID that is used to indicate a Rename effect.
349
740
  */
350
741
  const renameLocalId: ChangesetLocalId = brand(-1);
742
+
743
+ /**
744
+ * If the encoded mark effect represents a simple cell rename (with no effect on root nodes),
745
+ * returns the encoded form of the ID the cell is being renamed to,
746
+ * and otherwise returns undefined.
747
+ */
748
+ export function tryGetEncodedCellRename(
749
+ encoded: Encoded.MarkEffect,
750
+ ): EncodedChangeAtomId | undefined {
751
+ const attachAndDetach = encoded.attachAndDetach;
752
+ if (attachAndDetach === undefined) {
753
+ return undefined;
754
+ }
755
+ }
756
+
757
+ function tryGetEncodedCellRenameFromAttachAndDetach(
758
+ encoded: Encoded.AttachAndDetach,
759
+ ): EncodedChangeAtomId | undefined {
760
+ // In documents generated by clients on release >=2.2 (i.e., running the code from the PR that added this comment),
761
+ // renames are encoded as AttachAndDetach with a special id.
762
+ // This ensures forward-compatibility of clients on release <=2.1 with documents/ops generated by clients on release >=2.2.
763
+ if (encoded.attach.insert?.id === renameLocalId) {
764
+ assert(
765
+ encoded.detach.remove?.idOverride !== undefined,
766
+ 0x9f8 /* Rename must have idOverride */,
767
+ );
768
+ return encoded.detach.remove.idOverride;
769
+ }
770
+ }