@fluidframework/tree 2.43.0-343119 → 2.50.0-345060

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 (501) hide show
  1. package/CHANGELOG.md +189 -0
  2. package/api-report/tree.alpha.api.md +86 -20
  3. package/api-report/tree.beta.api.md +10 -3
  4. package/api-report/tree.legacy.alpha.api.md +9 -2
  5. package/api-report/tree.legacy.public.api.md +9 -2
  6. package/api-report/tree.public.api.md +9 -2
  7. package/dist/alpha.d.ts +10 -0
  8. package/dist/core/forest/editableForest.d.ts +0 -2
  9. package/dist/core/forest/editableForest.d.ts.map +1 -1
  10. package/dist/core/forest/editableForest.js.map +1 -1
  11. package/dist/core/forest/forest.d.ts +0 -4
  12. package/dist/core/forest/forest.d.ts.map +1 -1
  13. package/dist/core/forest/forest.js +0 -4
  14. package/dist/core/forest/forest.js.map +1 -1
  15. package/dist/core/rebase/changeRebaser.d.ts +0 -6
  16. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  17. package/dist/core/rebase/changeRebaser.js.map +1 -1
  18. package/dist/core/rebase/types.d.ts +0 -2
  19. package/dist/core/rebase/types.d.ts.map +1 -1
  20. package/dist/core/rebase/types.js.map +1 -1
  21. package/dist/core/schema-stored/schema.d.ts +0 -8
  22. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  23. package/dist/core/schema-stored/schema.js +0 -8
  24. package/dist/core/schema-stored/schema.js.map +1 -1
  25. package/dist/core/schema-view/view.d.ts +0 -2
  26. package/dist/core/schema-view/view.d.ts.map +1 -1
  27. package/dist/core/schema-view/view.js.map +1 -1
  28. package/dist/core/tree/cursor.d.ts +0 -2
  29. package/dist/core/tree/cursor.d.ts.map +1 -1
  30. package/dist/core/tree/cursor.js +0 -2
  31. package/dist/core/tree/cursor.js.map +1 -1
  32. package/dist/core/tree/delta.d.ts +0 -2
  33. package/dist/core/tree/delta.d.ts.map +1 -1
  34. package/dist/core/tree/delta.js.map +1 -1
  35. package/dist/core/tree/types.d.ts +0 -4
  36. package/dist/core/tree/types.d.ts.map +1 -1
  37. package/dist/core/tree/types.js +0 -2
  38. package/dist/core/tree/types.js.map +1 -1
  39. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +0 -4
  40. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  41. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  42. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -10
  43. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  44. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  45. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -3
  46. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  47. package/dist/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
  48. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  49. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
  50. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  51. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +0 -2
  52. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  53. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -10
  54. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  55. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +0 -2
  56. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  57. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +0 -6
  58. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  59. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  60. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -12
  61. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  62. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  63. package/dist/feature-libraries/sequence-field/types.d.ts +0 -2
  64. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  65. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  66. package/dist/index.d.ts +1 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +3 -2
  69. package/dist/index.js.map +1 -1
  70. package/dist/jsonDomainSchema.d.ts +2 -6
  71. package/dist/jsonDomainSchema.d.ts.map +1 -1
  72. package/dist/jsonDomainSchema.js +2 -2
  73. package/dist/jsonDomainSchema.js.map +1 -1
  74. package/dist/packageVersion.d.ts +1 -1
  75. package/dist/packageVersion.js +1 -1
  76. package/dist/packageVersion.js.map +1 -1
  77. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  78. package/dist/shared-tree/schematizingTreeView.js +3 -3
  79. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  80. package/dist/shared-tree/treeAlpha.d.ts +38 -0
  81. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  82. package/dist/shared-tree/treeAlpha.js +116 -9
  83. package/dist/shared-tree/treeAlpha.js.map +1 -1
  84. package/dist/simple-tree/api/configuration.d.ts +15 -3
  85. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  86. package/dist/simple-tree/api/configuration.js +88 -38
  87. package/dist/simple-tree/api/configuration.js.map +1 -1
  88. package/dist/simple-tree/api/customTree.d.ts +1 -1
  89. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  90. package/dist/simple-tree/api/customTree.js +3 -4
  91. package/dist/simple-tree/api/customTree.js.map +1 -1
  92. package/dist/simple-tree/api/index.d.ts +3 -3
  93. package/dist/simple-tree/api/index.d.ts.map +1 -1
  94. package/dist/simple-tree/api/index.js +4 -4
  95. package/dist/simple-tree/api/index.js.map +1 -1
  96. package/dist/simple-tree/api/jsonSchema.d.ts +32 -8
  97. package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -1
  98. package/dist/simple-tree/api/jsonSchema.js.map +1 -1
  99. package/dist/simple-tree/api/schemaFactory.d.ts +2 -2
  100. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  101. package/dist/simple-tree/api/schemaFactory.js +1 -1
  102. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  103. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +97 -3
  104. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  105. package/dist/simple-tree/api/schemaFactoryAlpha.js +75 -0
  106. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  107. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +5 -1
  108. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  109. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  110. package/dist/simple-tree/api/schemaFromSimple.js +2 -0
  111. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  112. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  113. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
  114. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  115. package/dist/simple-tree/api/treeBeta.d.ts +1 -1
  116. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  117. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  118. package/dist/simple-tree/api/treeNodeApi.d.ts +3 -0
  119. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  120. package/dist/simple-tree/api/treeNodeApi.js +2 -2
  121. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  122. package/dist/simple-tree/api/typesUnsafe.d.ts +12 -0
  123. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  124. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  125. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  126. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +5 -3
  127. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  128. package/dist/simple-tree/core/context.d.ts +3 -3
  129. package/dist/simple-tree/core/context.d.ts.map +1 -1
  130. package/dist/simple-tree/core/context.js.map +1 -1
  131. package/dist/simple-tree/core/getOrCreateNode.d.ts +9 -0
  132. package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  133. package/dist/simple-tree/core/getOrCreateNode.js +12 -1
  134. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
  135. package/dist/simple-tree/core/index.d.ts +3 -3
  136. package/dist/simple-tree/core/index.d.ts.map +1 -1
  137. package/dist/simple-tree/core/index.js +4 -1
  138. package/dist/simple-tree/core/index.js.map +1 -1
  139. package/dist/simple-tree/core/treeNodeKernel.js +1 -1
  140. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  141. package/dist/simple-tree/core/treeNodeSchema.d.ts +73 -2
  142. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  143. package/dist/simple-tree/core/treeNodeSchema.js +28 -1
  144. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  145. package/dist/simple-tree/core/walkSchema.d.ts +3 -3
  146. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
  147. package/dist/simple-tree/core/walkSchema.js +9 -5
  148. package/dist/simple-tree/core/walkSchema.js.map +1 -1
  149. package/dist/simple-tree/createContext.js +1 -1
  150. package/dist/simple-tree/createContext.js.map +1 -1
  151. package/dist/simple-tree/getTreeNodeForField.d.ts +1 -1
  152. package/dist/simple-tree/getTreeNodeForField.d.ts.map +1 -1
  153. package/dist/simple-tree/getTreeNodeForField.js +3 -3
  154. package/dist/simple-tree/getTreeNodeForField.js.map +1 -1
  155. package/dist/simple-tree/index.d.ts +6 -6
  156. package/dist/simple-tree/index.d.ts.map +1 -1
  157. package/dist/simple-tree/index.js +10 -5
  158. package/dist/simple-tree/index.js.map +1 -1
  159. package/dist/simple-tree/leafNodeSchema.d.ts +2 -1
  160. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  161. package/dist/simple-tree/leafNodeSchema.js +1 -0
  162. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  163. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  164. package/dist/simple-tree/node-kinds/array/arrayNode.js +18 -15
  165. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  166. package/dist/simple-tree/node-kinds/index.d.ts +2 -1
  167. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  168. package/dist/simple-tree/node-kinds/index.js +5 -1
  169. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  170. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  171. package/dist/simple-tree/node-kinds/map/mapNode.js +7 -3
  172. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  173. package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
  174. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  175. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  176. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  177. package/dist/simple-tree/node-kinds/object/objectNode.js +9 -6
  178. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  179. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +5 -1
  180. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  181. package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  182. package/dist/simple-tree/node-kinds/record/index.d.ts +7 -0
  183. package/dist/simple-tree/node-kinds/record/index.d.ts.map +1 -0
  184. package/dist/simple-tree/node-kinds/record/index.js +13 -0
  185. package/dist/simple-tree/node-kinds/record/index.js.map +1 -0
  186. package/dist/simple-tree/node-kinds/record/recordNode.d.ts +39 -0
  187. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -0
  188. package/dist/simple-tree/node-kinds/record/recordNode.js +234 -0
  189. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -0
  190. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +70 -0
  191. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -0
  192. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js +30 -0
  193. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -0
  194. package/dist/simple-tree/schemaTypes.d.ts +13 -27
  195. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  196. package/dist/simple-tree/schemaTypes.js +45 -39
  197. package/dist/simple-tree/schemaTypes.js.map +1 -1
  198. package/dist/simple-tree/simpleSchema.d.ts +16 -1
  199. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  200. package/dist/simple-tree/simpleSchema.js.map +1 -1
  201. package/dist/simple-tree/toStoredSchema.d.ts +2 -0
  202. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  203. package/dist/simple-tree/toStoredSchema.js +6 -2
  204. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  205. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  206. package/dist/simple-tree/treeNodeValid.js +1 -2
  207. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  208. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
  209. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  210. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +56 -32
  211. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  212. package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
  213. package/dist/simple-tree/walkFieldSchema.js +1 -1
  214. package/dist/simple-tree/walkFieldSchema.js.map +1 -1
  215. package/dist/tableSchema.d.ts +7 -2
  216. package/dist/tableSchema.d.ts.map +1 -1
  217. package/dist/tableSchema.js +21 -7
  218. package/dist/tableSchema.js.map +1 -1
  219. package/dist/util/brandedMap.d.ts +0 -2
  220. package/dist/util/brandedMap.d.ts.map +1 -1
  221. package/dist/util/brandedMap.js.map +1 -1
  222. package/docs/main/compatibility.md +15 -1
  223. package/lib/alpha.d.ts +10 -0
  224. package/lib/core/forest/editableForest.d.ts +0 -2
  225. package/lib/core/forest/editableForest.d.ts.map +1 -1
  226. package/lib/core/forest/editableForest.js.map +1 -1
  227. package/lib/core/forest/forest.d.ts +0 -4
  228. package/lib/core/forest/forest.d.ts.map +1 -1
  229. package/lib/core/forest/forest.js +0 -4
  230. package/lib/core/forest/forest.js.map +1 -1
  231. package/lib/core/rebase/changeRebaser.d.ts +0 -6
  232. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  233. package/lib/core/rebase/changeRebaser.js.map +1 -1
  234. package/lib/core/rebase/types.d.ts +0 -2
  235. package/lib/core/rebase/types.d.ts.map +1 -1
  236. package/lib/core/rebase/types.js.map +1 -1
  237. package/lib/core/schema-stored/schema.d.ts +0 -8
  238. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  239. package/lib/core/schema-stored/schema.js +0 -8
  240. package/lib/core/schema-stored/schema.js.map +1 -1
  241. package/lib/core/schema-view/view.d.ts +0 -2
  242. package/lib/core/schema-view/view.d.ts.map +1 -1
  243. package/lib/core/schema-view/view.js.map +1 -1
  244. package/lib/core/tree/cursor.d.ts +0 -2
  245. package/lib/core/tree/cursor.d.ts.map +1 -1
  246. package/lib/core/tree/cursor.js +0 -2
  247. package/lib/core/tree/cursor.js.map +1 -1
  248. package/lib/core/tree/delta.d.ts +0 -2
  249. package/lib/core/tree/delta.d.ts.map +1 -1
  250. package/lib/core/tree/delta.js.map +1 -1
  251. package/lib/core/tree/types.d.ts +0 -4
  252. package/lib/core/tree/types.d.ts.map +1 -1
  253. package/lib/core/tree/types.js +0 -2
  254. package/lib/core/tree/types.js.map +1 -1
  255. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +0 -4
  256. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  257. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  258. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -10
  259. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  260. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  261. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -3
  262. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  263. package/lib/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
  264. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  265. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
  266. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  267. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +0 -2
  268. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  269. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -10
  270. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  271. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +0 -2
  272. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  273. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +0 -6
  274. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  275. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  276. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -12
  277. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  278. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  279. package/lib/feature-libraries/sequence-field/types.d.ts +0 -2
  280. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  281. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  282. package/lib/index.d.ts +1 -1
  283. package/lib/index.d.ts.map +1 -1
  284. package/lib/index.js +1 -1
  285. package/lib/index.js.map +1 -1
  286. package/lib/jsonDomainSchema.d.ts +2 -6
  287. package/lib/jsonDomainSchema.d.ts.map +1 -1
  288. package/lib/jsonDomainSchema.js +3 -3
  289. package/lib/jsonDomainSchema.js.map +1 -1
  290. package/lib/packageVersion.d.ts +1 -1
  291. package/lib/packageVersion.js +1 -1
  292. package/lib/packageVersion.js.map +1 -1
  293. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  294. package/lib/shared-tree/schematizingTreeView.js +4 -4
  295. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  296. package/lib/shared-tree/treeAlpha.d.ts +38 -0
  297. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  298. package/lib/shared-tree/treeAlpha.js +110 -3
  299. package/lib/shared-tree/treeAlpha.js.map +1 -1
  300. package/lib/simple-tree/api/configuration.d.ts +15 -3
  301. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  302. package/lib/simple-tree/api/configuration.js +91 -41
  303. package/lib/simple-tree/api/configuration.js.map +1 -1
  304. package/lib/simple-tree/api/customTree.d.ts +1 -1
  305. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  306. package/lib/simple-tree/api/customTree.js +2 -3
  307. package/lib/simple-tree/api/customTree.js.map +1 -1
  308. package/lib/simple-tree/api/index.d.ts +3 -3
  309. package/lib/simple-tree/api/index.d.ts.map +1 -1
  310. package/lib/simple-tree/api/index.js +1 -1
  311. package/lib/simple-tree/api/index.js.map +1 -1
  312. package/lib/simple-tree/api/jsonSchema.d.ts +32 -8
  313. package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -1
  314. package/lib/simple-tree/api/jsonSchema.js.map +1 -1
  315. package/lib/simple-tree/api/schemaFactory.d.ts +2 -2
  316. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  317. package/lib/simple-tree/api/schemaFactory.js +1 -1
  318. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  319. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +97 -3
  320. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  321. package/lib/simple-tree/api/schemaFactoryAlpha.js +77 -2
  322. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  323. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +5 -1
  324. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  325. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  326. package/lib/simple-tree/api/schemaFromSimple.js +2 -0
  327. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  328. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  329. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +5 -5
  330. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  331. package/lib/simple-tree/api/treeBeta.d.ts +1 -1
  332. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  333. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  334. package/lib/simple-tree/api/treeNodeApi.d.ts +3 -0
  335. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  336. package/lib/simple-tree/api/treeNodeApi.js +4 -4
  337. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  338. package/lib/simple-tree/api/typesUnsafe.d.ts +12 -0
  339. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  340. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  341. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  342. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +6 -4
  343. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  344. package/lib/simple-tree/core/context.d.ts +3 -3
  345. package/lib/simple-tree/core/context.d.ts.map +1 -1
  346. package/lib/simple-tree/core/context.js.map +1 -1
  347. package/lib/simple-tree/core/getOrCreateNode.d.ts +9 -0
  348. package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  349. package/lib/simple-tree/core/getOrCreateNode.js +10 -0
  350. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
  351. package/lib/simple-tree/core/index.d.ts +3 -3
  352. package/lib/simple-tree/core/index.d.ts.map +1 -1
  353. package/lib/simple-tree/core/index.js +3 -3
  354. package/lib/simple-tree/core/index.js.map +1 -1
  355. package/lib/simple-tree/core/treeNodeKernel.js +1 -1
  356. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  357. package/lib/simple-tree/core/treeNodeSchema.d.ts +73 -2
  358. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  359. package/lib/simple-tree/core/treeNodeSchema.js +25 -0
  360. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  361. package/lib/simple-tree/core/walkSchema.d.ts +3 -3
  362. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
  363. package/lib/simple-tree/core/walkSchema.js +9 -5
  364. package/lib/simple-tree/core/walkSchema.js.map +1 -1
  365. package/lib/simple-tree/createContext.js +1 -1
  366. package/lib/simple-tree/createContext.js.map +1 -1
  367. package/lib/simple-tree/getTreeNodeForField.d.ts +1 -1
  368. package/lib/simple-tree/getTreeNodeForField.d.ts.map +1 -1
  369. package/lib/simple-tree/getTreeNodeForField.js +1 -1
  370. package/lib/simple-tree/getTreeNodeForField.js.map +1 -1
  371. package/lib/simple-tree/index.d.ts +6 -6
  372. package/lib/simple-tree/index.d.ts.map +1 -1
  373. package/lib/simple-tree/index.js +4 -4
  374. package/lib/simple-tree/index.js.map +1 -1
  375. package/lib/simple-tree/leafNodeSchema.d.ts +2 -1
  376. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  377. package/lib/simple-tree/leafNodeSchema.js +2 -1
  378. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  379. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  380. package/lib/simple-tree/node-kinds/array/arrayNode.js +10 -7
  381. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  382. package/lib/simple-tree/node-kinds/index.d.ts +2 -1
  383. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  384. package/lib/simple-tree/node-kinds/index.js +1 -0
  385. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  386. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  387. package/lib/simple-tree/node-kinds/map/mapNode.js +9 -5
  388. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  389. package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
  390. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  391. package/lib/simple-tree/node-kinds/object/index.js +1 -1
  392. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  393. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  394. package/lib/simple-tree/node-kinds/object/objectNode.js +11 -8
  395. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  396. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +5 -1
  397. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  398. package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  399. package/lib/simple-tree/node-kinds/record/index.d.ts +7 -0
  400. package/lib/simple-tree/node-kinds/record/index.d.ts.map +1 -0
  401. package/lib/simple-tree/node-kinds/record/index.js +7 -0
  402. package/lib/simple-tree/node-kinds/record/index.js.map +1 -0
  403. package/lib/simple-tree/node-kinds/record/recordNode.d.ts +39 -0
  404. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -0
  405. package/lib/simple-tree/node-kinds/record/recordNode.js +232 -0
  406. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -0
  407. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +70 -0
  408. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -0
  409. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js +26 -0
  410. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -0
  411. package/lib/simple-tree/schemaTypes.d.ts +13 -27
  412. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  413. package/lib/simple-tree/schemaTypes.js +42 -35
  414. package/lib/simple-tree/schemaTypes.js.map +1 -1
  415. package/lib/simple-tree/simpleSchema.d.ts +16 -1
  416. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  417. package/lib/simple-tree/simpleSchema.js.map +1 -1
  418. package/lib/simple-tree/toStoredSchema.d.ts +2 -0
  419. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  420. package/lib/simple-tree/toStoredSchema.js +6 -2
  421. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  422. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  423. package/lib/simple-tree/treeNodeValid.js +1 -2
  424. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  425. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
  426. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  427. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +58 -34
  428. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  429. package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
  430. package/lib/simple-tree/walkFieldSchema.js +1 -1
  431. package/lib/simple-tree/walkFieldSchema.js.map +1 -1
  432. package/lib/tableSchema.d.ts +7 -2
  433. package/lib/tableSchema.d.ts.map +1 -1
  434. package/lib/tableSchema.js +22 -8
  435. package/lib/tableSchema.js.map +1 -1
  436. package/lib/util/brandedMap.d.ts +0 -2
  437. package/lib/util/brandedMap.d.ts.map +1 -1
  438. package/lib/util/brandedMap.js.map +1 -1
  439. package/package.json +36 -24
  440. package/src/core/forest/editableForest.ts +0 -2
  441. package/src/core/forest/forest.ts +0 -4
  442. package/src/core/rebase/changeRebaser.ts +0 -6
  443. package/src/core/rebase/types.ts +0 -2
  444. package/src/core/schema-stored/schema.ts +0 -8
  445. package/src/core/schema-view/view.ts +0 -2
  446. package/src/core/tree/cursor.ts +0 -2
  447. package/src/core/tree/delta.ts +0 -2
  448. package/src/core/tree/types.ts +0 -4
  449. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +0 -4
  450. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +0 -10
  451. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +1 -3
  452. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +0 -2
  453. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +0 -10
  454. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +0 -8
  455. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +0 -12
  456. package/src/feature-libraries/sequence-field/types.ts +0 -2
  457. package/src/index.ts +10 -0
  458. package/src/jsonDomainSchema.ts +3 -3
  459. package/src/packageVersion.ts +1 -1
  460. package/src/shared-tree/schematizingTreeView.ts +8 -5
  461. package/src/shared-tree/treeAlpha.ts +190 -3
  462. package/src/simple-tree/api/configuration.ts +131 -45
  463. package/src/simple-tree/api/customTree.ts +3 -3
  464. package/src/simple-tree/api/index.ts +6 -3
  465. package/src/simple-tree/api/jsonSchema.ts +35 -8
  466. package/src/simple-tree/api/schemaFactory.ts +5 -13
  467. package/src/simple-tree/api/schemaFactoryAlpha.ts +268 -1
  468. package/src/simple-tree/api/schemaFactoryRecursive.ts +5 -1
  469. package/src/simple-tree/api/schemaFromSimple.ts +6 -0
  470. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +16 -7
  471. package/src/simple-tree/api/treeBeta.ts +2 -2
  472. package/src/simple-tree/api/treeNodeApi.ts +7 -4
  473. package/src/simple-tree/api/typesUnsafe.ts +15 -0
  474. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +14 -6
  475. package/src/simple-tree/core/context.ts +3 -3
  476. package/src/simple-tree/core/getOrCreateNode.ts +14 -0
  477. package/src/simple-tree/core/index.ts +8 -1
  478. package/src/simple-tree/core/treeNodeKernel.ts +1 -1
  479. package/src/simple-tree/core/treeNodeSchema.ts +121 -5
  480. package/src/simple-tree/core/walkSchema.ts +16 -7
  481. package/src/simple-tree/createContext.ts +1 -1
  482. package/src/simple-tree/getTreeNodeForField.ts +3 -1
  483. package/src/simple-tree/index.ts +20 -5
  484. package/src/simple-tree/leafNodeSchema.ts +7 -1
  485. package/src/simple-tree/node-kinds/array/arrayNode.ts +15 -9
  486. package/src/simple-tree/node-kinds/index.ts +11 -0
  487. package/src/simple-tree/node-kinds/map/mapNode.ts +10 -4
  488. package/src/simple-tree/node-kinds/object/index.ts +5 -1
  489. package/src/simple-tree/node-kinds/object/objectNode.ts +23 -13
  490. package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +6 -3
  491. package/src/simple-tree/node-kinds/record/index.ts +14 -0
  492. package/src/simple-tree/node-kinds/record/recordNode.ts +410 -0
  493. package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +136 -0
  494. package/src/simple-tree/schemaTypes.ts +55 -64
  495. package/src/simple-tree/simpleSchema.ts +19 -1
  496. package/src/simple-tree/toStoredSchema.ts +6 -2
  497. package/src/simple-tree/treeNodeValid.ts +1 -1
  498. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +83 -40
  499. package/src/simple-tree/walkFieldSchema.ts +5 -1
  500. package/src/tableSchema.ts +27 -8
  501. package/src/util/brandedMap.ts +0 -2
