@fluidframework/tree 2.113.1 → 2.115.0

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 (660) hide show
  1. package/CHANGELOG.md +289 -0
  2. package/api-report/tree.alpha.api.md +127 -39
  3. package/dist/core/change-family/changeFamily.d.ts +15 -4
  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/editBuilder.d.ts +2 -3
  7. package/dist/core/change-family/editBuilder.d.ts.map +1 -1
  8. package/dist/core/change-family/editBuilder.js +1 -2
  9. package/dist/core/change-family/editBuilder.js.map +1 -1
  10. package/dist/core/change-family/index.d.ts +1 -1
  11. package/dist/core/change-family/index.d.ts.map +1 -1
  12. package/dist/core/change-family/index.js.map +1 -1
  13. package/dist/core/index.d.ts +4 -3
  14. package/dist/core/index.d.ts.map +1 -1
  15. package/dist/core/index.js +3 -2
  16. package/dist/core/index.js.map +1 -1
  17. package/dist/core/rebase/index.d.ts +1 -1
  18. package/dist/core/rebase/index.d.ts.map +1 -1
  19. package/dist/core/rebase/index.js +2 -1
  20. package/dist/core/rebase/index.js.map +1 -1
  21. package/dist/core/rebase/types.d.ts +110 -0
  22. package/dist/core/rebase/types.d.ts.map +1 -1
  23. package/dist/core/rebase/types.js +47 -1
  24. package/dist/core/rebase/types.js.map +1 -1
  25. package/dist/core/tree/delta.d.ts +62 -16
  26. package/dist/core/tree/delta.d.ts.map +1 -1
  27. package/dist/core/tree/delta.js.map +1 -1
  28. package/dist/core/tree/detachedFieldIndex.d.ts +7 -13
  29. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  30. package/dist/core/tree/detachedFieldIndex.js +32 -46
  31. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  32. package/dist/core/tree/index.d.ts +1 -0
  33. package/dist/core/tree/index.d.ts.map +1 -1
  34. package/dist/core/tree/index.js.map +1 -1
  35. package/dist/core/tree/visitorUtils.d.ts +2 -4
  36. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  37. package/dist/core/tree/visitorUtils.js +2 -2
  38. package/dist/core/tree/visitorUtils.js.map +1 -1
  39. package/dist/entrypoints/alpha.d.ts +1 -1
  40. package/dist/entrypoints/alpha.d.ts.map +1 -1
  41. package/dist/entrypoints/alpha.js +8 -3
  42. package/dist/entrypoints/alpha.js.map +1 -1
  43. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -6
  44. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  45. package/dist/feature-libraries/chunked-forest/codec/codecs.js +16 -13
  46. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  47. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  48. package/dist/feature-libraries/chunked-forest/uniformChunk.js +10 -2
  49. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  50. package/dist/feature-libraries/comparison-forest/comparisonForest.d.ts +51 -0
  51. package/dist/feature-libraries/comparison-forest/comparisonForest.d.ts.map +1 -0
  52. package/dist/feature-libraries/comparison-forest/comparisonForest.js +98 -0
  53. package/dist/feature-libraries/comparison-forest/comparisonForest.js.map +1 -0
  54. package/dist/feature-libraries/comparison-forest/index.d.ts +6 -0
  55. package/dist/feature-libraries/comparison-forest/index.d.ts.map +1 -0
  56. package/dist/feature-libraries/comparison-forest/index.js +10 -0
  57. package/dist/feature-libraries/comparison-forest/index.js.map +1 -0
  58. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +8 -6
  59. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  60. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +6 -3
  61. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  62. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  63. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  64. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  65. package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts +2 -2
  66. package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
  67. package/dist/feature-libraries/default-schema/noChangeCodecs.js +3 -1
  68. package/dist/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
  69. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts +6 -3
  70. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  71. package/dist/feature-libraries/detachedFieldIndexSummarizer.js +18 -6
  72. package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  73. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -3
  74. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  75. package/dist/feature-libraries/forest-summary/forestSummarizer.js +2 -3
  76. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  77. package/dist/feature-libraries/index.d.ts +4 -3
  78. package/dist/feature-libraries/index.d.ts.map +1 -1
  79. package/dist/feature-libraries/index.js +77 -72
  80. package/dist/feature-libraries/index.js.map +1 -1
  81. package/dist/feature-libraries/mitigatedChangeFamily.d.ts +1 -1
  82. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  83. package/dist/feature-libraries/mitigatedChangeFamily.js +12 -0
  84. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  85. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -1
  86. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  87. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  88. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +2 -2
  89. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
  90. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  91. package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
  92. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  93. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  94. package/dist/feature-libraries/modular-schema/invert.d.ts +15 -0
  95. package/dist/feature-libraries/modular-schema/invert.d.ts.map +1 -0
  96. package/dist/feature-libraries/modular-schema/invert.js +159 -0
  97. package/dist/feature-libraries/modular-schema/invert.js.map +1 -0
  98. package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts +3 -4
  99. package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -1
  100. package/dist/feature-libraries/modular-schema/minimizeModularChange.js +2 -2
  101. package/dist/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -1
  102. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +9 -9
  103. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  104. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +0 -2
  105. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  106. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +2 -2
  107. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  108. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  109. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  110. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  111. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  112. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -22
  113. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  114. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +53 -406
  115. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  116. package/dist/feature-libraries/modular-schema/modularChangeUtils.d.ts +61 -0
  117. package/dist/feature-libraries/modular-schema/modularChangeUtils.d.ts.map +1 -0
  118. package/dist/feature-libraries/modular-schema/modularChangeUtils.js +205 -0
  119. package/dist/feature-libraries/modular-schema/modularChangeUtils.js.map +1 -0
  120. package/dist/feature-libraries/modular-schema/prune.d.ts +10 -0
  121. package/dist/feature-libraries/modular-schema/prune.d.ts.map +1 -0
  122. package/dist/feature-libraries/modular-schema/prune.js +49 -0
  123. package/dist/feature-libraries/modular-schema/prune.js.map +1 -0
  124. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +2 -2
  125. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  126. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  127. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts +2 -2
  128. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  129. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  130. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +2 -2
  131. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  132. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  133. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +2 -2
  134. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  135. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  136. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +2 -2
  137. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  138. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  139. package/dist/feature-libraries/treeTextCursor.d.ts +15 -0
  140. package/dist/feature-libraries/treeTextCursor.d.ts.map +1 -1
  141. package/dist/feature-libraries/treeTextCursor.js +64 -1
  142. package/dist/feature-libraries/treeTextCursor.js.map +1 -1
  143. package/dist/index.d.ts +6 -4
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +10 -5
  146. package/dist/index.js.map +1 -1
  147. package/dist/packageVersion.d.ts +1 -1
  148. package/dist/packageVersion.js +1 -1
  149. package/dist/packageVersion.js.map +1 -1
  150. package/dist/shared-tree/serializedChange.d.ts +2 -2
  151. package/dist/shared-tree/serializedChange.d.ts.map +1 -1
  152. package/dist/shared-tree/serializedChange.js.map +1 -1
  153. package/dist/shared-tree/sharedTree.d.ts +11 -3
  154. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  155. package/dist/shared-tree/sharedTree.js +9 -7
  156. package/dist/shared-tree/sharedTree.js.map +1 -1
  157. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +2 -2
  158. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  159. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  160. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +41 -4
  161. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  162. package/dist/shared-tree/sharedTreeChangeFamily.js +57 -1
  163. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  164. package/dist/shared-tree/transactionMinimize.d.ts.map +1 -1
  165. package/dist/shared-tree/transactionMinimize.js +2 -2
  166. package/dist/shared-tree/transactionMinimize.js.map +1 -1
  167. package/dist/shared-tree/transactionPostProcessor.d.ts +2 -1
  168. package/dist/shared-tree/transactionPostProcessor.d.ts.map +1 -1
  169. package/dist/shared-tree/transactionPostProcessor.js.map +1 -1
  170. package/dist/shared-tree/treeCheckout.d.ts +13 -7
  171. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  172. package/dist/shared-tree/treeCheckout.js +59 -13
  173. package/dist/shared-tree/treeCheckout.js.map +1 -1
  174. package/dist/shared-tree-core/branch.d.ts +24 -9
  175. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  176. package/dist/shared-tree-core/branch.js +7 -0
  177. package/dist/shared-tree-core/branch.js.map +1 -1
  178. package/dist/shared-tree-core/editManager.d.ts +4 -4
  179. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  180. package/dist/shared-tree-core/editManager.js +2 -0
  181. package/dist/shared-tree-core/editManager.js.map +1 -1
  182. package/dist/shared-tree-core/editManagerCodecs.d.ts +3 -14
  183. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  184. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  185. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +11 -1
  186. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  187. package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  188. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts +4 -11
  189. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  190. package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  191. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +4 -11
  192. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  193. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  194. package/dist/shared-tree-core/editManagerSummarizer.d.ts +4 -4
  195. package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  196. package/dist/shared-tree-core/editManagerSummarizer.js +0 -1
  197. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  198. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  199. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  200. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  201. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  202. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  203. package/dist/shared-tree-core/messageCodecs.d.ts +8 -1
  204. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  205. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  206. package/dist/shared-tree-core/sharedTreeCore.d.ts +5 -5
  207. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  208. package/dist/shared-tree-core/sharedTreeCore.js +1 -1
  209. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  210. package/dist/shared-tree-core/transaction.d.ts +10 -10
  211. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  212. package/dist/shared-tree-core/transaction.js +6 -3
  213. package/dist/shared-tree-core/transaction.js.map +1 -1
  214. package/dist/simple-tree/api/eraseSchemaDetails.d.ts +15 -0
  215. package/dist/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
  216. package/dist/simple-tree/api/eraseSchemaDetails.js +15 -0
  217. package/dist/simple-tree/api/eraseSchemaDetails.js.map +1 -1
  218. package/dist/simple-tree/api/index.d.ts +1 -1
  219. package/dist/simple-tree/api/index.d.ts.map +1 -1
  220. package/dist/simple-tree/api/index.js +2 -3
  221. package/dist/simple-tree/api/index.js.map +1 -1
  222. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +3 -3
  223. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  224. package/dist/simple-tree/api/schemaStatics.d.ts +6 -7
  225. package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
  226. package/dist/simple-tree/api/schemaStatics.js.map +1 -1
  227. package/dist/simple-tree/api/treeNodeApi.d.ts +20 -24
  228. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  229. package/dist/simple-tree/api/treeNodeApi.js +48 -49
  230. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  231. package/dist/simple-tree/core/treeNode.d.ts +5 -6
  232. package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
  233. package/dist/simple-tree/core/treeNode.js +2 -4
  234. package/dist/simple-tree/core/treeNode.js.map +1 -1
  235. package/dist/simple-tree/core/withType.d.ts +20 -7
  236. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  237. package/dist/simple-tree/core/withType.js +4 -7
  238. package/dist/simple-tree/core/withType.js.map +1 -1
  239. package/dist/simple-tree/index.d.ts +2 -2
  240. package/dist/simple-tree/index.d.ts.map +1 -1
  241. package/dist/simple-tree/index.js +3 -4
  242. package/dist/simple-tree/index.js.map +1 -1
  243. package/dist/simple-tree/leafNodeSchema.d.ts +6 -1
  244. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  245. package/dist/simple-tree/leafNodeSchema.js +0 -1
  246. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  247. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +53 -5
  248. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  249. package/dist/simple-tree/node-kinds/array/arrayNode.js +91 -10
  250. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  251. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +90 -0
  252. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  253. package/dist/simple-tree/node-kinds/map/mapNode.js +26 -1
  254. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  255. package/dist/simple-tree/node-kinds/object/objectNode.js +2 -2
  256. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  257. package/dist/simple-tree/node-kinds/record/recordNode.js +2 -2
  258. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  259. package/dist/text/codePointUtils.d.ts +2 -2
  260. package/dist/text/codePointUtils.js +2 -2
  261. package/dist/text/codePointUtils.js.map +1 -1
  262. package/dist/text/index.d.ts +3 -3
  263. package/dist/text/index.d.ts.map +1 -1
  264. package/dist/text/index.js +4 -4
  265. package/dist/text/index.js.map +1 -1
  266. package/dist/text/textDomain.d.ts +30 -18
  267. package/dist/text/textDomain.d.ts.map +1 -1
  268. package/dist/text/textDomain.js +44 -23
  269. package/dist/text/textDomain.js.map +1 -1
  270. package/dist/text/textDomainFormatted.d.ts +180 -82
  271. package/dist/text/textDomainFormatted.d.ts.map +1 -1
  272. package/dist/text/textDomainFormatted.js +164 -84
  273. package/dist/text/textDomainFormatted.js.map +1 -1
  274. package/dist/text/textDomainFormattedDefault.d.ts +48 -25
  275. package/dist/text/textDomainFormattedDefault.d.ts.map +1 -1
  276. package/dist/text/textDomainFormattedDefault.js +24 -19
  277. package/dist/text/textDomainFormattedDefault.js.map +1 -1
  278. package/dist/treeDataStore.d.ts +49 -0
  279. package/dist/treeDataStore.d.ts.map +1 -0
  280. package/dist/treeDataStore.js +57 -0
  281. package/dist/treeDataStore.js.map +1 -0
  282. package/dist/treeFactory.d.ts +8 -3
  283. package/dist/treeFactory.d.ts.map +1 -1
  284. package/dist/treeFactory.js +6 -1
  285. package/dist/treeFactory.js.map +1 -1
  286. package/dist/util/compressedIds.d.ts +22 -2
  287. package/dist/util/compressedIds.d.ts.map +1 -1
  288. package/dist/util/compressedIds.js +22 -1
  289. package/dist/util/compressedIds.js.map +1 -1
  290. package/lib/core/change-family/changeFamily.d.ts +15 -4
  291. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  292. package/lib/core/change-family/changeFamily.js.map +1 -1
  293. package/lib/core/change-family/editBuilder.d.ts +2 -3
  294. package/lib/core/change-family/editBuilder.d.ts.map +1 -1
  295. package/lib/core/change-family/editBuilder.js +1 -2
  296. package/lib/core/change-family/editBuilder.js.map +1 -1
  297. package/lib/core/change-family/index.d.ts +1 -1
  298. package/lib/core/change-family/index.d.ts.map +1 -1
  299. package/lib/core/change-family/index.js.map +1 -1
  300. package/lib/core/index.d.ts +4 -3
  301. package/lib/core/index.d.ts.map +1 -1
  302. package/lib/core/index.js +2 -2
  303. package/lib/core/index.js.map +1 -1
  304. package/lib/core/rebase/index.d.ts +1 -1
  305. package/lib/core/rebase/index.d.ts.map +1 -1
  306. package/lib/core/rebase/index.js +1 -1
  307. package/lib/core/rebase/index.js.map +1 -1
  308. package/lib/core/rebase/types.d.ts +110 -0
  309. package/lib/core/rebase/types.d.ts.map +1 -1
  310. package/lib/core/rebase/types.js +46 -0
  311. package/lib/core/rebase/types.js.map +1 -1
  312. package/lib/core/tree/delta.d.ts +62 -16
  313. package/lib/core/tree/delta.d.ts.map +1 -1
  314. package/lib/core/tree/delta.js.map +1 -1
  315. package/lib/core/tree/detachedFieldIndex.d.ts +7 -13
  316. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  317. package/lib/core/tree/detachedFieldIndex.js +7 -21
  318. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  319. package/lib/core/tree/index.d.ts +1 -0
  320. package/lib/core/tree/index.d.ts.map +1 -1
  321. package/lib/core/tree/index.js.map +1 -1
  322. package/lib/core/tree/visitorUtils.d.ts +2 -4
  323. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  324. package/lib/core/tree/visitorUtils.js +2 -2
  325. package/lib/core/tree/visitorUtils.js.map +1 -1
  326. package/lib/entrypoints/alpha.d.ts +1 -1
  327. package/lib/entrypoints/alpha.d.ts.map +1 -1
  328. package/lib/entrypoints/alpha.js +1 -1
  329. package/lib/entrypoints/alpha.js.map +1 -1
  330. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -6
  331. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  332. package/lib/feature-libraries/chunked-forest/codec/codecs.js +16 -13
  333. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  334. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  335. package/lib/feature-libraries/chunked-forest/uniformChunk.js +10 -2
  336. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  337. package/lib/feature-libraries/comparison-forest/comparisonForest.d.ts +51 -0
  338. package/lib/feature-libraries/comparison-forest/comparisonForest.d.ts.map +1 -0
  339. package/lib/feature-libraries/comparison-forest/comparisonForest.js +94 -0
  340. package/lib/feature-libraries/comparison-forest/comparisonForest.js.map +1 -0
  341. package/lib/feature-libraries/comparison-forest/index.d.ts +6 -0
  342. package/lib/feature-libraries/comparison-forest/index.d.ts.map +1 -0
  343. package/lib/feature-libraries/comparison-forest/index.js +6 -0
  344. package/lib/feature-libraries/comparison-forest/index.js.map +1 -0
  345. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +8 -6
  346. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  347. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +6 -3
  348. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  349. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  350. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  351. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  352. package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts +2 -2
  353. package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
  354. package/lib/feature-libraries/default-schema/noChangeCodecs.js +3 -1
  355. package/lib/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
  356. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts +6 -3
  357. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  358. package/lib/feature-libraries/detachedFieldIndexSummarizer.js +16 -4
  359. package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  360. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -3
  361. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  362. package/lib/feature-libraries/forest-summary/forestSummarizer.js +2 -3
  363. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  364. package/lib/feature-libraries/index.d.ts +4 -3
  365. package/lib/feature-libraries/index.d.ts.map +1 -1
  366. package/lib/feature-libraries/index.js +2 -1
  367. package/lib/feature-libraries/index.js.map +1 -1
  368. package/lib/feature-libraries/mitigatedChangeFamily.d.ts +1 -1
  369. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  370. package/lib/feature-libraries/mitigatedChangeFamily.js +12 -0
  371. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  372. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -1
  373. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  374. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  375. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +2 -2
  376. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
  377. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  378. package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
  379. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  380. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  381. package/lib/feature-libraries/modular-schema/invert.d.ts +15 -0
  382. package/lib/feature-libraries/modular-schema/invert.d.ts.map +1 -0
  383. package/lib/feature-libraries/modular-schema/invert.js +155 -0
  384. package/lib/feature-libraries/modular-schema/invert.js.map +1 -0
  385. package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts +3 -4
  386. package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -1
  387. package/lib/feature-libraries/modular-schema/minimizeModularChange.js +2 -2
  388. package/lib/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -1
  389. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +9 -9
  390. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  391. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +0 -2
  392. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  393. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +2 -2
  394. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  395. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  396. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  397. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  398. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  399. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -22
  400. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  401. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +16 -367
  402. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  403. package/lib/feature-libraries/modular-schema/modularChangeUtils.d.ts +61 -0
  404. package/lib/feature-libraries/modular-schema/modularChangeUtils.d.ts.map +1 -0
  405. package/lib/feature-libraries/modular-schema/modularChangeUtils.js +192 -0
  406. package/lib/feature-libraries/modular-schema/modularChangeUtils.js.map +1 -0
  407. package/lib/feature-libraries/modular-schema/prune.d.ts +10 -0
  408. package/lib/feature-libraries/modular-schema/prune.d.ts.map +1 -0
  409. package/lib/feature-libraries/modular-schema/prune.js +45 -0
  410. package/lib/feature-libraries/modular-schema/prune.js.map +1 -0
  411. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +2 -2
  412. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  413. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  414. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts +2 -2
  415. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  416. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  417. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +2 -2
  418. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  419. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  420. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +2 -2
  421. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  422. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  423. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +2 -2
  424. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  425. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  426. package/lib/feature-libraries/treeTextCursor.d.ts +15 -0
  427. package/lib/feature-libraries/treeTextCursor.d.ts.map +1 -1
  428. package/lib/feature-libraries/treeTextCursor.js +62 -1
  429. package/lib/feature-libraries/treeTextCursor.js.map +1 -1
  430. package/lib/index.d.ts +6 -4
  431. package/lib/index.d.ts.map +1 -1
  432. package/lib/index.js +4 -3
  433. package/lib/index.js.map +1 -1
  434. package/lib/packageVersion.d.ts +1 -1
  435. package/lib/packageVersion.js +1 -1
  436. package/lib/packageVersion.js.map +1 -1
  437. package/lib/shared-tree/serializedChange.d.ts +2 -2
  438. package/lib/shared-tree/serializedChange.d.ts.map +1 -1
  439. package/lib/shared-tree/serializedChange.js.map +1 -1
  440. package/lib/shared-tree/sharedTree.d.ts +11 -3
  441. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  442. package/lib/shared-tree/sharedTree.js +10 -8
  443. package/lib/shared-tree/sharedTree.js.map +1 -1
  444. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +2 -2
  445. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  446. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  447. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +41 -4
  448. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  449. package/lib/shared-tree/sharedTreeChangeFamily.js +55 -0
  450. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  451. package/lib/shared-tree/transactionMinimize.d.ts.map +1 -1
  452. package/lib/shared-tree/transactionMinimize.js +3 -3
  453. package/lib/shared-tree/transactionMinimize.js.map +1 -1
  454. package/lib/shared-tree/transactionPostProcessor.d.ts +2 -1
  455. package/lib/shared-tree/transactionPostProcessor.d.ts.map +1 -1
  456. package/lib/shared-tree/transactionPostProcessor.js.map +1 -1
  457. package/lib/shared-tree/treeCheckout.d.ts +13 -7
  458. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  459. package/lib/shared-tree/treeCheckout.js +61 -15
  460. package/lib/shared-tree/treeCheckout.js.map +1 -1
  461. package/lib/shared-tree-core/branch.d.ts +24 -9
  462. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  463. package/lib/shared-tree-core/branch.js +7 -0
  464. package/lib/shared-tree-core/branch.js.map +1 -1
  465. package/lib/shared-tree-core/editManager.d.ts +4 -4
  466. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  467. package/lib/shared-tree-core/editManager.js +2 -0
  468. package/lib/shared-tree-core/editManager.js.map +1 -1
  469. package/lib/shared-tree-core/editManagerCodecs.d.ts +3 -14
  470. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  471. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  472. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +11 -1
  473. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  474. package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  475. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts +4 -11
  476. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  477. package/lib/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
  478. package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  479. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +4 -11
  480. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  481. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
  482. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  483. package/lib/shared-tree-core/editManagerSummarizer.d.ts +4 -4
  484. package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  485. package/lib/shared-tree-core/editManagerSummarizer.js +0 -1
  486. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  487. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  488. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  489. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  490. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  491. package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  492. package/lib/shared-tree-core/messageCodecs.d.ts +8 -1
  493. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  494. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  495. package/lib/shared-tree-core/sharedTreeCore.d.ts +5 -5
  496. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  497. package/lib/shared-tree-core/sharedTreeCore.js +1 -1
  498. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  499. package/lib/shared-tree-core/transaction.d.ts +10 -10
  500. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  501. package/lib/shared-tree-core/transaction.js +6 -3
  502. package/lib/shared-tree-core/transaction.js.map +1 -1
  503. package/lib/simple-tree/api/eraseSchemaDetails.d.ts +15 -0
  504. package/lib/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
  505. package/lib/simple-tree/api/eraseSchemaDetails.js +15 -0
  506. package/lib/simple-tree/api/eraseSchemaDetails.js.map +1 -1
  507. package/lib/simple-tree/api/index.d.ts +1 -1
  508. package/lib/simple-tree/api/index.d.ts.map +1 -1
  509. package/lib/simple-tree/api/index.js +1 -1
  510. package/lib/simple-tree/api/index.js.map +1 -1
  511. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +3 -3
  512. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  513. package/lib/simple-tree/api/schemaStatics.d.ts +6 -7
  514. package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
  515. package/lib/simple-tree/api/schemaStatics.js.map +1 -1
  516. package/lib/simple-tree/api/treeNodeApi.d.ts +20 -24
  517. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  518. package/lib/simple-tree/api/treeNodeApi.js +46 -46
  519. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  520. package/lib/simple-tree/core/treeNode.d.ts +5 -6
  521. package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
  522. package/lib/simple-tree/core/treeNode.js +2 -4
  523. package/lib/simple-tree/core/treeNode.js.map +1 -1
  524. package/lib/simple-tree/core/withType.d.ts +20 -7
  525. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  526. package/lib/simple-tree/core/withType.js +4 -7
  527. package/lib/simple-tree/core/withType.js.map +1 -1
  528. package/lib/simple-tree/index.d.ts +2 -2
  529. package/lib/simple-tree/index.d.ts.map +1 -1
  530. package/lib/simple-tree/index.js +1 -1
  531. package/lib/simple-tree/index.js.map +1 -1
  532. package/lib/simple-tree/leafNodeSchema.d.ts +6 -1
  533. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  534. package/lib/simple-tree/leafNodeSchema.js +0 -1
  535. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  536. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +53 -5
  537. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  538. package/lib/simple-tree/node-kinds/array/arrayNode.js +93 -12
  539. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  540. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +90 -0
  541. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  542. package/lib/simple-tree/node-kinds/map/mapNode.js +27 -2
  543. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  544. package/lib/simple-tree/node-kinds/object/objectNode.js +3 -3
  545. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  546. package/lib/simple-tree/node-kinds/record/recordNode.js +3 -3
  547. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  548. package/lib/text/codePointUtils.d.ts +2 -2
  549. package/lib/text/codePointUtils.js +2 -2
  550. package/lib/text/codePointUtils.js.map +1 -1
  551. package/lib/text/index.d.ts +3 -3
  552. package/lib/text/index.d.ts.map +1 -1
  553. package/lib/text/index.js +3 -3
  554. package/lib/text/index.js.map +1 -1
  555. package/lib/text/textDomain.d.ts +30 -18
  556. package/lib/text/textDomain.d.ts.map +1 -1
  557. package/lib/text/textDomain.js +41 -22
  558. package/lib/text/textDomain.js.map +1 -1
  559. package/lib/text/textDomainFormatted.d.ts +180 -82
  560. package/lib/text/textDomainFormatted.d.ts.map +1 -1
  561. package/lib/text/textDomainFormatted.js +165 -86
  562. package/lib/text/textDomainFormatted.js.map +1 -1
  563. package/lib/text/textDomainFormattedDefault.d.ts +48 -25
  564. package/lib/text/textDomainFormattedDefault.d.ts.map +1 -1
  565. package/lib/text/textDomainFormattedDefault.js +25 -20
  566. package/lib/text/textDomainFormattedDefault.js.map +1 -1
  567. package/lib/treeDataStore.d.ts +49 -0
  568. package/lib/treeDataStore.d.ts.map +1 -0
  569. package/lib/treeDataStore.js +52 -0
  570. package/lib/treeDataStore.js.map +1 -0
  571. package/lib/treeFactory.d.ts +8 -3
  572. package/lib/treeFactory.d.ts.map +1 -1
  573. package/lib/treeFactory.js +5 -0
  574. package/lib/treeFactory.js.map +1 -1
  575. package/lib/util/compressedIds.d.ts +22 -2
  576. package/lib/util/compressedIds.d.ts.map +1 -1
  577. package/lib/util/compressedIds.js +22 -1
  578. package/lib/util/compressedIds.js.map +1 -1
  579. package/package.json +32 -24
  580. package/src/core/change-family/changeFamily.ts +32 -4
  581. package/src/core/change-family/editBuilder.ts +1 -2
  582. package/src/core/change-family/index.ts +2 -0
  583. package/src/core/index.ts +11 -6
  584. package/src/core/rebase/index.ts +2 -0
  585. package/src/core/rebase/types.ts +113 -0
  586. package/src/core/tree/delta.ts +62 -16
  587. package/src/core/tree/detachedFieldIndex.ts +7 -38
  588. package/src/core/tree/index.ts +2 -0
  589. package/src/core/tree/visitorUtils.ts +3 -17
  590. package/src/entrypoints/alpha.ts +9 -1
  591. package/src/feature-libraries/chunked-forest/codec/codecs.ts +17 -14
  592. package/src/feature-libraries/chunked-forest/uniformChunk.ts +11 -1
  593. package/src/feature-libraries/comparison-forest/comparisonForest.ts +140 -0
  594. package/src/feature-libraries/comparison-forest/index.ts +6 -0
  595. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +20 -6
  596. package/src/feature-libraries/default-schema/index.ts +1 -0
  597. package/src/feature-libraries/default-schema/noChangeCodecs.ts +11 -3
  598. package/src/feature-libraries/detachedFieldIndexSummarizer.ts +33 -5
  599. package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -3
  600. package/src/feature-libraries/index.ts +5 -0
  601. package/src/feature-libraries/mitigatedChangeFamily.ts +21 -3
  602. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +10 -1
  603. package/src/feature-libraries/modular-schema/genericFieldKindCodecs.ts +9 -4
  604. package/src/feature-libraries/modular-schema/index.ts +1 -0
  605. package/src/feature-libraries/modular-schema/invert.ts +338 -0
  606. package/src/feature-libraries/modular-schema/minimizeModularChange.ts +3 -5
  607. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +16 -13
  608. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +3 -1
  609. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +2 -1
  610. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +45 -644
  611. package/src/feature-libraries/modular-schema/modularChangeUtils.ts +340 -0
  612. package/src/feature-libraries/modular-schema/prune.ts +69 -0
  613. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +4 -2
  614. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -2
  615. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +4 -2
  616. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +4 -2
  617. package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +6 -3
  618. package/src/feature-libraries/treeTextCursor.ts +66 -1
  619. package/src/index.ts +11 -4
  620. package/src/packageVersion.ts +1 -1
  621. package/src/shared-tree/serializedChange.ts +2 -2
  622. package/src/shared-tree/sharedTree.ts +40 -15
  623. package/src/shared-tree/sharedTreeChangeCodecs.ts +11 -3
  624. package/src/shared-tree/sharedTreeChangeFamily.ts +77 -2
  625. package/src/shared-tree/transactionMinimize.ts +7 -3
  626. package/src/shared-tree/transactionPostProcessor.ts +5 -1
  627. package/src/shared-tree/treeCheckout.ts +136 -30
  628. package/src/shared-tree-core/branch.ts +41 -12
  629. package/src/shared-tree-core/editManager.ts +46 -25
  630. package/src/shared-tree-core/editManagerCodecs.ts +9 -21
  631. package/src/shared-tree-core/editManagerCodecsCommons.ts +14 -2
  632. package/src/shared-tree-core/editManagerCodecsV1toV4.ts +18 -21
  633. package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +18 -20
  634. package/src/shared-tree-core/editManagerSummarizer.ts +9 -6
  635. package/src/shared-tree-core/messageCodecV1ToV4.ts +3 -3
  636. package/src/shared-tree-core/messageCodecVSharedBranches.ts +2 -2
  637. package/src/shared-tree-core/messageCodecs.ts +12 -2
  638. package/src/shared-tree-core/sharedTreeCore.ts +16 -7
  639. package/src/shared-tree-core/transaction.ts +47 -25
  640. package/src/simple-tree/api/eraseSchemaDetails.ts +15 -0
  641. package/src/simple-tree/api/index.ts +0 -1
  642. package/src/simple-tree/api/schemaStatics.ts +2 -2
  643. package/src/simple-tree/api/treeNodeApi.ts +64 -48
  644. package/src/simple-tree/core/treeNode.ts +13 -10
  645. package/src/simple-tree/core/withType.ts +20 -7
  646. package/src/simple-tree/index.ts +1 -2
  647. package/src/simple-tree/leafNodeSchema.ts +6 -1
  648. package/src/simple-tree/node-kinds/array/arrayNode.ts +130 -16
  649. package/src/simple-tree/node-kinds/map/mapNode.ts +137 -5
  650. package/src/simple-tree/node-kinds/object/objectNode.ts +3 -3
  651. package/src/simple-tree/node-kinds/record/recordNode.ts +3 -3
  652. package/src/text/README.md +1 -1
  653. package/src/text/codePointUtils.ts +2 -2
  654. package/src/text/index.ts +3 -3
  655. package/src/text/textDomain.ts +50 -27
  656. package/src/text/textDomainFormatted.ts +384 -163
  657. package/src/text/textDomainFormattedDefault.ts +32 -32
  658. package/src/treeDataStore.ts +125 -0
  659. package/src/treeFactory.ts +11 -3
  660. package/src/util/compressedIds.ts +36 -3
