@fluidframework/tree 2.22.1 → 2.23.0-325054

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 (515) hide show
  1. package/.vscode/extensions.json +1 -0
  2. package/.vscode/settings.json +1 -0
  3. package/CHANGELOG.md +47 -0
  4. package/api-report/tree.alpha.api.md +169 -10
  5. package/api-report/tree.beta.api.md +101 -9
  6. package/api-report/tree.legacy.alpha.api.md +101 -9
  7. package/api-report/tree.legacy.public.api.md +101 -9
  8. package/api-report/tree.public.api.md +101 -9
  9. package/dist/alpha.d.ts +20 -0
  10. package/dist/beta.d.ts +15 -0
  11. package/dist/codec/codec.js +3 -3
  12. package/dist/codec/codec.js.map +1 -1
  13. package/dist/codec/discriminatedUnions.d.ts.map +1 -1
  14. package/dist/codec/discriminatedUnions.js +1 -1
  15. package/dist/codec/discriminatedUnions.js.map +1 -1
  16. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  17. package/dist/core/schema-stored/schema.js +3 -3
  18. package/dist/core/schema-stored/schema.js.map +1 -1
  19. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  20. package/dist/core/tree/anchorSet.js +18 -13
  21. package/dist/core/tree/anchorSet.js.map +1 -1
  22. package/dist/core/tree/treeTextFormat.js +1 -1
  23. package/dist/core/tree/treeTextFormat.js.map +1 -1
  24. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  25. package/dist/feature-libraries/chunked-forest/basicChunk.js +11 -8
  26. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  27. package/dist/feature-libraries/chunked-forest/chunkTree.js +2 -2
  28. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  29. package/dist/feature-libraries/chunked-forest/chunkedForest.js +3 -3
  30. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  31. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +2 -2
  32. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  33. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  34. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -3
  35. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  36. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +2 -2
  37. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  38. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.d.ts.map +1 -1
  39. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js +3 -3
  40. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js.map +1 -1
  41. package/dist/feature-libraries/chunked-forest/emptyChunk.js +14 -14
  42. package/dist/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
  43. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/uniformChunk.js +6 -4
  45. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  46. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  47. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  48. package/dist/feature-libraries/default-schema/schemaChecker.js +1 -1
  49. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  50. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  51. package/dist/feature-libraries/flex-tree/lazyField.js +4 -3
  52. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  53. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  54. package/dist/feature-libraries/flex-tree/lazyNode.js +5 -4
  55. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  56. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  57. package/dist/feature-libraries/indexing/anchorTreeIndex.js +1 -1
  58. package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  59. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  60. package/dist/feature-libraries/modular-schema/comparison.js +6 -4
  61. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  62. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  63. package/dist/feature-libraries/modular-schema/isNeverTree.js +4 -4
  64. package/dist/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  65. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
  66. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  67. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  68. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +10 -11
  69. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  70. package/dist/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
  71. package/dist/feature-libraries/node-key/mockNodeKeyManager.js.map +1 -1
  72. package/dist/feature-libraries/object-forest/objectForest.js +1 -1
  73. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  74. package/dist/feature-libraries/schema-index/codec.js +1 -1
  75. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  76. package/dist/feature-libraries/sequence-field/compose.js +1 -1
  77. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  78. package/dist/feature-libraries/sequence-field/invert.js +1 -1
  79. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  80. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
  81. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  82. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
  83. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  84. package/dist/feature-libraries/sequence-field/utils.js +1 -1
  85. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  86. package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  87. package/dist/feature-libraries/treeCursorUtils.js +6 -4
  88. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  89. package/dist/index.d.ts +4 -2
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +10 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/jsonDomainSchema.d.ts +113 -0
  94. package/dist/jsonDomainSchema.d.ts.map +1 -0
  95. package/dist/jsonDomainSchema.js +101 -0
  96. package/dist/jsonDomainSchema.js.map +1 -0
  97. package/dist/legacy.d.ts +15 -0
  98. package/dist/packageVersion.d.ts +1 -1
  99. package/dist/packageVersion.d.ts.map +1 -1
  100. package/dist/packageVersion.js +1 -1
  101. package/dist/packageVersion.js.map +1 -1
  102. package/dist/public.d.ts +15 -0
  103. package/dist/serializableDomainSchema.d.ts +108 -0
  104. package/dist/serializableDomainSchema.d.ts.map +1 -0
  105. package/dist/serializableDomainSchema.js +90 -0
  106. package/dist/serializableDomainSchema.js.map +1 -0
  107. package/dist/shared-tree/index.d.ts +1 -1
  108. package/dist/shared-tree/index.d.ts.map +1 -1
  109. package/dist/shared-tree/index.js.map +1 -1
  110. package/dist/shared-tree/schematizeTree.js +1 -1
  111. package/dist/shared-tree/schematizeTree.js.map +1 -1
  112. package/dist/shared-tree/sharedTree.d.ts +37 -20
  113. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  114. package/dist/shared-tree/sharedTree.js +17 -17
  115. package/dist/shared-tree/sharedTree.js.map +1 -1
  116. package/dist/shared-tree/sharedTreeChangeFamily.js +1 -1
  117. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  118. package/dist/shared-tree/treeApiAlpha.d.ts.map +1 -1
  119. package/dist/shared-tree/treeApiAlpha.js +4 -4
  120. package/dist/shared-tree/treeApiAlpha.js.map +1 -1
  121. package/dist/shared-tree/treeCheckout.js +1 -1
  122. package/dist/shared-tree/treeCheckout.js.map +1 -1
  123. package/dist/shared-tree-core/editManager.d.ts +11 -2
  124. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  125. package/dist/shared-tree-core/editManager.js +70 -34
  126. package/dist/shared-tree-core/editManager.js.map +1 -1
  127. package/dist/shared-tree-core/resubmitMachine.d.ts +2 -0
  128. package/dist/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  129. package/dist/shared-tree-core/resubmitMachine.js.map +1 -1
  130. package/dist/shared-tree-core/sharedTreeCore.d.ts +10 -3
  131. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  132. package/dist/shared-tree-core/sharedTreeCore.js +42 -7
  133. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  134. package/dist/simple-tree/api/component.d.ts +30 -0
  135. package/dist/simple-tree/api/component.d.ts.map +1 -0
  136. package/dist/simple-tree/api/component.js +26 -0
  137. package/dist/simple-tree/api/component.js.map +1 -0
  138. package/dist/simple-tree/api/customTree.js +3 -3
  139. package/dist/simple-tree/api/customTree.js.map +1 -1
  140. package/dist/simple-tree/api/index.d.ts +2 -1
  141. package/dist/simple-tree/api/index.d.ts.map +1 -1
  142. package/dist/simple-tree/api/index.js +3 -1
  143. package/dist/simple-tree/api/index.js.map +1 -1
  144. package/dist/simple-tree/api/schemaCreationUtilities.js +1 -1
  145. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  146. package/dist/simple-tree/api/schemaFactory.d.ts +0 -8
  147. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  148. package/dist/simple-tree/api/schemaFactory.js +4 -25
  149. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  150. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  151. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  152. package/dist/simple-tree/api/simpleTreeIndex.js +3 -3
  153. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  154. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  155. package/dist/simple-tree/api/tree.js +2 -3
  156. package/dist/simple-tree/api/tree.js.map +1 -1
  157. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  158. package/dist/simple-tree/api/treeNodeApi.js +7 -18
  159. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  160. package/dist/simple-tree/api/typesUnsafe.d.ts +127 -19
  161. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  162. package/dist/simple-tree/api/typesUnsafe.js +17 -0
  163. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  164. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  165. package/dist/simple-tree/api/verboseTree.js +5 -4
  166. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  167. package/dist/simple-tree/api/view.js +1 -1
  168. package/dist/simple-tree/api/view.js.map +1 -1
  169. package/dist/simple-tree/arrayNode.d.ts +1 -1
  170. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  171. package/dist/simple-tree/arrayNode.js +2 -2
  172. package/dist/simple-tree/arrayNode.js.map +1 -1
  173. package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  174. package/dist/simple-tree/core/getOrCreateNode.js +1 -1
  175. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
  176. package/dist/simple-tree/core/schemaCaching.js +1 -1
  177. package/dist/simple-tree/core/schemaCaching.js.map +1 -1
  178. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  179. package/dist/simple-tree/core/treeNodeKernel.js +6 -6
  180. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  181. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  182. package/dist/simple-tree/core/unhydratedFlexTree.js +5 -5
  183. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  184. package/dist/simple-tree/flexList.d.ts +4 -5
  185. package/dist/simple-tree/flexList.d.ts.map +1 -1
  186. package/dist/simple-tree/flexList.js +1 -14
  187. package/dist/simple-tree/flexList.js.map +1 -1
  188. package/dist/simple-tree/index.d.ts +4 -4
  189. package/dist/simple-tree/index.d.ts.map +1 -1
  190. package/dist/simple-tree/index.js +6 -2
  191. package/dist/simple-tree/index.js.map +1 -1
  192. package/dist/simple-tree/objectNode.d.ts +25 -2
  193. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  194. package/dist/simple-tree/objectNode.js +4 -2
  195. package/dist/simple-tree/objectNode.js.map +1 -1
  196. package/dist/simple-tree/proxies.js +1 -1
  197. package/dist/simple-tree/proxies.js.map +1 -1
  198. package/dist/simple-tree/schemaTypes.d.ts +211 -9
  199. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  200. package/dist/simple-tree/schemaTypes.js +83 -2
  201. package/dist/simple-tree/schemaTypes.js.map +1 -1
  202. package/dist/simple-tree/toMapTree.js +3 -3
  203. package/dist/simple-tree/toMapTree.js.map +1 -1
  204. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  205. package/dist/simple-tree/toStoredSchema.js +3 -6
  206. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  207. package/dist/simple-tree/treeNodeValid.d.ts +7 -1
  208. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  209. package/dist/simple-tree/treeNodeValid.js +18 -7
  210. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  211. package/dist/util/idAllocator.js +1 -1
  212. package/dist/util/idAllocator.js.map +1 -1
  213. package/dist/util/index.d.ts +2 -2
  214. package/dist/util/index.d.ts.map +1 -1
  215. package/dist/util/index.js +5 -4
  216. package/dist/util/index.js.map +1 -1
  217. package/dist/util/nestedMap.d.ts +2 -10
  218. package/dist/util/nestedMap.d.ts.map +1 -1
  219. package/dist/util/nestedMap.js +9 -28
  220. package/dist/util/nestedMap.js.map +1 -1
  221. package/dist/util/utils.d.ts +23 -6
  222. package/dist/util/utils.d.ts.map +1 -1
  223. package/dist/util/utils.js +46 -13
  224. package/dist/util/utils.js.map +1 -1
  225. package/lib/alpha.d.ts +20 -0
  226. package/lib/beta.d.ts +15 -0
  227. package/lib/codec/codec.js +3 -3
  228. package/lib/codec/codec.js.map +1 -1
  229. package/lib/codec/discriminatedUnions.d.ts.map +1 -1
  230. package/lib/codec/discriminatedUnions.js +1 -1
  231. package/lib/codec/discriminatedUnions.js.map +1 -1
  232. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  233. package/lib/core/schema-stored/schema.js +3 -3
  234. package/lib/core/schema-stored/schema.js.map +1 -1
  235. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  236. package/lib/core/tree/anchorSet.js +19 -14
  237. package/lib/core/tree/anchorSet.js.map +1 -1
  238. package/lib/core/tree/treeTextFormat.js +1 -1
  239. package/lib/core/tree/treeTextFormat.js.map +1 -1
  240. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  241. package/lib/feature-libraries/chunked-forest/basicChunk.js +11 -8
  242. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  243. package/lib/feature-libraries/chunked-forest/chunkTree.js +2 -2
  244. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  245. package/lib/feature-libraries/chunked-forest/chunkedForest.js +3 -3
  246. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  247. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +2 -2
  248. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  249. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  250. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -3
  251. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  252. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +2 -2
  253. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  254. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.d.ts.map +1 -1
  255. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js +3 -3
  256. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js.map +1 -1
  257. package/lib/feature-libraries/chunked-forest/emptyChunk.js +14 -14
  258. package/lib/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
  259. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  260. package/lib/feature-libraries/chunked-forest/uniformChunk.js +6 -4
  261. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  262. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  263. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  264. package/lib/feature-libraries/default-schema/schemaChecker.js +1 -1
  265. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  266. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  267. package/lib/feature-libraries/flex-tree/lazyField.js +4 -3
  268. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  269. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  270. package/lib/feature-libraries/flex-tree/lazyNode.js +5 -4
  271. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  272. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  273. package/lib/feature-libraries/indexing/anchorTreeIndex.js +1 -1
  274. package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  275. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  276. package/lib/feature-libraries/modular-schema/comparison.js +6 -4
  277. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  278. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  279. package/lib/feature-libraries/modular-schema/isNeverTree.js +4 -4
  280. package/lib/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  281. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
  282. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  283. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  284. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +11 -12
  285. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  286. package/lib/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
  287. package/lib/feature-libraries/node-key/mockNodeKeyManager.js.map +1 -1
  288. package/lib/feature-libraries/object-forest/objectForest.js +1 -1
  289. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  290. package/lib/feature-libraries/schema-index/codec.js +1 -1
  291. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  292. package/lib/feature-libraries/sequence-field/compose.js +1 -1
  293. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  294. package/lib/feature-libraries/sequence-field/invert.js +1 -1
  295. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  296. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
  297. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  298. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
  299. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  300. package/lib/feature-libraries/sequence-field/utils.js +1 -1
  301. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  302. package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  303. package/lib/feature-libraries/treeCursorUtils.js +6 -4
  304. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  305. package/lib/index.d.ts +4 -2
  306. package/lib/index.d.ts.map +1 -1
  307. package/lib/index.js +3 -1
  308. package/lib/index.js.map +1 -1
  309. package/lib/jsonDomainSchema.d.ts +113 -0
  310. package/lib/jsonDomainSchema.d.ts.map +1 -0
  311. package/lib/jsonDomainSchema.js +98 -0
  312. package/lib/jsonDomainSchema.js.map +1 -0
  313. package/lib/legacy.d.ts +15 -0
  314. package/lib/packageVersion.d.ts +1 -1
  315. package/lib/packageVersion.d.ts.map +1 -1
  316. package/lib/packageVersion.js +1 -1
  317. package/lib/packageVersion.js.map +1 -1
  318. package/lib/public.d.ts +15 -0
  319. package/lib/serializableDomainSchema.d.ts +108 -0
  320. package/lib/serializableDomainSchema.d.ts.map +1 -0
  321. package/lib/serializableDomainSchema.js +87 -0
  322. package/lib/serializableDomainSchema.js.map +1 -0
  323. package/lib/shared-tree/index.d.ts +1 -1
  324. package/lib/shared-tree/index.d.ts.map +1 -1
  325. package/lib/shared-tree/index.js.map +1 -1
  326. package/lib/shared-tree/schematizeTree.js +1 -1
  327. package/lib/shared-tree/schematizeTree.js.map +1 -1
  328. package/lib/shared-tree/sharedTree.d.ts +37 -20
  329. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  330. package/lib/shared-tree/sharedTree.js +18 -18
  331. package/lib/shared-tree/sharedTree.js.map +1 -1
  332. package/lib/shared-tree/sharedTreeChangeFamily.js +1 -1
  333. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  334. package/lib/shared-tree/treeApiAlpha.d.ts.map +1 -1
  335. package/lib/shared-tree/treeApiAlpha.js +4 -4
  336. package/lib/shared-tree/treeApiAlpha.js.map +1 -1
  337. package/lib/shared-tree/treeCheckout.js +1 -1
  338. package/lib/shared-tree/treeCheckout.js.map +1 -1
  339. package/lib/shared-tree-core/editManager.d.ts +11 -2
  340. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  341. package/lib/shared-tree-core/editManager.js +70 -34
  342. package/lib/shared-tree-core/editManager.js.map +1 -1
  343. package/lib/shared-tree-core/resubmitMachine.d.ts +2 -0
  344. package/lib/shared-tree-core/resubmitMachine.d.ts.map +1 -1
  345. package/lib/shared-tree-core/resubmitMachine.js.map +1 -1
  346. package/lib/shared-tree-core/sharedTreeCore.d.ts +10 -3
  347. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  348. package/lib/shared-tree-core/sharedTreeCore.js +42 -7
  349. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  350. package/lib/simple-tree/api/component.d.ts +30 -0
  351. package/lib/simple-tree/api/component.d.ts.map +1 -0
  352. package/lib/simple-tree/api/component.js +23 -0
  353. package/lib/simple-tree/api/component.js.map +1 -0
  354. package/lib/simple-tree/api/customTree.js +3 -3
  355. package/lib/simple-tree/api/customTree.js.map +1 -1
  356. package/lib/simple-tree/api/index.d.ts +2 -1
  357. package/lib/simple-tree/api/index.d.ts.map +1 -1
  358. package/lib/simple-tree/api/index.js +1 -0
  359. package/lib/simple-tree/api/index.js.map +1 -1
  360. package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
  361. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  362. package/lib/simple-tree/api/schemaFactory.d.ts +0 -8
  363. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  364. package/lib/simple-tree/api/schemaFactory.js +2 -22
  365. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  366. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  367. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  368. package/lib/simple-tree/api/simpleTreeIndex.js +3 -3
  369. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  370. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  371. package/lib/simple-tree/api/tree.js +3 -4
  372. package/lib/simple-tree/api/tree.js.map +1 -1
  373. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  374. package/lib/simple-tree/api/treeNodeApi.js +9 -20
  375. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  376. package/lib/simple-tree/api/typesUnsafe.d.ts +127 -19
  377. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  378. package/lib/simple-tree/api/typesUnsafe.js +15 -1
  379. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  380. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  381. package/lib/simple-tree/api/verboseTree.js +5 -4
  382. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  383. package/lib/simple-tree/api/view.js +1 -1
  384. package/lib/simple-tree/api/view.js.map +1 -1
  385. package/lib/simple-tree/arrayNode.d.ts +1 -1
  386. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  387. package/lib/simple-tree/arrayNode.js +2 -2
  388. package/lib/simple-tree/arrayNode.js.map +1 -1
  389. package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  390. package/lib/simple-tree/core/getOrCreateNode.js +1 -1
  391. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
  392. package/lib/simple-tree/core/schemaCaching.js +1 -1
  393. package/lib/simple-tree/core/schemaCaching.js.map +1 -1
  394. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  395. package/lib/simple-tree/core/treeNodeKernel.js +6 -6
  396. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  397. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  398. package/lib/simple-tree/core/unhydratedFlexTree.js +5 -5
  399. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  400. package/lib/simple-tree/flexList.d.ts +4 -5
  401. package/lib/simple-tree/flexList.d.ts.map +1 -1
  402. package/lib/simple-tree/flexList.js +0 -12
  403. package/lib/simple-tree/flexList.js.map +1 -1
  404. package/lib/simple-tree/index.d.ts +4 -4
  405. package/lib/simple-tree/index.d.ts.map +1 -1
  406. package/lib/simple-tree/index.js +2 -2
  407. package/lib/simple-tree/index.js.map +1 -1
  408. package/lib/simple-tree/objectNode.d.ts +25 -2
  409. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  410. package/lib/simple-tree/objectNode.js +4 -2
  411. package/lib/simple-tree/objectNode.js.map +1 -1
  412. package/lib/simple-tree/proxies.js +1 -1
  413. package/lib/simple-tree/proxies.js.map +1 -1
  414. package/lib/simple-tree/schemaTypes.d.ts +211 -9
  415. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  416. package/lib/simple-tree/schemaTypes.js +81 -3
  417. package/lib/simple-tree/schemaTypes.js.map +1 -1
  418. package/lib/simple-tree/toMapTree.js +3 -3
  419. package/lib/simple-tree/toMapTree.js.map +1 -1
  420. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  421. package/lib/simple-tree/toStoredSchema.js +5 -8
  422. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  423. package/lib/simple-tree/treeNodeValid.d.ts +7 -1
  424. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  425. package/lib/simple-tree/treeNodeValid.js +18 -7
  426. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  427. package/lib/util/idAllocator.js +1 -1
  428. package/lib/util/idAllocator.js.map +1 -1
  429. package/lib/util/index.d.ts +2 -2
  430. package/lib/util/index.d.ts.map +1 -1
  431. package/lib/util/index.js +2 -2
  432. package/lib/util/index.js.map +1 -1
  433. package/lib/util/nestedMap.d.ts +2 -10
  434. package/lib/util/nestedMap.d.ts.map +1 -1
  435. package/lib/util/nestedMap.js +5 -23
  436. package/lib/util/nestedMap.js.map +1 -1
  437. package/lib/util/utils.d.ts +23 -6
  438. package/lib/util/utils.d.ts.map +1 -1
  439. package/lib/util/utils.js +42 -11
  440. package/lib/util/utils.js.map +1 -1
  441. package/package.json +27 -23
  442. package/src/codec/codec.ts +3 -3
  443. package/src/codec/discriminatedUnions.ts +2 -1
  444. package/src/core/schema-stored/schema.ts +5 -3
  445. package/src/core/tree/anchorSet.ts +37 -26
  446. package/src/core/tree/treeTextFormat.ts +1 -1
  447. package/src/feature-libraries/chunked-forest/basicChunk.ts +11 -8
  448. package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -2
  449. package/src/feature-libraries/chunked-forest/chunkedForest.ts +3 -3
  450. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +2 -2
  451. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +4 -3
  452. package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +2 -2
  453. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncoding.ts +4 -3
  454. package/src/feature-libraries/chunked-forest/emptyChunk.ts +14 -14
  455. package/src/feature-libraries/chunked-forest/uniformChunk.ts +6 -4
  456. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -1
  457. package/src/feature-libraries/default-schema/schemaChecker.ts +1 -1
  458. package/src/feature-libraries/flex-tree/lazyField.ts +6 -8
  459. package/src/feature-libraries/flex-tree/lazyNode.ts +6 -4
  460. package/src/feature-libraries/indexing/anchorTreeIndex.ts +2 -1
  461. package/src/feature-libraries/modular-schema/comparison.ts +7 -5
  462. package/src/feature-libraries/modular-schema/isNeverTree.ts +6 -4
  463. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +4 -4
  464. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +16 -12
  465. package/src/feature-libraries/node-key/mockNodeKeyManager.ts +1 -1
  466. package/src/feature-libraries/object-forest/objectForest.ts +1 -1
  467. package/src/feature-libraries/schema-index/codec.ts +1 -1
  468. package/src/feature-libraries/sequence-field/compose.ts +1 -1
  469. package/src/feature-libraries/sequence-field/invert.ts +1 -1
  470. package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +1 -1
  471. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +1 -1
  472. package/src/feature-libraries/sequence-field/utils.ts +1 -1
  473. package/src/feature-libraries/treeCursorUtils.ts +6 -4
  474. package/src/index.ts +22 -1
  475. package/src/jsonDomainSchema.ts +129 -0
  476. package/src/packageVersion.ts +1 -1
  477. package/src/serializableDomainSchema.ts +121 -0
  478. package/src/shared-tree/index.ts +0 -1
  479. package/src/shared-tree/schematizeTree.ts +1 -1
  480. package/src/shared-tree/sharedTree.ts +31 -41
  481. package/src/shared-tree/sharedTreeChangeFamily.ts +1 -1
  482. package/src/shared-tree/treeApiAlpha.ts +12 -4
  483. package/src/shared-tree/treeCheckout.ts +1 -1
  484. package/src/shared-tree-core/editManager.ts +85 -47
  485. package/src/shared-tree-core/resubmitMachine.ts +2 -0
  486. package/src/shared-tree-core/sharedTreeCore.ts +62 -14
  487. package/src/simple-tree/api/component.ts +42 -0
  488. package/src/simple-tree/api/customTree.ts +3 -3
  489. package/src/simple-tree/api/index.ts +7 -0
  490. package/src/simple-tree/api/schemaCreationUtilities.ts +1 -1
  491. package/src/simple-tree/api/schemaFactory.ts +1 -28
  492. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -1
  493. package/src/simple-tree/api/simpleTreeIndex.ts +3 -3
  494. package/src/simple-tree/api/tree.ts +3 -3
  495. package/src/simple-tree/api/treeNodeApi.ts +10 -18
  496. package/src/simple-tree/api/typesUnsafe.ts +193 -18
  497. package/src/simple-tree/api/verboseTree.ts +8 -4
  498. package/src/simple-tree/api/view.ts +1 -1
  499. package/src/simple-tree/arrayNode.ts +2 -2
  500. package/src/simple-tree/core/getOrCreateNode.ts +2 -1
  501. package/src/simple-tree/core/schemaCaching.ts +1 -1
  502. package/src/simple-tree/core/treeNodeKernel.ts +9 -6
  503. package/src/simple-tree/core/unhydratedFlexTree.ts +7 -5
  504. package/src/simple-tree/flexList.ts +4 -14
  505. package/src/simple-tree/index.ts +25 -1
  506. package/src/simple-tree/objectNode.ts +50 -5
  507. package/src/simple-tree/proxies.ts +1 -1
  508. package/src/simple-tree/schemaTypes.ts +322 -23
  509. package/src/simple-tree/toMapTree.ts +3 -3
  510. package/src/simple-tree/toStoredSchema.ts +5 -7
  511. package/src/simple-tree/treeNodeValid.ts +21 -7
  512. package/src/util/idAllocator.ts +1 -1
  513. package/src/util/index.ts +3 -2
  514. package/src/util/nestedMap.ts +9 -33
  515. package/src/util/utils.ts +52 -12
