@fluidframework/tree 2.32.0 → 2.33.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 (339) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/api-report/tree.alpha.api.md +169 -192
  3. package/api-report/tree.beta.api.md +135 -164
  4. package/api-report/tree.legacy.alpha.api.md +138 -167
  5. package/api-report/tree.legacy.public.api.md +135 -164
  6. package/api-report/tree.public.api.md +135 -164
  7. package/dist/alpha.d.ts +3 -11
  8. package/dist/beta.d.ts +2 -11
  9. package/dist/core/index.d.ts +1 -1
  10. package/dist/core/index.d.ts.map +1 -1
  11. package/dist/core/index.js +1 -2
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/schema-stored/index.d.ts +1 -1
  14. package/dist/core/schema-stored/index.d.ts.map +1 -1
  15. package/dist/core/schema-stored/index.js +1 -2
  16. package/dist/core/schema-stored/index.js.map +1 -1
  17. package/dist/core/schema-stored/schema.d.ts +4 -11
  18. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  19. package/dist/core/schema-stored/schema.js +7 -14
  20. package/dist/core/schema-stored/schema.js.map +1 -1
  21. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  22. package/dist/core/tree/anchorSet.js +31 -24
  23. package/dist/core/tree/anchorSet.js.map +1 -1
  24. package/dist/core/tree/deltaUtil.d.ts +1 -4
  25. package/dist/core/tree/deltaUtil.d.ts.map +1 -1
  26. package/dist/core/tree/deltaUtil.js +1 -13
  27. package/dist/core/tree/deltaUtil.js.map +1 -1
  28. package/dist/core/tree/visitDelta.d.ts +6 -29
  29. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  30. package/dist/core/tree/visitDelta.js +11 -50
  31. package/dist/core/tree/visitDelta.js.map +1 -1
  32. package/dist/core/tree/visitorUtils.d.ts +12 -9
  33. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  34. package/dist/core/tree/visitorUtils.js +19 -32
  35. package/dist/core/tree/visitorUtils.js.map +1 -1
  36. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  37. package/dist/feature-libraries/chunked-forest/chunkedForest.js +6 -11
  38. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  39. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  40. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  41. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  42. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts +41 -5
  43. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +43 -26
  45. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +1 -1
  47. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  48. package/dist/feature-libraries/flex-tree/context.d.ts +5 -0
  49. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  50. package/dist/feature-libraries/flex-tree/context.js +4 -0
  51. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  52. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -0
  53. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  54. package/dist/feature-libraries/flex-tree/flexTreeTypes.js +8 -0
  55. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  56. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  57. package/dist/feature-libraries/indexing/anchorTreeIndex.js +15 -22
  58. package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  59. package/dist/feature-libraries/node-identifier/nodeIdentifierManager.d.ts.map +1 -1
  60. package/dist/feature-libraries/node-identifier/nodeIdentifierManager.js +29 -25
  61. package/dist/feature-libraries/node-identifier/nodeIdentifierManager.js.map +1 -1
  62. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  63. package/dist/feature-libraries/object-forest/objectForest.js +1 -7
  64. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  65. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  66. package/dist/feature-libraries/schema-index/codec.js +1 -1
  67. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +3 -2
  71. package/dist/index.js.map +1 -1
  72. package/dist/internalTypes.d.ts +1 -1
  73. package/dist/internalTypes.d.ts.map +1 -1
  74. package/dist/internalTypes.js.map +1 -1
  75. package/dist/jsonDomainSchema.d.ts +6 -6
  76. package/dist/jsonDomainSchema.d.ts.map +1 -1
  77. package/dist/jsonDomainSchema.js.map +1 -1
  78. package/dist/legacy.d.ts +2 -11
  79. package/dist/packageVersion.d.ts +1 -1
  80. package/dist/packageVersion.js +1 -1
  81. package/dist/packageVersion.js.map +1 -1
  82. package/dist/public.d.ts +2 -11
  83. package/dist/serializableDomainSchema.d.ts +5 -5
  84. package/dist/shared-tree/checkoutFlexTreeView.d.ts +1 -0
  85. package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  86. package/dist/shared-tree/checkoutFlexTreeView.js +4 -0
  87. package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -1
  88. package/dist/shared-tree/index.d.ts +3 -2
  89. package/dist/shared-tree/index.d.ts.map +1 -1
  90. package/dist/shared-tree/index.js +2 -2
  91. package/dist/shared-tree/index.js.map +1 -1
  92. package/dist/shared-tree/sharedTree.d.ts +4 -35
  93. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  94. package/dist/shared-tree/sharedTree.js +4 -54
  95. package/dist/shared-tree/sharedTree.js.map +1 -1
  96. package/dist/simple-tree/api/index.d.ts +2 -1
  97. package/dist/simple-tree/api/index.d.ts.map +1 -1
  98. package/dist/simple-tree/api/index.js +3 -1
  99. package/dist/simple-tree/api/index.js.map +1 -1
  100. package/dist/simple-tree/api/schemaFactory.d.ts +28 -28
  101. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  102. package/dist/simple-tree/api/schemaFactory.js +11 -11
  103. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  104. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +6 -7
  105. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  106. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  107. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +24 -5
  108. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  109. package/dist/simple-tree/api/schemaFactoryRecursive.js +14 -1
  110. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  111. package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  112. package/dist/simple-tree/api/tree.d.ts +1 -14
  113. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  114. package/dist/simple-tree/api/tree.js.map +1 -1
  115. package/dist/simple-tree/api/typesUnsafe.d.ts +237 -220
  116. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  117. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  118. package/dist/simple-tree/arrayNode.d.ts +2 -2
  119. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  120. package/dist/simple-tree/arrayNode.js.map +1 -1
  121. package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -2
  122. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  123. package/dist/simple-tree/core/treeNodeKernel.js +39 -24
  124. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  125. package/dist/simple-tree/core/types.d.ts +14 -4
  126. package/dist/simple-tree/core/types.d.ts.map +1 -1
  127. package/dist/simple-tree/core/types.js +14 -4
  128. package/dist/simple-tree/core/types.js.map +1 -1
  129. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +2 -1
  130. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  131. package/dist/simple-tree/core/unhydratedFlexTree.js +3 -0
  132. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  133. package/dist/simple-tree/index.d.ts +1 -1
  134. package/dist/simple-tree/index.d.ts.map +1 -1
  135. package/dist/simple-tree/index.js +3 -2
  136. package/dist/simple-tree/index.js.map +1 -1
  137. package/dist/simple-tree/objectNode.d.ts +9 -2
  138. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  139. package/dist/simple-tree/objectNode.js +3 -0
  140. package/dist/simple-tree/objectNode.js.map +1 -1
  141. package/dist/simple-tree/schemaTypes.d.ts +10 -5
  142. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  143. package/dist/simple-tree/schemaTypes.js +5 -2
  144. package/dist/simple-tree/schemaTypes.js.map +1 -1
  145. package/dist/tableSchema.d.ts +78 -26
  146. package/dist/tableSchema.d.ts.map +1 -1
  147. package/dist/tableSchema.js +53 -24
  148. package/dist/tableSchema.js.map +1 -1
  149. package/dist/treeFactory.d.ts +6 -12
  150. package/dist/treeFactory.d.ts.map +1 -1
  151. package/dist/treeFactory.js +56 -5
  152. package/dist/treeFactory.js.map +1 -1
  153. package/lib/alpha.d.ts +3 -11
  154. package/lib/beta.d.ts +2 -11
  155. package/lib/core/index.d.ts +1 -1
  156. package/lib/core/index.d.ts.map +1 -1
  157. package/lib/core/index.js +1 -1
  158. package/lib/core/index.js.map +1 -1
  159. package/lib/core/schema-stored/index.d.ts +1 -1
  160. package/lib/core/schema-stored/index.d.ts.map +1 -1
  161. package/lib/core/schema-stored/index.js +1 -1
  162. package/lib/core/schema-stored/index.js.map +1 -1
  163. package/lib/core/schema-stored/schema.d.ts +4 -11
  164. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  165. package/lib/core/schema-stored/schema.js +6 -12
  166. package/lib/core/schema-stored/schema.js.map +1 -1
  167. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  168. package/lib/core/tree/anchorSet.js +31 -24
  169. package/lib/core/tree/anchorSet.js.map +1 -1
  170. package/lib/core/tree/deltaUtil.d.ts +1 -4
  171. package/lib/core/tree/deltaUtil.d.ts.map +1 -1
  172. package/lib/core/tree/deltaUtil.js +0 -9
  173. package/lib/core/tree/deltaUtil.js.map +1 -1
  174. package/lib/core/tree/visitDelta.d.ts +6 -29
  175. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  176. package/lib/core/tree/visitDelta.js +12 -51
  177. package/lib/core/tree/visitDelta.js.map +1 -1
  178. package/lib/core/tree/visitorUtils.d.ts +12 -9
  179. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  180. package/lib/core/tree/visitorUtils.js +19 -32
  181. package/lib/core/tree/visitorUtils.js.map +1 -1
  182. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  183. package/lib/feature-libraries/chunked-forest/chunkedForest.js +6 -11
  184. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  185. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  186. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  187. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  188. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts +41 -5
  189. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  190. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +43 -26
  191. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  192. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +1 -1
  193. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  194. package/lib/feature-libraries/flex-tree/context.d.ts +5 -0
  195. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  196. package/lib/feature-libraries/flex-tree/context.js +5 -1
  197. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  198. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -0
  199. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  200. package/lib/feature-libraries/flex-tree/flexTreeTypes.js +8 -0
  201. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  202. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  203. package/lib/feature-libraries/indexing/anchorTreeIndex.js +15 -22
  204. package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  205. package/lib/feature-libraries/node-identifier/nodeIdentifierManager.d.ts.map +1 -1
  206. package/lib/feature-libraries/node-identifier/nodeIdentifierManager.js +28 -24
  207. package/lib/feature-libraries/node-identifier/nodeIdentifierManager.js.map +1 -1
  208. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  209. package/lib/feature-libraries/object-forest/objectForest.js +1 -7
  210. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  211. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  212. package/lib/feature-libraries/schema-index/codec.js +2 -2
  213. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  214. package/lib/index.d.ts +1 -1
  215. package/lib/index.d.ts.map +1 -1
  216. package/lib/index.js +1 -1
  217. package/lib/index.js.map +1 -1
  218. package/lib/internalTypes.d.ts +1 -1
  219. package/lib/internalTypes.d.ts.map +1 -1
  220. package/lib/internalTypes.js.map +1 -1
  221. package/lib/jsonDomainSchema.d.ts +6 -6
  222. package/lib/jsonDomainSchema.d.ts.map +1 -1
  223. package/lib/jsonDomainSchema.js.map +1 -1
  224. package/lib/legacy.d.ts +2 -11
  225. package/lib/packageVersion.d.ts +1 -1
  226. package/lib/packageVersion.js +1 -1
  227. package/lib/packageVersion.js.map +1 -1
  228. package/lib/public.d.ts +2 -11
  229. package/lib/serializableDomainSchema.d.ts +5 -5
  230. package/lib/shared-tree/checkoutFlexTreeView.d.ts +1 -0
  231. package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  232. package/lib/shared-tree/checkoutFlexTreeView.js +4 -0
  233. package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -1
  234. package/lib/shared-tree/index.d.ts +3 -2
  235. package/lib/shared-tree/index.d.ts.map +1 -1
  236. package/lib/shared-tree/index.js +1 -1
  237. package/lib/shared-tree/index.js.map +1 -1
  238. package/lib/shared-tree/sharedTree.d.ts +4 -35
  239. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  240. package/lib/shared-tree/sharedTree.js +2 -51
  241. package/lib/shared-tree/sharedTree.js.map +1 -1
  242. package/lib/simple-tree/api/index.d.ts +2 -1
  243. package/lib/simple-tree/api/index.d.ts.map +1 -1
  244. package/lib/simple-tree/api/index.js +1 -0
  245. package/lib/simple-tree/api/index.js.map +1 -1
  246. package/lib/simple-tree/api/schemaFactory.d.ts +28 -28
  247. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  248. package/lib/simple-tree/api/schemaFactory.js +11 -11
  249. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  250. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +6 -7
  251. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  252. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  253. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +24 -5
  254. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  255. package/lib/simple-tree/api/schemaFactoryRecursive.js +12 -0
  256. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  257. package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  258. package/lib/simple-tree/api/tree.d.ts +1 -14
  259. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  260. package/lib/simple-tree/api/tree.js.map +1 -1
  261. package/lib/simple-tree/api/typesUnsafe.d.ts +237 -220
  262. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  263. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  264. package/lib/simple-tree/arrayNode.d.ts +2 -2
  265. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  266. package/lib/simple-tree/arrayNode.js.map +1 -1
  267. package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -2
  268. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  269. package/lib/simple-tree/core/treeNodeKernel.js +40 -25
  270. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  271. package/lib/simple-tree/core/types.d.ts +14 -4
  272. package/lib/simple-tree/core/types.d.ts.map +1 -1
  273. package/lib/simple-tree/core/types.js +14 -4
  274. package/lib/simple-tree/core/types.js.map +1 -1
  275. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +2 -1
  276. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  277. package/lib/simple-tree/core/unhydratedFlexTree.js +3 -0
  278. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  279. package/lib/simple-tree/index.d.ts +1 -1
  280. package/lib/simple-tree/index.d.ts.map +1 -1
  281. package/lib/simple-tree/index.js +1 -1
  282. package/lib/simple-tree/index.js.map +1 -1
  283. package/lib/simple-tree/objectNode.d.ts +9 -2
  284. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  285. package/lib/simple-tree/objectNode.js +4 -1
  286. package/lib/simple-tree/objectNode.js.map +1 -1
  287. package/lib/simple-tree/schemaTypes.d.ts +10 -5
  288. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  289. package/lib/simple-tree/schemaTypes.js +5 -2
  290. package/lib/simple-tree/schemaTypes.js.map +1 -1
  291. package/lib/tableSchema.d.ts +78 -26
  292. package/lib/tableSchema.d.ts.map +1 -1
  293. package/lib/tableSchema.js +53 -24
  294. package/lib/tableSchema.js.map +1 -1
  295. package/lib/treeFactory.d.ts +6 -12
  296. package/lib/treeFactory.d.ts.map +1 -1
  297. package/lib/treeFactory.js +55 -3
  298. package/lib/treeFactory.js.map +1 -1
  299. package/lib/tsdoc-metadata.json +1 -1
  300. package/package.json +22 -23
  301. package/src/core/index.ts +0 -2
  302. package/src/core/schema-stored/index.ts +0 -2
  303. package/src/core/schema-stored/schema.ts +10 -29
  304. package/src/core/tree/anchorSet.ts +32 -24
  305. package/src/core/tree/deltaUtil.ts +1 -13
  306. package/src/core/tree/visitDelta.ts +24 -81
  307. package/src/core/tree/visitorUtils.ts +43 -53
  308. package/src/feature-libraries/chunked-forest/chunkedForest.ts +7 -22
  309. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -1
  310. package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +45 -27
  311. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +1 -1
  312. package/src/feature-libraries/flex-tree/context.ts +11 -1
  313. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +8 -0
  314. package/src/feature-libraries/indexing/anchorTreeIndex.ts +17 -28
  315. package/src/feature-libraries/node-identifier/nodeIdentifierManager.ts +39 -38
  316. package/src/feature-libraries/object-forest/objectForest.ts +1 -18
  317. package/src/feature-libraries/schema-index/codec.ts +1 -2
  318. package/src/index.ts +3 -11
  319. package/src/internalTypes.ts +0 -19
  320. package/src/jsonDomainSchema.ts +1 -3
  321. package/src/packageVersion.ts +1 -1
  322. package/src/shared-tree/checkoutFlexTreeView.ts +6 -0
  323. package/src/shared-tree/index.ts +8 -3
  324. package/src/shared-tree/sharedTree.ts +5 -133
  325. package/src/simple-tree/api/index.ts +2 -22
  326. package/src/simple-tree/api/schemaFactory.ts +40 -54
  327. package/src/simple-tree/api/schemaFactoryAlpha.ts +9 -14
  328. package/src/simple-tree/api/schemaFactoryRecursive.ts +25 -5
  329. package/src/simple-tree/api/tree.ts +1 -14
  330. package/src/simple-tree/api/typesUnsafe.ts +359 -341
  331. package/src/simple-tree/arrayNode.ts +2 -2
  332. package/src/simple-tree/core/treeNodeKernel.ts +46 -28
  333. package/src/simple-tree/core/types.ts +14 -4
  334. package/src/simple-tree/core/unhydratedFlexTree.ts +5 -1
  335. package/src/simple-tree/index.ts +2 -22
  336. package/src/simple-tree/objectNode.ts +13 -4
  337. package/src/simple-tree/schemaTypes.ts +11 -7
  338. package/src/tableSchema.ts +190 -63
  339. package/src/treeFactory.ts +151 -8
