@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
@@ -8,4 +8,4 @@ This specifically does not contain any logic specific to field kinds or node kin
8
8
  ## Status
9
9
 
10
10
  More content should be moved into this directory as its disentangled from node kind specific logic.
11
- `proxyBinding.ts` is a good candidate to work toward moving here to.
11
+
@@ -0,0 +1,496 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { UsageError } from "@fluidframework/telemetry-utils/internal";
7
+
8
+ import { getOrCreate, isReadonlyArray, type IsUnion } from "../../util/index.js";
9
+ import { isLazy, type FlexListToUnion, type LazyItem } from "./flexList.js";
10
+ import {
11
+ NodeKind,
12
+ type InsertableTypedNode,
13
+ type NodeFromSchema,
14
+ type TreeNodeSchema,
15
+ } from "./treeNodeSchema.js";
16
+ import { schemaAsTreeNodeValid } from "./treeNodeValid.js";
17
+
18
+ /**
19
+ * Schema for types allowed in some location in a tree (like a field, map entry or array).
20
+ * @remarks
21
+ * Type constraint used in schema declaration APIs.
22
+ *
23
+ * The order of types in the array is not significant.
24
+ * Additionally, it is legal for users of this type to have the runtime and compile time order of items within this array not match.
25
+ * Therefor to ensure type safety, these arrays should not be indexed, and instead just be iterated.
26
+ *
27
+ * Ideally this restriction would be modeled in the type itself, but it is not ergonomic to do so as there is no easy (when compared to arrays)
28
+ * way to declare and manipulate unordered sets of types in TypeScript.
29
+ *
30
+ * Duplicate entries in this array are not allowed and will produce runtime errors.
31
+ * Duplicate types are allowed,
32
+ * but this must only be reflected in the type and not the runtime values.
33
+ * This duplication can be used to encode the typing when the number of items in the array is not known at compile time
34
+ * but some of the items are known to be present unconditionally.
35
+ * For example, typing `[typeof A] | [typeof A, typeof B]` as `[typeof A, typeof B | typeof A]` is allowed,
36
+ * and can produce more useful {@link Input} types.
37
+ * @privateRemarks
38
+ * Code reading data from this should use `normalizeAllowedTypes` to ensure consistent handling, caching, nice errors etc.
39
+ * @system @public
40
+ */
41
+ export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
42
+
43
+ /**
44
+ * Stores annotations for an individual allowed type.
45
+ * @alpha
46
+ */
47
+ export interface AnnotatedAllowedType<T = LazyItem<TreeNodeSchema>> {
48
+ /**
49
+ * Annotations for the allowed type.
50
+ */
51
+ readonly metadata: AllowedTypeMetadata;
52
+ /**
53
+ * The allowed type the annotations apply to in a particular schema.
54
+ */
55
+ readonly type: T;
56
+ }
57
+
58
+ /**
59
+ * Stores annotations for a set of evaluated annotated allowed types.
60
+ * @alpha
61
+ */
62
+ export interface NormalizedAnnotatedAllowedTypes {
63
+ /**
64
+ * Annotations that apply to a set of allowed types.
65
+ */
66
+ readonly metadata: AllowedTypesMetadata;
67
+ /**
68
+ * All the evaluated allowed types that the annotations apply to. The types themselves are also individually annotated.
69
+ */
70
+ readonly types: readonly AnnotatedAllowedType<TreeNodeSchema>[];
71
+ }
72
+
73
+ /**
74
+ * Checks if the input is an {@link AnnotatedAllowedTypes}.
75
+ */
76
+ export function isAnnotatedAllowedTypes(
77
+ allowedTypes: ImplicitAnnotatedAllowedTypes,
78
+ ): allowedTypes is AnnotatedAllowedTypes {
79
+ return (
80
+ // Class based schema, and lazy schema references report type "function": filtering them out with typeof makes narrowing based on members mostly safe
81
+ typeof allowedTypes === "object" && "metadata" in allowedTypes && "types" in allowedTypes
82
+ );
83
+ }
84
+
85
+ /**
86
+ * Stores annotations for a set of allowed types.
87
+ * @alpha
88
+ */
89
+ export interface AnnotatedAllowedTypes {
90
+ /**
91
+ * Annotations that apply to a set of allowed types.
92
+ */
93
+ readonly metadata: AllowedTypesMetadata;
94
+ /**
95
+ * All the allowed types that the annotations apply to. The types themselves may also have individual annotations.
96
+ */
97
+ readonly types: readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[];
98
+ }
99
+
100
+ /**
101
+ * Annotations that apply to a set of allowed types.
102
+ * @remarks
103
+ * Additional optionals may be added to this as non-breaking changes, so implementations of it should be simple object literals with no unlisted members.
104
+ * @alpha
105
+ */
106
+ export interface AllowedTypesMetadata {
107
+ /**
108
+ * User defined metadata
109
+ */
110
+ readonly custom?: unknown;
111
+ }
112
+
113
+ /**
114
+ * Checks if the given allowed type is annotated with {@link AllowedTypeMetadata}.
115
+ */
116
+ export function isAnnotatedAllowedType(
117
+ allowedType: AnnotatedAllowedType | LazyItem<TreeNodeSchema>,
118
+ ): allowedType is AnnotatedAllowedType {
119
+ return "metadata" in allowedType && "type" in allowedType;
120
+ }
121
+
122
+ /**
123
+ * Annotations that apply to an individual allowed type.
124
+ * @remarks
125
+ * Additional optionals may be added to this as non-breaking changes, so implementations of it should be simple object literals with no unlisted members.
126
+ * @alpha
127
+ */
128
+ export interface AllowedTypeMetadata {
129
+ /**
130
+ * User defined metadata
131
+ */
132
+ readonly custom?: unknown;
133
+
134
+ // TODO metadata for enablable types will be added here
135
+ }
136
+
137
+ /**
138
+ * Types of {@link TreeNode|TreeNodes} or {@link TreeLeafValue|TreeLeafValues} allowed at a location in a tree.
139
+ * @remarks
140
+ * Used by {@link TreeViewConfiguration} for the root and various kinds of {@link TreeNodeSchema} to specify their allowed child types.
141
+ *
142
+ * Use {@link SchemaFactory} to access leaf schema or declare new composite schema.
143
+ *
144
+ * Implicitly treats a single type as an array of one type.
145
+ *
146
+ * Arrays of schema can be used to specify multiple types are allowed, which result in unions of those types in the Tree APIs.
147
+ *
148
+ * When saved into variables, avoid type-erasing the details, as doing so loses the compile time schema awareness of APIs derived from the types.
149
+ *
150
+ * When referring to types that are declared after the definition of the `ImplicitAllowedTypes`, the schema can be wrapped in a lambda to allow the forward reference.
151
+ * See {@link ValidateRecursiveSchema} for details on how to structure the `ImplicitAllowedTypes` instances when constructing recursive schema.
152
+ *
153
+ * @example Explicit use with strong typing
154
+ * ```typescript
155
+ * const sf = new SchemaFactory("myScope");
156
+ * const childTypes = [sf.number, sf.string] as const satisfies ImplicitAllowedTypes;
157
+ * const config = new TreeViewConfiguration({ schema: childTypes });
158
+ * ```
159
+ *
160
+ * @example Forward reference
161
+ * ```typescript
162
+ * const sf = new SchemaFactory("myScope");
163
+ * class A extends sf.array("example", [() => B]) {}
164
+ * class B extends sf.array("Inner", sf.number) {}
165
+ * ```
166
+ * @privateRemarks
167
+ * Code reading data from this should use `normalizeAllowedTypes` to ensure consistent handling, caching, nice errors etc.
168
+ * @public
169
+ */
170
+ export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
171
+
172
+ /**
173
+ * Types of {@link TreeNode|TreeNodes} or {@link TreeLeafValue|TreeLeafValues} allowed at a location in a tree with
174
+ * additional metadata associated with the location they're allowed at.
175
+ * @alpha
176
+ */
177
+ export type ImplicitAnnotatedAllowedTypes =
178
+ | TreeNodeSchema
179
+ | AnnotatedAllowedType
180
+ | AnnotatedAllowedTypes
181
+ | readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[];
182
+
183
+ /**
184
+ * Returns an {@link ImplicitAllowedTypes} that is equivalent to the input without annotations.
185
+ * @system @alpha
186
+ */
187
+ export type UnannotateImplicitAllowedTypes<T extends ImplicitAnnotatedAllowedTypes> =
188
+ T extends AnnotatedAllowedTypes
189
+ ? UnannotateAllowedTypes<T>
190
+ : T extends AnnotatedAllowedType
191
+ ? UnannotateAllowedType<T>
192
+ : T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]
193
+ ? UnannotateAllowedTypesList<T>
194
+ : T extends TreeNodeSchema
195
+ ? T
196
+ : never;
197
+
198
+ /**
199
+ * Removes annotations from a list of allowed types that may contain annotations.
200
+ * @system @alpha
201
+ */
202
+ export type UnannotateAllowedTypesList<
203
+ T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[],
204
+ > = {
205
+ [I in keyof T]: UnannotateAllowedTypeOrLazyItem<T[I]>;
206
+ };
207
+
208
+ /**
209
+ * Removes annotations from an allowed type that may contain annotations.
210
+ * @system @alpha
211
+ */
212
+ export type UnannotateAllowedTypeOrLazyItem<
213
+ T extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>,
214
+ > = T extends AnnotatedAllowedType<infer X> ? X : T;
215
+
216
+ /**
217
+ * Removes all annotations from a set of allowed types.
218
+ * @system @alpha
219
+ */
220
+ export type UnannotateAllowedTypes<T extends AnnotatedAllowedTypes> =
221
+ UnannotateAllowedTypesList<T["types"]>;
222
+
223
+ /**
224
+ * Removes annotations from an allowed type.
225
+ * @system @alpha
226
+ */
227
+ export type UnannotateAllowedType<T extends AnnotatedAllowedType> =
228
+ T extends AnnotatedAllowedType<infer X> ? [X] : T;
229
+
230
+ /**
231
+ * Normalizes a {@link ImplicitAllowedTypes} to a set of {@link TreeNodeSchema}s, by eagerly evaluating any
232
+ * lazy schema declarations.
233
+ *
234
+ * @remarks Note: this must only be called after all required schemas have been declared, otherwise evaluation of
235
+ * recursive schemas may fail.
236
+ *
237
+ * @internal
238
+ */
239
+ export function normalizeAllowedTypes(
240
+ types: ImplicitAllowedTypes,
241
+ ): ReadonlySet<TreeNodeSchema> {
242
+ const normalized = new Set<TreeNodeSchema>();
243
+ if (isReadonlyArray(types)) {
244
+ // Types array must not be modified after it is normalized since that would result in the user of the normalized data having wrong (out of date) content.
245
+ Object.freeze(types);
246
+ for (const lazyType of types) {
247
+ normalized.add(evaluateLazySchema(lazyType));
248
+ }
249
+ } else {
250
+ normalized.add(evaluateLazySchema(types));
251
+ }
252
+ return normalized;
253
+ }
254
+
255
+ /**
256
+ * Normalizes an allowed type to an {@link AnnotatedAllowedType}, by adding empty annotations if they don't already exist.
257
+ */
258
+ export function normalizeToAnnotatedAllowedType<T extends TreeNodeSchema>(
259
+ type: T | AnnotatedAllowedType<T> | AnnotatedAllowedType<LazyItem<T>>,
260
+ ): AnnotatedAllowedType<T> | AnnotatedAllowedType<LazyItem<T>> {
261
+ return isAnnotatedAllowedType(type)
262
+ ? type
263
+ : {
264
+ metadata: {},
265
+ type,
266
+ };
267
+ }
268
+
269
+ /**
270
+ * Normalizes a {@link ImplicitAnnotatedAllowedTypes} to a set of {@link AnnotatedAllowedSchema}s, by eagerly evaluating any
271
+ * lazy schema declarations and adding empty metadata if it doesn't already exist.
272
+ *
273
+ * @remarks Note: this must only be called after all required schemas have been declared, otherwise evaluation of
274
+ * recursive schemas may fail.
275
+ */
276
+ export function normalizeAnnotatedAllowedTypes(
277
+ types: ImplicitAnnotatedAllowedTypes,
278
+ ): NormalizedAnnotatedAllowedTypes {
279
+ const typesWithoutAnnotation = isAnnotatedAllowedTypes(types) ? types.types : types;
280
+ const annotatedTypes: AnnotatedAllowedType<TreeNodeSchema>[] = [];
281
+ if (isReadonlyArray(typesWithoutAnnotation)) {
282
+ for (const annotatedType of typesWithoutAnnotation) {
283
+ if (isAnnotatedAllowedType(annotatedType)) {
284
+ annotatedTypes.push({
285
+ type: evaluateLazySchema(annotatedType.type),
286
+ metadata: annotatedType.metadata,
287
+ });
288
+ } else {
289
+ annotatedTypes.push({ type: evaluateLazySchema(annotatedType), metadata: {} });
290
+ }
291
+ }
292
+ } else {
293
+ if (isAnnotatedAllowedType(typesWithoutAnnotation)) {
294
+ annotatedTypes.push({
295
+ type: evaluateLazySchema(typesWithoutAnnotation.type),
296
+ metadata: typesWithoutAnnotation.metadata,
297
+ });
298
+ } else {
299
+ annotatedTypes.push({ type: evaluateLazySchema(typesWithoutAnnotation), metadata: {} });
300
+ }
301
+ }
302
+
303
+ return {
304
+ metadata: isAnnotatedAllowedTypes(types) ? types.metadata : {},
305
+ types: annotatedTypes,
306
+ };
307
+ }
308
+
309
+ /**
310
+ * Converts an {@link ImplicitAnnotatedAllowedTypes} to an {@link ImplicitAllowedTypes}s, by removing
311
+ * any annotations.
312
+ * @remarks
313
+ * This does not evaluate any lazy schemas.
314
+ */
315
+ export function unannotateImplicitAllowedTypes<Types extends ImplicitAnnotatedAllowedTypes>(
316
+ types: Types,
317
+ ): UnannotateImplicitAllowedTypes<Types> {
318
+ return (
319
+ isAnnotatedAllowedTypes(types)
320
+ ? types.types.map((allowedType) =>
321
+ isAnnotatedAllowedType(allowedType) ? allowedType.type : allowedType,
322
+ )
323
+ : isReadonlyArray(types)
324
+ ? types.map((allowedType) =>
325
+ isAnnotatedAllowedType(allowedType) ? allowedType.type : allowedType,
326
+ )
327
+ : isAnnotatedAllowedType(types)
328
+ ? (types.type as UnannotateImplicitAllowedTypes<Types>)
329
+ : types
330
+ ) as UnannotateImplicitAllowedTypes<Types>;
331
+ }
332
+
333
+ const cachedLazyItem = new WeakMap<() => unknown, unknown>();
334
+
335
+ /**
336
+ * Returns the schema referenced by the {@link LazyItem}.
337
+ * @remarks
338
+ * Caches results to handle {@link LazyItem}s which compute their resulting schema.
339
+ * @alpha
340
+ */
341
+ export function evaluateLazySchema<T extends TreeNodeSchema>(value: LazyItem<T>): T {
342
+ const evaluatedSchema = isLazy(value)
343
+ ? (getOrCreate(cachedLazyItem, value, value) as T)
344
+ : value;
345
+ if (evaluatedSchema === undefined) {
346
+ throw new UsageError(
347
+ `Encountered an undefined schema. This could indicate that some referenced schema has not yet been instantiated.`,
348
+ );
349
+ }
350
+ markSchemaMostDerived(evaluatedSchema);
351
+ return evaluatedSchema;
352
+ }
353
+
354
+ /**
355
+ * Indicates that the provided schema is the "most derived" version in its class hierarchy.
356
+ *
357
+ * @param oneTimeInitialize - If true this runs {@link TreeNodeValid.oneTimeInitialize} which does even more initialization and validation.
358
+ * `oneTimeInitialize` can't safely be run until all transitively referenced schema are defined, so which cases can safely use it are more limited.
359
+ * When legal for the caller to set this to true, it is preferred, but it is often not safe due to possible forward references.
360
+ * @remarks
361
+ * See {@link MostDerivedData} and {@link SchemaFactory} for details on what a "most derived" schema is and why it matters.
362
+ *
363
+ * This is a helper for invoking {@link TreeNodeValid.markMostDerived} for {@link TreeNodeSchema}.
364
+ *
365
+ * Calling this helps with error messages about invalid schema usage (See {@link SchemaFactory} for the rules, some of which this helps validate).
366
+ * Typically this should be called for each schema as early as practical to improve error reporting for invalid usages of schema
367
+ * (using two different schema derived from the same {@link SchemaFactory} produced base class).
368
+ *
369
+ * Note that construction of actual {@link TreeNode} instances or use of a schema transitively in a {@link TreeViewConfiguration} already do this,
370
+ * so any calls to this that is unconditionally after that point for the given schema is not needed.
371
+ * Instead most usages of this should be from those cases, and from miscellaneous cases where a schema is passed into an public API where theoretically someone could accidentally
372
+ * pass in a base class of a schema instead of the most derived one.
373
+ */
374
+ export function markSchemaMostDerived(
375
+ schema: TreeNodeSchema,
376
+ oneTimeInitialize = false,
377
+ ): void {
378
+ // Leaf schema are not classes, and thus do not need to be marked as most derived.
379
+ if (schema.kind === NodeKind.Leaf) {
380
+ return;
381
+ }
382
+
383
+ const schemaValid = schemaAsTreeNodeValid(schema);
384
+
385
+ if (oneTimeInitialize) {
386
+ schemaValid.oneTimeInitialize();
387
+ } else {
388
+ schemaValid.markMostDerived();
389
+ }
390
+ }
391
+
392
+ /**
393
+ * Type of tree node for a field of the given schema.
394
+ * @public
395
+ */
396
+ export type TreeNodeFromImplicitAllowedTypes<
397
+ TSchema extends ImplicitAllowedTypes = TreeNodeSchema,
398
+ > = TSchema extends TreeNodeSchema
399
+ ? NodeFromSchema<TSchema>
400
+ : TSchema extends AllowedTypes
401
+ ? NodeFromSchema<FlexListToUnion<TSchema>>
402
+ : unknown;
403
+
404
+ /**
405
+ * This type exists only to be linked from documentation to provide a single linkable place to document some details of
406
+ * "Input" types and how they handle schema.
407
+ *
408
+ * When a schema is used to describe data which is an input into an API, the API is [contravariant](https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)) over the schema.
409
+ * (See also, [TypeScript Variance Annotations](https://www.typescriptlang.org/docs/handbook/2/generics.html#variance-annotations)).
410
+ *
411
+ * Since these schema are expressed using TypeScript types, it is possible for the user of the API to provide non-exact values of these types which has implications that depended on the variance.
412
+ *
413
+ * Consider a field with schema type of `A | B` (where A and B are types of schema).
414
+ *
415
+ * - Reading the field behaves covariantly so {@link NodeFromSchema} of `<A | B>` is the same as `NodeFromSchema<A> | NodeFromSchema<B>`, indicating that either type of node can be read from the field.
416
+ *
417
+ * - Writing to the field behaves contravariantly. Since it is unknown if the node actually has a schema `A` or a schema `B`, the only legal values (known to be in schema regardless of which schema the underlying node has) are values which are legal for both `A & B`.
418
+ *
419
+ * Note that this is distinct from the case where the schema is `[A, B]`.
420
+ * In this case it is known that the field allows both A and B (the field can be set to an A or a B value).
421
+ * When `A | B` is used, the field might allow
422
+ * A but not B (so assigning a B value would be out of schema),
423
+ * B but not A (so assigning an A value would be out of schema)
424
+ * or both A and B.
425
+ *
426
+ * This gets more extreme when given completely unspecified schema.
427
+ * For example if a field is just provided {@link ImplicitFieldSchema}, nothing is known about the content of the field.
428
+ * This means that reading the field (via {@link TreeFieldFromImplicitField}) can give any valid tree field content,
429
+ * but there are no safe values which could be written to the field (since it is unknown what values would be out of schema) so {@link InsertableTreeFieldFromImplicitField} gives `never`.
430
+ *
431
+ * To implement this variance correctly, the computation of types for input and output have to use separate utilities
432
+ * which take very different approaches when encountering non-exact schema like unions or `ImplicitFieldSchema`.
433
+ * The utilities which behave contravariantly (as required to handle input correctly) link this documentation to indicate that this is how they behave.
434
+ *
435
+ * In addition to behaving contravariantly, these input type computation utilities often have further limitations.
436
+ * This is due to TypeScript making it difficult to implement this contravariance exactly.
437
+ * When faced with these implementation limitations these contravariant type computation utilities error on the side of producing overly strict requirements.
438
+ * For example in the above case of `A | B`, the utilities might compute an allowed insertable type as `never` even if there happens to be a common value accepted by both `A` and `B`.
439
+ * Future versions of the API can relax these requirements as the type computations are made more accurate.
440
+ *
441
+ * For a more concrete example: if {@link InsertableTreeFieldFromImplicitField} produced `never` for a schema `A | OptionalField<A>`,
442
+ * a future version could instead return a more flexible but still safe type, like `A`.
443
+ *
444
+ * More generally: try to avoid providing non-exact schema, especially for the fields of other schema.
445
+ * While these APIs attempt to handle such cases correctly, there are limitations and known bugs in this handling.
446
+ * Code using non-exact schema is much more likely to have its compilation break due to updates of this package or even TypeScript,
447
+ * and thus compilation breaks due to edge cases of non-exact schema handling, especially with recursive schema, are not considered breaking changes.
448
+ * This may change as the API become more stable.
449
+ *
450
+ * @privateRemarks
451
+ * There likely is a better way to share this documentation, but none was found at the time of writing.
452
+ *
453
+ * TODO: Once {@link InsertableField} is public, consider using it in the examples above.
454
+ * @system @public
455
+ */
456
+ export type Input<T extends never> = T;
457
+
458
+ /**
459
+ * Type of content that can be inserted into the tree for a node of the given schema.
460
+ *
461
+ * @see {@link Input}
462
+ *
463
+ * @typeparam TSchema - Schema to process.
464
+ *
465
+ * @privateRemarks
466
+ * This is a bit overly conservative, since cases like `A | [A]` give never and could give `A`.
467
+ * @public
468
+ */
469
+ export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes> =
470
+ [TSchema] extends [TreeNodeSchema]
471
+ ? InsertableTypedNode<TSchema>
472
+ : [TSchema] extends [AllowedTypes]
473
+ ? InsertableTreeNodeFromAllowedTypes<TSchema>
474
+ : never;
475
+
476
+ /**
477
+ * Type of content that can be inserted into the tree for a node of the given schema.
478
+ *
479
+ * @see {@link Input}
480
+ *
481
+ * @typeparam TList - AllowedTypes to process
482
+ *
483
+ * @privateRemarks
484
+ * This loop is manually unrolled to allow larger unions before hitting the recursion limit in TypeScript.
485
+ * @system @public
486
+ */
487
+ export type InsertableTreeNodeFromAllowedTypes<TList extends AllowedTypes> =
488
+ IsUnion<TList> extends true
489
+ ? never
490
+ : {
491
+ readonly [Property in keyof TList]: TList[Property] extends LazyItem<
492
+ infer TSchema extends TreeNodeSchema
493
+ >
494
+ ? InsertableTypedNode<TSchema>
495
+ : never;
496
+ }[number];
@@ -3,24 +3,17 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { anchorSlot, type TreeNodeSchemaIdentifier } from "../../core/index.js";
6
+ import type { TreeNodeSchemaIdentifier } from "../../core/index.js";
7
7
  import type {
8
8
  FlexTreeContext,
9
9
  FlexTreeHydratedContext,
10
10
  } from "../../feature-libraries/index.js";
