@fluidframework/tree 2.4.0-297027 → 2.4.0-299374

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 (559) hide show
  1. package/.dependency-cruiser-known-violations.json +0 -14
  2. package/.vscode/settings.json +9 -1
  3. package/api-report/tree.alpha.api.md +178 -21
  4. package/api-report/tree.beta.api.md +46 -21
  5. package/api-report/tree.legacy.alpha.api.md +46 -21
  6. package/api-report/tree.legacy.public.api.md +46 -21
  7. package/api-report/tree.public.api.md +46 -21
  8. package/dist/alpha.d.ts +29 -1
  9. package/dist/beta.d.ts +2 -0
  10. package/dist/codec/codec.d.ts +4 -4
  11. package/dist/codec/codec.js.map +1 -1
  12. package/dist/codec/noopValidator.d.ts +1 -1
  13. package/dist/codec/noopValidator.js +1 -1
  14. package/dist/codec/noopValidator.js.map +1 -1
  15. package/dist/core/change-family/changeFamily.d.ts +2 -2
  16. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  17. package/dist/core/change-family/changeFamily.js.map +1 -1
  18. package/dist/core/change-family/editBuilder.d.ts +3 -2
  19. package/dist/core/change-family/editBuilder.d.ts.map +1 -1
  20. package/dist/core/change-family/editBuilder.js.map +1 -1
  21. package/dist/core/rebase/changeRebaser.d.ts +2 -1
  22. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  23. package/dist/core/rebase/changeRebaser.js.map +1 -1
  24. package/dist/core/rebase/utils.js +1 -1
  25. package/dist/core/rebase/utils.js.map +1 -1
  26. package/dist/core/tree/anchorSet.d.ts +159 -2
  27. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  28. package/dist/core/tree/anchorSet.js +54 -12
  29. package/dist/core/tree/anchorSet.js.map +1 -1
  30. package/dist/external-utilities/typeboxValidator.d.ts +1 -1
  31. package/dist/external-utilities/typeboxValidator.js +1 -1
  32. package/dist/external-utilities/typeboxValidator.js.map +1 -1
  33. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +4 -3
  34. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  35. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +41 -30
  36. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  37. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +4 -6
  38. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  39. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  40. package/dist/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  41. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  42. package/dist/feature-libraries/flex-tree/lazyField.js +38 -6
  43. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  44. package/dist/feature-libraries/index.d.ts +0 -1
  45. package/dist/feature-libraries/index.d.ts.map +1 -1
  46. package/dist/feature-libraries/index.js +46 -49
  47. package/dist/feature-libraries/index.js.map +1 -1
  48. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  49. package/dist/feature-libraries/mitigatedChangeFamily.js +4 -4
  50. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  51. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +1 -1
  52. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  53. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  54. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +12 -8
  55. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  56. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +179 -60
  57. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  58. package/dist/feature-libraries/optional-field/optionalField.d.ts +10 -9
  59. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  60. package/dist/feature-libraries/optional-field/optionalField.js +9 -7
  61. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  62. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -10
  63. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  64. package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -8
  65. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  66. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  67. package/dist/feature-libraries/sequence-field/compose.js +32 -20
  68. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  69. package/dist/feature-libraries/sequence-field/invert.d.ts +6 -1
  70. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  71. package/dist/feature-libraries/sequence-field/invert.js +25 -9
  72. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  73. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +17 -16
  74. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  75. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +19 -11
  76. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  77. package/dist/feature-libraries/treeCompressionUtils.d.ts +1 -1
  78. package/dist/feature-libraries/treeCompressionUtils.js +1 -1
  79. package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
  80. package/dist/index.d.ts +6 -5
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +4 -2
  83. package/dist/index.js.map +1 -1
  84. package/dist/internalTypes.d.ts +2 -2
  85. package/dist/internalTypes.d.ts.map +1 -1
  86. package/dist/internalTypes.js.map +1 -1
  87. package/dist/legacy.d.ts +2 -0
  88. package/dist/packageVersion.d.ts +1 -1
  89. package/dist/packageVersion.js +1 -1
  90. package/dist/packageVersion.js.map +1 -1
  91. package/dist/public.d.ts +2 -0
  92. package/dist/shared-tree/index.d.ts +2 -1
  93. package/dist/shared-tree/index.d.ts.map +1 -1
  94. package/dist/shared-tree/index.js +5 -1
  95. package/dist/shared-tree/index.js.map +1 -1
  96. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  97. package/dist/shared-tree/schematizingTreeView.js +1 -14
  98. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  99. package/dist/shared-tree/sharedTree.d.ts +24 -9
  100. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  101. package/dist/shared-tree/sharedTree.js +21 -9
  102. package/dist/shared-tree/sharedTree.js.map +1 -1
  103. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  104. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  105. package/dist/shared-tree/sharedTreeChangeFamily.js +4 -4
  106. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  107. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +2 -2
  108. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  109. package/dist/shared-tree/sharedTreeEditBuilder.js +15 -11
  110. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  111. package/dist/shared-tree/treeApi.d.ts +6 -6
  112. package/dist/shared-tree/treeApi.d.ts.map +1 -1
  113. package/dist/shared-tree/treeApi.js.map +1 -1
  114. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  115. package/dist/shared-tree/treeCheckout.js +4 -3
  116. package/dist/shared-tree/treeCheckout.js.map +1 -1
  117. package/dist/shared-tree-core/branch.d.ts +2 -3
  118. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  119. package/dist/shared-tree-core/branch.js +10 -11
  120. package/dist/shared-tree-core/branch.js.map +1 -1
  121. package/dist/shared-tree-core/defaultResubmitMachine.d.ts +5 -5
  122. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  123. package/dist/shared-tree-core/defaultResubmitMachine.js +4 -4
  124. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  125. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  126. package/dist/shared-tree-core/editManager.js +1 -1
  127. package/dist/shared-tree-core/editManager.js.map +1 -1
  128. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  129. package/dist/shared-tree-core/sharedTreeCore.js +2 -2
  130. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  131. package/dist/simple-tree/api/conciseTree.d.ts +29 -0
  132. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -0
  133. package/dist/simple-tree/api/conciseTree.js +25 -0
  134. package/dist/simple-tree/api/conciseTree.js.map +1 -0
  135. package/dist/simple-tree/api/customTree.d.ts +44 -0
  136. package/dist/simple-tree/api/customTree.d.ts.map +1 -0
  137. package/dist/simple-tree/api/customTree.js +63 -0
  138. package/dist/simple-tree/api/customTree.js.map +1 -0
  139. package/dist/simple-tree/api/index.d.ts +7 -2
  140. package/dist/simple-tree/api/index.d.ts.map +1 -1
  141. package/dist/simple-tree/api/index.js +5 -1
  142. package/dist/simple-tree/api/index.js.map +1 -1
  143. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  144. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  145. package/dist/simple-tree/api/schemaCreationUtilities.js +43 -15
  146. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  147. package/dist/simple-tree/api/schemaFactory.d.ts +1 -2
  148. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  149. package/dist/simple-tree/api/schemaFactory.js +8 -8
  150. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  151. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  152. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  153. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  154. package/dist/simple-tree/api/storedSchema.d.ts +78 -0
  155. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -0
  156. package/dist/simple-tree/api/storedSchema.js +107 -0
  157. package/dist/simple-tree/api/storedSchema.js.map +1 -0
  158. package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  159. package/dist/simple-tree/api/tree.d.ts +12 -3
  160. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  161. package/dist/simple-tree/api/tree.js.map +1 -1
  162. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  163. package/dist/simple-tree/api/treeNodeApi.js +5 -5
  164. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  165. package/dist/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
  166. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  167. package/dist/simple-tree/api/typesUnsafe.js.map +1 -0
  168. package/dist/simple-tree/api/verboseTree.d.ts +6 -20
  169. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  170. package/dist/simple-tree/api/verboseTree.js +10 -48
  171. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  172. package/dist/simple-tree/arrayNode.d.ts +14 -3
  173. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  174. package/dist/simple-tree/arrayNode.js +1 -2
  175. package/dist/simple-tree/arrayNode.js.map +1 -1
  176. package/dist/simple-tree/core/index.d.ts +1 -1
  177. package/dist/simple-tree/core/index.d.ts.map +1 -1
  178. package/dist/simple-tree/core/index.js +2 -1
  179. package/dist/simple-tree/core/index.js.map +1 -1
  180. package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -0
  181. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  182. package/dist/simple-tree/core/treeNodeKernel.js +14 -1
  183. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  184. package/dist/simple-tree/core/treeNodeSchema.d.ts +6 -5
  185. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  186. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  187. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  188. package/dist/simple-tree/core/unhydratedFlexTree.js +3 -1
  189. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  190. package/dist/simple-tree/core/withType.d.ts +3 -1
  191. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  192. package/dist/simple-tree/core/withType.js.map +1 -1
  193. package/dist/simple-tree/flexList.d.ts.map +1 -0
  194. package/dist/simple-tree/flexList.js.map +1 -0
  195. package/dist/simple-tree/index.d.ts +6 -7
  196. package/dist/simple-tree/index.d.ts.map +1 -1
  197. package/dist/simple-tree/index.js +5 -3
  198. package/dist/simple-tree/index.js.map +1 -1
  199. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  200. package/dist/simple-tree/mapNode.js +2 -3
  201. package/dist/simple-tree/mapNode.js.map +1 -1
  202. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  203. package/dist/simple-tree/objectNode.js +3 -4
  204. package/dist/simple-tree/objectNode.js.map +1 -1
  205. package/dist/simple-tree/schemaTypes.d.ts +60 -7
  206. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  207. package/dist/simple-tree/schemaTypes.js +11 -6
  208. package/dist/simple-tree/schemaTypes.js.map +1 -1
  209. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  210. package/dist/simple-tree/toFlexSchema.js +13 -15
  211. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  212. package/dist/simple-tree/toMapTree.d.ts +4 -2
  213. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  214. package/dist/simple-tree/toMapTree.js +3 -3
  215. package/dist/simple-tree/toMapTree.js.map +1 -1
  216. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  217. package/dist/simple-tree/treeNodeValid.js +2 -1
  218. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  219. package/dist/treeFactory.d.ts +1 -0
  220. package/dist/treeFactory.d.ts.map +1 -1
  221. package/dist/treeFactory.js +1 -0
  222. package/dist/treeFactory.js.map +1 -1
  223. package/dist/util/utils.d.ts +10 -8
  224. package/dist/util/utils.d.ts.map +1 -1
  225. package/dist/util/utils.js.map +1 -1
  226. package/docs/main/detached-trees.md +8 -8
  227. package/lib/alpha.d.ts +29 -1
  228. package/lib/beta.d.ts +2 -0
  229. package/lib/codec/codec.d.ts +4 -4
  230. package/lib/codec/codec.js.map +1 -1
  231. package/lib/codec/noopValidator.d.ts +1 -1
  232. package/lib/codec/noopValidator.js +1 -1
  233. package/lib/codec/noopValidator.js.map +1 -1
  234. package/lib/core/change-family/changeFamily.d.ts +2 -2
  235. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  236. package/lib/core/change-family/changeFamily.js.map +1 -1
  237. package/lib/core/change-family/editBuilder.d.ts +3 -2
  238. package/lib/core/change-family/editBuilder.d.ts.map +1 -1
  239. package/lib/core/change-family/editBuilder.js.map +1 -1
  240. package/lib/core/rebase/changeRebaser.d.ts +2 -1
  241. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  242. package/lib/core/rebase/changeRebaser.js.map +1 -1
  243. package/lib/core/rebase/utils.js +1 -1
  244. package/lib/core/rebase/utils.js.map +1 -1
  245. package/lib/core/tree/anchorSet.d.ts +159 -2
  246. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  247. package/lib/core/tree/anchorSet.js +54 -12
  248. package/lib/core/tree/anchorSet.js.map +1 -1
  249. package/lib/external-utilities/typeboxValidator.d.ts +1 -1
  250. package/lib/external-utilities/typeboxValidator.js +1 -1
  251. package/lib/external-utilities/typeboxValidator.js.map +1 -1
  252. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +4 -3
  253. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  254. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +41 -30
  255. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  256. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +4 -6
  257. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  258. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  259. package/lib/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  260. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  261. package/lib/feature-libraries/flex-tree/lazyField.js +36 -5
  262. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  263. package/lib/feature-libraries/index.d.ts +0 -1
  264. package/lib/feature-libraries/index.d.ts.map +1 -1
  265. package/lib/feature-libraries/index.js +0 -1
  266. package/lib/feature-libraries/index.js.map +1 -1
  267. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  268. package/lib/feature-libraries/mitigatedChangeFamily.js +4 -4
  269. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  270. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +1 -1
  271. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  272. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  273. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +12 -8
  274. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  275. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +180 -61
  276. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  277. package/lib/feature-libraries/optional-field/optionalField.d.ts +10 -9
  278. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  279. package/lib/feature-libraries/optional-field/optionalField.js +9 -7
  280. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  281. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -10
  282. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  283. package/lib/feature-libraries/schema-index/schemaSummarizer.js +1 -8
  284. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  285. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  286. package/lib/feature-libraries/sequence-field/compose.js +32 -20
  287. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  288. package/lib/feature-libraries/sequence-field/invert.d.ts +6 -1
  289. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  290. package/lib/feature-libraries/sequence-field/invert.js +25 -9
  291. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  292. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +17 -16
  293. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  294. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +19 -11
  295. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  296. package/lib/feature-libraries/treeCompressionUtils.d.ts +1 -1
  297. package/lib/feature-libraries/treeCompressionUtils.js +1 -1
  298. package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
  299. package/lib/index.d.ts +6 -5
  300. package/lib/index.d.ts.map +1 -1
  301. package/lib/index.js +3 -3
  302. package/lib/index.js.map +1 -1
  303. package/lib/internalTypes.d.ts +2 -2
  304. package/lib/internalTypes.d.ts.map +1 -1
  305. package/lib/internalTypes.js.map +1 -1
  306. package/lib/legacy.d.ts +2 -0
  307. package/lib/packageVersion.d.ts +1 -1
  308. package/lib/packageVersion.js +1 -1
  309. package/lib/packageVersion.js.map +1 -1
  310. package/lib/public.d.ts +2 -0
  311. package/lib/shared-tree/index.d.ts +2 -1
  312. package/lib/shared-tree/index.d.ts.map +1 -1
  313. package/lib/shared-tree/index.js +2 -1
  314. package/lib/shared-tree/index.js.map +1 -1
  315. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  316. package/lib/shared-tree/schematizingTreeView.js +2 -15
  317. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  318. package/lib/shared-tree/sharedTree.d.ts +24 -9
  319. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  320. package/lib/shared-tree/sharedTree.js +20 -9
  321. package/lib/shared-tree/sharedTree.js.map +1 -1
  322. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  323. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  324. package/lib/shared-tree/sharedTreeChangeFamily.js +4 -4
  325. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  326. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +2 -2
  327. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  328. package/lib/shared-tree/sharedTreeEditBuilder.js +15 -11
  329. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  330. package/lib/shared-tree/treeApi.d.ts +6 -6
  331. package/lib/shared-tree/treeApi.d.ts.map +1 -1
  332. package/lib/shared-tree/treeApi.js.map +1 -1
  333. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  334. package/lib/shared-tree/treeCheckout.js +5 -4
  335. package/lib/shared-tree/treeCheckout.js.map +1 -1
  336. package/lib/shared-tree-core/branch.d.ts +2 -3
  337. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  338. package/lib/shared-tree-core/branch.js +11 -12
  339. package/lib/shared-tree-core/branch.js.map +1 -1
  340. package/lib/shared-tree-core/defaultResubmitMachine.d.ts +5 -5
  341. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  342. package/lib/shared-tree-core/defaultResubmitMachine.js +4 -4
  343. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  344. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  345. package/lib/shared-tree-core/editManager.js +2 -2
  346. package/lib/shared-tree-core/editManager.js.map +1 -1
  347. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  348. package/lib/shared-tree-core/sharedTreeCore.js +2 -2
  349. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  350. package/lib/simple-tree/api/conciseTree.d.ts +29 -0
  351. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -0
  352. package/lib/simple-tree/api/conciseTree.js +21 -0
  353. package/lib/simple-tree/api/conciseTree.js.map +1 -0
  354. package/lib/simple-tree/api/customTree.d.ts +44 -0
  355. package/lib/simple-tree/api/customTree.d.ts.map +1 -0
  356. package/lib/simple-tree/api/customTree.js +59 -0
  357. package/lib/simple-tree/api/customTree.js.map +1 -0
  358. package/lib/simple-tree/api/index.d.ts +7 -2
  359. package/lib/simple-tree/api/index.d.ts.map +1 -1
  360. package/lib/simple-tree/api/index.js +1 -0
  361. package/lib/simple-tree/api/index.js.map +1 -1
  362. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  363. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  364. package/lib/simple-tree/api/schemaCreationUtilities.js +43 -15
  365. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  366. package/lib/simple-tree/api/schemaFactory.d.ts +1 -2
  367. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  368. package/lib/simple-tree/api/schemaFactory.js +1 -1
  369. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  370. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  371. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  372. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  373. package/lib/simple-tree/api/storedSchema.d.ts +78 -0
  374. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -0
  375. package/lib/simple-tree/api/storedSchema.js +101 -0
  376. package/lib/simple-tree/api/storedSchema.js.map +1 -0
  377. package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  378. package/lib/simple-tree/api/tree.d.ts +12 -3
  379. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  380. package/lib/simple-tree/api/tree.js.map +1 -1
  381. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  382. package/lib/simple-tree/api/treeNodeApi.js +3 -3
  383. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  384. package/lib/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
  385. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  386. package/lib/simple-tree/api/typesUnsafe.js.map +1 -0
  387. package/lib/simple-tree/api/verboseTree.d.ts +6 -20
  388. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  389. package/lib/simple-tree/api/verboseTree.js +11 -49
  390. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  391. package/lib/simple-tree/arrayNode.d.ts +14 -3
  392. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  393. package/lib/simple-tree/arrayNode.js +1 -2
  394. package/lib/simple-tree/arrayNode.js.map +1 -1
  395. package/lib/simple-tree/core/index.d.ts +1 -1
  396. package/lib/simple-tree/core/index.d.ts.map +1 -1
  397. package/lib/simple-tree/core/index.js +1 -1
  398. package/lib/simple-tree/core/index.js.map +1 -1
  399. package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -0
  400. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  401. package/lib/simple-tree/core/treeNodeKernel.js +12 -0
  402. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  403. package/lib/simple-tree/core/treeNodeSchema.d.ts +6 -5
  404. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  405. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  406. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  407. package/lib/simple-tree/core/unhydratedFlexTree.js +3 -1
  408. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  409. package/lib/simple-tree/core/withType.d.ts +3 -1
  410. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  411. package/lib/simple-tree/core/withType.js.map +1 -1
  412. package/lib/simple-tree/flexList.d.ts.map +1 -0
  413. package/lib/simple-tree/flexList.js.map +1 -0
  414. package/lib/simple-tree/index.d.ts +6 -7
  415. package/lib/simple-tree/index.d.ts.map +1 -1
  416. package/lib/simple-tree/index.js +3 -4
  417. package/lib/simple-tree/index.js.map +1 -1
  418. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  419. package/lib/simple-tree/mapNode.js +1 -2
  420. package/lib/simple-tree/mapNode.js.map +1 -1
  421. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  422. package/lib/simple-tree/objectNode.js +1 -2
  423. package/lib/simple-tree/objectNode.js.map +1 -1
  424. package/lib/simple-tree/schemaTypes.d.ts +60 -7
  425. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  426. package/lib/simple-tree/schemaTypes.js +6 -1
  427. package/lib/simple-tree/schemaTypes.js.map +1 -1
  428. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  429. package/lib/simple-tree/toFlexSchema.js +1 -3
  430. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  431. package/lib/simple-tree/toMapTree.d.ts +4 -2
  432. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  433. package/lib/simple-tree/toMapTree.js +3 -3
  434. package/lib/simple-tree/toMapTree.js.map +1 -1
  435. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  436. package/lib/simple-tree/treeNodeValid.js +2 -1
  437. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  438. package/lib/treeFactory.d.ts +1 -0
  439. package/lib/treeFactory.d.ts.map +1 -1
  440. package/lib/treeFactory.js +1 -0
  441. package/lib/treeFactory.js.map +1 -1
  442. package/lib/util/utils.d.ts +10 -8
  443. package/lib/util/utils.d.ts.map +1 -1
  444. package/lib/util/utils.js.map +1 -1
  445. package/package.json +44 -27
  446. package/src/codec/codec.ts +4 -4
  447. package/src/codec/noopValidator.ts +1 -1
  448. package/src/core/change-family/changeFamily.ts +5 -2
  449. package/src/core/change-family/editBuilder.ts +3 -2
  450. package/src/core/rebase/changeRebaser.ts +6 -1
  451. package/src/core/rebase/utils.ts +1 -1
  452. package/src/core/tree/anchorSet.ts +63 -13
  453. package/src/external-utilities/typeboxValidator.ts +1 -1
  454. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +92 -47
  455. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +7 -7
  456. package/src/feature-libraries/flex-tree/lazyField.ts +44 -7
  457. package/src/feature-libraries/index.ts +0 -10
  458. package/src/feature-libraries/mitigatedChangeFamily.ts +11 -4
  459. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +1 -0
  460. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +218 -175
  461. package/src/feature-libraries/optional-field/optionalField.ts +21 -17
  462. package/src/feature-libraries/schema-index/schemaSummarizer.ts +2 -10
  463. package/src/feature-libraries/sequence-field/compose.ts +67 -58
  464. package/src/feature-libraries/sequence-field/invert.ts +30 -6
  465. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +65 -19
  466. package/src/feature-libraries/treeCompressionUtils.ts +1 -1
  467. package/src/index.ts +26 -6
  468. package/src/internalTypes.ts +4 -1
  469. package/src/packageVersion.ts +1 -1
  470. package/src/shared-tree/index.ts +5 -0
  471. package/src/shared-tree/schematizingTreeView.ts +7 -16
  472. package/src/shared-tree/sharedTree.ts +55 -23
  473. package/src/shared-tree/sharedTreeChangeFamily.ts +5 -1
  474. package/src/shared-tree/sharedTreeEditBuilder.ts +23 -12
  475. package/src/shared-tree/treeApi.ts +19 -9
  476. package/src/shared-tree/treeCheckout.ts +7 -6
  477. package/src/shared-tree-core/branch.ts +11 -14
  478. package/src/shared-tree-core/defaultResubmitMachine.ts +4 -4
  479. package/src/shared-tree-core/editManager.ts +2 -1
  480. package/src/shared-tree-core/sharedTreeCore.ts +4 -2
  481. package/src/simple-tree/api/conciseTree.ts +58 -0
  482. package/src/simple-tree/api/customTree.ts +119 -0
  483. package/src/simple-tree/api/index.ts +39 -1
  484. package/src/simple-tree/api/schemaCreationUtilities.ts +55 -36
  485. package/src/simple-tree/api/schemaFactory.ts +4 -6
  486. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -2
  487. package/src/simple-tree/api/storedSchema.ts +126 -0
  488. package/src/simple-tree/api/tree.ts +24 -2
  489. package/src/simple-tree/api/treeNodeApi.ts +3 -8
  490. package/src/simple-tree/{typesUnsafe.ts → api/typesUnsafe.ts} +95 -21
  491. package/src/simple-tree/api/verboseTree.ts +21 -76
  492. package/src/simple-tree/arrayNode.ts +35 -15
  493. package/src/simple-tree/core/index.ts +1 -0
  494. package/src/simple-tree/core/treeNodeKernel.ts +13 -0
  495. package/src/simple-tree/core/treeNodeSchema.ts +7 -5
  496. package/src/simple-tree/core/unhydratedFlexTree.ts +6 -1
  497. package/src/simple-tree/core/withType.ts +10 -1
  498. package/src/simple-tree/index.ts +41 -21
  499. package/src/simple-tree/mapNode.ts +1 -1
  500. package/src/simple-tree/objectNode.ts +1 -1
  501. package/src/simple-tree/schemaTypes.ts +70 -11
  502. package/src/simple-tree/toFlexSchema.ts +1 -3
  503. package/src/simple-tree/toMapTree.ts +7 -4
  504. package/src/simple-tree/treeNodeValid.ts +2 -1
  505. package/src/treeFactory.ts +1 -0
  506. package/src/util/utils.ts +10 -8
  507. package/dist/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  508. package/dist/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  509. package/dist/feature-libraries/flex-tree/unboxed.js +0 -20
  510. package/dist/feature-libraries/flex-tree/unboxed.js.map +0 -1
  511. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  512. package/dist/feature-libraries/typed-schema/flexList.js.map +0 -1
  513. package/dist/feature-libraries/typed-schema/index.d.ts +0 -7
  514. package/dist/feature-libraries/typed-schema/index.d.ts.map +0 -1
  515. package/dist/feature-libraries/typed-schema/index.js +0 -12
  516. package/dist/feature-libraries/typed-schema/index.js.map +0 -1
  517. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  518. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  519. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -7
  520. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  521. package/dist/simple-tree/proxyBinding.d.ts +0 -15
  522. package/dist/simple-tree/proxyBinding.d.ts.map +0 -1
  523. package/dist/simple-tree/proxyBinding.js +0 -22
  524. package/dist/simple-tree/proxyBinding.js.map +0 -1
  525. package/dist/simple-tree/typesUnsafe.d.ts.map +0 -1
  526. package/dist/simple-tree/typesUnsafe.js.map +0 -1
  527. package/lib/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  528. package/lib/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  529. package/lib/feature-libraries/flex-tree/unboxed.js +0 -16
  530. package/lib/feature-libraries/flex-tree/unboxed.js.map +0 -1
  531. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  532. package/lib/feature-libraries/typed-schema/flexList.js.map +0 -1
  533. package/lib/feature-libraries/typed-schema/index.d.ts +0 -7
  534. package/lib/feature-libraries/typed-schema/index.d.ts.map +0 -1
  535. package/lib/feature-libraries/typed-schema/index.js +0 -6
  536. package/lib/feature-libraries/typed-schema/index.js.map +0 -1
  537. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  538. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  539. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +0 -6
  540. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  541. package/lib/simple-tree/proxyBinding.d.ts +0 -15
  542. package/lib/simple-tree/proxyBinding.d.ts.map +0 -1
  543. package/lib/simple-tree/proxyBinding.js +0 -18
  544. package/lib/simple-tree/proxyBinding.js.map +0 -1
  545. package/lib/simple-tree/typesUnsafe.d.ts.map +0 -1
  546. package/lib/simple-tree/typesUnsafe.js.map +0 -1
  547. package/src/feature-libraries/flex-tree/unboxed.ts +0 -24
  548. package/src/feature-libraries/typed-schema/README.md +0 -6
  549. package/src/feature-libraries/typed-schema/index.ts +0 -16
  550. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -14
  551. package/src/simple-tree/proxyBinding.ts +0 -20
  552. /package/dist/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  553. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  554. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  555. /package/lib/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  556. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  557. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  558. /package/src/simple-tree/{ProxyBinding.md → core/TreeNodeBinding.md} +0 -0
  559. /package/src/{feature-libraries/typed-schema → simple-tree}/flexList.ts +0 -0