@@ -51,382 +51,398 @@ import type { SimpleArrayNodeSchema, SimpleMapNodeSchema } from "../simpleSchema
51
51
  export type Unenforced<_DesiredExtendsConstraint> = unknown;
52
52
 
53
53
  /**
54
- * {@link Unenforced} version of `ObjectFromSchemaRecord`.
55
- * @remarks
56
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
54
+ * A collection of {@link Unenforced} types that are used in the implementation of recursive schema.
55
+ * These are all `@system` types, and thus should not be used directly.
57
56
  * @privateRemarks
58
- * This does not bother special casing `{}` since no one should make empty objects using the *Recursive APIs.
57
+ * Due to limitations of API-Extractor, all types in this namespace are treated as `@public`:
58
+ * therefore, non-public types should not be included in this namespace.
59
59
  * @system @public
60
60
  */
61
- export type ObjectFromSchemaRecordUnsafe<
62
- T extends RestrictiveStringRecord<ImplicitFieldSchemaUnsafe>,
63
- > = {
64
- -readonly [Property in keyof T]: Property extends string
65
- ? TreeFieldFromImplicitFieldUnsafe<T[Property]>
66
- : unknown;
67
- };
61
+ export namespace System_Unsafe {
62
+ /**
63
+ * {@link Unenforced} version of `ObjectFromSchemaRecord`.
64
+ * @remarks
65
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
66
+ * @privateRemarks
67
+ * This does not bother special casing `{}` since no one should make empty objects using the *Recursive APIs.
68
+ * @system @public
69
+ */
70
+ export type ObjectFromSchemaRecordUnsafe<
71
+ T extends RestrictiveStringRecord<ImplicitFieldSchemaUnsafe>,
72
+ > = {
73
+ -readonly [Property in keyof T]: Property extends string
74
+ ? TreeFieldFromImplicitFieldUnsafe<T[Property]>
75
+ : unknown;
76
+ };
68
77
 
69
- /**
70
- * {@link Unenforced} version of {@link TreeNodeSchema}.
71
- * @remarks
72
- * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
73
- * @system @public
74
- */
75
- export type TreeNodeSchemaUnsafe<
76
- Name extends string = string,
77
- Kind extends NodeKind = NodeKind,
78
- TNode extends Unenforced<TreeNode | TreeLeafValue> = unknown,
79
- TBuild = never,
80
- ImplicitlyConstructable extends boolean = boolean,
81
- Info = unknown,
82
- > =
83
- | TreeNodeSchemaClassUnsafe<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>
84
- | TreeNodeSchemaNonClassUnsafe<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
78
+ /**
79
+ * {@link Unenforced} version of {@link TreeNodeSchema}.
80
+ * @remarks
81
+ * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
82
+ * @system @public
83
+ */
84
+ export type TreeNodeSchemaUnsafe<
85
+ Name extends string = string,
86
+ Kind extends NodeKind = NodeKind,
87
+ TNode extends Unenforced<TreeNode | TreeLeafValue> = unknown,
88
+ TBuild = never,
89
+ ImplicitlyConstructable extends boolean = boolean,
90
+ Info = unknown,
91
+ > =
92
+ | TreeNodeSchemaClassUnsafe<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>
93
+ | TreeNodeSchemaNonClassUnsafe<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
85
94
 
86
- /**
87
- * {@link Unenforced} version of {@link TreeNodeSchemaClass}.
88
- * @remarks
89
- * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
90
- * @system @public
91
- */
92
- export interface TreeNodeSchemaClassUnsafe<
93
- out Name extends string,
94
- out Kind extends NodeKind,
95
- out TNode extends Unenforced<TreeNode>,
96
- in TInsertable,
97
- out ImplicitlyConstructable extends boolean,
98
- out Info,
99
- out TCustomMetadata = unknown,
100
- > extends TreeNodeSchemaCore<
101
- Name,
102
- Kind,
103
- ImplicitlyConstructable,
104
- Info,
105
- never,
106
- TCustomMetadata
107
- > {
108
95
  /**
109
- * Constructs an {@link Unhydrated} node with this schema.
96
+ * {@link Unenforced} version of {@link TreeNodeSchemaClass}.
110
97
  * @remarks
111
- * This constructor is also used internally to construct hydrated nodes with a different parameter type.
112
- * Therefore, overriding this constructor with different argument types is not type-safe and is not supported.
113
- * @sealed
98
+ * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
99
+ * @system @public
114
100
  */
115
- new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
116
- }
101
+ export interface TreeNodeSchemaClassUnsafe<
102
+ out Name extends string,
103
+ out Kind extends NodeKind,
104
+ out TNode extends Unenforced<TreeNode>,
105
+ in TInsertable,
106
+ out ImplicitlyConstructable extends boolean,
107
+ out Info,
108
+ out TCustomMetadata = unknown,
109
+ > extends TreeNodeSchemaCore<
110
+ Name,
111
+ Kind,
112
+ ImplicitlyConstructable,
113
+ Info,
114
+ never,
115
+ TCustomMetadata
116
+ > {
117
+ /**
118
+ * Constructs an {@link Unhydrated} node with this schema.
119
+ * @remarks
120
+ * This constructor is also used internally to construct hydrated nodes with a different parameter type.
121
+ * Therefore, overriding this constructor with different argument types is not type-safe and is not supported.
122
+ * @sealed
123
+ */
124
+ new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
125
+ }
117
126
 
118
- /**
119
- * {@link Unenforced} version of {@link TreeNodeSchemaNonClass}.
120
- * @remarks
121
- * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
122
- * @system @public
123
- */
124
- export interface TreeNodeSchemaNonClassUnsafe<
125
- out Name extends string,
126
- out Kind extends NodeKind,
127
- out TNode extends Unenforced<TreeNode | TreeLeafValue>,
128
- in TInsertable,
129
- out ImplicitlyConstructable extends boolean,
130
- out Info = unknown,
131
- > extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
132
- create(data: TInsertable): TNode;
133
- }
127
+ /**
128
+ * {@link Unenforced} version of {@link TreeNodeSchemaNonClass}.
129
+ * @remarks
130
+ * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
131
+ * @system @public
132
+ */
133
+ export interface TreeNodeSchemaNonClassUnsafe<
134
+ out Name extends string,
135
+ out Kind extends NodeKind,
136
+ out TNode extends Unenforced<TreeNode | TreeLeafValue>,
137
+ in TInsertable,
138
+ out ImplicitlyConstructable extends boolean,
139
+ out Info = unknown,
140
+ > extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
141
+ create(data: TInsertable): TNode;
142
+ }
134
143
 
