@fluidframework/tree 2.52.0 → 2.53.0-350190

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 (337) hide show
  1. package/api-report/tree.alpha.api.md +38 -29
  2. package/dist/alpha.d.ts +2 -1
  3. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  4. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
  5. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  6. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
  7. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  8. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
  9. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  10. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  11. package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -0
  12. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  13. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
  14. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  15. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +49 -20
  16. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  17. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  18. package/dist/feature-libraries/optional-field/optionalField.js +3 -0
  19. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  20. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
  21. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
  22. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
  23. package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/jsonDomainSchema.d.ts +5 -3
  28. package/dist/jsonDomainSchema.d.ts.map +1 -1
  29. package/dist/jsonDomainSchema.js.map +1 -1
  30. package/dist/packageVersion.d.ts +1 -1
  31. package/dist/packageVersion.d.ts.map +1 -1
  32. package/dist/packageVersion.js +1 -1
  33. package/dist/packageVersion.js.map +1 -1
  34. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  35. package/dist/shared-tree/schematizeTree.js +1 -1
  36. package/dist/shared-tree/schematizeTree.js.map +1 -1
  37. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  38. package/dist/shared-tree/schematizingTreeView.js +3 -3
  39. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  40. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  41. package/dist/shared-tree/treeAlpha.js +9 -3
  42. package/dist/shared-tree/treeAlpha.js.map +1 -1
  43. package/dist/simple-tree/api/configuration.d.ts +3 -0
  44. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  45. package/dist/simple-tree/api/configuration.js +5 -1
  46. package/dist/simple-tree/api/configuration.js.map +1 -1
  47. package/dist/simple-tree/api/create.d.ts +4 -4
  48. package/dist/simple-tree/api/create.d.ts.map +1 -1
  49. package/dist/simple-tree/api/create.js +3 -6
  50. package/dist/simple-tree/api/create.js.map +1 -1
  51. package/dist/simple-tree/api/discrepancies.d.ts +5 -9
  52. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -1
  53. package/dist/simple-tree/api/discrepancies.js +11 -10
  54. package/dist/simple-tree/api/discrepancies.js.map +1 -1
  55. package/dist/simple-tree/api/index.d.ts +3 -2
  56. package/dist/simple-tree/api/index.d.ts.map +1 -1
  57. package/dist/simple-tree/api/index.js +3 -2
  58. package/dist/simple-tree/api/index.js.map +1 -1
  59. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  60. package/dist/simple-tree/api/schemaCompatibilityTester.js +3 -4
  61. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  62. package/dist/simple-tree/api/schemaFactory.d.ts +9 -155
  63. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  64. package/dist/simple-tree/api/schemaFactory.js +4 -47
  65. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  66. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
  67. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  68. package/dist/simple-tree/api/schemaFactoryAlpha.js +33 -11
  69. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  70. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
  71. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  72. package/dist/simple-tree/api/schemaFactoryRecursive.js +1 -7
  73. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  74. package/dist/simple-tree/api/schemaStatics.d.ts +158 -0
  75. package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -0
  76. package/dist/simple-tree/api/schemaStatics.js +59 -0
  77. package/dist/simple-tree/api/schemaStatics.js.map +1 -0
  78. package/dist/simple-tree/api/storedSchema.d.ts +5 -3
  79. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  80. package/dist/simple-tree/api/storedSchema.js +4 -2
  81. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  82. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  83. package/dist/simple-tree/api/treeBeta.js +12 -6
  84. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  85. package/dist/simple-tree/core/allowedTypes.d.ts +33 -17
  86. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  87. package/dist/simple-tree/core/allowedTypes.js +20 -12
  88. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  89. package/dist/simple-tree/core/index.d.ts +5 -3
  90. package/dist/simple-tree/core/index.d.ts.map +1 -1
  91. package/dist/simple-tree/core/index.js +6 -1
  92. package/dist/simple-tree/core/index.js.map +1 -1
  93. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
  94. package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
  95. package/dist/simple-tree/core/simpleNodeSchemaBase.js +7 -0
  96. package/dist/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
  97. package/dist/simple-tree/core/toStored.d.ts +32 -0
  98. package/dist/simple-tree/core/toStored.d.ts.map +1 -0
  99. package/dist/simple-tree/core/toStored.js +37 -0
  100. package/dist/simple-tree/core/toStored.js.map +1 -0
  101. package/dist/simple-tree/core/treeNodeSchema.d.ts +7 -2
  102. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  103. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  104. package/dist/simple-tree/core/treeNodeValid.d.ts +6 -1
  105. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  106. package/dist/simple-tree/core/treeNodeValid.js +11 -3
  107. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  108. package/dist/simple-tree/core/walkSchema.d.ts +19 -5
  109. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
  110. package/dist/simple-tree/core/walkSchema.js +4 -2
  111. package/dist/simple-tree/core/walkSchema.js.map +1 -1
  112. package/dist/simple-tree/createContext.d.ts.map +1 -1
  113. package/dist/simple-tree/createContext.js +1 -1
  114. package/dist/simple-tree/createContext.js.map +1 -1
  115. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  116. package/dist/simple-tree/fieldSchema.js +1 -1
  117. package/dist/simple-tree/fieldSchema.js.map +1 -1
  118. package/dist/simple-tree/index.d.ts +4 -4
  119. package/dist/simple-tree/index.d.ts.map +1 -1
  120. package/dist/simple-tree/index.js +7 -1
  121. package/dist/simple-tree/index.js.map +1 -1
  122. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  123. package/dist/simple-tree/leafNodeSchema.js +1 -0
  124. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  125. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  126. package/dist/simple-tree/node-kinds/array/arrayNode.js +17 -3
  127. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  128. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  129. package/dist/simple-tree/node-kinds/map/mapNode.js +9 -2
  130. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  131. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
  132. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  133. package/dist/simple-tree/node-kinds/object/objectNode.js +37 -26
  134. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  135. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  136. package/dist/simple-tree/node-kinds/record/recordNode.js +9 -2
  137. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  138. package/dist/simple-tree/prepareForInsertion.d.ts +5 -5
  139. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  140. package/dist/simple-tree/prepareForInsertion.js +10 -10
  141. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  142. package/dist/simple-tree/simpleSchema.d.ts +6 -21
  143. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  144. package/dist/simple-tree/simpleSchema.js.map +1 -1
  145. package/dist/simple-tree/toStoredSchema.d.ts +35 -11
  146. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  147. package/dist/simple-tree/toStoredSchema.js +68 -33
  148. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  149. package/lib/alpha.d.ts +2 -1
  150. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  151. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
  152. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  153. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
  154. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  155. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
  156. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  157. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  158. package/lib/feature-libraries/modular-schema/genericFieldKind.js +1 -0
  159. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  160. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
  161. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  162. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +50 -21
  163. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  164. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  165. package/lib/feature-libraries/optional-field/optionalField.js +3 -0
  166. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  167. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
  168. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
  169. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
  170. package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
  171. package/lib/index.d.ts +1 -1
  172. package/lib/index.d.ts.map +1 -1
  173. package/lib/index.js.map +1 -1
  174. package/lib/jsonDomainSchema.d.ts +5 -3
  175. package/lib/jsonDomainSchema.d.ts.map +1 -1
  176. package/lib/jsonDomainSchema.js.map +1 -1
  177. package/lib/packageVersion.d.ts +1 -1
  178. package/lib/packageVersion.d.ts.map +1 -1
  179. package/lib/packageVersion.js +1 -1
  180. package/lib/packageVersion.js.map +1 -1
  181. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  182. package/lib/shared-tree/schematizeTree.js +2 -2
  183. package/lib/shared-tree/schematizeTree.js.map +1 -1
  184. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  185. package/lib/shared-tree/schematizingTreeView.js +4 -4
  186. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  187. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  188. package/lib/shared-tree/treeAlpha.js +10 -4
  189. package/lib/shared-tree/treeAlpha.js.map +1 -1
  190. package/lib/simple-tree/api/configuration.d.ts +3 -0
  191. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  192. package/lib/simple-tree/api/configuration.js +6 -2
  193. package/lib/simple-tree/api/configuration.js.map +1 -1
  194. package/lib/simple-tree/api/create.d.ts +4 -4
  195. package/lib/simple-tree/api/create.d.ts.map +1 -1
  196. package/lib/simple-tree/api/create.js +3 -6
  197. package/lib/simple-tree/api/create.js.map +1 -1
  198. package/lib/simple-tree/api/discrepancies.d.ts +5 -9
  199. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -1
  200. package/lib/simple-tree/api/discrepancies.js +11 -10
  201. package/lib/simple-tree/api/discrepancies.js.map +1 -1
  202. package/lib/simple-tree/api/index.d.ts +3 -2
  203. package/lib/simple-tree/api/index.d.ts.map +1 -1
  204. package/lib/simple-tree/api/index.js +2 -1
  205. package/lib/simple-tree/api/index.js.map +1 -1
  206. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  207. package/lib/simple-tree/api/schemaCompatibilityTester.js +4 -5
  208. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  209. package/lib/simple-tree/api/schemaFactory.d.ts +9 -155
  210. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  211. package/lib/simple-tree/api/schemaFactory.js +2 -45
  212. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  213. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
  214. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  215. package/lib/simple-tree/api/schemaFactoryAlpha.js +23 -1
  216. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  217. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
  218. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  219. package/lib/simple-tree/api/schemaFactoryRecursive.js +0 -5
  220. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  221. package/lib/simple-tree/api/schemaStatics.d.ts +158 -0
  222. package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -0
  223. package/lib/simple-tree/api/schemaStatics.js +56 -0
  224. package/lib/simple-tree/api/schemaStatics.js.map +1 -0
  225. package/lib/simple-tree/api/storedSchema.d.ts +5 -3
  226. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  227. package/lib/simple-tree/api/storedSchema.js +6 -4
  228. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  229. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  230. package/lib/simple-tree/api/treeBeta.js +8 -2
  231. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  232. package/lib/simple-tree/core/allowedTypes.d.ts +33 -17
  233. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  234. package/lib/simple-tree/core/allowedTypes.js +23 -12
  235. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  236. package/lib/simple-tree/core/index.d.ts +5 -3
  237. package/lib/simple-tree/core/index.d.ts.map +1 -1
  238. package/lib/simple-tree/core/index.js +3 -2
  239. package/lib/simple-tree/core/index.js.map +1 -1
  240. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
  241. package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
  242. package/lib/simple-tree/core/simpleNodeSchemaBase.js +6 -0
  243. package/lib/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
  244. package/lib/simple-tree/core/toStored.d.ts +32 -0
  245. package/lib/simple-tree/core/toStored.d.ts.map +1 -0
  246. package/lib/simple-tree/core/toStored.js +32 -0
  247. package/lib/simple-tree/core/toStored.js.map +1 -0
  248. package/lib/simple-tree/core/treeNodeSchema.d.ts +7 -2
  249. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  250. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  251. package/lib/simple-tree/core/treeNodeValid.d.ts +6 -1
  252. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  253. package/lib/simple-tree/core/treeNodeValid.js +9 -2
  254. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  255. package/lib/simple-tree/core/walkSchema.d.ts +19 -5
  256. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
  257. package/lib/simple-tree/core/walkSchema.js +4 -2
  258. package/lib/simple-tree/core/walkSchema.js.map +1 -1
  259. package/lib/simple-tree/createContext.d.ts.map +1 -1
  260. package/lib/simple-tree/createContext.js +2 -2
  261. package/lib/simple-tree/createContext.js.map +1 -1
  262. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  263. package/lib/simple-tree/fieldSchema.js +1 -1
  264. package/lib/simple-tree/fieldSchema.js.map +1 -1
  265. package/lib/simple-tree/index.d.ts +4 -4
  266. package/lib/simple-tree/index.d.ts.map +1 -1
  267. package/lib/simple-tree/index.js +1 -1
  268. package/lib/simple-tree/index.js.map +1 -1
  269. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  270. package/lib/simple-tree/leafNodeSchema.js +2 -1
  271. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  272. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  273. package/lib/simple-tree/node-kinds/array/arrayNode.js +20 -6
  274. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  275. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  276. package/lib/simple-tree/node-kinds/map/mapNode.js +12 -5
  277. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  278. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
  279. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  280. package/lib/simple-tree/node-kinds/object/objectNode.js +16 -5
  281. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  282. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  283. package/lib/simple-tree/node-kinds/record/recordNode.js +12 -5
  284. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  285. package/lib/simple-tree/prepareForInsertion.d.ts +5 -5
  286. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  287. package/lib/simple-tree/prepareForInsertion.js +10 -10
  288. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  289. package/lib/simple-tree/simpleSchema.d.ts +6 -21
  290. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  291. package/lib/simple-tree/simpleSchema.js.map +1 -1
  292. package/lib/simple-tree/toStoredSchema.d.ts +35 -11
  293. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  294. package/lib/simple-tree/toStoredSchema.js +67 -34
  295. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  296. package/package.json +21 -21
  297. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -0
  298. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +9 -0
  299. package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -0
  300. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +61 -19
  301. package/src/feature-libraries/optional-field/optionalField.ts +4 -0
  302. package/src/feature-libraries/sequence-field/sequenceFieldChangeRebaser.ts +4 -0
  303. package/src/index.ts +2 -1
  304. package/src/jsonDomainSchema.ts +4 -0
  305. package/src/packageVersion.ts +1 -1
  306. package/src/shared-tree/schematizeTree.ts +2 -2
  307. package/src/shared-tree/schematizingTreeView.ts +9 -3
  308. package/src/shared-tree/treeAlpha.ts +18 -4
  309. package/src/simple-tree/api/configuration.ts +10 -2
  310. package/src/simple-tree/api/create.ts +5 -10
  311. package/src/simple-tree/api/discrepancies.ts +18 -17
  312. package/src/simple-tree/api/index.ts +2 -3
  313. package/src/simple-tree/api/schemaCompatibilityTester.ts +5 -9
  314. package/src/simple-tree/api/schemaFactory.ts +6 -250
  315. package/src/simple-tree/api/schemaFactoryAlpha.ts +174 -1
  316. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -25
  317. package/src/simple-tree/api/schemaStatics.ts +291 -0
  318. package/src/simple-tree/api/storedSchema.ts +12 -5
  319. package/src/simple-tree/api/treeBeta.ts +9 -2
  320. package/src/simple-tree/core/allowedTypes.ts +46 -26
  321. package/src/simple-tree/core/index.ts +9 -1
  322. package/src/simple-tree/core/simpleNodeSchemaBase.ts +30 -0
  323. package/src/simple-tree/core/toStored.ts +58 -0
  324. package/src/simple-tree/core/treeNodeSchema.ts +8 -2
  325. package/src/simple-tree/core/treeNodeValid.ts +14 -2
  326. package/src/simple-tree/core/walkSchema.ts +23 -6
  327. package/src/simple-tree/createContext.ts +5 -2
  328. package/src/simple-tree/fieldSchema.ts +2 -1
  329. package/src/simple-tree/index.ts +14 -3
  330. package/src/simple-tree/leafNodeSchema.ts +2 -1
  331. package/src/simple-tree/node-kinds/array/arrayNode.ts +32 -4
  332. package/src/simple-tree/node-kinds/map/mapNode.ts +23 -2
  333. package/src/simple-tree/node-kinds/object/objectNode.ts +34 -4
  334. package/src/simple-tree/node-kinds/record/recordNode.ts +20 -2
  335. package/src/simple-tree/prepareForInsertion.ts +12 -7
  336. package/src/simple-tree/simpleSchema.ts +6 -26
  337. package/src/simple-tree/toStoredSchema.ts +107 -44
