@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
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert, unreachableCase, fail } from "@fluidframework/core-utils/internal";
6
+ import { unreachableCase, fail } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
9
  import {
@@ -20,27 +20,81 @@ import {
20
20
  type TreeTypeSet,
21
21
  } from "../core/index.js";
22
22
  import { FieldKinds, type FlexFieldKind } from "../feature-libraries/index.js";
23
- import { brand, getOrCreate } from "../util/index.js";
23
+ import { brand, getOrCreate, type JsonCompatibleReadOnlyObject } from "../util/index.js";
24
24
 
25
- import { NodeKind } from "./core/index.js";
26
- import { FieldKind, normalizeFieldSchema, type ImplicitFieldSchema } from "./fieldSchema.js";
27
- import type {
28
- SimpleFieldSchema,
29
- SimpleNodeSchema,
30
- SimpleNodeSchemaBase,
31
- SimpleTreeSchema,
32
- } from "./simpleSchema.js";
25
+ import {
26
+ allowedTypeFilter,
27
+ convertAllowedTypes,
28
+ getTreeNodeSchemaPrivateData,
29
+ isClassBasedSchema,
30
+ NodeKind,
31
+ type SimpleNodeSchemaBase,
32
+ type StoredSchemaGenerationOptions,
33
+ } from "./core/index.js";
34
+ import {
35
+ FieldKind,
36
+ FieldSchemaAlpha,
37
+ normalizeFieldSchema,
38
+ type ImplicitAnnotatedFieldSchema,
39
+ type ImplicitFieldSchema,
40
+ } from "./fieldSchema.js";
41
+ import type { SimpleFieldSchema, SimpleNodeSchema } from "./simpleSchema.js";
33
42
  import { walkFieldSchema } from "./walkFieldSchema.js";
34
43
 
35
- const viewToStoredCache = new WeakMap<ImplicitFieldSchema, TreeStoredSchema>();
44
+ const viewToStoredCache = new WeakMap<
45
+ StoredSchemaGenerationOptions,
46
+ WeakMap<ImplicitFieldSchema, TreeStoredSchema>
47
+ >();
48
+
49
+ export const restrictiveStoredSchemaGenerationOptions: StoredSchemaGenerationOptions = {
50
+ includeStaged: () => false,
51
+ };
52
+
53
+ export const permissiveStoredSchemaGenerationOptions: StoredSchemaGenerationOptions = {
54
+ includeStaged: () => true,
55
+ };
56
+
57
+ /**
58
+ * Converts a {@link ImplicitAnnotatedFieldSchema} into a {@link TreeStoredSchema} for use in schema upgrades.
59
+ *
60
+ * TODO: once upgrades are more flexible, this should take in more options, including the old schema and specific upgrades to enable.
61
+ */
62
+ export function toUpgradeSchema(root: ImplicitAnnotatedFieldSchema): TreeStoredSchema {
63
+ return toStoredSchema(root, restrictiveStoredSchemaGenerationOptions);
64
+ }
65
+
66
+ /**
67
+ * Converts a {@link ImplicitAnnotatedFieldSchema} into a {@link TreeStoredSchema} for use as initial document schema.
68
+ */
69
+ export function toInitialSchema(root: ImplicitAnnotatedFieldSchema): TreeStoredSchema {
70
+ return toStoredSchema(root, restrictiveStoredSchemaGenerationOptions);
71
+ }
72
+
73
+ /**
74
+ * Converts a {@link ImplicitAnnotatedFieldSchema} into a {@link TreeStoredSchema} to used for unhydrated nodes.
75
+ * @remarks
76
+ * This allows as much as possible, relying on further validation when inserting the content.
77
+ *
78
+ * TODO: this should get additional options to enable support for unknown optional fields.
79
+ */
80
+ export const toUnhydratedSchema = permissiveStoredSchemaGenerationOptions;
36
81
 
37
82
  /**
38
- * Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
83
+ * Converts a {@link ImplicitAnnotatedFieldSchema} into a {@link TreeStoredSchema}.
84
+ *
85
+ * @privateRemarks
86
+ * TODO:#38722 When runtime schema upgrades are implemented, this will need to be updated to check if
87
+ * a staged allowed type has been upgraded and if so, include it in the conversion.
88
+ *
39
89
  * @throws
40
90
  * Throws a `UsageError` if multiple schemas are encountered with the same identifier.
41
91
  */
42
- export function toStoredSchema(root: ImplicitFieldSchema): TreeStoredSchema {
43
- return getOrCreate(viewToStoredCache, root, () => {
92
+ export function toStoredSchema(
93
+ root: ImplicitAnnotatedFieldSchema,
94
+ options: StoredSchemaGenerationOptions,
95
+ ): TreeStoredSchema {
96
+ const cache = getOrCreate(viewToStoredCache, options, () => new WeakMap());
97
+ return getOrCreate(cache, root, () => {
44
98
  const normalized = normalizeFieldSchema(root);
45
99
  const nodeSchema: Map<TreeNodeSchemaIdentifier, TreeNodeStoredSchema> = new Map();
46
100
  walkFieldSchema(normalized, {
@@ -55,42 +109,39 @@ export function toStoredSchema(root: ImplicitFieldSchema): TreeStoredSchema {
55
109
  }
56
110
  nodeSchema.set(
57
111
  brand(schema.identifier),
58
- getStoredSchema(schema as SimpleNodeSchemaBase<NodeKind> as SimpleNodeSchema),
112
+ getStoredSchema(
113
+ schema as SimpleNodeSchemaBase<NodeKind> as SimpleNodeSchema,
114
+ options,
115
+ ),
59
116
  );
60
117
  },
118
+ allowedTypeFilter: (allowedType) => allowedTypeFilter(allowedType, options),
61
119
  });
62
120
 
63
121
  const result: TreeStoredSchema = {
64
122
  nodeSchema,
65
- rootFieldSchema: convertField(normalized),
123
+ rootFieldSchema: convertField(normalized, options),
66
124
  };
67
125
  return result;
68
126
  });
69
127
  }
70
128
 
71
- /**
72
- * Converts a {@link SimpleTreeSchema} into a {@link TreeStoredSchema}.
73
- */
74
- export function simpleToStoredSchema(root: SimpleTreeSchema): TreeStoredSchema {
75
- const nodeSchema: Map<TreeNodeSchemaIdentifier, TreeNodeStoredSchema> = new Map();
76
- for (const [identifier, schema] of root.definitions) {
77
- nodeSchema.set(brand(identifier), getStoredSchema(schema));
78
- }
79
-
80
- const result: TreeStoredSchema = {
81
- nodeSchema,
82
- rootFieldSchema: convertField(root.root),
83
- };
84
- return result;
85
- }
86
-
87
129
  /**
88
130
  * Normalizes an {@link ImplicitFieldSchema} into a {@link TreeFieldSchema}.
89
131
  */
90
- export function convertField(schema: SimpleFieldSchema): TreeFieldStoredSchema {
132
+ export function convertField(
133
+ schema: SimpleFieldSchema | FieldSchemaAlpha,
134
+ options: StoredSchemaGenerationOptions,
135
+ ): TreeFieldStoredSchema {
91
136
  const kind: FieldKindIdentifier =
92
137
  convertFieldKind.get(schema.kind)?.identifier ?? fail(0xae3 /* Invalid field kind */);
93
- const types: TreeTypeSet = schema.allowedTypesIdentifiers as TreeTypeSet;
138
+ let types: TreeTypeSet;
139
+ // eslint-disable-next-line unicorn/prefer-ternary
140
+ if (schema instanceof FieldSchemaAlpha) {
141
+ types = convertAllowedTypes(schema.annotatedAllowedTypesNormalized, options);
142
+ } else {
143
+ types = schema.allowedTypesIdentifiers as TreeTypeSet;
144
+ }
94
145
  return { kind, types, persistedMetadata: schema.persistedMetadata };
95
146
  }
96
147
 
@@ -114,11 +165,16 @@ export const convertFieldKind: ReadonlyMap<FieldKind, FlexFieldKind> = new Map<
114
165
  * TODO: AB#43548: Using a stored schema for unhydrated flex trees does not handle schema evolution features like "allowUnknownOptionalFields".
115
166
  * Usage of this and the conversion which wrap it should be audited and reduced.
116
167
  */
117
- export function getStoredSchema(schema: SimpleNodeSchema): TreeNodeStoredSchema {
168
+ export function getStoredSchema(
169
+ schema: SimpleNodeSchema,
170
+ options: StoredSchemaGenerationOptions,
171
+ ): TreeNodeStoredSchema {
172
+ if (isClassBasedSchema(schema)) {
173
+ return getTreeNodeSchemaPrivateData(schema).toStored(options);
174
+ }
118
175
  const kind = schema.kind;
119
176
  switch (kind) {
120
177
  case NodeKind.Leaf: {
121
- assert(schema.kind === NodeKind.Leaf, 0xa4a /* invalid kind */);
122
178
  return new LeafNodeStoredSchema(schema.leafKind);
123
179
  }
124
180
  case NodeKind.Map:
@@ -136,18 +192,12 @@ export function getStoredSchema(schema: SimpleNodeSchema): TreeNodeStoredSchema
136
192
  }
137
193
  case NodeKind.Array: {
138
194
  const types = schema.allowedTypesIdentifiers as TreeTypeSet;
139
- const field = {
140
- kind: FieldKinds.sequence.identifier,
141
- types,
142
- persistedMetadata: schema.persistedMetadata,
143
- };
144
- const fields = new Map([[EmptyKey, field]]);
145
- return new ObjectNodeStoredSchema(fields, schema.persistedMetadata);
195
+ return arrayNodeStoredSchema(types, schema.persistedMetadata);
146
196
  }
147
197
  case NodeKind.Object: {
148
198
  const fields: Map<FieldKey, TreeFieldStoredSchema> = new Map();
149
199
  for (const fieldSchema of schema.fields.values()) {
150
- fields.set(brand(fieldSchema.storedKey), convertField(fieldSchema));
200
+ fields.set(brand(fieldSchema.storedKey), convertField(fieldSchema, options));
151
201
  }
152
202
  return new ObjectNodeStoredSchema(fields, schema.persistedMetadata);
153
203
  }
@@ -156,3 +206,16 @@ export function getStoredSchema(schema: SimpleNodeSchema): TreeNodeStoredSchema
156
206
  }
157
207
  }
158
208
  }
209
+
210
+ export function arrayNodeStoredSchema(
211
+ types: TreeTypeSet,
212
+ persistedMetadata: JsonCompatibleReadOnlyObject | undefined,
213
+ ): ObjectNodeStoredSchema {
214
+ const field = {
215
+ kind: FieldKinds.sequence.identifier,
216
+ types,
217
+ persistedMetadata,
218
+ };
219
+ const fields = new Map([[EmptyKey, field]]);
220
+ return new ObjectNodeStoredSchema(fields, persistedMetadata);
221
+ }