135
- /**
136
- * {@link Unenforced} version of {@link TreeObjectNode}.
137
- * @remarks
138
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
139
- * @system @public
140
- */
141
- export type TreeObjectNodeUnsafe<
142
- T extends RestrictiveStringRecord<ImplicitFieldSchemaUnsafe>,
143
- TypeName extends string = string,
144
- > = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object, T>;
144
+ /**
145
+ * {@link Unenforced} version of {@link TreeObjectNode}.
146
+ * @remarks
147
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
148
+ * @system @public
149
+ */
150
+ export type TreeObjectNodeUnsafe<
151
+ T extends RestrictiveStringRecord<ImplicitFieldSchemaUnsafe>,
152
+ TypeName extends string = string,
153
+ > = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object, T>;
145
154
 
146
- /**
147
- * {@link Unenforced} version of {@link TreeFieldFromImplicitField}.
148
- * @remarks
149
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
150
- * @system @public
151
- */
152
- export type TreeFieldFromImplicitFieldUnsafe<TSchema extends ImplicitFieldSchemaUnsafe> =
153
- TSchema extends FieldSchemaUnsafe<infer Kind, infer Types>
154
- ? ApplyKind<TreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind>
155
- : TSchema extends ImplicitAllowedTypesUnsafe
156
- ? TreeNodeFromImplicitAllowedTypesUnsafe<TSchema>
157
- : unknown;
155
+ /**
156
+ * {@link Unenforced} version of {@link TreeFieldFromImplicitField}.
157
+ * @remarks
158
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
159
+ * @system @public
160
+ */
161
+ export type TreeFieldFromImplicitFieldUnsafe<TSchema extends ImplicitFieldSchemaUnsafe> =
162
+ TSchema extends FieldSchemaUnsafe<infer Kind, infer Types>
163
+ ? ApplyKind<TreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind>
164
+ : TSchema extends ImplicitAllowedTypesUnsafe
165
+ ? TreeNodeFromImplicitAllowedTypesUnsafe<TSchema>
166
+ : unknown;
158
167
 