@@ -39,6 +39,7 @@ import {
39
39
  newChangeAtomIdRangeMap,
40
40
  type DeltaDetachedNodeChanges,
41
41
  type DeltaDetachedNodeRename,
42
+ mapTaggedChange,
42
43
  } from "../../core/index.js";
43
44
  import {
44
45
  type IdAllocationState,
@@ -213,24 +214,16 @@ export class ModularChangeFamily
213
214
  }
214
215
 
215
216
  private composeAllFields(
216
- change1: ModularChangeset,
217
- change2: ModularChangeset,
217
+ potentiallyConflictedChange1: ModularChangeset,
218
+ potentiallyConflictedChange2: ModularChangeset,
218
219
  revInfos: RevisionInfo[],
219
220
  idState: IdAllocationState,
220
221
  ): ModularChangesetContent {
221
- if (hasConflicts(change1) && hasConflicts(change2)) {
222
- return {
223
- fieldChanges: new Map(),
224
- nodeChanges: newTupleBTree(),
225
- nodeToParent: newTupleBTree(),
226
- nodeAliases: newTupleBTree(),
227
- crossFieldKeys: newCrossFieldKeyTable(),
228
- };
229
- } else if (hasConflicts(change1)) {
230
- return change2;
231
- } else if (hasConflicts(change2)) {
232
- return change1;
233
- }
222
+ // Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.
223
+ // This means that compose must preserve declarations (e.g., new cells) made by conflicted changes (so that we can rebase over the composition).
224
+ // TODO: remove once AB#46104 is completed
225
+ const change1 = this.getEffectiveChange(potentiallyConflictedChange1);
226
+ const change2 = this.getEffectiveChange(potentiallyConflictedChange2);
234
227
 
235
228
  const genId: IdAllocator = idAllocatorFromState(idState);
236
229
  const revisionMetadata: RevisionMetadataSource = revisionMetadataSourceFromInfo(revInfos);
@@ -857,12 +850,17 @@ export class ModularChangeFamily
857
850
 
858
851
  public rebase(
859
852
  taggedChange: TaggedChange<ModularChangeset>,
860
- over: TaggedChange<ModularChangeset>,
853
+ potentiallyConflictedOver: TaggedChange<ModularChangeset>,
861
854
  revisionMetadata: RevisionMetadataSource,
862
855
  ): ModularChangeset {
863
- if (hasConflicts(over.change)) {
864
- return taggedChange.change;
865
- }
856
+ // Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.
857
+ // This means that we must rebase over a muted version of the conflicted changeset.
858
+ // That is, a version that includes its declarations (e.g., new cells) but not its changes.
859
+ // TODO: remove once AB#46104 is completed
860
+ const over = mapTaggedChange(
861
+ potentiallyConflictedOver,
862
+ this.getEffectiveChange(potentiallyConflictedOver.change),
863
+ );
866
864
 
867
865
  const change = taggedChange.change;
868
866
  const maxId = Math.max(change.maxId ?? -1, over.change.maxId ?? -1);
@@ -1711,6 +1709,50 @@ export class ModularChangeFamily
1711
1709
 
1712
1710
  return numChildren;
1713
1711
  }
1712
+
1713
+ private getEffectiveChange(change: ModularChangeset): ModularChangeset {
1714
+ if (hasConflicts(change)) {
1715
+ return this.muteChange(change);
1716
+ }
1717
+ return change;
1718
+ }
1719
+
1720
+ /**
1721
+ * Returns a copy of the given changeset with the same declarations (e.g., new cells) but no actual changes.
1722
+ */
1723
+ private muteChange(change: ModularChangeset): ModularChangeset {
1724
+ const muted: Mutable<ModularChangeset> = {
1725
+ ...change,
1726
+ crossFieldKeys: newCrossFieldKeyTable(),
1727
+ fieldChanges: this.muteFieldChanges(change.fieldChanges),
1728
+ nodeChanges: brand(change.nodeChanges.mapValues((v) => this.muteNodeChange(v))),
1729
+ };
1730
+ return muted;
1731
+ }
1732
+
1733
+ private muteNodeChange(change: NodeChangeset): NodeChangeset {
1734
+ if (change.fieldChanges === undefined) {
1735
+ return change;
1736
+ }
1737
+ return {
1738
+ ...change,
1739
+ fieldChanges: this.muteFieldChanges(change.fieldChanges),
1740
+ };
1741
+ }
1742
+
1743
+ private muteFieldChanges(change: FieldChangeMap): FieldChangeMap {
1744
+ return new Map(
1745
+ Array.from(change.entries(), ([key, value]) => [key, this.muteFieldChange(value)]),
1746
+ );
1747
+ }
1748
+
1749
+ private muteFieldChange(change: FieldChange): FieldChange {
1750
+ const handler = getChangeHandler(this.fieldKinds, change.fieldKind);
1751
+ return {
1752
+ fieldKind: change.fieldKind,
1753
+ change: brand(handler.rebaser.mute(change.change)),
1754
+ };
1755
+ }
1714
1756
  }