@@ -3,7 +3,15 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { TreeLeafValue } from "../schemaTypes.js";
6
+ import { assert } from "@fluidframework/core-utils/internal";
7
+ import type { LazyItem } from "../flexList.js";
8
+ import type {
9
+ AllowedTypeMetadata,
10
+ AllowedTypesMetadata,
11
+ AnnotatedAllowedTypes,
12
+ ImplicitAnnotatedAllowedTypes,
13
+ TreeLeafValue,
14
+ } from "../schemaTypes.js";
7
15
  import type { SimpleNodeSchemaBase } from "../simpleSchema.js";
8
16
 
9
17
  import type { TreeNode } from "./treeNode.js";
@@ -62,6 +70,48 @@ export type TreeNodeSchema<
62
70
  TCustomMetadata
63
71
  >;
64
72
 
73
+ /**
74
+ * Stores annotations for an individual allowed type.
75
+ * @alpha
76
+ */
77
+ export interface AnnotatedAllowedType<T = LazyItem<TreeNodeSchema>> {
78
+ /**
79
+ * Annotations for the allowed type.
80
+ */
81
+ readonly metadata: AllowedTypeMetadata;
82
+ /**
83
+ * The allowed type the annotations apply to in a particular schema.
84
+ */
85
+ readonly type: T;
86
+ }
87
+
88
+ /**
89
+ * Stores annotations for a set of evaluated annotated allowed types.
90
+ * @alpha
91
+ */
92
+ export interface NormalizedAnnotatedAllowedTypes {
93
+ /**
94
+ * Annotations that apply to a set of allowed types.
95
+ */
96
+ readonly metadata: AllowedTypesMetadata;
97
+ /**
98
+ * All the evaluated allowed types that the annotations apply to. The types themselves are also individually annotated.
99
+ */
100
+ readonly types: readonly AnnotatedAllowedType<TreeNodeSchema>[];
101
+ }
102
+
103
+ /**
104
+ * Checks if the input is an {@link AnnotatedAllowedTypes}.
105
+ */
106
+ export function isAnnotatedAllowedTypes(
107
+ allowedTypes: ImplicitAnnotatedAllowedTypes,
108
+ ): allowedTypes is AnnotatedAllowedTypes {
109
+ return (
110
+ // Class based schema, and lazy schema references report type "function": filtering them out with typeof makes narrowing based on members mostly safe
111
+ typeof allowedTypes === "object" && "metadata" in allowedTypes && "types" in allowedTypes
112
+ );
113
+ }
114
+
65
115
  /**
66
116
  * Schema which is not a class.
67
117
  * @remarks
@@ -231,8 +281,13 @@ export type TreeNodeSchemaBoth<
231
281
 
232
282
  /**
233
283
  * Data common to all tree node schema.
284
+ *
234
285
  * @remarks
235
286
  * Implementation detail of {@link TreeNodeSchema} which should be accessed instead of referring to this type directly.
287
+ *
288
+ * @privateRemarks
289
+ * All implementations must implement {@link TreeNodeSchemaCorePrivate} as well.
290
+ *
236
291
  * @sealed @public
237
292
  */
