@fluidframework/tree 2.43.0 → 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 (391) hide show
  1. package/api-report/tree.alpha.api.md +73 -16
  2. package/api-report/tree.beta.api.md +9 -3
  3. package/api-report/tree.legacy.alpha.api.md +8 -2
  4. package/api-report/tree.legacy.public.api.md +8 -2
  5. package/api-report/tree.public.api.md +8 -2
  6. package/dist/alpha.d.ts +9 -0
  7. package/dist/core/forest/editableForest.d.ts +0 -2
  8. package/dist/core/forest/editableForest.d.ts.map +1 -1
  9. package/dist/core/forest/editableForest.js.map +1 -1
  10. package/dist/core/forest/forest.d.ts +0 -4
  11. package/dist/core/forest/forest.d.ts.map +1 -1
  12. package/dist/core/forest/forest.js +0 -4
  13. package/dist/core/forest/forest.js.map +1 -1
  14. package/dist/core/rebase/changeRebaser.d.ts +0 -6
  15. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  16. package/dist/core/rebase/changeRebaser.js.map +1 -1
  17. package/dist/core/rebase/types.d.ts +0 -2
  18. package/dist/core/rebase/types.d.ts.map +1 -1
  19. package/dist/core/rebase/types.js.map +1 -1
  20. package/dist/core/schema-stored/schema.d.ts +0 -8
  21. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  22. package/dist/core/schema-stored/schema.js +0 -8
  23. package/dist/core/schema-stored/schema.js.map +1 -1
  24. package/dist/core/schema-view/view.d.ts +0 -2
  25. package/dist/core/schema-view/view.d.ts.map +1 -1
  26. package/dist/core/schema-view/view.js.map +1 -1
  27. package/dist/core/tree/cursor.d.ts +0 -2
  28. package/dist/core/tree/cursor.d.ts.map +1 -1
  29. package/dist/core/tree/cursor.js +0 -2
  30. package/dist/core/tree/cursor.js.map +1 -1
  31. package/dist/core/tree/delta.d.ts +0 -2
  32. package/dist/core/tree/delta.d.ts.map +1 -1
  33. package/dist/core/tree/delta.js.map +1 -1
  34. package/dist/core/tree/types.d.ts +0 -4
  35. package/dist/core/tree/types.d.ts.map +1 -1
  36. package/dist/core/tree/types.js +0 -2
  37. package/dist/core/tree/types.js.map +1 -1
  38. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +0 -4
  39. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  40. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  41. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -10
  42. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  43. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  44. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +0 -2
  45. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  46. package/dist/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
  47. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  48. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
  49. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  50. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +0 -2
  51. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  52. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -10
  53. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  54. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +0 -2
  55. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  56. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +0 -6
  57. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  58. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  59. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -12
  60. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  61. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  62. package/dist/feature-libraries/sequence-field/types.d.ts +0 -2
  63. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  64. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  65. package/dist/index.d.ts +1 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +3 -2
  68. package/dist/index.js.map +1 -1
  69. package/dist/jsonDomainSchema.d.ts +2 -6
  70. package/dist/jsonDomainSchema.d.ts.map +1 -1
  71. package/dist/jsonDomainSchema.js +2 -2
  72. package/dist/jsonDomainSchema.js.map +1 -1
  73. package/dist/packageVersion.d.ts +1 -1
  74. package/dist/packageVersion.d.ts.map +1 -1
  75. package/dist/packageVersion.js +1 -1
  76. package/dist/packageVersion.js.map +1 -1
  77. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  78. package/dist/shared-tree/treeAlpha.js +3 -1
  79. package/dist/shared-tree/treeAlpha.js.map +1 -1
  80. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  81. package/dist/simple-tree/api/configuration.js +49 -17
  82. package/dist/simple-tree/api/configuration.js.map +1 -1
  83. package/dist/simple-tree/api/customTree.d.ts +1 -1
  84. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  85. package/dist/simple-tree/api/customTree.js +3 -4
  86. package/dist/simple-tree/api/customTree.js.map +1 -1
  87. package/dist/simple-tree/api/index.d.ts +2 -2
  88. package/dist/simple-tree/api/index.d.ts.map +1 -1
  89. package/dist/simple-tree/api/index.js.map +1 -1
  90. package/dist/simple-tree/api/jsonSchema.d.ts +32 -8
  91. package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -1
  92. package/dist/simple-tree/api/jsonSchema.js.map +1 -1
  93. package/dist/simple-tree/api/schemaFactory.d.ts +2 -2
  94. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  95. package/dist/simple-tree/api/schemaFactory.js +1 -1
  96. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  97. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +97 -3
  98. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  99. package/dist/simple-tree/api/schemaFactoryAlpha.js +75 -0
  100. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  101. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +5 -1
  102. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  103. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  104. package/dist/simple-tree/api/schemaFromSimple.js +2 -0
  105. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  106. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  107. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
  108. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  109. package/dist/simple-tree/api/treeBeta.d.ts +1 -1
  110. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  111. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  112. package/dist/simple-tree/api/treeNodeApi.js +1 -1
  113. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  114. package/dist/simple-tree/api/typesUnsafe.d.ts +12 -0
  115. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  116. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  117. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  118. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +5 -3
  119. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  120. package/dist/simple-tree/core/index.d.ts +1 -1
  121. package/dist/simple-tree/core/index.d.ts.map +1 -1
  122. package/dist/simple-tree/core/index.js +2 -1
  123. package/dist/simple-tree/core/index.js.map +1 -1
  124. package/dist/simple-tree/core/treeNodeSchema.d.ts +5 -1
  125. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  126. package/dist/simple-tree/core/treeNodeSchema.js +4 -0
  127. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  128. package/dist/simple-tree/index.d.ts +3 -3
  129. package/dist/simple-tree/index.d.ts.map +1 -1
  130. package/dist/simple-tree/index.js +3 -1
  131. package/dist/simple-tree/index.js.map +1 -1
  132. package/dist/simple-tree/node-kinds/index.d.ts +2 -1
  133. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  134. package/dist/simple-tree/node-kinds/index.js +5 -1
  135. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  136. package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
  137. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  138. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  139. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  140. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  141. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +5 -1
  142. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  143. package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  144. package/dist/simple-tree/node-kinds/record/index.d.ts +7 -0
  145. package/dist/simple-tree/node-kinds/record/index.d.ts.map +1 -0
  146. package/dist/simple-tree/node-kinds/record/index.js +13 -0
  147. package/dist/simple-tree/node-kinds/record/index.js.map +1 -0
  148. package/dist/simple-tree/node-kinds/record/recordNode.d.ts +39 -0
  149. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -0
  150. package/dist/simple-tree/node-kinds/record/recordNode.js +234 -0
  151. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -0
  152. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +70 -0
  153. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -0
  154. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js +30 -0
  155. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -0
  156. package/dist/simple-tree/simpleSchema.d.ts +16 -1
  157. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  158. package/dist/simple-tree/simpleSchema.js.map +1 -1
  159. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  160. package/dist/simple-tree/toStoredSchema.js +4 -2
  161. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  162. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
  163. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  164. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +56 -32
  165. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  166. package/dist/tableSchema.d.ts +7 -2
  167. package/dist/tableSchema.d.ts.map +1 -1
  168. package/dist/tableSchema.js +21 -7
  169. package/dist/tableSchema.js.map +1 -1
  170. package/dist/util/brandedMap.d.ts +0 -2
  171. package/dist/util/brandedMap.d.ts.map +1 -1
  172. package/dist/util/brandedMap.js.map +1 -1
  173. package/docs/main/compatibility.md +15 -1
  174. package/lib/alpha.d.ts +9 -0
  175. package/lib/core/forest/editableForest.d.ts +0 -2
  176. package/lib/core/forest/editableForest.d.ts.map +1 -1
  177. package/lib/core/forest/editableForest.js.map +1 -1
  178. package/lib/core/forest/forest.d.ts +0 -4
  179. package/lib/core/forest/forest.d.ts.map +1 -1
  180. package/lib/core/forest/forest.js +0 -4
  181. package/lib/core/forest/forest.js.map +1 -1
  182. package/lib/core/rebase/changeRebaser.d.ts +0 -6
  183. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  184. package/lib/core/rebase/changeRebaser.js.map +1 -1
  185. package/lib/core/rebase/types.d.ts +0 -2
  186. package/lib/core/rebase/types.d.ts.map +1 -1
  187. package/lib/core/rebase/types.js.map +1 -1
  188. package/lib/core/schema-stored/schema.d.ts +0 -8
  189. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  190. package/lib/core/schema-stored/schema.js +0 -8
  191. package/lib/core/schema-stored/schema.js.map +1 -1
  192. package/lib/core/schema-view/view.d.ts +0 -2
  193. package/lib/core/schema-view/view.d.ts.map +1 -1
  194. package/lib/core/schema-view/view.js.map +1 -1
  195. package/lib/core/tree/cursor.d.ts +0 -2
  196. package/lib/core/tree/cursor.d.ts.map +1 -1
  197. package/lib/core/tree/cursor.js +0 -2
  198. package/lib/core/tree/cursor.js.map +1 -1
  199. package/lib/core/tree/delta.d.ts +0 -2
  200. package/lib/core/tree/delta.d.ts.map +1 -1
  201. package/lib/core/tree/delta.js.map +1 -1
  202. package/lib/core/tree/types.d.ts +0 -4
  203. package/lib/core/tree/types.d.ts.map +1 -1
  204. package/lib/core/tree/types.js +0 -2
  205. package/lib/core/tree/types.js.map +1 -1
  206. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +0 -4
  207. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  208. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  209. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -10
  210. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  211. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  212. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +0 -2
  213. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  214. package/lib/feature-libraries/flex-tree/flexTreeTypes.js +0 -2
  215. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  216. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
  217. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  218. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +0 -2
  219. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  220. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -10
  221. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  222. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +0 -2
  223. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  224. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +0 -6
  225. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  226. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  227. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +0 -12
  228. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  229. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  230. package/lib/feature-libraries/sequence-field/types.d.ts +0 -2
  231. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  232. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  233. package/lib/index.d.ts +1 -1
  234. package/lib/index.d.ts.map +1 -1
  235. package/lib/index.js +1 -1
  236. package/lib/index.js.map +1 -1
  237. package/lib/jsonDomainSchema.d.ts +2 -6
  238. package/lib/jsonDomainSchema.d.ts.map +1 -1
  239. package/lib/jsonDomainSchema.js +3 -3
  240. package/lib/jsonDomainSchema.js.map +1 -1
  241. package/lib/packageVersion.d.ts +1 -1
  242. package/lib/packageVersion.d.ts.map +1 -1
  243. package/lib/packageVersion.js +1 -1
  244. package/lib/packageVersion.js.map +1 -1
  245. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  246. package/lib/shared-tree/treeAlpha.js +3 -1
  247. package/lib/shared-tree/treeAlpha.js.map +1 -1
  248. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  249. package/lib/simple-tree/api/configuration.js +51 -19
  250. package/lib/simple-tree/api/configuration.js.map +1 -1
  251. package/lib/simple-tree/api/customTree.d.ts +1 -1
  252. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  253. package/lib/simple-tree/api/customTree.js +2 -3
  254. package/lib/simple-tree/api/customTree.js.map +1 -1
  255. package/lib/simple-tree/api/index.d.ts +2 -2
  256. package/lib/simple-tree/api/index.d.ts.map +1 -1
  257. package/lib/simple-tree/api/index.js.map +1 -1
  258. package/lib/simple-tree/api/jsonSchema.d.ts +32 -8
  259. package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -1
  260. package/lib/simple-tree/api/jsonSchema.js.map +1 -1
  261. package/lib/simple-tree/api/schemaFactory.d.ts +2 -2
  262. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  263. package/lib/simple-tree/api/schemaFactory.js +1 -1
  264. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  265. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +97 -3
  266. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  267. package/lib/simple-tree/api/schemaFactoryAlpha.js +77 -2
  268. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  269. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +5 -1
  270. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  271. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  272. package/lib/simple-tree/api/schemaFromSimple.js +2 -0
  273. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  274. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  275. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +5 -5
  276. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  277. package/lib/simple-tree/api/treeBeta.d.ts +1 -1
  278. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  279. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  280. package/lib/simple-tree/api/treeNodeApi.js +2 -2
  281. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  282. package/lib/simple-tree/api/typesUnsafe.d.ts +12 -0
  283. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  284. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  285. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  286. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +6 -4
  287. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  288. package/lib/simple-tree/core/index.d.ts +1 -1
  289. package/lib/simple-tree/core/index.d.ts.map +1 -1
  290. package/lib/simple-tree/core/index.js +1 -1
  291. package/lib/simple-tree/core/index.js.map +1 -1
  292. package/lib/simple-tree/core/treeNodeSchema.d.ts +5 -1
  293. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  294. package/lib/simple-tree/core/treeNodeSchema.js +4 -0
  295. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  296. package/lib/simple-tree/index.d.ts +3 -3
  297. package/lib/simple-tree/index.d.ts.map +1 -1
  298. package/lib/simple-tree/index.js +1 -1
  299. package/lib/simple-tree/index.js.map +1 -1
  300. package/lib/simple-tree/node-kinds/index.d.ts +2 -1
  301. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  302. package/lib/simple-tree/node-kinds/index.js +1 -0
  303. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  304. package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
  305. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  306. package/lib/simple-tree/node-kinds/object/index.js +1 -1
  307. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  308. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  309. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  310. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +5 -1
  311. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  312. package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  313. package/lib/simple-tree/node-kinds/record/index.d.ts +7 -0
  314. package/lib/simple-tree/node-kinds/record/index.d.ts.map +1 -0
  315. package/lib/simple-tree/node-kinds/record/index.js +7 -0
  316. package/lib/simple-tree/node-kinds/record/index.js.map +1 -0
  317. package/lib/simple-tree/node-kinds/record/recordNode.d.ts +39 -0
  318. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -0
  319. package/lib/simple-tree/node-kinds/record/recordNode.js +232 -0
  320. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -0
  321. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +70 -0
  322. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -0
  323. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js +26 -0
  324. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -0
  325. package/lib/simple-tree/simpleSchema.d.ts +16 -1
  326. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  327. package/lib/simple-tree/simpleSchema.js.map +1 -1
  328. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  329. package/lib/simple-tree/toStoredSchema.js +4 -2
  330. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  331. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
  332. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  333. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +58 -34
  334. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  335. package/lib/tableSchema.d.ts +7 -2
  336. package/lib/tableSchema.d.ts.map +1 -1
  337. package/lib/tableSchema.js +22 -8
  338. package/lib/tableSchema.js.map +1 -1
  339. package/lib/util/brandedMap.d.ts +0 -2
  340. package/lib/util/brandedMap.d.ts.map +1 -1
  341. package/lib/util/brandedMap.js.map +1 -1
  342. package/package.json +34 -22
  343. package/src/core/forest/editableForest.ts +0 -2
  344. package/src/core/forest/forest.ts +0 -4
  345. package/src/core/rebase/changeRebaser.ts +0 -6
  346. package/src/core/rebase/types.ts +0 -2
  347. package/src/core/schema-stored/schema.ts +0 -8
  348. package/src/core/schema-view/view.ts +0 -2
  349. package/src/core/tree/cursor.ts +0 -2
  350. package/src/core/tree/delta.ts +0 -2
  351. package/src/core/tree/types.ts +0 -4
  352. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +0 -4
  353. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +0 -10
  354. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +0 -2
  355. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +0 -2
  356. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +0 -10
  357. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +0 -8
  358. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +0 -12
  359. package/src/feature-libraries/sequence-field/types.ts +0 -2
  360. package/src/index.ts +9 -0
  361. package/src/jsonDomainSchema.ts +3 -3
  362. package/src/packageVersion.ts +1 -1
  363. package/src/shared-tree/treeAlpha.ts +3 -1
  364. package/src/simple-tree/api/configuration.ts +73 -19
  365. package/src/simple-tree/api/customTree.ts +3 -3
  366. package/src/simple-tree/api/index.ts +3 -0
  367. package/src/simple-tree/api/jsonSchema.ts +35 -8
  368. package/src/simple-tree/api/schemaFactory.ts +5 -13
  369. package/src/simple-tree/api/schemaFactoryAlpha.ts +268 -1
  370. package/src/simple-tree/api/schemaFactoryRecursive.ts +5 -1
  371. package/src/simple-tree/api/schemaFromSimple.ts +6 -0
  372. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +16 -7
  373. package/src/simple-tree/api/treeBeta.ts +2 -2
  374. package/src/simple-tree/api/treeNodeApi.ts +2 -2
  375. package/src/simple-tree/api/typesUnsafe.ts +15 -0
  376. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +14 -6
  377. package/src/simple-tree/core/index.ts +1 -0
  378. package/src/simple-tree/core/treeNodeSchema.ts +8 -4
  379. package/src/simple-tree/index.ts +11 -0
  380. package/src/simple-tree/node-kinds/index.ts +11 -0
  381. package/src/simple-tree/node-kinds/object/index.ts +5 -1
  382. package/src/simple-tree/node-kinds/object/objectNode.ts +3 -2
  383. package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +6 -3
  384. package/src/simple-tree/node-kinds/record/index.ts +14 -0
  385. package/src/simple-tree/node-kinds/record/recordNode.ts +410 -0
  386. package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +136 -0
  387. package/src/simple-tree/simpleSchema.ts +19 -1
  388. package/src/simple-tree/toStoredSchema.ts +4 -2
  389. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +83 -40
  390. package/src/tableSchema.ts +27 -8
  391. package/src/util/brandedMap.ts +0 -2