159
- /**
160
- * {@link Unenforced} version of {@link AllowedTypes}.
161
- * @remarks
162
- * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
163
- * @system @public
164
- */
165
- export type AllowedTypesUnsafe = readonly LazyItem<TreeNodeSchemaUnsafe>[];
168
+ /**
169
+ * {@link Unenforced} version of {@link AllowedTypes}.
170
+ * @remarks
171
+ * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
172
+ * @system @public
173
+ */
174
+ export type AllowedTypesUnsafe = readonly LazyItem<TreeNodeSchemaUnsafe>[];
166
175
 
167
- /**
168
- * {@link Unenforced} version of {@link ImplicitAllowedTypes}.
169
- * @remarks
170
- * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
171
- * @privateRemarks
172
- * This is similar to `Unenforced<ImplicitAllowedTypes>` in that it avoids constraining the schema
173
- * (which is necessary to avoid breaking recursive types),
174
- * but is superior from a safety perspective because it constrains the structure containing the schema.
175
- * @system @public
176
- */
177
- export type ImplicitAllowedTypesUnsafe =
178
- | TreeNodeSchemaUnsafe
179
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments
180
- | readonly LazyItem<Unenforced<TreeNodeSchema>>[];
176
+ /**
177
+ * {@link Unenforced} version of {@link ImplicitAllowedTypes}.
178
+ * @remarks
179
+ * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
180
+ * @privateRemarks
181
+ * This is similar to `Unenforced<ImplicitAllowedTypes>` in that it avoids constraining the schema
182
+ * (which is necessary to avoid breaking recursive types),
183
+ * but is superior from a safety perspective because it constrains the structure containing the schema.
184
+ * @system @public
185
+ */
186
+ export type ImplicitAllowedTypesUnsafe =
187
+ | TreeNodeSchemaUnsafe
188
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments
189
+ | readonly LazyItem<Unenforced<TreeNodeSchema>>[];
181
190
 
