@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
@@ -27,7 +27,35 @@ export {
27
27
  getOrCreateNodeFromInnerNode,
28
28
  getOrCreateNodeFromInnerUnboxedNode,
29
29
  getKernel,
30
+ type NodeFromSchema,
31
+ isTreeNodeSchemaClass,
32
+ type TreeNodeFromImplicitAllowedTypes,
33
+ type InsertableTreeNodeFromImplicitAllowedTypes,
34
+ type TreeLeafValue,
35
+ type AllowedTypes,
36
+ type InsertableTreeNodeFromAllowedTypes,
37
+ type InsertableTypedNode,
38
+ type NodeBuilderData,
39
+ type Input,
40
+ normalizeAllowedTypes,
41
+ type NodeSchemaMetadata,
42
+ type ImplicitAllowedTypes,
43
+ type ImplicitAnnotatedAllowedTypes,
44
+ type UnannotateImplicitAllowedTypes,
45
+ type AllowedTypesMetadata,
46
+ evaluateLazySchema,
47
+ type UnannotateAllowedTypes,
48
+ type UnannotateAllowedType,
49
+ type UnannotateAllowedTypesList,
50
+ type UnannotateAllowedTypeOrLazyItem,
51
+ type AllowedTypeMetadata,
52
+ type AnnotatedAllowedTypes,
53
+ type LazyItem,
54
+ type FlexList,
55
+ type FlexListToUnion,
56
+ type ExtractItemType,
30
57
  } from "./core/index.js";
