@fluidframework/tree 2.33.1 → 2.40.0-336023

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 (315) hide show
  1. package/.vscode/settings.json +2 -0
  2. package/api-report/tree.alpha.api.md +120 -50
  3. package/api-report/tree.beta.api.md +31 -27
  4. package/api-report/tree.legacy.alpha.api.md +24 -23
  5. package/api-report/tree.legacy.public.api.md +24 -23
  6. package/api-report/tree.public.api.md +24 -23
  7. package/dist/alpha.d.ts +16 -1
  8. package/dist/beta.d.ts +2 -0
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/internalTypes.d.ts +0 -1
  13. package/dist/internalTypes.d.ts.map +1 -1
  14. package/dist/internalTypes.js.map +1 -1
  15. package/dist/jsonDomainSchema.d.ts +2 -2
  16. package/dist/jsonDomainSchema.js +2 -2
  17. package/dist/jsonDomainSchema.js.map +1 -1
  18. package/dist/legacy.d.ts +2 -0
  19. package/dist/packageVersion.d.ts +1 -1
  20. package/dist/packageVersion.d.ts.map +1 -1
  21. package/dist/packageVersion.js +1 -1
  22. package/dist/packageVersion.js.map +1 -1
  23. package/dist/public.d.ts +2 -0
  24. package/dist/serializableDomainSchema.d.ts +3 -3
  25. package/dist/serializableDomainSchema.js +2 -2
  26. package/dist/serializableDomainSchema.js.map +1 -1
  27. package/dist/shared-tree/independentView.d.ts +1 -1
  28. package/dist/shared-tree/independentView.js.map +1 -1
  29. package/dist/shared-tree/index.d.ts +3 -2
  30. package/dist/shared-tree/index.d.ts.map +1 -1
  31. package/dist/shared-tree/index.js +4 -4
  32. package/dist/shared-tree/index.js.map +1 -1
  33. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  34. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  35. package/dist/shared-tree/schematizeTree.js +2 -3
  36. package/dist/shared-tree/schematizeTree.js.map +1 -1
  37. package/dist/shared-tree/schematizingTreeView.d.ts +3 -3
  38. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  39. package/dist/shared-tree/schematizingTreeView.js +4 -4
  40. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  41. package/dist/shared-tree/{treeApi.d.ts → tree.d.ts} +34 -34
  42. package/dist/shared-tree/tree.d.ts.map +1 -0
  43. package/dist/shared-tree/{treeApi.js → tree.js} +6 -6
  44. package/dist/shared-tree/tree.js.map +1 -0
  45. package/dist/shared-tree/{treeApiAlpha.d.ts → treeAlpha.d.ts} +22 -14
  46. package/dist/shared-tree/treeAlpha.d.ts.map +1 -0
  47. package/dist/shared-tree/{treeApiAlpha.js → treeAlpha.js} +4 -3
  48. package/dist/shared-tree/treeAlpha.js.map +1 -0
  49. package/dist/simple-tree/api/conciseTree.d.ts +1 -1
  50. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  51. package/dist/simple-tree/api/configuration.d.ts +177 -0
  52. package/dist/simple-tree/api/configuration.d.ts.map +1 -0
  53. package/dist/simple-tree/api/configuration.js +163 -0
  54. package/dist/simple-tree/api/configuration.js.map +1 -0
  55. package/dist/simple-tree/api/getJsonSchema.js +2 -2
  56. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  57. package/dist/simple-tree/api/index.d.ts +7 -4
  58. package/dist/simple-tree/api/index.d.ts.map +1 -1
  59. package/dist/simple-tree/api/index.js +8 -7
  60. package/dist/simple-tree/api/index.js.map +1 -1
  61. package/dist/simple-tree/api/{view.d.ts → schemaCompatibilityTester.d.ts} +8 -10
  62. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -0
  63. package/dist/simple-tree/api/{view.js → schemaCompatibilityTester.js} +9 -9
  64. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -0
  65. package/dist/simple-tree/api/schemaFactory.d.ts +16 -10
  66. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  67. package/dist/simple-tree/api/schemaFactory.js +20 -12
  68. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  69. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +12 -6
  70. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  71. package/dist/simple-tree/api/schemaFactoryAlpha.js +2 -2
  72. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  73. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +67 -4
  74. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  75. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  76. package/dist/simple-tree/api/schemaFromSimple.d.ts +1 -1
  77. package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  78. package/dist/simple-tree/api/schemaFromSimple.js +1 -1
  79. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  80. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts +1 -1
  81. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  82. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  83. package/dist/simple-tree/api/storedSchema.d.ts +3 -3
  84. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  85. package/dist/simple-tree/api/storedSchema.js +3 -2
  86. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  87. package/dist/simple-tree/api/tree.d.ts +5 -174
  88. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  89. package/dist/simple-tree/api/tree.js +1 -156
  90. package/dist/simple-tree/api/tree.js.map +1 -1
  91. package/{lib/simple-tree/api/treeApiBeta.d.ts → dist/simple-tree/api/treeBeta.d.ts} +13 -5
  92. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -0
  93. package/dist/simple-tree/api/{treeApiBeta.js → treeBeta.js} +5 -4
  94. package/dist/simple-tree/api/treeBeta.js.map +1 -0
  95. package/dist/simple-tree/api/typesUnsafe.d.ts +4 -9
  96. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  97. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  98. package/dist/simple-tree/arrayNode.d.ts +2 -2
  99. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  100. package/dist/simple-tree/arrayNode.js +3 -2
  101. package/dist/simple-tree/arrayNode.js.map +1 -1
  102. package/dist/simple-tree/arrayNodeTypes.d.ts +3 -3
  103. package/dist/simple-tree/arrayNodeTypes.d.ts.map +1 -1
  104. package/dist/simple-tree/arrayNodeTypes.js.map +1 -1
  105. package/dist/simple-tree/index.d.ts +3 -3
  106. package/dist/simple-tree/index.d.ts.map +1 -1
  107. package/dist/simple-tree/index.js +2 -2
  108. package/dist/simple-tree/index.js.map +1 -1
  109. package/dist/simple-tree/mapNode.d.ts +2 -2
  110. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  111. package/dist/simple-tree/mapNode.js +1 -1
  112. package/dist/simple-tree/mapNode.js.map +1 -1
  113. package/dist/simple-tree/mapNodeTypes.d.ts +3 -3
  114. package/dist/simple-tree/mapNodeTypes.d.ts.map +1 -1
  115. package/dist/simple-tree/mapNodeTypes.js.map +1 -1
  116. package/dist/simple-tree/objectNode.d.ts +18 -5
  117. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  118. package/dist/simple-tree/objectNode.js +4 -3
  119. package/dist/simple-tree/objectNode.js.map +1 -1
  120. package/dist/simple-tree/objectNodeTypes.d.ts +4 -4
  121. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
  122. package/dist/simple-tree/objectNodeTypes.js.map +1 -1
  123. package/dist/simple-tree/schemaTypes.d.ts +163 -13
  124. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  125. package/dist/simple-tree/schemaTypes.js +107 -8
  126. package/dist/simple-tree/schemaTypes.js.map +1 -1
  127. package/dist/simple-tree/treeNodeValid.js +2 -2
  128. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  129. package/dist/tableSchema.d.ts +197 -86
  130. package/dist/tableSchema.d.ts.map +1 -1
  131. package/dist/tableSchema.js +100 -45
  132. package/dist/tableSchema.js.map +1 -1
  133. package/dist/util/typeUtils.d.ts +1 -1
  134. package/dist/util/typeUtils.js.map +1 -1
  135. package/lib/alpha.d.ts +16 -1
  136. package/lib/beta.d.ts +2 -0
  137. package/lib/index.d.ts +2 -2
  138. package/lib/index.d.ts.map +1 -1
  139. package/lib/index.js.map +1 -1
  140. package/lib/internalTypes.d.ts +0 -1
  141. package/lib/internalTypes.d.ts.map +1 -1
  142. package/lib/internalTypes.js.map +1 -1
  143. package/lib/jsonDomainSchema.d.ts +2 -2
  144. package/lib/jsonDomainSchema.js +2 -2
  145. package/lib/jsonDomainSchema.js.map +1 -1
  146. package/lib/legacy.d.ts +2 -0
  147. package/lib/packageVersion.d.ts +1 -1
  148. package/lib/packageVersion.d.ts.map +1 -1
  149. package/lib/packageVersion.js +1 -1
  150. package/lib/packageVersion.js.map +1 -1
  151. package/lib/public.d.ts +2 -0
  152. package/lib/serializableDomainSchema.d.ts +3 -3
  153. package/lib/serializableDomainSchema.js +2 -2
  154. package/lib/serializableDomainSchema.js.map +1 -1
  155. package/lib/shared-tree/independentView.d.ts +1 -1
  156. package/lib/shared-tree/independentView.js.map +1 -1
  157. package/lib/shared-tree/index.d.ts +3 -2
  158. package/lib/shared-tree/index.d.ts.map +1 -1
  159. package/lib/shared-tree/index.js +2 -2
  160. package/lib/shared-tree/index.js.map +1 -1
  161. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  162. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  163. package/lib/shared-tree/schematizeTree.js +2 -3
  164. package/lib/shared-tree/schematizeTree.js.map +1 -1
  165. package/lib/shared-tree/schematizingTreeView.d.ts +3 -3
  166. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  167. package/lib/shared-tree/schematizingTreeView.js +5 -5
  168. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  169. package/lib/shared-tree/{treeApi.d.ts → tree.d.ts} +34 -34
  170. package/lib/shared-tree/tree.d.ts.map +1 -0
  171. package/lib/shared-tree/{treeApi.js → tree.js} +5 -5
  172. package/lib/shared-tree/tree.js.map +1 -0
  173. package/lib/shared-tree/{treeApiAlpha.d.ts → treeAlpha.d.ts} +22 -14
  174. package/lib/shared-tree/treeAlpha.d.ts.map +1 -0
  175. package/lib/shared-tree/{treeApiAlpha.js → treeAlpha.js} +4 -3
  176. package/lib/shared-tree/treeAlpha.js.map +1 -0
  177. package/lib/simple-tree/api/conciseTree.d.ts +1 -1
  178. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  179. package/lib/simple-tree/api/configuration.d.ts +177 -0
  180. package/lib/simple-tree/api/configuration.d.ts.map +1 -0
  181. package/lib/simple-tree/api/configuration.js +157 -0
  182. package/lib/simple-tree/api/configuration.js.map +1 -0
  183. package/lib/simple-tree/api/getJsonSchema.js +1 -1
  184. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  185. package/lib/simple-tree/api/index.d.ts +7 -4
  186. package/lib/simple-tree/api/index.d.ts.map +1 -1
  187. package/lib/simple-tree/api/index.js +4 -3
  188. package/lib/simple-tree/api/index.js.map +1 -1
  189. package/lib/simple-tree/api/{view.d.ts → schemaCompatibilityTester.d.ts} +8 -10
  190. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -0
  191. package/lib/simple-tree/api/{view.js → schemaCompatibilityTester.js} +7 -7
  192. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -0
  193. package/lib/simple-tree/api/schemaFactory.d.ts +16 -10
  194. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  195. package/lib/simple-tree/api/schemaFactory.js +20 -12
  196. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  197. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +12 -6
  198. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  199. package/lib/simple-tree/api/schemaFactoryAlpha.js +2 -2
  200. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  201. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +67 -4
  202. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  203. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  204. package/lib/simple-tree/api/schemaFromSimple.d.ts +1 -1
  205. package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  206. package/lib/simple-tree/api/schemaFromSimple.js +1 -1
  207. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  208. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts +1 -1
  209. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  210. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  211. package/lib/simple-tree/api/storedSchema.d.ts +3 -3
  212. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  213. package/lib/simple-tree/api/storedSchema.js +3 -2
  214. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  215. package/lib/simple-tree/api/tree.d.ts +5 -174
  216. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  217. package/lib/simple-tree/api/tree.js +0 -152
  218. package/lib/simple-tree/api/tree.js.map +1 -1
  219. package/{dist/simple-tree/api/treeApiBeta.d.ts → lib/simple-tree/api/treeBeta.d.ts} +13 -5
  220. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -0
  221. package/lib/simple-tree/api/{treeApiBeta.js → treeBeta.js} +5 -4
  222. package/lib/simple-tree/api/treeBeta.js.map +1 -0
  223. package/lib/simple-tree/api/typesUnsafe.d.ts +4 -9
  224. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  225. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  226. package/lib/simple-tree/arrayNode.d.ts +2 -2
  227. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  228. package/lib/simple-tree/arrayNode.js +4 -3
  229. package/lib/simple-tree/arrayNode.js.map +1 -1
  230. package/lib/simple-tree/arrayNodeTypes.d.ts +3 -3
  231. package/lib/simple-tree/arrayNodeTypes.d.ts.map +1 -1
  232. package/lib/simple-tree/arrayNodeTypes.js.map +1 -1
  233. package/lib/simple-tree/index.d.ts +3 -3
  234. package/lib/simple-tree/index.d.ts.map +1 -1
  235. package/lib/simple-tree/index.js +1 -1
  236. package/lib/simple-tree/index.js.map +1 -1
  237. package/lib/simple-tree/mapNode.d.ts +2 -2
  238. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  239. package/lib/simple-tree/mapNode.js +2 -2
  240. package/lib/simple-tree/mapNode.js.map +1 -1
  241. package/lib/simple-tree/mapNodeTypes.d.ts +3 -3
  242. package/lib/simple-tree/mapNodeTypes.d.ts.map +1 -1
  243. package/lib/simple-tree/mapNodeTypes.js.map +1 -1
  244. package/lib/simple-tree/objectNode.d.ts +18 -5
  245. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  246. package/lib/simple-tree/objectNode.js +5 -4
  247. package/lib/simple-tree/objectNode.js.map +1 -1
  248. package/lib/simple-tree/objectNodeTypes.d.ts +4 -4
  249. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
  250. package/lib/simple-tree/objectNodeTypes.js.map +1 -1
  251. package/lib/simple-tree/schemaTypes.d.ts +163 -13
  252. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  253. package/lib/simple-tree/schemaTypes.js +96 -8
  254. package/lib/simple-tree/schemaTypes.js.map +1 -1
  255. package/lib/simple-tree/treeNodeValid.js +2 -2
  256. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  257. package/lib/tableSchema.d.ts +197 -86
  258. package/lib/tableSchema.d.ts.map +1 -1
  259. package/lib/tableSchema.js +100 -45
  260. package/lib/tableSchema.js.map +1 -1
  261. package/lib/util/typeUtils.d.ts +1 -1
  262. package/lib/util/typeUtils.js.map +1 -1
  263. package/package.json +20 -20
  264. package/src/index.ts +17 -1
  265. package/src/internalTypes.ts +0 -2
  266. package/src/jsonDomainSchema.ts +2 -2
  267. package/src/packageVersion.ts +1 -1
  268. package/src/serializableDomainSchema.ts +3 -3
  269. package/src/shared-tree/independentView.ts +1 -1
  270. package/src/shared-tree/index.ts +3 -6
  271. package/src/shared-tree/schematizeTree.ts +5 -5
  272. package/src/shared-tree/schematizingTreeView.ts +11 -8
  273. package/src/shared-tree/{treeApi.ts → tree.ts} +51 -51
  274. package/src/shared-tree/{treeApiAlpha.ts → treeAlpha.ts} +22 -13
  275. package/src/simple-tree/api/conciseTree.ts +1 -1
  276. package/src/simple-tree/api/configuration.ts +353 -0
  277. package/src/simple-tree/api/getJsonSchema.ts +1 -1
  278. package/src/simple-tree/api/index.ts +21 -15
  279. package/src/simple-tree/api/{view.ts → schemaCompatibilityTester.ts} +8 -15
  280. package/src/simple-tree/api/schemaFactory.ts +130 -19
  281. package/src/simple-tree/api/schemaFactoryAlpha.ts +7 -5
  282. package/src/simple-tree/api/schemaFactoryRecursive.ts +102 -38
  283. package/src/simple-tree/api/schemaFromSimple.ts +2 -2
  284. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +1 -1
  285. package/src/simple-tree/api/storedSchema.ts +8 -4
  286. package/src/simple-tree/api/tree.ts +13 -354
  287. package/src/simple-tree/api/{treeApiBeta.ts → treeBeta.ts} +17 -5
  288. package/src/simple-tree/api/typesUnsafe.ts +15 -11
  289. package/src/simple-tree/arrayNode.ts +10 -5
  290. package/src/simple-tree/arrayNodeTypes.ts +8 -7
  291. package/src/simple-tree/index.ts +17 -1
  292. package/src/simple-tree/mapNode.ts +11 -3
  293. package/src/simple-tree/mapNodeTypes.ts +10 -7
  294. package/src/simple-tree/objectNode.ts +39 -15
  295. package/src/simple-tree/objectNodeTypes.ts +9 -5
  296. package/src/simple-tree/schemaTypes.ts +353 -25
  297. package/src/simple-tree/treeNodeValid.ts +2 -2
  298. package/src/tableSchema.ts +749 -445
  299. package/src/util/typeUtils.ts +1 -1
  300. package/dist/shared-tree/treeApi.d.ts.map +0 -1
  301. package/dist/shared-tree/treeApi.js.map +0 -1
  302. package/dist/shared-tree/treeApiAlpha.d.ts.map +0 -1
  303. package/dist/shared-tree/treeApiAlpha.js.map +0 -1
  304. package/dist/simple-tree/api/treeApiBeta.d.ts.map +0 -1
  305. package/dist/simple-tree/api/treeApiBeta.js.map +0 -1
  306. package/dist/simple-tree/api/view.d.ts.map +0 -1
  307. package/dist/simple-tree/api/view.js.map +0 -1
  308. package/lib/shared-tree/treeApi.d.ts.map +0 -1
  309. package/lib/shared-tree/treeApi.js.map +0 -1
  310. package/lib/shared-tree/treeApiAlpha.d.ts.map +0 -1
  311. package/lib/shared-tree/treeApiAlpha.js.map +0 -1
  312. package/lib/simple-tree/api/treeApiBeta.d.ts.map +0 -1
  313. package/lib/simple-tree/api/treeApiBeta.js.map +0 -1
  314. package/lib/simple-tree/api/view.d.ts.map +0 -1
  315. package/lib/simple-tree/api/view.js.map +0 -1