182
- /**
183
- * {@link Unenforced} version of {@link ImplicitFieldSchema}.
184
- * @remarks
185
- * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
186
- * @privateRemarks
187
- * This is similar to `Unenforced<ImplicitFieldSchema>` in that it avoids constraining the schema
188
- * (which is necessary to avoid breaking recursive types),
189
- * but is superior from a safety perspective because it constrains the structure containing the schema.
190
- * @system @public
191
- */
192
- export type ImplicitFieldSchemaUnsafe =
193
- | FieldSchemaUnsafe<FieldKind, ImplicitAllowedTypesUnsafe>
194
- | ImplicitAllowedTypesUnsafe;
191
+ /**
192
+ * {@link Unenforced} version of {@link ImplicitFieldSchema}.
193
+ * @remarks
194
+ * Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
195
+ * @privateRemarks
196
+ * This is similar to `Unenforced<ImplicitFieldSchema>` in that it avoids constraining the schema
197
+ * (which is necessary to avoid breaking recursive types),
198
+ * but is superior from a safety perspective because it constrains the structure containing the schema.
199
+ * @system @public
200
+ */
201
+ export type ImplicitFieldSchemaUnsafe =
202
+ | FieldSchemaUnsafe<FieldKind, ImplicitAllowedTypesUnsafe>
203
+ | ImplicitAllowedTypesUnsafe;
195
204
 
196
- /**
197
- * {@link Unenforced} version of {@link TreeNodeFromImplicitAllowedTypes}.
198
- * @remarks
199
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
200
- * @system @public
201
- */
202
- export type TreeNodeFromImplicitAllowedTypesUnsafe<
203
- TSchema extends ImplicitAllowedTypesUnsafe,
204
- > = TSchema extends TreeNodeSchemaUnsafe
205
- ? NodeFromSchemaUnsafe<TSchema>
206
- : TSchema extends AllowedTypesUnsafe
207
- ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>>
208
- : unknown;
205
+ /**
206
+ * {@link Unenforced} version of {@link TreeNodeFromImplicitAllowedTypes}.
207
+ * @remarks
208
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
209
+ * @system @public
210
+ */
211
+ export type TreeNodeFromImplicitAllowedTypesUnsafe<
212
+ TSchema extends ImplicitAllowedTypesUnsafe,
213
+ > = TSchema extends TreeNodeSchemaUnsafe
214
+ ? NodeFromSchemaUnsafe<TSchema>
215
+ : TSchema extends AllowedTypesUnsafe
216
+ ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>>
217
+ : unknown;
209
218
 
210
- /**
211
- * {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
212
- * @see {@link Input}
213
- * @remarks
214
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
215
- * @system @public
216
- */
217
- export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<
218
- TSchema extends ImplicitAllowedTypesUnsafe,
219
- > = [TSchema] extends [TreeNodeSchemaUnsafe]
220
- ? InsertableTypedNodeUnsafe<TSchema>
221
- : [TSchema] extends [AllowedTypesUnsafe]
222
- ? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema>
223
- : never;
219
+ /**
220
+ * {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
221
+ * @see {@link Input}
222
+ * @remarks
223
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
224
+ * @system @public
225
+ */
226
+ export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<
227
+ TSchema extends ImplicitAllowedTypesUnsafe,
228
+ > = [TSchema] extends [TreeNodeSchemaUnsafe]
229
+ ? InsertableTypedNodeUnsafe<TSchema>
230
+ : [TSchema] extends [AllowedTypesUnsafe]
231
+ ? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema>
232
+ : never;
224
233
 