1715
1757
 
1716
1758
  function replaceCrossFieldKeyTableRevisions(
@@ -465,6 +465,10 @@ export const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {
465
465
 
466
466
  return updated;
467
467
  },
468
+
469
+ mute: (change: OptionalChangeset): OptionalChangeset => {
470
+ return { childChanges: change.childChanges, moves: [] };
471
+ },
468
472
  };
469
473
 
470
474
  function replaceReplaceRevisions(
@@ -11,6 +11,7 @@ import { prune } from "./prune.js";
11
11
  import { rebase } from "./rebase.js";
12
12
  import { replaceRevisions } from "./replaceRevisions.js";
13
13
  import type { Changeset } from "./types.js";
14
+ import { omitMarkEffect } from "./utils.js";
14
15
 
15
16
  export type SequenceChangeRebaser = FieldChangeRebaser<Changeset>;
16
17
 
@@ -20,4 +21,7 @@ export const sequenceFieldChangeRebaser = {
20
21
  rebase,
21
22
  prune,
22
23
  replaceRevisions,
24
+ mute: (change: Changeset): Changeset => {
25
+ return change.map((mark) => omitMarkEffect(mark));
26
+ },
23
27
  };
package/src/index.ts CHANGED
@@ -118,6 +118,7 @@ export {
118
118
  type InternalTreeNode,
119
119
  type WithType,
120
120
  type NodeChangedData,
121
+ type SchemaUpgrade,
121
122
  // Types not really intended for public use, but used in links.
122
123
  // Can not be moved to internalTypes since doing so causes app code to throw errors like:
123
124
  // Error: src/simple-tree/objectNode.ts:72:1 - (ae-unresolved-link) The @link reference could not be resolved: The package "@fluidframework/tree" does not have an export "TreeNodeApi"
@@ -168,9 +169,9 @@ export {
168
169
  type UnannotateAllowedTypes,
169
170
  type UnannotateAllowedType,
170
171
  type UnannotateAllowedTypesList,
171
- type UnannotateAllowedTypeOrLazyItem,
172
172
  type UnannotateImplicitFieldSchema,
173
173
  type UnannotateSchemaRecord,
174
+ type SchemaStaticsAlpha,
174
175
  // Beta APIs
175
176
  TreeBeta,
176
177
  type TreeChangeEventsBeta,
@@ -11,9 +11,11 @@ import type {
11
11
  ValidateRecursiveSchema,
12
12
  // #region Unused imports to make d.ts cleaner
13
13
  /* eslint-disable unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars */
14
+ ArrayNodeCustomizableSchemaUnsafe,
14
15
  System_Unsafe,
15
16
  TreeNodeSchemaNonClass,
16
17
  TreeNodeSchemaClass,
18
+ TreeRecordNodeUnsafe,
17
19
  NodeKind,
18
20
  TreeNodeSchemaCore,
19
21
  WithType,
@@ -52,6 +54,7 @@ export namespace JsonAsTree {
52
54
  ] as const satisfies AllowedTypes;
53
55
 
54
56
  /**
57
+ * {@inheritDoc JsonAsTree.(Primitive:variable)}
55
58
  * @alpha
56
59
  */
57
60
  export type Primitive = TreeNodeFromImplicitAllowedTypes<typeof Primitive>;
@@ -72,6 +75,7 @@ export namespace JsonAsTree {
72
75
  export const Tree = [...Primitive, () => JsonObject, () => Array] as const;
73
76
 
74
77
  /**
78
+ * {@inheritDoc JsonAsTree.(Tree:variable)}
75
79
  * @alpha
76
80
  */
77
81
  export type Tree = TreeNodeFromImplicitAllowedTypes<typeof Tree>;
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/tree";
9
- export const pkgVersion = "2.52.0";
9
+ export const pkgVersion = "2.53.0-350190";
@@ -19,7 +19,7 @@ import {
19
19
  defaultSchemaPolicy,
20
20
  mapTreeFromCursor,
21
21
  } from "../feature-libraries/index.js";
22
- import { toStoredSchema, type SchemaCompatibilityTester } from "../simple-tree/index.js";
22
+ import { toUpgradeSchema, type SchemaCompatibilityTester } from "../simple-tree/index.js";
23
23
  import { isReadonlyArray } from "../util/index.js";
24
24
 
25
25
  import type { ITreeCheckout } from "./treeCheckout.js";
@@ -219,7 +219,7 @@ export function ensureSchema(
219
219
  return false;
220
220
  }
221
221
  case UpdateType.SchemaCompatible: {
222
- checkout.updateSchema(toStoredSchema(viewSchema.viewSchema.root));
222
+ checkout.updateSchema(toUpgradeSchema(viewSchema.viewSchema.root));
223
223
  return true;
224
224
  }
225
225
  default: {
@@ -51,10 +51,10 @@ import {
51
51
  areImplicitFieldSchemaEqual,
52
52
  prepareForInsertionContextless,
53
53
  type FieldSchema,
54
- toStoredSchema,
55
54
  tryDisposeTreeNode,
56
55
  FieldSchemaAlpha,
57
56
  TreeViewConfigurationAlpha,
57
+ toInitialSchema,
58
58
  } from "../simple-tree/index.js";
59
59
  import {
60
60
  type Breakable,
@@ -172,7 +172,7 @@ export class SchematizingSimpleTreeView<
172
172
  }
173
173
 
174
174
  this.runSchemaEdit(() => {
175
- const schema = toStoredSchema(this.config.schema);
175
+ const schema = toInitialSchema(this.config.schema);
176
176
  const mapTree = prepareForInsertionContextless(
177
177
  content as InsertableContent | undefined,
178
178
  this.rootFieldSchema,
@@ -181,6 +181,7 @@ export class SchematizingSimpleTreeView<
181
181
  policy: defaultSchemaPolicy,
182
182
  },
183
183
  this,
184
+ schema.rootFieldSchema,
184
185
  );
185
186
 
186
187
  initialize(this.checkout, {
@@ -436,7 +437,12 @@ export class SchematizingSimpleTreeView<
436
437
  );
437
438
  }
438
439
  const view = this.getFlexTreeContext();
439
- setField(view.root, this.rootFieldSchema, newRoot as InsertableContent | undefined);
440
+ setField(
441
+ view.root,
442
+ this.rootFieldSchema,
443
+ newRoot as InsertableContent | undefined,
444
+ this.checkout.storedSchema.rootFieldSchema,
445
+ );
440
446
  }
441
447
 
442
448
  // #region Branching
@@ -36,7 +36,6 @@ import {
36
36
  verboseFromCursor,
37
37
  type TreeEncodingOptions,
38
38
  type VerboseTree,
39
- toStoredSchema,
40
39
  extractPersistedSchema,
41
40
  type TreeBranch,
42
41
  TreeViewConfigurationAlpha,
@@ -52,6 +51,9 @@ import {
52
51
  tryGetTreeNodeForField,
53
52
  isObjectNodeSchema,
54
53
  isTreeNode,
54
+ toInitialSchema,
55
+ convertField,
56
+ toUnhydratedSchema,
55
57
  } from "../simple-tree/index.js";
56
58
  import { brand, extractFromOpaque, type JsonCompatible } from "../util/index.js";
57
59
  import {
@@ -493,7 +495,11 @@ export const TreeAlpha: TreeAlpha = {
493
495
  return undefined as Unhydrated<TreeFieldFromImplicitField<TSchema>>;
494
496
  }
495
497
  const cursor = cursorFromVerbose(data, schemalessConfig);
496
- return createFromCursor(schema, cursor);
498
+ return createFromCursor(
499
+ schema,
500
+ cursor,
501
+ convertField(normalizeFieldSchema(schema), toUnhydratedSchema),
502
+ );
497
503
  },
498
504
 
499
505
  exportConcise,
@@ -523,11 +529,18 @@ export const TreeAlpha: TreeAlpha = {
523
529
  const batch: FieldBatch = [cursor];
524
530
  // If none provided, create a compressor which will not compress anything.
525
531
  const idCompressor = options.idCompressor ?? createIdCompressor();
532
+
533
+ // Grabbing an existing stored schema from the node is important to ensure that unknown optional fields can be preserved.
534
+ // Note that if the node is unhydrated, this can result in all staged allowed types being included in the schema, which might be undesired.
535
+ const storedSchema = isTreeNode(node)
536
+ ? getKernel(node).context.flexContext.schema
537
+ : toInitialSchema(schema);
538
+
526
539
  const context: FieldBatchEncodingContext = {
527
540
  encodeType: TreeCompressionStrategy.Compressed,
528
541
  idCompressor,
529
542
  originatorId: idCompressor.localSessionId, // TODO: Why is this needed?
530
- schema: { schema: toStoredSchema(schema), policy: defaultSchemaPolicy },
543
+ schema: { schema: storedSchema, policy: defaultSchemaPolicy },
531
544
  };
532
545
  const result = codec.encode(batch, context);
533
546
  return result;
@@ -543,7 +556,8 @@ export const TreeAlpha: TreeAlpha = {
543
556
  const config = new TreeViewConfigurationAlpha({ schema });
544
557
  const content: ViewContent = {
545
558
  // Always use a v1 schema codec for consistency.
546
- schema: extractPersistedSchema(config, FluidClientVersion.v2_0),
559
+ // TODO: reevaluate how staged schema should behave in schema import/export APIs before stabilizing this.
560
+ schema: extractPersistedSchema(config.schema, FluidClientVersion.v2_0, () => true),
547
561
  tree: compressedData,
548
562
  idCompressor: options.idCompressor ?? createIdCompressor(),
549
563
  };
@@ -25,7 +25,11 @@ import {
25
25
  evaluateLazySchema,
26
26
  markSchemaMostDerived,
27
27
  } from "../core/index.js";
28
- import { toStoredSchema } from "../toStoredSchema.js";
28
+ import {
29
+ permissiveStoredSchemaGenerationOptions,
30
+ restrictiveStoredSchemaGenerationOptions,
31
+ toStoredSchema,
32
+ } from "../toStoredSchema.js";
29
33
  import {
30
34
  isArrayNodeSchema,
31
35
  isMapNodeSchema,
@@ -161,6 +165,9 @@ export interface ITreeViewConfiguration<
161
165
 
162
166
  /**
163
167
  * Configuration for {@link ViewableTree.viewWith}.
168
+ * @privateRemarks
169
+ * When `ImplicitAnnotatedFieldSchema` is stabilized, TSchema should be updated to use it.
170
+ * When doing this, the example for `staged` will need to be updated/simplified.
164
171
  * @sealed @public
165
172
  */
166
173
  export class TreeViewConfiguration<
@@ -213,7 +220,8 @@ export class TreeViewConfiguration<
213
220
 
214
221
  // Eagerly perform this conversion to surface errors sooner.
215
222
  // Includes detection of duplicate schema identifiers.
216
- toStoredSchema(config.schema);
223
+ toStoredSchema(config.schema, restrictiveStoredSchemaGenerationOptions);
224
+ toStoredSchema(config.schema, permissiveStoredSchemaGenerationOptions);
217
225
 
218
226
  const definitions = new Map<string, SimpleNodeSchema & TreeNodeSchema>();
219
227
 
@@ -13,12 +13,9 @@ import {
13
13
  mapCursorFields,
14
14
  type ITreeCursorSynchronous,
15
15
  type SchemaAndPolicy,
16
+ type TreeFieldStoredSchema,
16
17
  } from "../../core/index.js";
17
- import {
18
- normalizeFieldSchema,
19
- type ImplicitFieldSchema,
20
- type TreeFieldFromImplicitField,
21
- } from "../fieldSchema.js";
18
+ import type { ImplicitFieldSchema, TreeFieldFromImplicitField } from "../fieldSchema.js";
22
19
  import {
23
20
  type Context,
24
21
  getOrCreateNodeFromInnerNode,
@@ -32,33 +29,31 @@ import {
32
29
  throwOutOfSchema,
33
30
  } from "../../feature-libraries/index.js";
34
31
  import { getUnhydratedContext } from "../createContext.js";
35
- import { convertField } from "../toStoredSchema.js";
36
32
  import { unknownTypeError } from "./customTree.js";
37
33
 
38
34
  /**
39
35
  * Creates an unhydrated simple-tree field from a cursor in nodes mode.
40
36
  * @remarks
41
37
  * Does not support providing missing defaults values.
42
- * Validates the field is in schema using the provided `contextForNewNodes` of the default unhydrated context if not provided.
38
+ * Validates the field is in schema using `destinationSchema` the provided `contextForNewNodes` or the default unhydrated context if not provided.
43
39
  */
44
40
  export function createFromCursor<const TSchema extends ImplicitFieldSchema>(
45
41
  schema: TSchema,
46
42
  cursor: ITreeCursorSynchronous | undefined,
43
+ destinationSchema: TreeFieldStoredSchema,
47
44
  contextForNewNodes?: Context,
48
45
  ): Unhydrated<TreeFieldFromImplicitField<TSchema>> {
49
46
  const context = contextForNewNodes ?? getUnhydratedContext(schema);
50
47
  assert(context.flexContext.isHydrated() === false, 0xbfe /* Expected unhydrated context */);
51
48
  const mapTrees = cursor === undefined ? [] : [unhydratedFlexTreeFromCursor(context, cursor)];
52
49
 
53
- const rootFieldSchema = convertField(normalizeFieldSchema(schema));
54
-
55
50
  const schemaAndPolicy: SchemaAndPolicy = {
56
51
  policy: defaultSchemaPolicy,
57
52
  schema: context.flexContext.schema,
58
53
  };
59
54
 
60
55
  // Assuming the caller provides the correct `contextForNewNodes`, this should handle unknown optional fields.
61
- isFieldInSchema(mapTrees, rootFieldSchema, schemaAndPolicy, throwOutOfSchema);
56
+ isFieldInSchema(mapTrees, destinationSchema, schemaAndPolicy, throwOutOfSchema);
62
57
 
63
58
  if (mapTrees.length === 0) {
64
59
  return undefined as Unhydrated<TreeFieldFromImplicitField<TSchema>>;
@@ -89,11 +89,13 @@ export interface FieldDiscrepancyLocation {
89
89
  export interface AllowedTypeDiscrepancy extends FieldDiscrepancyLocation {
90
90
  readonly mismatch: "allowedTypes";
91
91
  /**
92
- * List of annotated allowed types in viewed schema which are not allowed in stored schema
92
+ * Annotated allowed types in viewed schema
93
+ * (excluding {@link SchemaStaticsAlpha.staged | staged} schema) which are not allowed in stored schema.
93
94
  */
94
95
  readonly view: readonly AnnotatedAllowedType<TreeNodeSchema>[];
95
96
  /**
96
- * List of allowed type identifiers in stored schema which are not allowed in view schema
97
+ * Allowed type identifiers in stored schema which are not allowed in view schema
98
+ * (including the view schema's {@link SchemaStaticsAlpha.staged | staged} schema).
97
99
  */
98
100
  readonly stored: readonly TreeNodeSchemaIdentifier[];
99
101
  }
@@ -296,28 +298,28 @@ function* getNodeDiscrepancies(
296
298
 
297
299
  /**
298
300
  * Returns the allowed types that are not present in both the given view and stored schemas.
299
- * It returns a tuple containing two arrays:
300
- * 1. The first array contains the allowed types that are present in the view schema but not in the stored schema.
301
- * 2. The second array contains the allowed types that are present in the stored schema but not in the view schema.
302
301
  */
303
302
  export function findExtraAllowedTypes(
304
303
  viewAllowedTypes: readonly AnnotatedAllowedType<TreeNodeSchema>[],
305
304
  storedAllowedTypes: TreeTypeSet,
306
- ): {
307
- viewExtra: readonly AnnotatedAllowedType<TreeNodeSchema>[];
308
- storedExtra: TreeNodeSchemaIdentifier[];
309
- } {
305
+ ): Pick<AllowedTypeDiscrepancy, "view" | "stored"> {
310
306
  const viewNodeSchemaIdentifiers = new Set(
311
307
  viewAllowedTypes.map((value) => value.type.identifier),
312
308
  );
313
309
 
314
- const viewExtra = viewAllowedTypes.filter(
315
- (value) => !storedAllowedTypes.has(brand(value.type.identifier)),
310
+ // TODO:
311
+ // Add detecting which SchemaUpgrades have been made.
312
+ // When doing so, each will fall into one of three states: staged, partially applied, or fully applied.
313
+ // This would allow for nicer compatibility errors and more detailed compatibility status in the future.
314
+ const view = viewAllowedTypes.filter(
315
+ (value) =>
316
+ !storedAllowedTypes.has(brand(value.type.identifier)) &&
317
+ value.metadata.stagedSchemaUpgrade === undefined,
316
318
  );
317
- const storedExtra = [...storedAllowedTypes].filter(
319
+ const stored = [...storedAllowedTypes].filter(
318
320
  (value) => !viewNodeSchemaIdentifiers.has(value),
319
321
  );
320
- return { viewExtra, storedExtra };
322
+ return { view, stored };
321
323
  }
322
324
 
323
325
  /**
@@ -384,14 +386,13 @@ function* getAllowedTypeDiscrepancies(
384
386
  identifier: TreeNodeSchemaIdentifier | undefined,
385
387
  fieldKey: FieldKey | undefined,
386
388
  ): Iterable<FieldDiscrepancy> {
387
- const { viewExtra, storedExtra } = findExtraAllowedTypes(view, stored);
388
- if (viewExtra.length > 0 || storedExtra.length > 0) {
389
+ const discrepancies = findExtraAllowedTypes(view, stored);
390
+ if (discrepancies.view.length > 0 || discrepancies.stored.length > 0) {
389
391
  yield {
392
+ ...discrepancies,
390
393
  identifier,
391
394
  fieldKey,
392
395
  mismatch: "allowedTypes",
393
- view: viewExtra,
394
- stored: storedExtra,
395
396
  } satisfies AllowedTypeDiscrepancy;
396
397
  }
397
398
  }
@@ -24,16 +24,15 @@ export type {
24
24
  ITreeAlpha,
25
25
  } from "./tree.js";
26
26
  export { asTreeViewAlpha } from "./tree.js";
27
+ export { type SchemaStatics, schemaStatics } from "./schemaStatics.js";
27
28
  export {
28
29
  SchemaFactory,
29
30
  type ScopedSchemaName,
30
31
  type SchemaFactoryObjectOptions,
31
- type SchemaStatics,
32
- schemaStatics,
33
32
  type NodeSchemaOptions,
34
33
  type NodeSchemaOptionsAlpha,
35
34
  } from "./schemaFactory.js";
36
- export { SchemaFactoryAlpha } from "./schemaFactoryAlpha.js";
35
+ export { SchemaFactoryAlpha, type SchemaStaticsAlpha } from "./schemaFactoryAlpha.js";
37
36
  export type {
38
37
  ValidateRecursiveSchema,
39
38
  FixRecursiveArraySchema,
@@ -8,7 +8,7 @@ import { allowsRepoSuperset, defaultSchemaPolicy } from "../../feature-libraries
8
8
 
9
9
  import type { SchemaCompatibilityStatus } from "./tree.js";
10
10
  import { getDiscrepanciesInAllowedContent } from "./discrepancies.js";
11
- import { toStoredSchema } from "../toStoredSchema.js";
11
+ import { toUpgradeSchema } from "../toStoredSchema.js";
12
12
  import type { TreeSchema } from "./configuration.js";
13
13
 
14
14
  /**
@@ -51,18 +51,14 @@ export class SchemaCompatibilityTester {
51
51
  break;
52
52
  }
53
53
 
54
- const canUpgrade = allowsRepoSuperset(
55
- policy,
56
- stored,
57
- toStoredSchema(this.viewSchema.root),
58
- );
54
+ const wouldUpgradeTo = toUpgradeSchema(this.viewSchema.root);
55
+
56
+ const canUpgrade = allowsRepoSuperset(policy, stored, wouldUpgradeTo);
59
57
 
60
58
  // If true, then upgrading has no effect on what can be stored in the document.
61
59
  // TODO: This should likely be changed to indicate up a schema upgrade would be a no-op, including stored schema metadata.
62
60
  const isEquivalent =
63
- canView &&
64
- canUpgrade &&
65
- allowsRepoSuperset(policy, toStoredSchema(this.viewSchema.root), stored);
61
+ canView && canUpgrade && allowsRepoSuperset(policy, wouldUpgradeTo, stored);
66
62
 
67
63
  return {
68
64
  canView,