@fluidframework/tree 2.63.0-359734 → 2.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/api-report/tree.alpha.api.md +42 -8
  3. package/dist/alpha.d.ts +7 -0
  4. package/dist/codec/codec.d.ts +10 -27
  5. package/dist/codec/codec.d.ts.map +1 -1
  6. package/dist/codec/codec.js +9 -28
  7. package/dist/codec/codec.js.map +1 -1
  8. package/dist/codec/versioned/codec.d.ts +6 -5
  9. package/dist/codec/versioned/codec.d.ts.map +1 -1
  10. package/dist/codec/versioned/codec.js +4 -4
  11. package/dist/codec/versioned/codec.js.map +1 -1
  12. package/dist/core/tree/detachedFieldIndex.js +1 -1
  13. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  14. package/dist/core/tree/detachedFieldIndexCodecs.js +1 -1
  15. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  16. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +67 -13
  17. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  18. package/dist/feature-libraries/chunked-forest/chunkTree.js +70 -35
  19. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  20. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -8
  21. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  22. package/dist/feature-libraries/chunked-forest/codec/codecs.js +2 -2
  23. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  24. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts +23 -0
  25. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -0
  26. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js +15 -0
  27. package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -0
  28. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -0
  29. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  30. package/dist/feature-libraries/chunked-forest/codec/index.js +3 -1
  31. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  32. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  33. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +3 -2
  34. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  35. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  36. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  37. package/dist/feature-libraries/chunked-forest/index.js +2 -1
  38. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  39. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  40. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  41. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -1
  42. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  43. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  44. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -3
  45. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  46. package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -3
  47. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  48. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -11
  49. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  50. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -6
  51. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  52. package/dist/feature-libraries/index.d.ts +1 -1
  53. package/dist/feature-libraries/index.d.ts.map +1 -1
  54. package/dist/feature-libraries/index.js +2 -1
  55. package/dist/feature-libraries/index.js.map +1 -1
  56. package/dist/feature-libraries/schema-index/codec.d.ts +6 -5
  57. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  58. package/dist/feature-libraries/schema-index/codec.js +3 -3
  59. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  60. package/dist/index.d.ts +1 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/packageVersion.d.ts +1 -1
  64. package/dist/packageVersion.d.ts.map +1 -1
  65. package/dist/packageVersion.js +1 -1
  66. package/dist/packageVersion.js.map +1 -1
  67. package/dist/shared-tree/independentView.d.ts.map +1 -1
  68. package/dist/shared-tree/independentView.js +2 -2
  69. package/dist/shared-tree/independentView.js.map +1 -1
  70. package/dist/shared-tree/schematizingTreeView.d.ts +5 -0
  71. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  72. package/dist/shared-tree/schematizingTreeView.js +37 -7
  73. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  74. package/dist/shared-tree/sharedTree.d.ts +6 -8
  75. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  76. package/dist/shared-tree/sharedTree.js +7 -9
  77. package/dist/shared-tree/sharedTree.js.map +1 -1
  78. package/dist/shared-tree/sharedTreeChangeCodecs.js +1 -1
  79. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  80. package/dist/shared-tree/tree.js +1 -1
  81. package/dist/shared-tree/tree.js.map +1 -1
  82. package/dist/shared-tree/treeAlpha.d.ts +1 -1
  83. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  84. package/dist/shared-tree/treeAlpha.js +3 -3
  85. package/dist/shared-tree/treeAlpha.js.map +1 -1
  86. package/dist/shared-tree/treeCheckout.js +1 -1
  87. package/dist/shared-tree/treeCheckout.js.map +1 -1
  88. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  89. package/dist/shared-tree-core/defaultResubmitMachine.js +3 -2
  90. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  91. package/dist/simple-tree/api/index.d.ts +1 -1
  92. package/dist/simple-tree/api/index.d.ts.map +1 -1
  93. package/dist/simple-tree/api/index.js.map +1 -1
  94. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +37 -2
  95. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  96. package/dist/simple-tree/api/schemaFactoryAlpha.js +34 -14
  97. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  98. package/dist/simple-tree/api/schemaStatics.js +3 -0
  99. package/dist/simple-tree/api/schemaStatics.js.map +1 -1
  100. package/dist/simple-tree/api/storedSchema.d.ts +4 -3
  101. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  102. package/dist/simple-tree/api/storedSchema.js +3 -3
  103. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  104. package/dist/simple-tree/api/treeBeta.js +2 -2
  105. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  106. package/dist/simple-tree/api/treeNodeApi.js +3 -3
  107. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  108. package/dist/simple-tree/api/typesUnsafe.d.ts +60 -1
  109. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  110. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  111. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  112. package/dist/simple-tree/core/allowedTypes.js +1 -1
  113. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  114. package/dist/simple-tree/core/index.d.ts +1 -1
  115. package/dist/simple-tree/core/index.d.ts.map +1 -1
  116. package/dist/simple-tree/core/index.js +2 -2
  117. package/dist/simple-tree/core/index.js.map +1 -1
  118. package/dist/simple-tree/core/treeNodeKernel.d.ts +7 -11
  119. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  120. package/dist/simple-tree/core/treeNodeKernel.js +24 -47
  121. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  122. package/dist/simple-tree/getTreeNodeForField.js +1 -1
  123. package/dist/simple-tree/getTreeNodeForField.js.map +1 -1
  124. package/dist/simple-tree/index.d.ts +2 -2
  125. package/dist/simple-tree/index.d.ts.map +1 -1
  126. package/dist/simple-tree/index.js +2 -2
  127. package/dist/simple-tree/index.js.map +1 -1
  128. package/dist/simple-tree/node-kinds/array/arrayNode.js +2 -2
  129. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  130. package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
  131. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  132. package/dist/simple-tree/node-kinds/object/objectNode.js +3 -3
  133. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  134. package/dist/simple-tree/node-kinds/record/recordNode.js +6 -6
  135. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  136. package/dist/simple-tree/prepareForInsertion.d.ts +36 -4
  137. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  138. package/dist/simple-tree/prepareForInsertion.js +43 -15
  139. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  140. package/dist/treeFactory.d.ts.map +1 -1
  141. package/dist/treeFactory.js +13 -4
  142. package/dist/treeFactory.js.map +1 -1
  143. package/lib/alpha.d.ts +7 -0
  144. package/lib/codec/codec.d.ts +10 -27
  145. package/lib/codec/codec.d.ts.map +1 -1
  146. package/lib/codec/codec.js +8 -27
  147. package/lib/codec/codec.js.map +1 -1
  148. package/lib/codec/versioned/codec.d.ts +6 -5
  149. package/lib/codec/versioned/codec.d.ts.map +1 -1
  150. package/lib/codec/versioned/codec.js +4 -4
  151. package/lib/codec/versioned/codec.js.map +1 -1
  152. package/lib/core/tree/detachedFieldIndex.js +1 -1
  153. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  154. package/lib/core/tree/detachedFieldIndexCodecs.js +1 -1
  155. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  156. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +67 -13
  157. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  158. package/lib/feature-libraries/chunked-forest/chunkTree.js +68 -32
  159. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  160. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -8
  161. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  162. package/lib/feature-libraries/chunked-forest/codec/codecs.js +2 -2
  163. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  164. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts +23 -0
  165. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -0
  166. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js +11 -0
  167. package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -0
  168. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -0
  169. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  170. package/lib/feature-libraries/chunked-forest/codec/index.js +1 -0
  171. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  172. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  173. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +3 -2
  174. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  175. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  176. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  177. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  178. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  179. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  180. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  181. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -1
  182. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  183. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  184. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -3
  185. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  186. package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -3
  187. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  188. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -11
  189. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  190. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -6
  191. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  192. package/lib/feature-libraries/index.d.ts +1 -1
  193. package/lib/feature-libraries/index.d.ts.map +1 -1
  194. package/lib/feature-libraries/index.js +1 -1
  195. package/lib/feature-libraries/index.js.map +1 -1
  196. package/lib/feature-libraries/schema-index/codec.d.ts +6 -5
  197. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  198. package/lib/feature-libraries/schema-index/codec.js +3 -3
  199. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  200. package/lib/index.d.ts +1 -1
  201. package/lib/index.d.ts.map +1 -1
  202. package/lib/index.js.map +1 -1
  203. package/lib/packageVersion.d.ts +1 -1
  204. package/lib/packageVersion.d.ts.map +1 -1
  205. package/lib/packageVersion.js +1 -1
  206. package/lib/packageVersion.js.map +1 -1
  207. package/lib/shared-tree/independentView.d.ts.map +1 -1
  208. package/lib/shared-tree/independentView.js +3 -3
  209. package/lib/shared-tree/independentView.js.map +1 -1
  210. package/lib/shared-tree/schematizingTreeView.d.ts +5 -0
  211. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  212. package/lib/shared-tree/schematizingTreeView.js +40 -10
  213. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  214. package/lib/shared-tree/sharedTree.d.ts +6 -8
  215. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  216. package/lib/shared-tree/sharedTree.js +8 -10
  217. package/lib/shared-tree/sharedTree.js.map +1 -1
  218. package/lib/shared-tree/sharedTreeChangeCodecs.js +1 -1
  219. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  220. package/lib/shared-tree/tree.js +2 -2
  221. package/lib/shared-tree/tree.js.map +1 -1
  222. package/lib/shared-tree/treeAlpha.d.ts +1 -1
  223. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  224. package/lib/shared-tree/treeAlpha.js +4 -4
  225. package/lib/shared-tree/treeAlpha.js.map +1 -1
  226. package/lib/shared-tree/treeCheckout.js +1 -1
  227. package/lib/shared-tree/treeCheckout.js.map +1 -1
  228. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  229. package/lib/shared-tree-core/defaultResubmitMachine.js +3 -2
  230. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  231. package/lib/simple-tree/api/index.d.ts +1 -1
  232. package/lib/simple-tree/api/index.d.ts.map +1 -1
  233. package/lib/simple-tree/api/index.js.map +1 -1
  234. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +37 -2
  235. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  236. package/lib/simple-tree/api/schemaFactoryAlpha.js +34 -14
  237. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  238. package/lib/simple-tree/api/schemaStatics.js +3 -0
  239. package/lib/simple-tree/api/schemaStatics.js.map +1 -1
  240. package/lib/simple-tree/api/storedSchema.d.ts +4 -3
  241. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  242. package/lib/simple-tree/api/storedSchema.js +3 -3
  243. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  244. package/lib/simple-tree/api/treeBeta.js +2 -2
  245. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  246. package/lib/simple-tree/api/treeNodeApi.js +4 -4
  247. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  248. package/lib/simple-tree/api/typesUnsafe.d.ts +60 -1
  249. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  250. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  251. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  252. package/lib/simple-tree/core/allowedTypes.js +1 -1
  253. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  254. package/lib/simple-tree/core/index.d.ts +1 -1
  255. package/lib/simple-tree/core/index.d.ts.map +1 -1
  256. package/lib/simple-tree/core/index.js +1 -1
  257. package/lib/simple-tree/core/index.js.map +1 -1
  258. package/lib/simple-tree/core/treeNodeKernel.d.ts +7 -11
  259. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  260. package/lib/simple-tree/core/treeNodeKernel.js +23 -46
  261. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  262. package/lib/simple-tree/getTreeNodeForField.js +1 -1
  263. package/lib/simple-tree/getTreeNodeForField.js.map +1 -1
  264. package/lib/simple-tree/index.d.ts +2 -2
  265. package/lib/simple-tree/index.d.ts.map +1 -1
  266. package/lib/simple-tree/index.js +1 -1
  267. package/lib/simple-tree/index.js.map +1 -1
  268. package/lib/simple-tree/node-kinds/array/arrayNode.js +3 -3
  269. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  270. package/lib/simple-tree/node-kinds/map/mapNode.js +3 -3
  271. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  272. package/lib/simple-tree/node-kinds/object/objectNode.js +4 -4
  273. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  274. package/lib/simple-tree/node-kinds/record/recordNode.js +7 -7
  275. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  276. package/lib/simple-tree/prepareForInsertion.d.ts +36 -4
  277. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  278. package/lib/simple-tree/prepareForInsertion.js +45 -17
  279. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  280. package/lib/treeFactory.d.ts.map +1 -1
  281. package/lib/treeFactory.js +13 -4
  282. package/lib/treeFactory.js.map +1 -1
  283. package/package.json +21 -20
  284. package/src/codec/codec.ts +11 -29
  285. package/src/codec/versioned/codec.ts +6 -6
  286. package/src/core/tree/detachedFieldIndex.ts +1 -1
  287. package/src/core/tree/detachedFieldIndexCodecs.ts +1 -1
  288. package/src/feature-libraries/chunked-forest/chunkTree.ts +112 -45
  289. package/src/feature-libraries/chunked-forest/codec/codecs.ts +7 -12
  290. package/src/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.ts +33 -0
  291. package/src/feature-libraries/chunked-forest/codec/index.ts +4 -0
  292. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +4 -7
  293. package/src/feature-libraries/chunked-forest/index.ts +2 -0
  294. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -1
  295. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +1 -1
  296. package/src/feature-libraries/forest-summary/forestSummarizer.ts +8 -12
  297. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +3 -12
  298. package/src/feature-libraries/index.ts +2 -0
  299. package/src/feature-libraries/schema-index/codec.ts +5 -5
  300. package/src/index.ts +7 -0
  301. package/src/packageVersion.ts +1 -1
  302. package/src/shared-tree/independentView.ts +3 -0
  303. package/src/shared-tree/schematizingTreeView.ts +63 -8
  304. package/src/shared-tree/sharedTree.ts +34 -21
  305. package/src/shared-tree/sharedTreeChangeCodecs.ts +1 -1
  306. package/src/shared-tree/tree.ts +2 -2
  307. package/src/shared-tree/treeAlpha.ts +6 -12
  308. package/src/shared-tree/treeCheckout.ts +1 -1
  309. package/src/shared-tree-core/defaultResubmitMachine.ts +3 -2
  310. package/src/simple-tree/api/index.ts +7 -0
  311. package/src/simple-tree/api/schemaFactoryAlpha.ts +79 -19
  312. package/src/simple-tree/api/schemaStatics.ts +3 -0
  313. package/src/simple-tree/api/storedSchema.ts +5 -4
  314. package/src/simple-tree/api/treeBeta.ts +2 -2
  315. package/src/simple-tree/api/treeNodeApi.ts +4 -4
  316. package/src/simple-tree/api/typesUnsafe.ts +81 -0
  317. package/src/simple-tree/core/TreeNodeBinding.md +14 -70
  318. package/src/simple-tree/core/allowedTypes.ts +4 -1
  319. package/src/simple-tree/core/index.ts +1 -1
  320. package/src/simple-tree/core/treeNodeKernel.ts +25 -59
  321. package/src/simple-tree/getTreeNodeForField.ts +1 -1
  322. package/src/simple-tree/index.ts +8 -1
  323. package/src/simple-tree/node-kinds/array/arrayNode.ts +3 -3
  324. package/src/simple-tree/node-kinds/map/mapNode.ts +3 -3
  325. package/src/simple-tree/node-kinds/object/objectNode.ts +4 -4
  326. package/src/simple-tree/node-kinds/record/recordNode.ts +7 -7
  327. package/src/simple-tree/prepareForInsertion.ts +87 -25
  328. package/src/treeFactory.ts +17 -4