58
+ export type { UnsafeUnknownSchema, Insertable } from "./unsafeUnknownSchema.js";
31
59
  export {
32
60
  type ITree,
33
61
  type TreeView,
@@ -127,6 +155,8 @@ export {
127
155
  type FixRecursiveRecursionLimit,
128
156
  schemaStatics,
129
157
  type TreeChangeEvents,
158
+ type NodeSchemaOptions,
159
+ type NodeSchemaOptionsAlpha,
130
160
  } from "./api/index.js";
131
161
  export type {
132
162
  SimpleTreeSchema,
@@ -142,33 +172,14 @@ export type {
142
172
  SimpleRecordNodeSchema,
143
173
  } from "./simpleSchema.js";
144
174
  export {
145
- type NodeFromSchema,
146
- isTreeNodeSchemaClass,
147
175
  type ImplicitFieldSchema,
148
176
  type ImplicitAnnotatedFieldSchema,
149
177
  type TreeFieldFromImplicitField,
150
- type ImplicitAllowedTypes,
151
- type ImplicitAnnotatedAllowedTypes,
152
- type UnannotateImplicitAllowedTypes,
153
- type UnannotateAllowedTypes,
154
- type UnannotateAllowedType,
155
- type UnannotateAllowedTypesList,
156
- type UnannotateAllowedTypeOrLazyItem,
157
178
  type UnannotateImplicitFieldSchema,
158
- type UnannotateSchemaRecord,
159
- type TreeNodeFromImplicitAllowedTypes,
160
- type InsertableTreeNodeFromImplicitAllowedTypes,
161
- type TreeLeafValue,
162
- type AllowedTypes,
163
- type AllowedTypeMetadata,
164
- type AllowedTypesMetadata,
165
- type AnnotatedAllowedTypes,
166
179
  FieldKind,
167
180
  FieldSchema,
168
181
  type FieldSchemaAlpha,
169
182
  type InsertableTreeFieldFromImplicitField,
170
- type InsertableTypedNode,
171
- type NodeBuilderData,
172
183
  type DefaultProvider,
173
184
  type FieldProps,
174
185
  type FieldPropsAlpha,
@@ -178,19 +189,10 @@ export {
178
189
  type ApplyKind,
179
190
  type FieldSchemaMetadata,
180
191
  type InsertableField,
181
- type Insertable,
182
- type UnsafeUnknownSchema,
183
- normalizeAllowedTypes,
184
192
  type ApplyKindInput,
185
- type InsertableTreeNodeFromAllowedTypes,
186
- type Input,
187
193
  type ReadableField,
188
194
  type ReadSchema,
189
- type NodeSchemaOptions,
190
- type NodeSchemaOptionsAlpha,
191
- type NodeSchemaMetadata,
192
- evaluateLazySchema,
193
- } from "./schemaTypes.js";
195
+ } from "./fieldSchema.js";
194
196
  export { tryGetTreeNodeForField } from "./getTreeNodeForField.js";
195
197
  export {
196
198
  type ArrayNodeCustomizableSchema,
@@ -223,6 +225,7 @@ export {
223
225
  type RecordNodePojoEmulationSchema,
224
226
  RecordNodeSchema,
225
227
  type TreeRecordNode,
228
+ type UnannotateSchemaRecord,
226
229
  } from "./node-kinds/index.js";
227
230
  export {
228
231
  unhydratedFlexTreeFromInsertable,
@@ -234,7 +237,7 @@ export {
234
237
  prepareForInsertion,
235
238
  prepareForInsertionContextless,
236
239
  } from "./prepareForInsertion.js";
237
- export { toStoredSchema, getStoredSchema } from "./toStoredSchema.js";
240
+ export { toStoredSchema, getStoredSchema, convertFieldKind } from "./toStoredSchema.js";
238
241
  export {
239
242
  numberSchema,
240
243
  stringSchema,
@@ -243,4 +246,11 @@ export {
243
246
  nullSchema,
244
247
  } from "./leafNodeSchema.js";
245
248
  export type { LeafSchema } from "./leafNodeSchema.js";
246
- export type { LazyItem, FlexList, FlexListToUnion, ExtractItemType } from "./flexList.js";
249
+ export {
250
+ getAllowedContentDiscrepancies,
251
+ type FieldDiscrepancy,
252
+ comparePosetElements,
253
+ fieldRealizer,
254
+ type Realizer,
255
+ PosetComparisonResult,
256
+ } from "./discrepancies.js";
@@ -4,23 +4,34 @@
4
4
  */
5
5
 
6
6
  import { assert } from "@fluidframework/core-utils/internal";
7
+ import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
+ import { isFluidHandle } from "@fluidframework/runtime-utils/internal";
7
9
 
8
10
  import { type TreeValue, ValueSchema } from "../core/index.js";
9
11
  import {
10
12
  type FlexTreeNode,
11
13
  isFlexTreeNode,
14
+ isTreeValue,
12
15
  valueSchemaAllows,
13
16
  } from "../feature-libraries/index.js";
14
17
 
15
18
  import {
16
19
  NodeKind,
17
- type NormalizedAnnotatedAllowedTypes,
18
20
  type TreeNodeSchema,
19
21
  type TreeNodeSchemaNonClass,
22
+ type NodeSchemaMetadata,
23
+ type TreeLeafValue,
24
+ type TreeNodeSchemaCorePrivate,
25
+ type TreeNodeSchemaPrivateData,
26
+ privateDataSymbol,
27
+ type TreeNodeSchemaInitializedData,
28
+ CompatibilityLevel,
29
+ type FlexContent,
20
30
  } from "./core/index.js";
21
- import type { NodeSchemaMetadata, TreeLeafValue } from "./schemaTypes.js";
22
31
  import type { SimpleLeafNodeSchema } from "./simpleSchema.js";
23
- import type { JsonCompatibleReadOnlyObject } from "../util/index.js";
32
+ import { brand, type JsonCompatibleReadOnlyObject } from "../util/index.js";
33
+ import { getTreeNodeSchemaInitializedData } from "./createContext.js";
34
+ import type { FactoryContent } from "./unhydratedFlexTreeFromInsertable.js";
24
35
 
25
36
  /**
26
37
  * Instances of this class are schema for leaf nodes.
@@ -32,14 +43,29 @@ import type { JsonCompatibleReadOnlyObject } from "../util/index.js";
32
43
  * This class refers to the underlying flex tree schema in its constructor, so this class can't be included in the package API.
33
44
  */
34
45
  export class LeafNodeSchema<Name extends string, const T extends ValueSchema>
35
- implements TreeNodeSchemaNonClass<Name, NodeKind.Leaf, TreeValue<T>, TreeValue<T>>
46
+ implements
47
+ TreeNodeSchemaNonClass<Name, NodeKind.Leaf, TreeValue<T>, TreeValue<T>>,
48
+ SimpleLeafNodeSchema,
49
+ TreeNodeSchemaCorePrivate
36
50
  {
37
51
  public readonly identifier: Name;
38
52
  public readonly kind = NodeKind.Leaf;
39
53
  public readonly info: T;
40
54
  public readonly implicitlyConstructable = true as const;
41
55
  public readonly childTypes: ReadonlySet<TreeNodeSchema> = new Set();
42
- public readonly childAnnotatedAllowedTypes: readonly NormalizedAnnotatedAllowedTypes[] = [];
56
+ public readonly [privateDataSymbol]: TreeNodeSchemaPrivateData = {
57
+ idempotentInitialize: () =>
58
+ (this.#initializedData ??= getTreeNodeSchemaInitializedData(this, {
59
+ shallowCompatibilityTest: (data: FactoryContent): CompatibilityLevel =>
60
+ shallowCompatibilityTest(this, data),
61
+ toFlexContent: (
62
+ data: FactoryContent,
63
+ allowedTypes: ReadonlySet<TreeNodeSchema>,
64
+ ): FlexContent => leafToFlexContent(data, this, allowedTypes),
65
+ })),
66
+ childAnnotatedAllowedTypes: [],
67
+ };
68
+ #initializedData: TreeNodeSchemaInitializedData | undefined;
43
69
 
44
70
  public create(data: TreeValue<T> | FlexTreeNode): TreeValue<T> {
45
71
  if (isFlexTreeNode(data)) {
@@ -103,3 +129,109 @@ export const numberSchema = makeLeaf("number", ValueSchema.Number);
103
129
  export const booleanSchema = makeLeaf("boolean", ValueSchema.Boolean);
104
130
  export const nullSchema = makeLeaf("null", ValueSchema.Null);
105
131
  export const handleSchema = makeLeaf("handle", ValueSchema.FluidHandle);
132
+
133
+ /**
134
+ * Checks if data might be schema-compatible.
135
+ *
136
+ * @returns false if `data` is incompatible with `type` based on a cheap/shallow check.
137
+ *
138
+ * Note that this may return true for cases where data is incompatible, but it must not return false in cases where the data is compatible.
139
+ */
140
+ function shallowCompatibilityTest(
141
+ schema: TreeNodeSchema,
142
+ data: FactoryContent,
143
+ ): CompatibilityLevel {
144
+ if (isTreeValue(data)) {
145
+ return allowsValue(schema, data) ? CompatibilityLevel.Normal : CompatibilityLevel.None;
146
+ }
147
+
148
+ return CompatibilityLevel.None;
149
+ }
150
+
151
+ function allowsValue(schema: TreeNodeSchema, value: TreeValue): boolean {
152
+ if (schema.kind === NodeKind.Leaf) {
153
+ return valueSchemaAllows(schema.info as ValueSchema, value);
154
+ }
155
+ return false;
156
+ }
157
+
158
+ /**
159
+ * Transforms data under a Leaf schema.
160
+ * @param data - The tree data to be transformed. Must be a {@link TreeValue}.
161
+ * @param schema - The schema associated with the value.
162
+ * @param allowedTypes - The allowed types specified by the parent.
163
+ * Used to determine which fallback values may be appropriate.
164
+ */
165
+ export function leafToFlexContent(
166
+ data: FactoryContent,
167
+ schema: TreeNodeSchema,
168
+ allowedTypes: ReadonlySet<TreeNodeSchema>,
169
+ ): FlexContent {
170
+ assert(schema.kind === NodeKind.Leaf, 0x921 /* Expected a leaf schema. */);
171
+ if (!isTreeValue(data)) {
172
+ // This rule exists to protect against useless `toString` output like `[object Object]`.
173
+ // In this case, that's actually reasonable behavior, since object input is not compatible with Leaf schemas.
174
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
175
+ throw new UsageError(`Input data is incompatible with leaf schema: ${data}`);
176
+ }
177
+
178
+ const mappedValue = mapValueWithFallbacks(data, allowedTypes);
179
+ const mappedSchema = [...allowedTypes].find((type) => allowsValue(type, mappedValue));
180
+
181
+ assert(mappedSchema !== undefined, 0x84a /* Unsupported schema for provided primitive. */);
182
+
183
+ const result: FlexContent = [
184
+ {
185
+ value: mappedValue,
186
+ type: brand(mappedSchema.identifier),
187
+ },
188
+ new Map(),
189
+ ];
190
+
191
+ return result;
192
+ }
193
+
194
+ /**
195
+ * Checks an incoming {@link TreeLeafValue} to ensure it is compatible with its requirements.
196
+ * For unsupported values with a schema-compatible replacement, return the replacement value.
197
+ * For unsupported values without a schema-compatible replacement, throw.
198
+ * For supported values, return the input.
199
+ */
200
+ function mapValueWithFallbacks(
201
+ value: TreeLeafValue,
202
+ allowedTypes: ReadonlySet<TreeNodeSchema>,
203
+ ): TreeValue {
204
+ switch (typeof value) {
205
+ case "number": {
206
+ if (Object.is(value, -0)) {
207
+ // Our serialized data format does not support -0.
208
+ // Map such input to +0.
209
+ return 0;
210
+ } else if (!Number.isFinite(value)) {
211
+ // Our serialized data format does not support NaN nor +/-∞.
212
+ // If the schema supports `null`, fall back to that. Otherwise, throw.
213
+ // This is intended to match JSON's behavior for such values.
214
+ if (allowedTypes.has(nullSchema)) {
215
+ return null;
216
+ } else {
217
+ throw new UsageError(`Received unsupported numeric value: ${value}.`);
218
+ }
219
+ } else {
220
+ return value;
221
+ }
222
+ }
223
+ case "string":
224
+ // TODO:
225
+ // This should detect invalid strings. Something like @stdlib/regexp-utf16-unpaired-surrogate could be used to do this.
226
+ // See SchemaFactory.string for details.
227
+ case "boolean":
228
+ return value;
229
+ case "object": {
230
+ if (value === null || isFluidHandle(value)) {
231
+ return value;
232
+ }
233
+ }
234
+ default:
235
+ throw new UsageError(`Received unsupported leaf value: ${value}.`);
236
+ }
237
+ }
@@ -12,19 +12,9 @@ import type {
12
12
  FlexTreeNode,
13
13
  FlexTreeSequenceField,
14
14
  } from "../../../feature-libraries/index.js";
15
+ import { FieldKinds, isTreeValue } from "../../../feature-libraries/index.js";
15
16
  import {
16
- normalizeAllowedTypes,
17
- normalizeAnnotatedAllowedTypes,
18
- unannotateImplicitAllowedTypes,
19
- type ImplicitAllowedTypes,
20
- type ImplicitAnnotatedAllowedTypes,
21
- type InsertableTreeNodeFromImplicitAllowedTypes,
22
- type NodeSchemaMetadata,
23
- type TreeLeafValue,
24
- type TreeNodeFromImplicitAllowedTypes,
25
- type UnannotateImplicitAllowedTypes,
26
- } from "../../schemaTypes.js";
27
- import {
17
+ CompatibilityLevel,
28
18
  type WithType,
29
19
  // eslint-disable-next-line import/no-deprecated
30
20
  typeNameSymbol,
@@ -33,7 +23,6 @@ import {
33
23
  type InternalTreeNode,
34
24
  type TreeNodeSchema,
35
25
  typeSchemaSymbol,
36
- type Context,
37
26
  getOrCreateNodeFromInnerNode,
38
27
  getSimpleNodeSchemaFromInnerNode,
39
28
  getOrCreateInnerNode,
@@ -42,21 +31,43 @@ import {
42
31
  type UnhydratedFlexTreeNode,
43
32
  UnhydratedSequenceField,
44
33
  getOrCreateNodeFromInnerUnboxedNode,
45
- type NormalizedAnnotatedAllowedTypes,
34
+ normalizeAllowedTypes,
35
+ unannotateImplicitAllowedTypes,
36
+ type ImplicitAllowedTypes,
37
+ type ImplicitAnnotatedAllowedTypes,
38
+ type InsertableTreeNodeFromImplicitAllowedTypes,
39
+ type NodeSchemaMetadata,
40
+ type TreeLeafValue,
41
+ type TreeNodeFromImplicitAllowedTypes,
42
+ type UnannotateImplicitAllowedTypes,
43
+ TreeNodeValid,
44
+ type MostDerivedData,
45
+ type TreeNodeSchemaInitializedData,
46
+ type TreeNodeSchemaCorePrivate,
47
+ privateDataSymbol,
48
+ createTreeNodeSchemaPrivateData,
49
+ type FlexContent,
50
+ type TreeNodeSchemaPrivateData,
46
51
  } from "../../core/index.js";
47
52
  import {
53
+ type FactoryContent,
48
54
  type InsertableContent,
49
55
  unhydratedFlexTreeFromInsertable,
56
+ unhydratedFlexTreeFromInsertableNode,
50
57
  } from "../../unhydratedFlexTreeFromInsertable.js";
51
58
  import { prepareArrayContentForInsertion } from "../../prepareForInsertion.js";
52
- import { TreeNodeValid, type MostDerivedData } from "../../treeNodeValid.js";
53
- import { getUnhydratedContext } from "../../createContext.js";
59
+ import {
60
+ getTreeNodeSchemaInitializedData,
61
+ getUnhydratedContext,
62
+ } from "../../createContext.js";
54
63
  import type { System_Unsafe } from "../../api/index.js";
55
64
  import type {
56
65
  ArrayNodeCustomizableSchema,
57
66
  ArrayNodePojoEmulationSchema,
67
+ ArrayNodeSchema,
58
68
  } from "./arrayNodeTypes.js";
59
- import type { JsonCompatibleReadOnlyObject } from "../../../util/index.js";
69
+ import { brand, type JsonCompatibleReadOnlyObject } from "../../../util/index.js";
70
+ import { nullSchema } from "../../leafNodeSchema.js";
60
71
 
61
72
  /**
62
73
  * A covariant base type for {@link (TreeArrayNode:interface)}.
@@ -720,7 +731,7 @@ function createArrayNodeProxy(
720
731
  ): TreeArrayNode {
721
732
  // To satisfy 'deepEquals' level scrutiny, the target of the proxy must be an array literal in order
722
733
  // to pass 'Object.getPrototypeOf'. It also satisfies 'Array.isArray' and 'Object.prototype.toString'
723
- // requirements without use of Array[Symbol.species], which is potentially on a path ot deprecation.
734
+ // requirements without use of Array[Symbol.species], which is potentially on a path to deprecation.
724
735
  const proxy: TreeArrayNode = new Proxy<TreeArrayNode>(proxyTarget as TreeArrayNode, {
725
736
  get: (target, key, receiver) => {
726
737
  const field = getSequenceField(receiver);
@@ -731,6 +742,12 @@ function createArrayNodeProxy(
731
742
  return field.length;
732
743
  }
733
744
 
745
+ // In NodeJS 22, assert.strict.deepEqual started special casing well known constructors like Array.
746
+ // That made this necessary, ensuring that in POJO mode, TreeArrayNode are still deepEqual to arrays.
747
+ if (key === "constructor") {
748
+ return proxyTarget.constructor;
749
+ }
750
+
734
751
  // Pass the proxy as the receiver here, so that any methods on
735
752
  // the prototype receive `proxy` as `this`.
736
753
  return Reflect.get(dispatchTarget, key, receiver) as unknown;
@@ -1107,17 +1124,17 @@ export function arraySchema<
1107
1124
  ImplicitlyConstructable,
1108
1125
  TCustomMetadata
1109
1126
  > &
1110
- ArrayNodePojoEmulationSchema<TName, T, ImplicitlyConstructable, TCustomMetadata>;
1127
+ ArrayNodePojoEmulationSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> &
1128
+ TreeNodeSchemaCorePrivate;
1111
1129
 
1112
1130
  const unannotatedTypes = unannotateImplicitAllowedTypes(info);
1113
1131
 
1114
1132
  const lazyChildTypes = new Lazy(() => normalizeAllowedTypes(unannotatedTypes));
1115
- const lazyAnnotatedTypes = new Lazy(() => [normalizeAnnotatedAllowedTypes(info)]);
1116
1133
  const lazyAllowedTypesIdentifiers = new Lazy(
1117
1134
  () => new Set([...lazyChildTypes.value].map((type) => type.identifier)),
1118
1135
  );
1119
1136
 
1120
- let unhydratedContext: Context;
1137
+ let privateData: TreeNodeSchemaPrivateData | undefined;
1121
1138
 
1122
1139
  // This class returns a proxy from its constructor to handle numeric indexing.
1123
1140
  // Alternatively it could extend a normal class which gets tons of numeric properties added.
@@ -1156,10 +1173,7 @@ export function arraySchema<
1156
1173
 
1157
1174
  protected static override constructorCached: MostDerivedData | undefined = undefined;
1158
1175
 
1159
- protected static override oneTimeSetup<T2>(this: typeof TreeNodeValid<T2>): Context {
1160
- const schema = this as unknown as TreeNodeSchema;
1161
- unhydratedContext = getUnhydratedContext(schema);
1162
-
1176
+ protected static override oneTimeSetup(): TreeNodeSchemaInitializedData {
1163
1177
  // First run, do extra validation.
1164
1178
  // TODO: provide a way for TreeConfiguration to trigger this same validation to ensure it gets run early.
1165
1179
  // Scan for shadowing inherited members which won't work, but stop scan early to allow shadowing built in (which seems to work ok).
@@ -1184,8 +1198,16 @@ export function arraySchema<
1184
1198
  prototype = Reflect.getPrototypeOf(prototype) as object;
1185
1199
  }
1186
1200
  }
1187
-
1188
- return unhydratedContext;
1201
+ const schema = this as ArrayNodeSchema;
1202
+
1203
+ return getTreeNodeSchemaInitializedData(this, {
1204
+ shallowCompatibilityTest: (data: FactoryContent): CompatibilityLevel =>
1205
+ shallowCompatibilityTest(data, schema),
1206
+ toFlexContent: (
1207
+ data: FactoryContent,
1208
+ allowedTypes: ReadonlySet<TreeNodeSchema>,
1209
+ ): FlexContent => arrayToFlexContent(data, schema),
1210
+ });
1189
1211
  }
1190
1212
 
1191
1213
  public static readonly identifier = identifier;
@@ -1195,9 +1217,6 @@ export function arraySchema<
1195
1217
  public static get childTypes(): ReadonlySet<TreeNodeSchema> {
1196
1218
  return lazyChildTypes.value;
1197
1219
  }
1198
- public static get childAnnotatedAllowedTypes(): readonly NormalizedAnnotatedAllowedTypes[] {
1199
- return lazyAnnotatedTypes.value;
1200
- }
1201
1220
  public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
1202
1221
  public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
1203
1222
  persistedMetadata;
@@ -1216,6 +1235,10 @@ export function arraySchema<
1216
1235
  protected get allowedTypes(): ReadonlySet<TreeNodeSchema> {
1217
1236
  return lazyChildTypes.value;
1218
1237
  }
1238
+
1239
+ public static get [privateDataSymbol](): TreeNodeSchemaPrivateData {
1240
+ return (privateData ??= createTreeNodeSchemaPrivateData(this, [info]));
1241
+ }
1219
1242
  }
1220
1243
 
1221
1244
  const output: Output = Schema;
@@ -1271,3 +1294,91 @@ function validateIndexRange(
1271
1294
  );
1272
1295
  }
1273
1296
  }
1297
+
1298
+ /**
1299
+ * Transforms data for a child of an array.
1300
+ * @param child - The tree data to be transformed.
1301
+ * @param allowedTypes - The set of types allowed by the parent context. Used to validate the input tree.
1302
+ */
1303
+ function arrayChildToFlexTree(
1304
+ child: InsertableContent,
1305
+ allowedTypes: ReadonlySet<TreeNodeSchema>,
1306
+ ): UnhydratedFlexTreeNode {
1307
+ // We do not support undefined sequence entries.
1308
+ // If we encounter an undefined entry, use null instead if supported by the schema, otherwise throw.
1309
+ let childWithFallback = child;
1310
+ if (child === undefined) {
1311
+ if (allowedTypes.has(nullSchema)) {
1312
+ childWithFallback = null;
1313
+ } else {
1314
+ throw new TypeError(`Received unsupported array entry value: ${child}.`);
1315
+ }
1316
+ }
1317
+ return unhydratedFlexTreeFromInsertableNode(childWithFallback, allowedTypes);
1318
+ }
1319
+
1320
+ /**
1321
+ * {@link TreeNodeSchemaInitializedData.toFlexContent} for Array nodes.
1322
+ *
1323
+ * @param data - The tree data to be transformed. Must be an iterable.
1324
+ * @param schema - The schema to comply with.
1325
+ */
1326
+ function arrayToFlexContent(data: FactoryContent, schema: ArrayNodeSchema): FlexContent {
1327
+ if (!(typeof data === "object" && data !== null && Symbol.iterator in data)) {
1328
+ throw new UsageError(`Input data is incompatible with Array schema: ${data}`);
1329
+ }
1330
+
1331
+ const allowedChildTypes = normalizeAllowedTypes(schema.info as ImplicitAllowedTypes);
1332
+
1333
+ const mappedData = Array.from(data, (child) =>
1334
+ arrayChildToFlexTree(child, allowedChildTypes),
1335
+ );
1336
+
1337
+ const context = getUnhydratedContext(schema).flexContext;
1338
+
1339
+ // Array nodes have a single `EmptyKey` field:
1340
+ const fieldsEntries =
1341
+ mappedData.length === 0
1342
+ ? []
1343
+ : ([
1344
+ [
1345
+ EmptyKey,
1346
+ new UnhydratedSequenceField(
1347
+ context,
1348
+ FieldKinds.sequence.identifier,
1349
+ EmptyKey,
1350
+ mappedData,
1351
+ ),
1352
+ ],
1353
+ ] as const);
1354
+
1355
+ return [
1356
+ {
1357
+ type: brand(schema.identifier),
1358
+ },
1359
+ new Map(fieldsEntries),
1360
+ ];
1361
+ }
1362
+
1363
+ /**
1364
+ * {@link TreeNodeSchemaInitializedData.shallowCompatibilityTest} for Array nodes.
1365
+ */
1366
+ function shallowCompatibilityTest(
1367
+ data: FactoryContent,
1368
+ schema: ArrayNodeSchema,
1369
+ ): CompatibilityLevel {
1370
+ if (isTreeValue(data)) {
1371
+ return CompatibilityLevel.None;
1372
+ }
1373
+
1374
+ if (data instanceof Map) {
1375
+ // Maps are iterable, so type checking does allow constructing an ArrayNode from a map if the ArrayNode's type is an array that includes the key and value types of the map.
1376
+ return CompatibilityLevel.Low;
1377
+ }
1378
+
1379
+ if (Symbol.iterator in data) {
1380
+ return CompatibilityLevel.Normal;
1381
+ }
1382
+
1383
+ return CompatibilityLevel.None;
1384
+ }
@@ -4,17 +4,15 @@
4
4
  */
5
5
 
6
6
  import type { TreeArrayNode } from "./arrayNode.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
  InsertableTreeNodeFromImplicitAllowedTypes,
10
15
  UnannotateImplicitAllowedTypes,
11
- } from "../../schemaTypes.js";
12
- import {
13
- NodeKind,
14
- type TreeNodeSchemaClass,
15
- type TreeNodeSchema,
16
- type TreeNodeSchemaNonClass,
17
- type WithType,
18
16
  } from "../../core/index.js";
19
17
 
20
18
  import type { SimpleArrayNodeSchema } from "../../simpleSchema.js";
@@ -0,0 +1,60 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { assert } from "@fluidframework/core-utils/internal";
7
+
8
+ import type { FieldKey } from "../../core/index.js";
9
+ import { FieldKinds } from "../../feature-libraries/index.js";
10
+ import { brand } from "../../util/index.js";
11
+
12
+ import {
13
+ createField,
14
+ type UnhydratedFlexTreeField,
15
+ unannotateImplicitAllowedTypes,
16
+ normalizeAllowedTypes,
17
+ type FlexContent,
18
+ } from "../core/index.js";
19
+ import { getUnhydratedContext } from "../createContext.js";
20
+ import {
21
+ unhydratedFlexTreeFromInsertableNode,
22
+ type InsertableContent,
23
+ } from "../unhydratedFlexTreeFromInsertable.js";
24
+ import type { MapNodeSchema } from "./map/index.js";
25
+ import type { RecordNodeSchema } from "./record/index.js";
26
+
27
+ /**
28
+ * Utilities shared by multiple node kinds.
29
+ */
30
+
31
+ /**
32
+ * Converts record-like data to a FlexContent representation for map/record schema.
33
+ */
34
+ export function recordLikeDataToFlexContent(
35
+ fieldsIterator: Iterable<readonly [string, InsertableContent]>,
36
+ schema: MapNodeSchema | RecordNodeSchema,
37
+ ): FlexContent {
38
+ const allowedChildTypes = normalizeAllowedTypes(unannotateImplicitAllowedTypes(schema.info));
39
+ const context = getUnhydratedContext(schema).flexContext;
40
+
41
+ const transformedFields = new Map<FieldKey, UnhydratedFlexTreeField>();
42
+ for (const item of fieldsIterator) {
43
+ const [key, value] = item;
44
+ assert(!transformedFields.has(brand(key)), 0x84c /* Keys should not be duplicated */);
45
+
46
+ // Omit undefined values - an entry with an undefined value is equivalent to one that has been removed or omitted
47
+ if (value !== undefined) {
48
+ const child = unhydratedFlexTreeFromInsertableNode(value, allowedChildTypes);
49
+ const field = createField(context, FieldKinds.optional.identifier, brand(key), [child]);
50
+ transformedFields.set(brand(key), field);
51
+ }
52
+ }
53
+
54
+ return [
55
+ {
56
+ type: brand(schema.identifier),
57
+ },
58
+ transformedFields,
59
+ ];
60
+ }
@@ -37,6 +37,8 @@ export {
37
37
  objectSchema,
38
38
  setField,
39
39
  type TreeObjectNode,
40
+ type SimpleKeyMap,
41
+ type UnannotateSchemaRecord,
40
42
  } from "./object/index.js";
41
43
 
42
44
  export {