@@ -12,6 +12,8 @@ import {
12
12
  } from "./schemaFactory.js";
13
13
  import type {
14
14
  ImplicitAllowedTypes,
15
+ ImplicitAnnotatedAllowedTypes,
16
+ ImplicitAnnotatedFieldSchema,
15
17
  ImplicitFieldSchema,
16
18
  NodeSchemaOptions,
17
19
  } from "../schemaTypes.js";
@@ -56,9 +58,9 @@ export class SchemaFactoryAlpha<
56
58
  * @param fields - Schema for fields of the object node's schema. Defines what children can be placed under each key.
57
59
  * @param options - Additional options for the schema.
58
60
  */
59
- public override object<
61
+ public objectAlpha<
60
62
  const Name extends TName,
61
- const T extends RestrictiveStringRecord<ImplicitFieldSchema>,
63
+ const T extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>,
62
64
  const TCustomMetadata = unknown,
63
65
  >(
64
66
  name: Name,
@@ -121,7 +123,7 @@ export class SchemaFactoryAlpha<
121
123
  Pick<ObjectNodeSchema, "fields"> {
122
124
  // TODO: syntax highting is vs code is broken here. Don't trust it. Use the compiler instead.
123
125
  type TScopedName = ScopedSchemaName<TScope, Name>;
124
- return this.object(
126
+ return this.objectAlpha(
125
127
  name,
126
128
  t as T & RestrictiveStringRecord<ImplicitFieldSchema>,
127
129
  options,
@@ -184,7 +186,7 @@ export class SchemaFactoryAlpha<
184
186
  */
185
187
  public mapAlpha<
186
188
  Name extends TName,
187
- const T extends ImplicitAllowedTypes,
189
+ const T extends ImplicitAnnotatedAllowedTypes,
188
190
  const TCustomMetadata = unknown,
189
191
  >(
190
192
  name: Name,
@@ -228,7 +230,7 @@ export class SchemaFactoryAlpha<
228
230
  */
229
231
  public arrayAlpha<
230
232
  const Name extends TName,
231
- const T extends ImplicitAllowedTypes,
233
+ const T extends ImplicitAnnotatedAllowedTypes,
232
234
  const TCustomMetadata = unknown,
233
235
  >(
234
236
  name: Name,
@@ -14,13 +14,7 @@ import {
14
14
  type ImplicitFieldSchema,
15
15
  type InsertableTreeNodeFromImplicitAllowedTypes,
16
16
  } from "../schemaTypes.js";
17
- import type {
18
- NodeKind,
19
- TreeNodeSchemaClass,
20
- TreeNodeSchema,
21
- WithType,
22
- TreeNode,
23
- } from "../core/index.js";
17
+ import type { NodeKind, TreeNodeSchema, WithType, TreeNode } from "../core/index.js";
24
18
  import type { FieldSchemaAlphaUnsafe, System_Unsafe } from "./typesUnsafe.js";
25
19
 
26
20
  export function createFieldSchemaUnsafe<
@@ -33,7 +27,11 @@ export function createFieldSchemaUnsafe<
33
27
  props?: FieldProps<TCustomMetadata>,
34
28
  ): FieldSchemaAlphaUnsafe<Kind, Types, TCustomMetadata> {
35
29
  // At runtime, we still want this to be a FieldSchema instance, but we can't satisfy its extends clause, so just return it as an FieldSchemaUnsafe
36
- return createFieldSchema(kind, allowedTypes as ImplicitAllowedTypes & Types, props);
30
+ return createFieldSchema(
31
+ kind,
32
+ allowedTypes as ImplicitAllowedTypes & Types,
33
+ props,
34
+ ) as FieldSchemaAlphaUnsafe<Kind, Types, TCustomMetadata>;
37
35
  }
38
36
 
39
37
  /**
@@ -159,37 +157,103 @@ export function createFieldSchemaUnsafe<
159
157
  */
160
158
  export type ValidateRecursiveSchema<
161
159
  // Recursive types should always be using TreeNodeSchemaClass (not TreeNodeSchemaNonClass) as thats part of the requirements for the type to work across compilation boundaries correctly.
162
- T extends TreeNodeSchemaClass<
163
- // Name: This validator places no restrictions on the name other than that it's a string (as required by TreeNodeSchemaClass).
164
- string,
165
- // NodeKind: These are the NodeKinds which currently can be used recursively.
166
- NodeKind.Array | NodeKind.Map | NodeKind.Object,
167
- // TNode: The produced node API. This is pretty minimal validation: more could be added if similar to how TInsertable works below if needed.
168
- TreeNode & WithType<T["identifier"], T["kind"]>,
169
- // TInsertable: What can be passed to the constructor. This should be enough to catch most issues with incorrect schema.
170
- // These match whats defined in the recursive methods on `SchemaFactory` except they do not use `Unenforced`.
171
- {
172
- [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema>
173
- ? InsertableObjectFromSchemaRecord<T["info"]>
174
- : unknown;
175
- [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes
176
- ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>>
177
- : unknown;
178
- [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes
179
- ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]>
180
- : unknown;
181
- }[T["kind"]],
182
- // ImplicitlyConstructable: recursive types are currently not implicitly constructable.
183
- false,
184
- // Info: What's passed to the method to create the schema. Constraining these here should be about as effective as if the actual constraints existed on the actual method itself.
185
- {
186
- [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
187
- [NodeKind.Array]: ImplicitAllowedTypes;
188
- [NodeKind.Map]: ImplicitAllowedTypes;
189
- }[T["kind"]]
190
- >,
160
+ T extends ValidateRecursiveSchemaTemplate<T>,
191
161
  > = true;
192
162
 
163
+ /**
164
+ * Validation logic used by {@link ValidateRecursiveSchema}.
165
+ * @system @public
166
+ */
167
+ export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<
168
+ // Name: This validator places no restrictions on the name other than that it's a string (as required by TreeNodeSchemaClass).
169
+ string,
170
+ // NodeKind: These are the NodeKinds which currently can be used recursively.
171
+ NodeKind.Array | NodeKind.Map | NodeKind.Object,
172
+ // TNode: The produced node API. This is pretty minimal validation: more could be added if similar to how TInsertable works below if needed.
173
+ TreeNode & WithType<T["identifier"], T["kind"]>,
174
+ // TInsertable: What can be passed to the constructor. This should be enough to catch most issues with incorrect schema.
175
+ // These match whats defined in the recursive methods on `SchemaFactory` except they do not use `Unenforced`.
176
+ {
177
+ [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema>
178
+ ? InsertableObjectFromSchemaRecord<T["info"]>
179
+ : unknown;
180
+ [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes
181
+ ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>>
182
+ : unknown;
183
+ [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes
184
+ ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]>
185
+ : unknown;
186
+ [NodeKind.Leaf]: unknown;
187
+ }[T["kind"]],
188
+ // ImplicitlyConstructable: recursive types are currently not implicitly constructable.
189
+ false,
190
+ // Info: What's passed to the method to create the schema. Constraining these here should be about as effective as if the actual constraints existed on the actual method itself.
191
+ {
192
+ [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
193
+ [NodeKind.Array]: ImplicitAllowedTypes;
194
+ [NodeKind.Map]: ImplicitAllowedTypes;
195
+ [NodeKind.Leaf]: unknown;
196
+ }[T["kind"]]
197
+ >;
198
+
199
+ /**
200
+ * Workaround for "Type instantiation is excessively deep and possibly infinite.ts" errors.
201
+ * @remarks
202
+ *
203
+ * Generally this workaround should be avoided if possible,
204
+ * especially for exported types, as it is likely to result in issues when exporting or importing schema where the user will be forced to use the workaround as well.
205
+ * This is particularly problematic since in some cases it may not be possible for the user to replicate the pattern.
206
+ * Additionally, which cases hit these limits may vary based on TypeScript version and implementation details of this library.
207
+ *
208
+ * This workaround is provided and documented as a last resort to be able to keep an app compiling.
209
+ * Future version of SharedTree should provide schema type erasure functionality as a better alternative for most cases.
210
+ *
211
+ * When TypeScript gives the error "Error (TS2589) Type instantiation is excessively deep and possibly infinite." on the invocation of `ValidateRecursiveSchema`
212
+ * for a large schema, it can sometimes be worked around by repeating the usage of the type multiple times.
213
+ * This works because the TypeScript compiler caches some of the intermediate results from the first usage, and thus can get further on the second.
214
+ *
215
+ * This utility can be referenced when applying this pattern.
216
+ * For recursive types this can be used directly:
217
+ *
218
+ * ```typescript
219
+ * {
220
+ * // @ts-expect-error Recursion limit
221
+ * type _check1 = FixRecursiveRecursionLimit<typeof LargeType>;
222
+ * type _check2 = FixRecursiveRecursionLimit<typeof LargeType>;
223
+ * type _check3 = ValidateRecursiveSchemaTemplate<typeof LargeType>;
224
+ * }
225
+ * ```
226
+ *
227
+ * For non-recursive types, they can be ported to the more flexible recursive APIs and use the pattern above.
228
+ *
229
+ * Non-recursive types can also use this workaround by making a duplicate copy of the problematic schema written using the recursive APIs.
230
+ * Then this pattern can be applied to the duplicate copy.
231
+ *
232
+ * ```typescript
233
+ * // Workaround TypeScript recursion limit
234
+ * {
235
+ * class LargeUnionObjectNode_Fix extends schema.objectRecursive("ObjectNode", {
236
+ * x: largeUnion,
237
+ * }) {}
238
+ *
239
+ * // @ts-expect-error Recursion limit
240
+ * allowUnused<FixRecursiveRecursionLimit<typeof LargeUnionObjectNode_Fix>>();
241
+ * allowUnused<FixRecursiveRecursionLimit<typeof LargeUnionObjectNode_Fix>>();
242
+ * allowUnused<ValidateRecursiveSchema<typeof LargeUnionObjectNode_Fix>>();
243
+ * }
244
+ *
245
+ * // Fails to compile without the above workaround.
246
+ * class LargeUnionObjectNode extends schema.object("ObjectNode", { x: largeUnion }) {}
247
+ * ```
248
+ * @privateRemarks
249
+ * Using this is real sketchy, and leads to a lot of issues (errors which depend on how the schema is compiled, making different build setups produce different results and complicating exports).
250
+ * This is being kept as internal for now: if a customer really needs it, we have this as a documented workaround, but it would be much better to find an alternative solution before using this one.
251
+ * This uses ValidateRecursiveSchemaTemplate since it was found to evaluate enough of the type to work.
252
+ * @internal
253
+ */
254
+ export type FixRecursiveRecursionLimit<T extends TreeNodeSchema> =
255
+ T extends ValidateRecursiveSchemaTemplate<T> ? undefined : undefined;
256
+
193
257
  /**
194
258
  * Does nothing with the provided value, but appears to use it to make unused locals warnings and errors go away.
195
259
  *
@@ -215,7 +279,7 @@ export function allowUnused<T>(t?: T): void {}
215
279
  *
216
280
  * This type always evaluates to `undefined` to ensure the dummy export (which doesn't exist at runtime) is typed correctly.
217
281
  *
218
- * [TypeScript Issue 59550](https://github.com/microsoft/TypeScript/issues/59550) tracks a suggestion which would make this workaround unnecessary.
282
+ * {@link https://github.com/microsoft/TypeScript/issues/59550|TypeScript Issue 59550} tracks a suggestion which would make this workaround unnecessary.
219
283
  *
220
284
  * @example Usage
221
285
  * Since recursive type handling in TypeScript is order dependent, putting just the right kind of usages of the type before the declarations can cause it to not hit this error.
@@ -18,7 +18,7 @@ import type {
18
18
  SimpleTreeSchema,
19
19
  } from "../simpleSchema.js";
20
20
  import { SchemaFactoryAlpha } from "./schemaFactoryAlpha.js";
21
- import type { TreeSchema } from "./tree.js";
21
+ import type { TreeSchema } from "./configuration.js";
22
22
 
23
23
  const factory = new SchemaFactoryAlpha(undefined);
24
24
 
@@ -100,7 +100,7 @@ function generateNode(
100
100
  }
101
101
  // Here allowUnknownOptionalFields is implicitly defaulting. This is a subjective policy choice:
102
102
  // users of this code are expected to handle what ever choice this code makes for cases like this.
103
- return factory.object(id, fields, { metadata: schema.metadata });
103
+ return factory.objectAlpha(id, fields, { metadata: schema.metadata });
104
104
  }
105
105
  case NodeKind.Array:
106
106
  return factory.arrayAlpha(
@@ -26,7 +26,7 @@ import type {
26
26
  SimpleMapNodeSchema,
27
27
  } from "../simpleSchema.js";
28
28
  import { NodeKind, type TreeNodeSchema } from "../core/index.js";
29
- import type { TreeSchema } from "./tree.js";
29
+ import type { TreeSchema } from "./configuration.js";
30
30
  import type { TreeSchemaEncodingOptions } from "./getJsonSchema.js";
31
31
  import { ObjectNodeSchema } from "../objectNodeTypes.js";
32
32
  import { ArrayNodeSchema } from "../arrayNodeTypes.js";
@@ -13,10 +13,10 @@ import {
13
13
  // eslint-disable-next-line import/no-internal-modules
14
14
  import type { Format } from "../../feature-libraries/schema-index/index.js";
15
15
  import type { JsonCompatible } from "../../util/index.js";
16
- import type { ImplicitFieldSchema } from "../schemaTypes.js";
16
+ import { normalizeFieldSchema, type ImplicitFieldSchema } from "../schemaTypes.js";
17
17
  import { toStoredSchema } from "../toStoredSchema.js";
18
18
  import type { SchemaCompatibilityStatus } from "./tree.js";
19
- import { ViewSchema } from "./view.js";
19
+ import { SchemaCompatibilityTester } from "./schemaCompatibilityTester.js";
20
20
 
21
21
  /**
22
22
  * Dumps the "persisted" schema subset of the provided `schema` into a deterministic JSON-compatible, semi-human-readable, but unspecified format.
@@ -91,7 +91,11 @@ export function comparePersistedSchema(
91
91
  ): SchemaCompatibilityStatus {
92
92
  const schemaCodec = makeSchemaCodec(options);
93
93
  const stored = schemaCodec.decode(persisted as Format);
94
- const viewSchema = new ViewSchema(defaultSchemaPolicy, {}, view);
94
+ const viewSchema = new SchemaCompatibilityTester(
95
+ defaultSchemaPolicy,
96
+ {},
97
+ normalizeFieldSchema(view),
98
+ );
95
99
  return comparePersistedSchemaInternal(stored, viewSchema, canInitialize);
96
100
  }
97
101
 
@@ -101,7 +105,7 @@ export function comparePersistedSchema(
101
105
  */
102
106
  export function comparePersistedSchemaInternal(
103
107
  stored: TreeStoredSchema,
104
- viewSchema: ViewSchema,
108
+ viewSchema: SchemaCompatibilityTester,
105
109
  canInitialize: boolean,
106
110
  ): SchemaCompatibilityStatus {
107
111
  return {