225
- /**
226
- * {@link Unenforced} version of {@link InsertableTreeNodeFromAllowedTypes}.
227
- * @see {@link Input}
228
- * @system @public
229
- */
230
- export type InsertableTreeNodeFromAllowedTypesUnsafe<TList extends AllowedTypesUnsafe> =
231
- TList extends readonly [
232
- LazyItem<infer TSchema extends TreeNodeSchemaUnsafe>,
233
- ...infer Rest extends AllowedTypesUnsafe,
234
+ /**
235
+ * {@link Unenforced} version of {@link InsertableTreeNodeFromAllowedTypes}.
236
+ * @see {@link Input}
237
+ * @privateRemarks
238
+ * TODO: AB#36348: it seems like the order of the union this produces is what is non-deterministic in incremental builds
239
+ * of the JsonAsTree schema.
240
+ * @system @public
241
+ */
242
+ export type InsertableTreeNodeFromAllowedTypesUnsafe<TList extends AllowedTypesUnsafe> = [
243
+ TList,
244
+ ] extends [
245
+ readonly [
246
+ LazyItem<infer TSchema extends TreeNodeSchemaUnsafe>,
247
+ ...infer Rest extends AllowedTypesUnsafe,
248
+ ],
234
249
  ]
235
250
  ? InsertableTypedNodeUnsafe<TSchema> | InsertableTreeNodeFromAllowedTypesUnsafe<Rest>
236
251
  : never;
237
252
 
238
- /**
239
- * {@link Unenforced} version of {@link InsertableTypedNode}.
240
- * @see {@link Input}
241
- * @remarks
242
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
243
- * @privateRemarks
244
- * TODO:
245
- * This is less strict than InsertableTypedNode when given non-exact schema to avoid compilation issues.
246
- * This should probably be fixed or documented somehow.
247
- * @system @public
248
- */
249
- export type InsertableTypedNodeUnsafe<
250
- TSchema extends TreeNodeSchemaUnsafe,
251
- T = UnionToIntersection<TSchema>,
252
- > =
253
- | (T extends TreeNodeSchemaUnsafe<string, NodeKind, TreeNode | TreeLeafValue, never, true>
254
- ? NodeBuilderDataUnsafe<T>
255
- : never)
256
- | (T extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<T> : never);
257
-
258
- /**
259
- * {@link Unenforced} version of {@link NodeFromSchema}.
260
- * @remarks
261
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
262
- * @system @public
263
- */
264
- export type NodeFromSchemaUnsafe<T extends Unenforced<TreeNodeSchema>> =
265
- T extends TreeNodeSchemaUnsafe<string, NodeKind, infer TNode> ? TNode : never;
266
-
267
- /**
268
- * {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
269
- * @remarks
270
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
271
- * @system @public
272
- */
273
- export type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> =
274
- T extends TreeNodeSchemaUnsafe<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
275
-
276
- /**
277
- * {@link Unenforced} version of {@link (TreeArrayNode:interface)}.
278
- * @remarks
279
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
280
- * @system @sealed @public
281
- */
282
- export interface TreeArrayNodeUnsafe<TAllowedTypes extends ImplicitAllowedTypesUnsafe>
283
- extends TreeArrayNode<
284
- TAllowedTypes,
285
- TreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>,
286
- InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>
287
- > {}
288
-
289
- /**
290
- * {@link Unenforced} version of {@link TreeMapNode}.
291
- * @remarks
292
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
293
- * @system @sealed @public
294
- */
295
- export interface TreeMapNodeUnsafe<T extends ImplicitAllowedTypesUnsafe>
296
- extends ReadonlyMapInlined<string, T>,
297
- TreeNode {
298
253
  /**
299
- * {@inheritdoc TreeMapNode.set}
254
+ * {@link Unenforced} version of {@link InsertableTypedNode}.
255
+ * @see {@link Input}
256
+ * @remarks
257
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
258
+ * @privateRemarks
259
+ * TODO:
260
+ * This is less strict than InsertableTypedNode when given non-exact schema to avoid compilation issues.
261
+ * This should probably be fixed or documented somehow.
262
+ * @system @public
300
263
  */
301
- set(
302
- key: string,
303
- value: InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T> | undefined,
304
- ): void;
264
+ export type InsertableTypedNodeUnsafe<
265
+ TSchema extends TreeNodeSchemaUnsafe,
266
+ T = UnionToIntersection<TSchema>,
267
+ > =
268
+ | (T extends TreeNodeSchemaUnsafe<string, NodeKind, TreeNode | TreeLeafValue, never, true>
269
+ ? NodeBuilderDataUnsafe<T>
270
+ : never)
271
+ | (T extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<T> : never);
305
272
 
306
273
  /**
307
- * {@inheritdoc TreeMapNode.delete}
274
+ * {@link Unenforced} version of {@link NodeFromSchema}.
275
+ * @remarks
276
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
277
+ * @system @public
308
278
  */
309
- delete(key: string): void;
310
- }
311
-
312
- /**
313
- * Copy of TypeScript's ReadonlyMap, but with `TreeNodeFromImplicitAllowedTypesUnsafe<T>` inlined into it.
314
- * Using this instead of ReadonlyMap in TreeMapNodeUnsafe is necessary to make recursive map schema not generate compile errors in the d.ts files when exported.
315
- * @remarks
316
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
317
- * @privateRemarks
318
- * This is the same as `ReadonlyMap<K, TreeNodeFromImplicitAllowedTypesUnsafe<T>>` (Checked in test),
319
- * except that it avoids the above mentioned compile error.
320
- * Authored by manually inlining ReadonlyMap from from the TypeScript lib which can be found by navigating to the definition of `ReadonlyMap`.
321
- * @system @sealed @public
322
- */
323
- export interface ReadonlyMapInlined<K, T extends ImplicitAllowedTypesUnsafe> {
324
- /** Returns an iterable of entries in the map. */
325
- [Symbol.iterator](): IterableIterator<[K, TreeNodeFromImplicitAllowedTypesUnsafe<T>]>;
279
+ export type NodeFromSchemaUnsafe<T extends Unenforced<TreeNodeSchema>> =
280
+ T extends TreeNodeSchemaUnsafe<string, NodeKind, infer TNode> ? TNode : never;
326
281
 
327
282
  /**
328
- * Returns an iterable of key, value pairs for every entry in the map.
283
+ * {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
284
+ * @remarks
285
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
286
+ * @system @public
329
287
  */
330
- entries(): IterableIterator<[K, TreeNodeFromImplicitAllowedTypesUnsafe<T>]>;
288
+ export type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> =
289
+ T extends TreeNodeSchemaUnsafe<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
331
290
 
332
291
  /**
333
- * Returns an iterable of keys in the map
292
+ * {@link Unenforced} version of {@link (TreeArrayNode:interface)}.
293
+ * @remarks
294
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
295
+ * @system @sealed @public
334
296
  */
335
- keys(): IterableIterator<K>;
297
+ export interface TreeArrayNodeUnsafe<TAllowedTypes extends ImplicitAllowedTypesUnsafe>
298
+ extends TreeArrayNode<
299
+ TAllowedTypes,
300
+ TreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>,
301
+ InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>
302
+ > {}
336
303
 
337
304
  /**
338
- * Returns an iterable of values in the map
305
+ * {@link Unenforced} version of {@link TreeMapNode}.
306
+ * @remarks
307
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
308
+ * @system @sealed @public
339
309
  */
340
- values(): IterableIterator<TreeNodeFromImplicitAllowedTypesUnsafe<T>>;
341
-
342
- forEach(
343
- callbackfn: (
344
- value: TreeNodeFromImplicitAllowedTypesUnsafe<T>,
345
- key: K,
346
- map: ReadonlyMap<K, TreeNodeFromImplicitAllowedTypesUnsafe<T>>,
347
- ) => void,
348
- thisArg?: any,
349
- ): void;
350
- get(key: K): TreeNodeFromImplicitAllowedTypesUnsafe<T> | undefined;
351
- has(key: K): boolean;
352
- readonly size: number;
353
- }
310
+ export interface TreeMapNodeUnsafe<T extends ImplicitAllowedTypesUnsafe>
311
+ extends ReadonlyMapInlined<string, T>,
312
+ TreeNode {
313
+ /**
314
+ * {@inheritdoc TreeMapNode.set}
315
+ */
316
+ set(
317
+ key: string,
318
+ value: InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T> | undefined,
319
+ ): void;
320
+
321
+ /**
322
+ * {@inheritdoc TreeMapNode.delete}
323
+ */
324
+ delete(key: string): void;
325
+ }
354
326
 
355
- /**
356
- * {@link Unenforced} version of `FieldHasDefault`.
357
- * @remarks
358
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
359
- * @system @sealed @public
360
- */
361
- export type FieldHasDefaultUnsafe<T extends ImplicitFieldSchemaUnsafe> =
362
- T extends FieldSchemaUnsafe<
363
- FieldKind.Optional | FieldKind.Identifier,
364
- ImplicitAllowedTypesUnsafe
365
- >
366
- ? true
367
- : false;
368
-
369
- /**
370
- * {@link Unenforced} version of `InsertableObjectFromSchemaRecord`.
371
- * @see {@link Input}
372
- * @remarks
373
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
374
- * @system @public
375
- */
376
- export type InsertableObjectFromSchemaRecordUnsafe<
377
- T extends RestrictiveStringRecord<ImplicitFieldSchemaUnsafe>,
378
- > = {
379
- // Field might not have a default, so make it required:
380
- readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property & string]> extends false
381
- ? Property
382
- : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property & string]>;
383
- } & {
384
- // Field might have a default, so allow optional.
385
- // Note that if the field could be either, this returns boolean, causing both fields to exist, resulting in required.
386
- readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property & string]> extends true
387
- ? Property
388
- : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property & string]>;
389
- };
327
+ /**
328
+ * Copy of TypeScript's ReadonlyMap, but with `TreeNodeFromImplicitAllowedTypesUnsafe<T>` inlined into it.
329
+ * Using this instead of ReadonlyMap in TreeMapNodeUnsafe is necessary to make recursive map schema not generate compile errors in the d.ts files when exported.
330
+ * @remarks
331
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
332
+ * @privateRemarks
333
+ * This is the same as `ReadonlyMap<K, TreeNodeFromImplicitAllowedTypesUnsafe<T>>` (Checked in test),
334
+ * except that it avoids the above mentioned compile error.
335
+ * Authored by manually inlining ReadonlyMap from from the TypeScript lib which can be found by navigating to the definition of `ReadonlyMap`.
336
+ * @system @sealed @public
337
+ */
338
+ export interface ReadonlyMapInlined<K, T extends ImplicitAllowedTypesUnsafe> {
339
+ /** Returns an iterable of entries in the map. */
340
+ [Symbol.iterator](): IterableIterator<[K, TreeNodeFromImplicitAllowedTypesUnsafe<T>]>;
341
+
342
+ /**
343
+ * Returns an iterable of key, value pairs for every entry in the map.
344
+ */
345
+ entries(): IterableIterator<[K, TreeNodeFromImplicitAllowedTypesUnsafe<T>]>;
346
+
347
+ /**
348
+ * Returns an iterable of keys in the map
349
+ */
350
+ keys(): IterableIterator<K>;
351
+
352
+ /**
353
+ * Returns an iterable of values in the map
354
+ */
355
+ values(): IterableIterator<TreeNodeFromImplicitAllowedTypesUnsafe<T>>;
356
+
357
+ forEach(
358
+ callbackfn: (
359
+ value: TreeNodeFromImplicitAllowedTypesUnsafe<T>,
360
+ key: K,
361
+ map: ReadonlyMap<K, TreeNodeFromImplicitAllowedTypesUnsafe<T>>,
362
+ ) => void,
363
+ thisArg?: any,
364
+ ): void;
365
+ get(key: K): TreeNodeFromImplicitAllowedTypesUnsafe<T> | undefined;
366
+ has(key: K): boolean;
367
+ readonly size: number;
368
+ }
390
369
 
