@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
@@ -0,0 +1,734 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import type { ErasedType } from "@fluidframework/core-interfaces";
7
+ import { Lazy } from "@fluidframework/core-utils/internal";
8
+ import { UsageError } from "@fluidframework/telemetry-utils/internal";
9
+
10
+ import type { FieldKey } from "../core/index.js";
11
+ import type { FlexTreeHydratedContextMinimal } from "../feature-libraries/index.js";
12
+ import {
13
+ type MakeNominal,
14
+ brand,
15
+ type UnionToIntersection,
16
+ compareSets,
17
+ type requireTrue,
18
+ type areOnlyKeys,
19
+ type JsonCompatibleReadOnlyObject,
20
+ } from "../util/index.js";
21
+
22
+ import type {
23
+ TreeNodeSchema,
24
+ TreeNode,
25
+ UnhydratedFlexTreeNode,
26
+ NormalizedAnnotatedAllowedTypes,
27
+ ImplicitAllowedTypes,
28
+ ImplicitAnnotatedAllowedTypes,
29
+ UnannotateImplicitAllowedTypes,
30
+ AllowedTypesMetadata,
31
+ TreeNodeFromImplicitAllowedTypes,
32
+ TreeLeafValue,
33
+ InsertableTreeNodeFromImplicitAllowedTypes,
34
+ } from "./core/index.js";
35
+ import {
36
+ isAnnotatedAllowedTypes,
37
+ normalizeAllowedTypes,
38
+ normalizeAnnotatedAllowedTypes,
39
+ unannotateImplicitAllowedTypes,
40
+ } from "./core/index.js";
41
+
42
+ import type { SimpleFieldSchema } from "./simpleSchema.js";
43
+ import type { UnsafeUnknownSchema } from "./unsafeUnknownSchema.js";
44
+ import type { InsertableContent } from "./unhydratedFlexTreeFromInsertable.js";
45
+
46
+ /**
47
+ * Kind of a field on an {@link TreeObjectNode}.
48
+ * @remarks
49
+ * More kinds may be added over time, so do not assume this is an exhaustive set.
50
+ * See {@link FieldSchema} for where these are used, and {@link SchemaFactory} for how to create schema which use them.
51
+ * @public
52
+ */
53
+ export enum FieldKind {
54
+ /**
55
+ * A field which can be empty or filled.
56
+ * @remarks
57
+ * Allows 0 or one child.
58
+ */
59
+ Optional,
60
+ /**
61
+ * A field which must always be filled.
62
+ * @remarks
63
+ * Only allows exactly one child.
64
+ */
65
+ Required,
66
+ /**
67
+ * A special readonly field used for node identifier strings.
68
+ * @remarks
69
+ * Only allows exactly one child.
70
+ *
71
+ * See {@link SchemaFactory.identifier} for more details.
72
+ */
73
+ Identifier,
74
+ }
75
+
76
+ /**
77
+ * Maps from a property key to its corresponding {@link FieldProps.key | stored key} for the provided
78
+ * {@link ImplicitFieldSchema | field schema}.
79
+ *
80
+ * @remarks
81
+ * If an explicit stored key was specified in the schema, it will be used.
82
+ * Otherwise, the stored key is the same as the property key.
83
+ */
84
+ export function getStoredKey(
85
+ propertyKey: string,
86
+ fieldSchema: ImplicitAnnotatedFieldSchema,
87
+ ): FieldKey {
88
+ return brand(getExplicitStoredKey(fieldSchema) ?? propertyKey);
89
+ }
90
+
91
+ /**
92
+ * Gets the {@link FieldProps.key | stored key} specified by the schema, if one was explicitly specified.
93
+ * Otherwise, returns undefined.
94
+ */
95
+ export function getExplicitStoredKey(
96
+ fieldSchema: ImplicitAnnotatedFieldSchema,
97
+ ): string | undefined {
98
+ return fieldSchema instanceof FieldSchema ? fieldSchema.props?.key : undefined;
99
+ }
100
+
101
+ /**
102
+ * Additional information to provide to a {@link FieldSchema}.
103
+ *
104
+ * @typeParam TCustomMetadata - Custom metadata properties to associate with the field.
105
+ * See {@link FieldSchemaMetadata.custom}.
106
+ *
107
+ * @public
108
+ */
109
+ export interface FieldProps<TCustomMetadata = unknown> {
110
+ /**
111
+ * The unique identifier of a field, used in the persisted form of the tree.
112
+ *
113
+ * @remarks
114
+ * If not explicitly set via the schema, this is the same as the schema's property key.
115
+ *
116
+ * Specifying a stored key that differs from the property key is particularly useful in refactoring scenarios.
117
+ * To update the developer-facing API, while maintaining backwards compatibility with existing SharedTree data,
118
+ * you can change the property key and specify the previous property key as the stored key.
119
+ *
120
+ * Notes:
121
+ *
122
+ * - Stored keys have no impact on standard JavaScript behavior, on tree nodes. For example, `Object.keys`
123
+ * will always return the property keys specified in the schema, ignoring any stored keys that differ from
124
+ * the property keys.
125
+ *
126
+ * - When specifying stored keys in an object schema, you must ensure that the final set of stored keys
127
+ * (accounting for those implicitly derived from property keys) contains no duplicates.
128
+ * This is validated at runtime.
129
+ *
130
+ * @example Refactoring code without breaking compatibility with existing data
131
+ *
132
+ * Consider some existing object schema:
133
+ *
134
+ * ```TypeScript
135
+ * class Point extends schemaFactory.object("Point", {
136
+ * xPosition: schemaFactory.number,
137
+ * yPosition: schemaFactory.number,
138
+ * zPosition: schemaFactory.optional(schemaFactory.number),
139
+ * });
140
+ * ```
141
+ *
142
+ * Developers using nodes of this type would access the the `xPosition` property as `point.xPosition`.
143
+ *
144
+ * We would like to refactor the schema to omit "Position" from the property keys, but application data has
145
+ * already been persisted using the original property keys. To maintain compatibility with existing data,
146
+ * we can refactor the schema as follows:
147
+ *
148
+ * ```TypeScript
149
+ * class Point extends schemaFactory.object("Point", {
150
+ * x: schemaFactory.required(schemaFactory.number, { key: "xPosition" }),
151
+ * y: schemaFactory.required(schemaFactory.number, { key: "yPosition" }),
152
+ * z: schemaFactory.optional(schemaFactory.number, { key: "zPosition" }),
153
+ * });
154
+ * ```
155
+ *
156
+ * Now, developers can access the `x` property as `point.x`, while existing data can still be collaborated on.
157
+ *
158
+ * @defaultValue If not specified, the key that is persisted is the property key that was specified in the schema.
159
+ */
160
+ readonly key?: string;
161
+
162
+ /**
163
+ * A default provider used for fields which were not provided any values.
164
+ * @privateRemarks
165
+ * We are using an erased type here, as we want to expose this API but `InsertableContent` and `NodeKeyManager` are not public.
166
+ */
167
+ readonly defaultProvider?: DefaultProvider;
168
+
169
+ /**
170
+ * Optional metadata to associate with the field.
171
+ *
172
+ * @remarks
173
+ * Note: this metadata is not persisted nor made part of the collaborative state; it is strictly client-local.
174
+ * Different clients in the same collaborative session may see different metadata for the same field.
175
+ */
176
+ readonly metadata?: FieldSchemaMetadata<TCustomMetadata>;
177
+ }
178
+
179
+ /**
180
+ * {@link FieldProps} extended with additional `alpha` options.
181
+ *
182
+ * @typeParam TCustomMetadata - Custom metadata properties to associate with the field.
183
+ * See {@link FieldSchemaMetadata.custom}.
184
+ *
185
+ * @alpha @input
186
+ */
187
+ export interface FieldPropsAlpha<TCustomMetadata = unknown>
188
+ extends FieldProps<TCustomMetadata> {
189
+ /**
190
+ * The persisted metadata for this schema element.
191
+ */
192
+ readonly persistedMetadata?: JsonCompatibleReadOnlyObject | undefined;
193
+ }
194
+
195
+ /**
196
+ * A {@link FieldProvider} which requires additional context in order to produce its content
197
+ */
198
+ export type ContextualFieldProvider = (
199
+ context: FlexTreeHydratedContextMinimal | "UseGlobalContext",
200
+ ) => UnhydratedFlexTreeNode[];
201
+ /**
202
+ * A {@link FieldProvider} which can produce its content in a vacuum.
203
+ */
204
+ export type ConstantFieldProvider = () => UnhydratedFlexTreeNode[];
205
+ /**
206
+ * A function which produces content for a field every time that it is called.
207
+ */
208
+ export type FieldProvider = ContextualFieldProvider | ConstantFieldProvider;
209
+ /**
210
+ * Returns true if the given {@link FieldProvider} is a {@link ConstantFieldProvider}
211
+ */
212
+ export function isConstant(
213
+ fieldProvider: FieldProvider,
214
+ ): fieldProvider is ConstantFieldProvider {
215
+ return fieldProvider.length === 0;
216
+ }
217
+
218
+ /**
219
+ * Provides a default value for a field.
220
+ * @remarks
221
+ * If present in a `FieldSchema`, when constructing new tree content that field can be omitted, and a default will be provided.
222
+ * @system @sealed @public
223
+ */
224
+ export interface DefaultProvider extends ErasedType<"@fluidframework/tree.FieldProvider"> {}
225
+
226
+ export function extractFieldProvider(input: DefaultProvider): FieldProvider {
227
+ return input as unknown as FieldProvider;
228
+ }
229
+
230
+ export function getDefaultProvider(input: FieldProvider): DefaultProvider {
231
+ return input as unknown as DefaultProvider;
232
+ }
233
+
234
+ /**
235
+ * Metadata associated with a {@link FieldSchema}.
236
+ *
237
+ * @remarks Specified via {@link FieldProps.metadata}.
238
+ *
239
+ * @sealed
240
+ * @public
241
+ */
242
+ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
243
+ /**
244
+ * User-defined metadata.
245
+ */
246
+ readonly custom?: TCustomMetadata;
247
+
248
+ /**
249
+ * The description of the field.
250
+ *
251
+ * @remarks
252
+ *
253
+ * If provided, will be used by the system in scenarios where a description of the field is useful.
254
+ * E.g., when converting a field schema to {@link https://json-schema.org/ | JSON Schema}, this description will be
255
+ * used as the `description` field.
256
+ */
257
+ readonly description?: string | undefined;
258
+ }
259
+
260
+ /**
261
+ * Metadata associated with a {@link FieldSchema}. Includes fields used by alpha features.
262
+ *
263
+ * @remarks Specified via {@link FieldProps.metadata}.
264
+ *
265
+ * @sealed
266
+ * @alpha
267
+ */
268
+ export interface FieldSchemaMetadataAlpha<TCustomMetadata = unknown>
269
+ extends FieldSchemaMetadata<TCustomMetadata> {
270
+ /**
271
+ * The persisted metadata for this schema element.
272
+ */
273
+ readonly persistedMetadata?: JsonCompatibleReadOnlyObject | undefined;
274
+ }
275
+
276
+ /**
277
+ * Package internal construction API.
278
+ */
279
+ export function createFieldSchema<
280
+ Kind extends FieldKind,
281
+ Types extends ImplicitAllowedTypes,
282
+ TCustomMetadata = unknown,
283
+ >(
284
+ kind: Kind,
285
+ annotatedTypes: Types,
286
+ props?: FieldProps<TCustomMetadata>,
287
+ ): FieldSchemaAlpha<Kind, Types, TCustomMetadata>;
288
+
289
+ /**
290
+ * Package internal construction API that supports annotations for allowed types.
291
+ */
292
+ export function createFieldSchema<
293
+ Kind extends FieldKind,
294
+ Types extends ImplicitAnnotatedAllowedTypes,
295
+ TCustomMetadata = unknown,
296
+ >(
297
+ kind: Kind,
298
+ annotatedTypes: Types,
299
+ props?: FieldProps<TCustomMetadata>,
300
+ ): FieldSchemaAlpha<Kind, UnannotateImplicitAllowedTypes<Types>, TCustomMetadata>;
301
+
302
+ export function createFieldSchema<
303
+ Kind extends FieldKind,
304
+ Types extends ImplicitAnnotatedAllowedTypes,
305
+ TCustomMetadata = unknown,
306
+ >(
307
+ kind: Kind,
308
+ annotatedTypes: Types,
309
+ props?: FieldProps<TCustomMetadata>,
310
+ ): FieldSchemaAlpha<Kind, UnannotateImplicitAllowedTypes<Types>, TCustomMetadata> {
311
+ return createFieldSchemaPrivate(kind, annotatedTypes, props);
312
+ }
313
+
314
+ /**
315
+ * Implementation for {@link createFieldSchema}
316
+ */
317
+ let createFieldSchemaPrivate: <
318
+ Kind extends FieldKind,
319
+ Types extends ImplicitAnnotatedAllowedTypes,
320
+ TCustomMetadata,
321
+ >(
322
+ kind: Kind,
323
+ annotatedTypes: Types,
324
+ props?: FieldProps<TCustomMetadata>,
325
+ ) => FieldSchemaAlpha<Kind, UnannotateImplicitAllowedTypes<Types>, TCustomMetadata>;
326
+
327
+ /**
328
+ * All policy for a specific field,
329
+ * including functionality that does not have to be kept consistent across versions or deterministic.
330
+ *
331
+ * This can include policy for how to use this schema for "view" purposes, and well as how to expose editing APIs.
332
+ * Use {@link SchemaFactory} to create the FieldSchema instances, for example {@link SchemaStatics.optional}.
333
+ * @privateRemarks
334
+ * Public access to the constructor is removed to prevent creating expressible but unsupported (or not stable) configurations.
335
+ * {@link createFieldSchema} can be used internally to create instances.
336
+ *
337
+ * @typeParam TCustomMetadata - Custom metadata properties to associate with the field.
338
+ * See {@link FieldSchemaMetadata.custom}.
339
+ *
340
+ * @remarks
341
+ * All implementations of this are actually {@link FieldSchemaAlpha} which exposes some additional alpha APIs.
342
+ *
343
+ * @sealed @public
344
+ */
345
+ export class FieldSchema<
346
+ out Kind extends FieldKind = FieldKind,
347
+ out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes,
348
+ out TCustomMetadata = unknown,
349
+ > {
350
+ /**
351
+ * This class is used with instanceof, and therefore should have nominal typing.
352
+ * This field enforces that.
353
+ */
354
+ protected _typeCheck!: MakeNominal;
355
+
356
+ private readonly lazyTypes: Lazy<ReadonlySet<TreeNodeSchema>>;
357
+
358
+ /**
359
+ * What types of tree nodes are allowed in this field.
360
+ * @remarks Counterpart to {@link FieldSchema.allowedTypes}, with any lazy definitions evaluated.
361
+ */
362
+ public get allowedTypeSet(): ReadonlySet<TreeNodeSchema> {
363
+ return this.lazyTypes.value;
364
+ }
365
+
366
+ /**
367
+ * True if and only if, when constructing a node with this field, a value must be provided for it.
368
+ */
369
+ public readonly requiresValue: boolean;
370
+
371
+ /**
372
+ * {@inheritDoc FieldProps.metadata}
373
+ */
374
+ public get metadata(): FieldSchemaMetadata<TCustomMetadata> {
375
+ return this.props?.metadata ?? {};
376
+ }
377
+
378
+ /**
379
+ * This class is `@sealed`: protected members like this constructor are for internal use only.
380
+ * Use {@link SchemaFactory} to create the FieldSchema instances.
381
+ */
382
+ protected constructor(
383
+ /**
384
+ * The {@link https://en.wikipedia.org/wiki/Kind_(type_theory) | kind } of this field.
385
+ * Determines the multiplicity, viewing and editing APIs as well as the merge resolution policy.
386
+ */
387
+ public readonly kind: Kind,
388
+ /**
389
+ * What types of tree nodes are allowed in this field.
390
+ */
391
+ public readonly allowedTypes: Types,
392
+ /**
393
+ * Optional properties associated with the field.
394
+ */
395
+ public readonly props?: FieldProps<TCustomMetadata>,
396
+ ) {
397
+ if (!(this instanceof FieldSchemaAlpha)) {
398
+ throw new UsageError("FieldSchema is @sealed: sub-classing is not allowed.");
399
+ }
400
+
401
+ this.lazyTypes = new Lazy(() => normalizeAllowedTypes(this.allowedTypes));
402
+ // TODO: optional fields should (by default) get a default provider that returns undefined, removing the need to special case them here:
403
+ this.requiresValue =
404
+ this.props?.defaultProvider === undefined && this.kind !== FieldKind.Optional;
405
+ }
406
+ }
407
+
408
+ /**
409
+ * {@link FieldSchema} including alpha APIs (currently {@link SimpleFieldSchema}).
410
+ * @remarks
411
+ * This class will go away once the alpha APIs are stable and implemented by {@link FieldSchema}.
412
+ * @sealed @alpha
413
+ */
414
+ export class FieldSchemaAlpha<
415
+ Kind extends FieldKind = FieldKind,
416
+ Types extends ImplicitAllowedTypes = ImplicitAllowedTypes,
417
+ TCustomMetadata = unknown,
418
+ >
419
+ extends FieldSchema<Kind, Types, TCustomMetadata>
420
+ implements SimpleFieldSchema
421
+ {
422
+ private readonly lazyIdentifiers: Lazy<ReadonlySet<string>>;
423
+ private readonly lazyAnnotatedTypes: Lazy<NormalizedAnnotatedAllowedTypes>;
424
+ private readonly propsAlpha: FieldPropsAlpha<TCustomMetadata> | undefined;
425
+
426
+ /**
427
+ * Metadata on the types of tree nodes allowed on this field.
428
+ */
429
+ public readonly allowedTypesMetadata: AllowedTypesMetadata;
430
+
431
+ /**
432
+ * Persisted metadata for this field schema.
433
+ */
434
+ public get persistedMetadata(): JsonCompatibleReadOnlyObject | undefined {
435
+ return this.propsAlpha?.persistedMetadata;
436
+ }
437
+
438
+ static {
439
+ createFieldSchemaPrivate = <
440
+ Kind2 extends FieldKind,
441
+ Types2 extends ImplicitAnnotatedAllowedTypes,
442
+ TCustomMetadata2,
443
+ >(
444
+ kind: Kind2,
445
+ annotatedAllowedTypes: Types2,
446
+ props?: FieldPropsAlpha<TCustomMetadata2>,
447
+ ) =>
448
+ new FieldSchemaAlpha(
449
+ kind,
450
+ unannotateImplicitAllowedTypes(annotatedAllowedTypes),
451
+ annotatedAllowedTypes,
452
+ props,
453
+ );
454
+ }
455
+
456
+ protected constructor(
457
+ kind: Kind,
458
+ types: Types,
459
+ public readonly annotatedAllowedTypes: ImplicitAnnotatedAllowedTypes,
460
+ props?: FieldPropsAlpha<TCustomMetadata>,
461
+ ) {
462
+ super(kind, types, props);
463
+
464
+ this.allowedTypesMetadata = isAnnotatedAllowedTypes(annotatedAllowedTypes)
465
+ ? annotatedAllowedTypes.metadata
466
+ : {};
467
+ this.lazyAnnotatedTypes = new Lazy(() =>
468
+ normalizeAnnotatedAllowedTypes(annotatedAllowedTypes),
469
+ );
470
+ this.lazyIdentifiers = new Lazy(
471
+ () => new Set([...this.allowedTypeSet].map((t) => t.identifier)),
472
+ );
473
+ this.propsAlpha = props;
474
+ }
475
+
476
+ public get allowedTypesIdentifiers(): ReadonlySet<string> {
477
+ return this.lazyIdentifiers.value;
478
+ }
479
+
480
+ /**
481
+ * What types of tree nodes are allowed in this field and their annotations.
482
+ * @remarks Counterpart to {@link FieldSchemaAlpha.annotatedAllowedTypes}, with any lazy definitions evaluated.
483
+ */
484
+ public get annotatedAllowedTypesNormalized(): NormalizedAnnotatedAllowedTypes {
485
+ return this.lazyAnnotatedTypes.value;
486
+ }
487
+ }
488
+
489
+ /**
490
+ * Normalizes a {@link ImplicitFieldSchema} or {@link ImplicitAnnotatedFieldSchema} to a {@link FieldSchema}.
491
+ */
492
+ export function normalizeFieldSchema(
493
+ schema: ImplicitFieldSchema | ImplicitAnnotatedFieldSchema,
494
+ ): FieldSchemaAlpha {
495
+ return schema instanceof FieldSchema
496
+ ? (schema as FieldSchemaAlpha)
497
+ : createFieldSchema(FieldKind.Required, schema);
498
+ }
499
+
500
+ /**
501
+ * Returns true if the given {@link ImplicitFieldSchema} are equivalent, otherwise false.
502
+ * @remarks Two ImplicitFieldSchema are considered equivalent if all of the following are true:
503
+ * 1. They have the same {@link FieldKind | kinds}.
504
+ * 2. They have {@link areFieldPropsEqual | equivalent FieldProps}.
505
+ * 3. They have the same exact set of allowed types. The allowed types must be (respectively) reference equal.
506
+ *
507
+ * For example, comparing an ImplicitFieldSchema that is a {@link TreeNodeSchema} to an ImplicitFieldSchema that is a {@link FieldSchema}
508
+ * will return true if they are the same kind, the FieldSchema has exactly one allowed type (the TreeNodeSchema), and they have equivalent FieldProps.
509
+ */
510
+ export function areImplicitFieldSchemaEqual(
511
+ a: ImplicitFieldSchema,
512
+ b: ImplicitFieldSchema,
513
+ ): boolean {
514
+ return areFieldSchemaEqual(normalizeFieldSchema(a), normalizeFieldSchema(b));
515
+ }
516
+
517
+ /**
518
+ * Returns true if the given {@link FieldSchema} are equivalent, otherwise false.
519
+ * @remarks Two FieldSchema are considered equivalent if all of the following are true:
520
+ * 1. They have the same {@link FieldKind | kinds}.
521
+ * 2. They have {@link areFieldPropsEqual | equivalent FieldProps}.
522
+ * 3. They have the same exact set of allowed types. The allowed types must be reference equal.
523
+ */
524
+ export function areFieldSchemaEqual(a: FieldSchema, b: FieldSchema): boolean {
525
+ if (a === b) {
526
+ return true;
527
+ }
528
+
529
+ if (a.kind !== b.kind) {
530
+ return false;
531
+ }
532
+
533
+ if (!areFieldPropsEqual(a.props, b.props)) {
534
+ return false;
535
+ }
536
+
537
+ return compareSets({ a: a.allowedTypeSet, b: b.allowedTypeSet });
538
+ }
539
+
540
+ /**
541
+ * Returns true if the given {@link FieldProps} are equivalent, otherwise false.
542
+ * @remarks FieldProps are considered equivalent if their keys and default providers are reference equal, and their metadata are {@link areMetadataEqual | equivalent}.
543
+ */
544
+ function areFieldPropsEqual(a: FieldProps | undefined, b: FieldProps | undefined): boolean {
545
+ // If any new fields are added to FieldProps, this check will stop compiling as a reminder that this function needs to be updated.
546
+ type _keys = requireTrue<areOnlyKeys<FieldProps, "key" | "defaultProvider" | "metadata">>;
547
+
548
+ if (a === b) {
549
+ return true;
550
+ }
551
+
552
+ if (a?.key !== b?.key || a?.defaultProvider !== b?.defaultProvider) {
553
+ return false;
554
+ }
555
+
556
+ if (!areMetadataEqual(a?.metadata, b?.metadata)) {
557
+ return false;
558
+ }
559
+
560
+ return true;
561
+ }
562
+
563
+ /**
564
+ * Returns true if the given {@link FieldSchemaMetadata} are equivalent, otherwise false.
565
+ * @remarks FieldSchemaMetadata are considered equivalent if their custom data and descriptions are (respectively) reference equal.
566
+ */
567
+ function areMetadataEqual(
568
+ a: FieldSchemaMetadataAlpha | undefined,
569
+ b: FieldSchemaMetadataAlpha | undefined,
570
+ ): boolean {
571
+ // If any new fields are added to FieldSchemaMetadata, this check will stop compiling as a reminder that this function needs to be updated.
572
+ type _keys = requireTrue<
573
+ areOnlyKeys<FieldSchemaMetadataAlpha, "custom" | "description" | "persistedMetadata">
574
+ >;
575
+
576
+ if (a === b) {
577
+ return true;
578
+ }
579
+
580
+ return (
581
+ Object.is(a?.custom, b?.custom) &&
582
+ a?.description === b?.description &&
583
+ arePersistedMetadataEqual(a?.persistedMetadata, b?.persistedMetadata)
584
+ );
585
+ }
586
+
587
+ /**
588
+ * Returns true if the given persisted metadata fields are equivalent, otherwise false.
589
+ * @remarks
590
+ * Currently only handles shallow equality in the case where the keys are in the same order. This is acceptable for current use cases.
591
+ */
592
+ function arePersistedMetadataEqual(
593
+ a: JsonCompatibleReadOnlyObject | undefined,
594
+ b: JsonCompatibleReadOnlyObject | undefined,
595
+ ): boolean {
596
+ if (Object.is(a, b)) {
597
+ return true;
598
+ }
599
+
600
+ if (a === undefined || b === undefined) {
601
+ return false;
602
+ }
603
+
604
+ // Note that the key order matters. If `a` and `b` have the same content but the keys are in a different order,
605
+ // this method will return false.
606
+ const aStringified = JSON.stringify(a);
607
+ const bStringified = JSON.stringify(b);
608
+
609
+ return aStringified === bStringified;
610
+ }
611
+
612
+ /**
613
+ * Schema for a field of a tree node.
614
+ * @remarks
615
+ * Implicitly treats {@link ImplicitAllowedTypes} as a Required field of that type.
616
+ * @public
617
+ */
618
+ export type ImplicitFieldSchema = FieldSchema | ImplicitAllowedTypes;
619
+
620
+ /**
621
+ * Annotated schema for a field of a tree node.
622
+ * @alpha
623
+ */
624
+ export type ImplicitAnnotatedFieldSchema = FieldSchema | ImplicitAnnotatedAllowedTypes;
625
+
626
+ /**
627
+ * Removes annotations from an annotated field schema.
628
+ * @system @alpha
629
+ */
630
+ export type UnannotateImplicitFieldSchema<T extends ImplicitAnnotatedFieldSchema> =
631
+ T extends ImplicitAnnotatedAllowedTypes ? UnannotateImplicitAllowedTypes<T> : T;
632
+
633
+ /**
634
+ * Converts an `ImplicitFieldSchema` to a property type suitable for reading a field with this that schema.
635
+ *
636
+ * @typeparam TSchema - When non-exact schema are provided this errors on the side of returning too general of a type (a conservative union of all possibilities).
637
+ * This is ideal for "output APIs" - i.e. it converts the schema type to the runtime type that a user will _read_ from the tree.
638
+ * Examples of such "non-exact" schema include `ImplicitFieldSchema`, `ImplicitAllowedTypes`, and TypeScript unions of schema types.
639
+ * @public
640
+ */
641
+ export type TreeFieldFromImplicitField<TSchema extends ImplicitFieldSchema = FieldSchema> =
642
+ TSchema extends FieldSchema<infer Kind, infer Types>
643
+ ? ApplyKind<TreeNodeFromImplicitAllowedTypes<Types>, Kind>
644
+ : TSchema extends ImplicitAllowedTypes
645
+ ? TreeNodeFromImplicitAllowedTypes<TSchema>
646
+ : TreeNode | TreeLeafValue | undefined;
647
+
648
+ /**
649
+ * Type of content that can be inserted into the tree for a field of the given schema.
650
+ *
651
+ * @see {@link Input}
652
+ *
653
+ * @typeparam TSchemaInput - Schema to process.
654
+ * @typeparam TSchema - Do not specify: default value used as implementation detail.
655
+ * @public
656
+ */
657
+ export type InsertableTreeFieldFromImplicitField<
658
+ TSchemaInput extends ImplicitFieldSchema,
659
+ TSchema = UnionToIntersection<TSchemaInput>,
660
+ > = [TSchema] extends [FieldSchema<infer Kind, infer Types>]
661
+ ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypes<Types>, Kind, true>
662
+ : [TSchema] extends [ImplicitAllowedTypes]
663
+ ? InsertableTreeNodeFromImplicitAllowedTypes<TSchema>
664
+ : never;
665
+
666
+ /**
667
+ * Content which could be inserted into a field within a tree.
668
+ *
669
+ * @see {@link Input}
670
+ * @remarks
671
+ * Extended version of {@link InsertableTreeFieldFromImplicitField} that also allows {@link (UnsafeUnknownSchema:type)}.
672
+ * @alpha
673
+ */
674
+ export type InsertableField<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> = [
675
+ TSchema,
676
+ ] extends [ImplicitFieldSchema]
677
+ ? InsertableTreeFieldFromImplicitField<TSchema>
678
+ : [TSchema] extends [UnsafeUnknownSchema]
679
+ ? InsertableContent | undefined
680
+ : never;
681
+
682
+ /**
683
+ * Content which could be read from a field within a tree.
684
+ *
685
+ * @remarks
686
+ * Extended version of {@link TreeFieldFromImplicitField} that also allows {@link (UnsafeUnknownSchema:type)}.
687
+ * Since reading from fields with non-exact schema is still safe, this is only useful (compared to {@link TreeFieldFromImplicitField}) when the schema is also used as input and thus allows {@link (UnsafeUnknownSchema:type)}
688
+ * for use
689
+ * @system @alpha
690
+ */
691
+ export type ReadableField<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> =
692
+ TreeFieldFromImplicitField<ReadSchema<TSchema>>;
693
+
694
+ /**
695
+ * Adapter to remove {@link (UnsafeUnknownSchema:type)} from a schema type so it can be used with types for generating APIs for reading data.
696
+ *
697
+ * @remarks
698
+ * Since reading with non-exact schema is still safe, this is mainly useful when the schema is also used as input and thus allows {@link (UnsafeUnknownSchema:type)}.
699
+ * @system @alpha
700
+ */
701
+ export type ReadSchema<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> = [
702
+ TSchema,
703
+ ] extends [ImplicitFieldSchema]
704
+ ? TSchema
705
+ : ImplicitFieldSchema;
706
+
707
+ /**
708
+ * Suitable for output.
709
+ * For input must error on side of excluding undefined instead.
710
+ * @system @public
711
+ */
712
+ export type ApplyKind<T, Kind extends FieldKind> = {
713
+ [FieldKind.Required]: T;
714
+ [FieldKind.Optional]: T | undefined;
715
+ [FieldKind.Identifier]: T;
716
+ }[Kind];
717
+
718
+ /**
719
+ * Suitable for input.
720
+ *
721
+ * @see {@link Input}
722
+ * @system @public
723
+ */
724
+ export type ApplyKindInput<T, Kind extends FieldKind, DefaultsAreOptional extends boolean> = [
725
+ Kind,
726
+ ] extends [FieldKind.Required]
727
+ ? T
728
+ : [Kind] extends [FieldKind.Optional]
729
+ ? T | undefined
730
+ : [Kind] extends [FieldKind.Identifier]
731
+ ? DefaultsAreOptional extends true
732
+ ? T | undefined
733
+ : T
734
+ : never;