@fluidframework/tree 2.63.0-359461 → 2.63.0-359962

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 (510) hide show
  1. package/.mocharc.cjs +9 -1
  2. package/api-report/tree.alpha.api.md +126 -96
  3. package/api-report/tree.beta.api.md +37 -2
  4. package/api-report/tree.legacy.beta.api.md +37 -2
  5. package/api-report/tree.legacy.public.api.md +9 -2
  6. package/api-report/tree.public.api.md +9 -2
  7. package/dist/alpha.d.ts +18 -13
  8. package/dist/beta.d.ts +5 -0
  9. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +67 -13
  10. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  11. package/dist/feature-libraries/chunked-forest/chunkTree.js +70 -35
  12. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  13. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +5 -5
  14. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  15. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  16. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts +23 -0
  17. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -0
  18. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js +15 -0
  19. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -0
  20. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -0
  21. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  22. package/dist/feature-libraries/chunked-forest/codec/index.js +3 -1
  23. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  24. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  25. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +3 -2
  26. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  27. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  28. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  29. package/dist/feature-libraries/chunked-forest/index.js +2 -1
  30. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  31. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -1
  32. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  33. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  34. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -3
  35. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  36. package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -3
  37. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  38. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -11
  39. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  40. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -6
  41. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  42. package/dist/feature-libraries/index.d.ts +1 -1
  43. package/dist/feature-libraries/index.d.ts.map +1 -1
  44. package/dist/feature-libraries/index.js +2 -1
  45. package/dist/feature-libraries/index.js.map +1 -1
  46. package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  47. package/dist/feature-libraries/treeCursorUtils.js +17 -15
  48. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/jsonDomainSchema.d.ts +5 -5
  53. package/dist/jsonDomainSchema.js +5 -5
  54. package/dist/jsonDomainSchema.js.map +1 -1
  55. package/dist/legacy.d.ts +5 -0
  56. package/dist/packageVersion.d.ts +1 -1
  57. package/dist/packageVersion.js +1 -1
  58. package/dist/packageVersion.js.map +1 -1
  59. package/dist/public.d.ts +1 -0
  60. package/dist/serializableDomainSchema.d.ts +6 -6
  61. package/dist/serializableDomainSchema.js +5 -5
  62. package/dist/serializableDomainSchema.js.map +1 -1
  63. package/dist/shared-tree/independentView.d.ts.map +1 -1
  64. package/dist/shared-tree/independentView.js +2 -2
  65. package/dist/shared-tree/independentView.js.map +1 -1
  66. package/dist/shared-tree/schematizingTreeView.d.ts +5 -0
  67. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  68. package/dist/shared-tree/schematizingTreeView.js +38 -8
  69. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  70. package/dist/shared-tree/sharedTree.d.ts +6 -8
  71. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  72. package/dist/shared-tree/sharedTree.js +6 -8
  73. package/dist/shared-tree/sharedTree.js.map +1 -1
  74. package/dist/shared-tree/tree.js +1 -1
  75. package/dist/shared-tree/tree.js.map +1 -1
  76. package/dist/shared-tree/treeAlpha.d.ts +20 -28
  77. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  78. package/dist/shared-tree/treeAlpha.js +6 -31
  79. package/dist/shared-tree/treeAlpha.js.map +1 -1
  80. package/dist/simple-tree/api/conciseTree.d.ts +1 -1
  81. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  82. package/dist/simple-tree/api/configuration.d.ts +0 -3
  83. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  84. package/dist/simple-tree/api/configuration.js +1 -4
  85. package/dist/simple-tree/api/configuration.js.map +1 -1
  86. package/dist/simple-tree/api/customTree.d.ts +7 -7
  87. package/dist/simple-tree/api/customTree.js +5 -5
  88. package/dist/simple-tree/api/customTree.js.map +1 -1
  89. package/dist/simple-tree/api/discrepancies.js +2 -2
  90. package/dist/simple-tree/api/discrepancies.js.map +1 -1
  91. package/dist/simple-tree/api/index.d.ts +3 -3
  92. package/dist/simple-tree/api/index.d.ts.map +1 -1
  93. package/dist/simple-tree/api/index.js +4 -1
  94. package/dist/simple-tree/api/index.js.map +1 -1
  95. package/dist/simple-tree/api/schemaFactory.d.ts +12 -4
  96. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  97. package/dist/simple-tree/api/schemaFactory.js +3 -8
  98. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  99. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +64 -28
  100. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  101. package/dist/simple-tree/api/schemaFactoryAlpha.js +42 -11
  102. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  103. package/dist/simple-tree/api/schemaFactoryBeta.d.ts +13 -2
  104. package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  105. package/dist/simple-tree/api/schemaFactoryBeta.js +14 -0
  106. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  107. package/dist/simple-tree/api/schemaStatics.d.ts +9 -14
  108. package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
  109. package/dist/simple-tree/api/schemaStatics.js +12 -12
  110. package/dist/simple-tree/api/schemaStatics.js.map +1 -1
  111. package/dist/simple-tree/api/storedSchema.d.ts +2 -2
  112. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  113. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  114. package/dist/simple-tree/api/tree.d.ts +3 -3
  115. package/dist/simple-tree/api/tree.js.map +1 -1
  116. package/dist/simple-tree/api/treeBeta.d.ts +52 -2
  117. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  118. package/dist/simple-tree/api/treeBeta.js +37 -2
  119. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  120. package/dist/simple-tree/api/treeNodeApi.js +4 -4
  121. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  122. package/dist/simple-tree/api/typesUnsafe.d.ts +60 -1
  123. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  124. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  125. package/dist/simple-tree/core/allowedTypes.d.ts +120 -62
  126. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  127. package/dist/simple-tree/core/allowedTypes.js +162 -84
  128. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  129. package/dist/simple-tree/core/context.d.ts +2 -2
  130. package/dist/simple-tree/core/context.d.ts.map +1 -1
  131. package/dist/simple-tree/core/context.js.map +1 -1
  132. package/dist/simple-tree/core/index.d.ts +3 -3
  133. package/dist/simple-tree/core/index.d.ts.map +1 -1
  134. package/dist/simple-tree/core/index.js +5 -4
  135. package/dist/simple-tree/core/index.js.map +1 -1
  136. package/dist/simple-tree/core/toStored.d.ts +3 -3
  137. package/dist/simple-tree/core/toStored.d.ts.map +1 -1
  138. package/dist/simple-tree/core/toStored.js +2 -2
  139. package/dist/simple-tree/core/toStored.js.map +1 -1
  140. package/dist/simple-tree/core/treeNode.d.ts +1 -1
  141. package/dist/simple-tree/core/treeNode.js +1 -1
  142. package/dist/simple-tree/core/treeNode.js.map +1 -1
  143. package/dist/simple-tree/core/treeNodeKernel.d.ts +7 -11
  144. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  145. package/dist/simple-tree/core/treeNodeKernel.js +24 -47
  146. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  147. package/dist/simple-tree/core/treeNodeSchema.d.ts +3 -3
  148. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  149. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  150. package/dist/simple-tree/core/treeNodeValid.d.ts +2 -2
  151. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  152. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  153. package/dist/simple-tree/core/walkSchema.d.ts +3 -3
  154. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
  155. package/dist/simple-tree/core/walkSchema.js +1 -1
  156. package/dist/simple-tree/core/walkSchema.js.map +1 -1
  157. package/dist/simple-tree/createContext.js +2 -2
  158. package/dist/simple-tree/createContext.js.map +1 -1
  159. package/dist/simple-tree/fieldSchema.d.ts +9 -32
  160. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  161. package/dist/simple-tree/fieldSchema.js +12 -20
  162. package/dist/simple-tree/fieldSchema.js.map +1 -1
  163. package/dist/simple-tree/getTreeNodeForField.js +1 -1
  164. package/dist/simple-tree/getTreeNodeForField.js.map +1 -1
  165. package/dist/simple-tree/index.d.ts +4 -4
  166. package/dist/simple-tree/index.d.ts.map +1 -1
  167. package/dist/simple-tree/index.js +7 -3
  168. package/dist/simple-tree/index.js.map +1 -1
  169. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +2 -2
  170. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  171. package/dist/simple-tree/node-kinds/array/arrayNode.js +7 -8
  172. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  173. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +3 -3
  174. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  175. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  176. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  177. package/dist/simple-tree/node-kinds/common.js +2 -2
  178. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  179. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  180. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  181. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  182. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
  183. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  184. package/dist/simple-tree/node-kinds/map/mapNode.js +5 -5
  185. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  186. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts +3 -3
  187. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  188. package/dist/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  189. package/dist/simple-tree/node-kinds/object/index.d.ts +2 -2
  190. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  191. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  192. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +5 -18
  193. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  194. package/dist/simple-tree/node-kinds/object/objectNode.js +8 -18
  195. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  196. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +4 -11
  197. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  198. package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  199. package/dist/simple-tree/node-kinds/record/recordNode.d.ts +3 -3
  200. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  201. package/dist/simple-tree/node-kinds/record/recordNode.js +9 -9
  202. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  203. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +5 -5
  204. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  205. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  206. package/dist/simple-tree/prepareForInsertion.d.ts +39 -7
  207. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  208. package/dist/simple-tree/prepareForInsertion.js +43 -15
  209. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  210. package/dist/simple-tree/toStoredSchema.d.ts +8 -8
  211. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  212. package/dist/simple-tree/toStoredSchema.js +5 -5
  213. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  214. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  215. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  216. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  217. package/dist/simple-tree/unsafeUnknownSchema.d.ts.map +1 -1
  218. package/dist/simple-tree/unsafeUnknownSchema.js.map +1 -1
  219. package/dist/simple-tree/walkFieldSchema.js +1 -1
  220. package/dist/simple-tree/walkFieldSchema.js.map +1 -1
  221. package/dist/tableSchema.d.ts +19 -19
  222. package/dist/tableSchema.d.ts.map +1 -1
  223. package/dist/tableSchema.js +2 -2
  224. package/dist/tableSchema.js.map +1 -1
  225. package/lib/alpha.d.ts +18 -13
  226. package/lib/beta.d.ts +5 -0
  227. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +67 -13
  228. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  229. package/lib/feature-libraries/chunked-forest/chunkTree.js +68 -32
  230. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  231. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +5 -5
  232. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  233. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  234. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts +23 -0
  235. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -0
  236. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js +11 -0
  237. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -0
  238. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -0
  239. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  240. package/lib/feature-libraries/chunked-forest/codec/index.js +1 -0
  241. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  242. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  243. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +3 -2
  244. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  245. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  246. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  247. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  248. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  249. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -1
  250. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  251. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  252. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -3
  253. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  254. package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -3
  255. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  256. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -11
  257. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  258. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -6
  259. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  260. package/lib/feature-libraries/index.d.ts +1 -1
  261. package/lib/feature-libraries/index.d.ts.map +1 -1
  262. package/lib/feature-libraries/index.js +1 -1
  263. package/lib/feature-libraries/index.js.map +1 -1
  264. package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  265. package/lib/feature-libraries/treeCursorUtils.js +17 -15
  266. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  267. package/lib/index.d.ts +1 -1
  268. package/lib/index.d.ts.map +1 -1
  269. package/lib/index.js.map +1 -1
  270. package/lib/jsonDomainSchema.d.ts +5 -5
  271. package/lib/jsonDomainSchema.js +5 -5
  272. package/lib/jsonDomainSchema.js.map +1 -1
  273. package/lib/legacy.d.ts +5 -0
  274. package/lib/packageVersion.d.ts +1 -1
  275. package/lib/packageVersion.js +1 -1
  276. package/lib/packageVersion.js.map +1 -1
  277. package/lib/public.d.ts +1 -0
  278. package/lib/serializableDomainSchema.d.ts +6 -6
  279. package/lib/serializableDomainSchema.js +5 -5
  280. package/lib/serializableDomainSchema.js.map +1 -1
  281. package/lib/shared-tree/independentView.d.ts.map +1 -1
  282. package/lib/shared-tree/independentView.js +3 -3
  283. package/lib/shared-tree/independentView.js.map +1 -1
  284. package/lib/shared-tree/schematizingTreeView.d.ts +5 -0
  285. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  286. package/lib/shared-tree/schematizingTreeView.js +41 -11
  287. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  288. package/lib/shared-tree/sharedTree.d.ts +6 -8
  289. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  290. package/lib/shared-tree/sharedTree.js +7 -9
  291. package/lib/shared-tree/sharedTree.js.map +1 -1
  292. package/lib/shared-tree/tree.js +2 -2
  293. package/lib/shared-tree/tree.js.map +1 -1
  294. package/lib/shared-tree/treeAlpha.d.ts +20 -28
  295. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  296. package/lib/shared-tree/treeAlpha.js +5 -30
  297. package/lib/shared-tree/treeAlpha.js.map +1 -1
  298. package/lib/simple-tree/api/conciseTree.d.ts +1 -1
  299. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  300. package/lib/simple-tree/api/configuration.d.ts +0 -3
  301. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  302. package/lib/simple-tree/api/configuration.js +2 -5
  303. package/lib/simple-tree/api/configuration.js.map +1 -1
  304. package/lib/simple-tree/api/customTree.d.ts +7 -7
  305. package/lib/simple-tree/api/customTree.js +5 -5
  306. package/lib/simple-tree/api/customTree.js.map +1 -1
  307. package/lib/simple-tree/api/discrepancies.js +3 -3
  308. package/lib/simple-tree/api/discrepancies.js.map +1 -1
  309. package/lib/simple-tree/api/index.d.ts +3 -3
  310. package/lib/simple-tree/api/index.d.ts.map +1 -1
  311. package/lib/simple-tree/api/index.js +1 -1
  312. package/lib/simple-tree/api/index.js.map +1 -1
  313. package/lib/simple-tree/api/schemaFactory.d.ts +12 -4
  314. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  315. package/lib/simple-tree/api/schemaFactory.js +3 -8
  316. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  317. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +64 -28
  318. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  319. package/lib/simple-tree/api/schemaFactoryAlpha.js +43 -12
  320. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  321. package/lib/simple-tree/api/schemaFactoryBeta.d.ts +13 -2
  322. package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  323. package/lib/simple-tree/api/schemaFactoryBeta.js +16 -2
  324. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  325. package/lib/simple-tree/api/schemaStatics.d.ts +9 -14
  326. package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
  327. package/lib/simple-tree/api/schemaStatics.js +12 -12
  328. package/lib/simple-tree/api/schemaStatics.js.map +1 -1
  329. package/lib/simple-tree/api/storedSchema.d.ts +2 -2
  330. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  331. package/lib/simple-tree/api/storedSchema.js +1 -1
  332. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  333. package/lib/simple-tree/api/tree.d.ts +3 -3
  334. package/lib/simple-tree/api/tree.js.map +1 -1
  335. package/lib/simple-tree/api/treeBeta.d.ts +52 -2
  336. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  337. package/lib/simple-tree/api/treeBeta.js +34 -2
  338. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  339. package/lib/simple-tree/api/treeNodeApi.js +5 -5
  340. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  341. package/lib/simple-tree/api/typesUnsafe.d.ts +60 -1
  342. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  343. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  344. package/lib/simple-tree/core/allowedTypes.d.ts +120 -62
  345. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  346. package/lib/simple-tree/core/allowedTypes.js +158 -80
  347. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  348. package/lib/simple-tree/core/context.d.ts +2 -2
  349. package/lib/simple-tree/core/context.d.ts.map +1 -1
  350. package/lib/simple-tree/core/context.js.map +1 -1
  351. package/lib/simple-tree/core/index.d.ts +3 -3
  352. package/lib/simple-tree/core/index.d.ts.map +1 -1
  353. package/lib/simple-tree/core/index.js +2 -2
  354. package/lib/simple-tree/core/index.js.map +1 -1
  355. package/lib/simple-tree/core/toStored.d.ts +3 -3
  356. package/lib/simple-tree/core/toStored.d.ts.map +1 -1
  357. package/lib/simple-tree/core/toStored.js +3 -3
  358. package/lib/simple-tree/core/toStored.js.map +1 -1
  359. package/lib/simple-tree/core/treeNode.d.ts +1 -1
  360. package/lib/simple-tree/core/treeNode.js +1 -1
  361. package/lib/simple-tree/core/treeNode.js.map +1 -1
  362. package/lib/simple-tree/core/treeNodeKernel.d.ts +7 -11
  363. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  364. package/lib/simple-tree/core/treeNodeKernel.js +23 -46
  365. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  366. package/lib/simple-tree/core/treeNodeSchema.d.ts +3 -3
  367. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  368. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  369. package/lib/simple-tree/core/treeNodeValid.d.ts +2 -2
  370. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  371. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  372. package/lib/simple-tree/core/walkSchema.d.ts +3 -3
  373. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
  374. package/lib/simple-tree/core/walkSchema.js +2 -2
  375. package/lib/simple-tree/core/walkSchema.js.map +1 -1
  376. package/lib/simple-tree/createContext.js +3 -3
  377. package/lib/simple-tree/createContext.js.map +1 -1
  378. package/lib/simple-tree/fieldSchema.d.ts +9 -32
  379. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  380. package/lib/simple-tree/fieldSchema.js +13 -21
  381. package/lib/simple-tree/fieldSchema.js.map +1 -1
  382. package/lib/simple-tree/getTreeNodeForField.js +1 -1
  383. package/lib/simple-tree/getTreeNodeForField.js.map +1 -1
  384. package/lib/simple-tree/index.d.ts +4 -4
  385. package/lib/simple-tree/index.d.ts.map +1 -1
  386. package/lib/simple-tree/index.js +2 -2
  387. package/lib/simple-tree/index.js.map +1 -1
  388. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +2 -2
  389. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  390. package/lib/simple-tree/node-kinds/array/arrayNode.js +8 -9
  391. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  392. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +3 -3
  393. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  394. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  395. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  396. package/lib/simple-tree/node-kinds/common.js +3 -3
  397. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  398. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  399. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  400. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  401. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
  402. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  403. package/lib/simple-tree/node-kinds/map/mapNode.js +6 -6
  404. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  405. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts +3 -3
  406. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  407. package/lib/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  408. package/lib/simple-tree/node-kinds/object/index.d.ts +2 -2
  409. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  410. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  411. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +5 -18
  412. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  413. package/lib/simple-tree/node-kinds/object/objectNode.js +9 -18
  414. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  415. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +4 -11
  416. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  417. package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  418. package/lib/simple-tree/node-kinds/record/recordNode.d.ts +3 -3
  419. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  420. package/lib/simple-tree/node-kinds/record/recordNode.js +10 -10
  421. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  422. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +5 -5
  423. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  424. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  425. package/lib/simple-tree/prepareForInsertion.d.ts +39 -7
  426. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  427. package/lib/simple-tree/prepareForInsertion.js +45 -17
  428. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  429. package/lib/simple-tree/toStoredSchema.d.ts +8 -8
  430. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  431. package/lib/simple-tree/toStoredSchema.js +5 -5
  432. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  433. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  434. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  435. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
  436. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  437. package/lib/simple-tree/unsafeUnknownSchema.d.ts.map +1 -1
  438. package/lib/simple-tree/unsafeUnknownSchema.js.map +1 -1
  439. package/lib/simple-tree/walkFieldSchema.js +1 -1
  440. package/lib/simple-tree/walkFieldSchema.js.map +1 -1
  441. package/lib/tableSchema.d.ts +19 -19
  442. package/lib/tableSchema.d.ts.map +1 -1
  443. package/lib/tableSchema.js +2 -2
  444. package/lib/tableSchema.js.map +1 -1
  445. package/package.json +23 -21
  446. package/src/feature-libraries/chunked-forest/chunkTree.ts +112 -45
  447. package/src/feature-libraries/chunked-forest/codec/codecs.ts +4 -9
  448. package/src/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.ts +33 -0
  449. package/src/feature-libraries/chunked-forest/codec/index.ts +4 -0
  450. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +4 -7
  451. package/src/feature-libraries/chunked-forest/index.ts +2 -0
  452. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +1 -1
  453. package/src/feature-libraries/forest-summary/forestSummarizer.ts +8 -12
  454. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +3 -12
  455. package/src/feature-libraries/index.ts +2 -0
  456. package/src/feature-libraries/treeCursorUtils.ts +34 -19
  457. package/src/index.ts +14 -10
  458. package/src/jsonDomainSchema.ts +5 -5
  459. package/src/packageVersion.ts +1 -1
  460. package/src/serializableDomainSchema.ts +6 -6
  461. package/src/shared-tree/independentView.ts +3 -0
  462. package/src/shared-tree/schematizingTreeView.ts +58 -9
  463. package/src/shared-tree/sharedTree.ts +33 -20
  464. package/src/shared-tree/tree.ts +2 -2
  465. package/src/shared-tree/treeAlpha.ts +35 -84
  466. package/src/simple-tree/api/conciseTree.ts +1 -1
  467. package/src/simple-tree/api/configuration.ts +3 -7
  468. package/src/simple-tree/api/customTree.ts +7 -7
  469. package/src/simple-tree/api/discrepancies.ts +3 -3
  470. package/src/simple-tree/api/index.ts +17 -2
  471. package/src/simple-tree/api/schemaFactory.ts +18 -73
  472. package/src/simple-tree/api/schemaFactoryAlpha.ts +118 -25
  473. package/src/simple-tree/api/schemaFactoryBeta.ts +76 -1
  474. package/src/simple-tree/api/schemaStatics.ts +19 -61
  475. package/src/simple-tree/api/storedSchema.ts +2 -6
  476. package/src/simple-tree/api/tree.ts +3 -3
  477. package/src/simple-tree/api/treeBeta.ts +137 -4
  478. package/src/simple-tree/api/treeNodeApi.ts +5 -5
  479. package/src/simple-tree/api/typesUnsafe.ts +81 -0
  480. package/src/simple-tree/core/TreeNodeBinding.md +14 -70
  481. package/src/simple-tree/core/allowedTypes.ts +355 -159
  482. package/src/simple-tree/core/context.ts +2 -2
  483. package/src/simple-tree/core/index.ts +11 -9
  484. package/src/simple-tree/core/toStored.ts +7 -5
  485. package/src/simple-tree/core/treeNode.ts +1 -1
  486. package/src/simple-tree/core/treeNodeKernel.ts +25 -59
  487. package/src/simple-tree/core/treeNodeSchema.ts +3 -6
  488. package/src/simple-tree/core/treeNodeValid.ts +2 -2
  489. package/src/simple-tree/core/walkSchema.ts +9 -5
  490. package/src/simple-tree/createContext.ts +3 -3
  491. package/src/simple-tree/fieldSchema.ts +24 -98
  492. package/src/simple-tree/getTreeNodeForField.ts +1 -1
  493. package/src/simple-tree/index.ts +19 -11
  494. package/src/simple-tree/node-kinds/array/arrayNode.ts +12 -17
  495. package/src/simple-tree/node-kinds/array/arrayNodeTypes.ts +7 -8
  496. package/src/simple-tree/node-kinds/common.ts +5 -3
  497. package/src/simple-tree/node-kinds/index.ts +0 -2
  498. package/src/simple-tree/node-kinds/map/mapNode.ts +8 -16
  499. package/src/simple-tree/node-kinds/map/mapNodeTypes.ts +7 -8
  500. package/src/simple-tree/node-kinds/object/index.ts +0 -2
  501. package/src/simple-tree/node-kinds/object/objectNode.ts +17 -55
  502. package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +5 -19
  503. package/src/simple-tree/node-kinds/record/recordNode.ts +16 -23
  504. package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +7 -11
  505. package/src/simple-tree/prepareForInsertion.ts +92 -30
  506. package/src/simple-tree/toStoredSchema.ts +8 -9
  507. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +2 -6
  508. package/src/simple-tree/unsafeUnknownSchema.ts +2 -3
  509. package/src/simple-tree/walkFieldSchema.ts +1 -1
  510. package/src/tableSchema.ts +24 -37