391
- /**
392
- * {@link Unenforced} version of {@link InsertableTreeFieldFromImplicitField}.
393
- * @see {@link Input}
394
- * @remarks
395
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
396
- * @system @public
397
- */
398
- export type InsertableTreeFieldFromImplicitFieldUnsafe<
399
- TSchemaInput extends ImplicitFieldSchemaUnsafe,
400
- TSchema = UnionToIntersection<TSchemaInput>,
401
- > = [TSchema] extends [FieldSchemaUnsafe<infer Kind, infer Types>]
402
- ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true>
403
- : [TSchema] extends [ImplicitAllowedTypes]
404
- ? InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>
405
- : never;
370
+ /**
371
+ * {@link Unenforced} version of `FieldHasDefault`.
372
+ * @remarks
373
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
374
+ * @system @sealed @public
375
+ */
376
+ export type FieldHasDefaultUnsafe<T extends ImplicitFieldSchemaUnsafe> =
377
+ T extends FieldSchemaUnsafe<
378
+ FieldKind.Optional | FieldKind.Identifier,
379
+ ImplicitAllowedTypesUnsafe
380
+ >
381
+ ? true
382
+ : false;
406
383
 
407
- /**
408
- * {@link Unenforced} version of {@link FieldSchema}.
409
- * @remarks
410
- * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
411
- * @system @sealed @public
412
- */
413
- export interface FieldSchemaUnsafe<
414
- out Kind extends FieldKind,
415
- out Types extends ImplicitAllowedTypesUnsafe,
416
- out TCustomMetadata = unknown,
417
- > extends FieldSchema<Kind, any, TCustomMetadata> {
418
384
  /**
419
- * {@inheritDoc FieldSchema.kind}
385
+ * {@link Unenforced} version of `InsertableObjectFromSchemaRecord`.
386
+ * @see {@link Input}
387
+ * @remarks
388
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
389
+ * @system @public
420
390
  */
421
- readonly kind: Kind;
391
+ export type InsertableObjectFromSchemaRecordUnsafe<
392
+ T extends RestrictiveStringRecord<ImplicitFieldSchemaUnsafe>,
393
+ > = {
394
+ // Field might not have a default, so make it required:
395
+ readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property & string]> extends false
396
+ ? Property
397
+ : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property & string]>;
398
+ } & {
399
+ // Field might have a default, so allow optional.
400
+ // Note that if the field could be either, this returns boolean, causing both fields to exist, resulting in required.
401
+ readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property & string]> extends true
402
+ ? Property
403
+ : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property & string]>;
404
+ };
405
+
422
406
  /**
423
- * {@inheritDoc FieldSchema.allowedTypes}
407
+ * {@link Unenforced} version of {@link InsertableTreeFieldFromImplicitField}.
408
+ * @see {@link Input}
409
+ * @remarks
410
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
411
+ * @system @public
424
412
  */
