@fluidframework/tree 2.113.1 → 2.114.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 (527) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/api-report/tree.alpha.api.md +19 -0
  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 +3 -2
  14. package/dist/core/index.d.ts.map +1 -1
  15. package/dist/core/index.js.map +1 -1
  16. package/dist/core/tree/delta.d.ts +62 -16
  17. package/dist/core/tree/delta.d.ts.map +1 -1
  18. package/dist/core/tree/delta.js.map +1 -1
  19. package/dist/core/tree/detachedFieldIndex.d.ts +7 -13
  20. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  21. package/dist/core/tree/detachedFieldIndex.js +32 -46
  22. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  23. package/dist/core/tree/index.d.ts +1 -0
  24. package/dist/core/tree/index.d.ts.map +1 -1
  25. package/dist/core/tree/index.js.map +1 -1
  26. package/dist/core/tree/visitorUtils.d.ts +2 -4
  27. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  28. package/dist/core/tree/visitorUtils.js +2 -2
  29. package/dist/core/tree/visitorUtils.js.map +1 -1
  30. package/dist/entrypoints/alpha.d.ts +1 -1
  31. package/dist/entrypoints/alpha.d.ts.map +1 -1
  32. package/dist/entrypoints/alpha.js +5 -2
  33. package/dist/entrypoints/alpha.js.map +1 -1
  34. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  35. package/dist/feature-libraries/chunked-forest/uniformChunk.js +10 -2
  36. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  37. package/dist/feature-libraries/comparison-forest/comparisonForest.d.ts +51 -0
  38. package/dist/feature-libraries/comparison-forest/comparisonForest.d.ts.map +1 -0
  39. package/dist/feature-libraries/comparison-forest/comparisonForest.js +98 -0
  40. package/dist/feature-libraries/comparison-forest/comparisonForest.js.map +1 -0
  41. package/dist/feature-libraries/comparison-forest/index.d.ts +6 -0
  42. package/dist/feature-libraries/comparison-forest/index.d.ts.map +1 -0
  43. package/dist/feature-libraries/comparison-forest/index.js +10 -0
  44. package/dist/feature-libraries/comparison-forest/index.js.map +1 -0
  45. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +8 -6
  46. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  47. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +6 -3
  48. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  49. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  50. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  51. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  52. package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts +2 -2
  53. package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
  54. package/dist/feature-libraries/default-schema/noChangeCodecs.js +3 -1
  55. package/dist/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
  56. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts +6 -3
  57. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  58. package/dist/feature-libraries/detachedFieldIndexSummarizer.js +18 -6
  59. package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  60. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -3
  61. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  62. package/dist/feature-libraries/forest-summary/forestSummarizer.js +2 -3
  63. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  64. package/dist/feature-libraries/index.d.ts +4 -3
  65. package/dist/feature-libraries/index.d.ts.map +1 -1
  66. package/dist/feature-libraries/index.js +77 -72
  67. package/dist/feature-libraries/index.js.map +1 -1
  68. package/dist/feature-libraries/mitigatedChangeFamily.d.ts +1 -1
  69. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  70. package/dist/feature-libraries/mitigatedChangeFamily.js +12 -0
  71. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  72. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -1
  73. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  74. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  75. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +2 -2
  76. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
  77. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  78. package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
  79. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  80. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  81. package/dist/feature-libraries/modular-schema/invert.d.ts +15 -0
  82. package/dist/feature-libraries/modular-schema/invert.d.ts.map +1 -0
  83. package/dist/feature-libraries/modular-schema/invert.js +159 -0
  84. package/dist/feature-libraries/modular-schema/invert.js.map +1 -0
  85. package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts +3 -4
  86. package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -1
  87. package/dist/feature-libraries/modular-schema/minimizeModularChange.js +2 -2
  88. package/dist/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -1
  89. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +9 -9
  90. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  91. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +0 -2
  92. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  93. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +2 -2
  94. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  95. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  96. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  97. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  98. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  99. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -22
  100. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  101. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +53 -406
  102. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  103. package/dist/feature-libraries/modular-schema/modularChangeUtils.d.ts +61 -0
  104. package/dist/feature-libraries/modular-schema/modularChangeUtils.d.ts.map +1 -0
  105. package/dist/feature-libraries/modular-schema/modularChangeUtils.js +205 -0
  106. package/dist/feature-libraries/modular-schema/modularChangeUtils.js.map +1 -0
  107. package/dist/feature-libraries/modular-schema/prune.d.ts +10 -0
  108. package/dist/feature-libraries/modular-schema/prune.d.ts.map +1 -0
  109. package/dist/feature-libraries/modular-schema/prune.js +49 -0
  110. package/dist/feature-libraries/modular-schema/prune.js.map +1 -0
  111. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +2 -2
  112. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  113. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  114. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts +2 -2
  115. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  116. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  117. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +2 -2
  118. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  119. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  120. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +2 -2
  121. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  122. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  123. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +2 -2
  124. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  125. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  126. package/dist/feature-libraries/treeTextCursor.d.ts +15 -0
  127. package/dist/feature-libraries/treeTextCursor.d.ts.map +1 -1
  128. package/dist/feature-libraries/treeTextCursor.js +64 -1
  129. package/dist/feature-libraries/treeTextCursor.js.map +1 -1
  130. package/dist/index.d.ts +3 -1
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +5 -1
  133. package/dist/index.js.map +1 -1
  134. package/dist/packageVersion.d.ts +1 -1
  135. package/dist/packageVersion.js +1 -1
  136. package/dist/packageVersion.js.map +1 -1
  137. package/dist/shared-tree/serializedChange.d.ts +2 -2
  138. package/dist/shared-tree/serializedChange.d.ts.map +1 -1
  139. package/dist/shared-tree/serializedChange.js.map +1 -1
  140. package/dist/shared-tree/sharedTree.d.ts +6 -3
  141. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  142. package/dist/shared-tree/sharedTree.js +8 -6
  143. package/dist/shared-tree/sharedTree.js.map +1 -1
  144. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +2 -2
  145. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  146. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  147. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +41 -4
  148. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  149. package/dist/shared-tree/sharedTreeChangeFamily.js +57 -1
  150. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  151. package/dist/shared-tree/transactionMinimize.d.ts.map +1 -1
  152. package/dist/shared-tree/transactionMinimize.js +2 -2
  153. package/dist/shared-tree/transactionMinimize.js.map +1 -1
  154. package/dist/shared-tree/transactionPostProcessor.d.ts +2 -1
  155. package/dist/shared-tree/transactionPostProcessor.d.ts.map +1 -1
  156. package/dist/shared-tree/transactionPostProcessor.js.map +1 -1
  157. package/dist/shared-tree/treeCheckout.d.ts +8 -7
  158. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  159. package/dist/shared-tree/treeCheckout.js +1 -1
  160. package/dist/shared-tree/treeCheckout.js.map +1 -1
  161. package/dist/shared-tree-core/branch.d.ts +23 -9
  162. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  163. package/dist/shared-tree-core/branch.js +7 -0
  164. package/dist/shared-tree-core/branch.js.map +1 -1
  165. package/dist/shared-tree-core/editManager.d.ts +4 -4
  166. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  167. package/dist/shared-tree-core/editManager.js +2 -0
  168. package/dist/shared-tree-core/editManager.js.map +1 -1
  169. package/dist/shared-tree-core/editManagerCodecs.d.ts +3 -14
  170. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  171. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  172. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +11 -1
  173. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  174. package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  175. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts +4 -11
  176. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  177. package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  178. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +4 -11
  179. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  180. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  181. package/dist/shared-tree-core/editManagerSummarizer.d.ts +4 -4
  182. package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  183. package/dist/shared-tree-core/editManagerSummarizer.js +0 -1
  184. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  185. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  186. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  187. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  188. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  189. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  190. package/dist/shared-tree-core/messageCodecs.d.ts +8 -1
  191. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  192. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  193. package/dist/shared-tree-core/sharedTreeCore.d.ts +5 -5
  194. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  195. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  196. package/dist/shared-tree-core/transaction.d.ts +10 -10
  197. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  198. package/dist/shared-tree-core/transaction.js +6 -3
  199. package/dist/shared-tree-core/transaction.js.map +1 -1
  200. package/dist/simple-tree/api/eraseSchemaDetails.d.ts +15 -0
  201. package/dist/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
  202. package/dist/simple-tree/api/eraseSchemaDetails.js +15 -0
  203. package/dist/simple-tree/api/eraseSchemaDetails.js.map +1 -1
  204. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +21 -2
  205. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  206. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  207. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +13 -0
  208. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  209. package/dist/simple-tree/node-kinds/map/mapNode.js +9 -0
  210. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  211. package/dist/text/textDomain.d.ts +12 -0
  212. package/dist/text/textDomain.d.ts.map +1 -1
  213. package/dist/text/textDomain.js +37 -16
  214. package/dist/text/textDomain.js.map +1 -1
  215. package/dist/text/textDomainFormatted.d.ts +155 -61
  216. package/dist/text/textDomainFormatted.d.ts.map +1 -1
  217. package/dist/text/textDomainFormatted.js +147 -71
  218. package/dist/text/textDomainFormatted.js.map +1 -1
  219. package/dist/text/textDomainFormattedDefault.d.ts +37 -14
  220. package/dist/text/textDomainFormattedDefault.d.ts.map +1 -1
  221. package/dist/text/textDomainFormattedDefault.js +13 -5
  222. package/dist/text/textDomainFormattedDefault.js.map +1 -1
  223. package/dist/treeDataStore.d.ts +49 -0
  224. package/dist/treeDataStore.d.ts.map +1 -0
  225. package/dist/treeDataStore.js +57 -0
  226. package/dist/treeDataStore.js.map +1 -0
  227. package/dist/treeFactory.d.ts +8 -3
  228. package/dist/treeFactory.d.ts.map +1 -1
  229. package/dist/treeFactory.js +6 -1
  230. package/dist/treeFactory.js.map +1 -1
  231. package/lib/core/change-family/changeFamily.d.ts +15 -4
  232. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  233. package/lib/core/change-family/changeFamily.js.map +1 -1
  234. package/lib/core/change-family/editBuilder.d.ts +2 -3
  235. package/lib/core/change-family/editBuilder.d.ts.map +1 -1
  236. package/lib/core/change-family/editBuilder.js +1 -2
  237. package/lib/core/change-family/editBuilder.js.map +1 -1
  238. package/lib/core/change-family/index.d.ts +1 -1
  239. package/lib/core/change-family/index.d.ts.map +1 -1
  240. package/lib/core/change-family/index.js.map +1 -1
  241. package/lib/core/index.d.ts +3 -2
  242. package/lib/core/index.d.ts.map +1 -1
  243. package/lib/core/index.js +1 -1
  244. package/lib/core/index.js.map +1 -1
  245. package/lib/core/tree/delta.d.ts +62 -16
  246. package/lib/core/tree/delta.d.ts.map +1 -1
  247. package/lib/core/tree/delta.js.map +1 -1
  248. package/lib/core/tree/detachedFieldIndex.d.ts +7 -13
  249. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  250. package/lib/core/tree/detachedFieldIndex.js +7 -21
  251. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  252. package/lib/core/tree/index.d.ts +1 -0
  253. package/lib/core/tree/index.d.ts.map +1 -1
  254. package/lib/core/tree/index.js.map +1 -1
  255. package/lib/core/tree/visitorUtils.d.ts +2 -4
  256. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  257. package/lib/core/tree/visitorUtils.js +2 -2
  258. package/lib/core/tree/visitorUtils.js.map +1 -1
  259. package/lib/entrypoints/alpha.d.ts +1 -1
  260. package/lib/entrypoints/alpha.d.ts.map +1 -1
  261. package/lib/entrypoints/alpha.js +1 -1
  262. package/lib/entrypoints/alpha.js.map +1 -1
  263. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  264. package/lib/feature-libraries/chunked-forest/uniformChunk.js +10 -2
  265. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  266. package/lib/feature-libraries/comparison-forest/comparisonForest.d.ts +51 -0
  267. package/lib/feature-libraries/comparison-forest/comparisonForest.d.ts.map +1 -0
  268. package/lib/feature-libraries/comparison-forest/comparisonForest.js +94 -0
  269. package/lib/feature-libraries/comparison-forest/comparisonForest.js.map +1 -0
  270. package/lib/feature-libraries/comparison-forest/index.d.ts +6 -0
  271. package/lib/feature-libraries/comparison-forest/index.d.ts.map +1 -0
  272. package/lib/feature-libraries/comparison-forest/index.js +6 -0
  273. package/lib/feature-libraries/comparison-forest/index.js.map +1 -0
  274. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +8 -6
  275. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  276. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +6 -3
  277. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  278. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  279. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  280. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  281. package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts +2 -2
  282. package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
  283. package/lib/feature-libraries/default-schema/noChangeCodecs.js +3 -1
  284. package/lib/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
  285. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts +6 -3
  286. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  287. package/lib/feature-libraries/detachedFieldIndexSummarizer.js +16 -4
  288. package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  289. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -3
  290. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  291. package/lib/feature-libraries/forest-summary/forestSummarizer.js +2 -3
  292. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  293. package/lib/feature-libraries/index.d.ts +4 -3
  294. package/lib/feature-libraries/index.d.ts.map +1 -1
  295. package/lib/feature-libraries/index.js +2 -1
  296. package/lib/feature-libraries/index.js.map +1 -1
  297. package/lib/feature-libraries/mitigatedChangeFamily.d.ts +1 -1
  298. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  299. package/lib/feature-libraries/mitigatedChangeFamily.js +12 -0
  300. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  301. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -1
  302. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  303. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  304. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +2 -2
  305. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
  306. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  307. package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
  308. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  309. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  310. package/lib/feature-libraries/modular-schema/invert.d.ts +15 -0
  311. package/lib/feature-libraries/modular-schema/invert.d.ts.map +1 -0
  312. package/lib/feature-libraries/modular-schema/invert.js +155 -0
  313. package/lib/feature-libraries/modular-schema/invert.js.map +1 -0
  314. package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts +3 -4
  315. package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -1
  316. package/lib/feature-libraries/modular-schema/minimizeModularChange.js +2 -2
  317. package/lib/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -1
  318. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +9 -9
  319. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  320. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +0 -2
  321. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  322. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +2 -2
  323. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  324. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  325. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  326. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  327. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  328. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -22
  329. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  330. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +16 -367
  331. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  332. package/lib/feature-libraries/modular-schema/modularChangeUtils.d.ts +61 -0
  333. package/lib/feature-libraries/modular-schema/modularChangeUtils.d.ts.map +1 -0
  334. package/lib/feature-libraries/modular-schema/modularChangeUtils.js +192 -0
  335. package/lib/feature-libraries/modular-schema/modularChangeUtils.js.map +1 -0
  336. package/lib/feature-libraries/modular-schema/prune.d.ts +10 -0
  337. package/lib/feature-libraries/modular-schema/prune.d.ts.map +1 -0
  338. package/lib/feature-libraries/modular-schema/prune.js +45 -0
  339. package/lib/feature-libraries/modular-schema/prune.js.map +1 -0
  340. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +2 -2
  341. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  342. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  343. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts +2 -2
  344. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  345. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  346. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +2 -2
  347. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  348. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  349. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +2 -2
  350. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  351. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  352. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +2 -2
  353. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  354. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  355. package/lib/feature-libraries/treeTextCursor.d.ts +15 -0
  356. package/lib/feature-libraries/treeTextCursor.d.ts.map +1 -1
  357. package/lib/feature-libraries/treeTextCursor.js +62 -1
  358. package/lib/feature-libraries/treeTextCursor.js.map +1 -1
  359. package/lib/index.d.ts +3 -1
  360. package/lib/index.d.ts.map +1 -1
  361. package/lib/index.js +2 -1
  362. package/lib/index.js.map +1 -1
  363. package/lib/packageVersion.d.ts +1 -1
  364. package/lib/packageVersion.js +1 -1
  365. package/lib/packageVersion.js.map +1 -1
  366. package/lib/shared-tree/serializedChange.d.ts +2 -2
  367. package/lib/shared-tree/serializedChange.d.ts.map +1 -1
  368. package/lib/shared-tree/serializedChange.js.map +1 -1
  369. package/lib/shared-tree/sharedTree.d.ts +6 -3
  370. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  371. package/lib/shared-tree/sharedTree.js +9 -7
  372. package/lib/shared-tree/sharedTree.js.map +1 -1
  373. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +2 -2
  374. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  375. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  376. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +41 -4
  377. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  378. package/lib/shared-tree/sharedTreeChangeFamily.js +55 -0
  379. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  380. package/lib/shared-tree/transactionMinimize.d.ts.map +1 -1
  381. package/lib/shared-tree/transactionMinimize.js +3 -3
  382. package/lib/shared-tree/transactionMinimize.js.map +1 -1
  383. package/lib/shared-tree/transactionPostProcessor.d.ts +2 -1
  384. package/lib/shared-tree/transactionPostProcessor.d.ts.map +1 -1
  385. package/lib/shared-tree/transactionPostProcessor.js.map +1 -1
  386. package/lib/shared-tree/treeCheckout.d.ts +8 -7
  387. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  388. package/lib/shared-tree/treeCheckout.js +1 -1
  389. package/lib/shared-tree/treeCheckout.js.map +1 -1
  390. package/lib/shared-tree-core/branch.d.ts +23 -9
  391. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  392. package/lib/shared-tree-core/branch.js +7 -0
  393. package/lib/shared-tree-core/branch.js.map +1 -1
  394. package/lib/shared-tree-core/editManager.d.ts +4 -4
  395. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  396. package/lib/shared-tree-core/editManager.js +2 -0
  397. package/lib/shared-tree-core/editManager.js.map +1 -1
  398. package/lib/shared-tree-core/editManagerCodecs.d.ts +3 -14
  399. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  400. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  401. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +11 -1
  402. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  403. package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  404. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts +4 -11
  405. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  406. package/lib/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
  407. package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  408. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +4 -11
  409. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  410. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
  411. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  412. package/lib/shared-tree-core/editManagerSummarizer.d.ts +4 -4
  413. package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  414. package/lib/shared-tree-core/editManagerSummarizer.js +0 -1
  415. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  416. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  417. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  418. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  419. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  420. package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  421. package/lib/shared-tree-core/messageCodecs.d.ts +8 -1
  422. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  423. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  424. package/lib/shared-tree-core/sharedTreeCore.d.ts +5 -5
  425. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  426. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  427. package/lib/shared-tree-core/transaction.d.ts +10 -10
  428. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  429. package/lib/shared-tree-core/transaction.js +6 -3
  430. package/lib/shared-tree-core/transaction.js.map +1 -1
  431. package/lib/simple-tree/api/eraseSchemaDetails.d.ts +15 -0
  432. package/lib/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
  433. package/lib/simple-tree/api/eraseSchemaDetails.js +15 -0
  434. package/lib/simple-tree/api/eraseSchemaDetails.js.map +1 -1
  435. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +21 -2
  436. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  437. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  438. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +13 -0
  439. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  440. package/lib/simple-tree/node-kinds/map/mapNode.js +9 -0
  441. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  442. package/lib/text/textDomain.d.ts +12 -0
  443. package/lib/text/textDomain.d.ts.map +1 -1
  444. package/lib/text/textDomain.js +34 -15
  445. package/lib/text/textDomain.js.map +1 -1
  446. package/lib/text/textDomainFormatted.d.ts +155 -61
  447. package/lib/text/textDomainFormatted.d.ts.map +1 -1
  448. package/lib/text/textDomainFormatted.js +148 -73
  449. package/lib/text/textDomainFormatted.js.map +1 -1
  450. package/lib/text/textDomainFormattedDefault.d.ts +37 -14
  451. package/lib/text/textDomainFormattedDefault.d.ts.map +1 -1
  452. package/lib/text/textDomainFormattedDefault.js +14 -6
  453. package/lib/text/textDomainFormattedDefault.js.map +1 -1
  454. package/lib/treeDataStore.d.ts +49 -0
  455. package/lib/treeDataStore.d.ts.map +1 -0
  456. package/lib/treeDataStore.js +52 -0
  457. package/lib/treeDataStore.js.map +1 -0
  458. package/lib/treeFactory.d.ts +8 -3
  459. package/lib/treeFactory.d.ts.map +1 -1
  460. package/lib/treeFactory.js +5 -0
  461. package/lib/treeFactory.js.map +1 -1
  462. package/package.json +25 -24
  463. package/src/core/change-family/changeFamily.ts +32 -4
  464. package/src/core/change-family/editBuilder.ts +1 -2
  465. package/src/core/change-family/index.ts +2 -0
  466. package/src/core/index.ts +9 -6
  467. package/src/core/tree/delta.ts +62 -16
  468. package/src/core/tree/detachedFieldIndex.ts +7 -38
  469. package/src/core/tree/index.ts +2 -0
  470. package/src/core/tree/visitorUtils.ts +3 -17
  471. package/src/entrypoints/alpha.ts +7 -3
  472. package/src/feature-libraries/chunked-forest/uniformChunk.ts +11 -1
  473. package/src/feature-libraries/comparison-forest/comparisonForest.ts +140 -0
  474. package/src/feature-libraries/comparison-forest/index.ts +6 -0
  475. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +20 -6
  476. package/src/feature-libraries/default-schema/index.ts +1 -0
  477. package/src/feature-libraries/default-schema/noChangeCodecs.ts +11 -3
  478. package/src/feature-libraries/detachedFieldIndexSummarizer.ts +33 -5
  479. package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -3
  480. package/src/feature-libraries/index.ts +5 -0
  481. package/src/feature-libraries/mitigatedChangeFamily.ts +21 -3
  482. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +10 -1
  483. package/src/feature-libraries/modular-schema/genericFieldKindCodecs.ts +9 -4
  484. package/src/feature-libraries/modular-schema/index.ts +1 -0
  485. package/src/feature-libraries/modular-schema/invert.ts +338 -0
  486. package/src/feature-libraries/modular-schema/minimizeModularChange.ts +3 -5
  487. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +16 -13
  488. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +3 -1
  489. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +2 -1
  490. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +45 -644
  491. package/src/feature-libraries/modular-schema/modularChangeUtils.ts +340 -0
  492. package/src/feature-libraries/modular-schema/prune.ts +69 -0
  493. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +4 -2
  494. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -2
  495. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +4 -2
  496. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +4 -2
  497. package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +6 -3
  498. package/src/feature-libraries/treeTextCursor.ts +66 -1
  499. package/src/index.ts +4 -0
  500. package/src/packageVersion.ts +1 -1
  501. package/src/shared-tree/serializedChange.ts +2 -2
  502. package/src/shared-tree/sharedTree.ts +34 -14
  503. package/src/shared-tree/sharedTreeChangeCodecs.ts +11 -3
  504. package/src/shared-tree/sharedTreeChangeFamily.ts +77 -2
  505. package/src/shared-tree/transactionMinimize.ts +7 -3
  506. package/src/shared-tree/transactionPostProcessor.ts +5 -1
  507. package/src/shared-tree/treeCheckout.ts +55 -16
  508. package/src/shared-tree-core/branch.ts +40 -12
  509. package/src/shared-tree-core/editManager.ts +46 -25
  510. package/src/shared-tree-core/editManagerCodecs.ts +9 -21
  511. package/src/shared-tree-core/editManagerCodecsCommons.ts +14 -2
  512. package/src/shared-tree-core/editManagerCodecsV1toV4.ts +18 -21
  513. package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +18 -20
  514. package/src/shared-tree-core/editManagerSummarizer.ts +9 -6
  515. package/src/shared-tree-core/messageCodecV1ToV4.ts +3 -3
  516. package/src/shared-tree-core/messageCodecVSharedBranches.ts +2 -2
  517. package/src/shared-tree-core/messageCodecs.ts +12 -2
  518. package/src/shared-tree-core/sharedTreeCore.ts +15 -6
  519. package/src/shared-tree-core/transaction.ts +47 -25
  520. package/src/simple-tree/api/eraseSchemaDetails.ts +15 -0
  521. package/src/simple-tree/node-kinds/array/arrayNode.ts +21 -2
  522. package/src/simple-tree/node-kinds/map/mapNode.ts +24 -2
  523. package/src/text/textDomain.ts +29 -6
  524. package/src/text/textDomainFormatted.ts +351 -134
  525. package/src/text/textDomainFormattedDefault.ts +25 -16
  526. package/src/treeDataStore.ts +125 -0
  527. package/src/treeFactory.ts +11 -3