11
11
  import { brand } from "../../util/index.js";
12
+ import type { NormalizedAnnotatedAllowedTypes } from "./allowedTypes.js";
12
13
 
13
- import type { NormalizedAnnotatedAllowedTypes, TreeNodeSchema } from "./treeNodeSchema.js";
14
+ import type { TreeNodeSchema } from "./treeNodeSchema.js";
14
15
  import { walkAllowedTypes } from "./walkSchema.js";
15
16
 
16
- /**
17
- * Creating multiple simple tree contexts for the same branch, and thus with the same underlying AnchorSet does not work due to how TreeNode caching works.
18
- * This slot is used to detect if one already exists and error if creating a second.
19
- * @remarks
20
- * See also {@link ContextSlot} in which the flex-tree context is stored.
21
- */
22
- export const SimpleContextSlot = anchorSlot<HydratedContext>();
23
-
24
17
  /**
25
18
  * Additional information about a collection of {@link TreeNode}s.
26
19
  * @remarks
@@ -5,7 +5,6 @@
5
5
 
6
6
  import type { TreeValue } from "../../core/index.js";
7
7
  import { isFlexTreeNode, type FlexTreeUnknownUnboxed } from "../../feature-libraries/index.js";
8
- import type { TreeLeafValue } from "../schemaTypes.js";
9
8
 
10
9
  import type { TreeNode } from "./treeNode.js";
11
10
  import {
@@ -14,6 +13,7 @@ import {
14
13
  createTreeNodeFromInner,
15
14
  splitInnerNodeType,
16
15
  } from "./treeNodeKernel.js";
16
+ import type { TreeLeafValue } from "./treeNodeSchema.js";
17
17
  import { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
18
18
 
19
19
  /**
@@ -13,6 +13,7 @@ export {
13
13
  getOrCreateInnerNode,
14
14
  treeNodeFromAnchor,
15
15
  getSimpleNodeSchemaFromInnerNode,
16
+ SimpleContextSlot,
16
17
  } from "./treeNodeKernel.js";
17
18
  export { type WithType, typeNameSymbol, typeSchemaSymbol } from "./withType.js";
18
19
  export {
@@ -25,18 +26,58 @@ export {
25
26
  inPrototypeChain,
26
27
  } from "./treeNode.js";
27
28
  export {
28
- type TreeNodeSchema,
29
29
  NodeKind,
30
- type TreeNodeSchemaClass,
31
- type TreeNodeSchemaNonClass,
32
- type TreeNodeSchemaCore,
33
- type TreeNodeSchemaBoth,
34
- type AnnotatedAllowedType,
35
- type NormalizedAnnotatedAllowedTypes,
36
- isAnnotatedAllowedTypes,
30
+ isTreeNodeSchemaClass,
31
+ privateDataSymbol,
32
+ getTreeNodeSchemaPrivateData,
33
+ CompatibilityLevel,
34
+ } from "./treeNodeSchema.js";
35
+ export type {
36
+ TreeNodeSchema,
37
+ TreeNodeSchemaClass,
38
+ TreeNodeSchemaNonClass,
39
+ TreeNodeSchemaCore,
40
+ TreeNodeSchemaBoth,
41
+ NodeSchemaMetadata,
42
+ TreeLeafValue,
43
+ InsertableTypedNode,
44
+ NodeBuilderData,
45
+ NodeFromSchema,
46
+ TreeNodeSchemaCorePrivate,
47
+ TreeNodeSchemaPrivateData,
48
+ TreeNodeSchemaInitializedData,
49
+ FlexContent,
37
50
  } from "./treeNodeSchema.js";
51
+ export {
52
+ isAnnotatedAllowedTypes,
53
+ isAnnotatedAllowedType,
54
+ normalizeAllowedTypes,
55
+ normalizeAnnotatedAllowedTypes,
56
+ unannotateImplicitAllowedTypes,
57
+ markSchemaMostDerived,
58
+ evaluateLazySchema,
59
+ } from "./allowedTypes.js";
60
+ export type {
61
+ AnnotatedAllowedType,
62
+ NormalizedAnnotatedAllowedTypes,
63
+ ImplicitAllowedTypes,
64
+ ImplicitAnnotatedAllowedTypes,
65
+ UnannotateImplicitAllowedTypes,
66
+ AllowedTypesMetadata,
67
+ AllowedTypes,
68
+ TreeNodeFromImplicitAllowedTypes,
69
+ InsertableTreeNodeFromImplicitAllowedTypes,
70
+ InsertableTreeNodeFromAllowedTypes,
71
+ Input,
72
+ UnannotateAllowedTypes,
73
+ UnannotateAllowedType,
74
+ UnannotateAllowedTypesList,
75
+ UnannotateAllowedTypeOrLazyItem,
76
+ AllowedTypeMetadata,
77
+ AnnotatedAllowedTypes,
78
+ } from "./allowedTypes.js";
38
79
  export { walkAllowedTypes, type SchemaVisitor } from "./walkSchema.js";
39
- export { Context, HydratedContext, SimpleContextSlot } from "./context.js";
80
+ export { Context, HydratedContext } from "./context.js";
40
81
  export {
41
82
  getOrCreateNodeFromInnerNode,
42
83
  getOrCreateNodeFromInnerUnboxedNode,
@@ -48,3 +89,15 @@ export {
48
89
  UnhydratedContext,
49
90
  createField,
50
91
  } from "./unhydratedFlexTree.js";
92
+ export type {
93
+ LazyItem,
94
+ FlexList,
95
+ FlexListToUnion,
96
+ ExtractItemType,
97
+ } from "./flexList.js";
98
+ export { isLazy } from "./flexList.js";
99
+ export {
100
+ TreeNodeValid,
101
+ type MostDerivedData,
102
+ createTreeNodeSchemaPrivateData,
103
+ } from "./treeNodeValid.js";
@@ -16,9 +16,7 @@ import {
16
16
  type TreeValue,
17
17
  type UpPath,
18
18
  } from "../../core/index.js";
19
- // TODO: decide how to deal with dependencies on flex-tree implementation.
20
- // eslint-disable-next-line import/no-internal-modules
21
- import { makeTree } from "../../feature-libraries/flex-tree/lazyNode.js";
19
+ import { getOrCreateHydratedFlexTreeNode } from "../../feature-libraries/index.js";
22
20
  import {
23
21
  assertFlexTreeEntityNotFreed,
24
22
  ContextSlot,
@@ -30,7 +28,7 @@ import {
30
28
  type HydratedFlexTreeNode,
31
29
  } from "../../feature-libraries/index.js";
32
30
 
33
- import { SimpleContextSlot, type Context, type HydratedContext } from "./context.js";
31
+ import type { Context, HydratedContext } from "./context.js";
34
32
  import type { TreeNode } from "./treeNode.js";
35
33
  import type { TreeNodeSchema } from "./treeNodeSchema.js";
36
34
  import type { InternalTreeNode, Unhydrated } from "./types.js";
@@ -332,7 +330,7 @@ export class TreeNodeKernel {
332
330
  anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(0xb41 /* missing context */);