@@ -3,8 +3,12 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { TreeFieldStoredSchema } from "../../core/index.js";
7
- import { defaultSchemaPolicy, FieldKinds } from "../../feature-libraries/index.js";
6
+ import type { ITreeCursorSynchronous, TreeFieldStoredSchema } from "../../core/index.js";
7
+ import {
8
+ defaultSchemaPolicy,
9
+ FieldKinds,
10
+ isTreeValue,
11
+ } from "../../feature-libraries/index.js";
8
12
  import { brand } from "../../util/index.js";
9
13
  import {
10
14
  Context,
@@ -13,6 +17,7 @@ import {
13
17
  isTreeNode,
14
18
  UnhydratedContext,
15
19
  type NodeKind,
20
+ type TreeLeafValue,
16
21
  type TreeNode,
17
22
  type Unhydrated,
18
23
  type WithType,
@@ -29,8 +34,12 @@ import {
29
34
  } from "../unhydratedFlexTreeFromInsertable.js";
30
35
 
31
36
  import { createFromCursor } from "./create.js";
37
+ import { conciseFromCursor, type ConciseTree } from "./conciseTree.js";
38
+ import type { TreeEncodingOptions } from "./customTree.js";
39
+ import { cursorFromVerbose } from "./verboseTree.js";
32
40
  import type { TreeChangeEvents } from "./treeChangeEvents.js";
33
41
  import { treeNodeApi } from "./treeNodeApi.js";
42
+ import type { InsertableField, UnsafeUnknownSchema } from "../unsafeUnknownSchema.js";
34
43
 
35
44
  // Tests for this file are grouped with those for treeNodeApi.ts as that is where this functionality will eventually land,
36
45
  // and where most of the actual implementation is for much of it.
@@ -128,6 +137,39 @@ export interface TreeBeta {
128
137
  listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>,
129
138
  ): () => void;
130
139
 
140
+ /**
141
+ * A less type-safe version of {@link (TreeAlpha:interface).create}, suitable for importing data.
142
+ * @remarks
143
+ * Due to {@link ConciseTree} relying on type inference from the data, its use is somewhat limited.
144
+ * This does not support {@link ConciseTree|ConciseTrees} with customized handle encodings or using persisted keys.
145
+ * Use "compressed" or "verbose" formats for more flexibility.
146
+ *
147
+ * When using this function,
148
+ * it is recommend to ensure your schema is unambiguous with {@link ITreeConfigurationOptions.preventAmbiguity}.
149
+ * If the schema is ambiguous, consider using {@link (TreeAlpha:interface).create} and {@link Unhydrated} nodes where needed,
150
+ * or using {@link (TreeAlpha:interface).(importVerbose:1)} and specify all types.
151
+ *
152
+ * Documented (and thus recoverable) error handling/reporting for this is not yet implemented,
153
+ * but for now most invalid inputs will throw a recoverable error.
154
+ */
155
+ importConcise<const TSchema extends ImplicitFieldSchema>(
156
+ schema: TSchema,
157
+ data: ConciseTree | undefined,
158
+ ): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
159
+
160
+ /**
161
+ * Copy a snapshot of the current version of a TreeNode into a {@link ConciseTree}.
162
+ */
163
+ exportConcise(node: TreeNode | TreeLeafValue, options?: TreeEncodingOptions): ConciseTree;
164
+
165
+ /**
166
+ * Copy a snapshot of the current version of a TreeNode into a {@link ConciseTree}, allowing undefined.
167
+ */
168
+ exportConcise(
169
+ node: TreeNode | TreeLeafValue | undefined,
170
+ options?: TreeEncodingOptions,
171
+ ): ConciseTree | undefined;
172
+
131
173
  /**
132
174
  * Clones the persisted data associated with a node.
133
175
  *
@@ -143,7 +185,7 @@ export interface TreeBeta {
143
185
  *
144
186
  * - The identifiers in the node's subtree will be preserved, i.e., they are not replaced with new values.
145
187
  *
146
- * - If the node (or any node in its subtree) contains {@link SchemaFactoryObjectOptions.allowUnknownOptionalFields|unknown optional fields},
188
+ * - If the node (or any node in its subtree) contains {@link ObjectSchemaOptions.allowUnknownOptionalFields|unknown optional fields},
147
189
  * those fields will be cloned just like the known fields.
148
190
  */
149
191
  clone<const TSchema extends ImplicitFieldSchema>(
@@ -184,6 +226,93 @@ export interface TreeBeta {
184
226
  ): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
185
227
  }
186
228
 
229
+ /**
230
+ * Borrow a cursor from a node.
231
+ * @remarks
232
+ * The cursor must be put back to its original location before the node is used again.
233
+ */
234
+ export function borrowCursorFromTreeNodeOrValue(
235
+ node: TreeNode | TreeLeafValue,
236
+ ): ITreeCursorSynchronous {
237
+ if (isTreeValue(node)) {
238
+ return cursorFromVerbose(node, {});
239
+ }
240
+ const kernel = getKernel(node);
241
+ const cursor = kernel.getInnerNode().borrowCursor();
242
+ return cursor;
243
+ }
244
+
245
+ /**
246
+ * {@inheritDoc (TreeBeta:interface).importConcise}
247
+ */
248
+ export function importConcise<TSchema extends ImplicitFieldSchema>(
249
+ schema: TSchema & ImplicitFieldSchema,
250
+ data: ConciseTree | undefined,
251
+ ): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
252
+ /**
253
+ * {@inheritDoc (TreeAlpha:interface).importConcise}
254
+ */
255
+ export function importConcise<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema>(
256
+ schema: UnsafeUnknownSchema extends TSchema
257
+ ? ImplicitFieldSchema
258
+ : TSchema & ImplicitFieldSchema,
259
+ data: ConciseTree | undefined,
260
+ ): Unhydrated<
261
+ TSchema extends ImplicitFieldSchema
262
+ ? TreeFieldFromImplicitField<TSchema>
263
+ : TreeNode | TreeLeafValue | undefined
264
+ >;
265
+ export function importConcise<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema>(
266
+ schema: UnsafeUnknownSchema extends TSchema
267
+ ? ImplicitFieldSchema
268
+ : TSchema & ImplicitFieldSchema,
269
+ data: ConciseTree | undefined,
270
+ ): Unhydrated<
271
+ TSchema extends ImplicitFieldSchema
272
+ ? TreeFieldFromImplicitField<TSchema>
273
+ : TreeNode | TreeLeafValue | undefined
274
+ > {
275
+ // Create the tree content from insertable data
276
+ const mapTree = unhydratedFlexTreeFromInsertable(
277
+ data as InsertableField<UnsafeUnknownSchema>,
278
+ schema,
279
+ );
280
+ const result = mapTree === undefined ? undefined : getOrCreateNodeFromInnerNode(mapTree);
281
+ return result as Unhydrated<
282
+ TSchema extends ImplicitFieldSchema
283
+ ? TreeFieldFromImplicitField<TSchema>
284
+ : TreeNode | TreeLeafValue | undefined
285
+ >;
286
+ }
287
+
288
+ /**
289
+ * {@inheritDoc (TreeBeta:interface).(exportConcise:1)}
290
+ */
291
+ export function exportConcise(
292
+ node: TreeNode | TreeLeafValue,
293
+ options?: TreeEncodingOptions,
294
+ ): ConciseTree;
295
+ /**
296
+ * {@inheritDoc (TreeBeta:interface).(exportConcise:2)}
297
+ */
298
+ export function exportConcise(
299
+ node: TreeNode | TreeLeafValue | undefined,
300
+ options?: TreeEncodingOptions,
301
+ ): ConciseTree | undefined;
302
+ export function exportConcise(
303
+ node: TreeNode | TreeLeafValue | undefined,
304
+ options?: TreeEncodingOptions,
305
+ ): ConciseTree | undefined {
306
+ if (!isTreeNode(node)) {
307
+ return node;
308
+ }
309
+ const config: TreeEncodingOptions = { ...options };
310
+
311
+ const kernel = getKernel(node);
312
+ const cursor = borrowCursorFromTreeNodeOrValue(node);
313
+ return conciseFromCursor(cursor, kernel.context, config);
314
+ }
315
+
187
316
  /**
188
317
  * Extensions to {@link (Tree:variable)} which are not yet stable.
189
318
  * @see {@link (TreeBeta:interface)}.
@@ -197,6 +326,10 @@ export const TreeBeta: TreeBeta = {
197
326
  ): () => void {
198
327
  return treeNodeApi.on(node, eventName, listener);
199
328
  },
329
+
330
+ importConcise,
331
+ exportConcise,
332
+
200
333
  clone<const TSchema extends ImplicitFieldSchema>(
201
334
  node: TreeFieldFromImplicitField<TSchema>,
202
335
  ): Unhydrated<TreeFieldFromImplicitField<TSchema>> {
@@ -206,7 +339,7 @@ export const TreeBeta: TreeBeta = {
206
339
  }
207
340
 
208
341
  const kernel = getKernel(node);
209
- const cursor = kernel.getOrCreateInnerNode().borrowCursor();
342
+ const cursor = kernel.getInnerNode().borrowCursor();
210
343
 
211
344
  // To handle when the node transitively contains unknown optional fields,
212
345
  // derive the context from the source node's stored schema which has stored schema for any such fields and their contents.
@@ -28,7 +28,7 @@ import {
28
28
  tryGetTreeNodeSchema,
29
29
  getOrCreateNodeFromInnerNode,
30
30
  typeSchemaSymbol,
31
- getOrCreateInnerNode,
31
+ getInnerNode,
32
32
  type TreeLeafValue,
33
33
  type ImplicitAllowedTypes,
34
34
  type TreeNodeFromImplicitAllowedTypes,
@@ -141,7 +141,7 @@ export interface TreeNodeApi {
141
141
  */
142
142
  export const treeNodeApi: TreeNodeApi = {
143
143
  parent(node: TreeNode): TreeNode | undefined {
144
- const editNode = getOrCreateInnerNode(node).parentField.parent.parent;
144
+ const editNode = getInnerNode(node).parentField.parent.parent;
145
145
  if (editNode === undefined) {
146
146
  return undefined;
147
147
  }
@@ -222,7 +222,7 @@ export const treeNodeApi: TreeNodeApi = {
222
222
  if (actualSchema === undefined) {
223
223
  return false;
224
224
  }
225
- return normalizeAllowedTypes(schema).has(actualSchema);
225
+ return normalizeAllowedTypes(schema).evaluateSet().has(actualSchema);
226
226
  },
227
227
  schema(node: TreeNode | TreeLeafValue): TreeNodeSchema {
228
228
  return tryGetSchema(node) ?? fail(0xb37 /* Not a tree node */);
@@ -306,7 +306,7 @@ export function getIdentifierFromNode(
306
306
  return undefined;
307
307
  }
308
308
 
309
- const flexNode = getOrCreateInnerNode(node);
309
+ const flexNode = getInnerNode(node);
310
310
  const identifierFieldKeys = schema.identifierFieldKeys;
311
311
 
312
312
  switch (identifierFieldKeys.length) {
@@ -361,7 +361,7 @@ export function getIdentifierFromNode(
361
361
  export function getStoredKey(node: TreeNode): string | number {
362
362
  // Note: the flex domain strictly works with "stored keys", and knows nothing about the developer-facing
363
363
  // "property keys".
364
- const parentField = getOrCreateInnerNode(node).parentField;
364
+ const parentField = getInnerNode(node).parentField;
365
365
  if (parentField.parent.schema === FieldKinds.sequence.identifier) {
366
366
  // The parent of `node` is an array node
367
367
  assert(
@@ -29,6 +29,8 @@ import type {
29
29
  TreeLeafValue,
30
30
  FlexListToUnion,
31
31
  LazyItem,
32
+ AnnotatedAllowedType,
33
+ AnnotatedAllowedTypes,
32
34
  } from "../core/index.js";
33
35
  import type { TreeArrayNode } from "../node-kinds/index.js";
34
36
  import type { SimpleArrayNodeSchema, SimpleMapNodeSchema } from "../simpleSchema.js";
@@ -543,3 +545,82 @@ export interface TreeRecordNodeUnsafe<
543
545
  [string, System_Unsafe.TreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>]
544
546
  >;
545
547
  }
548
+
549
+ /**
550
+ * {@link Unenforced} utility to remove {@link AnnotatedAllowedTypeUnsafe} wrappers.
551
+ * @remarks
552
+ * 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.
553
+ * @sealed
554
+ * @alpha
555
+ * @system
556
+ */
557
+ export type UnannotateAllowedTypeUnsafe<
558
+ T extends Unenforced<
559
+ AnnotatedAllowedTypeUnsafe | LazyItem<System_Unsafe.TreeNodeSchemaUnsafe>
560
+ >,
561
+ > = T extends AnnotatedAllowedTypeUnsafe<infer X> ? X : T;
562
+
563
+ /**
564
+ * {@link Unenforced} version of {@link AnnotatedAllowedType}.
565
+ * @remarks
566
+ * 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.
567
+ * @system @sealed @alpha
568
+ */
569
+ export interface AnnotatedAllowedTypeUnsafe<T = Unenforced<LazyItem<TreeNodeSchema>>>
570
+ extends AnnotatedAllowedType<T> {}
571
+
572
+ /**
573
+ * {@link Unenforced} version of {@link AnnotatedAllowedTypes}.
574
+ * @remarks
575
+ * 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.
576
+ * @system @sealed @alpha
577
+ */
578
+ export interface AnnotatedAllowedTypesUnsafe
579
+ extends AnnotatedAllowedTypes<LazyItem<System_Unsafe.TreeNodeSchemaUnsafe>> {}
580
+
581
+ /**
582
+ * {@link Unenforced} version of {@link AllowedTypesFull}.
583
+ * @remarks
584
+ * 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.
585
+ * @system @sealed @alpha
586
+ */
587
+ export type AllowedTypesFullUnsafe<
588
+ T extends readonly AnnotatedAllowedTypeUnsafe[] = readonly AnnotatedAllowedTypeUnsafe[],
589
+ > = AnnotatedAllowedTypes<T> & UnannotateAllowedTypesListUnsafe<T>;
590
+
591
+ /**
592
+ * {@link Unenforced} version of {@link AllowedTypesFullFromMixed}.
593
+ * @remarks
594
+ * 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.
595
+ * @system @sealed @alpha
596
+ */
597
+ export type AllowedTypesFullFromMixedUnsafe<
598
+ T extends readonly Unenforced<AnnotatedAllowedType | LazyItem<TreeNodeSchema>>[],
599
+ > = UnannotateAllowedTypesListUnsafe<T> &
600
+ AnnotatedAllowedTypes<AnnotateAllowedTypesListUnsafe<T>>;
601
+
602
+ /**
603
+ * {@link Unenforced} version of {@link UnannotateAllowedTypesList}.
604
+ * @remarks
605
+ * 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.
606
+ * @system @sealed @alpha
607
+ */
608
+ export type UnannotateAllowedTypesListUnsafe<
609
+ T extends readonly Unenforced<AnnotatedAllowedType | LazyItem<TreeNodeSchema>>[],
610
+ > = {
611
+ readonly [I in keyof T]: T[I] extends { type: infer X } ? X : T[I];
612
+ };
613
+
614
+ /**
615
+ * {@link Unenforced} version of {@link AnnotateAllowedTypesList}.
616
+ * @remarks
617
+ * 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.
618
+ * @system @sealed @alpha
619
+ */
620
+ export type AnnotateAllowedTypesListUnsafe<
621
+ T extends readonly Unenforced<AnnotatedAllowedType | LazyItem<TreeNodeSchema>>[],
622
+ > = {
623
+ [I in keyof T]: T[I] extends AnnotatedAllowedTypeUnsafe
624
+ ? T[I]
625
+ : AnnotatedAllowedTypeUnsafe<T[I]>;
626
+ };
@@ -8,9 +8,7 @@ Here is an example:
8
8
  function addPoint(curve: Curve, x: number, y: number): Point {
9
9
  const point = new Point({ x: 3, y: 3 });
10
10
  curve.points.insertAtEnd(point);
11
- // After insertion, `point` can be queried:
12
- assert(point.x === 3);
13
- // In fact, `point` is the same simple-tree node object that you would get from reading it off of its new parent in the tree:
11
+ // `point` is the same simple-tree node object that you would get from reading it off of its new parent in the tree:
14
12
  assert(point === curve.points[curve.points.length - 1]);
15
13
  // So, to read the content that was just inserted, the original object can be used and there is no need to read via the parent:
16
14
  return point;
@@ -22,83 +20,29 @@ function addPoint(curve: Curve, x: number, y: number): Point {
22
20
 
23
21
  This feature is supported by doing some bookkeeping to ensure that the simple-tree objects,
24
22
  flex tree nodes and anchor nodes in the tree get associated and disassociated at the right times.
25
- There are three states that a node simple-tree node can be in: "raw", "marinated" and "cooked".
23
+ There are three states that a node simple-tree node can be in: "Unhydrated", "hydrating" and "Hydrated".
26
24
 
27
- Note from the public API perspective, `Unhydrated` nodes are "raw", and hydrated nodes are either "marinated" or "cooked".
25
+ ### Unhydrated Nodes
28
26
 
29
- ### Raw Proxies
30
-
31
- A newly created simple-tree node, a.k.a. a **raw** simple-tree node. A raw simple-tree node is produced by invoking the schema-provided constructor for a node:
32
-
33
- ```ts
34
- const rawPoint = new Point({ x: 3, y: 3 });
35
- ```
36
-
37
- Such a simple-tree node will be raw until it is inserted into the tree and becomes "marinated" (see below).
38
- As raw nodes can be read or mutated.
39
-
40
- ### Marinated Proxies
41
-
42
- Proxies become **marinated** as soon as they are inserted into the tree.
43
-
44
- This happens whether proxies are inserted directly, as the root of the content subtree...
27
+ A newly created simple-tree node, a.k.a. an **unhydrated** simple-tree node. An unhydrated simple-tree node is produced by invoking the schema-provided constructor for a node:
45
28
 
46
29
  ```ts
47
- // Upon insertion, `rawPoint` transitions from "raw" to the next state, "marinated"
48
- app.graph.curves[0].insertAtEnd(rawPoint);
30
+ const unhydratedPoint = new Point({ x: 3, y: 3 });
49
31
  ```
50
32
 
51
- ...or proxies are inserted indirectly, making up some arbitrary portion of the content subtree.
33
+ Such a simple-tree node will be unhydrated until it is inserted into the tree and becomes "hydrated" (see below).
34
+ Unhydrated nodes can be read or mutated just like hydrated ones.
52
35
 
53
- ```ts
54
- // Upon insertion, `rawPoint` transitions from "raw" to the next state, "marinated"
55
- app.graph = {
56
- curves: [
57
- [new Point({ x: 10, y: 10 }), new Point({ x: 20, y: 20 })],
58
- [new Point({ x: 2, y: 2 }), rawPoint, new Point({ x: 4, y: 4 })],
59
- ],
60
- };
61
- ```
36
+ ### Hydrating Nodes
62
37
 
63
- A marinated simple-tree node, by definition, is bound bi-directionally to an `AnchorNode`.
64
- When insertion occurs, an `AnchorNode` will be created (if not already present) for the location of the new content.
65
- The simple-tree node for that content will then be mapped to the `AnchorNode` (via its kernel) and the `AnchorNode` will be mapped to the simple-tree node.
66
- Note that the `AnchorNode` may not yet have a `FlexTreeNode` associated with it - that happens when the node becomes "cooked" (see below).
38
+ Between insertion edit and the change callback which updates the node to "Hydrated" (see [prepareForInsertion.ts](../prepareForInsertion.ts)),
39
+ the node is in a poorly defined "hydrating" state and should not be interacted with.
67
40
 
68
- ### Cooked Proxies
41
+ ### Hydrated Nodes
69
42
 
70
- A simple-tree node is fully cooked when it finally associates itself with a `FlexTreeNode`.
71
- This happens lazily on demand, if/when a marinated simple-tree node is read or mutated (by the local client).
43
+ A simple-tree node is fully hydrated when it is associated with a `HydratedFlexTreeNode`.
72
44
 
73
45
  ```ts
74
- const point = new Point({ x: 3, y: 3 }); // `point` is raw
75
- curves.points.insertAtEnd(point); // `point` becomes marinated
76
- const x = point.x; // `point` becomes cooked in order to support the read of `x`
46
+ const point = new Point({ x: 3, y: 3 }); // `point` is unhydrated
47
+ curves.points.insertAtEnd(point); // `point` becomes hydrated
77
48
  ```
78
-
79
- This laziness prevents the simple-tree node tree from generating unnecessary `FlexTreeNodes`.
80
-
81
- Cooking a marinated simple-tree node works as follows:
82
-
83
- 1. Get the `AnchorNode` associated with the marinated simple-tree node.
84
- 2. Get or create a `FlexTreeNode` for the anchor.
85
- 3. This will cause the `FlexTreeNode` to be generated which corresponds to the simple-tree node.
86
-
87
- ### Mappings
88
-
89
- ```mermaid
90
- graph LR;
91
- AnchorNode(AnchorNode)<-->|Cooked and sometimes when Marinated|FlexTreeNode(FlexTreeNode)
92
- AnchorNode<--->|Marinated or Cooked|TreeNode(TreeNode)-.->|Raw|RawTreeNode(RawTreeNode)
93
- linkStyle 0 stroke:#0f0
94
- linkStyle 1 stroke:#00f
95
- linkStyle 2 stroke:#f00
96
- ```
97
-
98
- Note that it is possible for the `Cooked` mappings between an `AnchorNode` and a `FlexTreeNode` to exist regardless of whether there is also a simple-tree node yet created for that node.
99
- In that case, when that simple-tree node is created it will immediately be given its `Marinated` mappings and therefore already be cooked.
100
-
101
- `RawTreeNode`s, which implement the `FlexTreeNode` interface (or at least, as of 2024-03-21, pretend to), are substitutes for the true `FlexTreeNode`s that don't yet exist for a raw node.
102
- The `Raw` mapping is removed when a simple-tree node is marinated, and the `RawTreeNode` is forgotten.
103
-
104
- See [proxyBinding.ts](./proxyBinding.ts) for more details.