238
293
  export interface TreeNodeSchemaCore<
@@ -316,6 +371,63 @@ export interface TreeNodeSchemaCore<
316
371
  createFromInsertable(data: TInsertable): Unhydrated<TreeNode | TreeLeafValue>;
317
372
  }
318
373
 
374
+ /**
375
+ * {@link TreeNodeSchemaCore} extended with some non-exported APIs.
376
+ */
377
+ export interface TreeNodeSchemaCorePrivate<
378
+ Name extends string = string,
379
+ Kind extends NodeKind = NodeKind,
380
+ TInsertable = never,
381
+ ImplicitlyConstructable extends boolean = boolean,
382
+ Info = unknown,
383
+ TCustomMetadata = unknown,
384
+ > extends TreeNodeSchemaCore<
385
+ Name,
386
+ Kind,
387
+ ImplicitlyConstructable,
388
+ Info,
389
+ TInsertable,
390
+ TCustomMetadata
391
+ > {
392
+ /**
393
+ * All possible annotated allowed types that a field under a node with this schema could have.
394
+ * @remarks
395
+ * In this case "field" includes anything that is a field in the internal (flex-tree) abstraction layer.
396
+ * This includes the content field for arrays, and all the fields for map nodes.
397
+ * If this node does not have fields (and thus is a leaf), the array will be empty.
398
+ *
399
+ * This set cannot be used before the schema in it have been defined:
400
+ * more specifically, when using lazy schema references (for example to make foreword references to schema which have not yet been defined),
401
+ * users must wait until after the schema are defined to access this array.
402
+ *
403
+ * @privateRemarks
404
+ * If this is stabilized, it will live alongside the childTypes property on {@link TreeNodeSchemaCore}.
405
+ * @system
406
+ */
407
+ readonly childAnnotatedAllowedTypes: readonly NormalizedAnnotatedAllowedTypes[];
408
+ }
409
+
410
+ /**
411
+ * Downcasts a {@link TreeNodeSchemaCore} to {@link TreeNodeSchemaCorePrivate} if it is one.
412
+ *
413
+ * @remarks
414
+ * This function should only be used internally. The result should not be exposed publicly
415
+ * in any exported types or API return values.
416
+ */
417
+ export function asTreeNodeSchemaCorePrivate(
418
+ schema: TreeNodeSchemaCore<string, NodeKind, boolean>,
419
+ ): TreeNodeSchemaCorePrivate {
420
+ assert(
421
+ "childAnnotatedAllowedTypes" in schema,
422
+ 0xbc9 /* All implementations of TreeNodeSchemaCore must also implement TreeNodeSchemaCorePrivate */,
423
+ );
424
+ assert(
425
+ Array.isArray((schema as TreeNodeSchemaCorePrivate).childAnnotatedAllowedTypes),
426
+ 0xbca /* All implementations of TreeNodeSchemaCore must also implement TreeNodeSchemaCorePrivate */,
427
+ );
428
+ return schema as TreeNodeSchemaCorePrivate;
429
+ }
430
+
319
431
  /**
320
432
  * Kind of tree node.
321
433
  * @remarks
@@ -326,19 +438,23 @@ export enum NodeKind {
326
438
  /**
327
439
  * A node which serves as a map, storing children under string keys.
328
440
  */