333
331
  const cursor = context.checkout.forest.allocateCursor("getFlexNode");
334
332
  context.checkout.forest.moveCursorToPath(anchorNode, cursor);
335
- this.#hydrationState.innerNode = makeTree(context, cursor);
333
+ this.#hydrationState.innerNode = getOrCreateHydratedFlexTreeNode(context, cursor);
336
334
  cursor.free();
337
335
  assertFlexTreeEntityNotFreed(this.#hydrationState.innerNode);
338
336
  }
@@ -446,7 +444,7 @@ function flexNodeFromAnchor(anchorNode: AnchorNode): HydratedFlexTreeNode {
446
444
  anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(0xb45 /* missing context */);
447
445
  const cursor = context.checkout.forest.allocateCursor("getFlexNode");
448
446
  context.checkout.forest.moveCursorToPath(anchorNode, cursor);
449
- const newFlexNode = makeTree(context, cursor);
447
+ const newFlexNode = getOrCreateHydratedFlexTreeNode(context, cursor);
450
448
  cursor.free();
451
449
  return newFlexNode;
452
450
  }
@@ -478,3 +476,11 @@ export function createTreeNodeFromInner(innerNode: InnerNode): TreeNode | TreeVa
478
476
  internal,
479
477
  );
480
478
  }
479
+
480
+ /**
481
+ * Creating multiple simple tree contexts for the same branch, and thus with the same underlying AnchorSet does not work due to how TreeNode caching works.
482
+ * This slot is used to detect if one already exists and error if creating a second.
483
+ * @remarks
484
+ * See also {@link ContextSlot} in which the flex-tree context is stored.
485
+ */
486
+ export const SimpleContextSlot = anchorSlot<HydratedContext>();