@@ -52,6 +52,7 @@ import {
52
52
  TreeCompressionStrategy,
53
53
  buildChunkedForest,
54
54
  buildForest,
55
+ ComparisonForest,
55
56
  defaultIncrementalEncodingPolicy,
56
57
  defaultSchemaPolicy,
57
58
  fieldBatchCodecBuilder,
@@ -105,6 +106,7 @@ import {
105
106
  getCodecTreeForChangeFormat,
106
107
  SharedTreeChangeFormatVersion,
107
108
  } from "./sharedTreeChangeCodecs.js";
109
+ import type { SharedTreeChangeProcessingContext } from "./sharedTreeChangeFamily.js";
108
110
  import { SharedTreeChangeFamily } from "./sharedTreeChangeFamily.js";
109
111
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
110
112
  import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
@@ -174,7 +176,11 @@ export type SharedTreeKernelView = Omit<ITreePrivate, keyof (IChannelView & IFlu
174
176
  */
175
177
  @breakingClass
176
178
  export class SharedTreeKernel
177
- extends SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>
179
+ extends SharedTreeCore<
180
+ SharedTreeEditBuilder,
181
+ SharedTreeChange,
182
+ SharedTreeChangeProcessingContext
183
+ >
178
184
  implements SharedKernel
179
185
  {
180
186
  public readonly checkout: TreeCheckout;
@@ -219,13 +225,7 @@ export class SharedTreeKernel
219
225
  idCompressor,
220
226
  options.shouldEncodeIncrementally,
221
227
  );
222
- const revisionTagCodec = new RevisionTagCodec(idCompressor);
223
- const removedRoots = makeDetachedFieldIndex(
224
- "repair",
225
- revisionTagCodec,
226
- idCompressor,
227
- options,
228
- );
228
+ const removedRoots = makeDetachedFieldIndex("repair");
229
229
  const schemaCodec = schemaCodecBuilder.build(options);
230
230
  const schemaSummarizer = new SchemaSummarizer(
231
231
  schema,
@@ -257,7 +257,6 @@ export class SharedTreeKernel
257
257
  });
258
258
  const forestSummarizer = new ForestSummarizer(
259
259
  forest,
260
- revisionTagCodec,
261
260
  encoderContext,
262
261
  decoderContext,
263
262
  options,
@@ -265,9 +264,12 @@ export class SharedTreeKernel
265
264
  initialSequenceNumber,
266
265
  options.shouldEncodeIncrementally,
267
266
  );
267
+ const revisionTagCodec = new RevisionTagCodec(idCompressor);
268
268
  const removedRootsSummarizer = new DetachedFieldIndexSummarizer(
269
269
  removedRoots,
270
- options.minVersionForCollab,
270
+ revisionTagCodec,
271
+ idCompressor,
272
+ options,
271
273
  );
272
274
  const innerChangeFamily = new SharedTreeChangeFamily(
273
275
  revisionTagCodec,
@@ -436,7 +438,11 @@ export class SharedTreeKernel
436
438
 
437
439
  public override applyStashedOp(
438
440
  ...args: Parameters<
439
- SharedTreeCore<SharedTreeEditBuilder, SharedTreeChange>["applyStashedOp"]
441
+ SharedTreeCore<
442
+ SharedTreeEditBuilder,
443
+ SharedTreeChange,
444
+ SharedTreeChangeProcessingContext
445
+ >["applyStashedOp"]
440
446
  >
441
447
  ): void {
442
448
  for (const checkout of this.checkouts.values()) {
@@ -739,12 +745,26 @@ export const ForestTypeOptimized = toForestType(
739
745
  * Includes validation with scales poorly.
740
746
  * May be asymptotically slower than {@link ForestTypeReference}, and may perform very badly with larger data sizes.
741
747
  * @privateRemarks
742
- * The "ObjectForest" forest type with expensive asserts for debugging.
748
+ * A {@link ComparisonForest} which uses the "ChunkedForest" forest type as its main forest and validates every delta
749
+ * against a reference "ObjectForest" (with expensive asserts enabled for schema validation).
750
+ * This exercises the optimized forest while asserting that its contents stay consistent with the reference implementation.
743
751
  * @beta
744
752
  */
745
753
  export const ForestTypeExpensiveDebug = toForestType(
746
- (breaker: Breakable, schema: TreeStoredSchemaSubscription) =>
747
- buildForest(breaker, schema, undefined, true),
754
+ (
755
+ breaker: Breakable,
756
+ schema: TreeStoredSchemaSubscription,
757
+ idCompressor: IIdCompressor,
758
+ shouldEncodeIncrementally: IncrementalEncodingPolicy,
759
+ ) =>
760
+ new ComparisonForest(
761
+ buildChunkedForest(
762
+ makeTreeChunker(schema, defaultSchemaPolicy, shouldEncodeIncrementally),
763
+ undefined,
764
+ idCompressor,
765
+ ),
766
+ buildForest(breaker, schema, undefined, true),
767
+ ),
748
768
  );
749
769
 
750
770
  type ForestFactory = (
@@ -16,7 +16,11 @@ import {
16
16
  makeCodecFamily,
17
17
  withSchemaValidation,
18
18
  } from "../codec/index.js";
19
- import type { ChangeEncodingContext, TreeStoredSchema } from "../core/index.js";
19
+ import type {
20
+ ChangeEncodingContext,
21
+ ChangeDecodingContext,
22
+ TreeStoredSchema,
23
+ } from "../core/index.js";
20
24
  import {
21
25
  ModularChangeFormatVersion,
22
26
  type ModularChangeset,
@@ -39,9 +43,13 @@ import {
39
43
  import type { SharedTreeChange, SharedTreeInnerChange } from "./sharedTreeChangeTypes.js";
40
44
 
41
45
  export function makeSharedTreeChangeCodecFamily(
42
- modularChangeCodecFamily: ICodecFamily<ModularChangeset, ChangeEncodingContext>,
46
+ modularChangeCodecFamily: ICodecFamily<
47
+ ModularChangeset,
48
+ ChangeEncodingContext,
49
+ ChangeDecodingContext
50
+ >,
43
51
  options: CodecWriteOptions,
44
- ): ICodecFamily<SharedTreeChange, ChangeEncodingContext> {
52
+ ): ICodecFamily<SharedTreeChange, ChangeEncodingContext, ChangeDecodingContext> {
45
53
  const versions: [
46
54
  FormatVersion,
47
55
  IJsonCodec<
@@ -9,6 +9,7 @@ import type { IIdCompressor } from "@fluidframework/id-compressor";
9
9
  import type { CodecWriteOptions, ICodecFamily } from "../codec/index.js";
10
10
  import {
11
11
  type ChangeEncodingContext,
12
+ type ChangeDecodingContext,
12
13
  type ChangeFamily,
13
14
  type ChangeRebaser,
14
15
  type DeltaDetachedNodeId,
@@ -18,6 +19,7 @@ import {
18
19
  type RevisionTagCodec,
19
20
  type TaggedChange,
20
21
  mapTaggedChange,
22
+ type ProcessChangeFn,
21
23
  } from "../core/index.js";
22
24
  import {
23
25
  type FieldBatchCodec,
@@ -41,6 +43,10 @@ import { makeSharedTreeChangeCodecFamily } from "./sharedTreeChangeCodecs.js";
41
43
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
42
44
  import { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
43
45
 
46
+ export interface SharedTreeChangeProcessingContext {
47
+ modularChangeFamily: ModularChangeFamily;
48
+ }
49
+
44
50
  /**
45
51
  * Implementation of {@link ChangeFamily} that combines edits to fields and schema changes.
46
52
  *
@@ -48,14 +54,18 @@ import { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
48
54
  */
49
55
  export class SharedTreeChangeFamily
50
56
  implements
51
- ChangeFamily<SharedTreeEditBuilder, SharedTreeChange>,
57
+ ChangeFamily<SharedTreeEditBuilder, SharedTreeChange, SharedTreeChangeProcessingContext>,
52
58
  ChangeRebaser<SharedTreeChange>
53
59
  {
54
60
  public static readonly emptyChange: SharedTreeChange = {
55
61
  changes: [],
56
62
  };
57
63
 
58
- public readonly codecs: ICodecFamily<SharedTreeChange, ChangeEncodingContext>;
64
+ public readonly codecs: ICodecFamily<
65
+ SharedTreeChange,
66
+ ChangeEncodingContext,
67
+ ChangeDecodingContext
68
+ >;
59
69
  private readonly modularChangeFamily: ModularChangeFamily;
60
70
 
61
71
  public constructor(
@@ -94,6 +104,15 @@ export class SharedTreeChangeFamily
94
104
  );
95
105
  }
96
106
 
107
+ public buildProcessor(
108
+ processFn: ProcessChangeFn<SharedTreeChange, SharedTreeChangeProcessingContext>,
109
+ ): (change: SharedTreeChange) => SharedTreeChange {
110
+ return (change: SharedTreeChange) =>
111
+ processFn(change, {
112
+ modularChangeFamily: this.modularChangeFamily,
113
+ });
114
+ }
115
+
97
116
  public compose(changes: TaggedChange<SharedTreeChange>[]): SharedTreeChange {
98
117
  const newChanges: Mutable<SharedTreeChange["changes"]> = [];
99
118
  const dataChangeRun: TaggedChange<ModularChangeset>[] = [];
@@ -342,3 +361,59 @@ export function updateRefreshers(
342
361
  }
343
362
  });
344
363
  }
364
+
365
+ /**
366
+ * The status of a {@link SharedTreeChange} with respect to its constraints.
367
+ */
368
+ export enum ConstraintStatus {
369
+ /**
370
+ * All constraints are satisfied.
371
+ */
372
+ Satisfied,
373
+ /**
374
+ * At least one implicit constraint has been violated.
375
+ * @remarks
376
+ * Implicit constraints are those that are automatically enforced by SharedTree on all changes.
377
+ *
378
+ * Such a violation typically arises in one of two scenarios:
379
+ * 1. A schema change conflicts with a concurrent data or schema change that was sequenced before it.
380
+ * 2. A data change conflicts with a concurrent schema change that was sequenced before it.
381
+ */
382
+ ImplicitViolation,
383
+ /**
384
+ * At least one explicit constraint has been violated.
385
+ * @remarks
386
+ * Explicit constraints are those that are explicitly added
387
+ * through {@link RunTransactionParamsAlpha.preconditions | preconditions}
388
+ * or {@link TransactionCallbackStatusAlpha.preconditionsOnRevert | preconditionsOnRevert}.
389
+ */
390
+ ExplicitViolation,
391
+ }
392
+
393
+ /**
394
+ * Gets the constraint status of a shared tree change.
395
+ * @param change - The shared tree change to evaluate.
396
+ * @returns The constraint status of the change.
397
+ */
398
+ export function getConstraintStatus(change: SharedTreeChange): ConstraintStatus {
399
+ if (change.changes.length === 0) {
400
+ // The SharedTreeChange format (both in memory and over the wire) has no way to convey implicit constraint violation.
401
+ // Instead, the current rebase implementation in SharedTreeChangeFamily produces an empty change.
402
+ // This is not ideal because there is no guarantee that an empty change didn't just start out that way.
403
+ // There is currently only one way to generate an empty change that isn't a result of an implicit constraint violation:
404
+ // when the SharedTreeChangeFamily is wrapped in makeMitigatedChangeFamily, an empty change is produced when an error occurs.
405
+ // This is unlikely to cause problems for this logic for two reasons:
406
+ // 1. Such an error will put SharedTree into a broken state, halting further operations.
407
+ // 2. It is reasonable to treat a changeset whose production triggered an error as having violated the implicit constraints in our code.
408
+ return ConstraintStatus.ImplicitViolation;
409
+ }
410
+ if (
411
+ change.changes.some(
412
+ ({ type, innerChange }) =>
413
+ type === "data" && (innerChange.constraintViolationCount ?? 0) > 0,
414
+ )
415
+ ) {
416
+ return ConstraintStatus.ExplicitViolation;
417
+ }
418
+ return ConstraintStatus.Satisfied;
419
+ }
@@ -5,13 +5,14 @@
5
5
 
6
6
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
7
7
 
8
- import { fieldKinds, minimizeModularChangeset } from "../feature-libraries/index.js";
8
+ import { minimizeModularChangeset } from "../feature-libraries/index.js";
9
9
  import { ChangeProcessorApplicability } from "../shared-tree-core/index.js";
10
10
  import type { TransactionPostProcessor } from "../simple-tree/index.js";
11
11
 
12
12
  import { mapDataChanges } from "./sharedTreeChangeFamily.js";
13
13
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
14
14
  import { createTransactionPostProcessor } from "./transactionPostProcessor.js";
15
+ import type { SharedTreeChangeProcessingContext } from "./sharedTreeChangeFamily.js";
15
16
 
16
17
  /**
17
18
  * "Minimizes" a {@link SharedTreeChange} so that it contains no extraneous
@@ -26,7 +27,10 @@ import { createTransactionPostProcessor } from "./transactionPostProcessor.js";
26
27
  *
27
28
  * Schema changes are left unchanged.
28
29
  */
29
- function minimizeSharedTreeChange(change: SharedTreeChange): SharedTreeChange {
30
+ function minimizeSharedTreeChange(
31
+ change: SharedTreeChange,
32
+ context: SharedTreeChangeProcessingContext,
33
+ ): SharedTreeChange {
30
34
  const countOfDataChanges = change.changes.filter(
31
35
  (innerChange) => innerChange.type === "data",
32
36
  ).length;
@@ -36,7 +40,7 @@ function minimizeSharedTreeChange(change: SharedTreeChange): SharedTreeChange {
36
40
  );
37
41
  }
38
42
  return mapDataChanges(change, (dataChange) =>
39
- minimizeModularChangeset(dataChange, fieldKinds),
43
+ minimizeModularChangeset(dataChange, context.modularChangeFamily),
40
44
  );
41
45
  }
42
46
 
@@ -5,6 +5,7 @@
5
5
 
6
6
  import type { ChangeProcessor } from "../shared-tree-core/index.js";
7
7
  import type { TransactionPostProcessor } from "../simple-tree/index.js";
8
+ import type { SharedTreeChangeProcessingContext } from "./sharedTreeChangeFamily.js";
8
9
 
9
10
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
10
11
 
@@ -13,7 +14,10 @@ import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
13
14
  * {@link SharedTreeChange}.
14
15
  * @remarks This is the (non-type-erased) form used internally to apply a transaction's post-processor.
15
16
  */
16
- export type TransactionPostProcessorInternal = ChangeProcessor<SharedTreeChange>;
17
+ export type TransactionPostProcessorInternal = ChangeProcessor<
18
+ SharedTreeChange,
19
+ SharedTreeChangeProcessingContext
20
+ >;
17
21
 
18
22
  /**
19
23
  * Type-erases an internal {@link TransactionPostProcessorInternal | change processor} as a public
@@ -114,6 +114,7 @@ import {
114
114
 
115
115
  import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
116
116
  import { SharedTreeChangeEnricher } from "./sharedTreeChangeEnricher.js";
117
+ import type { SharedTreeChangeProcessingContext } from "./sharedTreeChangeFamily.js";
117
118
  import { SharedTreeChangeFamily, hasSchemaChange } from "./sharedTreeChangeFamily.js";
118
119
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
119
120
  import type { ISharedTreeEditor, SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
@@ -210,7 +211,9 @@ export interface CheckoutEvents {
210
211
  /**
211
212
  * A collection of functions for managing transactions on a {@link ITreeCheckout}.
212
213
  */
213
- export type TreeTransactor = Transactor<SquashingTransactionOptions<SharedTreeChange>>;
214
+ export type TreeTransactor = Transactor<
215
+ SquashingTransactionOptions<SharedTreeChange, SharedTreeChangeProcessingContext>
216
+ >;
214
217
 
215
218
  /**
216
219
  * Provides a means for interacting with a SharedTree.
@@ -305,8 +308,16 @@ export function createTreeCheckout(
305
308
  mintRevisionTag: () => RevisionTag,
306
309
  revisionTagCodec: RevisionTagCodec,
307
310
  args?: {
308
- branch?: SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>;
309
- changeFamily?: ChangeFamily<SharedTreeEditBuilder, SharedTreeChange>;
311
+ branch?: SharedTreeBranch<
312
+ SharedTreeEditBuilder,
313
+ SharedTreeChange,
314
+ SharedTreeChangeProcessingContext
315
+ >;
316
+ changeFamily?: ChangeFamily<
317
+ SharedTreeEditBuilder,
318
+ SharedTreeChange,
319
+ SharedTreeChangeProcessingContext
320
+ >;
310
321
  schema?: TreeStoredSchemaRepository;
311
322
  forest?: IEditableForest;
312
323
  fieldBatchCodec?: FieldBatchCodec;
@@ -501,7 +512,11 @@ export class TreeCheckout implements ITreeCheckout {
501
512
  */
502
513
  private readonly revertibleCommitBranches = new Map<
503
514
  RevisionTag,
504
- SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>
515
+ SharedTreeBranch<
516
+ SharedTreeEditBuilder,
517
+ SharedTreeChange,
518
+ SharedTreeChangeProcessingContext
519
+ >
505
520
  >();
506
521
 
507
522
  /**
@@ -514,20 +529,24 @@ export class TreeCheckout implements ITreeCheckout {
514
529
  public events: Listenable<CheckoutEvents> = this.#events;
515
530
 
516
531
  public constructor(
517
- branch: SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>,
532
+ branch: SharedTreeBranch<
533
+ SharedTreeEditBuilder,
534
+ SharedTreeChange,
535
+ SharedTreeChangeProcessingContext
536
+ >,
518
537
  /** True if and only if this checkout is for a branch which is persisted and shared with other clients. */
519
538
  public readonly isSharedBranch: boolean,
520
- private readonly changeFamily: ChangeFamily<SharedTreeEditBuilder, SharedTreeChange>,
539
+ private readonly changeFamily: ChangeFamily<
540
+ SharedTreeEditBuilder,
541
+ SharedTreeChange,
542
+ SharedTreeChangeProcessingContext
543
+ >,
521
544
  public readonly storedSchema: TreeStoredSchemaRepository,
522
545
  public readonly forest: IEditableForest,
523
546
  private readonly mintRevisionTag: () => RevisionTag,
524
547
  private readonly revisionTagCodec: RevisionTagCodec,
525
548
  private readonly idCompressor: IIdCompressor,
526
- private readonly _removedRoots: DetachedFieldIndex = makeDetachedFieldIndex(
527
- "repair",
528
- revisionTagCodec,
529
- idCompressor,
530
- ),
549
+ private readonly _removedRoots: DetachedFieldIndex = makeDetachedFieldIndex("repair"),
531
550
  /** Optional logger for telemetry. */
532
551
  private readonly logger?: TelemetryLoggerExt,
533
552
  public readonly breaker: Breakable = new Breakable("TreeCheckout", logger),
@@ -660,8 +679,16 @@ export class TreeCheckout implements ITreeCheckout {
660
679
  }
661
680
 
662
681
  private createTransactionStack(
663
- branch: SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>,
664
- ): SquashingTransactionStack<SharedTreeEditBuilder, SharedTreeChange> {
682
+ branch: SharedTreeBranch<
683
+ SharedTreeEditBuilder,
684
+ SharedTreeChange,
685
+ SharedTreeChangeProcessingContext
686
+ >,
687
+ ): SquashingTransactionStack<
688
+ SharedTreeEditBuilder,
689
+ SharedTreeChange,
690
+ SharedTreeChangeProcessingContext
691
+ > {
665
692
  return new SquashingTransactionStack(branch, this.mintRevisionTag, () => {
666
693
  // When each transaction is started, make a restorable checkpoint of the current state of removed roots
667
694
  const restoreRemovedRoots = this._removedRoots.createCheckpoint();
@@ -1187,7 +1214,11 @@ export class TreeCheckout implements ITreeCheckout {
1187
1214
  * To avoid updating observers of the view state with intermediate results during a transaction,
1188
1215
  * use {@link ITreeCheckout#fork} and {@link ISharedTreeFork#merge}.
1189
1216
  */
1190
- #transaction: SquashingTransactionStack<SharedTreeEditBuilder, SharedTreeChange>;
1217
+ #transaction: SquashingTransactionStack<
1218
+ SharedTreeEditBuilder,
1219
+ SharedTreeChange,
1220
+ SharedTreeChangeProcessingContext
1221
+ >;
1191
1222
 
1192
1223
  @throwIfBroken
1193
1224
  public fork(): TreeCheckout {
@@ -1221,7 +1252,11 @@ export class TreeCheckout implements ITreeCheckout {
1221
1252
  }
1222
1253
 
1223
1254
  public switchBranch(
1224
- branch: SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>,
1255
+ branch: SharedTreeBranch<
1256
+ SharedTreeEditBuilder,
1257
+ SharedTreeChange,
1258
+ SharedTreeChangeProcessingContext
1259
+ >,
1225
1260
  ): void {
1226
1261
  // TODO: Dispose old branch, if necessary
1227
1262
  assert(
@@ -1648,7 +1683,11 @@ export class TreeCheckout implements ITreeCheckout {
1648
1683
  return enriched;
1649
1684
  }
1650
1685
 
1651
- public get mainBranch(): SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange> {
1686
+ public get mainBranch(): SharedTreeBranch<
1687
+ SharedTreeEditBuilder,
1688
+ SharedTreeChange,
1689
+ SharedTreeChangeProcessingContext
1690
+ > {
1652
1691
  return this.#transaction.branch;
1653
1692
  }
1654
1693
 
@@ -61,8 +61,11 @@ export type SharedTreeBranchChange<TChange> =
61
61
  /**
62
62
  * The events emitted by a `SharedTreeBranch`
63
63
  */
64
- export interface SharedTreeBranchEvents<TEditor extends ChangeFamilyEditor, TChange>
65
- extends BranchTrimmingEvents {
64
+ export interface SharedTreeBranchEvents<
65
+ TEditor extends ChangeFamilyEditor,
66
+ TChange,
67
+ TChangeProcessingContext,
68
+ > extends BranchTrimmingEvents {
66
69
  /**
67
70
  * Fired just before the head of this branch changes.
68
71
  * @param change - the change to this branch's state and commits
@@ -79,7 +82,17 @@ export interface SharedTreeBranchEvents<TEditor extends ChangeFamilyEditor, TCha
79
82
  * Fired when this branch forks
80
83
  * @param fork - the new branch that forked off of this branch
81
84
  */
82
- fork(fork: SharedTreeBranch<TEditor, TChange>): void;
85
+ fork(fork: SharedTreeBranch<TEditor, TChange, TChangeProcessingContext>): void;
86
+
87
+ /**
88
+ * Fired when a commit is ordered by the sequencing service.
89
+ *
90
+ * @remarks
91
+ * Once a commit is sequenced, the following guarantees hold:
92
+ * 1. The changes carried by the commit have been persisted and other peers are able to see them.
93
+ * 2. There can be no more concurrent changes sequenced before this commit, which means this commit has reached its settled form.
94
+ */
95
+ commitSequenced(commit: GraphCommit<TChange>): void;
83
96
 
84
97
  /**
85
98
  * Fired after this branch is disposed
@@ -107,9 +120,16 @@ export interface BranchTrimmingEvents {
107
120
  /**
108
121
  * A branch of changes that can be applied to a SharedTree.
109
122
  */
110
- export class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChange> {
111
- readonly #events = createEmitter<SharedTreeBranchEvents<TEditor, TChange>>();
112
- public readonly events: Listenable<SharedTreeBranchEvents<TEditor, TChange>> = this.#events;
123
+ export class SharedTreeBranch<
124
+ TEditor extends ChangeFamilyEditor,
125
+ TChange,
126
+ TChangeProcessingContext,
127
+ > {
128
+ readonly #events =
129
+ createEmitter<SharedTreeBranchEvents<TEditor, TChange, TChangeProcessingContext>>();
130
+ public readonly events: Listenable<
131
+ SharedTreeBranchEvents<TEditor, TChange, TChangeProcessingContext>
132
+ > = this.#events;
113
133
  public readonly editor: TEditor;
114
134
  private disposed = false;
115
135
  private readonly unsubscribeBranchTrimmer?: () => void;
@@ -123,7 +143,7 @@ export class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChange> {
123
143
  */
124
144
  public constructor(
125
145
  private head: GraphCommit<TChange>,
126
- public readonly changeFamily: ChangeFamily<TEditor, TChange>,
146
+ public readonly changeFamily: ChangeFamily<TEditor, TChange, TChangeProcessingContext>,
127
147
  private readonly mintRevisionTag: () => RevisionTag,
128
148
  private readonly branchTrimmer?: Listenable<BranchTrimmingEvents>,
129
149
  private readonly telemetryEventBatcher?: TelemetryEventBatcher<
@@ -177,6 +197,14 @@ export class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChange> {
177
197
  this.#events.emit("afterChange", changeEvent);
178
198
  }
179
199
 
200
+ /**
201
+ * Notifies the branch that a commit has been sequenced by the sequencing service.
202
+ * @param commit - The commit that was sequenced
203
+ */
204
+ public commitWasSequenced(commit: GraphCommit<TChange>): void {
205
+ this.#events.emit("commitSequenced", commit);
206
+ }
207
+
180
208
  /**
181
209
  * Gets the commit at the head of this branch.
182
210
  */
@@ -194,7 +222,7 @@ export class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChange> {
194
222
  public fork(
195
223
  commit: GraphCommit<TChange> = this.head,
196
224
  mintRevisionTag: () => RevisionTag = this.mintRevisionTag,
197
- ): SharedTreeBranch<TEditor, TChange> {
225
+ ): SharedTreeBranch<TEditor, TChange, TChangeProcessingContext> {
198
226
  this.assertNotDisposed();
199
227
  const fork = new SharedTreeBranch(
200
228
  commit,
@@ -215,7 +243,7 @@ export class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChange> {
215
243
  * @returns the result of the rebase or undefined if nothing changed
216
244
  */
217
245
  public rebaseOnto(
218
- branch: SharedTreeBranch<TEditor, TChange>,
246
+ branch: SharedTreeBranch<TEditor, TChange, TChangeProcessingContext>,
219
247
  upTo = branch.getHead(),
220
248
  ): void {
221
249
  this.assertNotDisposed();
@@ -291,7 +319,7 @@ export class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChange> {
291
319
  * @returns the commits that were added to this branch by the merge, or undefined if nothing changed
292
320
  */
293
321
  public merge(
294
- branch: SharedTreeBranch<TEditor, TChange>,
322
+ branch: SharedTreeBranch<TEditor, TChange, TChangeProcessingContext>,
295
323
  ): { sourceCommits: GraphCommit<TChange>[] } | undefined {
296
324
  this.assertNotDisposed();
297
325
  branch.assertNotDisposed();
@@ -328,8 +356,8 @@ export class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChange> {
328
356
 
329
357
  /** Rebase `branchHead` onto `onto`, but return undefined if nothing changed */
330
358
  private rebaseBranch(
331
- branch: SharedTreeBranch<TEditor, TChange>,
332
- onto: SharedTreeBranch<TEditor, TChange>,
359
+ branch: SharedTreeBranch<TEditor, TChange, TChangeProcessingContext>,
360
+ onto: SharedTreeBranch<TEditor, TChange, TChangeProcessingContext>,
333
361
  upTo = onto.getHead(),
334
362
  ): BranchRebaseResult<TChange> | undefined {
335
363
  const { head } = branch;