@@ -8,6 +8,8 @@ import type { RestrictiveStringRecord, UnionToIntersection } from "../../util/in
8
8
  import type {
9
9
  ApplyKind,
10
10
  ApplyKindInput,
11
+ CustomizedSchemaTyping,
12
+ CustomTypes,
11
13
  FieldKind,
12
14
  FieldSchema,
13
15
  ImplicitAllowedTypes,
@@ -25,6 +27,7 @@ import type {
25
27
  } from "../core/index.js";
26
28
  import type { TreeArrayNode } from "../arrayNode.js";
27
29
  import type { FlexListToUnion, LazyItem } from "../flexList.js";
30
+ import type { ApplyKindAssignment } from "../objectNode.js";
28
31
 
29
32
  /*
30
33
  * TODO:
@@ -48,17 +51,168 @@ import type { FlexListToUnion, LazyItem } from "../flexList.js";
48
51
  */
49
52
  export type Unenforced<_DesiredExtendsConstraint> = unknown;
50
53
 
54
+ /**
55
+ * {@link Unenforced} version of {@link customizeSchemaTyping} for use with recursive schema types.
56
+ *
57
+ * @remarks
58
+ * When using this API to modify a schema derived type such that the type is no longer recursive,
59
+ * or uses an externally defined type (which can be recursive), {@link customizeSchemaTyping} should be used instead for an improved developer experience.
60
+ * Additionally, in this case, none of the "unsafe" type variants should be needed: the whole schema (with runtime but not schema derived type recursion)
61
+ * should use the normal (not unsafe/recursive) APIs.
62
+ * @alpha
63
+ */
64
+ export function customizeSchemaTypingUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>>(
65
+ schema: TSchema,
66
+ ): CustomizerUnsafe<TSchema> {
67
+ // This function just does type branding, and duplicating the typing here to avoid any would just make it harder to maintain not easier:
68
+ const f = (): any => schema;
69
+ return { simplified: f, simplifiedUnrestricted: f, custom: f };
70
+ }
71
+
72
+ /**
73
+ * {@link Unenforced} version of `Customizer`.
74
+ * @remarks
75
+ * This has fewer options than the safe version, but all options can still be expressed using the "custom" method.
76
+ * @sealed @public
77
+ */
78
+ export interface CustomizerUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> {
79
+ /**
80
+ * Replace typing with a single substitute type which allowed types must implement.
81
+ * @remarks
82
+ * This is generally type safe for reading the tree, but allows instances of `T` other than those listed in the schema to be assigned,
83
+ * which can be out of schema and err at runtime in the same way {@link CustomizerUnsafe.relaxed} does.
84
+ * Until with {@link CustomizerUnsafe.relaxed}, implicit construction is disabled, meaning all nodes must be explicitly constructed (and thus implement `T`) before being inserted.
85
+ */
86
+ simplified<
87
+ T extends (TreeNode | TreeLeafValue) & TreeNodeFromImplicitAllowedTypesUnsafe<TSchema>,
88
+ >(): CustomizedSchemaTyping<
89
+ TSchema,
90
+ {
91
+ input: T;
92
+ readWrite: T;
93
+ output: T;
94
+ }
95
+ >;
96
+
97
+ /**
98
+ * The same as {@link CustomizerUnsafe} except that more T values are allowed, even ones not known to be implemented by `TSchema`.
99
+ */
100
+ simplifiedUnrestricted<T extends TreeNode | TreeLeafValue>(): CustomizedSchemaTyping<
101
+ TSchema,
102
+ {
103
+ input: T;
104
+ readWrite: T;
105
+ output: T;
106
+ }
107
+ >;
108
+
109
+ /**
110
+ * Fully arbitrary customization.
111
+ * Provided types override existing types.
112
+ * @remarks
113
+ * This can express any of the customizations possible via other {@link CustomizerUnsafe} methods:
114
+ * this API is however more verbose and can more easily be used to unsafe typing.
115
+ */
116
+ custom<T extends Partial<CustomTypes>>(): CustomizedSchemaTyping<
117
+ TSchema,
118
+ Pick<CustomTypes, "readWrite" | "output"> & {
119
+ // Check if property is provided. This check is needed to early out missing values so if undefined is allowed,
120
+ // not providing the field doesn't overwrite the corresponding type with undefined.
121
+ // TODO: test this case
122
+ [Property in keyof CustomTypes]: Property extends keyof T
123
+ ? T[Property] extends CustomTypes[Property]
124
+ ? T[Property]
125
+ : GetTypesUnsafe<TSchema>[Property]
126
+ : GetTypesUnsafe<TSchema>[Property];
127
+ }
128
+ >;
129
+ }
130
+
51
131
  /**
52
132
  * {@link Unenforced} version of `ObjectFromSchemaRecord`.
53
133
  * @remarks
54
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
134
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
55
135
  * @system @public
56
136
  */
57
137
  export type ObjectFromSchemaRecordUnsafe<
58
138
  T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
59
- > = {
60
- -readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
61
- };
139
+ > =
140
+ // Due to https://github.com/microsoft/TypeScript/issues/43826 we can not set the desired setter type.
141
+ // Attempts to implement this in the cleaner way ObjectFromSchemaRecord uses cause recursive types to fail to compile.
142
+ // Supporting explicit field schema wrapping CustomizedSchemaTyping here breaks compilation of recursive cases as well.
143
+ {
144
+ -readonly [Property in keyof T as [T[Property]] extends [
145
+ CustomizedSchemaTyping<
146
+ unknown,
147
+ {
148
+ readonly readWrite: never;
149
+ readonly input: unknown;
150
+ readonly output: TreeNode | TreeLeafValue;
151
+ }
152
+ >,
153
+ ]
154
+ ? never // Remove readWrite version for cases using CustomizedSchemaTyping to set readWrite to never.
155
+ : Property]: AssignableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
156
+ } & {
157
+ readonly [Property in keyof T as [T[Property]] extends [
158
+ CustomizedSchemaTyping<
159
+ unknown,
160
+ {
161
+ readonly readWrite: never;
162
+ readonly input: unknown;
163
+ readonly output: TreeNode | TreeLeafValue;
164
+ }
165
+ >,
166
+ ]
167
+ ? // Inverse of the conditional above: only include readonly fields when not including the readWrite one. This is required to make recursive types compile.
168
+ Property
169
+ : never]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
170
+ };
171
+
172
+ /**
173
+ * {@link Unenforced} version of `AssignableTreeFieldFromImplicitField`.
174
+ * @remarks
175
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
176
+ * @privateRemarks
177
+ * Recursive version doesn't remove setters when this is never, so this uses covariant not contravariant union handling.
178
+ * @system @public
179
+ */
180
+ export type AssignableTreeFieldFromImplicitFieldUnsafe<
181
+ TSchema extends Unenforced<ImplicitFieldSchema>,
182
+ > = TSchema extends FieldSchemaUnsafe<infer Kind, infer Types>
183
+ ? ApplyKindAssignment<GetTypesUnsafe<Types>["readWrite"], Kind>
184
+ : GetTypesUnsafe<TSchema>["readWrite"];
185
+
186
+ /**
187
+ * {@link Unenforced} version of `TypesUnsafe`.
188
+ * @remarks
189
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
190
+ * @system @public
191
+ */
192
+ export type GetTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = [
193
+ TSchema,
194
+ ] extends [CustomizedSchemaTyping<unknown, infer TCustom>]
195
+ ? TCustom
196
+ : StrictTypesUnsafe<TSchema>;
197
+
198
+ /**
199
+ * {@link Unenforced} version of `StrictTypes`.
200
+ * @remarks
201
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
202
+ * @system @public
203
+ */
204
+ export interface StrictTypesUnsafe<
205
+ TSchema extends Unenforced<ImplicitAllowedTypes>,
206
+ TInput = DefaultInsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>,
207
+ TOutput = DefaultTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>,
208
+ > {
209
+ input: TInput;
210
+ // Partial mitigation setter limitations (removal of setters when TInput is never by setting this to never) breaks compilation if used here,
211
+ // so recursive objects end up allowing some unsafe assignments which will error at runtime.
212
+ // This unsafety occurs when schema types are not exact, so output types are generalized which results in setters being generalized (wince they get the same type) which is unsafe.
213
+ readWrite: TOutput; // TInput extends never ? never : TOutput;
214
+ output: TOutput;
215
+ }
62
216
 
63
217
  /**
64
218
  * {@link Unenforced} version of {@link TreeNodeSchema}.
@@ -121,7 +275,7 @@ export interface TreeNodeSchemaNonClassUnsafe<
121
275
  /**
122
276
  * {@link Unenforced} version of {@link TreeObjectNode}.
123
277
  * @remarks
124
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
278
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
125
279
  * @system @public
126
280
  */
127
281
  export type TreeObjectNodeUnsafe<
@@ -132,7 +286,7 @@ export type TreeObjectNodeUnsafe<
132
286
  /**
133
287
  * {@link Unenforced} version of {@link TreeFieldFromImplicitField}.
134
288
  * @remarks
135
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
289
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
136
290
  * @system @public
137
291
  */
138
292
  export type TreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<ImplicitFieldSchema>> =
@@ -153,11 +307,21 @@ export type AllowedTypesUnsafe = readonly LazyItem<TreeNodeSchemaUnsafe>[];
153
307
  /**
154
308
  * {@link Unenforced} version of {@link TreeNodeFromImplicitAllowedTypes}.
155
309
  * @remarks
156
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
310
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
157
311
  * @system @public
158
312
  */
159
313
  export type TreeNodeFromImplicitAllowedTypesUnsafe<
160
314
  TSchema extends Unenforced<ImplicitAllowedTypes>,
315
+ > = GetTypesUnsafe<TSchema>["output"];
316
+
317
+ /**
318
+ * {@link Unenforced} version of {@link DefaultTreeNodeFromImplicitAllowedTypesUnsafe}.
319
+ * @remarks
320
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
321
+ * @system @public
322
+ */
323
+ export type DefaultTreeNodeFromImplicitAllowedTypesUnsafe<
324
+ TSchema extends Unenforced<ImplicitAllowedTypes>,
161
325
  > = TSchema extends TreeNodeSchemaUnsafe
162
326
  ? NodeFromSchemaUnsafe<TSchema>
163
327
  : TSchema extends AllowedTypesUnsafe
@@ -168,11 +332,22 @@ export type TreeNodeFromImplicitAllowedTypesUnsafe<
168
332
  * {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
169
333
  * @see {@link Input}
170
334
  * @remarks
171
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
335
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
172
336
  * @system @public
173
337
  */
174
338
  export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<
175
339
  TSchema extends Unenforced<ImplicitAllowedTypes>,
340
+ > = GetTypesUnsafe<TSchema>["input"];
341
+
342
+ /**
343
+ * {@link Unenforced} version of {@link DefaultInsertableTreeNodeFromImplicitAllowedTypes}.
344
+ * @see {@link Input}
345
+ * @remarks
346
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
347
+ * @system @public
348
+ */
349
+ export type DefaultInsertableTreeNodeFromImplicitAllowedTypesUnsafe<
350
+ TSchema extends Unenforced<ImplicitAllowedTypes>,
176
351
  > = [TSchema] extends [TreeNodeSchemaUnsafe]
177
352
  ? InsertableTypedNodeUnsafe<TSchema>
178
353
  : [TSchema] extends [AllowedTypesUnsafe]
@@ -197,7 +372,7 @@ export type InsertableTreeNodeFromAllowedTypesUnsafe<
197
372
  * {@link Unenforced} version of {@link InsertableTypedNode}.
198
373
  * @see {@link Input}
199
374
  * @remarks
200
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
375
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
201
376
  * @privateRemarks
202
377
  * TODO:
203
378
  * This is less strict than InsertableTypedNode when given non-exact schema to avoid compilation issues.
@@ -216,7 +391,7 @@ export type InsertableTypedNodeUnsafe<
216
391
  /**
217
392
  * {@link Unenforced} version of {@link NodeFromSchema}.
218
393
  * @remarks
219
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
394
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
220
395
  * @system @public
221
396
  */
222
397
  export type NodeFromSchemaUnsafe<T extends Unenforced<TreeNodeSchema>> =
@@ -225,7 +400,7 @@ export type NodeFromSchemaUnsafe<T extends Unenforced<TreeNodeSchema>> =
225
400
  /**
226
401
  * {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
227
402
  * @remarks
228
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
403
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
229
404
  * @system @public
230
405
  */
231
406
  export type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> =
@@ -234,7 +409,7 @@ export type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> =
234
409
  /**
235
410
  * {@link Unenforced} version of {@link (TreeArrayNode:interface)}.
236
411
  * @remarks
237
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
412
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
238
413
  * @system @sealed @public
239
414
  */
240
415
  export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAllowedTypes>>
@@ -247,7 +422,7 @@ export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAl
247
422
  /**
248
423
  * {@link Unenforced} version of {@link TreeMapNode}.
249
424
  * @remarks
250
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
425
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
251
426
  * @system @sealed @public
252
427
  */
253
428
  export interface TreeMapNodeUnsafe<T extends Unenforced<ImplicitAllowedTypes>>
@@ -271,7 +446,7 @@ export interface TreeMapNodeUnsafe<T extends Unenforced<ImplicitAllowedTypes>>
271
446
  * Copy of TypeScript's ReadonlyMap, but with `TreeNodeFromImplicitAllowedTypesUnsafe<T>` inlined into it.
272
447
  * 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.
273
448
  * @remarks
274
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
449
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
275
450
  * @privateRemarks
276
451
  * This is the same as `ReadonlyMap<K, TreeNodeFromImplicitAllowedTypesUnsafe<T>>` (Checked in test),
277
452
  * except that it avoids the above mentioned compile error.
@@ -313,7 +488,7 @@ export interface ReadonlyMapInlined<K, T extends Unenforced<ImplicitAllowedTypes
313
488
  /**
314
489
  * {@link Unenforced} version of `FieldHasDefault`.
315
490
  * @remarks
316
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
491
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
317
492
  * @system @sealed @public
318
493
  */
319
494
  export type FieldHasDefaultUnsafe<T extends Unenforced<ImplicitFieldSchema>> =
@@ -328,7 +503,7 @@ export type FieldHasDefaultUnsafe<T extends Unenforced<ImplicitFieldSchema>> =
328
503
  * {@link Unenforced} version of `InsertableObjectFromSchemaRecord`.
329
504
  * @see {@link Input}
330
505
  * @remarks
331
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
506
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
332
507
  * @system @public
333
508
  */
334
509
  export type InsertableObjectFromSchemaRecordUnsafe<
@@ -350,7 +525,7 @@ export type InsertableObjectFromSchemaRecordUnsafe<
350
525
  * {@link Unenforced} version of {@link InsertableTreeFieldFromImplicitField}.
351
526
  * @see {@link Input}
352
527
  * @remarks
353
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
528
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
354
529
  * @system @public
355
530
  */
356
531
  export type InsertableTreeFieldFromImplicitFieldUnsafe<
@@ -365,7 +540,7 @@ export type InsertableTreeFieldFromImplicitFieldUnsafe<
365
540
  /**
366
541
  * {@link Unenforced} version of {@link FieldSchema}.
367
542
  * @remarks
368
- * Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
543
+ * Do not use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
369
544
  * @public
370
545
  */
371
546
  export interface FieldSchemaUnsafe<
@@ -172,7 +172,8 @@ export function applySchemaToParserOptions<TCustom>(
172
172
  : {
173
173
  encode: (type, key: FieldKey): string => {
174
174
  // translate stored key into property key.
175
- const simpleNodeSchema = context.schema.get(brand(type)) ?? fail("missing schema");
175
+ const simpleNodeSchema =
176
+ context.schema.get(brand(type)) ?? fail(0xb39 /* missing schema */);
176
177
  if (isObjectNodeSchema(simpleNodeSchema)) {
177
178
  const propertyKey = simpleNodeSchema.storedKeyToPropertyKey.get(key);
178
179
  if (propertyKey !== undefined) {
@@ -193,10 +194,12 @@ export function applySchemaToParserOptions<TCustom>(
193
194
  return key;
194
195
  },
195
196
  parse: (type, inputKey): FieldKey => {
196
- const simpleNodeSchema = context.schema.get(brand(type)) ?? fail("missing schema");
197
+ const simpleNodeSchema =
198
+ context.schema.get(brand(type)) ?? fail(0xb3a /* missing schema */);
197
199
  if (isObjectNodeSchema(simpleNodeSchema)) {
198
200
  const info =
199
- simpleNodeSchema.flexKeyMap.get(inputKey) ?? fail("missing field info");
201
+ simpleNodeSchema.flexKeyMap.get(inputKey) ??
202
+ fail(0xb3b /* missing field info */);
200
203
  return info.storedKey;
201
204
  }
202
205
  return brand(inputKey);
@@ -345,7 +348,8 @@ function verboseFromCursorInner<TCustom>(
345
348
  schema: ReadonlyMap<string, TreeNodeSchema>,
346
349
  ): VerboseTree<TCustom> {
347
350
  const fields = customFromCursor(reader, options, schema, verboseFromCursorInner);
348
- const nodeSchema = schema.get(reader.type) ?? fail("missing schema for type in cursor");
351
+ const nodeSchema =
352
+ schema.get(reader.type) ?? fail(0xb3c /* missing schema for type in cursor */);
349
353
  if (nodeSchema.kind === NodeKind.Leaf) {
350
354
  return fields as CustomTreeValue<TCustom>;
351
355
  }
@@ -250,7 +250,7 @@ export class ViewSchema {
250
250
  this.viewSchemaAsStored.nodeSchema.get(adapter.output),
251
251
  )
252
252
  ) {
253
- fail("tree adapter for stored adapter.output should not be never");
253
+ fail(0xb3d /* tree adapter for stored adapter.output should not be never */);
254
254
  }
255
255
  }
256
256
 
@@ -858,7 +858,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
858
858
  // Therefore it must include `length`,
859
859
  // even though this "length" is never invoked (due to being shadowed by the proxy provided own property).
860
860
  public get length(): number {
861
- return fail("Proxy should intercept length");
861
+ return fail(0xadb /* Proxy should intercept length */);
862
862
  }
863
863
 
864
864
  public [Symbol.iterator](): IterableIterator<TreeNodeFromImplicitAllowedTypes<T>> {
@@ -1045,7 +1045,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
1045
1045
  throw new UsageError(`Concurrent editing and iteration is not allowed.`);
1046
1046
  }
1047
1047
  for (let i = 0; i < this.length; i++) {
1048
- yield this.at(i) ?? fail("Index is out of bounds");
1048
+ yield this.at(i) ?? fail(0xadc /* Index is out of bounds */);
1049
1049
  if (initialLastUpdatedStamp !== kernel.generationNumber) {
1050
1050
  throw new UsageError(`Concurrent editing and iteration is not allowed.`);
1051
1051
  }
@@ -31,7 +31,8 @@ export function getOrCreateNodeFromInnerNode(flexNode: InnerNode): TreeNode | Tr
31
31
  return cached;
32
32
  }
33
33
 
34
- const classSchema = getSimpleNodeSchemaFromInnerNode(flexNode) ?? fail("Missing schema");
34
+ const classSchema =
35
+ getSimpleNodeSchemaFromInnerNode(flexNode) ?? fail(0xb3e /* Missing schema */);
35
36
  const node = flexNode as unknown as InternalTreeNode;
36
37
  // eslint-disable-next-line unicorn/prefer-ternary
37
38
  if (typeof classSchema === "function") {
@@ -17,7 +17,7 @@ import { SimpleContextSlot, type Context } from "./context.js";
17
17
  */
18
18
  export function getSimpleNodeSchemaFromInnerNode(innerNode: InnerNode): TreeNodeSchema {
19
19
  const context: Context = getSimpleContextFromInnerNode(innerNode);
20
- return context.schema.get(innerNode.schema) ?? fail("missing schema from context");
20
+ return context.schema.get(innerNode.schema) ?? fail(0xb3f /* missing schema from context */);
21
21
  }
22
22
 
23
23
  /**
@@ -184,7 +184,7 @@ export class TreeNodeKernel {
184
184
  // This can't be cached on this.#hydrated during hydration since initial tree is hydrated before the context is cached on the anchorSet.
185
185
  return (
186
186
  this.#hydrationState?.anchorNode.anchorSet.slots.get(SimpleContextSlot) ??
187
- fail("missing simple-tree context")
187
+ fail(0xb40 /* missing simple-tree context */)
188
188
  );
189
189
  }
190
190
  return this.initialContext;
@@ -303,7 +303,8 @@ export class TreeNodeKernel {
303
303
  this.#hydrationState.innerNode = flexNode;
304
304
  } else {
305
305
  // ...otherwise, the flex node must be created
306
- const context = anchorNode.anchorSet.slots.get(ContextSlot) ?? fail("missing context");
306
+ const context =
307
+ anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(0xb41 /* missing context */);
307
308
  const cursor = context.checkout.forest.allocateCursor("getFlexNode");
308
309
  context.checkout.forest.moveCursorToPath(anchorNode, cursor);
309
310
  this.#hydrationState.innerNode = makeTree(context, cursor);
@@ -332,7 +333,8 @@ export class TreeNodeKernel {
332
333
  public anchorProxy(anchors: AnchorSet, path: UpPath): AnchorNode {
333
334
  assert(!anchorForgetters.has(this.node), 0x91c /* Proxy anchor should not be set twice */);
334
335
  const anchor = anchors.track(path);
335
- const anchorNode = anchors.locate(anchor) ?? fail("Expected anchor node to be present");
336
+ const anchorNode =
337
+ anchors.locate(anchor) ?? fail(0xb42 /* Expected anchor node to be present */);
336
338
  this.hydrate(anchorNode);
337
339
  const forget = (): void => {
338
340
  if (anchors.locate(anchor)) {
@@ -434,9 +436,9 @@ export function getTreeNodeSchemaFromHydratedFlexNode(flexNode: FlexTreeNode): T
434
436
 
435
437
  const context =
436
438
  flexNode.anchorNode.anchorSet.slots.get(SimpleContextSlot) ??
437
- fail("Missing SimpleContextSlot");
439
+ fail(0xb43 /* Missing SimpleContextSlot */);
438
440
 
439
- return context.schema.get(flexNode.schema) ?? fail("Missing schema");
441
+ return context.schema.get(flexNode.schema) ?? fail(0xb44 /* Missing schema */);
440
442
  }
441
443
 
442
444
  /**
@@ -461,7 +463,8 @@ function flexNodeFromAnchor(anchorNode: AnchorNode): FlexTreeNode {
461
463
  if (flexNode !== undefined) {
462
464
  return flexNode; // If it does have a flex node, return it...
463
465
  } // ...otherwise, the flex node must be created
464
- const context = anchorNode.anchorSet.slots.get(ContextSlot) ?? fail("missing context");
466
+ const context =
467
+ anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(0xb45 /* missing context */);
465
468
  const cursor = context.checkout.forest.allocateCursor("getFlexNode");
466
469
  context.checkout.forest.moveCursorToPath(anchorNode, cursor);
467
470
  const newFlexNode = makeTree(context, cursor);
@@ -79,7 +79,9 @@ export class UnhydratedFlexTreeNode implements UnhydratedFlexTreeNode {
79
79
  }
80
80
 
81
81
  public get storedSchema(): TreeNodeStoredSchema {
82
- return this.context.schema.nodeSchema.get(this.mapTree.type) ?? fail("missing schema");
82
+ return (
83
+ this.context.schema.nodeSchema.get(this.mapTree.type) ?? fail(0xb46 /* missing schema */)
84
+ );
83
85
  }
84
86
 
85
87
  public readonly [flexTreeMarker] = FlexTreeEntityKind.Node as const;
@@ -215,7 +217,7 @@ export class UnhydratedFlexTreeNode implements UnhydratedFlexTreeNode {
215
217
  public get anchorNode(): AnchorNode {
216
218
  // This API is relevant to `LazyTreeNode`s, but not `UnhydratedFlexTreeNode`s.
217
219
  // TODO: Refactor the FlexTreeNode interface so that stubbing this out isn't necessary.
218
- return fail("UnhydratedFlexTreeNode does not implement anchorNode");
220
+ return fail(0xb47 /* UnhydratedFlexTreeNode does not implement anchorNode */);
219
221
  }
220
222
 
221
223
  private walkTree(): void {
@@ -294,10 +296,10 @@ const unparentedLocation: LocationInField = {
294
296
  },
295
297
  schema: brand(forbiddenFieldKindIdentifier),
296
298
  get context(): never {
297
- return fail("unsupported");
299
+ return fail(0xb48 /* unsupported */);
298
300
  },
299
301
  getFieldPath() {
300
- fail("unsupported");
302
+ fail(0xb49 /* unsupported */);
301
303
  },
302
304
  },
303
305
  index: -1,
@@ -489,7 +491,7 @@ export class UnhydratedTreeSequenceField
489
491
  this.edit((mapTrees) => {
490
492
  removed = mapTrees.splice(index, count);
491
493
  });
492
- return removed ?? fail("Expected removed to be set by edit");
494
+ return removed ?? fail(0xb4a /* Expected removed to be set by edit */);
493
495
  },
494
496
  };
495
497
 
@@ -44,28 +44,18 @@ export function markEager<T>(t: T): T {
44
44
  * By default, items that are of type `"function"` will be considered lazy and all other items will be considered eager.
45
45
  * To force a `"function"` item to be treated as an eager item, call `markEager` before putting it in the list.
46
46
  * This is necessary e.g. when the eager list items are function types and the lazy items are functions that _return_ function types.
47
- * `FlexList`s are processed by `normalizeFlexList` and `normalizeFlexListEager`.
47
+ * Our one use of FlexList has some special normalization logic, see {@link normalizeAllowedTypes}.
48
48
  * @system @public
49
49
  */
50
50
  export type FlexList<Item = unknown> = readonly LazyItem<Item>[];
51
51
 
52
- /**
53
- * Given a `FlexList` of eager and lazy items, return an equivalent list where all items are eager.
54
- */
55
- export function normalizeFlexListEager<T>(t: FlexList<T>): T[] {
56
- const data: T[] = t.map((value: LazyItem<T>) => {
57
- if (isLazy(value)) {
58
- return value();
59
- }
60
- return value;
61
- });
62
- return data;
63
- }
64
-
65
52
  /**
66
53
  * An "eager" or "lazy" Item in a `FlexList`.
67
54
  * Lazy items are wrapped in a function to allow referring to themselves before they are declared.
68
55
  * This makes recursive and co-recursive items possible.
56
+ * @privateRemarks
57
+ * `schemaTypes.ts`'s `evaluateLazySchema` (via {@link normalizeAllowedTypes})
58
+ * applies caching for the only current use of this type.
69
59
  * @public
70
60
  */
71
61
  export type LazyItem<Item = unknown> = Item | (() => Item);
@@ -124,6 +124,11 @@ export {
124
124
  type CustomTreeNode,
125
125
  type CustomTreeValue,
126
126
  tryStoredSchemaAsArray,
127
+ type GetTypesUnsafe,
128
+ type DefaultInsertableTreeNodeFromImplicitAllowedTypesUnsafe,
129
+ type DefaultTreeNodeFromImplicitAllowedTypesUnsafe,
130
+ type StrictTypesUnsafe,
131
+ type AssignableTreeFieldFromImplicitFieldUnsafe,
127
132
  type schemaStatics,
128
133
  type ITreeAlpha,
129
134
  type TransactionConstraint,
@@ -136,6 +141,7 @@ export {
136
141
  type TransactionResultSuccess,
137
142
  type TransactionResultFailed,
138
143
  rollback,
144
+ Component,
139
145
  } from "./api/index.js";
140
146
  export {
141
147
  type NodeFromSchema,
@@ -170,6 +176,17 @@ export {
170
176
  type ReadSchema,
171
177
  type NodeSchemaOptions,
172
178
  type NodeSchemaMetadata,
179
+ customizeSchemaTyping,
180
+ type DefaultTreeNodeFromImplicitAllowedTypes,
181
+ type Customizer,
182
+ type GetTypes,
183
+ type StrictTypes,
184
+ type CustomTypes,
185
+ type CustomizedSchemaTyping,
186
+ CustomizedTyping,
187
+ type DefaultInsertableTreeNodeFromImplicitAllowedTypes,
188
+ type SchemaUnionToIntersection,
189
+ evaluateLazySchema,
173
190
  } from "./schemaTypes.js";
174
191
  export {
175
192
  getTreeNodeForField,
@@ -184,6 +201,8 @@ export {
184
201
  type FieldHasDefault,
185
202
  type InsertableObjectFromSchemaRecord,
186
203
  type ObjectFromSchemaRecord,
204
+ type AssignableTreeFieldFromImplicitField,
205
+ type ApplyKindAssignment,
187
206
  type TreeObjectNode,
188
207
  setField,
189
208
  createUnknownOptionalFieldPolicy,
@@ -203,4 +222,9 @@ export {
203
222
  handleSchema,
204
223
  nullSchema,
205
224
  } from "./leafNodeSchema.js";
206
- export type { LazyItem, FlexList, FlexListToUnion, ExtractItemType } from "./flexList.js";
225
+ export type {
226
+ LazyItem,
227
+ FlexList,
228
+ FlexListToUnion,
229
+ ExtractItemType,
230
+ } from "./flexList.js";