@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,194 @@
1
1
  # @fluidframework/tree
2
2
 
3
+ ## 2.43.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Tree's enum schema utility are now beta ([#24749](https://github.com/microsoft/FluidFramework/pull/24749)) [a23bc9e4d02](https://github.com/microsoft/FluidFramework/commit/a23bc9e4d025f0925d09daadc2952bf0bfacc06b)
8
+
9
+ The functions [singletonSchema](https://fluidframework.com/docs/api/tree/#singletonschema-function), [adaptEnum](https://fluidframework.com/docs/api/tree/#adaptenum-function) and [enumFromStrings](https://fluidframework.com/docs/api/tree/#enumfromstrings-function) are now `@beta` instead of `@alpha`.
10
+
11
+ - Add TreeAlpha.child and TreeAlpha.children APIs for generic tree traversal ([#24723](https://github.com/microsoft/FluidFramework/pull/24723)) [87941b7fa05](https://github.com/microsoft/FluidFramework/commit/87941b7fa0575e030344079a25f65d25d8457367)
12
+
13
+ #### TreeAlpha.child
14
+
15
+ Access a child node or value of a `TreeNode` by its property key.
16
+
17
+ ```typescript
18
+ class MyObject extends schemaFactory.object("MyObject", {
19
+ foo: schemaFactory.string;
20
+ bar: schemaFactory.optional(schemaFactory.string);
21
+ }) {}
22
+
23
+ const myObject = new MyObject({
24
+ foo: "Hello world!"
25
+ });
26
+
27
+ const foo = TreeAlpha.child(myObject, "foo"); // "Hello world!"
28
+ const bar = TreeAlpha.child(myObject, "bar"); // undefined
29
+ const baz = TreeAlpha.child(myObject, "baz"); // undefined
30
+ ```
31
+
32
+ ```typescript
33
+ class MyArray extends schemaFactory.array("MyArray", schemaFactory.string) {}
34
+
35
+ const myArray = new MyArray("Hello", "World");
36
+
37
+ const child0 = TreeAlpha.child(myArray, 0); // "Hello"
38
+ const child1 = TreeAlpha.child(myArray, 1); // "World
39
+ const child2 = TreeAlpha.child(myArray, 2); // undefined
40
+ ```
41
+
42
+ #### TreeAlpha.children
43
+
44
+ Get all child nodes / values of a `TreeNode`, keyed by their property keys.
45
+
46
+ ```typescript
47
+ class MyObject extends schemaFactory.object("MyObject", {
48
+ foo: schemaFactory.string;
49
+ bar: schemaFactory.optional(schemaFactory.string);
50
+ baz: schemaFactory.optional(schemaFactory.number);
51
+ }) {}
52
+
53
+ const myObject = new MyObject({
54
+ foo: "Hello world!",
55
+ baz: 42,
56
+ });
57
+
58
+ const children = TreeAlpha.children(myObject); // [["foo", "Hello world!"], ["baz", 42]]
59
+ ```
60
+
61
+ ```typescript
62
+ class MyArray extends schemaFactory.array("MyArray", schemaFactory.string) {}
63
+
64
+ const myArray = new MyArray("Hello", "World");
65
+
66
+ const children = TreeAlpha.children(myObject); // [[0, "Hello"], [1, "World"]]
67
+ ```
68
+
69
+ - Rename and change type of annotatedAllowedTypeSet on FieldSchemaAlpha to more closely align with allowedTypesSet ([#24820](https://github.com/microsoft/FluidFramework/pull/24820)) [f4e8dc8cd09](https://github.com/microsoft/FluidFramework/commit/f4e8dc8cd09f052f21e436e2c0584a1a34d2be77)
70
+
71
+ This changes the `annotatedAllowedTypeSet` property on [`FieldSchemaAlpha`](https://fluidframework.com/docs/api/fluid-framework/fieldschemaalpha-class).
72
+ It is now called `annotatedAllowedTypesNormalized` and stores evaluated schemas along with their annotations in a list of objects rather than as a mapping from the schemas to their annotations. This makes the API easier to use and better aligns with the current public APIs.
73
+
74
+ - Persisted metadata for Shared Tree schemas (Alpha) ([#24812](https://github.com/microsoft/FluidFramework/pull/24812)) [3f81ab52ff7](https://github.com/microsoft/FluidFramework/commit/3f81ab52ff7265a8533c0e192c8b77d298b70eea)
75
+
76
+ The persisted metadata feature for Shared Tree allows an application author to write document-persisted metadata along with the schema. This feature is supported for both node and field schemas.
77
+
78
+ #### Using the persisted metadata feature
79
+
80
+ As of now, persisted metadata support is available via the SchemaFactoryAlpha API:
81
+
82
+ ```ts
83
+ // Construct a schema factory with alpha APIs
84
+ const schemaFactory = new SchemaFactoryAlpha("com.example");
85
+ ```
86
+
87
+ Persisted metadata can take the shape of any JSON-serializable object, e.g.:
88
+
89
+ ```ts
90
+ const persistedMetadata = { a: 2 };
91
+ ```
92
+
93
+ #### Feature flag
94
+
95
+ To enable persisted metadata, use `configuredSharedTree` to specify the format version. The tree that is returned can be substituted in place of the default `SharedTree` object exported by the Fluid Framework. For example:
96
+
97
+ ```ts
98
+ const tree = configuredSharedTree({
99
+ formatVersion: SharedTreeFormatVersion.v5,
100
+ }).create(runtime);
101
+
102
+ export const MyContainerSchema = {
103
+ initialObjects: {
104
+ appData: tree,
105
+ },
106
+ } satisfies ContainerSchema;
107
+ ```
108
+
109
+ #### Examples
110
+
111
+ ##### Field schemas with persisted metadata
112
+
113
+ ```ts
114
+ // Construct a schema factory with alpha APIs
115
+ const schemaFactory = new SchemaFactoryAlpha("com.example");
116
+
117
+ // Define metadata. This can take the shape of any JSON-serializable object.
118
+ const persistedMetadata = { a: 2 };
119
+
120
+ // Foo is an object type with metadata
121
+ class Foo extends schemaFactory.objectAlpha(
122
+ "Foo",
123
+ {
124
+ // Metadata for a required number field
125
+ bar: schemaFactory.required(schemaFactory.number, { persistedMetadata }),
126
+
127
+ // Metadata for an optional string field
128
+ baz: schemaFactory.optional(schemaFactory.string, { persistedMetadata }),
129
+ // Metadata for the object type Foo
130
+ },
131
+ { persistedMetadata },
132
+ ) {}
133
+ ```
134
+
135
+ ##### Recursive field schemas
136
+
137
+ ```ts
138
+ // Construct a schema factory with alpha APIs
139
+ const schemaFactory = new SchemaFactoryAlpha("com.example");
140
+
141
+ // Define metadata. This can take the shape of any JSON-serializable object.
142
+ const persistedMetadata = { a: 2 };
143
+
144
+ // Recursive object schema with persisted metadata
145
+ class RecursiveObject extends schemaFactory.objectRecursive(
146
+ "RecursiveObject",
147
+ {
148
+ x: [() => RecursiveObject, schemaFactory.number],
149
+ },
150
+ { persistedMetadata },
151
+ ) {}
152
+
153
+ // Recursive field schema with metadata
154
+ const recursiveField = schemaFactory.optionalRecursive(
155
+ [() => RecursiveObject, schemaFactory.number],
156
+ { persistedMetadata },
157
+ );
158
+ ```
159
+
160
+ ##### Recursive object schemas
161
+
162
+ ```ts
163
+ // Construct a schema factory with alpha APIs
164
+ const schemaFactory = new SchemaFactoryAlpha("com.example");
165
+
166
+ // Define metadata. This can take the shape of any JSON-serializable object.
167
+ const persistedMetadata = { a: 2 };
168
+
169
+ // Recursive array schema
170
+ class Foos extends schemaFactory.arrayRecursive("FooList", [() => Foo], {
171
+ persistedMetadata,
172
+ }) {}
173
+
174
+ // Recursive object schema
175
+ class Foo extends schemaFactory.objectRecursive(
176
+ "Foo",
177
+ { fooList: Foos },
178
+ { persistedMetadata },
179
+ ) {}
180
+
181
+ // Recursive map schema
182
+ class FooMap extends schemaFactory.mapRecursive("FooMap", [() => Foo], {
183
+ persistedMetadata,
184
+ }) {}
185
+ ```
186
+
187
+ - Improved Schema Validation ([#24866](https://github.com/microsoft/FluidFramework/pull/24866)) [caae4ae15ed](https://github.com/microsoft/FluidFramework/commit/caae4ae15edeb8aeae33b0520b18dbb1993965f6)
188
+
189
+ When constructing a [`TreeViewConfiguration`](https://fluidframework.com/docs/api/fluid-framework/treeviewconfiguration-class), the same schema listed more than once in a given [`AllowedTypes`](https://fluidframework.com/docs/api/fluid-framework/allowedtypes-typealias) is now an error even when [`preventAmbiguity`](https://fluidframework.com/docs/api/fluid-framework/treeviewconfiguration-class#preventambiguity-property) is false.
190
+ Previously a bug resulted in this only being rejected when `preventAmbiguity` was true.
191
+
3
192
  ## 2.42.0
4
193
 
5
194
  ### Minor Changes
@@ -32,9 +32,9 @@ export interface AllowedTypesMetadata {
32
32
  export function allowUnused<T>(t?: T): void;
33
33
 
34
34
  // @alpha
35
- export interface AnnotatedAllowedType<T extends TreeNodeSchema = TreeNodeSchema> {
35
+ export interface AnnotatedAllowedType<T = LazyItem<TreeNodeSchema>> {
36
36
  readonly metadata: AllowedTypeMetadata;
37
- readonly type: LazyItem<T>;
37
+ readonly type: T;
38
38
  }
39
39
 
40
40
  // @alpha
@@ -214,7 +214,7 @@ export class FieldSchemaAlpha<Kind extends FieldKind = FieldKind, Types extends
214
214
  readonly allowedTypesMetadata: AllowedTypesMetadata;
215
215
  // (undocumented)
216
216
  readonly annotatedAllowedTypes: ImplicitAnnotatedAllowedTypes;
217
- get annotatedAllowedTypeSet(): ReadonlyMap<TreeNodeSchema, AllowedTypeMetadata>;
217
+ get annotatedAllowedTypesNormalized(): NormalizedAnnotatedAllowedTypes;
218
218
  get persistedMetadata(): JsonCompatibleReadOnlyObject | undefined;
219
219
  }
220
220
 
@@ -429,9 +429,7 @@ export namespace JsonAsTree {
429
429
  export class JsonObject extends _APIExtractorWorkaroundObjectBase {
430
430
  }
431
431
  const // @system
432
- _APIExtractorWorkaroundObjectBase: TreeNodeSchemaClass<"com.fluidframework.json.object", NodeKind.Map, System_Unsafe.TreeMapNodeUnsafe<readonly [LeafSchema<"null", null>, LeafSchema<"number", number>, LeafSchema<"string", string>, LeafSchema<"boolean", boolean>, () => typeof JsonObject, () => typeof Array]> & WithType<"com.fluidframework.json.object", NodeKind.Map, unknown>, {
433
- [Symbol.iterator](): Iterator<[string, string | number | JsonObject | Array | System_Unsafe.InsertableTypedNodeUnsafe<LeafSchema<"boolean", boolean>, LeafSchema<"boolean", boolean>> | null], any, undefined>;
434
- } | {
432
+ _APIExtractorWorkaroundObjectBase: TreeNodeSchemaClass<"com.fluidframework.json.object", NodeKind.Record, TreeRecordNodeUnsafe_2<readonly [LeafSchema<"null", null>, LeafSchema<"number", number>, LeafSchema<"string", string>, LeafSchema<"boolean", boolean>, () => typeof JsonObject, () => typeof Array]> & WithType<"com.fluidframework.json.object", NodeKind.Record, unknown>, {
435
433
  readonly [x: string]: string | number | JsonObject | Array | System_Unsafe.InsertableTypedNodeUnsafe<LeafSchema<"boolean", boolean>, LeafSchema<"boolean", boolean>> | null;
436
434
  }, false, readonly [LeafSchema<"null", null>, LeafSchema<"number", number>, LeafSchema<"string", string>, LeafSchema<"boolean", boolean>, () => typeof JsonObject, () => typeof Array], undefined>;
437
435
  // (undocumented)
@@ -439,9 +437,7 @@ export namespace JsonAsTree {
439
437
  // @system
440
438
  export type _RecursiveArrayWorkaroundJsonArray = FixRecursiveArraySchema<typeof Array>;
441
439
  const // @system
442
- _APIExtractorWorkaroundArrayBase: TreeNodeSchemaClass<"com.fluidframework.json.array", NodeKind.Array, System_Unsafe.TreeArrayNodeUnsafe<readonly [LeafSchema<"null", null>, LeafSchema<"number", number>, LeafSchema<"string", string>, LeafSchema<"boolean", boolean>, () => typeof JsonObject, () => typeof Array]> & WithType<"com.fluidframework.json.array", NodeKind.Array, unknown>, {
443
- [Symbol.iterator](): Iterator<string | number | JsonObject | Array | System_Unsafe.InsertableTypedNodeUnsafe<LeafSchema<"boolean", boolean>, LeafSchema<"boolean", boolean>> | null, any, undefined>;
444
- }, false, readonly [LeafSchema<"null", null>, LeafSchema<"number", number>, LeafSchema<"string", string>, LeafSchema<"boolean", boolean>, () => typeof JsonObject, () => typeof Array], undefined>;
440
+ _APIExtractorWorkaroundArrayBase: ArrayNodeCustomizableSchemaUnsafe_2<"com.fluidframework.json.array", readonly [LeafSchema<"null", null>, LeafSchema<"number", number>, LeafSchema<"string", string>, LeafSchema<"boolean", boolean>, () => typeof JsonObject, () => typeof Array], unknown>;
445
441
  // (undocumented)
446
442
  export type Tree = TreeNodeFromImplicitAllowedTypes<typeof Tree>;
447
443
  }
@@ -479,13 +475,11 @@ export type JsonLeafSchemaType = "string" | "number" | "boolean" | "null";
479
475
 
480
476
  // @alpha @sealed
481
477
  export interface JsonMapNodeSchema extends JsonNodeSchemaBase<NodeKind.Map, "object"> {
482
- readonly patternProperties: {
483
- "^.*$": JsonFieldSchema;
484
- };
478
+ readonly patternProperties: JsonStringKeyPatternProperties;
485
479
  }
486
480
 
487
481
  // @alpha
488
- export type JsonNodeSchema = JsonLeafNodeSchema | JsonMapNodeSchema | JsonArrayNodeSchema | JsonObjectNodeSchema;
482
+ export type JsonNodeSchema = JsonLeafNodeSchema | JsonMapNodeSchema | JsonArrayNodeSchema | JsonObjectNodeSchema | JsonRecordNodeSchema;
489
483
 
490
484
  // @alpha @sealed
491
485
  export interface JsonNodeSchemaBase<TNodeKind extends NodeKind, TJsonSchemaType extends JsonSchemaType> {
@@ -501,6 +495,11 @@ export interface JsonObjectNodeSchema extends JsonNodeSchemaBase<NodeKind.Object
501
495
  readonly required?: string[];
502
496
  }
503
497
 
498
+ // @alpha @sealed
499
+ export interface JsonRecordNodeSchema extends JsonNodeSchemaBase<NodeKind.Record, "object"> {
500
+ readonly patternProperties: JsonStringKeyPatternProperties;
501
+ }
502
+
504
503
  // @alpha
505
504
  export type JsonRefPath = `#/$defs/${JsonSchemaId}`;
506
505
 
@@ -515,6 +514,11 @@ export interface JsonSchemaRef {
515
514
  // @alpha
516
515
  export type JsonSchemaType = "object" | "array" | JsonLeafSchemaType;
517
516
 
517
+ // @alpha @sealed
518
+ export interface JsonStringKeyPatternProperties {
519
+ "^.*$": JsonFieldSchema;
520
+ }
521
+
518
522
  // @alpha @sealed
519
523
  export type JsonTreeSchema = JsonFieldSchema & {
520
524
  readonly $defs: Record<JsonSchemaId, JsonNodeSchema>;
@@ -596,7 +600,8 @@ export enum NodeKind {
596
600
  Array = 1,
597
601
  Leaf = 3,
598
602
  Map = 0,
599
- Object = 2
603
+ Object = 2,
604
+ Record = 4
600
605
  }
601
606
 
602
607
  // @public @sealed
@@ -618,6 +623,12 @@ export interface NodeSchemaOptionsAlpha<out TCustomMetadata = unknown> extends N
618
623
  // @alpha
619
624
  export const noopValidator: JsonValidator;
620
625
 
626
+ // @alpha
627
+ export interface NormalizedAnnotatedAllowedTypes {
628
+ readonly metadata: AllowedTypesMetadata;
629
+ readonly types: readonly AnnotatedAllowedType<TreeNodeSchema>[];
630
+ }
631
+
621
632
  // @public @system
622
633
  export type ObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> = RestrictiveStringRecord<ImplicitFieldSchema> extends T ? {} : {
623
634
  -readonly [Property in keyof T]: Property extends string ? TreeFieldFromImplicitField<T[Property]> : unknown;
@@ -654,6 +665,25 @@ export type ReadSchema<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema
654
665
  TSchema
655
666
  ] extends [ImplicitFieldSchema] ? TSchema : ImplicitFieldSchema;
656
667
 
668
+ // @alpha @sealed @system
669
+ export interface RecordNodeCustomizableSchema<out TName extends string = string, in out T extends ImplicitAnnotatedAllowedTypes = ImplicitAnnotatedAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaClass<TName, NodeKind.Record, TreeRecordNode<UnannotateImplicitAllowedTypes<T>> & WithType<TName, NodeKind.Record, T>, RecordNodeInsertableData<UnannotateImplicitAllowedTypes<T>>, ImplicitlyConstructable, T, never, TCustomMetadata>, SimpleRecordNodeSchema<TCustomMetadata> {
670
+ }
671
+
672
+ // @alpha @system
673
+ export type RecordNodeInsertableData<T extends ImplicitAllowedTypes> = RestrictiveStringRecord<InsertableTreeNodeFromImplicitAllowedTypes<T>>;
674
+
675
+ // @alpha @sealed @system
676
+ export interface RecordNodePojoEmulationSchema<out TName extends string = string, in out T extends ImplicitAnnotatedAllowedTypes = ImplicitAnnotatedAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaNonClass<TName, NodeKind.Record, TreeRecordNode<UnannotateImplicitAllowedTypes<T>> & WithType<TName, NodeKind.Record, T>, RecordNodeInsertableData<UnannotateImplicitAllowedTypes<T>>, ImplicitlyConstructable, T, never, TCustomMetadata>, SimpleRecordNodeSchema<TCustomMetadata> {
677
+ }
678
+
679
+ // @alpha
680
+ export type RecordNodeSchema<TName extends string = string, T extends ImplicitAnnotatedAllowedTypes = ImplicitAnnotatedAllowedTypes, ImplicitlyConstructable extends boolean = true, TCustomMetadata = unknown> = RecordNodeCustomizableSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> | RecordNodePojoEmulationSchema<TName, T, ImplicitlyConstructable, TCustomMetadata>;
681
+
682
+ // @alpha (undocumented)
683
+ export const RecordNodeSchema: {
684
+ readonly [Symbol.hasInstance]: (value: TreeNodeSchema) => value is RecordNodeSchema<string, ImplicitAnnotatedAllowedTypes, true, unknown>;
685
+ };
686
+
657
687
  // @alpha
658
688
  export function replaceConciseTreeHandles<T>(tree: ConciseTree, replacer: HandleConverter<T>): ConciseTree<T>;
659
689
 
@@ -744,6 +774,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
744
774
  }, false, T, undefined>;
745
775
  readonly boolean: LeafSchema<"boolean", boolean>;
746
776
  static readonly boolean: LeafSchema<"boolean", boolean>;
777
+ protected getStructuralType(fullName: string, types: TreeNodeSchema | readonly TreeNodeSchema[], builder: () => TreeNodeSchema): TreeNodeSchema;
747
778
  readonly handle: LeafSchema<"handle", IFluidHandle<unknown>>;
748
779
  static readonly handle: LeafSchema<"handle", IFluidHandle<unknown>>;
749
780
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
@@ -801,6 +832,12 @@ export class SchemaFactoryAlpha<out TScope extends string | undefined = string |
801
832
  };
802
833
  static readonly optionalRecursive: <const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldPropsAlpha_2<TCustomMetadata>, "defaultProvider"> | undefined) => FieldSchemaAlphaUnsafe_2<FieldKind_2.Optional, T, TCustomMetadata>;
803
834
  readonly optionalRecursive: <const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldPropsAlpha_2<TCustomMetadata>, "defaultProvider"> | undefined) => FieldSchemaAlphaUnsafe_2<FieldKind_2.Optional, T, TCustomMetadata>;
835
+ record<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Record<${string}>`>, NodeKind.Record, TreeRecordNode<T> & WithType<ScopedSchemaName<TScope, `Record<${string}>`>, NodeKind.Record>, RecordNodeInsertableData<T>, true, T, undefined>;
836
+ record<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Record, TreeRecordNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Record>, RecordNodeInsertableData<T>, true, T, undefined>;
837
+ recordAlpha<const Name extends TName, const T extends ImplicitAnnotatedAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptionsAlpha<TCustomMetadata>): RecordNodeCustomizableSchema<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata>;
838
+ recordRecursive<Name extends TName, const T extends System_Unsafe.ImplicitAllowedTypesUnsafe>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Record, TreeRecordNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Record, unknown>, {
839
+ readonly [x: string]: System_Unsafe.InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>;
840
+ }, false, T, undefined>;
804
841
  static readonly required: {
805
842
  <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldPropsAlpha_2<TCustomMetadata>, "defaultProvider"> | undefined): FieldSchemaAlpha_2<FieldKind_2.Required, T, TCustomMetadata>;
806
843
  <const T_1 extends ImplicitAnnotatedAllowedTypes, const TCustomMetadata_1 = unknown>(t: T_1, props?: Omit<FieldPropsAlpha_2<TCustomMetadata_1>, "defaultProvider"> | undefined): FieldSchemaAlpha_2<FieldKind_2.Required, UnannotateImplicitAllowedTypes_2<T_1>, TCustomMetadata_1>;
@@ -891,7 +928,7 @@ export interface SimpleMapNodeSchema<out TCustomMetadata = unknown> extends Simp
891
928
  }
892
929
 
893
930
  // @alpha
894
- export type SimpleNodeSchema = SimpleLeafNodeSchema | SimpleMapNodeSchema | SimpleArrayNodeSchema | SimpleObjectNodeSchema;
931
+ export type SimpleNodeSchema = SimpleLeafNodeSchema | SimpleMapNodeSchema | SimpleArrayNodeSchema | SimpleObjectNodeSchema | SimpleRecordNodeSchema;
895
932
 
896
933
  // @public @sealed @system
897
934
  export interface SimpleNodeSchemaBase<out TNodeKind extends NodeKind, out TCustomMetadata = unknown> {
@@ -914,6 +951,11 @@ export interface SimpleObjectNodeSchema<out TCustomMetadata = unknown> extends S
914
951
  readonly fields: ReadonlyMap<string, SimpleObjectFieldSchema>;
915
952
  }
916
953
 
954
+ // @alpha @sealed
955
+ export interface SimpleRecordNodeSchema<out TCustomMetadata = unknown> extends SimpleNodeSchemaBaseAlpha<NodeKind.Record, TCustomMetadata> {
956
+ readonly allowedTypesIdentifiers: ReadonlySet<string>;
957
+ }
958
+
917
959
  // @alpha
918
960
  export type SimpleTreeIndex<TKey extends TreeIndexKey, TValue> = TreeIndex<TKey, TValue>;
919
961
 
@@ -950,7 +992,7 @@ export namespace System_TableSchema {
950
992
  // @sealed
951
993
  export function createRowSchema<const TInputScope extends string | undefined, const TCellSchema extends ImplicitAllowedTypes, const TPropsSchema extends ImplicitAnnotatedFieldSchema>(inputSchemaFactory: SchemaFactoryAlpha<TInputScope>, cellSchema: TCellSchema, propsSchema: TPropsSchema): TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row">, NodeKind.Object, TreeNode & TableSchema.Row<TCellSchema, TPropsSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row">, NodeKind, unknown>, object & {
952
994
  readonly id?: string | undefined;
953
- readonly cells: (InsertableTypedNode_2<TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, TreeMapNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, unknown>, MapNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined>, TreeNodeSchemaCore_2<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, true, TCellSchema, MapNodeInsertableData_2<TCellSchema>, unknown> & (new (data?: InternalTreeNode | MapNodeInsertableData_2<TCellSchema> | undefined) => TreeMapNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, unknown>)> | undefined) & InsertableTypedNode_2<TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, TreeMapNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, unknown>, MapNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined>, TreeNodeSchemaCore_2<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, true, TCellSchema, MapNodeInsertableData_2<TCellSchema>, unknown> & (new (data?: InternalTreeNode | MapNodeInsertableData_2<TCellSchema> | undefined) => TreeMapNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, unknown>)>;
995
+ readonly cells: (InsertableTypedNode_2<TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, TreeRecordNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>, RecordNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined>, TreeNodeSchemaCore_2<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, true, TCellSchema, RecordNodeInsertableData_2<TCellSchema>, unknown> & (new (data?: InternalTreeNode | RecordNodeInsertableData_2<TCellSchema> | undefined) => TreeRecordNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>)> | undefined) & InsertableTypedNode_2<TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, TreeRecordNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>, RecordNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined>, TreeNodeSchemaCore_2<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, true, TCellSchema, RecordNodeInsertableData_2<TCellSchema>, unknown> & (new (data?: InternalTreeNode | RecordNodeInsertableData_2<TCellSchema> | undefined) => TreeRecordNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>)>;
954
996
  } & (FieldHasDefault<UnannotateImplicitFieldSchema<TPropsSchema>> extends true ? {
955
997
  props?: InsertableTreeFieldFromImplicitField<UnannotateImplicitFieldSchema<TPropsSchema>> | undefined;
956
998
  } : {
@@ -958,7 +1000,7 @@ export namespace System_TableSchema {
958
1000
  }), true, {
959
1001
  readonly props: TPropsSchema;
960
1002
  readonly id: FieldSchema_2<FieldKind_3.Identifier, LeafSchema_3<"string", string>, unknown>;
961
- readonly cells: FieldSchemaAlpha_3<FieldKind_3.Required, TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, TreeMapNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Map, unknown>, MapNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined>, unknown>;
1003
+ readonly cells: FieldSchemaAlpha_3<FieldKind_3.Required, TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, TreeRecordNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>, RecordNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined>, unknown>;
962
1004
  }>;
963
1005
  // @system
964
1006
  export function createTableSchema<const TInputScope extends string | undefined, const TCellSchema extends ImplicitAllowedTypes, const TColumnSchema extends ColumnSchemaBase<TInputScope, TCellSchema>, const TRowSchema extends RowSchemaBase<TInputScope, TCellSchema>>(inputSchemaFactory: SchemaFactoryAlpha<TInputScope>, _cellSchema: TCellSchema, columnSchema: TColumnSchema, rowSchema: TRowSchema): TreeNodeSchemaCore_2<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Table">, NodeKind.Object, true, {
@@ -1216,6 +1258,8 @@ export const Tree: Tree;
1216
1258
  // @alpha @sealed @system
1217
1259
  export interface TreeAlpha {
1218
1260
  branch(node: TreeNode): TreeBranch | undefined;
1261
+ child(node: TreeNode, key: string | number): TreeNode | TreeLeafValue | undefined;
1262
+ children(node: TreeNode): Iterable<[propertyKey: string | number, child: TreeNode | TreeLeafValue]>;
1219
1263
  create<const TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema>(schema: UnsafeUnknownSchema extends TSchema ? ImplicitFieldSchema : TSchema & ImplicitFieldSchema, data: InsertableField<TSchema>): Unhydrated<TSchema extends ImplicitFieldSchema ? TreeFieldFromImplicitField<TSchema> : TreeNode | TreeLeafValue | undefined>;
1220
1264
  exportCompressed(tree: TreeNode | TreeLeafValue, options: {
1221
1265
  idCompressor?: IIdCompressor;
@@ -1300,7 +1344,7 @@ export interface TreeChangeEvents {
1300
1344
 
1301
1345
  // @beta @sealed
1302
1346
  export interface TreeChangeEventsBeta<TNode extends TreeNode = TreeNode> extends TreeChangeEvents {
1303
- nodeChanged: (data: NodeChangedData<TNode> & (TNode extends WithType<string, NodeKind.Map | NodeKind.Object> ? Required<Pick<NodeChangedData<TNode>, "changedProperties">> : unknown)) => void;
1347
+ nodeChanged: (data: NodeChangedData<TNode> & (TNode extends WithType<string, NodeKind.Map | NodeKind.Object | NodeKind.Record> ? Required<Pick<NodeChangedData<TNode>, "changedProperties">> : unknown)) => void;
1304
1348
  }
1305
1349
 
1306
1350
  // @alpha
@@ -1405,6 +1449,23 @@ export type TreeNodeSchemaNonClass<Name extends string = string, Kind extends No
1405
1449
  // @public
1406
1450
  export type TreeObjectNode<T extends RestrictiveStringRecord<ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object, T>;
1407
1451
 
1452
+ // @alpha
1453
+ export interface TreeRecordNode<TAllowedTypes extends ImplicitAllowedTypes = ImplicitAllowedTypes> extends TreeNode, Record<string, TreeNodeFromImplicitAllowedTypes<TAllowedTypes>> {
1454
+ [Symbol.iterator](): IterableIterator<[
1455
+ string,
1456
+ TreeNodeFromImplicitAllowedTypes<TAllowedTypes>
1457
+ ]>;
1458
+ }
1459
+
1460
+ // @alpha @sealed @system
1461
+ export interface TreeRecordNodeUnsafe<TAllowedTypes extends System_Unsafe.ImplicitAllowedTypesUnsafe> extends Record<string, System_Unsafe.TreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>>, TreeNode {
1462
+ // (undocumented)
1463
+ [Symbol.iterator](): IterableIterator<[
1464
+ string,
1465
+ System_Unsafe.TreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>
1466
+ ]>;
1467
+ }
1468
+
1408
1469
  // @alpha @sealed (undocumented)
1409
1470
  export interface TreeSchema extends SimpleTreeSchema {
1410
1471
  readonly definitions: ReadonlyMap<string, SimpleNodeSchema & TreeNodeSchema>;
@@ -1453,6 +1514,7 @@ export interface TreeViewAlpha<in out TSchema extends ImplicitFieldSchema | Unsa
1453
1514
  // @public @sealed
1454
1515
  export class TreeViewConfiguration<const TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> implements Required<ITreeViewConfiguration<TSchema>> {
1455
1516
  constructor(props: ITreeViewConfiguration<TSchema>);
1517
+ protected readonly definitionsInternal: ReadonlyMap<string, TreeNodeSchema>;
1456
1518
  readonly enableSchemaValidation: boolean;
1457
1519
  readonly preventAmbiguity: boolean;
1458
1520
  readonly schema: TSchema;
@@ -1463,7 +1525,7 @@ export class TreeViewConfiguration<const TSchema extends ImplicitFieldSchema = I
1463
1525
  // @alpha @sealed
1464
1526
  export class TreeViewConfigurationAlpha<const TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> extends TreeViewConfiguration<TSchema> implements TreeSchema {
1465
1527
  constructor(props: ITreeViewConfiguration<TSchema>);
1466
- readonly definitions: ReadonlyMap<string, SimpleNodeSchema & TreeNodeSchema>;
1528
+ get definitions(): ReadonlyMap<string, SimpleNodeSchema & TreeNodeSchema>;
1467
1529
  readonly root: FieldSchemaAlpha;
1468
1530
  }
1469
1531
 
@@ -1530,15 +1592,19 @@ export type UnsafeUnknownSchema = typeof UnsafeUnknownSchema;
1530
1592
  export type ValidateRecursiveSchema<T extends ValidateRecursiveSchemaTemplate<T>> = true;
1531
1593
 
1532
1594
  // @public @system
1533
- export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
1595
+ export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object | NodeKind.Record, TreeNode & WithType<T["identifier"], T["kind"]>, {
1534
1596
  [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
1535
1597
  [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>> : unknown;
1536
1598
  [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]> : unknown;
1599
+ [NodeKind.Record]: {
1600
+ readonly [P in string]: InsertableTreeNodeFromImplicitAllowedTypes<T>;
1601
+ };
1537
1602
  [NodeKind.Leaf]: unknown;
1538
1603
  }[T["kind"]], false, {
1539
1604
  [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
1540
1605
  [NodeKind.Array]: ImplicitAllowedTypes;
1541
1606
  [NodeKind.Map]: ImplicitAllowedTypes;
1607
+ [NodeKind.Record]: ImplicitAllowedTypes;
1542
1608
  [NodeKind.Leaf]: unknown;
1543
1609
  }[T["kind"]]>;
1544
1610
 
@@ -242,7 +242,8 @@ export enum NodeKind {
242
242
  Array = 1,
243
243
  Leaf = 3,
244
244
  Map = 0,
245
- Object = 2
245
+ Object = 2,
246
+ Record = 4
246
247
  }
247
248
 
248
249
  // @public @sealed
@@ -339,6 +340,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
339
340
  }, false, T, undefined>;
340
341
  readonly boolean: LeafSchema<"boolean", boolean>;
341
342
  static readonly boolean: LeafSchema<"boolean", boolean>;
343
+ protected getStructuralType(fullName: string, types: TreeNodeSchema | readonly TreeNodeSchema[], builder: () => TreeNodeSchema): TreeNodeSchema;
342
344
  readonly handle: LeafSchema<"handle", IFluidHandle<unknown>>;
343
345
  static readonly handle: LeafSchema<"handle", IFluidHandle<unknown>>;
344
346
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
@@ -546,7 +548,7 @@ export interface TreeChangeEvents {
546
548
 
547
549
  // @beta @sealed
548
550
  export interface TreeChangeEventsBeta<TNode extends TreeNode = TreeNode> extends TreeChangeEvents {
549
- nodeChanged: (data: NodeChangedData<TNode> & (TNode extends WithType<string, NodeKind.Map | NodeKind.Object> ? Required<Pick<NodeChangedData<TNode>, "changedProperties">> : unknown)) => void;
551
+ nodeChanged: (data: NodeChangedData<TNode> & (TNode extends WithType<string, NodeKind.Map | NodeKind.Object | NodeKind.Record> ? Required<Pick<NodeChangedData<TNode>, "changedProperties">> : unknown)) => void;
550
552
  }
551
553
 
552
554
  // @public
@@ -642,6 +644,7 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
642
644
  // @public @sealed
643
645
  export class TreeViewConfiguration<const TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> implements Required<ITreeViewConfiguration<TSchema>> {
644
646
  constructor(props: ITreeViewConfiguration<TSchema>);
647
+ protected readonly definitionsInternal: ReadonlyMap<string, TreeNodeSchema>;
645
648
  readonly enableSchemaValidation: boolean;
646
649
  readonly preventAmbiguity: boolean;
647
650
  readonly schema: TSchema;
@@ -678,15 +681,19 @@ export type UnionToTuple<Union, A extends unknown[] = [], First = PopUnion<Union
678
681
  export type ValidateRecursiveSchema<T extends ValidateRecursiveSchemaTemplate<T>> = true;
679
682
 
680
683
  // @public @system
681
- export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
684
+ export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object | NodeKind.Record, TreeNode & WithType<T["identifier"], T["kind"]>, {
682
685
  [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
683
686
  [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>> : unknown;
684
687
  [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]> : unknown;
688
+ [NodeKind.Record]: {
689
+ readonly [P in string]: InsertableTreeNodeFromImplicitAllowedTypes<T>;
690
+ };
685
691
  [NodeKind.Leaf]: unknown;
686
692
  }[T["kind"]], false, {
687
693
  [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
688
694
  [NodeKind.Array]: ImplicitAllowedTypes;
689
695
  [NodeKind.Map]: ImplicitAllowedTypes;
696
+ [NodeKind.Record]: ImplicitAllowedTypes;
690
697
  [NodeKind.Leaf]: unknown;
691
698
  }[T["kind"]]>;
692
699
 
@@ -215,7 +215,8 @@ export enum NodeKind {
215
215
  Array = 1,
216
216
  Leaf = 3,
217
217
  Map = 0,
218
- Object = 2
218
+ Object = 2,
219
+ Record = 4
219
220
  }
220
221
 
221
222
  // @public @sealed
@@ -309,6 +310,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
309
310
  }, false, T, undefined>;
310
311
  readonly boolean: LeafSchema<"boolean", boolean>;
311
312
  static readonly boolean: LeafSchema<"boolean", boolean>;
313
+ protected getStructuralType(fullName: string, types: TreeNodeSchema | readonly TreeNodeSchema[], builder: () => TreeNodeSchema): TreeNodeSchema;
312
314
  readonly handle: LeafSchema<"handle", IFluidHandle<unknown>>;
313
315
  static readonly handle: LeafSchema<"handle", IFluidHandle<unknown>>;
314
316
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
@@ -602,6 +604,7 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
602
604
  // @public @sealed
603
605
  export class TreeViewConfiguration<const TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> implements Required<ITreeViewConfiguration<TSchema>> {
604
606
  constructor(props: ITreeViewConfiguration<TSchema>);
607
+ protected readonly definitionsInternal: ReadonlyMap<string, TreeNodeSchema>;
605
608
  readonly enableSchemaValidation: boolean;
606
609
  readonly preventAmbiguity: boolean;
607
610
  readonly schema: TSchema;
@@ -635,15 +638,19 @@ export type UnionToIntersection<T> = (T extends T ? (k: T) => unknown : never) e
635
638
  export type ValidateRecursiveSchema<T extends ValidateRecursiveSchemaTemplate<T>> = true;
636
639
 
637
640
  // @public @system
638
- export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
641
+ export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object | NodeKind.Record, TreeNode & WithType<T["identifier"], T["kind"]>, {
639
642
  [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
640
643
  [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>> : unknown;
641
644
  [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]> : unknown;
645
+ [NodeKind.Record]: {
646
+ readonly [P in string]: InsertableTreeNodeFromImplicitAllowedTypes<T>;
647
+ };
642
648
  [NodeKind.Leaf]: unknown;
643
649
  }[T["kind"]], false, {
644
650
  [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
645
651
  [NodeKind.Array]: ImplicitAllowedTypes;
646
652
  [NodeKind.Map]: ImplicitAllowedTypes;
653
+ [NodeKind.Record]: ImplicitAllowedTypes;
647
654
  [NodeKind.Leaf]: unknown;
648
655
  }[T["kind"]]>;
649
656
 
@@ -215,7 +215,8 @@ export enum NodeKind {
215
215
  Array = 1,
216
216
  Leaf = 3,
217
217
  Map = 0,
218
- Object = 2
218
+ Object = 2,
219
+ Record = 4
219
220
  }
220
221
 
221
222
  // @public @sealed
@@ -309,6 +310,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
309
310
  }, false, T, undefined>;
310
311
  readonly boolean: LeafSchema<"boolean", boolean>;
311
312
  static readonly boolean: LeafSchema<"boolean", boolean>;
313
+ protected getStructuralType(fullName: string, types: TreeNodeSchema | readonly TreeNodeSchema[], builder: () => TreeNodeSchema): TreeNodeSchema;
312
314
  readonly handle: LeafSchema<"handle", IFluidHandle<unknown>>;
313
315
  static readonly handle: LeafSchema<"handle", IFluidHandle<unknown>>;
314
316
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
@@ -593,6 +595,7 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
593
595
  // @public @sealed
594
596
  export class TreeViewConfiguration<const TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> implements Required<ITreeViewConfiguration<TSchema>> {
595
597
  constructor(props: ITreeViewConfiguration<TSchema>);
598
+ protected readonly definitionsInternal: ReadonlyMap<string, TreeNodeSchema>;
596
599
  readonly enableSchemaValidation: boolean;
597
600
  readonly preventAmbiguity: boolean;
598
601
  readonly schema: TSchema;
@@ -626,15 +629,19 @@ export type UnionToIntersection<T> = (T extends T ? (k: T) => unknown : never) e
626
629
  export type ValidateRecursiveSchema<T extends ValidateRecursiveSchemaTemplate<T>> = true;
627
630
 
628
631
  // @public @system
629
- export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
632
+ export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object | NodeKind.Record, TreeNode & WithType<T["identifier"], T["kind"]>, {
630
633
  [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
631
634
  [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>> : unknown;
632
635
  [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]> : unknown;
636
+ [NodeKind.Record]: {
637
+ readonly [P in string]: InsertableTreeNodeFromImplicitAllowedTypes<T>;
638
+ };
633
639
  [NodeKind.Leaf]: unknown;
634
640
  }[T["kind"]], false, {
635
641
  [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
636
642
  [NodeKind.Array]: ImplicitAllowedTypes;
637
643
  [NodeKind.Map]: ImplicitAllowedTypes;
644
+ [NodeKind.Record]: ImplicitAllowedTypes;
638
645
  [NodeKind.Leaf]: unknown;
639
646
  }[T["kind"]]>;
640
647