@fluidframework/tree 2.50.0 → 2.51.0

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 (636) hide show
  1. package/.eslintrc.cjs +3 -2
  2. package/.vscode/Tree.code-workspace +14 -1
  3. package/.vscode/settings.json +16 -0
  4. package/CHANGELOG.md +51 -2
  5. package/api-report/tree.alpha.api.md +7 -7
  6. package/dist/core/schema-stored/schema.d.ts +14 -1
  7. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  8. package/dist/core/schema-stored/schema.js.map +1 -1
  9. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  10. package/dist/feature-libraries/default-schema/schemaChecker.js +3 -0
  11. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  12. package/dist/feature-libraries/flex-tree/context.d.ts +7 -2
  13. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  14. package/dist/feature-libraries/flex-tree/context.js +4 -4
  15. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  16. package/dist/feature-libraries/flex-tree/index.d.ts +1 -0
  17. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  18. package/dist/feature-libraries/flex-tree/index.js +3 -1
  19. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  20. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  21. package/dist/feature-libraries/flex-tree/lazyField.js +5 -5
  22. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  23. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +3 -1
  24. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  25. package/dist/feature-libraries/flex-tree/lazyNode.js +5 -3
  26. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  27. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  28. package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -4
  29. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  30. package/dist/feature-libraries/index.d.ts +2 -2
  31. package/dist/feature-libraries/index.d.ts.map +1 -1
  32. package/dist/feature-libraries/index.js +3 -8
  33. package/dist/feature-libraries/index.js.map +1 -1
  34. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  35. package/dist/feature-libraries/modular-schema/comparison.js +0 -3
  36. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  37. package/dist/feature-libraries/modular-schema/index.d.ts +0 -1
  38. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  39. package/dist/feature-libraries/modular-schema/index.js +1 -8
  40. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  41. package/dist/packageVersion.d.ts +1 -1
  42. package/dist/packageVersion.js +1 -1
  43. package/dist/packageVersion.js.map +1 -1
  44. package/dist/shared-tree/index.d.ts +0 -1
  45. package/dist/shared-tree/index.d.ts.map +1 -1
  46. package/dist/shared-tree/index.js +1 -3
  47. package/dist/shared-tree/index.js.map +1 -1
  48. package/dist/shared-tree/schematizeTree.d.ts +1 -1
  49. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  50. package/dist/shared-tree/schematizeTree.js +7 -10
  51. package/dist/shared-tree/schematizeTree.js.map +1 -1
  52. package/dist/shared-tree/schematizingTreeView.d.ts +11 -13
  53. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  54. package/dist/shared-tree/schematizingTreeView.js +60 -83
  55. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  56. package/dist/shared-tree/sharedTreeChangeTypes.d.ts +1 -1
  57. package/dist/shared-tree/sharedTreeChangeTypes.js.map +1 -1
  58. package/dist/shared-tree/tree.d.ts.map +1 -1
  59. package/dist/shared-tree/tree.js +4 -3
  60. package/dist/shared-tree/tree.js.map +1 -1
  61. package/dist/shared-tree/treeAlpha.d.ts +7 -1
  62. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  63. package/dist/shared-tree/treeAlpha.js.map +1 -1
  64. package/dist/shared-tree/treeCheckout.d.ts +7 -2
  65. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  66. package/dist/shared-tree/treeCheckout.js +4 -1
  67. package/dist/shared-tree/treeCheckout.js.map +1 -1
  68. package/dist/simple-tree/api/conciseTree.d.ts +1 -1
  69. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  70. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  71. package/dist/simple-tree/api/configuration.d.ts +1 -1
  72. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  73. package/dist/simple-tree/api/configuration.js +5 -5
  74. package/dist/simple-tree/api/configuration.js.map +1 -1
  75. package/dist/simple-tree/api/create.d.ts +3 -1
  76. package/dist/simple-tree/api/create.d.ts.map +1 -1
  77. package/dist/simple-tree/api/create.js +2 -0
  78. package/dist/simple-tree/api/create.js.map +1 -1
  79. package/dist/simple-tree/api/customTree.d.ts +1 -2
  80. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  81. package/dist/simple-tree/api/customTree.js.map +1 -1
  82. package/dist/simple-tree/api/getJsonSchema.d.ts +1 -1
  83. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  84. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  85. package/dist/simple-tree/api/getSimpleSchema.d.ts +1 -1
  86. package/dist/simple-tree/api/getSimpleSchema.js.map +1 -1
  87. package/dist/simple-tree/api/identifierIndex.d.ts +1 -1
  88. package/dist/simple-tree/api/identifierIndex.js +2 -2
  89. package/dist/simple-tree/api/identifierIndex.js.map +1 -1
  90. package/dist/simple-tree/api/index.d.ts +1 -1
  91. package/dist/simple-tree/api/index.d.ts.map +1 -1
  92. package/dist/simple-tree/api/index.js.map +1 -1
  93. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +4 -19
  94. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  95. package/dist/simple-tree/api/schemaCompatibilityTester.js +31 -82
  96. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  97. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +14 -2
  98. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  99. package/dist/simple-tree/api/schemaCreationUtilities.js +41 -4
  100. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  101. package/dist/simple-tree/api/schemaFactory.d.ts +36 -3
  102. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  103. package/dist/simple-tree/api/schemaFactory.js +18 -18
  104. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  105. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +16 -16
  106. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  107. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  108. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +2 -2
  109. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  110. package/dist/simple-tree/api/schemaFactoryRecursive.js +2 -2
  111. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  112. package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  113. package/dist/simple-tree/api/schemaFromSimple.js +4 -4
  114. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  115. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +2 -2
  116. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  117. package/dist/simple-tree/api/simpleTreeIndex.d.ts +2 -2
  118. package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  119. package/dist/simple-tree/api/simpleTreeIndex.js +1 -1
  120. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  121. package/dist/simple-tree/api/storedSchema.d.ts +1 -1
  122. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  123. package/dist/simple-tree/api/storedSchema.js +2 -2
  124. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  125. package/dist/simple-tree/api/tree.d.ts +2 -1
  126. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  127. package/dist/simple-tree/api/tree.js.map +1 -1
  128. package/dist/simple-tree/api/treeBeta.d.ts +4 -1
  129. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  130. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  131. package/dist/simple-tree/api/treeNodeApi.d.ts +1 -2
  132. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  133. package/dist/simple-tree/api/treeNodeApi.js +3 -3
  134. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  135. package/dist/simple-tree/api/typesUnsafe.d.ts +2 -3
  136. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  137. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  138. package/dist/simple-tree/api/verboseTree.d.ts +2 -1
  139. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  140. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  141. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts +1 -1
  142. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +2 -2
  143. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  144. package/dist/simple-tree/core/allowedTypes.d.ts +316 -0
  145. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -0
  146. package/dist/simple-tree/core/allowedTypes.js +173 -0
  147. package/dist/simple-tree/core/allowedTypes.js.map +1 -0
  148. package/dist/simple-tree/core/context.d.ts +3 -9
  149. package/dist/simple-tree/core/context.d.ts.map +1 -1
  150. package/dist/simple-tree/core/context.js +3 -11
  151. package/dist/simple-tree/core/context.js.map +1 -1
  152. package/dist/simple-tree/core/flexList.d.ts.map +1 -0
  153. package/dist/simple-tree/core/flexList.js.map +1 -0
  154. package/dist/simple-tree/core/getOrCreateNode.d.ts +1 -1
  155. package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  156. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
  157. package/dist/simple-tree/core/index.d.ts +9 -3
  158. package/dist/simple-tree/core/index.d.ts.map +1 -1
  159. package/dist/simple-tree/core/index.js +19 -3
  160. package/dist/simple-tree/core/index.js.map +1 -1
  161. package/dist/simple-tree/core/treeNodeKernel.d.ts +8 -1
  162. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  163. package/dist/simple-tree/core/treeNodeKernel.js +24 -20
  164. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  165. package/dist/simple-tree/core/treeNodeSchema.d.ts +182 -39
  166. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  167. package/dist/simple-tree/core/treeNodeSchema.js +47 -17
  168. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  169. package/{lib/simple-tree → dist/simple-tree/core}/treeNodeValid.d.ts +18 -4
  170. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -0
  171. package/dist/simple-tree/{treeNodeValid.js → core/treeNodeValid.js} +41 -11
  172. package/dist/simple-tree/core/treeNodeValid.js.map +1 -0
  173. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
  174. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  175. package/dist/simple-tree/core/walkSchema.d.ts +2 -1
  176. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
  177. package/dist/simple-tree/core/walkSchema.js +6 -2
  178. package/dist/simple-tree/core/walkSchema.js.map +1 -1
  179. package/dist/simple-tree/createContext.d.ts +6 -2
  180. package/dist/simple-tree/createContext.d.ts.map +1 -1
  181. package/dist/simple-tree/createContext.js +15 -3
  182. package/dist/simple-tree/createContext.js.map +1 -1
  183. package/dist/{feature-libraries/modular-schema → simple-tree}/discrepancies.d.ts +22 -29
  184. package/dist/simple-tree/discrepancies.d.ts.map +1 -0
  185. package/dist/simple-tree/discrepancies.js +382 -0
  186. package/dist/simple-tree/discrepancies.js.map +1 -0
  187. package/dist/simple-tree/fieldSchema.d.ts +423 -0
  188. package/dist/simple-tree/fieldSchema.d.ts.map +1 -0
  189. package/dist/simple-tree/{schemaTypes.js → fieldSchema.js} +5 -195
  190. package/dist/simple-tree/fieldSchema.js.map +1 -0
  191. package/dist/simple-tree/index.d.ts +7 -6
  192. package/dist/simple-tree/index.d.ts.map +1 -1
  193. package/dist/simple-tree/index.js +17 -11
  194. package/dist/simple-tree/index.js.map +1 -1
  195. package/dist/simple-tree/leafNodeSchema.d.ts +14 -5
  196. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  197. package/dist/simple-tree/leafNodeSchema.js +117 -2
  198. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  199. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +3 -4
  200. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  201. package/dist/simple-tree/node-kinds/array/arrayNode.js +97 -26
  202. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  203. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +2 -2
  204. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  205. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  206. package/dist/simple-tree/node-kinds/common.d.ts +16 -0
  207. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -0
  208. package/dist/simple-tree/node-kinds/common.js +42 -0
  209. package/dist/simple-tree/node-kinds/common.js.map +1 -0
  210. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  211. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  212. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  213. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +2 -3
  214. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  215. package/dist/simple-tree/node-kinds/map/mapNode.js +64 -26
  216. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  217. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts +2 -2
  218. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  219. package/dist/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  220. package/dist/simple-tree/node-kinds/object/index.d.ts +2 -2
  221. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  222. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  223. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +19 -5
  224. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  225. package/dist/simple-tree/node-kinds/object/objectNode.js +131 -27
  226. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  227. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +11 -4
  228. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  229. package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  230. package/dist/simple-tree/node-kinds/record/recordNode.d.ts +2 -2
  231. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  232. package/dist/simple-tree/node-kinds/record/recordNode.js +41 -13
  233. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  234. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +2 -2
  235. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  236. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  237. package/dist/simple-tree/prepareForInsertion.d.ts +2 -2
  238. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  239. package/dist/simple-tree/prepareForInsertion.js +3 -3
  240. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  241. package/dist/simple-tree/simpleSchema.d.ts +2 -2
  242. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  243. package/dist/simple-tree/simpleSchema.js.map +1 -1
  244. package/dist/simple-tree/toStoredSchema.d.ts +1 -1
  245. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  246. package/dist/simple-tree/toStoredSchema.js +6 -7
  247. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  248. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +5 -11
  249. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  250. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +25 -395
  251. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  252. package/dist/simple-tree/unsafeUnknownSchema.d.ts +52 -0
  253. package/dist/simple-tree/unsafeUnknownSchema.d.ts.map +1 -0
  254. package/dist/simple-tree/unsafeUnknownSchema.js +13 -0
  255. package/dist/simple-tree/unsafeUnknownSchema.js.map +1 -0
  256. package/dist/simple-tree/walkFieldSchema.d.ts +1 -1
  257. package/dist/simple-tree/walkFieldSchema.js +2 -2
  258. package/dist/simple-tree/walkFieldSchema.js.map +1 -1
  259. package/dist/tableSchema.d.ts +12 -12
  260. package/dist/treeFactory.d.ts +0 -1
  261. package/dist/treeFactory.d.ts.map +1 -1
  262. package/dist/treeFactory.js +0 -1
  263. package/dist/treeFactory.js.map +1 -1
  264. package/lib/core/schema-stored/schema.d.ts +14 -1
  265. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  266. package/lib/core/schema-stored/schema.js.map +1 -1
  267. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  268. package/lib/feature-libraries/default-schema/schemaChecker.js +3 -0
  269. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  270. package/lib/feature-libraries/flex-tree/context.d.ts +7 -2
  271. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  272. package/lib/feature-libraries/flex-tree/context.js +4 -4
  273. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  274. package/lib/feature-libraries/flex-tree/index.d.ts +1 -0
  275. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  276. package/lib/feature-libraries/flex-tree/index.js +1 -0
  277. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  278. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  279. package/lib/feature-libraries/flex-tree/lazyField.js +6 -6
  280. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  281. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +3 -1
  282. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  283. package/lib/feature-libraries/flex-tree/lazyNode.js +3 -1
  284. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  285. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  286. package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -2
  287. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  288. package/lib/feature-libraries/index.d.ts +2 -2
  289. package/lib/feature-libraries/index.d.ts.map +1 -1
  290. package/lib/feature-libraries/index.js +2 -2
  291. package/lib/feature-libraries/index.js.map +1 -1
  292. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  293. package/lib/feature-libraries/modular-schema/comparison.js +0 -3
  294. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  295. package/lib/feature-libraries/modular-schema/index.d.ts +0 -1
  296. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  297. package/lib/feature-libraries/modular-schema/index.js +0 -1
  298. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  299. package/lib/packageVersion.d.ts +1 -1
  300. package/lib/packageVersion.js +1 -1
  301. package/lib/packageVersion.js.map +1 -1
  302. package/lib/shared-tree/index.d.ts +0 -1
  303. package/lib/shared-tree/index.d.ts.map +1 -1
  304. package/lib/shared-tree/index.js +0 -1
  305. package/lib/shared-tree/index.js.map +1 -1
  306. package/lib/shared-tree/schematizeTree.d.ts +1 -1
  307. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  308. package/lib/shared-tree/schematizeTree.js +5 -8
  309. package/lib/shared-tree/schematizeTree.js.map +1 -1
  310. package/lib/shared-tree/schematizingTreeView.d.ts +11 -13
  311. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  312. package/lib/shared-tree/schematizingTreeView.js +61 -83
  313. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  314. package/lib/shared-tree/sharedTreeChangeTypes.d.ts +1 -1
  315. package/lib/shared-tree/sharedTreeChangeTypes.js.map +1 -1
  316. package/lib/shared-tree/tree.d.ts.map +1 -1
  317. package/lib/shared-tree/tree.js +4 -3
  318. package/lib/shared-tree/tree.js.map +1 -1
  319. package/lib/shared-tree/treeAlpha.d.ts +7 -1
  320. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  321. package/lib/shared-tree/treeAlpha.js.map +1 -1
  322. package/lib/shared-tree/treeCheckout.d.ts +7 -2
  323. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  324. package/lib/shared-tree/treeCheckout.js +5 -2
  325. package/lib/shared-tree/treeCheckout.js.map +1 -1
  326. package/lib/simple-tree/api/conciseTree.d.ts +1 -1
  327. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  328. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  329. package/lib/simple-tree/api/configuration.d.ts +1 -1
  330. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  331. package/lib/simple-tree/api/configuration.js +2 -2
  332. package/lib/simple-tree/api/configuration.js.map +1 -1
  333. package/lib/simple-tree/api/create.d.ts +3 -1
  334. package/lib/simple-tree/api/create.d.ts.map +1 -1
  335. package/lib/simple-tree/api/create.js +2 -0
  336. package/lib/simple-tree/api/create.js.map +1 -1
  337. package/lib/simple-tree/api/customTree.d.ts +1 -2
  338. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  339. package/lib/simple-tree/api/customTree.js.map +1 -1
  340. package/lib/simple-tree/api/getJsonSchema.d.ts +1 -1
  341. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  342. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  343. package/lib/simple-tree/api/getSimpleSchema.d.ts +1 -1
  344. package/lib/simple-tree/api/getSimpleSchema.js.map +1 -1
  345. package/lib/simple-tree/api/identifierIndex.d.ts +1 -1
  346. package/lib/simple-tree/api/identifierIndex.js +1 -1
  347. package/lib/simple-tree/api/identifierIndex.js.map +1 -1
  348. package/lib/simple-tree/api/index.d.ts +1 -1
  349. package/lib/simple-tree/api/index.d.ts.map +1 -1
  350. package/lib/simple-tree/api/index.js.map +1 -1
  351. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +4 -19
  352. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  353. package/lib/simple-tree/api/schemaCompatibilityTester.js +25 -76
  354. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  355. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +14 -2
  356. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  357. package/lib/simple-tree/api/schemaCreationUtilities.js +40 -4
  358. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  359. package/lib/simple-tree/api/schemaFactory.d.ts +36 -3
  360. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  361. package/lib/simple-tree/api/schemaFactory.js +2 -2
  362. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  363. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +16 -16
  364. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  365. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  366. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +2 -2
  367. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  368. package/lib/simple-tree/api/schemaFactoryRecursive.js +1 -1
  369. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  370. package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  371. package/lib/simple-tree/api/schemaFromSimple.js +1 -1
  372. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  373. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +1 -1
  374. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  375. package/lib/simple-tree/api/simpleTreeIndex.d.ts +2 -2
  376. package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  377. package/lib/simple-tree/api/simpleTreeIndex.js +2 -2
  378. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  379. package/lib/simple-tree/api/storedSchema.d.ts +1 -1
  380. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  381. package/lib/simple-tree/api/storedSchema.js +2 -2
  382. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  383. package/lib/simple-tree/api/tree.d.ts +2 -1
  384. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  385. package/lib/simple-tree/api/tree.js.map +1 -1
  386. package/lib/simple-tree/api/treeBeta.d.ts +4 -1
  387. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  388. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  389. package/lib/simple-tree/api/treeNodeApi.d.ts +1 -2
  390. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  391. package/lib/simple-tree/api/treeNodeApi.js +2 -2
  392. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  393. package/lib/simple-tree/api/typesUnsafe.d.ts +2 -3
  394. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  395. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  396. package/lib/simple-tree/api/verboseTree.d.ts +2 -1
  397. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  398. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  399. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts +1 -1
  400. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +1 -1
  401. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  402. package/lib/simple-tree/core/allowedTypes.d.ts +316 -0
  403. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -0
  404. package/lib/simple-tree/core/allowedTypes.js +162 -0
  405. package/lib/simple-tree/core/allowedTypes.js.map +1 -0
  406. package/lib/simple-tree/core/context.d.ts +3 -9
  407. package/lib/simple-tree/core/context.d.ts.map +1 -1
  408. package/lib/simple-tree/core/context.js +0 -8
  409. package/lib/simple-tree/core/context.js.map +1 -1
  410. package/lib/simple-tree/core/flexList.d.ts.map +1 -0
  411. package/lib/simple-tree/core/flexList.js.map +1 -0
  412. package/lib/simple-tree/core/getOrCreateNode.d.ts +1 -1
  413. package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  414. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
  415. package/lib/simple-tree/core/index.d.ts +9 -3
  416. package/lib/simple-tree/core/index.d.ts.map +1 -1
  417. package/lib/simple-tree/core/index.js +6 -3
  418. package/lib/simple-tree/core/index.js.map +1 -1
  419. package/lib/simple-tree/core/treeNodeKernel.d.ts +8 -1
  420. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  421. package/lib/simple-tree/core/treeNodeKernel.js +10 -6
  422. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  423. package/lib/simple-tree/core/treeNodeSchema.d.ts +182 -39
  424. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  425. package/lib/simple-tree/core/treeNodeSchema.js +44 -14
  426. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  427. package/{dist/simple-tree → lib/simple-tree/core}/treeNodeValid.d.ts +18 -4
  428. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -0
  429. package/lib/simple-tree/{treeNodeValid.js → core/treeNodeValid.js} +31 -3
  430. package/lib/simple-tree/core/treeNodeValid.js.map +1 -0
  431. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
  432. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  433. package/lib/simple-tree/core/walkSchema.d.ts +2 -1
  434. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
  435. package/lib/simple-tree/core/walkSchema.js +7 -3
  436. package/lib/simple-tree/core/walkSchema.js.map +1 -1
  437. package/lib/simple-tree/createContext.d.ts +6 -2
  438. package/lib/simple-tree/createContext.d.ts.map +1 -1
  439. package/lib/simple-tree/createContext.js +13 -2
  440. package/lib/simple-tree/createContext.js.map +1 -1
  441. package/lib/{feature-libraries/modular-schema → simple-tree}/discrepancies.d.ts +22 -29
  442. package/lib/simple-tree/discrepancies.d.ts.map +1 -0
  443. package/lib/simple-tree/discrepancies.js +376 -0
  444. package/lib/simple-tree/discrepancies.js.map +1 -0
  445. package/lib/simple-tree/fieldSchema.d.ts +423 -0
  446. package/lib/simple-tree/fieldSchema.d.ts.map +1 -0
  447. package/lib/simple-tree/{schemaTypes.js → fieldSchema.js} +3 -183
  448. package/lib/simple-tree/fieldSchema.js.map +1 -0
  449. package/lib/simple-tree/index.d.ts +7 -6
  450. package/lib/simple-tree/index.d.ts.map +1 -1
  451. package/lib/simple-tree/index.js +4 -3
  452. package/lib/simple-tree/index.js.map +1 -1
  453. package/lib/simple-tree/leafNodeSchema.d.ts +14 -5
  454. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  455. package/lib/simple-tree/leafNodeSchema.js +117 -3
  456. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  457. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +3 -4
  458. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  459. package/lib/simple-tree/node-kinds/array/arrayNode.js +86 -15
  460. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  461. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +2 -2
  462. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  463. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js +1 -1
  464. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  465. package/lib/simple-tree/node-kinds/common.d.ts +16 -0
  466. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -0
  467. package/lib/simple-tree/node-kinds/common.js +38 -0
  468. package/lib/simple-tree/node-kinds/common.js.map +1 -0
  469. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  470. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  471. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  472. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +2 -3
  473. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  474. package/lib/simple-tree/node-kinds/map/mapNode.js +51 -13
  475. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  476. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts +2 -2
  477. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  478. package/lib/simple-tree/node-kinds/map/mapNodeTypes.js +1 -1
  479. package/lib/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  480. package/lib/simple-tree/node-kinds/object/index.d.ts +2 -2
  481. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  482. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  483. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +19 -5
  484. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  485. package/lib/simple-tree/node-kinds/object/objectNode.js +116 -14
  486. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  487. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +11 -4
  488. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  489. package/lib/simple-tree/node-kinds/object/objectNodeTypes.js +1 -1
  490. package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  491. package/lib/simple-tree/node-kinds/record/recordNode.d.ts +2 -2
  492. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  493. package/lib/simple-tree/node-kinds/record/recordNode.js +40 -12
  494. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  495. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +2 -2
  496. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  497. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js +1 -1
  498. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  499. package/lib/simple-tree/prepareForInsertion.d.ts +2 -2
  500. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  501. package/lib/simple-tree/prepareForInsertion.js +2 -2
  502. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  503. package/lib/simple-tree/simpleSchema.d.ts +2 -2
  504. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  505. package/lib/simple-tree/simpleSchema.js.map +1 -1
  506. package/lib/simple-tree/toStoredSchema.d.ts +1 -1
  507. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  508. package/lib/simple-tree/toStoredSchema.js +2 -3
  509. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  510. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +5 -11
  511. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  512. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +10 -381
  513. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  514. package/lib/simple-tree/unsafeUnknownSchema.d.ts +52 -0
  515. package/lib/simple-tree/unsafeUnknownSchema.d.ts.map +1 -0
  516. package/lib/simple-tree/unsafeUnknownSchema.js +10 -0
  517. package/lib/simple-tree/unsafeUnknownSchema.js.map +1 -0
  518. package/lib/simple-tree/walkFieldSchema.d.ts +1 -1
  519. package/lib/simple-tree/walkFieldSchema.js +1 -1
  520. package/lib/simple-tree/walkFieldSchema.js.map +1 -1
  521. package/lib/tableSchema.d.ts +12 -12
  522. package/lib/treeFactory.d.ts +0 -1
  523. package/lib/treeFactory.d.ts.map +1 -1
  524. package/lib/treeFactory.js +0 -1
  525. package/lib/treeFactory.js.map +1 -1
  526. package/package.json +22 -23
  527. package/src/core/schema-stored/schema.ts +14 -1
  528. package/src/feature-libraries/default-schema/schemaChecker.ts +3 -0
  529. package/src/feature-libraries/flex-tree/context.ts +10 -5
  530. package/src/feature-libraries/flex-tree/index.ts +2 -0
  531. package/src/feature-libraries/flex-tree/lazyField.ts +10 -6
  532. package/src/feature-libraries/flex-tree/lazyNode.ts +6 -1
  533. package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -2
  534. package/src/feature-libraries/index.ts +1 -15
  535. package/src/feature-libraries/modular-schema/comparison.ts +0 -4
  536. package/src/feature-libraries/modular-schema/index.ts +0 -17
  537. package/src/packageVersion.ts +1 -1
  538. package/src/shared-tree/index.ts +0 -2
  539. package/src/shared-tree/schematizeTree.ts +5 -9
  540. package/src/shared-tree/schematizingTreeView.ts +75 -113
  541. package/src/shared-tree/sharedTreeChangeTypes.ts +1 -1
  542. package/src/shared-tree/tree.ts +4 -3
  543. package/src/shared-tree/treeAlpha.ts +7 -1
  544. package/src/shared-tree/treeCheckout.ts +15 -2
  545. package/src/simple-tree/api/conciseTree.ts +1 -2
  546. package/src/simple-tree/api/configuration.ts +7 -4
  547. package/src/simple-tree/api/create.ts +3 -1
  548. package/src/simple-tree/api/customTree.ts +1 -2
  549. package/src/simple-tree/api/getJsonSchema.ts +1 -1
  550. package/src/simple-tree/api/getSimpleSchema.ts +1 -1
  551. package/src/simple-tree/api/identifierIndex.ts +1 -1
  552. package/src/simple-tree/api/index.ts +2 -0
  553. package/src/simple-tree/api/schemaCompatibilityTester.ts +38 -128
  554. package/src/simple-tree/api/schemaCreationUtilities.ts +50 -5
  555. package/src/simple-tree/api/schemaFactory.ts +45 -10
  556. package/src/simple-tree/api/schemaFactoryAlpha.ts +4 -7
  557. package/src/simple-tree/api/schemaFactoryRecursive.ts +9 -4
  558. package/src/simple-tree/api/schemaFromSimple.ts +2 -3
  559. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +1 -1
  560. package/src/simple-tree/api/simpleTreeIndex.ts +8 -3
  561. package/src/simple-tree/api/storedSchema.ts +1 -2
  562. package/src/simple-tree/api/tree.ts +2 -2
  563. package/src/simple-tree/api/treeBeta.ts +4 -1
  564. package/src/simple-tree/api/treeNodeApi.ts +5 -8
  565. package/src/simple-tree/api/typesUnsafe.ts +5 -4
  566. package/src/simple-tree/api/verboseTree.ts +3 -6
  567. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +1 -1
  568. package/src/simple-tree/core/README.md +1 -1
  569. package/src/simple-tree/core/allowedTypes.ts +496 -0
  570. package/src/simple-tree/core/context.ts +3 -10
  571. package/src/simple-tree/core/getOrCreateNode.ts +1 -1
  572. package/src/simple-tree/core/index.ts +62 -9
  573. package/src/simple-tree/core/treeNodeKernel.ts +12 -6
  574. package/src/simple-tree/core/treeNodeSchema.ts +247 -63
  575. package/src/simple-tree/{treeNodeValid.ts → core/treeNodeValid.ts} +59 -15
  576. package/src/simple-tree/core/unhydratedFlexTree.ts +1 -1
  577. package/src/simple-tree/core/walkSchema.ts +9 -5
  578. package/src/simple-tree/createContext.ts +26 -2
  579. package/src/simple-tree/discrepancies.ts +648 -0
  580. package/src/simple-tree/fieldSchema.ts +734 -0
  581. package/src/simple-tree/index.ts +41 -31
  582. package/src/simple-tree/leafNodeSchema.ts +137 -5
  583. package/src/simple-tree/node-kinds/array/arrayNode.ts +141 -30
  584. package/src/simple-tree/node-kinds/array/arrayNodeTypes.ts +5 -7
  585. package/src/simple-tree/node-kinds/common.ts +60 -0
  586. package/src/simple-tree/node-kinds/index.ts +2 -0
  587. package/src/simple-tree/node-kinds/map/mapNode.ts +91 -33
  588. package/src/simple-tree/node-kinds/map/mapNodeTypes.ts +5 -7
  589. package/src/simple-tree/node-kinds/object/index.ts +2 -0
  590. package/src/simple-tree/node-kinds/object/objectNode.ts +205 -25
  591. package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +22 -5
  592. package/src/simple-tree/node-kinds/record/recordNode.ts +68 -26
  593. package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +6 -8
  594. package/src/simple-tree/prepareForInsertion.ts +7 -6
  595. package/src/simple-tree/simpleSchema.ts +2 -2
  596. package/src/simple-tree/toStoredSchema.ts +2 -3
  597. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +12 -494
  598. package/src/simple-tree/unsafeUnknownSchema.ts +70 -0
  599. package/src/simple-tree/walkFieldSchema.ts +1 -1
  600. package/src/treeFactory.ts +0 -1
  601. package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +0 -1
  602. package/dist/feature-libraries/modular-schema/discrepancies.js +0 -361
  603. package/dist/feature-libraries/modular-schema/discrepancies.js.map +0 -1
  604. package/dist/shared-tree/checkoutFlexTreeView.d.ts +0 -58
  605. package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +0 -1
  606. package/dist/shared-tree/checkoutFlexTreeView.js +0 -77
  607. package/dist/shared-tree/checkoutFlexTreeView.js.map +0 -1
  608. package/dist/simple-tree/flexList.d.ts.map +0 -1
  609. package/dist/simple-tree/flexList.js.map +0 -1
  610. package/dist/simple-tree/schemaTypes.d.ts +0 -856
  611. package/dist/simple-tree/schemaTypes.d.ts.map +0 -1
  612. package/dist/simple-tree/schemaTypes.js.map +0 -1
  613. package/dist/simple-tree/treeNodeValid.d.ts.map +0 -1
  614. package/dist/simple-tree/treeNodeValid.js.map +0 -1
  615. package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +0 -1
  616. package/lib/feature-libraries/modular-schema/discrepancies.js +0 -354
  617. package/lib/feature-libraries/modular-schema/discrepancies.js.map +0 -1
  618. package/lib/shared-tree/checkoutFlexTreeView.d.ts +0 -58
  619. package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +0 -1
  620. package/lib/shared-tree/checkoutFlexTreeView.js +0 -72
  621. package/lib/shared-tree/checkoutFlexTreeView.js.map +0 -1
  622. package/lib/simple-tree/flexList.d.ts.map +0 -1
  623. package/lib/simple-tree/flexList.js.map +0 -1
  624. package/lib/simple-tree/schemaTypes.d.ts +0 -856
  625. package/lib/simple-tree/schemaTypes.d.ts.map +0 -1
  626. package/lib/simple-tree/schemaTypes.js.map +0 -1
  627. package/lib/simple-tree/treeNodeValid.d.ts.map +0 -1
  628. package/lib/simple-tree/treeNodeValid.js.map +0 -1
  629. package/src/feature-libraries/modular-schema/discrepancies.ts +0 -567
  630. package/src/shared-tree/checkoutFlexTreeView.ts +0 -100
  631. package/src/simple-tree/schemaTypes.ts +0 -1420
  632. /package/dist/simple-tree/{flexList.d.ts → core/flexList.d.ts} +0 -0
  633. /package/dist/simple-tree/{flexList.js → core/flexList.js} +0 -0
  634. /package/lib/simple-tree/{flexList.d.ts → core/flexList.d.ts} +0 -0
  635. /package/lib/simple-tree/{flexList.js → core/flexList.js} +0 -0
  636. /package/src/simple-tree/{flexList.ts → core/flexList.ts} +0 -0