329
- Map,
441
+ Map = 0,
330
442
  /**
331
443
  * A node which serves as an array, storing children in an ordered sequence.
332
444
  */
333
- Array,
445
+ Array = 1,
334
446
  /**
335
447
  * A node which stores a heterogenous collection of children in named fields.
336
448
  * @remarks
337
449
  * Each field gets its own schema.
338
450
  */
339
- Object,
451
+ Object = 2,
340
452
  /**
341
453
  * A node which stores a single leaf value.
342
454
  */
343
- Leaf,
455
+ Leaf = 3,
456
+ /**
457
+ * A node which serves as a record, storing children under string keys.
458
+ */
459
+ Record = 4,
344
460
  }
@@ -3,7 +3,11 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { TreeNodeSchema } from "./treeNodeSchema.js";
6
+ import {
7
+ asTreeNodeSchemaCorePrivate,
8
+ type NormalizedAnnotatedAllowedTypes,
9
+ type TreeNodeSchema,
10
+ } from "./treeNodeSchema.js";
7
11
 
8
12
  /**
9
13
  * Traverses all {@link TreeNodeSchema} schema reachable from `schema`, applying the visitor pattern.
@@ -16,9 +20,14 @@ export function walkNodeSchema(
16
20
  if (visitedSet.has(schema)) {
17
21
  return;
18
22
  }
23
+
19
24
  visitedSet.add(schema);
20
25
 
21
- walkAllowedTypes(schema.childTypes, visitor, visitedSet);
26
+ const annotatedAllowedTypes = asTreeNodeSchemaCorePrivate(schema).childAnnotatedAllowedTypes;
27
+
28
+ for (const fieldAllowedTypes of annotatedAllowedTypes) {
29
+ walkAllowedTypes(fieldAllowedTypes, visitor, visitedSet);
30
+ }
22
31
 
23
32
  // This visit is done at the end so the traversal order is most inner types first.
24
33
  // This was picked since when fixing errors,
@@ -31,14 +40,14 @@ export function walkNodeSchema(
31
40
  * Traverses all {@link TreeNodeSchema} schema reachable from `allowedTypes`, applying the visitor pattern.
32
41
  */
