@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,648 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import {
7
+ assert,
8
+ debugAssert,
9
+ fail,
10
+ unreachableCase,
11
+ } from "@fluidframework/core-utils/internal";
12
+
13
+ import {
14
+ EmptyKey,
15
+ type FieldKey,
16
+ type FieldKindIdentifier,
17
+ forbiddenFieldKindIdentifier,
18
+ LeafNodeStoredSchema,
19
+ MapNodeStoredSchema,
20
+ ObjectNodeStoredSchema,
21
+ storedEmptyFieldSchema,
22
+ type TreeFieldStoredSchema,
23
+ type TreeNodeSchemaIdentifier,
24
+ type TreeNodeStoredSchema,
25
+ type TreeStoredSchema,
26
+ type TreeTypeSet,
27
+ type ValueSchema,
28
+ } from "../core/index.js";
29
+ import { brand } from "../util/index.js";
30
+ import { NodeKind, type AnnotatedAllowedType, type TreeNodeSchema } from "./core/index.js";
31
+ import {
32
+ isArrayNodeSchema,
33
+ isMapNodeSchema,
34
+ isObjectNodeSchema,
35
+ isRecordNodeSchema,
36
+ type SimpleKeyMap,
37
+ } from "./node-kinds/index.js";
38
+ import { convertFieldKind } from "./toStoredSchema.js";
39
+ import { walkFieldSchema } from "./walkFieldSchema.js";
40
+ import {
41
+ createFieldSchema,
42
+ FieldKind,
43
+ FieldSchemaAlpha,
44
+ type FieldSchema,
45
+ } from "./fieldSchema.js";
46
+ import { LeafNodeSchema } from "./leafNodeSchema.js";
47
+
48
+ /**
49
+ * Discriminated union (keyed on `mismatch`) of discrepancies between a view and stored schema.
50
+ * @remarks
51
+ *
52
+ * 1. FieldDiscrepancy
53
+ *
54
+ * `FieldDiscrepancy` represents the differences between two `TreeFieldStoredSchema` objects. It consists of
55
+ * three types of incompatibilities:
56
+ *
57
+ * - FieldKindDiscrepancy: Indicates the differences in `FieldKindIdentifier` between two `TreeFieldStoredSchema`
58
+ * objects (e.g., optional, required, sequence, etc.).
59
+ * - AllowedTypesDiscrepancy: Indicates the differences in the allowed child types between the two schemas.
60
+ * - ValueSchemaDiscrepancy: Specifically indicates the differences in the `ValueSchema` of two
61
+ * `LeafNodeStoredSchema` objects.
62
+ *
63
+ * 2. NodeDiscrepancy
64
+ *
65
+ * `NodeDiscrepancy` represents the differences between two `TreeNodeStoredSchema` objects and includes:
66
+ *
67
+ * - NodeKindDiscrepancy: Indicates the differences in the types of `TreeNodeStoredSchema` (currently supports
68
+ * `ObjectNodeStoredSchema`, `MapNodeStoredSchema`, and `LeafNodeStoredSchema`).
69
+ * - NodeFieldsDiscrepancy: Indicates the `FieldDiscrepancy` of `TreeFieldStoredSchema` within two
70
+ * `TreeNodeStoredSchema`. It includes an array of `FieldDiscrepancy` instances in the `differences` field.
71
+ *
72
+ * When comparing two nodes for compatibility, it only makes sense to compare their fields if the nodes are of
73
+ * the same kind (map, object, leaf).
74
+ *
75
+ * 3. Discrepancy
76
+ *
77
+ * Discrepancy consists of both `NodeDiscrepancy` and `FieldDiscrepancy`, representing any kind of
78
+ * schema differences. See {@link getAllowedContentDiscrepancies} for more details about how we process it
79
+ * and the ordering.
80
+ */
81
+ export type Discrepancy = FieldDiscrepancy | NodeDiscrepancy;
82
+
83
+ export type NodeDiscrepancy = NodeKindDiscrepancy | NodeFieldsDiscrepancy;
84
+
85
+ /**
86
+ * A discrepancy in the declaration of a field.
87
+ */
88
+ export type FieldDiscrepancy =
89
+ | AllowedTypeDiscrepancy
90
+ | FieldKindDiscrepancy
91
+ | ValueSchemaDiscrepancy;
92
+
93
+ /**
94
+ * Information about where a field discrepancy is located within a collection of schema.
95
+ */
96
+ export interface FieldDiscrepancyLocation {
97
+ /**
98
+ * The {@link TreeNodeSchemaIdentifier} that contains the discrepancy.
99
+ *
100
+ * Undefined iff the discrepancy is part of the root field schema.
101
+ */
102
+ readonly identifier: TreeNodeSchemaIdentifier | undefined;
103
+ /**
104
+ * The {@link FieldKey} for the field that contains the discrepancy.
105
+ * Undefined when:
106
+ * - the discrepancy is part of the root field schema
107
+ * - the discrepancy is for 'all fields' of a map node
108
+ */
109
+ readonly fieldKey: FieldKey | undefined;
110
+ }
111
+
112
+ /**
113
+ * A discrepancy in the allowed types of a field.
114
+ *
115
+ * @remarks
116
+ * This reports the symmetric difference of allowed types in view/stored to enable more efficient checks for compatibility
117
+ */
118
+ export interface AllowedTypeDiscrepancy extends FieldDiscrepancyLocation {
119
+ readonly mismatch: "allowedTypes";
120
+ /**
121
+ * List of annotated allowed types in viewed schema which are not allowed in stored schema
122
+ */
123
+ readonly view: readonly AnnotatedAllowedType<TreeNodeSchema>[];
124
+ /**
125
+ * List of allowed type identifiers in stored schema which are not allowed in view schema
126
+ */
127
+ readonly stored: readonly TreeNodeSchemaIdentifier[];
128
+ }
129
+
130
+ export interface FieldKindDiscrepancy extends FieldDiscrepancyLocation {
131
+ readonly mismatch: "fieldKind";
132
+ readonly view: FieldKindIdentifier;
133
+ readonly stored: FieldKindIdentifier;
134
+ }
135
+
136
+ export interface ValueSchemaDiscrepancy {
137
+ identifier: TreeNodeSchemaIdentifier;
138
+ mismatch: "valueSchema";
139
+ view: ValueSchema | undefined;
140
+ stored: ValueSchema | undefined;
141
+ }
142
+
143
+ export interface NodeKindDiscrepancy {
144
+ identifier: TreeNodeSchemaIdentifier;
145
+ mismatch: "nodeKind";
146
+ view: SchemaFactoryNodeKind | undefined;
147
+ stored: SchemaFactoryNodeKind | undefined;
148
+ }
149
+
150
+ export interface NodeFieldsDiscrepancy {
151
+ identifier: TreeNodeSchemaIdentifier;
152
+ mismatch: "fields";
153
+ differences: FieldDiscrepancy[];
154
+ }
155
+
156
+ type SchemaFactoryNodeKind =
157
+ | typeof ObjectNodeStoredSchema
158
+ | typeof MapNodeStoredSchema
159
+ | typeof LeafNodeStoredSchema;
160
+
161
+ function getStoredNodeSchemaType(nodeSchema: TreeNodeStoredSchema): SchemaFactoryNodeKind {
162
+ if (nodeSchema instanceof ObjectNodeStoredSchema) {
163
+ return ObjectNodeStoredSchema;
164
+ }
165
+ if (nodeSchema instanceof MapNodeStoredSchema) {
166
+ return MapNodeStoredSchema;
167
+ }
168
+ if (nodeSchema instanceof LeafNodeStoredSchema) {
169
+ return LeafNodeStoredSchema;
170
+ }
171
+ fail(0xbe8 /* Invalid stored node schema type */);
172
+ }
173
+
174
+ function doesNodeKindMatchStoredNodeKind(
175
+ viewKind: NodeKind,
176
+ storedType: SchemaFactoryNodeKind,
177
+ ): boolean {
178
+ switch (viewKind) {
179
+ case NodeKind.Leaf:
180
+ return storedType === LeafNodeStoredSchema;
181
+ case NodeKind.Array:
182
+ case NodeKind.Object:
183
+ return storedType === ObjectNodeStoredSchema;
184
+ case NodeKind.Map:
185
+ case NodeKind.Record:
186
+ return storedType === MapNodeStoredSchema;
187
+ default:
188
+ unreachableCase(viewKind);
189
+ }
190
+ }
191
+
192
+ function getViewNodeSchemaType(schema: TreeNodeSchema): SchemaFactoryNodeKind {
193
+ switch (schema.kind) {
194
+ case NodeKind.Leaf: {
195
+ return LeafNodeStoredSchema;
196
+ }
197
+ case NodeKind.Map:
198
+ case NodeKind.Record: {
199
+ return MapNodeStoredSchema;
200
+ }
201
+ case NodeKind.Object:
202
+ case NodeKind.Array: {
203
+ return ObjectNodeStoredSchema;
204
+ }
205
+ default:
206
+ unreachableCase(schema.kind);
207
+ }
208
+ }
209
+
210
+ /**
211
+ * Finds and reports discrepancies between a view schema and a stored schema.
212
+ *
213
+ * See documentation on {@link Discrepancy} for details of possible discrepancies.
214
+ * @remarks
215
+ * This function does not attempt to distinguish between equivalent representations of a node/field involving extraneous never trees.
216
+ * For example, a Forbidden field with allowed type set `[]` is equivalent to an optional field with allowed type set `[]`,
217
+ * as well as an optional field with an allowed type set containing only unconstructable types.
218
+ *
219
+ * It is up to the caller to determine whether such discrepancies matter.
220
+ */
221
+ export function* getAllowedContentDiscrepancies(
222
+ view: FieldSchema,
223
+ stored: TreeStoredSchema,
224
+ ): Iterable<Discrepancy> {
225
+ // check root schema discrepancies
226
+ yield* getFieldDiscrepancies(view, stored.rootFieldSchema, undefined, undefined);
227
+
228
+ const viewNodeSchema = new Map<TreeNodeSchemaIdentifier, TreeNodeSchema>();
229
+
230
+ walkFieldSchema(view, {
231
+ node: (schema) => {
232
+ const identifier: TreeNodeSchemaIdentifier = brand(schema.identifier);
233
+
234
+ debugAssert(() => !viewNodeSchema.has(identifier));
235
+ viewNodeSchema.set(identifier, schema);
236
+ },
237
+ });
238
+
239
+ for (const [identifier, viewSchema] of viewNodeSchema) {
240
+ const storedSchema = stored.nodeSchema.get(identifier);
241
+
242
+ // if the view schema has a node that's not in the stored schema
243
+ if (storedSchema === undefined) {
244
+ const viewType = getViewNodeSchemaType(viewSchema);
245
+ // TODO does it make sense to have this mismatch when there will also be an allowedTypes mismatch?
246
+ yield {
247
+ identifier,
248
+ mismatch: "nodeKind",
249
+ view: viewType,
250
+ stored: undefined,
251
+ };
252
+ } else {
253
+ yield* getNodeDiscrepancies(identifier, viewSchema, storedSchema);
254
+ }
255
+ }
256
+
257
+ for (const [identifier, storedSchema] of stored.nodeSchema) {
258
+ if (!viewNodeSchema.has(identifier)) {
259
+ const storedType = getStoredNodeSchemaType(storedSchema);
260
+ yield {
261
+ identifier,
262
+ mismatch: "nodeKind",
263
+ view: undefined,
264
+ stored: storedType,
265
+ };
266
+ }
267
+ }
268
+ }
269
+
270
+ function* getNodeDiscrepancies(
271
+ identifier: TreeNodeSchemaIdentifier,
272
+ view: TreeNodeSchema,
273
+ stored: TreeNodeStoredSchema,
274
+ ): Iterable<Discrepancy> {
275
+ if (!doesNodeKindMatchStoredNodeKind(view.kind, getStoredNodeSchemaType(stored))) {
276
+ yield {
277
+ identifier,
278
+ mismatch: "nodeKind",
279
+ view: getViewNodeSchemaType(view),
280
+ stored: getStoredNodeSchemaType(stored),
281
+ };
282
+ return;
283
+ }
284
+
285
+ switch (view.kind) {
286
+ case NodeKind.Object: {
287
+ assert(
288
+ isObjectNodeSchema(view),
289
+ 0xbe9 /* schema with node kind of object must implement ObjectNodeSchema */,
290
+ );
291
+ const fields: SimpleKeyMap | undefined = view.flexKeyMap;
292
+ const differences = Array.from(
293
+ computeObjectNodeDiscrepancies(identifier, fields, stored as ObjectNodeStoredSchema),
294
+ );
295
+
296
+ if (differences.length > 0) {
297
+ yield {
298
+ identifier,
299
+ mismatch: "fields",
300
+ differences,
301
+ } satisfies NodeFieldsDiscrepancy;
302
+ }
303
+ break;
304
+ }
305
+ case NodeKind.Array: {
306
+ assert(
307
+ isArrayNodeSchema(view),
308
+ 0xbea /* schema with node kind of array must implement ArrayNodeSchema */,
309
+ );
310
+ const fields: SimpleKeyMap = new Map([
311
+ [
312
+ EmptyKey,
313
+ {
314
+ storedKey: EmptyKey,
315
+ schema: createFieldSchema(FieldKind.Optional, view.info),
316
+ },
317
+ ],
318
+ ]);
319
+
320
+ const differences = Array.from(
321
+ computeObjectNodeDiscrepancies(
322
+ identifier,
323
+ fields,
324
+ stored as ObjectNodeStoredSchema,
325
+ true,
326
+ ),
327
+ );
328
+
329
+ if (differences.length > 0) {
330
+ yield {
331
+ identifier,
332
+ mismatch: "fields",
333
+ differences,
334
+ } satisfies NodeFieldsDiscrepancy;
335
+ }
336
+ break;
337
+ }
338
+ case NodeKind.Map: {
339
+ assert(
340
+ isMapNodeSchema(view),
341
+ 0xbeb /* schema with node kind of map must implement MapNodeSchema */,
342
+ );
343
+
344
+ yield* getFieldDiscrepancies(
345
+ createFieldSchema(FieldKind.Optional, view.info),
346
+ (stored as MapNodeStoredSchema).mapFields,
347
+ identifier,
348
+ undefined,
349
+ );
350
+ break;
351
+ }
352
+ case NodeKind.Record: {
353
+ assert(
354
+ isRecordNodeSchema(view),
355
+ 0xbec /* schema with node kind of record must implement RecordNodeSchema */,
356
+ );
357
+
358
+ yield* getFieldDiscrepancies(
359
+ createFieldSchema(FieldKind.Optional, view.info),
360
+ (stored as MapNodeStoredSchema).mapFields,
361
+ identifier,
362
+ undefined,
363
+ );
364
+ break;
365
+ }
366
+ case NodeKind.Leaf: {
367
+ assert(
368
+ view instanceof LeafNodeSchema,
369
+ 0xbed /* schema with node kind of leaf must implement LeafNodeSchema */,
370
+ );
371
+ // TODO: leafKind seems like a bad name
372
+ const viewValue = view.leafKind;
373
+ const storedValue = (stored as LeafNodeStoredSchema).leafValue;
374
+ if (viewValue !== storedValue) {
375
+ yield {
376
+ identifier,
377
+ mismatch: "valueSchema",
378
+ view: viewValue,
379
+ stored: storedValue,
380
+ };
381
+ }
382
+ break;
383
+ }
384
+ default:
385
+ break;
386
+ }
387
+ }
388
+
389
+ /**
390
+ * Returns the allowed types that are not present in both the given view and stored schemas.
391
+ * It returns a tuple containing two arrays:
392
+ * 1. The first array contains the allowed types that are present in the view schema but not in the stored schema.
393
+ * 2. The second array contains the allowed types that are present in the stored schema but not in the view schema.
394
+ */
395
+ export function findExtraAllowedTypes(
396
+ viewAllowedTypes: readonly AnnotatedAllowedType<TreeNodeSchema>[],
397
+ storedAllowedTypes: TreeTypeSet,
398
+ ): [readonly AnnotatedAllowedType<TreeNodeSchema>[], TreeNodeSchemaIdentifier[]] {
399
+ const viewNodeSchemaIdentifiers = new Set(
400
+ viewAllowedTypes.map((value) => value.type.identifier),
401
+ );
402
+ const viewExtraneousAllowedTypes = [...viewAllowedTypes].filter(
403
+ (value) => !storedAllowedTypes.has(brand(value.type.identifier)),
404
+ );
405
+ const storedExtraneousAllowedTypes = [...storedAllowedTypes].filter(
406
+ (value) => !viewNodeSchemaIdentifiers.has(value),
407
+ );
408
+ return [viewExtraneousAllowedTypes, storedExtraneousAllowedTypes];
409
+ }
410
+
411
+ /**
412
+ * The function to track the discrepancies between a field view schema and a stored schema.
413
+ *
414
+ * @remarks
415
+ * This function yields discrepancies in the following cases:
416
+ * 1. If the view schema has allowed types that are not present in the stored schema.
417
+ * 2. If the stored schema has allowed types that are not present in the view schema.
418
+ * 3. If the field kind in the view schema is not compatible with the stored schema.
419
+ *
420
+ * This function does not recurse into the nodes of the view schema and only makes comparisons at the field level.
421
+ *
422
+ * @param keyOrRoot - If the key is missing, it indicates that this is the root field schema.
423
+ */
424
+ function* getFieldDiscrepancies(
425
+ view: FieldSchema,
426
+ stored: TreeFieldStoredSchema,
427
+ identifier: TreeNodeSchemaIdentifier | undefined,
428
+ fieldKey: FieldKey | undefined,
429
+ // TODO: This is a temporary workaround until the comparison logic is redesigned.
430
+ viewKindIsSequence = false,
431
+ ): Iterable<FieldDiscrepancy> {
432
+ assert(
433
+ view instanceof FieldSchemaAlpha,
434
+ 0xbee /* all field schema should be FieldSchemaAlpha */,
435
+ );
436
+ const [viewExtra, storedExtra] = findExtraAllowedTypes(
437
+ view.annotatedAllowedTypesNormalized.types,
438
+ stored.types,
439
+ );
440
+ if (viewExtra.length > 0 || storedExtra.length > 0) {
441
+ yield {
442
+ identifier,
443
+ fieldKey,
444
+ mismatch: "allowedTypes",
445
+ view: viewExtra,
446
+ stored: storedExtra,
447
+ } satisfies AllowedTypeDiscrepancy;
448
+ }
449
+
450
+ const viewKind =
451
+ convertFieldKind.get(view.kind) ??
452
+ fail(0xbef /* A conversion from a FieldKind to a FlexFieldKind should exist */);
453
+
454
+ // This checks if the field kind in the view schema is not compatible with the stored schema.
455
+ // We cannot detect if the view schema is a sequence using the kind property so it is passed in separately.
456
+ if (
457
+ (viewKindIsSequence && stored.kind !== "Sequence") ||
458
+ (!viewKindIsSequence && viewKind.identifier !== stored.kind)
459
+ ) {
460
+ yield {
461
+ identifier,
462
+ fieldKey,
463
+ mismatch: "fieldKind",
464
+ view: viewKind.identifier,
465
+ stored: stored.kind,
466
+ } satisfies FieldKindDiscrepancy;
467
+ }
468
+ }
469
+
470
+ /**
471
+ * Computes discrepancies between a view schema and a stored schema for nodes that are treated as object nodes in the stored schema.
472
+ * This includes both view object nodes and view array nodes.
473
+ *
474
+ * This function yields discrepancies in the following cases:
475
+ *
476
+ * 1. If the view schema has fields that are not present in the stored schema.
477
+ * 2. If the stored schema has fields that are not present in the view schema.
478
+ * 3. If the field kind or allowed types of a field in the view schema is not compatible with the stored schema.
479
+ *
480
+ * This function includes discrepancies within the common fields and their allowed types, but does NOT recurse to report and discrepancies within the node types referenced by those fields.
481
+ */
482
+ function* computeObjectNodeDiscrepancies(
483
+ identifier: TreeNodeSchemaIdentifier,
484
+ view: SimpleKeyMap,
485
+ stored: ObjectNodeStoredSchema,
486
+ viewKindIsSequence = false,
487
+ ): Iterable<FieldDiscrepancy> {
488
+ /**
489
+ * Similar to the logic used for tracking discrepancies between two node schemas, we will identify
490
+ * three types of differences:
491
+ * 1. Fields that exist in the view schema but not in the stored schema.
492
+ * 2. Fields that exist in both schemas but have different contents.
493
+ * 3. Fields that exist in the stored schema but not in the view schema.
494
+ *
495
+ * First, the view schema is iterated to track the first two types of differences.
496
+ * Then, the stored schema is iterated to find the third type.
497
+ */
498
+
499
+ const viewKeys = new Set<FieldKey>();
500
+
501
+ for (const [_, { storedKey: fieldKey, schema: fieldSchema }] of view) {
502
+ const storedSchema = stored.objectNodeFields.get(fieldKey);
503
+ viewKeys.add(fieldKey);
504
+
505
+ // If the view schema has a field that's not in the stored schema
506
+ if (storedSchema === undefined) {
507
+ const viewKind =
508
+ convertFieldKind.get(fieldSchema.kind) ??
509
+ fail(0xbf0 /* A conversion from a FieldKind to a FlexFieldKind should exist */);
510
+ yield {
511
+ identifier,
512
+ fieldKey,
513
+ mismatch: "fieldKind",
514
+ view: viewKind.identifier,
515
+ stored: storedEmptyFieldSchema.kind,
516
+ } satisfies FieldKindDiscrepancy;
517
+ } else {
518
+ yield* getFieldDiscrepancies(
519
+ fieldSchema,
520
+ storedSchema,
521
+ identifier,
522
+ fieldKey,
523
+ viewKindIsSequence,
524
+ );
525
+ }
526
+ }
527
+
528
+ for (const [fieldKey, schema] of stored.objectNodeFields) {
529
+ // If the stored schema has a field that's not in the view schema
530
+ if (!viewKeys.has(fieldKey)) {
531
+ if (schema.kind === forbiddenFieldKindIdentifier) {
532
+ // In the stored schema the field is explicitly forbidden.
533
+ // This has the same semantics of the field not being mentioned in the stored schema,
534
+ // and thus is compatible with the view schema which does not mention this field.
535
+ continue;
536
+ }
537
+ yield {
538
+ identifier,
539
+ fieldKey,
540
+ mismatch: "fieldKind",
541
+ view: storedEmptyFieldSchema.kind,
542
+ stored: schema.kind,
543
+ } satisfies FieldKindDiscrepancy;
544
+ }
545
+ }
546
+ }
547
+
548
+ /**
549
+ * A linear extension of a partially-ordered set of `T`s. See:
550
+ * https://en.wikipedia.org/wiki/Linear_extension
551
+ *
552
+ * The linear extension is represented as a lookup from each poset element to its index in the linear extension.
553
+ */
554
+ export type LinearExtension<T> = Map<T, number>;
555
+
556
+ /**
557
+ * A realizer for a partially-ordered set. See:
558
+ * https://en.wikipedia.org/wiki/Order_dimension
559
+ */
560
+ export type Realizer<T> = LinearExtension<T>[];
561
+
562
+ /**
563
+ * @privateRemarks
564
+ * TODO: Knowledge of specific field kinds is not appropriate for modular schema.
565
+ * This bit of field comparison should be dependency injected by default-schema if this comparison logic remains in modular-schema
566
+ * (this is analogous to what is done in comparison.ts).
567
+ */
568
+ const FieldKindIdentifiers = {
569
+ forbidden: brand<FieldKindIdentifier>("Forbidden"),
570
+ required: brand<FieldKindIdentifier>("Value"),
571
+ identifier: brand<FieldKindIdentifier>("Identifier"),
572
+ optional: brand<FieldKindIdentifier>("Optional"),
573
+ sequence: brand<FieldKindIdentifier>("Sequence"),
574
+ };
575
+
576
+ /**
577
+ * A realizer for the partial order of field kind relaxability.
578
+ *
579
+ * It seems extremely likely that this partial order will remain dimension 2 over time (i.e. the set of allowed relaxations can be visualized
580
+ * with a [dominance drawing](https://en.wikipedia.org/wiki/Dominance_drawing)), so this strategy allows efficient comarison between field kinds
581
+ * without excessive casework.
582
+ *
583
+ * Hasse diagram for the partial order is shown below (lower fields can be relaxed to higher fields):
584
+ * ```
585
+ * sequence
586
+ * |
587
+ * optional
588
+ * | \
589
+ * required forbidden
590
+ * |
591
+ * identifier
592
+ * ```
593
+ */
594
+ export const fieldRealizer: Realizer<FieldKindIdentifier> = [
595
+ [
596
+ FieldKindIdentifiers.forbidden,
597
+ FieldKindIdentifiers.identifier,
598
+ FieldKindIdentifiers.required,
599
+ FieldKindIdentifiers.optional,
600
+ FieldKindIdentifiers.sequence,
601
+ ],
602
+ [
603
+ FieldKindIdentifiers.identifier,
604
+ FieldKindIdentifiers.required,
605
+ FieldKindIdentifiers.forbidden,
606
+ FieldKindIdentifiers.optional,
607
+ FieldKindIdentifiers.sequence,
608
+ ],
609
+ ].map((extension) => new Map(extension.map((identifier, index) => [identifier, index])));
610
+
611
+ export const PosetComparisonResult = {
612
+ Less: "<",
613
+ Greater: ">",
614
+ Equal: "=",
615
+ Incomparable: "||",
616
+ } as const;
617
+ type PosetComparisonResult =
618
+ (typeof PosetComparisonResult)[keyof typeof PosetComparisonResult];
619
+
620
+ /**
621
+ * TODO: This is used by SchemaCompatibilityTester, revisit it during redesign and document
622
+ */
623
+ export function comparePosetElements<T>(
624
+ a: T,
625
+ b: T,
626
+ realizer: Realizer<T>,
627
+ ): PosetComparisonResult {
628
+ let hasLessThanResult = false;
629
+ let hasGreaterThanResult = false;
630
+ for (const extension of realizer) {
631
+ const aIndex = extension.get(a);
632
+ const bIndex = extension.get(b);
633
+ assert(aIndex !== undefined && bIndex !== undefined, 0xbf1 /* Invalid realizer */);
634
+ if (aIndex < bIndex) {
635
+ hasLessThanResult = true;
636
+ } else if (aIndex > bIndex) {
637
+ hasGreaterThanResult = true;
638
+ }
639
+ }
640
+
641
+ return hasLessThanResult
642
+ ? hasGreaterThanResult
643
+ ? PosetComparisonResult.Incomparable
644
+ : PosetComparisonResult.Less
645
+ : hasGreaterThanResult
646
+ ? PosetComparisonResult.Greater
647
+ : PosetComparisonResult.Equal;
648
+ }