package/src/index.ts CHANGED
@@ -40,9 +40,7 @@ export {
40
40
  } from "./events/index.js";
41
41
 
42
42
  export {
43
- type LazyItem,
44
43
  TreeStatus,
45
- type Unenforced,
46
44
  TreeCompressionStrategy,
47
45
  } from "./feature-libraries/index.js";
48
46
 
@@ -58,6 +56,7 @@ export {
58
56
  type NodeInDocumentConstraint,
59
57
  type RunTransaction,
60
58
  rollback,
59
+ type ForestOptions,
61
60
  getBranch,
62
61
  type TreeBranch,
63
62
  type TreeBranchFork,
@@ -115,18 +114,25 @@ export {
115
114
  type InsertableObjectFromSchemaRecordUnsafe,
116
115
  type InsertableTreeFieldFromImplicitFieldUnsafe,
117
116
  type FieldSchemaUnsafe,
117
+ type TreeNodeSchemaClassUnsafe,
118
118
  // System types (not in Internal types for various reasons, like doc links or cannot be named errors).
119
119
  type typeSchemaSymbol,
120
120
  type TreeNodeSchemaNonClass,
121
121
  // Recursive Schema APIs
122
122
  type ValidateRecursiveSchema,
123
123
  type FixRecursiveArraySchema,
124
- // experimental @internal APIs:
124
+ // experimental @alpha APIs:
125
125
  adaptEnum,
126
126
  enumFromStrings,
127
127
  singletonSchema,
128
128
  typedObjectValues,
129
- type EmptyObject,
129
+ type UnsafeUnknownSchema,
130
+ type TreeViewAlpha,
131
+ type InsertableField,
132
+ type Insertable,
133
+ type InsertableContent,
134
+ type FactoryContent,
135
+ type FactoryContentObject,
130
136
  // test recursive schema for checking that d.ts files handles schema correctly
131
137
  test_RecursiveObject,
132
138
  test_RecursiveObject_base,
@@ -134,6 +140,8 @@ export {
134
140
  // Beta APIs
135
141
  TreeBeta,
136
142
  type TreeChangeEventsBeta,
143
+ extractPersistedSchema,
144
+ comparePersistedSchema,
137
145
  // Back to normal types
138
146
  type JsonTreeSchema,
139
147
  type JsonSchemaId,
@@ -149,10 +157,20 @@ export {
149
157
  type JsonSchemaType,
150
158
  type JsonLeafSchemaType,
151
159
  getJsonSchema,
160
+ type LazyItem,
161
+ type Unenforced,
162
+ type ReadonlyArrayNode,
152
163
  } from "./simple-tree/index.js";
153
- export { SharedTree, configuredSharedTree } from "./treeFactory.js";
164
+ export {
165
+ SharedTree,
166
+ configuredSharedTree,
167
+ } from "./treeFactory.js";
154
168
 
155
- export type { ICodecOptions, JsonValidator, SchemaValidationFunction } from "./codec/index.js";
169
+ export type {
170
+ ICodecOptions,
171
+ JsonValidator,
172
+ SchemaValidationFunction,
173
+ } from "./codec/index.js";
156
174
  export { noopValidator } from "./codec/index.js";
157
175
  export { typeboxValidator } from "./external-utilities/index.js";
158
176
 
@@ -177,3 +195,5 @@ export {
177
195
  // These would be put in `internalTypes` except doing so tents to cause errors like:
178
196
  // The inferred type of 'NodeMap' cannot be named without a reference to '../../node_modules/@fluidframework/tree/lib/internalTypes.js'. This is likely not portable. A type annotation is necessary.
179
197
  export type { MapNodeInsertableData } from "./simple-tree/index.js";
198
+
199
+ export type { JsonCompatible, JsonCompatibleObject } from "./util/index.js";
@@ -33,7 +33,10 @@ export type {
33
33
  NodeBuilderDataUnsafe,
34
34
  NodeFromSchemaUnsafe,
35
35
  ReadonlyMapInlined,
36
+ TreeNodeSchemaUnsafe,
37
+ AllowedTypesUnsafe,
38
+ TreeNodeSchemaNonClassUnsafe,
36
39
  } from "./simple-tree/index.js";
37
- export type { FlexList, FlexListToUnion, ExtractItemType } from "./feature-libraries/index.js";
40
+ export type { FlexList, FlexListToUnion, ExtractItemType } from "./simple-tree/index.js";
38
41
 
39
42
  export type { TreeApi } from "./shared-tree/index.js";
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/tree";
9
- export const pkgVersion = "2.4.0-297027";
9
+ export const pkgVersion = "2.4.0-299374";
@@ -13,6 +13,9 @@ export {
13
13
  type SharedTreeContentSnapshot,
14
14
  type SharedTreeFormatOptions,
15
15
  SharedTreeFormatVersion,
16
+ buildConfiguredForest,
17
+ defaultSharedTreeOptions,
18
+ type ForestOptions,
16
19
  } from "./sharedTree.js";
17
20
 
18
21
  export {
@@ -29,6 +32,8 @@ export {
29
32
 
30
33
  export { type TreeStoredContent } from "./schematizeTree.js";
31
34
 
35
+ export { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
36
+
32
37
  export { CheckoutFlexTreeView } from "./checkoutFlexTreeView.js";
33
38
 
34
39
  export type { ISharedTreeEditor, ISchemaEditor } from "./sharedTreeEditBuilder.js";
@@ -41,6 +41,7 @@ import {
41
41
  type TreeViewConfiguration,
42
42
  mapTreeFromNodeData,
43
43
  prepareContentForHydration,
44
+ comparePersistedSchemaInternal,
44
45
  toStoredSchema,
45
46
  } from "../simple-tree/index.js";
46
47
  import { Breakable, breakingClass, disposeSymbol, type WithBreakable } from "../util/index.js";
@@ -225,22 +226,12 @@ export class SchematizingSimpleTreeView<in out TRootSchema extends ImplicitField
225
226
  private update(): void {
226
227
  this.disposeView();
227
228
 
228
- const result = this.viewSchema.checkCompatibility(this.checkout.storedSchema);
229
-
230
- // TODO: AB#8121: Weaken this check to support viewing under additional circumstances.
231
- // In the near term, this should support viewing documents with additional optional fields in their schema on object types.
232
- // Longer-term (as demand arises), we could also add APIs to constructing view schema to allow for more flexibility
233
- // (e.g. out-of-schema content handlers could allow support for viewing docs which have extra allowed types in a particular field)
234
- const canView =
235
- result.write === Compatibility.Compatible && result.read === Compatibility.Compatible;
236
- const canUpgrade = result.read === Compatibility.Compatible;
237
- const isEquivalent = canView && canUpgrade;
238
- const compatibility: SchemaCompatibilityStatus = {
239
- canView,
240
- canUpgrade,
241
- isEquivalent,
242
- canInitialize: canInitialize(this.checkout),
243
- };
229
+ const compatibility = comparePersistedSchemaInternal(
230
+ this.checkout.storedSchema,
231
+ this.viewSchema,
232
+ canInitialize(this.checkout),
233
+ );
234
+
244
235
  let lastRoot =
245
236
  this.compatibility.canView && this.view !== undefined ? this.root : undefined;
246
237
  this.currentCompatibility = compatibility;
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert } from "@fluidframework/core-utils/internal";
6
+ import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
7
7
  import type {
8
8
  IChannelAttributes,
9
9
  IChannelFactory,
@@ -16,10 +16,13 @@ import { UsageError } from "@fluidframework/telemetry-utils/internal";
16
16
 
17
17
  import { type ICodecOptions, noopValidator } from "../codec/index.js";
18
18
  import {
19
+ type IEditableForest,
19
20
  type JsonableTree,
20
21
  RevisionTagCodec,
22
+ type TaggedChange,
21
23
  type TreeStoredSchema,
22
24
  TreeStoredSchemaRepository,
25
+ type TreeStoredSchemaSubscription,
23
26
  makeDetachedFieldIndex,
24
27
  moveToDetachedField,
25
28
  } from "../core/index.js";
@@ -66,6 +69,7 @@ import {
66
69
  createTreeCheckout,
67
70
  } from "./treeCheckout.js";
68
71
  import { breakingClass, throwIfBroken } from "../util/index.js";
72
+ import type { IIdCompressor } from "@fluidframework/id-compressor";
69
73
 
70
74
  /**
71
75
  * Copy of data from an {@link ISharedTree} at some point in time.
@@ -149,6 +153,30 @@ function getCodecVersions(formatVersion: number): ExplicitCodecVersions {
149
153
  return versions;
150
154
  }
151
155
 
156
+ /**
157
+ * Build and return a forest of the requested type.
158
+ */
159
+ export function buildConfiguredForest(
160
+ type: ForestType,
161
+ schema: TreeStoredSchemaSubscription,
162
+ idCompressor: IIdCompressor,
163
+ ): IEditableForest {
164
+ switch (type) {
165
+ case ForestType.Optimized:
166
+ return buildChunkedForest(
167
+ makeTreeChunker(schema, defaultSchemaPolicy),
168
+ undefined,
169
+ idCompressor,
170
+ );
171
+ case ForestType.Reference:
172
+ return buildForest();
173
+ case ForestType.Expensive:
174
+ return buildForest(undefined, true);
175
+ default:
176
+ unreachableCase(type);
177
+ }
178
+ }
179
+
152
180
  /**
153
181
  * Shared tree, configured with a good set of indexes and field kinds which will maintain compatibility over time.
154
182
  *
@@ -181,16 +209,7 @@ export class SharedTree
181
209
  const options = { ...defaultSharedTreeOptions, ...optionsParam };
182
210
  const codecVersions = getCodecVersions(options.formatVersion);
183
211
  const schema = new TreeStoredSchemaRepository();
184
- const forest =
185
- options.forest === ForestType.Optimized
186
- ? buildChunkedForest(
187
- makeTreeChunker(schema, defaultSchemaPolicy),
188
- undefined,
189
- runtime.idCompressor,
190
- )
191
- : options.forest === ForestType.Reference
192
- ? buildForest()
193
- : buildForest(undefined, true);
212
+ const forest = buildConfiguredForest(options.forest, schema, runtime.idCompressor);
194
213
  const revisionTagCodec = new RevisionTagCodec(runtime.idCompressor);
195
214
  const removedRoots = makeDetachedFieldIndex(
196
215
  "repair",
@@ -263,7 +282,8 @@ export class SharedTree
263
282
  schema,
264
283
  defaultSchemaPolicy,
265
284
  new DefaultResubmitMachine(
266
- changeFamily.rebaser.invert.bind(changeFamily.rebaser),
285
+ (change: TaggedChange<SharedTreeChange>) =>
286
+ changeFamily.rebaser.invert(change, true, this.mintRevisionTag()),
267
287
  changeEnricher,
268
288
  ),
269
289
  changeEnricher,
@@ -348,7 +368,7 @@ export function getBranch(treeOrView: ITree | TreeView<ImplicitFieldSchema>): Tr
348
368
  * Format versions supported by SharedTree.
349
369
  *
350
370
  * Each version documents a required minimum version of the \@fluidframework/tree package.
351
- * @internal
371
+ * @alpha
352
372
  */
353
373
  export const SharedTreeFormatVersion = {
354
374
  /**
@@ -374,26 +394,38 @@ export const SharedTreeFormatVersion = {
374
394
  * Format versions supported by SharedTree.
375
395
  *
376
396
  * Each version documents a required minimum version of the \@fluidframework/tree package.
377
- * @internal
397
+ * @alpha
378
398
  * @privateRemarks
379
399
  * See packages/dds/tree/docs/main/compatibility.md for information on how to add support for a new format.
400
+ *
401
+ * TODO: Before this gets promoted past Alpha,
402
+ * a separate abstraction more suited for use in the public API should be adopted rather than reusing the same types used internally.
403
+ * Such an abstraction should probably be in the form of a Fluid-Framework wide compatibility enum.
380
404
  */
381
405
  export type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;
382
406
 
383
407
  /**
384
- * @internal
408
+ * Configuration options for SharedTree.
409
+ * @alpha
385
410
  */
386
411
  export type SharedTreeOptions = Partial<ICodecOptions> &
387
- Partial<SharedTreeFormatOptions> & {
388
- /**
389
- * The {@link ForestType} indicating which forest type should be created for the SharedTree.
390
- */
391
- forest?: ForestType;
392
- };
412
+ Partial<SharedTreeFormatOptions> &
413
+ ForestOptions;
414
+
415
+ /**
416
+ * Configuration options for SharedTree's internal tree storage.
417
+ * @alpha
418
+ */
419
+ export interface ForestOptions {
420
+ /**
421
+ * The {@link ForestType} indicating which forest type should be created for the SharedTree.
422
+ */
423
+ readonly forest?: ForestType;
424
+ }
393
425
 
394
426
  /**
395
427
  * Options for configuring the persisted format SharedTree uses.
396
- * @internal
428
+ * @alpha
397
429
  */
398
430
  export interface SharedTreeFormatOptions {
399
431
  /**
@@ -417,7 +449,7 @@ export interface SharedTreeFormatOptions {
417
449
 
418
450
  /**
419
451
  * Used to distinguish between different forest types.
420
- * @internal
452
+ * @alpha
421
453
  */
422
454
  export enum ForestType {
423
455
  /**
@@ -79,10 +79,12 @@ export class SharedTreeChangeFamily
79
79
  }
80
80
 
81
81
  public buildEditor(
82
- changeReceiver: (change: SharedTreeChange) => void,
82
+ mintRevisionTag: () => RevisionTag,
83
+ changeReceiver: (change: TaggedChange<SharedTreeChange>) => void,
83
84
  ): SharedTreeEditBuilder {
84
85
  return new SharedTreeEditBuilder(
85
86
  this.modularChangeFamily,
87
+ mintRevisionTag,
86
88
  changeReceiver,
87
89
  this.idCompressor,
88
90
  );
@@ -120,6 +122,7 @@ export class SharedTreeChangeFamily
120
122
  public invert(
121
123
  change: TaggedChange<SharedTreeChange>,
122
124
  isRollback: boolean,
125
+ revision: RevisionTag,
123
126
  ): SharedTreeChange {
124
127
  const invertInnerChange: (
125
128
  innerChange: SharedTreeChange["changes"][number],
@@ -131,6 +134,7 @@ export class SharedTreeChangeFamily
131
134
  innerChange: this.modularChangeFamily.invert(
132
135
  mapTaggedChange(change, innerChange.innerChange),
133
136
  isRollback,
137
+ revision,
134
138
  ),
135
139
  };
136
140
  case "schema": {
@@ -4,7 +4,12 @@
4
4
  */
5
5
 
6
6
  import type { IIdCompressor } from "@fluidframework/id-compressor";
7
- import type { ChangeFamilyEditor, TreeStoredSchema } from "../core/index.js";
7
+ import type {
8
+ ChangeFamilyEditor,
9
+ RevisionTag,
10
+ TaggedChange,
11
+ TreeStoredSchema,
12
+ } from "../core/index.js";
8
13
  import {
9
14
  DefaultEditBuilder,
10
15
  type IDefaultEditBuilder,
@@ -48,14 +53,17 @@ export class SharedTreeEditBuilder
48
53
 
49
54
  public constructor(
50
55
  modularChangeFamily: ModularChangeFamily,
51
- private readonly changeReceiver: (change: SharedTreeChange) => void,
56
+ mintRevisionTag: () => RevisionTag,
57
+ private readonly changeReceiver: (change: TaggedChange<SharedTreeChange>) => void,
52
58
  idCompressor?: IIdCompressor,
53
59
  ) {
54
60
  super(
55
61
  modularChangeFamily,
56
- (change) =>
62
+ mintRevisionTag,
63
+ (taggedChange) =>
57
64
  changeReceiver({
58
- changes: [{ type: "data", innerChange: change }],
65
+ ...taggedChange,
66
+ change: { changes: [{ type: "data", innerChange: taggedChange.change }] },
59
67
  }),
60
68
  idCompressor,
61
69
  );
@@ -63,15 +71,18 @@ export class SharedTreeEditBuilder
63
71
  this.schema = {
64
72
  setStoredSchema: (oldSchema, newSchema) => {
65
73
  this.changeReceiver({
66
- changes: [
67
- {
68
- type: "schema",
69
- innerChange: {
70
- schema: { new: newSchema, old: oldSchema },
71
- isInverse: false,
74
+ revision: mintRevisionTag(),
75
+ change: {
76
+ changes: [
77
+ {
78
+ type: "schema",
79
+ innerChange: {
80
+ schema: { new: newSchema, old: oldSchema },
81
+ isInverse: false,
82
+ },
72
83
  },
73
- },
74
- ],
84
+ ],
85
+ },
75
86
  });
76
87
  },
77
88
  };
@@ -78,7 +78,10 @@ export interface RunTransaction {
78
78
  * If the transaction function throws an error then the transaction will be automatically rolled back (discarding any changes made to the tree so far) before the error is propagated up from this function.
79
79
  * If the transaction is rolled back, a corresponding change event will also be emitted for the rollback.
80
80
  */
81
- <TView extends TreeView<ImplicitFieldSchema>, TResult>(
81
+ // TODO: TreeView is invariant over the schema, so to accept any view, `any` is the only real option unless a non generic (or covariant) base type for view is introduced (which is planned).
82
+ // This use of any is actually type safe as it is only used as a constraint, and the actual strongly typed view (TView) is passed to the callback.
83
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
+ <TView extends TreeView<any>, TResult>(
82
85
  tree: TView,
83
86
  transaction: (root: TView["root"]) => TResult,
84
87
  ): TResult;
@@ -123,7 +126,9 @@ export interface RunTransaction {
123
126
  * If the transaction function throws an error then the transaction will be automatically rolled back (discarding any changes made to the tree so far) before the error is propagated up from this function.
124
127
  * If the transaction is rolled back (whether by an error or by returning the {@link RunTransaction.rollback} | rollback value), a corresponding change event will also be emitted for the rollback.
125
128
  */
126
- <TView extends TreeView<ImplicitFieldSchema>, TResult>(
129
+ // See comment on previous overload about use of any here.
130
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
131
+ <TView extends TreeView<any>, TResult>(
127
132
  tree: TView,
128
133
  transaction: (root: TView["root"]) => TResult | typeof rollback,
129
134
  ): TResult | typeof rollback;
@@ -161,10 +166,9 @@ export interface RunTransaction {
161
166
  * If the transaction function throws an error then the transaction will be automatically rolled back (discarding any changes made to the tree so far) before the error is propagated up from this function.
162
167
  * If the transaction is rolled back, a corresponding change event will also be emitted for the rollback.
163
168
  */
164
- <TView extends TreeView<ImplicitFieldSchema>>(
165
- tree: TView,
166
- transaction: (root: TView["root"]) => void,
167
- ): void;
169
+ // See comment on previous overload about use of any here.
170
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
+ <TView extends TreeView<any>>(tree: TView, transaction: (root: TView["root"]) => void): void;
168
172
  /**
169
173
  * Apply one or more edits to the tree as a single atomic unit.
170
174
  * @param node - The node that will be passed to `transaction`.
@@ -211,7 +215,9 @@ export interface RunTransaction {
211
215
  * If the transaction function throws an error then the transaction will be automatically rolled back (discarding any changes made to the tree so far) before the error is propagated up from this function.
212
216
  * If the transaction is rolled back, a corresponding change event will also be emitted for the rollback.
213
217
  */
214
- <TView extends TreeView<ImplicitFieldSchema>, TResult>(
218
+ // See comment on previous overload about use of any here.
219
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
220
+ <TView extends TreeView<any>, TResult>(
215
221
  tree: TView,
216
222
  transaction: (root: TView["root"]) => TResult,
217
223
  preconditions?: readonly TransactionConstraint[],
@@ -264,7 +270,9 @@ export interface RunTransaction {
264
270
  * If the transaction function throws an error then the transaction will be automatically rolled back (discarding any changes made to the tree so far) before the error is propagated up from this function.
265
271
  * If the transaction is rolled back (whether by an error or by returning the {@link RunTransaction.rollback} | rollback value), a corresponding change event will also be emitted for the rollback.
266
272
  */
267
- <TView extends TreeView<ImplicitFieldSchema>, TResult>(
273
+ // See comment on previous overload about use of any here.
274
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
275
+ <TView extends TreeView<any>, TResult>(
268
276
  tree: TView,
269
277
  transaction: (root: TView["root"]) => TResult | typeof rollback,
270
278
  preconditions?: readonly TransactionConstraint[],
@@ -313,7 +321,9 @@ export interface RunTransaction {
313
321
  * If the transaction function throws an error then the transaction will be automatically rolled back (discarding any changes made to the tree so far) before the error is propagated up from this function.
314
322
  * If the transaction is rolled back, a corresponding change event will also be emitted for the rollback.
315
323
  */
316
- <TView extends TreeView<ImplicitFieldSchema>>(
324
+ // See comment on previous overload about use of any here.
325
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
326
+ <TView extends TreeView<any>>(
317
327
  tree: TView,
318
328
  transaction: (root: TView["root"]) => void,
319
329
  preconditions?: readonly TransactionConstraint[],
@@ -32,7 +32,6 @@ import {
32
32
  TreeStoredSchemaRepository,
33
33
  type TreeStoredSchemaSubscription,
34
34
  combineVisitors,
35
- makeAnonChange,
36
35
  makeDetachedFieldIndex,
37
36
  rebaseChange,
38
37
  rootFieldKey,
@@ -785,15 +784,17 @@ export class TreeCheckout implements ITreeCheckoutFork {
785
784
  const revertibleBranch = this.revertibleCommitBranches.get(revision);
786
785
  assert(revertibleBranch !== undefined, 0x7cc /* expected to find a revertible commit */);
787
786
  const commitToRevert = revertibleBranch.getHead();
787
+ const revisionForInvert = this.mintRevisionTag();
788
788
 
789
- let change = makeAnonChange(
790
- this.changeFamily.rebaser.invert(tagChange(commitToRevert.change, revision), false),
789
+ let change = tagChange(
790
+ this.changeFamily.rebaser.invert(commitToRevert, false, revisionForInvert),
791
+ revisionForInvert,
791
792
  );
792
793
 
793
794
  const headCommit = this._branch.getHead();
794
795
  // Rebase the inverted change onto any commits that occurred after the undoable commits.
795
796
  if (commitToRevert !== headCommit) {
796
- change = makeAnonChange(
797
+ change = tagChange(
797
798
  rebaseChange(
798
799
  this.changeFamily.rebaser,
799
800
  change,
@@ -801,12 +802,12 @@ export class TreeCheckout implements ITreeCheckoutFork {
801
802
  headCommit,
802
803
  this.mintRevisionTag,
803
804
  ).change,
805
+ revisionForInvert,
804
806
  );
805
807
  }
806
808
 
807
809
  this._branch.apply(
808
- change.change,
809
- this.mintRevisionTag(),
810
+ change,
810
811
  kind === CommitKind.Default || kind === CommitKind.Redo
811
812
  ? CommitKind.Undo
812
813
  : CommitKind.Redo,
@@ -18,7 +18,6 @@ import {
18
18
  makeAnonChange,
19
19
  mintCommit,
20
20
  rebaseBranch,
21
- tagChange,
22
21
  tagRollbackInverse,
23
22
  type RebaseStatsWithDuration,
24
23
  } from "../core/index.js";
@@ -224,8 +223,8 @@ export class SharedTreeBranch<
224
223
  >,
225
224
  ) {
226
225
  super();
227
- this.editor = this.changeFamily.buildEditor((change) =>
228
- this.apply(change, mintRevisionTag()),
226
+ this.editor = this.changeFamily.buildEditor(mintRevisionTag, (change) =>
227
+ this.apply(change),
229
228
  );
230
229
  this.unsubscribeBranchTrimmer = branchTrimmer?.on("ancestryTrimmed", (commit) => {
231
230
  this.emit("ancestryTrimmed", commit);
@@ -243,37 +242,35 @@ export class SharedTreeBranch<
243
242
 
244
243
  /**
245
244
  * Apply a change to this branch.
246
- * @param change - the change to apply
247
- * @param revision - the revision of the new head commit of the branch that contains `change`
245
+ * @param taggedChange - the change to apply
248
246
  * @param kind - the kind of change to apply
249
247
  * @returns the change that was applied and the new head commit of the branch
250
248
  */
251
249
  public apply(
252
- change: TChange,
253
- revision: RevisionTag,
250
+ taggedChange: TaggedChange<TChange>,
254
251
  kind: CommitKind = CommitKind.Default,
255
252
  ): [change: TChange, newCommit: GraphCommit<TChange>] {
256
253
  this.assertNotDisposed();
257
254
 
258
- // TODO: This should not be necessary when receiving changes from other clients.
259
- const changeWithRevision = this.changeFamily.rebaser.changeRevision(change, revision);
255
+ const revisionTag = taggedChange.revision;
256
+ assert(revisionTag !== undefined, "Revision tag must be provided");
260
257
 
261
258
  const newHead = mintCommit(this.head, {
262
- revision,
263
- change: changeWithRevision,
259
+ revision: revisionTag,
260
+ change: taggedChange.change,
264
261
  });
265
262
 
266
263
  const changeEvent = {
267
264
  type: "append",
268
265
  kind,
269
- change: tagChange(changeWithRevision, revision),
266
+ change: taggedChange,
270
267
  newCommits: [newHead],
271
268
  } as const;
272
269
 
273
270
  this.emit("beforeChange", changeEvent);
274
271
  this.head = newHead;
275
272
  this.emit("afterChange", changeEvent);
276
- return [changeWithRevision, newHead];
273
+ return [taggedChange.change, newHead];
277
274
  }
278
275
 
279
276
  /**
@@ -371,7 +368,7 @@ export class SharedTreeBranch<
371
368
  const commit =
372
369
  commits[i] ?? fail("This wont run because we are iterating through commits");
373
370
  const inverse = this.changeFamily.rebaser.changeRevision(
374
- this.changeFamily.rebaser.invert(commit, true),
371
+ this.changeFamily.rebaser.invert(commit, true, revision),
375
372
  revision,
376
373
  commit.revision,
377
374
  );
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { assert, oob } from "@fluidframework/core-utils/internal";
7
- import type { ChangeRebaser, GraphCommit } from "../core/index.js";
7
+ import type { GraphCommit, TaggedChange } from "../core/index.js";
8
8
  import { disposeSymbol } from "../util/index.js";
9
9
  import type { ChangeEnricherReadonlyCheckout, ResubmitMachine } from "./index.js";
10
10
 
@@ -36,9 +36,9 @@ export class DefaultResubmitMachine<TChange> implements ResubmitMachine<TChange>
36
36
 
37
37
  public constructor(
38
38
  /**
39
- * A function that can invert a change.
39
+ * A function that can create a rollback for a given change.
40
40
  */
41
- private readonly inverter: ChangeRebaser<TChange>["invert"],
41
+ private readonly makeRollback: (change: TaggedChange<TChange>) => TChange,
42
42
  /**
43
43
  * Change enricher that represent the tip of the top-level local branch (i.e., the branch on which in-flight
44
44
  * commits are applied and automatically rebased).
@@ -75,7 +75,7 @@ export class DefaultResubmitMachine<TChange> implements ResubmitMachine<TChange>
75
75
  // Roll back the checkout to the state before the oldest commit
76
76
  for (let iCommit = toResubmit.length - 1; iCommit >= 0; iCommit -= 1) {
77
77
  const commit = toResubmit[iCommit] ?? oob();
78
- const rollback = this.inverter(commit, true);
78
+ const rollback = this.makeRollback(commit);
79
79
  // WARNING: it's not currently possible to roll back past a schema change (see AB#7265).
80
80
  // Either we have to make it possible to do so, or this logic will have to change to work
81
81
  // forwards from an earlier fork instead of backwards.
@@ -17,6 +17,7 @@ import {
17
17
  mintCommit,
18
18
  rebaseChange,
19
19
  type RebaseStatsWithDuration,
20
+ tagChange,
20
21
  } from "../core/index.js";
21
22
  import { type Mutable, brand, fail, getOrCreate, mapIterable } from "../util/index.js";
22
23
 
@@ -642,7 +643,7 @@ export class EditManager<
642
643
  ...newChangeFullyRebased.telemetryProperties,
643
644
  });
644
645
 
645
- peerLocalBranch.apply(newCommit.change, newCommit.revision);
646
+ peerLocalBranch.apply(tagChange(newCommit.change, newCommit.revision));
646
647
  this.pushCommitToTrunk(sequenceId, {
647
648
  ...newCommit,
648
649
  change: newChangeFullyRebased.change,
@@ -32,6 +32,7 @@ import {
32
32
  RevisionTagCodec,
33
33
  type SchemaAndPolicy,
34
34
  type SchemaPolicy,
35
+ type TaggedChange,
35
36
  type TreeStoredSchemaRepository,
36
37
  } from "../core/index.js";
37
38
  import {
@@ -271,7 +272,8 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
271
272
  this.resubmitMachine =
272
273
  resubmitMachine ??
273
274
  new DefaultResubmitMachine(
274
- changeFamily.rebaser.invert.bind(changeFamily.rebaser),
275
+ (change: TaggedChange<TChange>) =>
276
+ changeFamily.rebaser.invert(change, true, this.mintRevisionTag()),
275
277
  changeEnricher,
276
278
  );
277
279
  this.commitEnricher = new BranchCommitEnricher(changeFamily.rebaser, changeEnricher);
@@ -446,7 +448,7 @@ export class SharedTreeCore<TEditor extends ChangeFamilyEditor, TChange>
446
448
  const {
447
449
  commit: { revision, change },
448
450
  } = this.messageCodec.decode(content, { idCompressor: this.idCompressor });
449
- this.editManager.localBranch.apply(change, revision);
451
+ this.editManager.localBranch.apply({ change, revision });
450
452
  }
451
453
 
452
454
  public override getGCData(fullGC?: boolean): IGarbageCollectionData {