33
42
  export function walkAllowedTypes(
34
- allowedTypes: Iterable<TreeNodeSchema>,
43
+ annotatedAllowedTypes: NormalizedAnnotatedAllowedTypes,
35
44
  visitor: SchemaVisitor,
36
45
  visitedSet: Set<TreeNodeSchema> = new Set(),
37
46
  ): void {
38
- for (const childType of allowedTypes) {
39
- walkNodeSchema(childType, visitor, visitedSet);
47
+ for (const { type } of annotatedAllowedTypes.types) {
48
+ walkNodeSchema(type, visitor, visitedSet);
40
49
  }
41
- visitor.allowedTypes?.(allowedTypes);
50
+ visitor.allowedTypes?.(annotatedAllowedTypes);
42
51
  }
43
52
 
44
53
  /**
@@ -55,5 +64,5 @@ export interface SchemaVisitor {
55
64
  *
56
65
  * This includes every field, but also the allowed types array for maps and arrays and the root if starting at {@link walkAllowedTypes}.
57
66
  */
58
- allowedTypes?: (allowedTypes: Iterable<TreeNodeSchema>) => void;
67
+ allowedTypes?: (allowedTypes: NormalizedAnnotatedAllowedTypes) => void;
59
68
  }
@@ -20,6 +20,6 @@ export function getUnhydratedContext(schema: ImplicitFieldSchema): Context {
20
20
  const normalized = normalizeFieldSchema(schema);
21
21
 
22
22
  const flexContext = new UnhydratedContext(defaultSchemaPolicy, toStoredSchema(schema));
23
- return new Context(normalized.allowedTypeSet, flexContext);
23
+ return new Context(normalized.annotatedAllowedTypesNormalized, flexContext);
24
24
  });
25
25
  }
@@ -19,7 +19,9 @@ import { type TreeNode, getOrCreateNodeFromInnerNode } from "./core/index.js";
19
19
  /**
20
20
  * Retrieve the associated {@link TreeNode} for the given field's content.
21
21
  */