@@ -15,8 +15,8 @@ import {
15
15
  } from "../../codec/index.js";
16
16
  import {
17
17
  type ChangeEncodingContext,
18
+ type ChangeDecodingContext,
18
19
  type ChangeFamily,
19
- type ChangeFamilyEditor,
20
20
  type ChangeRebaser,
21
21
  type ChangesetLocalId,
22
22
  type DeltaDetachedNodeBuild,
@@ -41,13 +41,13 @@ import {
41
41
  areEqualChangeAtomIdOpts,
42
42
  tagChange,
43
43
  makeAnonChange,
44
- newChangeAtomIdRangeMap,
45
44
  type DeltaDetachedNodeChanges,
46
45
  type DeltaDetachedNodeRename,
47
46
  mapTaggedChange,
48
47
  type RevisionReplacer,
49
48
  comparePartialRevisions,
50
49
  comparePartialChangesetLocalIds,
50
+ type ProcessChangeFn,
51
51
  } from "../../core/index.js";
52
52
  import {
53
53
  type IdAllocationState,
@@ -74,13 +74,7 @@ import {
74
74
  } from "../changeAtomIdBTree.js";
75
75
  import type { TreeChunk } from "../chunked-forest/index.js";
76
76
 
77
- import {
78
- type CrossFieldManager,
79
- type CrossFieldMap,
80
- CrossFieldTarget,
81
- getFirstFromCrossFieldMap,
82
- setInCrossFieldMap,
83
- } from "./crossFieldQueries.js";
77
+ import type { CrossFieldTarget } from "./crossFieldQueries.js";
84
78
  import {
85
79
  EditFilterStatus,
86
80
  type FieldChangeHandler,
@@ -100,10 +94,24 @@ import {
100
94
  type FieldId,
101
95
  type ModularChangeset,
102
96
  newCrossFieldKeyTable,
103
- type NoChangeConstraint,
104
97
  type NodeChangeset,
105
98
  type NodeId,
106
99
  } from "./modularChangeTypes.js";
100
+ import {
101
+ CrossFieldManagerI,
102
+ getChangeHandler,
103
+ getRevInfoFromTaggedChanges,
104
+ hasConflicts,
105
+ makeModularChangeset,
106
+ newConstraintState,
107
+ newCrossFieldTable,
108
+ nodeChangeFromId,
109
+ revisionInfoFromTaggedChange,
110
+ updateConstraintsForFields,
111
+ type CrossFieldTable,
112
+ } from "./modularChangeUtils.js";
113
+ import { invertModularChange } from "./invert.js";
114
+ import { pruneFieldMap } from "./prune.js";
107
115
 
108
116
  /**
109
117
  * Implementation of ChangeFamily which delegates work in a given field to the appropriate FieldKind
@@ -111,7 +119,7 @@ import {
111
119
  */
112
120
  export class ModularChangeFamily
113
121
  implements
114
- ChangeFamily<ModularEditBuilder, ModularChangeset>,
122
+ ChangeFamily<ModularEditBuilder, ModularChangeset, ModularChangeFamily>,
115
123
  ChangeRebaser<ModularChangeset>
116
124
  {
117
125
  public static readonly emptyChange: ModularChangeset = makeModularChangeset();
@@ -120,7 +128,11 @@ export class ModularChangeFamily
120
128
 
121
129
  public constructor(
122
130
  fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,
123
- public readonly codecs: ICodecFamily<ModularChangeset, ChangeEncodingContext>,
131
+ public readonly codecs: ICodecFamily<
132
+ ModularChangeset,
133
+ ChangeEncodingContext,
134
+ ChangeDecodingContext
135
+ >,
124
136
  public readonly codecOptions: CodecWriteOptions,
125
137
  ) {
126
138
  this.fieldKinds = fieldKinds;
@@ -130,6 +142,12 @@ export class ModularChangeFamily
130
142
  return this;
131
143
  }
132
144
 
145
+ public buildProcessor(
146
+ processFn: ProcessChangeFn<ModularChangeset, ModularChangeFamily>,
147
+ ): (change: ModularChangeset) => ModularChangeset {
148
+ return (change: ModularChangeset) => processFn(change, this);
149
+ }
150
+
133
151
  /**
134
152
  * Produces an equivalent list of `FieldChangeset`s that all target the same {@link FlexFieldKind}.
135
153
  * @param changes - The list of `FieldChange`s whose `FieldChangeset`s needs to be normalized.
@@ -161,8 +179,8 @@ export class ModularChangeFamily
161
179
  change2: change2.change,
162
180
  };
163
181
  }
164
- const fieldKind = getFieldKind(this.fieldKinds, kind);
165
- const changeHandler = fieldKind.changeHandler;
182
+
183
+ const changeHandler = getChangeHandler(this.fieldKinds, kind);
166
184
  const normalizedChange1 = this.normalizeFieldChange(change1, changeHandler);
167
185
  const normalizedChange2 = this.normalizeFieldChange(change2, changeHandler);
168
186
  return {
@@ -683,207 +701,12 @@ export class ModularChangeFamily
683
701
  return composedNodeChange;
684
702
  }
685
703
 
686
- /**
687
- * @param change - The change to invert.
688
- * @param isRollback - Whether the inverted change is meant to rollback a change on a branch as is the case when
689
- * performing a sandwich rebase.
690
- * @param revisionForInvert - The revision for the invert changeset.
691
- */
692
704
  public invert(
693
705
  change: TaggedChange<ModularChangeset>,
694
706
  isRollback: boolean,
695
707
  revisionForInvert: RevisionTag,
696
708
  ): ModularChangeset {
697
- // Rollback changesets destroy the nodes created by the change being rolled back.
698
- const destroys = isRollback ? invertBuilds(change.change.builds) : undefined;
699
-
700
- // Destroys only occur in rollback changesets, which are never inverted.
701
- assert(
702
- change.change.destroys === undefined,
703
- 0x89a /* Unexpected destroys in change to invert */,
704
- );
705
-
706
- const revInfos: RevisionInfo[] = isRollback
707
- ? [{ revision: revisionForInvert, rollbackOf: change.revision }]
708
- : [{ revision: revisionForInvert }];
709
-
710
- const noChangeConstraint = change.change.noChangeConstraintOnRevert;
711
- const noChangeConstraintOnRevert = change.change.noChangeConstraint;
712
-
713
- if (hasConflicts(change.change)) {
714
- return makeModularChangeset({
715
- maxId: change.change.maxId as number,
716
- revisions: revInfos,
717
- destroys,
718
- });
719
- }
720
-
721
- const genId: IdAllocator = idAllocatorFromMaxId(change.change.maxId ?? -1);
722
-
723
- const crossFieldTable: InvertTable = {
724
- ...newCrossFieldTable<FieldChange>(),
725
- originalFieldToContext: new Map(),
726
- invertedNodeToParent: brand(change.change.nodeToParent.clone()),
727
- };
728
- const { revInfos: oldRevInfos } = getRevInfoFromTaggedChanges([change]);
729
- const revisionMetadata = revisionMetadataSourceFromInfo(oldRevInfos);
730
-
731
- const invertedFields = this.invertFieldMap(
732
- change.change.fieldChanges,
733
- undefined,
734
- isRollback,
735
- genId,
736
- crossFieldTable,
737
- revisionMetadata,
738
- revisionForInvert,
739
- );
740
-
741
- const invertedNodes = newChangeAtomIdBTree<NodeChangeset>();
742
- change.change.nodeChanges.forEachPair(([revision, localId], nodeChangeset) => {
743
- invertedNodes.set(
744
- [revision, localId],
745
- this.invertNodeChange(
746
- nodeChangeset,
747
- { revision, localId },
748
- isRollback,
749
- genId,
750
- crossFieldTable,
751
- revisionMetadata,
752
- revisionForInvert,
753
- ),
754
- );
755
- });
756
-
757
- if (crossFieldTable.invalidatedFields.size > 0) {
758
- const fieldsToUpdate = crossFieldTable.invalidatedFields;
759
- crossFieldTable.invalidatedFields = new Set();
760
- for (const fieldChange of fieldsToUpdate) {
761
- const originalFieldChange = fieldChange.change;
762
- const context = crossFieldTable.originalFieldToContext.get(fieldChange);
763
- assert(
764
- context !== undefined,
765
- 0x851 /* Should have context for every invalidated field */,
766
- );
767
- const { invertedField, fieldId } = context;
768
-
769
- const amendedChange = getChangeHandler(
770
- this.fieldKinds,
771
- fieldChange.fieldKind,
772
- ).rebaser.invert(
773
- originalFieldChange,
774
- isRollback,
775
- genId,
776
- revisionForInvert,
777
- new InvertManager(crossFieldTable, fieldChange, fieldId),
778
- revisionMetadata,
779
- );
780
- invertedField.change = brand(amendedChange);
781
- }
782
- }
783
-
784
- const crossFieldKeys = this.makeCrossFieldKeyTable(invertedFields, invertedNodes);
785
-
786
- const constraintState = newConstraintState(0);
787
- this.updateConstraintsForFields(
788
- invertedFields,
789
- NodeAttachState.Attached,
790
- constraintState,
791
- invertedNodes,
792
- );
793
-
794
- return makeModularChangeset({
795
- fieldChanges: invertedFields,
796
- nodeChanges: invertedNodes,
797
- nodeToParent: crossFieldTable.invertedNodeToParent,
798
- nodeAliases: change.change.nodeAliases,
799
- crossFieldKeys,
800
- maxId: genId.getMaxId(),
801
- revisions: revInfos,
802
- constraintViolationCount: constraintState.violationCount,
803
- noChangeConstraint,
804
- noChangeConstraintOnRevert,
805
- destroys,
806
- });
807
- }
808
-
809
- private invertFieldMap(
810
- changes: FieldChangeMap,
811
- parentId: NodeId | undefined,
812
- isRollback: boolean,
813
- genId: IdAllocator,
814
- crossFieldTable: InvertTable,
815
- revisionMetadata: RevisionMetadataSource,
816
- revisionForInvert: RevisionTag,
817
- ): FieldChangeMap {
818
- const invertedFields: FieldChangeMap = new Map();
819
-
820
- for (const [field, fieldChange] of changes) {
821
- const fieldId = { nodeId: parentId, field };
822
- const manager = new InvertManager(crossFieldTable, fieldChange, fieldId);
823
- const invertedChange = getChangeHandler(
824
- this.fieldKinds,
825
- fieldChange.fieldKind,
826
- ).rebaser.invert(
827
- fieldChange.change,
828
- isRollback,
829
- genId,
830
- revisionForInvert,
831
- manager,
832
- revisionMetadata,
833
- );
834
-
835
- const invertedFieldChange: FieldChange = {
836
- ...fieldChange,
837
- change: brand(invertedChange),
838
- };
839
- invertedFields.set(field, invertedFieldChange);
840
-
841
- crossFieldTable.originalFieldToContext.set(fieldChange, {
842
- fieldId,
843
- invertedField: invertedFieldChange,
844
- });
845
- }
846
-
847
- return invertedFields;
848
- }
849
-
850
- private invertNodeChange(
851
- change: NodeChangeset,
852
- id: NodeId,
853
- isRollback: boolean,
854
- genId: IdAllocator,
855
- crossFieldTable: InvertTable,
856
- revisionMetadata: RevisionMetadataSource,
857
- revisionForInvert: RevisionTag,
858
- ): NodeChangeset {
859
- const inverse: NodeChangeset = {};
860
-
861
- // If the node has a constraint, it should be inverted to a node-exist-on-revert constraint. This ensure that if
862
- // the inverse is inverted again, the original input constraint will be restored.
863
- if (change.nodeExistsConstraint !== undefined) {
864
- inverse.nodeExistsConstraintOnRevert = change.nodeExistsConstraint;
865
- }
866
-
867
- // The node-exist-on-revert constraint of a node is the constraint that should apply when the a change is reverted.
868
- // So, it should become the constraint in the inverse. If this constraint is violated when applying the inverse,
869
- // it will be discarded.
870
- if (change.nodeExistsConstraintOnRevert !== undefined) {
871
- inverse.nodeExistsConstraint = change.nodeExistsConstraintOnRevert;
872
- }
873
-
874
- if (change.fieldChanges !== undefined) {
875
- inverse.fieldChanges = this.invertFieldMap(
876
- change.fieldChanges,
877
- id,
878
- isRollback,
879
- genId,
880
- crossFieldTable,
881
- revisionMetadata,
882
- revisionForInvert,
883
- );
884
- }
885
-
886
- return inverse;
709
+ return invertModularChange(change, isRollback, revisionForInvert, this.fieldKinds);
887
710
  }
888
711
 
889
712
  public rebase(
@@ -958,15 +781,16 @@ export class ModularChangeFamily
958
781
  constraintState.violationCount += 1;
959
782
  }
960
783
 
961
- this.updateConstraintsForFields(
784
+ updateConstraintsForFields(
962
785
  rebasedFields,
963
786
  NodeAttachState.Attached,
964
787
  constraintState,
965
788
  rebasedNodes,
789
+ this.fieldKinds,
966
790
  );
967
791
 
968
792
  const rebased = makeModularChangeset({
969
- fieldChanges: this.pruneFieldMap(rebasedFields, rebasedNodes),
793
+ fieldChanges: pruneFieldMap(rebasedFields, rebasedNodes, this.fieldKinds),
970
794
  nodeChanges: rebasedNodes,
971
795
  nodeToParent: crossFieldTable.rebasedNodeToParent,
972
796
  nodeAliases: change.nodeAliases,
@@ -1409,105 +1233,6 @@ export class ModularChangeFamily
1409
1233
  return rebasedChange;
1410
1234
  }
1411
1235
 
1412
- private updateConstraintsForFields(
1413
- fields: FieldChangeMap,
1414
- parentInputAttachState: NodeAttachState,
1415
- constraintState: ConstraintState,
1416
- nodes: ChangeAtomIdBTree<NodeChangeset>,
1417
- ): void {
1418
- for (const field of fields.values()) {
1419
- const handler = getChangeHandler(this.fieldKinds, field.fieldKind);
1420
- for (const [nodeId, inputIndex, _outputIndex] of handler.getNestedChanges(
1421
- field.change,
1422
- )) {
1423
- const isInputDetached = inputIndex === undefined;
1424
- const inputAttachState =
1425
- parentInputAttachState === NodeAttachState.Detached || isInputDetached
1426
- ? NodeAttachState.Detached
1427
- : NodeAttachState.Attached;
1428
-
1429
- this.updateConstraintsForNode(nodeId, inputAttachState, nodes, constraintState);
1430
- }
1431
- }
1432
- }
1433
-
1434
- private updateConstraintsForNode(
1435
- nodeId: NodeId,
1436
- inputAttachState: NodeAttachState,
1437
- nodes: ChangeAtomIdBTree<NodeChangeset>,
1438
- constraintState: ConstraintState,
1439
- ): void {
1440
- const node =
1441
- nodes.get([nodeId.revision, nodeId.localId]) ?? fail(0xb24 /* Unknown node ID */);
1442
- if (node.nodeExistsConstraint !== undefined) {
1443
- const isNowViolated = inputAttachState === NodeAttachState.Detached;
1444
- if (node.nodeExistsConstraint.violated !== isNowViolated) {
1445
- node.nodeExistsConstraint = {
1446
- ...node.nodeExistsConstraint,
1447
- violated: isNowViolated,
1448
- };
1449
- constraintState.violationCount += isNowViolated ? 1 : -1;
1450
- }
1451
- }
1452
-
1453
- if (node.fieldChanges !== undefined) {
1454
- this.updateConstraintsForFields(
1455
- node.fieldChanges,
1456
- inputAttachState,
1457
- constraintState,
1458
- nodes,
1459
- );
1460
- }
1461
- }
1462
-
1463
- private pruneFieldMap(
1464
- changeset: FieldChangeMap | undefined,
1465
- nodeMap: ChangeAtomIdBTree<NodeChangeset>,
1466
- ): FieldChangeMap | undefined {
1467
- if (changeset === undefined) {
1468
- return undefined;
1469
- }
1470
-
1471
- const prunedChangeset: FieldChangeMap = new Map();
1472
- for (const [field, fieldChange] of changeset) {
1473
- const handler = getChangeHandler(this.fieldKinds, fieldChange.fieldKind);
1474
-
1475
- const prunedFieldChangeset = handler.rebaser.prune(fieldChange.change, (nodeId) =>
1476
- this.pruneNodeChange(nodeId, nodeMap),
1477
- );
1478
-
1479
- if (!handler.isEmpty(prunedFieldChangeset)) {
1480
- prunedChangeset.set(field, { ...fieldChange, change: brand(prunedFieldChangeset) });
1481
- }
1482
- }
1483
-
1484
- return prunedChangeset.size > 0 ? prunedChangeset : undefined;
1485
- }
1486
-
1487
- private pruneNodeChange(
1488
- nodeId: NodeId,
1489
- nodeMap: ChangeAtomIdBTree<NodeChangeset>,
1490
- ): NodeId | undefined {
1491
- const changeset = nodeChangeFromId(nodeMap, nodeId);
1492
- const prunedFields =
1493
- changeset.fieldChanges === undefined
1494
- ? undefined
1495
- : this.pruneFieldMap(changeset.fieldChanges, nodeMap);
1496
-
1497
- const prunedChange = { ...changeset, fieldChanges: prunedFields };
1498
- if (prunedChange.fieldChanges === undefined) {
1499
- delete prunedChange.fieldChanges;
1500
- }
1501
-
1502
- if (isEmptyNodeChangeset(prunedChange)) {
1503
- nodeMap.delete([nodeId.revision, nodeId.localId]);
1504
- return undefined;
1505
- } else {
1506
- setInChangeAtomIdMap(nodeMap, nodeId, prunedChange);
1507
- return nodeId;
1508
- }
1509
- }
1510
-
1511
1236
  public getRevisions(change: ModularChangeset): Set<RevisionTag | undefined> {
1512
1237
  if (change.revisions === undefined || change.revisions.length === 0) {
1513
1238
  return new Set([undefined]);
@@ -1598,44 +1323,16 @@ export class ModularChangeFamily
1598
1323
  return updatedFields;
1599
1324
  }
1600
1325
 
1601
- private makeCrossFieldKeyTable(
1602
- fields: FieldChangeMap,
1603
- nodes: ChangeAtomIdBTree<NodeChangeset>,
1604
- ): CrossFieldKeyTable {
1605
- const keys: CrossFieldKeyTable = newCrossFieldKeyTable();
1606
- this.populateCrossFieldKeyTableForFieldMap(keys, fields, undefined);
1607
- nodes.forEachPair(([revision, localId], node) => {
1608
- if (node.fieldChanges !== undefined) {
1609
- this.populateCrossFieldKeyTableForFieldMap(keys, node.fieldChanges, {
1610
- revision,
1611
- localId,
1612
- });
1613
- }
1614
- });
1615
-
1616
- return keys;
1617
- }
1618
-
1619
- private populateCrossFieldKeyTableForFieldMap(
1620
- table: CrossFieldKeyTable,
1621
- fields: FieldChangeMap,
1622
- parent: NodeId | undefined,
1623
- ): void {
1624
- for (const [fieldKey, fieldChange] of fields) {
1625
- const keys = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).getCrossFieldKeys(
1626
- fieldChange.change,
1627
- );
1628
- for (const { key, count } of keys) {
1629
- table.set(key, count, { nodeId: parent, field: fieldKey });
1630
- }
1631
- }
1632
- }
1633
-
1634
1326
  public buildEditor(
1635
1327
  mintRevisionTag: () => RevisionTag,
1636
1328
  changeReceiver: (change: TaggedChange<ModularChangeset>) => void,
1637
1329
  ): ModularEditBuilder {
1638
- return new ModularEditBuilder(this, this.fieldKinds, changeReceiver, this.codecOptions);
1330
+ return new ModularEditBuilder(
1331
+ this.rebaser,
1332
+ this.fieldKinds,
1333
+ changeReceiver,
1334
+ this.codecOptions,
1335
+ );
1639
1336
  }
1640
1337
 
1641
1338
  private createEmptyFieldChange(fieldKind: FieldKindIdentifier): FieldChange {
@@ -1877,15 +1574,6 @@ function composeBuildsDestroysAndRefreshers(
1877
1574
  return { allBuilds, allDestroys, allRefreshers };
1878
1575
  }
1879
1576
 
1880
- function invertBuilds(
1881
- builds: ChangeAtomIdBTree<TreeChunk> | undefined,
1882
- ): ChangeAtomIdBTree<number> | undefined {
1883
- if (builds !== undefined) {
1884
- return brand(builds.mapValues((chunk) => chunk.topLevelLength));
1885
- }
1886
- return undefined;
1887
- }
1888
-
1889
1577
  /**
1890
1578
  * Returns the set of removed roots that should be in memory for the given change to be applied.
1891
1579
  * A removed root is relevant if any of the following is true:
@@ -2167,53 +1855,6 @@ export function rebaseRevisionMetadataFromInfo(
2167
1855
  };
2168
1856
  }
2169
1857
 
2170
- function isEmptyNodeChangeset(change: NodeChangeset): boolean {
2171
- return (
2172
- change.fieldChanges === undefined &&
2173
- change.nodeExistsConstraint === undefined &&
2174
- change.nodeExistsConstraintOnRevert === undefined
2175
- );
2176
- }
2177
-
2178
- export function getFieldKind(
2179
- fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,
2180
- kind: FieldKindIdentifier,
2181
- ): FlexFieldKind {
2182
- if (kind === genericFieldKind.identifier) {
2183
- return genericFieldKind;
2184
- }
2185
- const fieldKind = fieldKinds.get(kind);
2186
- assert(fieldKind !== undefined, 0x3ad /* Unknown field kind */);
2187
- return fieldKind;
2188
- }
2189
-
2190
- export function getChangeHandler(
2191
- fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,
2192
- kind: FieldKindIdentifier,
2193
- ): FieldChangeHandler<unknown> {
2194
- return getFieldKind(fieldKinds, kind).changeHandler;
2195
- }
2196
-
2197
- // TODO: TFieldData could instead just be a numeric ID generated by the CrossFieldTable
2198
- // The CrossFieldTable could have a generic field ID to context table
2199
- interface CrossFieldTable<TFieldData> {
2200
- srcTable: CrossFieldMap<unknown>;
2201
- dstTable: CrossFieldMap<unknown>;
2202
- srcDependents: CrossFieldMap<TFieldData>;
2203
- dstDependents: CrossFieldMap<TFieldData>;
2204
- invalidatedFields: Set<TFieldData>;
2205
- }
2206
-
2207
- interface InvertTable extends CrossFieldTable<FieldChange> {
2208
- originalFieldToContext: Map<FieldChange, InvertContext>;
2209
- invertedNodeToParent: ChangeAtomIdBTree<FieldId>;
2210
- }
2211
-
2212
- interface InvertContext {
2213
- fieldId: FieldId;
2214
- invertedField: FieldChange;
2215
- }
2216
-
2217
1858
  interface RebaseTable extends CrossFieldTable<FieldChange> {
2218
1859
  readonly baseChange: ModularChangeset;
2219
1860
  readonly newChange: ModularChangeset;
@@ -2320,133 +1961,6 @@ interface ComposeFieldContext {
2320
1961
  composedChange: FieldChange;
2321
1962
  }
2322
1963
 
2323
- function newCrossFieldTable<T>(): CrossFieldTable<T> {
2324
- return {
2325
- srcTable: newChangeAtomIdRangeMap(),
2326
- dstTable: newChangeAtomIdRangeMap(),
2327
- srcDependents: newChangeAtomIdRangeMap(),
2328
- dstDependents: newChangeAtomIdRangeMap(),
2329
- invalidatedFields: new Set(),
2330
- };
2331
- }
2332
-
2333
- interface ConstraintState {
2334
- violationCount: number;
2335
- }
2336
-
2337
- function newConstraintState(violationCount: number): ConstraintState {
2338
- return {
2339
- violationCount,
2340
- };
2341
- }
2342
-
2343
- abstract class CrossFieldManagerI<T> implements CrossFieldManager {
2344
- public constructor(
2345
- protected readonly crossFieldTable: CrossFieldTable<T>,
2346
- private readonly currentFieldKey: T,
2347
- protected readonly allowInval = true,
2348
- ) {}
2349
-
2350
- public set(
2351
- target: CrossFieldTarget,
2352
- revision: RevisionTag | undefined,
2353
- id: ChangesetLocalId,
2354
- count: number,
2355
- newValue: unknown,
2356
- invalidateDependents: boolean,
2357
- ): void {
2358
- if (invalidateDependents && this.allowInval) {
2359
- const lastChangedId = (id as number) + count - 1;
2360
- let firstId = id;
2361
- while (firstId <= lastChangedId) {
2362
- const dependentEntry = getFirstFromCrossFieldMap(
2363
- this.getDependents(target),
2364
- revision,
2365
- firstId,
2366
- lastChangedId - firstId + 1,
2367
- );
2368
- if (dependentEntry.value !== undefined) {
2369
- this.crossFieldTable.invalidatedFields.add(dependentEntry.value);
2370
- }
2371
-
2372
- firstId = brand(firstId + dependentEntry.length);
2373
- }
2374
- }
2375
- setInCrossFieldMap(this.getMap(target), revision, id, count, newValue);
2376
- }
2377
-
2378
- public get(
2379
- target: CrossFieldTarget,
2380
- revision: RevisionTag | undefined,
2381
- id: ChangesetLocalId,
2382
- count: number,
2383
- addDependency: boolean,
2384
- ): RangeQueryResult<unknown> {
2385
- if (addDependency) {
2386
- // We assume that if there is already an entry for this ID it is because
2387
- // a field handler has called compose on the same node multiple times.
2388
- // In this case we only want to update the latest version, so we overwrite the dependency.
2389
- setInCrossFieldMap(
2390
- this.getDependents(target),
2391
- revision,
2392
- id,
2393
- count,
2394
- this.currentFieldKey,
2395
- );
2396
- }
2397
- return getFirstFromCrossFieldMap(this.getMap(target), revision, id, count);
2398
- }
2399
-
2400
- public abstract onMoveIn(id: NodeId): void;
2401
-
2402
- public abstract moveKey(
2403
- target: CrossFieldTarget,
2404
- revision: RevisionTag | undefined,
2405
- id: ChangesetLocalId,
2406
- count: number,
2407
- ): void;
2408
-
2409
- private getMap(target: CrossFieldTarget): CrossFieldMap<unknown> {
2410
- return target === CrossFieldTarget.Source
2411
- ? this.crossFieldTable.srcTable
2412
- : this.crossFieldTable.dstTable;
2413
- }
2414
-
2415
- private getDependents(target: CrossFieldTarget): CrossFieldMap<T> {
2416
- return target === CrossFieldTarget.Source
2417
- ? this.crossFieldTable.srcDependents
2418
- : this.crossFieldTable.dstDependents;
2419
- }
2420
- }
2421
-
2422
- class InvertManager extends CrossFieldManagerI<FieldChange> {
2423
- public constructor(
2424
- table: InvertTable,
2425
- field: FieldChange,
2426
- private readonly fieldId: FieldId,
2427
- allowInval = true,
2428
- ) {
2429
- super(table, field, allowInval);
2430
- }
2431
-
2432
- public override onMoveIn(id: ChangeAtomId): void {
2433
- setInChangeAtomIdMap(this.table.invertedNodeToParent, id, this.fieldId);
2434
- }
2435
-
2436
- public override moveKey(
2437
- target: CrossFieldTarget,
2438
- revision: RevisionTag | undefined,
2439
- id: ChangesetLocalId,
2440
- count: number,
2441
- ): void {
2442
- assert(false, 0x9c5 /* Keys should not be moved manually during invert */);
2443
- }
2444
-
2445
- private get table(): InvertTable {
2446
- return this.crossFieldTable as InvertTable;
2447
- }
2448
- }
2449
-
2450
1964
  class RebaseManager extends CrossFieldManagerI<FieldChange> {
2451
1965
  public constructor(
2452
1966
  table: RebaseTable,
@@ -2612,69 +2126,18 @@ class ComposeManager extends CrossFieldManagerI<FieldChange> {
2612
2126
  }
2613
2127
  }
2614
2128
 
2615
- function makeModularChangeset(props?: {
2616
- fieldChanges?: FieldChangeMap;
2617
- nodeChanges?: ChangeAtomIdBTree<NodeChangeset>;
2618
- nodeToParent?: ChangeAtomIdBTree<FieldId>;
2619
- nodeAliases?: ChangeAtomIdBTree<NodeId>;
2620
- crossFieldKeys?: CrossFieldKeyTable;
2621
- maxId: number;
2622
- revisions?: readonly RevisionInfo[];
2623
- constraintViolationCount?: number;
2624
- noChangeConstraint?: NoChangeConstraint;
2625
- noChangeConstraintOnRevert?: NoChangeConstraint;
2626
- builds?: ChangeAtomIdBTree<TreeChunk>;
2627
- destroys?: ChangeAtomIdBTree<number>;
2628
- refreshers?: ChangeAtomIdBTree<TreeChunk>;
2629
- }): ModularChangeset {
2630
- const p = props ?? { maxId: -1 };
2631
- const changeset: Mutable<ModularChangeset> = {
2632
- fieldChanges: p.fieldChanges ?? new Map<FieldKey, FieldChange>(),
2633
- nodeChanges: p.nodeChanges ?? newChangeAtomIdBTree(),
2634
- nodeToParent: p.nodeToParent ?? newChangeAtomIdBTree(),
2635
- nodeAliases: p.nodeAliases ?? newChangeAtomIdBTree(),
2636
- crossFieldKeys: p.crossFieldKeys ?? newCrossFieldKeyTable(),
2637
- };
2638
-
2639
- if (p.revisions !== undefined && p.revisions.length > 0) {
2640
- changeset.revisions = p.revisions;
2641
- }
2642
- if (p.maxId >= 0) {
2643
- changeset.maxId = brand(p.maxId);
2644
- }
2645
- if (p.constraintViolationCount !== undefined && p.constraintViolationCount > 0) {
2646
- changeset.constraintViolationCount = p.constraintViolationCount;
2647
- }
2648
- if (p.noChangeConstraint !== undefined) {
2649
- changeset.noChangeConstraint = p.noChangeConstraint;
2650
- }
2651
- if (p.noChangeConstraintOnRevert !== undefined) {
2652
- changeset.noChangeConstraintOnRevert = p.noChangeConstraintOnRevert;
2653
- }
2654
- if (p.builds !== undefined && p.builds.size > 0) {
2655
- changeset.builds = p.builds;
2656
- }
2657
- if (p.destroys !== undefined && p.destroys.size > 0) {
2658
- changeset.destroys = p.destroys;
2659
- }
2660
- if (p.refreshers !== undefined && p.refreshers.size > 0) {
2661
- changeset.refreshers = p.refreshers;
2662
- }
2663
- return changeset;
2664
- }
2665
-
2666
2129
  export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2667
2130
  private transactionDepth: number = 0;
2668
2131
  private idAllocator: IdAllocator;
2669
2132
  private readonly codecOptions: CodecWriteOptions;
2670
2133
 
2671
2134
  public constructor(
2672
- family: ChangeFamily<ChangeFamilyEditor, ModularChangeset>,
2135
+ private readonly rebaser: ChangeRebaser<ModularChangeset>,
2673
2136
  private readonly fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,
2674
2137
  changeReceiver: (change: TaggedChange<ModularChangeset>) => void,
2675
2138
  codecOptions: CodecWriteOptions,
2676
2139
  ) {
2677
- super(family, changeReceiver);
2140
+ super(changeReceiver);
2678
2141
  this.idAllocator = idAllocatorFromMaxId();
2679
2142
  this.codecOptions = codecOptions;
2680
2143
  }
@@ -2791,7 +2254,7 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2791
2254
  });
2792
2255
  const revInfo = [...revisions].map((revision) => ({ revision }));
2793
2256
  const composedChange: Mutable<ModularChangeset> = {
2794
- ...this.changeFamily.rebaser.compose(changeMaps),
2257
+ ...this.rebaser.compose(changeMaps),
2795
2258
  revisions: revInfo,
2796
2259
  };
2797
2260
 
@@ -3007,58 +2470,6 @@ export interface GlobalEditDescription {
3007
2470
 
3008
2471
  export type EditDescription = FieldEditDescription | GlobalEditDescription;
3009
2472
 
3010
- function getRevInfoFromTaggedChanges(changes: TaggedChange<ModularChangeset>[]): {
3011
- revInfos: RevisionInfo[];
3012
- maxId: ChangesetLocalId;
3013
- } {
3014
- let maxId = -1;
3015
- const revInfos: RevisionInfo[] = [];
3016
- const revisions = new Set<RevisionTag>();
3017
- for (const taggedChange of changes) {
3018
- const change = taggedChange.change;
3019
- maxId = Math.max(change.maxId ?? -1, maxId);
3020
- const infosToAdd = revisionInfoFromTaggedChange(taggedChange);
3021
- for (const info of infosToAdd) {
3022
- if (!revisions.has(info.revision)) {
3023
- revisions.add(info.revision);
3024
- revInfos.push(info);
3025
- }
3026
- }
3027
- }
3028
-
3029
- const rolledBackRevisions: RevisionTag[] = [];
3030
- for (const info of revInfos) {
3031
- if (info.rollbackOf !== undefined) {
3032
- rolledBackRevisions.push(info.rollbackOf);
3033
- }
3034
- }
3035
-
3036
- rolledBackRevisions.reverse();
3037
- for (const revision of rolledBackRevisions) {
3038
- if (!revisions.has(revision)) {
3039
- revInfos.push({ revision });
3040
- }
3041
- }
3042
-
3043
- return { maxId: brand(maxId), revInfos };
3044
- }
3045
-
3046
- function revisionInfoFromTaggedChange(
3047
- taggedChange: TaggedChange<ModularChangeset>,
3048
- ): RevisionInfo[] {
3049
- const revInfos: RevisionInfo[] = [];
3050
- if (taggedChange.change.revisions !== undefined) {
3051
- revInfos.push(...taggedChange.change.revisions);
3052
- } else if (taggedChange.revision !== undefined) {
3053
- const info: Mutable<RevisionInfo> = { revision: taggedChange.revision };
3054
- if (taggedChange.rollbackOf !== undefined) {
3055
- info.rollbackOf = taggedChange.rollbackOf;
3056
- }
3057
- revInfos.push(info);
3058
- }
3059
- return revInfos;
3060
- }
3061
-
3062
2473
  function fieldChangeFromId(
3063
2474
  fields: FieldChangeMap,
3064
2475
  nodes: ChangeAtomIdBTree<NodeChangeset>,
@@ -3094,12 +2505,6 @@ function rebasedNodeIdFromBaseNodeId(table: RebaseTable, baseId: NodeId): NodeId
3094
2505
  return getFromChangeAtomIdMap(table.baseToRebasedNodeId, baseId) ?? baseId;
3095
2506
  }
3096
2507
 
3097
- function nodeChangeFromId(nodes: ChangeAtomIdBTree<NodeChangeset>, id: NodeId): NodeChangeset {
3098
- const node = getFromChangeAtomIdMap(nodes, id);
3099
- assert(node !== undefined, 0x9ca /* Unknown node ID */);
3100
- return node;
3101
- }
3102
-
3103
2508
  function fieldIdFromFieldIdKey([revision, localId, field]: FieldIdKey): FieldId {
3104
2509
  const nodeId = localId === undefined ? undefined : { revision, localId };
3105
2510
  return { nodeId, field };
@@ -3171,10 +2576,6 @@ function normalizeNodeId(nodeId: NodeId, nodeAliases: ChangeAtomIdBTree<NodeId>)
3171
2576
  }
3172
2577
  }
3173
2578
 
3174
- function hasConflicts(change: ModularChangeset): boolean {
3175
- return (change.constraintViolationCount ?? 0) > 0;
3176
- }
3177
-
3178
2579
  /**
3179
2580
  * A rebaseChild callback for fields with no new changes.
3180
2581
  * Asserts that there are no new changes and returns undefined.