@@ -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.
@@ -539,7 +539,10 @@ export function normalizeAllowedTypesInternal(
539
539
  return getOrCreate(cachedNormalize, type, () => {
540
540
  // Due to more specific internal type, the above does not narrow sufficiently, so more narrowing is needed.
541
541
  // It is possible this will give a false error if a TreeNodeSchema which matches this check is used.
542
- assert(!("types" in type && "metadata" in type), "invalid AnnotatedAllowedTypes");
542
+ assert(
543
+ !("types" in type && "metadata" in type),
544
+ 0xc7d /* invalid AnnotatedAllowedTypes */,
545
+ );
543
546
 
544
547
  const annotatedTypes: AnnotatedAllowedType[] = (isReadonlyArray(type) ? type : [type]).map(
545
548
  normalizeToAnnotatedAllowedType,
@@ -10,7 +10,7 @@ export {
10
10
  tryGetTreeNodeSchema,
11
11
  type InnerNode,
12
12
  tryDisposeTreeNode,
13
- getOrCreateInnerNode,
13
+ getInnerNode,
14
14
  treeNodeFromAnchor,
15
15
  getSimpleNodeSchemaFromInnerNode,
16
16
  SimpleContextSlot,
@@ -17,14 +17,11 @@ import {
17
17
  anchorSlot,
18
18
  type AnchorEvents,
19
19
  type AnchorNode,
20
- type AnchorSet,
21
20
  type FieldKey,
22
21
  type TreeValue,
23
- type UpPath,
24
22
  } from "../../core/index.js";
25
23
  import { getOrCreateHydratedFlexTreeNode } from "../../feature-libraries/index.js";
26
24
  import {
27
- assertFlexTreeEntityNotFreed,
28
25
  ContextSlot,
29
26
  flexTreeSlot,
30
27
  LazyEntity,
@@ -85,10 +82,8 @@ interface UnhydratedState {
85
82
 
86
83
  /** The {@link HydrationState} of a {@link TreeNodeKernel} after the kernel is hydrated */
87
84
  interface HydratedState {
88
- /** The flex node for this kernel (lazy - undefined if it has not yet been demanded) */
89
- innerNode?: FlexTreeNode;
90
- /** The {@link AnchorNode} that this node is associated with. */
91
- readonly anchorNode: AnchorNode;
85
+ /** The flex node for this kernel */
86
+ readonly innerNode: HydratedFlexTreeNode;
92
87
  /** All {@link Off | event deregistration functions} that should be run when the kernel is disposed. */
93
88
  readonly offAnchorNode: Set<Off>;
94
89
  }
@@ -98,7 +93,7 @@ type HydrationState = UnhydratedState | HydratedState;
98
93
 
99
94
  /** True if and only if the given {@link HydrationState} is post-hydration */
100
95
  function isHydrated(state: HydrationState): state is HydratedState {
101
- return (state as Partial<HydratedState>).anchorNode !== undefined;
96
+ return state.innerNode.isHydrated();
102
97
  }
103
98
 
104
99
  /**
@@ -137,7 +132,7 @@ export class TreeNodeKernel {
137
132
  * Create a TreeNodeKernel which can be looked up with {@link getKernel}.
138
133
  *
139
134
  * @param initialContext - context from when this node was originally created. Only used when unhydrated.
140
- * @param innerNode - When unhydrated/raw or marinated the MapTreeNode. FlexTreeNode when cooked.
135
+ * @param innerNode - When unhydrated the MapTreeNode. Otherwise HydratedFlexTreeNode.
141
136
  * @remarks
142
137
  * Exactly one kernel per TreeNode should be created.
143
138
  */
@@ -165,9 +160,7 @@ export class TreeNodeKernel {
165
160
  this.#eventBuffer = new KernelEventBuffer(innerNode.events);
166
161
  } else {
167
162
  // Hydrated case
168
- this.#hydrationState = this.createHydratedState(innerNode.anchorNode);
169
- this.#hydrationState.innerNode = innerNode;
170
-
163
+ this.#hydrationState = this.createHydratedState(innerNode);
171
164
  this.#eventBuffer = new KernelEventBuffer(innerNode.anchorNode.events);
172
165
  }
173
166
  }
@@ -176,7 +169,7 @@ export class TreeNodeKernel {
176
169
  if (isHydrated(this.#hydrationState)) {
177
170
  // This can't be cached on this.#hydrated during hydration since initial tree is hydrated before the context is cached on the anchorSet.
178
171
  return (
179
- this.#hydrationState?.anchorNode.anchorSet.slots.get(SimpleContextSlot) ??
172
+ this.#hydrationState.innerNode.anchorNode.anchorSet.slots.get(SimpleContextSlot) ??
180
173
  fail(0xb40 /* missing simple-tree context */)
181
174
  );
182
175
  }
@@ -185,38 +178,33 @@ export class TreeNodeKernel {
185
178
 
186
179
  /**
187
180
  * Transition from {@link Unhydrated} to hydrated.
188
- * Bi-directionally associates the given hydrated TreeNode to the anchor node at the provided path.
181
+ * Bi-directionally associates the given hydrated TreeNode to the HydratedFlexTreeNode.
189
182
  * @remarks
190
183
  * Happens at most once for any given node.
191
184
  * Cleans up mappings to {@link UnhydratedFlexTreeNode} - it is assumed that they are no longer needed once this node has an anchor node.
192
185
  */
193
- public hydrate(anchors: AnchorSet, path: UpPath): void {
186
+ public hydrate(inner: HydratedFlexTreeNode): void {
194
187
  assert(!this.disposed, 0xa2a /* cannot hydrate a disposed node */);
195
188
  assert(!isHydrated(this.#hydrationState), 0xa2b /* hydration should only happen once */);
196
189
 
197
- const anchor = anchors.track(path);
198
- const anchorNode =
199
- anchors.locate(anchor) ?? fail(0xb42 /* Expected anchor node to be present */);
200
-
201
- this.#hydrationState = this.createHydratedState(anchorNode);
202
- this.#hydrationState.offAnchorNode.add(() => anchors.forget(anchor));
190
+ this.#hydrationState = this.createHydratedState(inner);
203
191
 
204
192
  // Lazily migrate existing event listeners to the anchor node
205
- this.#eventBuffer.migrateEventSource(anchorNode.events);
193
+ this.#eventBuffer.migrateEventSource(inner.anchorNode.events);
206
194
  }
207
195
 
208
- private createHydratedState(anchorNode: AnchorNode): HydratedState {
196
+ private createHydratedState(innerNode: HydratedFlexTreeNode): HydratedState {
209
197
  assert(
210
- !anchorNode.slots.has(simpleTreeNodeSlot),
198
+ !innerNode.anchorNode.slots.has(simpleTreeNodeSlot),
211
199
  0x7f5 /* Cannot associate an flex node with multiple simple-tree nodes */,
212
200
  );
213
- anchorNode.slots.set(simpleTreeNodeSlot, this.node);
201
+ innerNode.anchorNode.slots.set(simpleTreeNodeSlot, this.node);
214
202
  return {
215
- anchorNode,
203
+ innerNode,
216
204
  offAnchorNode: new Set([
217
- anchorNode.events.on("afterDestroy", () => this.dispose()),
205
+ innerNode.anchorNode.events.on("afterDestroy", () => this.dispose()),
218
206
  // TODO: this should be triggered on change even for unhydrated nodes.
219
- anchorNode.events.on("childrenChanging", () => {
207
+ innerNode.anchorNode.events.on("childrenChanging", () => {
220
208
  this.generationNumber += 1;
221
209
  }),
222
210
  ]),
@@ -232,7 +220,7 @@ export class TreeNodeKernel {
232
220
  }
233
221
 
234
222
  // TODO: Replace this check with the proper check against the cursor state when the cursor becomes part of the kernel
235
- const flex = this.#hydrationState.anchorNode.slots.get(flexTreeSlot);
223
+ const flex = this.#hydrationState.innerNode.anchorNode.slots.get(flexTreeSlot);
236
224
  if (flex !== undefined) {
237
225
  assert(flex instanceof LazyEntity, 0x9b4 /* Unexpected flex node implementation */);
238
226
  if (flex.isFreed()) {
@@ -240,7 +228,7 @@ export class TreeNodeKernel {
240
228
  }
241
229
  }
242
230
 
243
- return treeStatusFromAnchorCache(this.#hydrationState.anchorNode);
231
+ return treeStatusFromAnchorCache(this.#hydrationState.innerNode.anchorNode);
244
232
  }
245
233
 
246
234
  public get events(): Listenable<KernelEvents> {
@@ -264,7 +252,9 @@ export class TreeNodeKernel {
264
252
  }
265
253
 
266
254
  public get anchorNode(): AnchorNode | undefined {
267
- return isHydrated(this.#hydrationState) ? this.#hydrationState.anchorNode : undefined;
255
+ return isHydrated(this.#hydrationState)
256
+ ? this.#hydrationState.innerNode.anchorNode
257
+ : undefined;
268
258
  }
269
259
 
270
260
  /**
@@ -273,11 +263,10 @@ export class TreeNodeKernel {
273
263
  * For {@link Unhydrated} nodes, this returns the MapTreeNode.
274
264
  *
275
265
  * For hydrated nodes it returns a FlexTreeNode backed by the forest.
276
- * Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
277
266
  *
278
267
  * @throws A {@link @fluidframework/telemetry-utils#UsageError} if the node has been deleted.
279
268
  */
280
- public getOrCreateInnerNode(): InnerNode {
269
+ public getInnerNode(): InnerNode {
281
270
  if (!isHydrated(this.#hydrationState)) {
282
271
  debugAssert(
283
272
  () =>
@@ -291,26 +280,6 @@ export class TreeNodeKernel {
291
280
  throw new UsageError("Cannot access a deleted node.");
292
281
  }
293
282
 
294
- if (this.#hydrationState.innerNode === undefined) {
295
- // Marinated case -> cooked
296
- const anchorNode = this.#hydrationState.anchorNode;
297
- // This TreeNode is bound to an anchor node, but it may or may not have an actual flex node yet
298
- const flexNode = anchorNode.slots.get(flexTreeSlot);
299
- if (flexNode !== undefined) {
300
- // If the flex node already exists, use it...
301
- this.#hydrationState.innerNode = flexNode;
302
- } else {
303
- // ...otherwise, the flex node must be created
304
- const context =
305
- anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(0xb41 /* missing context */);
306
- const cursor = context.checkout.forest.allocateCursor("getFlexNode");
307
- context.checkout.forest.moveCursorToPath(anchorNode, cursor);
308
- this.#hydrationState.innerNode = getOrCreateHydratedFlexTreeNode(context, cursor);
309
- cursor.free();
310
- assertFlexTreeEntityNotFreed(this.#hydrationState.innerNode);
311
- }
312
- }
313
-
314
283
  return this.#hydrationState.innerNode;
315
284
  }
316
285
 
@@ -553,10 +522,8 @@ class KernelEventBuffer implements Listenable<KernelEvents> {
553
522
  // #endregion
554
523
 
555
524
  /**
556
- * For "cooked" nodes this is a HydratedFlexTreeNode thats a projection of forest content.
525
+ * For hydrated nodes this is a HydratedFlexTreeNode thats a projection of forest content.
557
526
  * For {@link Unhydrated} nodes this is a UnhydratedFlexTreeNode.
558
- *
559
- * For "marinated" nodes, some code (ex: getOrCreateInnerNode) returns the FlexTreeNode thats a projection of forest content, and some code (ex: tryGetInnerNode) returns undefined.
560
527
  */
561
528
  export type InnerNode = FlexTreeNode;
562
529
 
@@ -621,13 +588,12 @@ export function getSimpleContextFromInnerNode(innerNode: InnerNode): Context {
621
588
  * For {@link Unhydrated} nodes, this returns the MapTreeNode.
622
589
  *
623
590
  * For hydrated nodes it returns a FlexTreeNode backed by the forest.
624
- * Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
625
591
  *
626
592
  * @throws A {@link @fluidframework/telemetry-utils#UsageError} if the node has been deleted.
627
593
  */
628
- export function getOrCreateInnerNode(treeNode: TreeNode): InnerNode {
594
+ export function getInnerNode(treeNode: TreeNode): InnerNode {
629
595
  const kernel = getKernel(treeNode);
630
- return kernel.getOrCreateInnerNode();
596
+ return kernel.getInnerNode();
631
597
  }
632
598
 
633
599
  /**
@@ -40,7 +40,7 @@ export function tryGetTreeNodeForField(
40
40
  return tryToUnboxLeaves(typedField);
41
41
  }
42
42
  case FieldKinds.identifier.identifier: {
43
- // Identifier fields are just value fields that hold strings
43
+ // Identifier fields are just required fields that hold strings
44
44
  return (field as FlexTreeRequiredField).content as string;
45
45
  }
46
46
 
@@ -21,7 +21,7 @@ export {
21
21
  tryDisposeTreeNode,
22
22
  HydratedContext,
23
23
  SimpleContextSlot,
24
- getOrCreateInnerNode,
24
+ getInnerNode,
25
25
  getOrCreateNodeFromInnerNode,
26
26
  getOrCreateNodeFromInnerUnboxedNode,
27
27
  getKernel,
@@ -127,6 +127,13 @@ export {
127
127
  type ArrayNodeCustomizableSchemaUnsafe,
128
128
  type MapNodeCustomizableSchemaUnsafe,
129
129
  type TreeRecordNodeUnsafe,
130
+ type UnannotateAllowedTypeUnsafe,
131
+ type AnnotatedAllowedTypeUnsafe,
132
+ type AnnotatedAllowedTypesUnsafe,
133
+ type AllowedTypesFullUnsafe,
134
+ type AllowedTypesFullFromMixedUnsafe,
135
+ type UnannotateAllowedTypesListUnsafe,
136
+ type AnnotateAllowedTypesListUnsafe,
130
137
  type TreeViewAlpha,
131
138
  type TreeBranch,
132
139
  type TreeBranchEvents,
@@ -25,7 +25,7 @@ import {
25
25
  typeSchemaSymbol,
26
26
  getOrCreateNodeFromInnerNode,
27
27
  getSimpleNodeSchemaFromInnerNode,
28
- getOrCreateInnerNode,
28
+ getInnerNode,
29
29
  type TreeNodeSchemaClass,
30
30
  getKernel,
31
31
  type UnhydratedFlexTreeNode,
@@ -477,7 +477,7 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
477
477
  * Given a array node proxy, returns its underlying LazySequence field.
478
478
  */
479
479
  function getSequenceField(arrayNode: ReadonlyArrayNode): FlexTreeSequenceField {
480
- return getOrCreateInnerNode(arrayNode).getBoxed(EmptyKey) as FlexTreeSequenceField;
480
+ return getInnerNode(arrayNode).getBoxed(EmptyKey) as FlexTreeSequenceField;
481
481
  }
482
482
 
483
483
  // For compatibility, we are initially implement 'readonly T[]' by applying the Array.prototype methods
@@ -886,7 +886,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
886
886
  );
887
887
 
888
888
  const kernel = getKernel(this);
889
- const flexContext = kernel.getOrCreateInnerNode().context;
889
+ const flexContext = kernel.getInnerNode().context;
890
890
  assert(
891
891
  flexContext === kernel.context.flexContext,
892
892
  0xc14 /* Expected flexContext to match */,
@@ -26,7 +26,7 @@ import {
26
26
  typeNameSymbol,
27
27
  type TreeNode,
28
28
  typeSchemaSymbol,
29
- getOrCreateInnerNode,
29
+ getInnerNode,
30
30
  type InternalTreeNode,
31
31
  type UnhydratedFlexTreeNode,
32
32
  normalizeAllowedTypes,
@@ -173,7 +173,7 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
173
173
  }
174
174
 
175
175
  private get innerNode(): InnerNode {
176
- return getOrCreateInnerNode(this);
176
+ return getInnerNode(this);
177
177
  }
178
178
 
179
179
  private editor(key: string): OptionalFieldEditBuilder<FlexibleNodeContent> {
@@ -242,7 +242,7 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
242
242
  callbackFn: (value: TreeNodeFromImplicitAllowedTypes<T>, key: string, map: TThis) => void,
243
243
  thisArg?: unknown,
244
244
  ): void {
245
- for (const field of getOrCreateInnerNode(this)) {
245
+ for (const field of getInnerNode(this)) {
246
246
  const node = tryGetTreeNodeForField(field) as TreeNodeFromImplicitAllowedTypes<T>;
247
247
  callbackFn.call(thisArg, node, field.key, this);
248
248
  }
@@ -38,7 +38,7 @@ import {
38
38
  type InternalTreeNode,
39
39
  type TreeNode,
40
40
  type UnhydratedFlexTreeNode,
41
- getOrCreateInnerNode,
41
+ getInnerNode,
42
42
  type NodeSchemaMetadata,
43
43
  type ImplicitAllowedTypes,
44
44
  TreeNodeValid,
@@ -243,7 +243,7 @@ function createProxyHandler(
243
243
  get(target, propertyKey, proxy): unknown {
244
244
  const fieldInfo = schema.flexKeyMap.get(propertyKey);
245
245
  if (fieldInfo !== undefined) {
246
- const flexNode = getOrCreateInnerNode(proxy);
246
+ const flexNode = getInnerNode(proxy);
247
247
  debugAssert(() => !flexNode.context.isDisposed() || "FlexTreeNode is disposed");
248
248
  const field = flexNode.tryGetField(fieldInfo.storedKey);
249
249
  if (field !== undefined) {
@@ -274,7 +274,7 @@ function createProxyHandler(
274
274
  : false;
275
275
  }
276
276
 
277
- const innerNode = getOrCreateInnerNode(proxy);
277
+ const innerNode = getInnerNode(proxy);
278
278
 
279
279
  const innerSchema = innerNode.context.schema.nodeSchema.get(brand(schema.identifier));
280
280
  assert(
@@ -321,7 +321,7 @@ function createProxyHandler(
321
321
  // If a refactoring is done to associated flex tree data with the target not the proxy, this extra map could be removed,
322
322
  // and the design would be more compatible with proxyless nodes.
323
323
  const proxy = targetToProxy.get(target) ?? fail(0xadd /* missing proxy */);
324
- const field = getOrCreateInnerNode(proxy).tryGetField(fieldInfo.storedKey);
324
+ const field = getInnerNode(proxy).tryGetField(fieldInfo.storedKey);
325
325
 
326
326
  const p: PropertyDescriptor = {
327
327
  value: field === undefined ? undefined : tryGetTreeNodeForField(field),
@@ -15,7 +15,7 @@ import {
15
15
  typeNameSymbol,
16
16
  typeSchemaSymbol,
17
17
  type UnhydratedFlexTreeNode,
18
- getOrCreateInnerNode,
18
+ getInnerNode,
19
19
  getKernel,
20
20
  type InternalTreeNode,
21
21
  type NodeSchemaMetadata,
@@ -105,7 +105,7 @@ function createRecordNodeProxy(
105
105
  }
106
106
 
107
107
  if (typeof key === "string") {
108
- const innerNode = getOrCreateInnerNode(receiver);
108
+ const innerNode = getInnerNode(receiver);
109
109
  const field = innerNode.tryGetField(brand(key));
110
110
  if (field !== undefined) {
111
111
  return tryGetTreeNodeForField(field);
@@ -119,7 +119,7 @@ function createRecordNodeProxy(
119
119
  return false;
120
120
  }
121
121
 
122
- const innerNode = getOrCreateInnerNode(receiver);
122
+ const innerNode = getInnerNode(receiver);
123
123
  const field = innerNode.getBoxed(brand(key)) as FlexTreeOptionalField;
124
124
  const kernel = getKernel(receiver);
125
125
  const innerSchema = innerNode.context.schema.nodeSchema.get(brand(schema.identifier));
@@ -143,13 +143,13 @@ function createRecordNodeProxy(
143
143
  return false;
144
144
  }
145
145
 
146
- const innerNode = getOrCreateInnerNode(proxy);
146
+ const innerNode = getInnerNode(proxy);
147
147
  const childField = innerNode.tryGetField(brand(key));
148
148
 
149
149
  return childField !== undefined;
150
150
  },
151
151
  ownKeys: (target) => {
152
- const innerNode = getOrCreateInnerNode(proxy);
152
+ const innerNode = getInnerNode(proxy);
153
153
  return [...innerNode.keys()];
154
154
  },
155
155
  getOwnPropertyDescriptor: (target, key) => {
@@ -157,7 +157,7 @@ function createRecordNodeProxy(
157
157
  return undefined;
158
158
  }
159
159
 
160
- const innerNode = getOrCreateInnerNode(proxy);
160
+ const innerNode = getInnerNode(proxy);
161
161
  const field = innerNode.tryGetField(brand(key));
162
162
 
163
163
  if (field === undefined) {
@@ -179,7 +179,7 @@ function createRecordNodeProxy(
179
179
  return false;
180
180
  }
181
181
 
182
- const innerNode = getOrCreateInnerNode(proxy);
182
+ const innerNode = getInnerNode(proxy);
183
183
  const field = innerNode.tryGetField(brand(key)) as FlexTreeOptionalField | undefined;
184
184
  if (field !== undefined) {
185
185
  field.editor.set(undefined, field.length === 0);