425
- readonly allowedTypes: Types;
413
+ export type InsertableTreeFieldFromImplicitFieldUnsafe<
414
+ TSchemaInput extends ImplicitFieldSchemaUnsafe,
415
+ TSchema = UnionToIntersection<TSchemaInput>,
416
+ > = [TSchema] extends [FieldSchemaUnsafe<infer Kind, infer Types>]
417
+ ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true>
418
+ : [TSchema] extends [ImplicitAllowedTypes]
419
+ ? InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>
420
+ : never;
421
+
426
422
  /**
427
- * {@inheritDoc FieldSchema.allowedTypeSet}
423
+ * {@link Unenforced} version of {@link FieldSchema}.
424
+ * @remarks
425
+ * Do not use this type directly: it's only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
426
+ * @system @sealed @public
428
427
  */
429
- readonly allowedTypeSet: ReadonlySet<TreeNodeSchema>;
428
+ export interface FieldSchemaUnsafe<
429
+ out Kind extends FieldKind,
430
+ out Types extends ImplicitAllowedTypesUnsafe,
431
+ out TCustomMetadata = unknown,
432
+ > extends FieldSchema<Kind, any, TCustomMetadata> {
433
+ /**
434
+ * {@inheritDoc FieldSchema.kind}
435
+ */
436
+ readonly kind: Kind;
437
+ /**
438
+ * {@inheritDoc FieldSchema.allowedTypes}
439
+ */
440
+ readonly allowedTypes: Types;
441
+ /**
442
+ * {@inheritDoc FieldSchema.allowedTypeSet}
443
+ */
444
+ readonly allowedTypeSet: ReadonlySet<TreeNodeSchema>;
445
+ }
430
446
  }
431
447
 
432
448
  /**
@@ -437,10 +453,10 @@ export interface FieldSchemaUnsafe<
437
453
  */
438
454
  export interface FieldSchemaAlphaUnsafe<
439
455
  out Kind extends FieldKind,
440
- out Types extends ImplicitAllowedTypesUnsafe,
456
+ out Types extends System_Unsafe.ImplicitAllowedTypesUnsafe,
441
457
  out TCustomMetadata = unknown,
442
458
  > extends FieldSchemaAlpha<Kind, any, TCustomMetadata>,
443
- FieldSchemaUnsafe<Kind, Types, TCustomMetadata> {
459
+ System_Unsafe.FieldSchemaUnsafe<Kind, Types, TCustomMetadata> {
444
460
  /**
445
461
  * {@inheritDoc FieldSchema.allowedTypes}
446
462
  */
@@ -459,14 +475,16 @@ export interface FieldSchemaAlphaUnsafe<
459
475
  */
460
476
  export interface ArrayNodeCustomizableSchemaUnsafe<
461
477
  out TName extends string,
462
- in out T extends ImplicitAllowedTypesUnsafe,
478
+ in out T extends System_Unsafe.ImplicitAllowedTypesUnsafe,
463
479
  out TCustomMetadata,
464
480
  > extends TreeNodeSchemaClass<
465
481
  TName,
466
482
  NodeKind.Array,
467
- TreeArrayNodeUnsafe<T> & WithType<TName, NodeKind.Array, T>,
483
+ System_Unsafe.TreeArrayNodeUnsafe<T> & WithType<TName, NodeKind.Array, T>,
468
484
  {
469
- [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
485
+ [Symbol.iterator](): Iterator<
486
+ System_Unsafe.InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
487
+ >;
470
488
  },
471
489
  false,
472
490
  T,
@@ -485,19 +503,19 @@ export interface ArrayNodeCustomizableSchemaUnsafe<
485
503
  */
486
504
  export interface MapNodeCustomizableSchemaUnsafe<
487
505
  out TName extends string,
488
- in out T extends ImplicitAllowedTypesUnsafe,
506
+ in out T extends System_Unsafe.ImplicitAllowedTypesUnsafe,
489
507
  out TCustomMetadata,
490
508
  > extends TreeNodeSchemaClass<
491
509
  TName,
492
510
  NodeKind.Map,
493
- TreeMapNodeUnsafe<T> & WithType<TName, NodeKind.Map, T>,
511
+ System_Unsafe.TreeMapNodeUnsafe<T> & WithType<TName, NodeKind.Map, T>,
494
512
  | {
495
513
  [Symbol.iterator](): Iterator<
496
- [string, InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>]
514
+ [string, System_Unsafe.InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>]
497
515
  >;
498
516
  }
499
517
  | {
500
- readonly [P in string]: InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>;
518
+ readonly [P in string]: System_Unsafe.InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>;
501
519
  },
502
520
  false,
503
521
  T,