@@ -4,27 +4,19 @@
4
4
  */
5
5
 
6
6
  import { Lazy } from "@fluidframework/core-utils/internal";
7
- import type {
8
- FlexibleNodeContent,
9
- FlexTreeNode,
10
- FlexTreeOptionalField,
11
- OptionalFieldEditBuilder,
7
+ import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
+
9
+ import {
10
+ isTreeValue,
11
+ type FlexibleNodeContent,
12
+ type FlexTreeNode,
13
+ type FlexTreeOptionalField,
14
+ type OptionalFieldEditBuilder,
12
15
  } from "../../../feature-libraries/index.js";
13
16
  import { tryGetTreeNodeForField } from "../../getTreeNodeForField.js";
17
+ import { createFieldSchema, FieldKind } from "../../fieldSchema.js";
14
18
  import {
15
- createFieldSchema,
16
- FieldKind,
17
- normalizeAllowedTypes,
18
- normalizeAnnotatedAllowedTypes,
19
- unannotateImplicitAllowedTypes,
20
- type ImplicitAllowedTypes,
21
- type ImplicitAnnotatedAllowedTypes,
22
- type InsertableTreeNodeFromImplicitAllowedTypes,
23
- type NodeSchemaMetadata,
24
- type TreeNodeFromImplicitAllowedTypes,
25
- type UnannotateImplicitAllowedTypes,
26
- } from "../../schemaTypes.js";
27
- import {
19
+ CompatibilityLevel,
28
20
  getKernel,
29
21
  type InnerNode,
30
22
  NodeKind,
@@ -33,11 +25,25 @@ import {
33
25
  typeNameSymbol,
34
26
  type TreeNode,
35
27
  typeSchemaSymbol,
36
- type Context,
37
28
  getOrCreateInnerNode,
38
29
  type InternalTreeNode,
39
30
  type UnhydratedFlexTreeNode,
40
- type NormalizedAnnotatedAllowedTypes,
31
+ normalizeAllowedTypes,
32
+ unannotateImplicitAllowedTypes,
33
+ type ImplicitAllowedTypes,
34
+ type ImplicitAnnotatedAllowedTypes,
35
+ type InsertableTreeNodeFromImplicitAllowedTypes,
36
+ type NodeSchemaMetadata,
37
+ type TreeNodeFromImplicitAllowedTypes,
38
+ type UnannotateImplicitAllowedTypes,
39
+ TreeNodeValid,
40
+ type MostDerivedData,
41
+ type TreeNodeSchemaInitializedData,
42
+ type TreeNodeSchemaCorePrivate,
43
+ privateDataSymbol,
44
+ createTreeNodeSchemaPrivateData,
45
+ type FlexContent,
46
+ type TreeNodeSchemaPrivateData,
41
47
  } from "../../core/index.js";
42
48
  import {
43
49
  unhydratedFlexTreeFromInsertable,
@@ -48,12 +54,17 @@ import { prepareForInsertion } from "../../prepareForInsertion.js";
48
54
  import {
49
55
  brand,
50
56
  count,
57
+ isReadonlyArray,
51
58
  type JsonCompatibleReadOnlyObject,
52
59
  type RestrictiveStringRecord,
53
60
  } from "../../../util/index.js";
54
- import { TreeNodeValid, type MostDerivedData } from "../../treeNodeValid.js";
55
- import { getUnhydratedContext } from "../../createContext.js";
56
- import type { MapNodeCustomizableSchema, MapNodePojoEmulationSchema } from "./mapNodeTypes.js";
61
+ import { getTreeNodeSchemaInitializedData } from "../../createContext.js";
62
+ import type {
63
+ MapNodeCustomizableSchema,
64
+ MapNodePojoEmulationSchema,
65
+ MapNodeSchema,
66
+ } from "./mapNodeTypes.js";
67
+ import { recordLikeDataToFlexContent } from "../common.js";
57
68
 
58
69
  /**
59
70
  * A map of string keys to tree objects.
@@ -254,12 +265,11 @@ export function mapSchema<
254
265
  const lazyChildTypes = new Lazy(() =>
255
266
  normalizeAllowedTypes(unannotateImplicitAllowedTypes(info)),
256
267
  );
257
- const lazyAnnotatedTypes = new Lazy(() => [normalizeAnnotatedAllowedTypes(info)]);
258
268
  const lazyAllowedTypesIdentifiers = new Lazy(
259
269
  () => new Set([...lazyChildTypes.value].map((type) => type.identifier)),
260
270
  );
261
271
 
262
- let unhydratedContext: Context;
272
+ let privateData: TreeNodeSchemaPrivateData | undefined;
263
273
 
264
274
  class Schema
265
275
  extends CustomMapNodeBase<UnannotateImplicitAllowedTypes<T>>
@@ -290,10 +300,12 @@ export function mapSchema<
290
300
 
291
301
  protected static override constructorCached: MostDerivedData | undefined = undefined;
292
302
 
293
- protected static override oneTimeSetup<T2>(this: typeof TreeNodeValid<T2>): Context {
294
- const schema = this as unknown as TreeNodeSchema;
295
- unhydratedContext = getUnhydratedContext(schema);
296
- return unhydratedContext;
303
+ protected static override oneTimeSetup(): TreeNodeSchemaInitializedData {
304
+ const schema = this as MapNodeSchema;
305
+ return getTreeNodeSchemaInitializedData(this, {
306
+ shallowCompatibilityTest,
307
+ toFlexContent: (data: FactoryContent): FlexContent => mapToFlexContent(data, schema),
308
+ });
297
309
  }
298
310
 
299
311
  public static readonly identifier = identifier;
@@ -303,9 +315,6 @@ export function mapSchema<
303
315
  public static get childTypes(): ReadonlySet<TreeNodeSchema> {
304
316
  return lazyChildTypes.value;
305
317
  }
306
- public static get childAnnotatedAllowedTypes(): readonly NormalizedAnnotatedAllowedTypes[] {
307
- return lazyAnnotatedTypes.value;
308
- }
309
318
  public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
310
319
  public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
311
320
  persistedMetadata;
@@ -317,6 +326,10 @@ export function mapSchema<
317
326
  public get [typeSchemaSymbol](): typeof schemaErased {
318
327
  return Schema.constructorCached?.constructor as unknown as typeof schemaErased;
319
328
  }
329
+
330
+ public static get [privateDataSymbol](): TreeNodeSchemaPrivateData {
331
+ return (privateData ??= createTreeNodeSchemaPrivateData(this, [info]));
332
+ }
320
333
  }
321
334
  const schemaErased: MapNodeCustomizableSchema<
322
335
  TName,
@@ -324,7 +337,8 @@ export function mapSchema<
324
337
  ImplicitlyConstructable,
325
338
  TCustomMetadata
326
339
  > &
327
- MapNodePojoEmulationSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> = Schema;
340
+ MapNodePojoEmulationSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> &
341
+ TreeNodeSchemaCorePrivate = Schema;
328
342
  return schemaErased;
329
343
  }
330
344
 
@@ -335,3 +349,47 @@ export function mapSchema<
335
349
  export type MapNodeInsertableData<T extends ImplicitAllowedTypes> =
336
350
  | Iterable<readonly [string, InsertableTreeNodeFromImplicitAllowedTypes<T>]>
337
351
  | RestrictiveStringRecord<InsertableTreeNodeFromImplicitAllowedTypes<T>>;
352
+
353
+ /**
354
+ * {@link TreeNodeSchemaInitializedData.shallowCompatibilityTest} for Map nodes.
355
+ */
356
+ function shallowCompatibilityTest(data: FactoryContent): CompatibilityLevel {
357
+ if (isTreeValue(data)) {
358
+ return CompatibilityLevel.None;
359
+ }
360
+
361
+ if (isReadonlyArray(data)) {
362
+ // Arrays are iterable, so type checking does allow constructing a MapNode from an array if the array's type is key values pairs for the map.
363
+ return CompatibilityLevel.Low;
364
+ }
365
+
366
+ if (Symbol.iterator in data) {
367
+ return CompatibilityLevel.Normal;
368
+ }
369
+
370
+ // When not unioned with an ObjectNode, allow objects to be used to create maps.
371
+ return CompatibilityLevel.Low;
372
+ }
373
+
374
+ /**
375
+ * {@link TreeNodeSchemaInitializedData.toFlexContent} for Map nodes.
376
+ *
377
+ * Transforms data under a Map schema.
378
+ * @param data - The tree data to be transformed. Must be an iterable or Record like object.
379
+ * @param schema - The schema to comply with.
380
+ */
381
+ function mapToFlexContent(data: FactoryContent, schema: MapNodeSchema): FlexContent {
382
+ if (!(typeof data === "object" && data !== null)) {
383
+ throw new UsageError(`Input data is incompatible with Map schema: ${data}`);
384
+ }
385
+
386
+ const fieldsIterator = (
387
+ Symbol.iterator in data
388
+ ? // Support iterables of key value pairs (including Map objects)
389
+ data
390
+ : // Support record objects for JSON style Map data
391
+ Object.entries(data)
392
+ ) as Iterable<readonly [string, InsertableContent]>;
393
+
394
+ return recordLikeDataToFlexContent(fieldsIterator, schema);
395
+ }
@@ -4,16 +4,14 @@
4
4
  */
5
5
 
6
6
  import type { MapNodeInsertableData, TreeMapNode } from "./mapNode.js";
7
+ import { NodeKind } from "../../core/index.js";
7
8
  import type {
9
+ TreeNodeSchemaClass,
10
+ TreeNodeSchema,
11
+ TreeNodeSchemaNonClass,
12
+ WithType,
8
13
  ImplicitAnnotatedAllowedTypes,
9
14
  UnannotateImplicitAllowedTypes,
10
- } from "../../schemaTypes.js";
11
- import {
12
- NodeKind,
13
- type TreeNodeSchemaClass,
14
- type TreeNodeSchema,
15
- type TreeNodeSchemaNonClass,
16
- type WithType,
17
15
  } from "../../core/index.js";
18
16
 
19
17
  import type { SimpleMapNodeSchema } from "../../simpleSchema.js";
@@ -12,9 +12,11 @@ export {
12
12
  objectSchema,
13
13
  setField,
14
14
  type TreeObjectNode,
15
+ type SimpleKeyMap,
15
16
  } from "./objectNode.js";
16
17
  export {
17
18
  isObjectNodeSchema,
18
19
  ObjectNodeSchema,
19
20
  type ObjectNodeSchemaPrivate,
21
+ type UnannotateSchemaRecord,
20
22
  } from "./objectNodeTypes.js";
@@ -5,10 +5,12 @@
5
5
 
6
6
  import { assert, Lazy, fail, debugAssert } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
+ import { isFluidHandle } from "@fluidframework/runtime-utils/internal";
8
9
 
9
10
  import type { FieldKey, SchemaPolicy } from "../../../core/index.js";
10
11
  import {
11
12
  FieldKinds,
13
+ isTreeValue,
12
14
  type FlexTreeField,
13
15
  type FlexTreeNode,
14
16
  type FlexTreeOptionalField,
@@ -19,8 +21,10 @@ import type {
19
21
  FlattenKeys,
20
22
  JsonCompatibleReadOnlyObject,
21
23
  } from "../../../util/index.js";
24
+ import { brand } from "../../../util/index.js";
22
25
 
23
26
  import {
27
+ CompatibilityLevel,
24
28
  type TreeNodeSchema,
25
29
  NodeKind,
26
30
  type WithType,
@@ -29,18 +33,34 @@ import {
29
33
  typeSchemaSymbol,
30
34
  type InternalTreeNode,
31
35
  type TreeNode,
32
- type Context,
33
36
  type UnhydratedFlexTreeNode,
34
37
  getOrCreateInnerNode,
35
- type NormalizedAnnotatedAllowedTypes,
38
+ type NodeSchemaMetadata,
39
+ type ImplicitAllowedTypes,
40
+ type ImplicitAnnotatedAllowedTypes,
41
+ unannotateImplicitAllowedTypes,
42
+ TreeNodeValid,
43
+ type MostDerivedData,
44
+ type TreeNodeSchemaInitializedData,
45
+ privateDataSymbol,
46
+ createTreeNodeSchemaPrivateData,
47
+ type FlexContent,
48
+ type UnhydratedFlexTreeField,
49
+ createField,
50
+ type TreeNodeSchemaCorePrivate,
51
+ type TreeNodeSchemaPrivateData,
36
52
  } from "../../core/index.js";
37
- import { getUnhydratedContext } from "../../createContext.js";
53
+ import {
54
+ getTreeNodeSchemaInitializedData,
55
+ getUnhydratedContext,
56
+ } from "../../createContext.js";
38
57
  import { tryGetTreeNodeForField } from "../../getTreeNodeForField.js";
39
58
  import {
40
59
  isObjectNodeSchema,
41
60
  type ObjectNodeSchema,
42
61
  type ObjectNodeSchemaInternalData,
43
62
  type ObjectNodeSchemaPrivate,
63
+ type UnannotateSchemaRecord,
44
64
  } from "./objectNodeTypes.js";
45
65
  import { prepareForInsertion } from "../../prepareForInsertion.js";
46
66
  import {
@@ -49,21 +69,25 @@ import {
49
69
  getExplicitStoredKey,
50
70
  type TreeFieldFromImplicitField,
51
71
  type InsertableTreeFieldFromImplicitField,
52
- type FieldSchema,
72
+ FieldSchema,
73
+ FieldSchemaAlpha,
53
74
  normalizeFieldSchema,
54
75
  FieldKind,
55
- type NodeSchemaMetadata,
56
- type FieldSchemaAlpha,
57
- ObjectFieldSchema,
58
76
  type ImplicitAnnotatedFieldSchema,
59
- type UnannotateSchemaRecord,
60
- } from "../../schemaTypes.js";
77
+ type FieldProps,
78
+ type ContextualFieldProvider,
79
+ extractFieldProvider,
80
+ isConstant,
81
+ } from "../../fieldSchema.js";
61
82
  import type { SimpleObjectFieldSchema } from "../../simpleSchema.js";
62
83
  import {
63
84
  unhydratedFlexTreeFromInsertable,
85
+ unhydratedFlexTreeFromInsertableNode,
86
+ type FactoryContent,
87
+ type FactoryContentObject,
64
88
  type InsertableContent,
65
89
  } from "../../unhydratedFlexTreeFromInsertable.js";
66
- import { TreeNodeValid, type MostDerivedData } from "../../treeNodeValid.js";
90
+ import { convertFieldKind } from "../../toStoredSchema.js";
67
91
 
68
92
  /**
69
93
  * Generates the properties for an ObjectNode from its field schema object.
@@ -170,7 +194,7 @@ export type InsertableObjectFromSchemaRecord<
170
194
  /**
171
195
  * Helper used to remove annotations from a schema record and produce insertable objects,
172
196
  *
173
- * @privateremarks
197
+ * @privateRemarks
174
198
  * This calls {@link InsertableObjectFromSchemaRecord} in order to produce the insertable objects.
175
199
  *
176
200
  * @system @alpha
@@ -345,6 +369,30 @@ export function setField(
345
369
  }
346
370
  }
347
371
 
372
+ /**
373
+ * {@link FieldSchemaAlpha} including {@link SimpleObjectFieldSchema}.
374
+ */
375
+ export class ObjectFieldSchema<
376
+ Kind extends FieldKind,
377
+ Types extends ImplicitAllowedTypes,
378
+ TCustomMetadata = unknown,
379
+ >
380
+ extends FieldSchemaAlpha<Kind, Types, TCustomMetadata>
381
+ implements SimpleObjectFieldSchema
382
+ {
383
+ public readonly storedKey: string;
384
+
385
+ public constructor(
386
+ kind: Kind,
387
+ allowedTypes: Types,
388
+ annotatedTypes: ImplicitAnnotatedAllowedTypes,
389
+ props: FieldProps<TCustomMetadata> & { readonly key: string },
390
+ ) {
391
+ super(kind, allowedTypes, annotatedTypes, props);
392
+ this.storedKey = props.key;
393
+ }
394
+ }
395
+
348
396
  abstract class CustomObjectNodeBase<
349
397
  const T extends RestrictiveStringRecord<ImplicitFieldSchema>,
350
398
  > extends TreeNodeValid<InsertableObjectFromSchemaRecord<T>> {
@@ -371,7 +419,8 @@ export function objectSchema<
371
419
  metadata?: NodeSchemaMetadata<TCustomMetadata>,
372
420
  persistedMetadata?: JsonCompatibleReadOnlyObject | undefined,
373
421
  ): ObjectNodeSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> &
374
- ObjectNodeSchemaInternalData {
422
+ ObjectNodeSchemaInternalData &
423
+ TreeNodeSchemaCorePrivate {
375
424
  // Field set can't be modified after this since derived data is stored in maps.
376
425
  Object.freeze(info);
377
426
 
@@ -392,16 +441,11 @@ export function objectSchema<
392
441
  const lazyChildTypes = new Lazy(
393
442
  () => new Set(Array.from(flexKeyMap.values(), (f) => [...f.schema.allowedTypeSet]).flat()),
394
443
  );
395
- const lazyAnnotatedTypes = new Lazy(() =>
396
- Array.from(
397
- flexKeyMap.values(),
398
- ({ schema }) => normalizeFieldSchema(schema).annotatedAllowedTypesNormalized,
399
- ),
400
- );
444
+
445
+ let privateData: TreeNodeSchemaPrivateData | undefined;
401
446
 
402
447
  let handler: ProxyHandler<object>;
403
448
  let customizable: boolean;
404
- let unhydratedContext: Context;
405
449
 
406
450
  class CustomObjectNode extends CustomObjectNodeBase<UnannotateSchemaRecord<T>> {
407
451
  public static readonly fields: ReadonlyMap<
@@ -474,12 +518,11 @@ export function objectSchema<
474
518
 
475
519
  protected static override constructorCached: MostDerivedData | undefined = undefined;
476
520
 
477
- protected static override oneTimeSetup<T2>(this: typeof TreeNodeValid<T2>): Context {
521
+ protected static override oneTimeSetup(): TreeNodeSchemaInitializedData {
478
522
  // One time initialization that required knowing the most derived type (from this.constructor) and thus has to be lazy.
479
523
  customizable = (this as unknown) !== CustomObjectNode;
480
524
  const schema = this as unknown as ObjectNodeSchemaPrivate;
481
525
  handler = createProxyHandler(schema, customizable);
482
- unhydratedContext = getUnhydratedContext(schema);
483
526
 
484
527
  // First run, do extra validation.
485
528
  // TODO: provide a way for TreeConfiguration to trigger this same validation to ensure it gets run early.
@@ -506,7 +549,14 @@ export function objectSchema<
506
549
  }
507
550
  }
508
551
 
509
- return unhydratedContext;
552
+ return getTreeNodeSchemaInitializedData(schema, {
553
+ shallowCompatibilityTest: (data: FactoryContent): CompatibilityLevel =>
554
+ shallowCompatibilityTest(data, schema),
555
+ toFlexContent: (
556
+ data: FactoryContent,
557
+ allowedTypes: ReadonlySet<TreeNodeSchema>,
558
+ ): FlexContent => objectToFlexContent(data, schema),
559
+ });
510
560
  }
511
561
 
512
562
  public static readonly identifier = identifier;
@@ -516,9 +566,6 @@ export function objectSchema<
516
566
  public static get childTypes(): ReadonlySet<TreeNodeSchema> {
517
567
  return lazyChildTypes.value;
518
568
  }
519
- public static get childAnnotatedAllowedTypes(): readonly NormalizedAnnotatedAllowedTypes[] {
520
- return lazyAnnotatedTypes.value;
521
- }
522
569
  public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
523
570
  public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
524
571
  persistedMetadata;
@@ -530,6 +577,16 @@ export function objectSchema<
530
577
  public get [typeSchemaSymbol](): Output {
531
578
  return CustomObjectNode.constructorCached?.constructor as unknown as Output;
532
579
  }
580
+
581
+ public static get [privateDataSymbol](): TreeNodeSchemaPrivateData {
582
+ return (privateData ??= createTreeNodeSchemaPrivateData(
583
+ this,
584
+ Array.from(
585
+ flexKeyMap.values(),
586
+ ({ schema }) => normalizeFieldSchema(schema).annotatedAllowedTypes,
587
+ ),
588
+ ));
589
+ }
533
590
  }
534
591
  type Output = typeof CustomObjectNode &
535
592
  (new (
@@ -538,6 +595,20 @@ export function objectSchema<
538
595
  return CustomObjectNode as Output;
539
596
  }
540
597
 
598
+ /**
599
+ * Removes annotations from a schema record.
600
+ */
601
+ export function unannotateSchemaRecord<
602
+ Schema extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>,
603
+ >(schemaRecord: Schema): UnannotateSchemaRecord<Schema> {
604
+ return Object.fromEntries(
605
+ Object.entries(schemaRecord).map(([key, schema]) => [
606
+ key,
607
+ schema instanceof FieldSchema ? schema : unannotateImplicitAllowedTypes(schema),
608
+ ]),
609
+ ) as UnannotateSchemaRecord<Schema>;
610
+ }
611
+
541
612
  const targetToProxy: WeakMap<object, TreeNode> = new WeakMap();
542
613
 
543
614
  /**
@@ -595,3 +666,112 @@ export function createUnknownOptionalFieldPolicy(
595
666
  );
596
667
  };
597
668
  }
669
+
670
+ /**
671
+ * {@link TreeNodeSchemaInitializedData.toFlexContent} for Map nodes.
672
+ *
673
+ * Transforms data under an Object schema.
674
+ * @param data - The tree data to be transformed. Must be a Record-like object.
675
+ * @param schema - The schema to comply with.
676
+ */
677
+ function objectToFlexContent(
678
+ data: FactoryContent,
679
+ schema: TreeNodeSchema & ObjectNodeSchemaInternalData,
680
+ ): FlexContent {
681
+ if (
682
+ typeof data !== "object" ||
683
+ data === null ||
684
+ Symbol.iterator in data ||
685
+ isFluidHandle(data)
686
+ ) {
687
+ throw new UsageError(`Input data is incompatible with Object schema: ${data}`);
688
+ }
689
+
690
+ const fields = new Map<FieldKey, UnhydratedFlexTreeField>();
691
+ const context = getUnhydratedContext(schema).flexContext;
692
+
693
+ for (const [key, fieldInfo] of schema.flexKeyMap) {
694
+ const value = getFieldProperty(data, key);
695
+
696
+ let children: UnhydratedFlexTreeNode[] | ContextualFieldProvider;
697
+ if (value === undefined) {
698
+ const defaultProvider =
699
+ fieldInfo.schema.props?.defaultProvider ??
700
+ fail(0xbb1 /* missing field has no default provider */);
701
+ const fieldProvider = extractFieldProvider(defaultProvider);
702
+ children = isConstant(fieldProvider) ? fieldProvider() : fieldProvider;
703
+ } else {
704
+ children = [
705
+ unhydratedFlexTreeFromInsertableNode(value, fieldInfo.schema.allowedTypeSet),
706
+ ];
707
+ }
708
+
709
+ const kind =
710
+ convertFieldKind.get(fieldInfo.schema.kind) ?? fail(0xbb2 /* Invalid field kind */);
711
+ fields.set(
712
+ fieldInfo.storedKey,
713
+ createField(context, kind.identifier, fieldInfo.storedKey, children),
714
+ );
715
+ }
716
+
717
+ return [{ type: brand(schema.identifier) }, fields];
718
+ }
719
+
720
+ /**
721
+ * {@link TreeNodeSchemaInitializedData.shallowCompatibilityTest} for Object nodes.
722
+ */
723
+ function shallowCompatibilityTest(
724
+ data: FactoryContent,
725
+ schema: ObjectNodeSchema & ObjectNodeSchemaInternalData,
726
+ ): CompatibilityLevel {
727
+ if (isTreeValue(data)) {
728
+ return CompatibilityLevel.None;
729
+ }
730
+
731
+ if (Symbol.iterator in data) {
732
+ return CompatibilityLevel.None;
733
+ }
734
+
735
+ // TODO: Improve type inference by making this logic more thorough. Handle at least:
736
+ // * Types which are strict subsets of other types in the same polymorphic union
737
+ // * Types which have the same keys but different types for those keys in the polymorphic union
738
+ // * Types which have the same required fields but different optional fields and enough of those optional fields are populated to disambiguate
739
+
740
+ // TODO#7441: Consider allowing data to be inserted which has keys that are extraneous/unknown to the schema (those keys are ignored)
741
+
742
+ // If the schema has a required key which is not present in the input object, reject it.
743
+ for (const [fieldKey, fieldSchema] of schema.fields) {
744
+ if (fieldSchema.requiresValue) {
745
+ if (getFieldProperty(data, fieldKey) === undefined) {
746
+ return CompatibilityLevel.None;
747
+ }
748
+ }
749
+ }
750
+
751
+ return CompatibilityLevel.Normal;
752
+ }
753
+
754
+ /**
755
+ * Check {@link FactoryContentObject} for a property which could be store a field.
756
+ *
757
+ * @returns If the property exists, return its value. Otherwise, returns undefined.
758
+ * @remarks
759
+ * The currently policy is to only consider own properties.
760
+ * See {@link InsertableObjectFromSchemaRecord} for where this policy is documented in the public API.
761
+ *
762
+ * Explicit undefined values are treated the same as missing properties to allow explicit use of undefined with defaulted identifiers.
763
+ *
764
+ * @privateRemarks
765
+ * If we ever want to have an optional field which defaults to something other than undefined, this will need changes.
766
+ * It would need to adjusting the handling of explicit undefined in contexts where undefined is allowed, and a default provider also exists.
767
+ */
768
+ function getFieldProperty(
769
+ data: FactoryContentObject,
770
+ key: string | symbol,
771
+ ): InsertableContent | undefined {
772
+ // This policy only allows own properties.
773
+ if (Object.hasOwnProperty.call(data, key)) {
774
+ return (data as Record<string, InsertableContent>)[key as string];
775
+ }
776
+ return undefined;
777
+ }
@@ -12,9 +12,14 @@ import type {
12
12
  import type {
13
13
  FieldSchemaAlpha,
14
14
  ImplicitAnnotatedFieldSchema,
15
- UnannotateSchemaRecord,
16
- } from "../../schemaTypes.js";
17
- import { NodeKind, type TreeNodeSchemaClass, type TreeNodeSchema } from "../../core/index.js";
15
+ UnannotateImplicitFieldSchema,
16
+ } from "../../fieldSchema.js";
17
+ import {
18
+ NodeKind,
19
+ type TreeNodeSchemaClass,
20
+ type TreeNodeSchema,
21
+ type TreeNodeSchemaCorePrivate,
22
+ } from "../../core/index.js";
18
23
  import type { FieldKey } from "../../../core/index.js";
19
24
  import type { SimpleObjectFieldSchema, SimpleObjectNodeSchema } from "../../simpleSchema.js";
20
25
 
@@ -46,10 +51,20 @@ export interface ObjectNodeSchema<
46
51
  readonly fields: ReadonlyMap<string, FieldSchemaAlpha & SimpleObjectFieldSchema>;
47
52
  }
48
53
 
54
+ /**
55
+ * Removes annotations from field schemas in a schema record.
56
+ * @system @alpha
57
+ */
58
+ export type UnannotateSchemaRecord<
59
+ T extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>,
60
+ > = {
61
+ readonly [P in Extract<keyof T, string>]: UnannotateImplicitFieldSchema<T[P]>;
62
+ };
63
+
49
64
  /**
50
65
  * Extra data provided on all {@link ObjectNodeSchema} that is not included in the (soon possibly public) ObjectNodeSchema type.
51
66
  */
52
- export interface ObjectNodeSchemaInternalData {
67
+ export interface ObjectNodeSchemaInternalData extends TreeNodeSchemaCorePrivate {
53
68
  /**
54
69
  * {@inheritdoc SimpleKeyMap}
55
70
  */
@@ -86,7 +101,9 @@ export const ObjectNodeSchema = {
86
101
  /**
87
102
  * {@link ObjectNodeSchema} with data that is not part of the package-exported API surface.
88
103
  */
89
- export type ObjectNodeSchemaPrivate = ObjectNodeSchema & ObjectNodeSchemaInternalData;
104
+ export type ObjectNodeSchemaPrivate = ObjectNodeSchema &
105
+ ObjectNodeSchemaInternalData &
106
+ TreeNodeSchemaCorePrivate;
90
107
 
91
108
  export function isObjectNodeSchema(schema: TreeNodeSchema): schema is ObjectNodeSchemaPrivate {
92
109
  return schema.kind === NodeKind.Object;