22
- export function getTreeNodeForField(field: FlexTreeField): TreeNode | TreeValue | undefined {
22
+ export function tryGetTreeNodeForField(
23
+ field: FlexTreeField,
24
+ ): TreeNode | TreeValue | undefined {
23
25
  function tryToUnboxLeaves(
24
26
  flexField: FlexTreeOptionalField | FlexTreeRequiredField,
25
27
  ): TreeNode | TreeValue | undefined {
@@ -8,6 +8,8 @@ export {
8
8
  typeSchemaSymbol,
9
9
  type WithType,
10
10
  type TreeNodeSchema,
11
+ type AnnotatedAllowedType,
12
+ type NormalizedAnnotatedAllowedTypes,
11
13
  NodeKind,
12
14
  type TreeNodeSchemaClass,
13
15
  type TreeNodeSchemaNonClass,
@@ -23,6 +25,7 @@ export {
23
25
  SimpleContextSlot,
24
26
  getOrCreateInnerNode,
25
27
  getOrCreateNodeFromInnerNode,
28
+ getOrCreateNodeFromInnerUnboxedNode,
26
29
  getKernel,
27
30
  } from "./core/index.js";
28
31
  export {
@@ -66,6 +69,8 @@ export {
66
69
  type JsonTreeSchema,
67
70
  type JsonFieldSchema,
68
71
  type JsonLeafSchemaType,
72
+ type JsonRecordNodeSchema,
73
+ type JsonStringKeyPatternProperties,
69
74
  type TreeSchemaEncodingOptions,
70
75
  getJsonSchema,
71
76
  getSimpleSchema,
@@ -80,12 +85,13 @@ export {
80
85
  type System_Unsafe,
81
86
  type ArrayNodeCustomizableSchemaUnsafe,
82
87
  type MapNodeCustomizableSchemaUnsafe,
88
+ type TreeRecordNodeUnsafe,
83
89
  type TreeViewAlpha,
84
90
  type TreeBranch,
85
91
  type TreeBranchEvents,
86
- tryGetSchema,
87
- getStoredKey,
88
92
  getPropertyKeyFromStoredKey,
93
+ getStoredKey,
94
+ tryGetSchema,
89
95
  applySchemaToParserOptions,
90
96
  cursorFromVerbose,
91
97
  verboseFromCursor,
@@ -133,12 +139,11 @@ export type {
133
139
  SimpleNodeSchemaBase,
134
140
  SimpleNodeSchemaBaseAlpha,
135
141
  SimpleObjectFieldSchema,
142
+ SimpleRecordNodeSchema,
136
143
  } from "./simpleSchema.js";
137
144
  export {
138
145
  type NodeFromSchema,
139
146
  isTreeNodeSchemaClass,
140
- type AnnotatedAllowedType,
141
- type AnnotatedAllowedTypes,
142
147
  type ImplicitFieldSchema,
143
148
  type ImplicitAnnotatedFieldSchema,
144
149
  type TreeFieldFromImplicitField,
@@ -157,6 +162,7 @@ export {
157
162
  type AllowedTypes,
158
163
  type AllowedTypeMetadata,
159
164
  type AllowedTypesMetadata,
165
+ type AnnotatedAllowedTypes,
160
166
  FieldKind,
161
167
  FieldSchema,
162
168
  type FieldSchemaAlpha,
@@ -185,11 +191,12 @@ export {
185
191
  type NodeSchemaMetadata,
186
192
  evaluateLazySchema,
187
193
  } from "./schemaTypes.js";
188
- export { getTreeNodeForField } from "./getTreeNodeForField.js";
194
+ export { tryGetTreeNodeForField } from "./getTreeNodeForField.js";
189
195
  export {
190
196
  type ArrayNodeCustomizableSchema,
191
197
  type ArrayNodePojoEmulationSchema,
192
198
  ArrayNodeSchema,
199
+ asIndex,
193
200
  isArrayNodeSchema,
194
201
  IterableTreeArrayContent,
195
202
  type ReadonlyArrayNode,
@@ -204,10 +211,18 @@ export {
204
211
  type InsertableObjectFromSchemaRecord,
205
212
  type ObjectFromSchemaRecord,
206
213
  ObjectNodeSchema,
214
+ type ObjectNodeSchemaPrivate,
215
+ isObjectNodeSchema,
207
216
  type InsertableObjectFromAnnotatedSchemaRecord,
208
217
  type TreeObjectNode,
209
218
  setField,
210
219
  createUnknownOptionalFieldPolicy,
220
+ isRecordNodeSchema,
221
+ type RecordNodeCustomizableSchema,
222
+ type RecordNodeInsertableData,
223
+ type RecordNodePojoEmulationSchema,
224
+ RecordNodeSchema,
225
+ type TreeRecordNode,
211
226
  } from "./node-kinds/index.js";
212
227
  export {
213
228
  unhydratedFlexTreeFromInsertable,
@@ -12,7 +12,12 @@ import {
12
12
  valueSchemaAllows,
13
13
  } from "../feature-libraries/index.js";
14
14
 
15
- import { NodeKind, type TreeNodeSchema, type TreeNodeSchemaNonClass } from "./core/index.js";
15
+ import {
16
+ NodeKind,
17
+ type NormalizedAnnotatedAllowedTypes,
18
+ type TreeNodeSchema,
19
+ type TreeNodeSchemaNonClass,
20
+ } from "./core/index.js";
16
21
  import type { NodeSchemaMetadata, TreeLeafValue } from "./schemaTypes.js";
17
22
  import type { SimpleLeafNodeSchema } from "./simpleSchema.js";
18
23
  import type { JsonCompatibleReadOnlyObject } from "../util/index.js";
@@ -34,6 +39,7 @@ export class LeafNodeSchema<Name extends string, const T extends ValueSchema>
34
39
  public readonly info: T;
35
40
  public readonly implicitlyConstructable = true as const;
36
41
  public readonly childTypes: ReadonlySet<TreeNodeSchema> = new Set();
42
+ public readonly childAnnotatedAllowedTypes: readonly NormalizedAnnotatedAllowedTypes[] = [];
37
43
 
38
44
  public create(data: TreeValue<T> | FlexTreeNode): TreeValue<T> {
39
45
  if (isFlexTreeNode(data)) {
@@ -7,14 +7,14 @@ import { Lazy, oob, fail } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
9
  import { EmptyKey } from "../../../core/index.js";
10
- import {
11
- type FlexibleFieldContent,
12
- type FlexTreeNode,
13
- type FlexTreeSequenceField,
14
- isFlexTreeNode,
10
+ import type {
11
+ FlexibleFieldContent,
12
+ FlexTreeNode,
13
+ FlexTreeSequenceField,
15
14
  } from "../../../feature-libraries/index.js";
16
15
  import {
17
16
  normalizeAllowedTypes,
17
+ normalizeAnnotatedAllowedTypes,
18
18
  unannotateImplicitAllowedTypes,
19
19
  type ImplicitAllowedTypes,
20
20
  type ImplicitAnnotatedAllowedTypes,
@@ -41,6 +41,8 @@ import {
41
41
  getKernel,
42
42
  type UnhydratedFlexTreeNode,
43
43
  UnhydratedSequenceField,
44
+ getOrCreateNodeFromInnerUnboxedNode,
45
+ type NormalizedAnnotatedAllowedTypes,
44
46
  } from "../../core/index.js";
45
47
  import {
46
48
  type InsertableContent,
@@ -735,9 +737,9 @@ function createArrayNodeProxy(
735
737
  }
736
738
 
737
739
  const maybeContent = field.at(maybeIndex);
738
- return isFlexTreeNode(maybeContent)
739
- ? getOrCreateNodeFromInnerNode(maybeContent)
740
- : maybeContent;
740
+ return maybeContent === undefined
741
+ ? undefined
742
+ : getOrCreateNodeFromInnerUnboxedNode(maybeContent);
741
743
  },
742
744
  set: (target, key, newValue, receiver) => {
743
745
  if (key === "length") {
@@ -796,7 +798,7 @@ function createArrayNodeProxy(
796
798
  // To satisfy 'deepEquals' level scrutiny, the property descriptor for indexed properties must
797
799
  // be a simple value property (as opposed to using getter) and declared writable/enumerable/configurable.
798
800
  return {
799
- value: isFlexTreeNode(val) ? getOrCreateNodeFromInnerNode(val) : val,
801
+ value: val === undefined ? undefined : getOrCreateNodeFromInnerUnboxedNode(val),
800
802
  writable: true, // For MVP, setting indexed properties is reported as allowed here (for deep equals compatibility noted above), but not actually supported.
801
803
  enumerable: true,
802
804
  configurable: true,
@@ -1110,6 +1112,7 @@ export function arraySchema<
1110
1112
  const unannotatedTypes = unannotateImplicitAllowedTypes(info);
1111
1113
 
1112
1114
  const lazyChildTypes = new Lazy(() => normalizeAllowedTypes(unannotatedTypes));
1115
+ const lazyAnnotatedTypes = new Lazy(() => [normalizeAnnotatedAllowedTypes(info)]);
1113
1116
  const lazyAllowedTypesIdentifiers = new Lazy(
1114
1117
  () => new Set([...lazyChildTypes.value].map((type) => type.identifier)),
1115
1118
  );
@@ -1192,6 +1195,9 @@ export function arraySchema<
1192
1195
  public static get childTypes(): ReadonlySet<TreeNodeSchema> {
1193
1196
  return lazyChildTypes.value;
1194
1197
  }
1198
+ public static get childAnnotatedAllowedTypes(): readonly NormalizedAnnotatedAllowedTypes[] {
1199
+ return lazyAnnotatedTypes.value;
1200
+ }
1195
1201
  public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
1196
1202
  public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
1197
1203
  persistedMetadata;
@@ -33,7 +33,18 @@ export {
33
33
  isObjectNodeSchema,
34
34
  type ObjectFromSchemaRecord,
35
35
  ObjectNodeSchema,
36
+ type ObjectNodeSchemaPrivate,
36
37
  objectSchema,
37
38
  setField,
38
39
  type TreeObjectNode,
39
40
  } from "./object/index.js";
41
+
42
+ export {
43
+ isRecordNodeSchema,
44
+ type RecordNodeCustomizableSchema,
45
+ type RecordNodeInsertableData,
46
+ type RecordNodePojoEmulationSchema,
47
+ RecordNodeSchema,
48
+ recordSchema,
49
+ type TreeRecordNode,
50
+ } from "./record/index.js";
@@ -10,11 +10,12 @@ import type {
10
10
  FlexTreeOptionalField,
11
11
  OptionalFieldEditBuilder,
12
12
  } from "../../../feature-libraries/index.js";
13
- import { getTreeNodeForField } from "../../getTreeNodeForField.js";
13
+ import { tryGetTreeNodeForField } from "../../getTreeNodeForField.js";
14
14
  import {
15
15
  createFieldSchema,
16
16
  FieldKind,
17
17
  normalizeAllowedTypes,
18
+ normalizeAnnotatedAllowedTypes,
18
19
  unannotateImplicitAllowedTypes,
19
20
  type ImplicitAllowedTypes,
20
21
  type ImplicitAnnotatedAllowedTypes,
@@ -36,6 +37,7 @@ import {
36
37
  getOrCreateInnerNode,
37
38
  type InternalTreeNode,
38
39
  type UnhydratedFlexTreeNode,
40
+ type NormalizedAnnotatedAllowedTypes,
39
41
  } from "../../core/index.js";
40
42
  import {
41
43
  unhydratedFlexTreeFromInsertable,
@@ -177,14 +179,14 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
177
179
  for (const key of node.keys()) {
178
180
  yield [
179
181
  key,
180
- getTreeNodeForField(node.getBoxed(key)) as TreeNodeFromImplicitAllowedTypes<T>,
182
+ tryGetTreeNodeForField(node.getBoxed(key)) as TreeNodeFromImplicitAllowedTypes<T>,
181
183
  ];
182
184
  }
183
185
  }
184
186
  public get(key: string): TreeNodeFromImplicitAllowedTypes<T> {
185
187
  const node = this.innerNode;
186
188
  const field = node.getBoxed(brand(key));
187
- return getTreeNodeForField(field) as TreeNodeFromImplicitAllowedTypes<T>;
189
+ return tryGetTreeNodeForField(field) as TreeNodeFromImplicitAllowedTypes<T>;
188
190
  }
189
191
  public has(key: string): boolean {
190
192
  return this.innerNode.tryGetField(brand(key)) !== undefined;
@@ -221,7 +223,7 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
221
223
  thisArg?: unknown,
222
224
  ): void {
223
225
  for (const field of getOrCreateInnerNode(this)) {
224
- const node = getTreeNodeForField(field) as TreeNodeFromImplicitAllowedTypes<T>;
226
+ const node = tryGetTreeNodeForField(field) as TreeNodeFromImplicitAllowedTypes<T>;
225
227
  callbackFn.call(thisArg, node, field.key, this);
226
228
  }
227
229
  }
@@ -252,6 +254,7 @@ export function mapSchema<
252
254
  const lazyChildTypes = new Lazy(() =>
253
255
  normalizeAllowedTypes(unannotateImplicitAllowedTypes(info)),
254
256
  );
257
+ const lazyAnnotatedTypes = new Lazy(() => [normalizeAnnotatedAllowedTypes(info)]);
255
258
  const lazyAllowedTypesIdentifiers = new Lazy(
256
259
  () => new Set([...lazyChildTypes.value].map((type) => type.identifier)),
257
260
  );
@@ -300,6 +303,9 @@ export function mapSchema<
300
303
  public static get childTypes(): ReadonlySet<TreeNodeSchema> {
301
304
  return lazyChildTypes.value;
302
305
  }
306
+ public static get childAnnotatedAllowedTypes(): readonly NormalizedAnnotatedAllowedTypes[] {
307
+ return lazyAnnotatedTypes.value;
308
+ }
303
309
  public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
304
310
  public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
305
311
  persistedMetadata;
@@ -13,4 +13,8 @@ export {
13
13
  setField,
14
14
  type TreeObjectNode,
15
15
  } from "./objectNode.js";
16
- export { isObjectNodeSchema, ObjectNodeSchema } from "./objectNodeTypes.js";
16
+ export {
17
+ isObjectNodeSchema,
18
+ ObjectNodeSchema,
19
+ type ObjectNodeSchemaPrivate,
20
+ } from "./objectNodeTypes.js";
@@ -32,13 +32,15 @@ import {
32
32
  type Context,
33
33
  type UnhydratedFlexTreeNode,
34
34
  getOrCreateInnerNode,
35
+ type NormalizedAnnotatedAllowedTypes,
35
36
  } from "../../core/index.js";
36
37
  import { getUnhydratedContext } from "../../createContext.js";
37
- import { getTreeNodeForField } from "../../getTreeNodeForField.js";
38
+ import { tryGetTreeNodeForField } from "../../getTreeNodeForField.js";
38
39
  import {
39
40
  isObjectNodeSchema,
40
41
  type ObjectNodeSchema,
41
42
  type ObjectNodeSchemaInternalData,
43
+ type ObjectNodeSchemaPrivate,
42
44
  } from "./objectNodeTypes.js";
43
45
  import { prepareForInsertion } from "../../prepareForInsertion.js";
44
46
  import {
@@ -54,7 +56,6 @@ import {
54
56
  type FieldSchemaAlpha,
55
57
  ObjectFieldSchema,
56
58
  type ImplicitAnnotatedFieldSchema,
57
- unannotateSchemaRecord,
58
59
  type UnannotateSchemaRecord,
59
60
  } from "../../schemaTypes.js";
60
61
  import type { SimpleObjectFieldSchema } from "../../simpleSchema.js";
@@ -194,7 +195,9 @@ export type SimpleKeyMap = ReadonlyMap<
194
195
  /**
195
196
  * Caches the mappings from property keys to stored keys for the provided object field schemas in {@link simpleKeyToFlexKeyCache}.
196
197
  */
197
- function createFlexKeyMapping(fields: Record<string, ImplicitFieldSchema>): SimpleKeyMap {
198
+ function createFlexKeyMapping(
199
+ fields: Record<string, ImplicitAnnotatedFieldSchema>,
200
+ ): SimpleKeyMap {
198
201
  const keyMap: Map<string | symbol, { storedKey: FieldKey; schema: FieldSchema }> = new Map();
199
202
  for (const [propertyKey, fieldSchema] of Object.entries(fields)) {
200
203
  const storedKey = getStoredKey(propertyKey, fieldSchema);
@@ -214,7 +217,7 @@ function createFlexKeyMapping(fields: Record<string, ImplicitFieldSchema>): Simp
214
217
  * If not provided `{}` is used for the target.
215
218
  */
216
219
  function createProxyHandler(
217
- schema: ObjectNodeSchema & ObjectNodeSchemaInternalData,
220
+ schema: ObjectNodeSchemaPrivate,
218
221
  allowAdditionalProperties: boolean,
219
222
  ): ProxyHandler<TreeNode> {
220
223
  // To satisfy 'deepEquals' level scrutiny, the target of the proxy must be an object with the same
@@ -234,13 +237,13 @@ function createProxyHandler(
234
237
  debugAssert(() => !flexNode.context.isDisposed() || "FlexTreeNode is disposed");
235
238
  const field = flexNode.tryGetField(fieldInfo.storedKey);
236
239
  if (field !== undefined) {
237
- return getTreeNodeForField(field);
240
+ return tryGetTreeNodeForField(field);
238
241
  }
239
242
 
240
243
  return undefined;
241
244
  }
242
245
 
243
- // POJO mode objects don't have TreeNode's build in members on their targets, so special case them:
246
+ // POJO mode objects don't have TreeNode's built in members on their targets, so special case them:
244
247
  if (propertyKey === typeSchemaSymbol) {
245
248
  return schema;
246
249
  }
@@ -302,7 +305,7 @@ function createProxyHandler(
302
305
  const field = getOrCreateInnerNode(proxy).tryGetField(fieldInfo.storedKey);
303
306
 
304
307
  const p: PropertyDescriptor = {
305
- value: field === undefined ? undefined : getTreeNodeForField(field),
308
+ value: field === undefined ? undefined : tryGetTreeNodeForField(field),
306
309
  writable: true,
307
310
  // Report empty fields as own properties so they shadow inherited properties (even when empty) to match TypeScript typing.
308
311
  // Make empty fields not enumerable so they get skipped when iterating over an object to better align with
@@ -372,14 +375,12 @@ export function objectSchema<
372
375
  // Field set can't be modified after this since derived data is stored in maps.
373
376
  Object.freeze(info);
374
377
 
375
- const unannotatedInfo = unannotateSchemaRecord(info);
376
-
377
378
  // Ensure no collisions between final set of property keys, and final set of stored keys (including those
378
379
  // implicitly derived from property keys)
379
- assertUniqueKeys(identifier, unannotatedInfo);
380
+ assertUniqueKeys(identifier, info);
380
381
 
381
382
  // Performance optimization: cache property key => stored key and schema.
382
- const flexKeyMap: SimpleKeyMap = createFlexKeyMapping(unannotatedInfo);
383
+ const flexKeyMap: SimpleKeyMap = createFlexKeyMapping(info);
383
384
 
384
385
  const identifierFieldKeys: FieldKey[] = [];
385
386
  for (const item of flexKeyMap.values()) {
@@ -391,6 +392,12 @@ export function objectSchema<
391
392
  const lazyChildTypes = new Lazy(
392
393
  () => new Set(Array.from(flexKeyMap.values(), (f) => [...f.schema.allowedTypeSet]).flat()),
393
394
  );
395
+ const lazyAnnotatedTypes = new Lazy(() =>
396
+ Array.from(
397
+ flexKeyMap.values(),
398
+ ({ schema }) => normalizeFieldSchema(schema).annotatedAllowedTypesNormalized,
399
+ ),
400
+ );
394
401
 
395
402
  let handler: ProxyHandler<object>;
396
403
  let customizable: boolean;
@@ -470,7 +477,7 @@ export function objectSchema<
470
477
  protected static override oneTimeSetup<T2>(this: typeof TreeNodeValid<T2>): Context {
471
478
  // One time initialization that required knowing the most derived type (from this.constructor) and thus has to be lazy.
472
479
  customizable = (this as unknown) !== CustomObjectNode;
473
- const schema = this as unknown as ObjectNodeSchema & ObjectNodeSchemaInternalData;
480
+ const schema = this as unknown as ObjectNodeSchemaPrivate;
474
481
  handler = createProxyHandler(schema, customizable);
475
482
  unhydratedContext = getUnhydratedContext(schema);
476
483
 
@@ -509,6 +516,9 @@ export function objectSchema<
509
516
  public static get childTypes(): ReadonlySet<TreeNodeSchema> {
510
517
  return lazyChildTypes.value;
511
518
  }
519
+ public static get childAnnotatedAllowedTypes(): readonly NormalizedAnnotatedAllowedTypes[] {
520
+ return lazyAnnotatedTypes.value;
521
+ }
512
522
  public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
513
523
  public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
514
524
  persistedMetadata;
@@ -537,7 +547,7 @@ const targetToProxy: WeakMap<object, TreeNode> = new WeakMap();
537
547
  */
538
548
  function assertUniqueKeys<
539
549
  const Name extends number | string,
540
- const Fields extends RestrictiveStringRecord<ImplicitFieldSchema>,
550
+ const Fields extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>,
541
551
  >(schemaName: Name, fields: Fields): void {
542
552
  // Verify that there are no duplicates among the explicitly specified stored keys.
543
553
  const explicitStoredKeys = new Set<string>();
@@ -83,8 +83,11 @@ export const ObjectNodeSchema = {
83
83
  },
84
84
  } as const;
85
85
 
86
- export function isObjectNodeSchema(
87
- schema: TreeNodeSchema,
88
- ): schema is ObjectNodeSchema & ObjectNodeSchemaInternalData {
86
+ /**
87
+ * {@link ObjectNodeSchema} with data that is not part of the package-exported API surface.
88
+ */
89
+ export type ObjectNodeSchemaPrivate = ObjectNodeSchema & ObjectNodeSchemaInternalData;
90
+
91
+ export function isObjectNodeSchema(schema: TreeNodeSchema): schema is ObjectNodeSchemaPrivate {
89
92
  return schema.kind === NodeKind.Object;
90
93
  }
@@ -0,0 +1,14 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ export { recordSchema } from "./recordNode.js";
7
+ export {
8
+ isRecordNodeSchema,
9
+ type RecordNodeCustomizableSchema,
10
+ type RecordNodeInsertableData,
11
+ type RecordNodePojoEmulationSchema,
12
+ RecordNodeSchema,
13
+ type TreeRecordNode,
14
+ } from "./recordNodeTypes.js";