@@ -185,8 +185,6 @@ export const storedEmptyFieldSchema: TreeFieldStoredSchema = {
185
185
  */
186
186
  export const identifierFieldKindIdentifier = "Identifier";
187
187
 
188
- /**
189
- */
190
188
  export abstract class TreeNodeStoredSchema {
191
189
  protected _typeCheck!: MakeNominal;
192
190
 
@@ -213,8 +211,6 @@ export abstract class TreeNodeStoredSchema {
213
211
  public abstract getFieldSchema(field: FieldKey): TreeFieldStoredSchema;
214
212
  }
215
213
 
216
- /**
217
- */
218
214
  export class ObjectNodeStoredSchema extends TreeNodeStoredSchema {
219
215
  /**
220
216
  * @param objectNodeFields -
@@ -272,8 +268,6 @@ export class ObjectNodeStoredSchema extends TreeNodeStoredSchema {
272
268
  }
273
269
  }
274
270
 
275
- /**
276
- */
277
271
  export class MapNodeStoredSchema extends TreeNodeStoredSchema {
278
272
  /**
279
273
  * @param mapFields -
@@ -306,8 +300,6 @@ export class MapNodeStoredSchema extends TreeNodeStoredSchema {
306
300
  }
307
301
  }
308
302
 
309
- /**
310
- */
311
303
  export class LeafNodeStoredSchema extends TreeNodeStoredSchema {
312
304
  /**
313
305
  * @param leafValue -
@@ -9,8 +9,6 @@ import type { TreeNodeSchemaIdentifier, TreeStoredSchema } from "../schema-store
9
9
  * APIs for applying `view schema` to documents.
10
10
  */
11
11
 
12
- /**
13
- */
14
12
  export interface TreeAdapter {
15
13
  readonly output: TreeNodeSchemaIdentifier;
16
14
  readonly input: TreeNodeSchemaIdentifier;
@@ -312,8 +312,6 @@ export interface PathRootPrefix {
312
312
  indexOffset?: number;
313
313
  }
314
314
 
315
- /**
316
- */
317
315
  export const enum CursorLocationType {
318
316
  /**
319
317
  * Can iterate through nodes in a field.
@@ -158,8 +158,6 @@ export interface DetachedNodeId {
158
158
  readonly minor: number;
159
159
  }
160
160
 
161
- /**
162
- */
163
161
  export type FieldMap = ReadonlyMap<FieldKey, FieldChanges>;
164
162
 
165
163
  /**
@@ -18,8 +18,6 @@ import type {
18
18
  ValueSchema,
19
19
  } from "../schema-stored/index.js";
20
20
 
21
- /**
22
- */
23
21
  export type TreeType = TreeNodeSchemaIdentifier;
24
22
 
25
23
  /**
@@ -43,8 +41,6 @@ export const EmptyKey: FieldKey = brand("");
43
41
  */
44
42
  export const rootFieldKey: FieldKey = brand("rootFieldKey");
45
43
 
46
- /**
47
- */
48
44
  export const rootField = keyAsDetachedField(rootFieldKey);
49
45
 
50
46
  /**
@@ -410,8 +410,6 @@ export class DefaultEditBuilder implements ChangeFamilyEditor, IDefaultEditBuild
410
410
  }
411
411
  }
412
412
 
413
- /**
414
- */
415
413
  export interface ValueFieldEditBuilder<TContent> {
416
414
  /**
417
415
  * Issues a change which replaces the current newContent of the field with `newContent`.
@@ -421,8 +419,6 @@ export interface ValueFieldEditBuilder<TContent> {
421
419
  set(newContent: TContent): void;
422
420
  }
423
421
 
424
- /**
425
- */
426
422
  export interface OptionalFieldEditBuilder<TContent> {
427
423
  /**
428
424
  * Issues a change which replaces the current newContent of the field with `newContent`
@@ -257,20 +257,10 @@ export const fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindWithEditor> =
257
257
  // TODO: Find a way to make docs like {@inheritDoc required} work in vscode.
258
258
  // TODO: ensure thy work in generated docs.
259
259
  // TODO: add these comments to the rest of the cases below.
260
- /**
261
- */
262
260
  export interface Required extends FlexFieldKind<"Value", Multiplicity.Single> {}
263
- /**
264
- */
265
261
  export interface Optional extends FlexFieldKind<"Optional", Multiplicity.Optional> {}
266
- /**
267
- */
268
262
  export interface Sequence extends FlexFieldKind<"Sequence", Multiplicity.Sequence> {}
269
- /**
270
- */
271
263
  export interface Identifier extends FlexFieldKind<"Identifier", Multiplicity.Single> {}
272
- /**
273
- */
274
264
  export interface Forbidden
275
265
  extends FlexFieldKind<typeof forbiddenFieldKindIdentifier, Multiplicity.Forbidden> {}
276
266
 
@@ -47,8 +47,6 @@ export function isFlexTreeNode(t: unknown): t is FlexTreeNode {
47
47
  return isFlexTreeEntity(t) && t[flexTreeMarker] === FlexTreeEntityKind.Node;
48
48
  }
49
49
 
50
- /**
51
- */
52
50
  export enum FlexTreeEntityKind {
53
51
  Node,
54
52
  Field,
@@ -44,8 +44,6 @@ export function getFirstFromCrossFieldMap<T>(
44
44
  return map.getFirst({ revision, localId: id }, count);
45
45
  }
46
46
 
47
- /**
48
- */
49
47
  export enum CrossFieldTarget {
50
48
  Source,
51
49
  Destination,
@@ -216,19 +216,13 @@ export interface FieldEditor<TChangeset> {
216
216
  */
217
217
  export type ToDelta = (child: NodeId) => DeltaFieldMap;
218
218
 
219
- /**
220
- */
221
219
  export type NodeChangeInverter = (change: NodeId) => NodeId;
222
220
 
223
- /**
224
- */
225
221
  export enum NodeAttachState {
226
222
  Attached,
227
223
  Detached,
228
224
  }
229
225
 
230
- /**
231
- */
232
226
  export type NodeChangeRebaser = (
233
227
  change: NodeId | undefined,
234
228
  baseChange: NodeId | undefined,
@@ -239,15 +233,11 @@ export type NodeChangeRebaser = (
239
233
  state?: NodeAttachState,
240
234
  ) => NodeId | undefined;
241
235
 
242
- /**
243
- */
244
236
  export type NodeChangeComposer = (
245
237
  change1: NodeId | undefined,
246
238
  change2: NodeId | undefined,
247
239
  ) => NodeId;
248
240
 
249
- /**
250
- */
251
241
  export type NodeChangePruner = (change: NodeId) => NodeId | undefined;
252
242
 
253
243
  /**
@@ -2285,8 +2285,6 @@ function newCrossFieldTable<T>(): CrossFieldTable<T> {
2285
2285
  };
2286
2286
  }
2287
2287
 
2288
- /**
2289
- */
2290
2288
  interface ConstraintState {
2291
2289
  violationCount: number;
2292
2290
  }
@@ -2913,8 +2911,6 @@ function buildModularChangesetFromNode(props: {
2913
2911
  });
2914
2912
  }
2915
2913
 
2916
- /**
2917
- */
2918
2914
  export interface FieldEditDescription {
2919
2915
  type: "field";
2920
2916
  field: FieldUpPath;
@@ -2923,16 +2919,12 @@ export interface FieldEditDescription {
2923
2919
  revision: RevisionTag;
2924
2920
  }
2925
2921
 
2926
- /**
2927
- */
2928
2922
  export interface GlobalEditDescription {
2929
2923
  type: "global";
2930
2924
  revision: RevisionTag;
2931
2925
  builds?: ChangeAtomIdBTree<TreeChunk>;
2932
2926
  }
2933
2927
 
2934
- /**
2935
- */
2936
2928
  export type EditDescription = FieldEditDescription | GlobalEditDescription;
2937
2929
 
2938
2930
  function getRevInfoFromTaggedChanges(changes: TaggedChange<ModularChangeset>[]): {
@@ -17,8 +17,6 @@ import type { TreeChunk } from "../chunked-forest/index.js";
17
17
 
18
18
  import type { CrossFieldTarget } from "./crossFieldQueries.js";
19
19
 
20
- /**
21
- */
22
20
  export interface ModularChangeset extends HasFieldChanges {
23
21
  /**
24
22
  * The numerically highest `ChangesetLocalId` used in this changeset.
@@ -110,8 +108,6 @@ export interface FieldId {
110
108
  readonly field: FieldKey;
111
109
  }
112
110
 
113
- /**
114
- */
115
111
  export interface NodeExistsConstraint {
116
112
  violated: boolean;
117
113
  }
@@ -128,23 +124,15 @@ export interface NodeChangeset extends HasFieldChanges {
128
124
 
129
125
  export type NodeId = ChangeAtomId;
130
126
 
131
- /**
132
- */
133
127
  export interface HasFieldChanges {
134
128
  fieldChanges?: FieldChangeMap;
135
129
  }
136
130
 
137
- /**
138
- */
139
131
  export type FieldChangeMap = Map<FieldKey, FieldChange>;
140
132
 
141
- /**
142
- */
143
133
  export interface FieldChange {
144
134
  fieldKind: FieldKindIdentifier;
145
135
  change: FieldChangeset;
146
136
  }
147
137
 
148
- /**
149
- */
150
138
  export type FieldChangeset = Brand<unknown, "FieldChangeset">;
@@ -24,8 +24,6 @@ export interface HasMoveId {
24
24
  id: MoveId;
25
25
  }
26
26
 
27
- /**
28
- */
29
27
  export interface CellId extends ChangeAtomId {}
30
28
 
31
29
  /**
package/src/index.ts CHANGED
@@ -130,6 +130,7 @@ export {
130
130
  type FieldSchemaAlphaUnsafe,
131
131
  type ArrayNodeCustomizableSchemaUnsafe,
132
132
  type MapNodeCustomizableSchemaUnsafe,
133
+ type TreeRecordNodeUnsafe,
133
134
  // System types (not in Internal types for various reasons, like doc links or cannot be named errors).
134
135
  type typeSchemaSymbol,
135
136
  type TreeNodeSchemaNonClass,
@@ -196,6 +197,8 @@ export {
196
197
  type JsonRefPath,
197
198
  type JsonSchemaType,
198
199
  type JsonLeafSchemaType,
200
+ type JsonRecordNodeSchema,
201
+ type JsonStringKeyPatternProperties,
199
202
  getJsonSchema,
200
203
  type LazyItem,
201
204
  type Unenforced,
@@ -209,6 +212,7 @@ export {
209
212
  type SimpleArrayNodeSchema,
210
213
  type SimpleObjectNodeSchema,
211
214
  type SimpleObjectFieldSchema,
215
+ type SimpleRecordNodeSchema,
212
216
  normalizeAllowedTypes,
213
217
  getSimpleSchema,
214
218
  type ReadonlyArrayNode,
@@ -249,6 +253,11 @@ export {
249
253
  type ObjectFromSchemaRecord,
250
254
  type ValidateRecursiveSchemaTemplate,
251
255
  type FixRecursiveRecursionLimit,
256
+ RecordNodeSchema,
257
+ type RecordNodeCustomizableSchema,
258
+ type RecordNodeInsertableData,
259
+ type RecordNodePojoEmulationSchema,
260
+ type TreeRecordNode,
252
261
  } from "./simple-tree/index.js";
253
262
  export {
254
263
  SharedTree,
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { SchemaFactory } from "./simple-tree/index.js";
6
+ import { SchemaFactory, SchemaFactoryAlpha } from "./simple-tree/index.js";
7
7
  import type {
8
8
  AllowedTypes,
9
9
  FixRecursiveArraySchema,
@@ -22,7 +22,7 @@ import type {
22
22
  // #endregion
23
23
  } from "./simple-tree/index.js";
24
24
 
25
- const sf = new SchemaFactory("com.fluidframework.json");
25
+ const sf = new SchemaFactoryAlpha("com.fluidframework.json");
26
26
 
27
27
  /**
28
28
  * Utilities for storing JSON data in {@link TreeNode}s.
@@ -80,7 +80,7 @@ export namespace JsonAsTree {
80
80
  * Do not use. Exists only as a workaround for {@link https://github.com/microsoft/TypeScript/issues/59550} and {@link https://github.com/microsoft/rushstack/issues/4429}.
81
81
  * @system @alpha
82
82
  */
83
- export const _APIExtractorWorkaroundObjectBase = sf.mapRecursive("object", Tree);
83
+ export const _APIExtractorWorkaroundObjectBase = sf.recordRecursive("object", Tree);
84
84
 
85
85
  /**
86
86
  * Arbitrary JSON object as a {@link TreeNode}.
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/tree";
9
- export const pkgVersion = "2.43.0";
9
+ export const pkgVersion = "2.50.0-345060";
@@ -592,6 +592,7 @@ export const TreeAlpha: TreeAlpha = {
592
592
  return undefined;
593
593
  }
594
594
  // Fall through
595
+ case NodeKind.Record:
595
596
  case NodeKind.Object: {
596
597
  let storedKey: string | number = propertyKey;
597
598
  if (isObjectNodeSchema(schema)) {
@@ -643,7 +644,8 @@ export const TreeAlpha: TreeAlpha = {
643
644
  }
644
645
  break;
645
646
  }
646
- case NodeKind.Map: {
647
+ case NodeKind.Map:
648
+ case NodeKind.Record: {
647
649
  for (const [key, flexField] of flexNode.fields) {
648
650
  const childTreeNode = tryGetTreeNodeForField(flexField);
649
651
  if (childTreeNode !== undefined) {
@@ -3,7 +3,13 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert, debugAssert, fail } from "@fluidframework/core-utils/internal";
6
+ import {
7
+ assert,
8
+ debugAssert,
9
+ fail,
10
+ oob,
11
+ unreachableCase,
12
+ } from "@fluidframework/core-utils/internal";
7
13
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
14
 
9
15
  import {
@@ -17,8 +23,16 @@ import {
17
23
  } from "../schemaTypes.js";
18
24
  import { NodeKind, type TreeNodeSchema } from "../core/index.js";
19
25
  import { toStoredSchema } from "../toStoredSchema.js";
20
- import { LeafNodeSchema } from "../leafNodeSchema.js";
21
- import { isObjectNodeSchema, type ObjectNodeSchema } from "../node-kinds/index.js";
26
+ import {
27
+ isArrayNodeSchema,
28
+ isMapNodeSchema,
29
+ isObjectNodeSchema,
30
+ isRecordNodeSchema,
31
+ type ArrayNodeSchema,
32
+ type MapNodeSchema,
33
+ type ObjectNodeSchema,
34
+ type RecordNodeSchema,
35
+ } from "../node-kinds/index.js";
22
36
  import { getOrCreate } from "../../util/index.js";
23
37
  import type { MakeNominal } from "../../util/index.js";
24
38
  import { walkFieldSchema } from "../walkFieldSchema.js";
@@ -293,10 +307,11 @@ export function checkUnion(
293
307
  ambiguityErrors: string[],
294
308
  ): void {
295
309
  const checked: Set<TreeNodeSchema> = new Set();
296
- const maps: TreeNodeSchema[] = [];
297
- const arrays: TreeNodeSchema[] = [];
298
-
310
+ const maps: MapNodeSchema[] = [];
311
+ const arrays: ArrayNodeSchema[] = [];
312
+ const records: RecordNodeSchema[] = [];
299
313
  const objects: ObjectNodeSchema[] = [];
314
+
300
315
  // Map from key to schema using that key
301
316
  const allObjectKeys: Map<string, Set<TreeNodeSchema>> = new Map();
302
317
 
@@ -306,18 +321,37 @@ export function checkUnion(
306
321
  }
307
322
  checked.add(schema);
308
323
 
309
- if (schema instanceof LeafNodeSchema) {
310
- // nothing to do
311
- } else if (isObjectNodeSchema(schema)) {
312
- objects.push(schema);
313
- for (const key of schema.fields.keys()) {
314
- getOrCreate(allObjectKeys, key, () => new Set()).add(schema);
324
+ switch (schema.kind) {
325
+ case NodeKind.Leaf: {
326
+ // nothing to do
327
+ break;
328
+ }
329
+ case NodeKind.Object: {
330
+ assert(isObjectNodeSchema(schema), "Expected object schema.");
331
+ objects.push(schema);
332
+ for (const key of schema.fields.keys()) {
333
+ getOrCreate(allObjectKeys, key, () => new Set()).add(schema);
334
+ }
335
+ break;
336
+ }
337
+ case NodeKind.Array: {
338
+ assert(isArrayNodeSchema(schema), "Expected array schema.");
339
+ arrays.push(schema);
340
+ break;
341
+ }
342
+ case NodeKind.Map: {
343
+ assert(isMapNodeSchema(schema), "Expected map schema.");
344
+ maps.push(schema);
345
+ break;
346
+ }
347
+ case NodeKind.Record: {
348
+ assert(isRecordNodeSchema(schema), "Expected record schema.");
349
+ records.push(schema);
350
+ break;
351
+ }
352
+ default: {
353
+ unreachableCase(schema.kind);
315
354
  }
316
- } else if (schema.kind === NodeKind.Array) {
317
- arrays.push(schema);
318
- } else {
319
- assert(schema.kind === NodeKind.Map, 0x9e7 /* invalid schema */);
320
- maps.push(schema);
321
355
  }
322
356
  }
323
357
 
@@ -338,15 +372,35 @@ export function checkUnion(
338
372
  );
339
373
  }
340
374
 
375
+ if (records.length > 1) {
376
+ ambiguityErrors.push(
377
+ `More than one kind of record allowed within union (${formatTypes(records)}). This would require type disambiguation which is not supported by records during import or export.`,
378
+ );
379
+ }
380
+
341
381
  if (maps.length > 0 && arrays.length > 0) {
342
382
  ambiguityErrors.push(
343
383
  `Both a map and an array allowed within union (${formatTypes([...arrays, ...maps])}). Both can be implicitly constructed from iterables like arrays, which are ambiguous when the array is empty.`,
344
384
  );
345
385
  }
346
386
 
347
- if (objects.length > 0 && maps.length > 0) {
387
+ const nodeKindListEntries = [];
388
+ if (objects.length > 0) {
389
+ nodeKindListEntries.push("objects");
390
+ }
391
+ if (maps.length > 0) {
392
+ nodeKindListEntries.push("maps");
393
+ }
394
+ if (records.length > 0) {
395
+ nodeKindListEntries.push("records");
396
+ }
397
+ if (nodeKindListEntries.length > 1) {
398
+ const nodeKindListString =
399
+ nodeKindListEntries.length === 2
400
+ ? `${nodeKindListEntries[0] ?? oob()} and ${nodeKindListEntries[1] ?? oob()}`
401
+ : `${nodeKindListEntries.slice(0, -1).join(", ")}, and ${nodeKindListEntries[nodeKindListEntries.length - 1]}`;
348
402
  ambiguityErrors.push(
349
- `Both a object and a map allowed within union (${formatTypes([...objects, ...maps])}). Both can be constructed from objects and can be ambiguous.`,
403
+ `A combination of ${nodeKindListString} is allowed within union (${formatTypes([...objects, ...maps, ...records])}). These can be constructed from objects and can be ambiguous.`,
350
404
  );
351
405
  }
352
406
 
@@ -22,7 +22,7 @@ import {
22
22
  } from "../../core/index.js";
23
23
  import { FieldKinds, valueSchemaAllows } from "../../feature-libraries/index.js";
24
24
  import { cloneWithReplacements } from "../../util/index.js";
25
- import { NodeKind, type TreeNodeSchema } from "../core/index.js";
25
+ import type { TreeNodeSchema } from "../core/index.js";
26
26
  import {
27
27
  booleanSchema,
28
28
  handleSchema,
@@ -30,7 +30,7 @@ import {
30
30
  numberSchema,
31
31
  stringSchema,
32
32
  } from "../leafNodeSchema.js";
33
- import { isObjectNodeSchema } from "../node-kinds/index.js";
33
+ import { isArrayNodeSchema, isObjectNodeSchema } from "../node-kinds/index.js";
34
34
  import type { TreeLeafValue } from "../schemaTypes.js";
35
35
 
36
36
  /**
@@ -106,7 +106,7 @@ export function customFromCursor<TChild>(
106
106
  return reader.value;
107
107
  default: {
108
108
  assert(reader.value === undefined, 0xa54 /* out of schema: unexpected value */);
109
- if (nodeSchema.kind === NodeKind.Array) {
109
+ if (isArrayNodeSchema(nodeSchema)) {
110
110
  const fields = inCursorField(reader, EmptyKey, () =>
111
111
  mapCursorField(reader, () => childHandler(reader, options, schema)),
112
112
  );
@@ -67,6 +67,8 @@ export {
67
67
  type JsonTreeSchema,
68
68
  type JsonFieldSchema,
69
69
  type JsonLeafSchemaType,
70
+ type JsonRecordNodeSchema,
71
+ type JsonStringKeyPatternProperties,
70
72
  } from "./jsonSchema.js";
71
73
  export type { TreeSchemaEncodingOptions } from "./getJsonSchema.js";
72
74
  export { getJsonSchema } from "./getJsonSchema.js";
@@ -78,6 +80,7 @@ export type {
78
80
  ArrayNodeCustomizableSchemaUnsafe,
79
81
  MapNodeCustomizableSchemaUnsafe,
80
82
  System_Unsafe,
83
+ TreeRecordNodeUnsafe,
81
84
  } from "./typesUnsafe.js";
82
85
 
83
86
  export {
@@ -116,6 +116,22 @@ export interface JsonArrayNodeSchema extends JsonNodeSchemaBase<NodeKind.Array,
116
116
  readonly items: JsonFieldSchema;
117
117
  }
118
118
 
119
+ /**
120
+ * Types allowed in map / record nodes.
121
+ *
122
+ * @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-patternproperties}.
123
+ *
124
+ * @sealed
125
+ * @alpha
126
+ */
127
+ export interface JsonStringKeyPatternProperties {
128
+ /**
129
+ * This format allows for any string key that can appear in tree schema in a way that is JSON schema compatible,
130
+ * but restricts the value to the specified allowed types of the value to only those specified.
131
+ */
132
+ "^.*$": JsonFieldSchema;
133
+ }
134
+
119
135
  /**
120
136
  * JSON Schema for a map node.
121
137
  *
@@ -131,13 +147,23 @@ export interface JsonMapNodeSchema extends JsonNodeSchemaBase<NodeKind.Map, "obj
131
147
  * Used to control the types of properties that can appear in the "object" representation of the map.
132
148
  * @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-patternproperties}.
133
149
  */
134
- readonly patternProperties: {
135
- /**
136
- * Types allowed in the map.
137
- * @remarks This format allows for any (JSON-compliant) key, but restricts the allowed types to only those specified.
138
- */
139
- "^.*$": JsonFieldSchema;
140
- };
150
+ readonly patternProperties: JsonStringKeyPatternProperties;
151
+ }
152
+
153
+ /**
154
+ * JSON Schema for a record node.
155
+ *
156
+ * @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-instance-data-model}.
157
+ *
158
+ * @sealed
159
+ * @alpha
160
+ */
161
+ export interface JsonRecordNodeSchema extends JsonNodeSchemaBase<NodeKind.Record, "object"> {
162
+ /**
163
+ * Used to control the types of properties that can appear in the "object" representation of the record.
164
+ * @see {@link https://json-schema.org/draft/2020-12/json-schema-core#name-patternproperties}.
165
+ */
166
+ readonly patternProperties: JsonStringKeyPatternProperties;
141
167
  }
142
168
 
143
169
  /**
@@ -182,7 +208,8 @@ export type JsonNodeSchema =
182
208
  | JsonLeafNodeSchema
183
209
  | JsonMapNodeSchema
184
210
  | JsonArrayNodeSchema
185
- | JsonObjectNodeSchema;
211
+ | JsonObjectNodeSchema
212
+ | JsonRecordNodeSchema;
186
213
 
187
214
  /**
188
215
  *{@link https://json-schema.org/draft/2020-12/json-schema-core | JSON Schema} representation of a {@link FieldSchema}.
@@ -776,16 +776,8 @@ export class SchemaFactory<
776
776
  if (allowedTypes === undefined) {
777
777
  const types = nameOrAllowedTypes as (T & TreeNodeSchema) | readonly TreeNodeSchema[];
778
778
  const fullName = structuralName("Map", types);
779
- return this.getStructuralType(
780
- fullName,
781
- types,
782
- () =>
783
- this.namedMap(
784
- fullName as TName,
785
- nameOrAllowedTypes as T,
786
- false,
787
- true,
788
- ) as TreeNodeSchema,
779
+ return this.getStructuralType(fullName, types, () =>
780
+ this.namedMap(fullName, nameOrAllowedTypes as T, false, true),
789
781
  ) as TreeNodeSchemaBoth<
790
782
  string,
791
783
  NodeKind.Map,
@@ -796,7 +788,7 @@ export class SchemaFactory<
796
788
  undefined
797
789
  >;
798
790
  }
799
- // To actually have type safety, assign to the type this method should return before implicitly upcasting when returning.
791
+ // To actually have type safety, assign to the type this method should return before implicitly up-casting when returning.
800
792
  const out: TreeNodeSchemaBoth<
801
793
  string,
802
794
  NodeKind.Map,
@@ -895,7 +887,7 @@ export class SchemaFactory<
895
887
  * ```
896
888
  * @privateRemarks
897
889
  * The name produced at the type level here is not as specific as it could be, however doing type level sorting and escaping is a real mess.
898
- * There are cases where not having this full type provided will be less than ideal since TypeScript's structural types.
890
+ * There are cases where not having this full type provided will be less than ideal, since TypeScript's structural types will allow assignment between runtime incompatible types at compile time.
899
891
  * For example attempts to narrow unions of structural arrays by name won't work.
900
892
  * Planned future changes to move to a class based schema system as well as factor function based node construction should mostly avoid these issues,
901
893
  * though there may still be some problematic cases even after that work is done.
@@ -997,7 +989,7 @@ export class SchemaFactory<
997
989
  * @returns The structural {@link TreeNodeSchema} associated with the given name and types.
998
990
  * @throws `UsageError` if a schema structurally named schema with the same name is cached in `structuralTypes` but had different input types.
999
991
  */
1000
- private getStructuralType(
992
+ protected getStructuralType(
1001
993
  fullName: string,
1002
994
  types: TreeNodeSchema | readonly TreeNodeSchema[],
1003
995
  builder: () => TreeNodeSchema,