@fluidframework/tree 2.41.0 → 2.43.0-343119

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 (673) hide show
  1. package/.vscode/settings.json +1 -0
  2. package/CHANGELOG.md +33 -0
  3. package/api-report/tree.alpha.api.md +70 -28
  4. package/api-report/tree.beta.api.md +33 -0
  5. package/dist/alpha.d.ts +12 -6
  6. package/dist/beta.d.ts +6 -1
  7. package/dist/codec/codec.d.ts +23 -3
  8. package/dist/codec/codec.d.ts.map +1 -1
  9. package/dist/codec/codec.js.map +1 -1
  10. package/dist/codec/index.d.ts +1 -1
  11. package/dist/codec/index.d.ts.map +1 -1
  12. package/dist/codec/index.js.map +1 -1
  13. package/dist/codec/versioned/codec.d.ts +35 -2
  14. package/dist/codec/versioned/codec.d.ts.map +1 -1
  15. package/dist/codec/versioned/codec.js +38 -3
  16. package/dist/codec/versioned/codec.js.map +1 -1
  17. package/dist/core/index.d.ts +1 -1
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +5 -2
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/schema-stored/formatV2.d.ts +80 -0
  22. package/dist/core/schema-stored/formatV2.d.ts.map +1 -0
  23. package/dist/core/schema-stored/formatV2.js +55 -0
  24. package/dist/core/schema-stored/formatV2.js.map +1 -0
  25. package/dist/core/schema-stored/index.d.ts +3 -1
  26. package/dist/core/schema-stored/index.d.ts.map +1 -1
  27. package/dist/core/schema-stored/index.js +5 -2
  28. package/dist/core/schema-stored/index.js.map +1 -1
  29. package/dist/core/schema-stored/schema.d.ts +49 -17
  30. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  31. package/dist/core/schema-stored/schema.js +65 -22
  32. package/dist/core/schema-stored/schema.js.map +1 -1
  33. package/dist/core/tree/detachedFieldIndex.d.ts +2 -2
  34. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  35. package/dist/core/tree/detachedFieldIndex.js +5 -1
  36. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  37. package/dist/core/tree/mapTree.d.ts +2 -1
  38. package/dist/core/tree/mapTree.d.ts.map +1 -1
  39. package/dist/core/tree/mapTree.js +11 -5
  40. package/dist/core/tree/mapTree.js.map +1 -1
  41. package/dist/core/tree/visitorUtils.d.ts +2 -2
  42. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  43. package/dist/core/tree/visitorUtils.js.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +9 -7
  45. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +13 -9
  47. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  48. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +3 -3
  49. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  50. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +6 -6
  51. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts +1 -1
  53. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  54. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +3 -3
  55. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  56. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -2
  57. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  58. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  59. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +4 -3
  60. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  61. package/dist/feature-libraries/default-schema/schemaChecker.js +4 -3
  62. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  63. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts +8 -3
  64. package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  65. package/dist/feature-libraries/detachedFieldIndexSummarizer.js +2 -5
  66. package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  67. package/dist/feature-libraries/flex-tree/context.d.ts +14 -6
  68. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  69. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  70. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +48 -29
  71. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  72. package/dist/feature-libraries/flex-tree/flexTreeTypes.js +4 -0
  73. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  74. package/dist/feature-libraries/flex-tree/index.d.ts +2 -3
  75. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  76. package/dist/feature-libraries/flex-tree/index.js +1 -7
  77. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  78. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +2 -2
  79. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  80. package/dist/feature-libraries/flex-tree/lazyEntity.js +3 -0
  81. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  82. package/dist/feature-libraries/flex-tree/lazyField.d.ts +6 -7
  83. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  84. package/dist/feature-libraries/flex-tree/lazyField.js +2 -5
  85. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  86. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +8 -7
  87. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  88. package/dist/feature-libraries/flex-tree/lazyNode.js +17 -6
  89. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  90. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +10 -5
  91. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  92. package/dist/feature-libraries/forest-summary/forestSummarizer.js +9 -12
  93. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  94. package/dist/feature-libraries/index.d.ts +2 -2
  95. package/dist/feature-libraries/index.d.ts.map +1 -1
  96. package/dist/feature-libraries/index.js +4 -3
  97. package/dist/feature-libraries/index.js.map +1 -1
  98. package/dist/feature-libraries/mapTreeCursor.d.ts +53 -3
  99. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  100. package/dist/feature-libraries/mapTreeCursor.js +45 -7
  101. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  102. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +1 -1
  103. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js +2 -0
  104. package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
  105. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
  106. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  107. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +5 -5
  108. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  109. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  110. package/dist/feature-libraries/object-forest/objectForest.js +2 -0
  111. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  112. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  113. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +8 -4
  114. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  115. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -36
  116. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  117. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js +3 -3
  118. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  119. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  120. package/dist/feature-libraries/schema-index/codec.js +59 -9
  121. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  122. package/dist/feature-libraries/schema-index/formatV1.d.ts +1 -1
  123. package/dist/feature-libraries/schema-index/formatV2.d.ts +42 -0
  124. package/dist/feature-libraries/schema-index/formatV2.d.ts.map +1 -0
  125. package/dist/feature-libraries/schema-index/formatV2.js +26 -0
  126. package/dist/feature-libraries/schema-index/formatV2.js.map +1 -0
  127. package/dist/feature-libraries/schema-index/index.d.ts +2 -1
  128. package/dist/feature-libraries/schema-index/index.d.ts.map +1 -1
  129. package/dist/feature-libraries/schema-index/index.js +4 -2
  130. package/dist/feature-libraries/schema-index/index.js.map +1 -1
  131. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +7 -2
  132. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  133. package/dist/feature-libraries/schema-index/schemaSummarizer.js +6 -6
  134. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  135. package/dist/feature-libraries/treeCursorUtils.d.ts +5 -1
  136. package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  137. package/dist/feature-libraries/treeCursorUtils.js +8 -2
  138. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  139. package/dist/index.d.ts +3 -3
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js.map +1 -1
  142. package/dist/packageVersion.d.ts +1 -1
  143. package/dist/packageVersion.d.ts.map +1 -1
  144. package/dist/packageVersion.js +1 -1
  145. package/dist/packageVersion.js.map +1 -1
  146. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  147. package/dist/shared-tree/schematizeTree.js +1 -0
  148. package/dist/shared-tree/schematizeTree.js.map +1 -1
  149. package/dist/shared-tree/schematizingTreeView.d.ts +11 -1
  150. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  151. package/dist/shared-tree/schematizingTreeView.js +36 -22
  152. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  153. package/dist/shared-tree/sharedTree.d.ts +8 -4
  154. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  155. package/dist/shared-tree/sharedTree.js +35 -5
  156. package/dist/shared-tree/sharedTree.js.map +1 -1
  157. package/dist/shared-tree/tree.d.ts.map +1 -1
  158. package/dist/shared-tree/tree.js +8 -24
  159. package/dist/shared-tree/tree.js.map +1 -1
  160. package/dist/shared-tree/treeAlpha.d.ts +2 -3
  161. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  162. package/dist/shared-tree/treeAlpha.js +4 -5
  163. package/dist/shared-tree/treeAlpha.js.map +1 -1
  164. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  165. package/dist/shared-tree/treeCheckout.js +5 -2
  166. package/dist/shared-tree/treeCheckout.js.map +1 -1
  167. package/dist/shared-tree-core/editManagerSummarizer.d.ts +8 -3
  168. package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  169. package/dist/shared-tree-core/editManagerSummarizer.js +2 -5
  170. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  171. package/dist/shared-tree-core/sharedTreeCore.d.ts +18 -7
  172. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  173. package/dist/shared-tree-core/sharedTreeCore.js +15 -2
  174. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  175. package/dist/simple-tree/api/configuration.d.ts +2 -2
  176. package/dist/simple-tree/api/configuration.js +1 -1
  177. package/dist/simple-tree/api/configuration.js.map +1 -1
  178. package/dist/simple-tree/api/create.d.ts +9 -4
  179. package/dist/simple-tree/api/create.d.ts.map +1 -1
  180. package/dist/simple-tree/api/create.js +29 -16
  181. package/dist/simple-tree/api/create.js.map +1 -1
  182. package/dist/simple-tree/api/customTree.d.ts +4 -0
  183. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  184. package/dist/simple-tree/api/customTree.js +9 -1
  185. package/dist/simple-tree/api/customTree.js.map +1 -1
  186. package/dist/simple-tree/api/index.d.ts +1 -1
  187. package/dist/simple-tree/api/index.d.ts.map +1 -1
  188. package/dist/simple-tree/api/index.js +1 -2
  189. package/dist/simple-tree/api/index.js.map +1 -1
  190. package/dist/simple-tree/api/schemaCompatibilityTester.js +1 -1
  191. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  192. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
  193. package/dist/simple-tree/api/schemaCreationUtilities.js +3 -3
  194. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  195. package/dist/simple-tree/api/schemaFactory.d.ts +25 -13
  196. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  197. package/dist/simple-tree/api/schemaFactory.js +42 -9
  198. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  199. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +41 -11
  200. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  201. package/dist/simple-tree/api/schemaFactoryAlpha.js +31 -4
  202. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  203. package/dist/simple-tree/api/storedSchema.js +2 -2
  204. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  205. package/dist/simple-tree/api/treeChangeEvents.d.ts +8 -3
  206. package/dist/simple-tree/api/treeChangeEvents.d.ts.map +1 -1
  207. package/dist/simple-tree/api/treeChangeEvents.js.map +1 -1
  208. package/dist/simple-tree/api/treeNodeApi.d.ts +14 -3
  209. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  210. package/dist/simple-tree/api/treeNodeApi.js +32 -17
  211. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  212. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  213. package/dist/simple-tree/api/verboseTree.js +12 -9
  214. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  215. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  216. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +5 -0
  217. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  218. package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  219. package/dist/simple-tree/core/getOrCreateNode.js +2 -1
  220. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
  221. package/dist/simple-tree/core/index.d.ts +2 -2
  222. package/dist/simple-tree/core/index.d.ts.map +1 -1
  223. package/dist/simple-tree/core/index.js +3 -4
  224. package/dist/simple-tree/core/index.js.map +1 -1
  225. package/dist/simple-tree/core/treeNodeKernel.d.ts +15 -25
  226. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  227. package/dist/simple-tree/core/treeNodeKernel.js +27 -34
  228. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  229. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +129 -64
  230. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  231. package/dist/simple-tree/core/unhydratedFlexTree.js +175 -207
  232. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  233. package/dist/simple-tree/index.d.ts +5 -5
  234. package/dist/simple-tree/index.d.ts.map +1 -1
  235. package/dist/simple-tree/index.js +5 -5
  236. package/dist/simple-tree/index.js.map +1 -1
  237. package/dist/simple-tree/leafNodeSchema.d.ts +2 -0
  238. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  239. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  240. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +3 -1
  241. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  242. package/dist/simple-tree/node-kinds/array/arrayNode.js +8 -7
  243. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  244. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  245. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  246. package/dist/simple-tree/node-kinds/index.js +1 -2
  247. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  248. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +3 -2
  249. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  250. package/dist/simple-tree/node-kinds/map/mapNode.js +6 -4
  251. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  252. package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
  253. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  254. package/dist/simple-tree/node-kinds/object/index.js +1 -2
  255. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  256. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +5 -15
  257. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  258. package/dist/simple-tree/node-kinds/object/objectNode.js +15 -44
  259. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  260. package/dist/simple-tree/prepareForInsertion.d.ts +20 -6
  261. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  262. package/dist/simple-tree/prepareForInsertion.js +31 -20
  263. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  264. package/dist/simple-tree/schemaTypes.d.ts +56 -9
  265. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  266. package/dist/simple-tree/schemaTypes.js +28 -1
  267. package/dist/simple-tree/schemaTypes.js.map +1 -1
  268. package/dist/simple-tree/simpleSchema.d.ts +22 -4
  269. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  270. package/dist/simple-tree/simpleSchema.js.map +1 -1
  271. package/dist/simple-tree/toStoredSchema.d.ts +8 -1
  272. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  273. package/dist/simple-tree/toStoredSchema.js +19 -7
  274. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  275. package/{lib/simple-tree/toMapTree.d.ts → dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts} +12 -23
  276. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -0
  277. package/dist/simple-tree/{toMapTree.js → unhydratedFlexTreeFromInsertable.js} +103 -185
  278. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -0
  279. package/dist/tableSchema.d.ts +1 -1
  280. package/dist/treeFactory.d.ts.map +1 -1
  281. package/dist/treeFactory.js +6 -1
  282. package/dist/treeFactory.js.map +1 -1
  283. package/dist/util/index.d.ts +1 -1
  284. package/dist/util/index.d.ts.map +1 -1
  285. package/dist/util/index.js +2 -1
  286. package/dist/util/index.js.map +1 -1
  287. package/dist/util/typeUtils.d.ts +2 -2
  288. package/dist/util/typeUtils.js.map +1 -1
  289. package/dist/util/utils.d.ts +6 -0
  290. package/dist/util/utils.d.ts.map +1 -1
  291. package/dist/util/utils.js +8 -1
  292. package/dist/util/utils.js.map +1 -1
  293. package/docs/user-facing/schema-evolution.md +1 -1
  294. package/lib/alpha.d.ts +12 -6
  295. package/lib/beta.d.ts +6 -1
  296. package/lib/codec/codec.d.ts +23 -3
  297. package/lib/codec/codec.d.ts.map +1 -1
  298. package/lib/codec/codec.js.map +1 -1
  299. package/lib/codec/index.d.ts +1 -1
  300. package/lib/codec/index.d.ts.map +1 -1
  301. package/lib/codec/index.js.map +1 -1
  302. package/lib/codec/versioned/codec.d.ts +35 -2
  303. package/lib/codec/versioned/codec.d.ts.map +1 -1
  304. package/lib/codec/versioned/codec.js +36 -2
  305. package/lib/codec/versioned/codec.js.map +1 -1
  306. package/lib/core/index.d.ts +1 -1
  307. package/lib/core/index.d.ts.map +1 -1
  308. package/lib/core/index.js +1 -1
  309. package/lib/core/index.js.map +1 -1
  310. package/lib/core/schema-stored/formatV2.d.ts +80 -0
  311. package/lib/core/schema-stored/formatV2.d.ts.map +1 -0
  312. package/lib/core/schema-stored/formatV2.js +52 -0
  313. package/lib/core/schema-stored/formatV2.js.map +1 -0
  314. package/lib/core/schema-stored/index.d.ts +3 -1
  315. package/lib/core/schema-stored/index.d.ts.map +1 -1
  316. package/lib/core/schema-stored/index.js +3 -1
  317. package/lib/core/schema-stored/index.js.map +1 -1
  318. package/lib/core/schema-stored/schema.d.ts +49 -17
  319. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  320. package/lib/core/schema-stored/schema.js +63 -21
  321. package/lib/core/schema-stored/schema.js.map +1 -1
  322. package/lib/core/tree/detachedFieldIndex.d.ts +2 -2
  323. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  324. package/lib/core/tree/detachedFieldIndex.js +6 -2
  325. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  326. package/lib/core/tree/mapTree.d.ts +2 -1
  327. package/lib/core/tree/mapTree.d.ts.map +1 -1
  328. package/lib/core/tree/mapTree.js +11 -5
  329. package/lib/core/tree/mapTree.js.map +1 -1
  330. package/lib/core/tree/visitorUtils.d.ts +2 -2
  331. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  332. package/lib/core/tree/visitorUtils.js.map +1 -1
  333. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +9 -7
  334. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  335. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +11 -7
  336. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  337. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +3 -3
  338. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  339. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +7 -7
  340. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  341. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts +1 -1
  342. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  343. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +3 -3
  344. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  345. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -2
  346. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  347. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  348. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +4 -3
  349. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  350. package/lib/feature-libraries/default-schema/schemaChecker.js +4 -3
  351. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  352. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts +8 -3
  353. package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
  354. package/lib/feature-libraries/detachedFieldIndexSummarizer.js +2 -5
  355. package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
  356. package/lib/feature-libraries/flex-tree/context.d.ts +14 -6
  357. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  358. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  359. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +48 -29
  360. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  361. package/lib/feature-libraries/flex-tree/flexTreeTypes.js +4 -0
  362. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  363. package/lib/feature-libraries/flex-tree/index.d.ts +2 -3
  364. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  365. package/lib/feature-libraries/flex-tree/index.js +0 -1
  366. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  367. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +2 -2
  368. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  369. package/lib/feature-libraries/flex-tree/lazyEntity.js +3 -0
  370. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  371. package/lib/feature-libraries/flex-tree/lazyField.d.ts +6 -7
  372. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  373. package/lib/feature-libraries/flex-tree/lazyField.js +3 -6
  374. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  375. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +8 -7
  376. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  377. package/lib/feature-libraries/flex-tree/lazyNode.js +17 -6
  378. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  379. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +10 -5
  380. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  381. package/lib/feature-libraries/forest-summary/forestSummarizer.js +4 -7
  382. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  383. package/lib/feature-libraries/index.d.ts +2 -2
  384. package/lib/feature-libraries/index.d.ts.map +1 -1
  385. package/lib/feature-libraries/index.js +2 -2
  386. package/lib/feature-libraries/index.js.map +1 -1
  387. package/lib/feature-libraries/mapTreeCursor.d.ts +53 -3
  388. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  389. package/lib/feature-libraries/mapTreeCursor.js +43 -7
  390. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  391. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +1 -1
  392. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js +2 -0
  393. package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
  394. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
  395. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  396. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +5 -5
  397. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  398. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  399. package/lib/feature-libraries/object-forest/objectForest.js +2 -0
  400. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  401. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  402. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +8 -4
  403. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  404. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -36
  405. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  406. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js +3 -3
  407. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  408. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  409. package/lib/feature-libraries/schema-index/codec.js +60 -10
  410. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  411. package/lib/feature-libraries/schema-index/formatV1.d.ts +1 -1
  412. package/lib/feature-libraries/schema-index/formatV2.d.ts +42 -0
  413. package/lib/feature-libraries/schema-index/formatV2.d.ts.map +1 -0
  414. package/lib/feature-libraries/schema-index/formatV2.js +23 -0
  415. package/lib/feature-libraries/schema-index/formatV2.js.map +1 -0
  416. package/lib/feature-libraries/schema-index/index.d.ts +2 -1
  417. package/lib/feature-libraries/schema-index/index.d.ts.map +1 -1
  418. package/lib/feature-libraries/schema-index/index.js +2 -1
  419. package/lib/feature-libraries/schema-index/index.js.map +1 -1
  420. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +7 -2
  421. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  422. package/lib/feature-libraries/schema-index/schemaSummarizer.js +6 -6
  423. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  424. package/lib/feature-libraries/treeCursorUtils.d.ts +5 -1
  425. package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  426. package/lib/feature-libraries/treeCursorUtils.js +8 -2
  427. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  428. package/lib/index.d.ts +3 -3
  429. package/lib/index.d.ts.map +1 -1
  430. package/lib/index.js.map +1 -1
  431. package/lib/packageVersion.d.ts +1 -1
  432. package/lib/packageVersion.d.ts.map +1 -1
  433. package/lib/packageVersion.js +1 -1
  434. package/lib/packageVersion.js.map +1 -1
  435. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  436. package/lib/shared-tree/schematizeTree.js +1 -0
  437. package/lib/shared-tree/schematizeTree.js.map +1 -1
  438. package/lib/shared-tree/schematizingTreeView.d.ts +11 -1
  439. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  440. package/lib/shared-tree/schematizingTreeView.js +34 -21
  441. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  442. package/lib/shared-tree/sharedTree.d.ts +8 -4
  443. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  444. package/lib/shared-tree/sharedTree.js +36 -6
  445. package/lib/shared-tree/sharedTree.js.map +1 -1
  446. package/lib/shared-tree/tree.d.ts.map +1 -1
  447. package/lib/shared-tree/tree.js +2 -18
  448. package/lib/shared-tree/tree.js.map +1 -1
  449. package/lib/shared-tree/treeAlpha.d.ts +2 -3
  450. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  451. package/lib/shared-tree/treeAlpha.js +6 -7
  452. package/lib/shared-tree/treeAlpha.js.map +1 -1
  453. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  454. package/lib/shared-tree/treeCheckout.js +6 -3
  455. package/lib/shared-tree/treeCheckout.js.map +1 -1
  456. package/lib/shared-tree-core/editManagerSummarizer.d.ts +8 -3
  457. package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
  458. package/lib/shared-tree-core/editManagerSummarizer.js +2 -5
  459. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  460. package/lib/shared-tree-core/sharedTreeCore.d.ts +18 -7
  461. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  462. package/lib/shared-tree-core/sharedTreeCore.js +15 -2
  463. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  464. package/lib/simple-tree/api/configuration.d.ts +2 -2
  465. package/lib/simple-tree/api/configuration.js +1 -1
  466. package/lib/simple-tree/api/configuration.js.map +1 -1
  467. package/lib/simple-tree/api/create.d.ts +9 -4
  468. package/lib/simple-tree/api/create.d.ts.map +1 -1
  469. package/lib/simple-tree/api/create.js +22 -9
  470. package/lib/simple-tree/api/create.js.map +1 -1
  471. package/lib/simple-tree/api/customTree.d.ts +4 -0
  472. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  473. package/lib/simple-tree/api/customTree.js +7 -0
  474. package/lib/simple-tree/api/customTree.js.map +1 -1
  475. package/lib/simple-tree/api/index.d.ts +1 -1
  476. package/lib/simple-tree/api/index.d.ts.map +1 -1
  477. package/lib/simple-tree/api/index.js +1 -1
  478. package/lib/simple-tree/api/index.js.map +1 -1
  479. package/lib/simple-tree/api/schemaCompatibilityTester.js +1 -1
  480. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  481. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
  482. package/lib/simple-tree/api/schemaCreationUtilities.js +3 -3
  483. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  484. package/lib/simple-tree/api/schemaFactory.d.ts +25 -13
  485. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  486. package/lib/simple-tree/api/schemaFactory.js +44 -11
  487. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  488. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +41 -11
  489. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  490. package/lib/simple-tree/api/schemaFactoryAlpha.js +31 -4
  491. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  492. package/lib/simple-tree/api/storedSchema.js +2 -2
  493. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  494. package/lib/simple-tree/api/treeChangeEvents.d.ts +8 -3
  495. package/lib/simple-tree/api/treeChangeEvents.d.ts.map +1 -1
  496. package/lib/simple-tree/api/treeChangeEvents.js.map +1 -1
  497. package/lib/simple-tree/api/treeNodeApi.d.ts +14 -3
  498. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  499. package/lib/simple-tree/api/treeNodeApi.js +35 -20
  500. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  501. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  502. package/lib/simple-tree/api/verboseTree.js +13 -10
  503. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  504. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  505. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +5 -0
  506. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  507. package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
  508. package/lib/simple-tree/core/getOrCreateNode.js +3 -2
  509. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
  510. package/lib/simple-tree/core/index.d.ts +2 -2
  511. package/lib/simple-tree/core/index.d.ts.map +1 -1
  512. package/lib/simple-tree/core/index.js +2 -2
  513. package/lib/simple-tree/core/index.js.map +1 -1
  514. package/lib/simple-tree/core/treeNodeKernel.d.ts +15 -25
  515. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  516. package/lib/simple-tree/core/treeNodeKernel.js +25 -33
  517. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  518. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +129 -64
  519. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  520. package/lib/simple-tree/core/unhydratedFlexTree.js +174 -208
  521. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  522. package/lib/simple-tree/index.d.ts +5 -5
  523. package/lib/simple-tree/index.d.ts.map +1 -1
  524. package/lib/simple-tree/index.js +3 -3
  525. package/lib/simple-tree/index.js.map +1 -1
  526. package/lib/simple-tree/leafNodeSchema.d.ts +2 -0
  527. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  528. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  529. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +3 -1
  530. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  531. package/lib/simple-tree/node-kinds/array/arrayNode.js +7 -6
  532. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  533. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  534. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  535. package/lib/simple-tree/node-kinds/index.js +1 -1
  536. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  537. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +3 -2
  538. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  539. package/lib/simple-tree/node-kinds/map/mapNode.js +8 -6
  540. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  541. package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
  542. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  543. package/lib/simple-tree/node-kinds/object/index.js +1 -1
  544. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  545. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +5 -15
  546. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  547. package/lib/simple-tree/node-kinds/object/objectNode.js +6 -34
  548. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  549. package/lib/simple-tree/prepareForInsertion.d.ts +20 -6
  550. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  551. package/lib/simple-tree/prepareForInsertion.js +30 -20
  552. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  553. package/lib/simple-tree/schemaTypes.d.ts +56 -9
  554. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  555. package/lib/simple-tree/schemaTypes.js +28 -1
  556. package/lib/simple-tree/schemaTypes.js.map +1 -1
  557. package/lib/simple-tree/simpleSchema.d.ts +22 -4
  558. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  559. package/lib/simple-tree/simpleSchema.js.map +1 -1
  560. package/lib/simple-tree/toStoredSchema.d.ts +8 -1
  561. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  562. package/lib/simple-tree/toStoredSchema.js +17 -5
  563. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  564. package/{dist/simple-tree/toMapTree.d.ts → lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts} +12 -23
  565. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -0
  566. package/lib/simple-tree/{toMapTree.js → unhydratedFlexTreeFromInsertable.js} +105 -186
  567. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -0
  568. package/lib/tableSchema.d.ts +1 -1
  569. package/lib/treeFactory.d.ts.map +1 -1
  570. package/lib/treeFactory.js +6 -1
  571. package/lib/treeFactory.js.map +1 -1
  572. package/lib/util/index.d.ts +1 -1
  573. package/lib/util/index.d.ts.map +1 -1
  574. package/lib/util/index.js +1 -1
  575. package/lib/util/index.js.map +1 -1
  576. package/lib/util/typeUtils.d.ts +2 -2
  577. package/lib/util/typeUtils.js.map +1 -1
  578. package/lib/util/utils.d.ts +6 -0
  579. package/lib/util/utils.d.ts.map +1 -1
  580. package/lib/util/utils.js +6 -0
  581. package/lib/util/utils.js.map +1 -1
  582. package/package.json +21 -21
  583. package/src/codec/codec.ts +24 -3
  584. package/src/codec/index.ts +1 -0
  585. package/src/codec/versioned/codec.ts +42 -5
  586. package/src/core/index.ts +3 -1
  587. package/src/core/schema-stored/formatV2.ts +78 -0
  588. package/src/core/schema-stored/index.ts +4 -1
  589. package/src/core/schema-stored/schema.ts +123 -33
  590. package/src/core/tree/detachedFieldIndex.ts +13 -4
  591. package/src/core/tree/mapTree.ts +22 -7
  592. package/src/core/tree/visitorUtils.ts +2 -2
  593. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +16 -11
  594. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +16 -7
  595. package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +4 -4
  596. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +3 -2
  597. package/src/feature-libraries/default-schema/schemaChecker.ts +7 -6
  598. package/src/feature-libraries/detachedFieldIndexSummarizer.ts +9 -16
  599. package/src/feature-libraries/flex-tree/context.ts +17 -7
  600. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +57 -33
  601. package/src/feature-libraries/flex-tree/index.ts +4 -8
  602. package/src/feature-libraries/flex-tree/lazyEntity.ts +5 -1
  603. package/src/feature-libraries/flex-tree/lazyField.ts +12 -13
  604. package/src/feature-libraries/flex-tree/lazyNode.ts +21 -8
  605. package/src/feature-libraries/forest-summary/forestSummarizer.ts +12 -18
  606. package/src/feature-libraries/index.ts +10 -1
  607. package/src/feature-libraries/mapTreeCursor.ts +112 -16
  608. package/src/feature-libraries/modular-schema/fieldKindWithEditor.ts +2 -0
  609. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +9 -5
  610. package/src/feature-libraries/object-forest/objectForest.ts +3 -0
  611. package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +11 -6
  612. package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +3 -3
  613. package/src/feature-libraries/schema-index/codec.ts +73 -14
  614. package/src/feature-libraries/schema-index/formatV2.ts +30 -0
  615. package/src/feature-libraries/schema-index/index.ts +2 -1
  616. package/src/feature-libraries/schema-index/schemaSummarizer.ts +11 -18
  617. package/src/feature-libraries/treeCursorUtils.ts +21 -10
  618. package/src/index.ts +6 -0
  619. package/src/packageVersion.ts +1 -1
  620. package/src/shared-tree/schematizeTree.ts +1 -0
  621. package/src/shared-tree/schematizingTreeView.ts +40 -22
  622. package/src/shared-tree/sharedTree.ts +51 -15
  623. package/src/shared-tree/tree.ts +5 -20
  624. package/src/shared-tree/treeAlpha.ts +23 -12
  625. package/src/shared-tree/treeCheckout.ts +6 -3
  626. package/src/shared-tree-core/editManagerSummarizer.ts +9 -16
  627. package/src/shared-tree-core/sharedTreeCore.ts +33 -24
  628. package/src/simple-tree/api/configuration.ts +3 -3
  629. package/src/simple-tree/api/create.ts +49 -19
  630. package/src/simple-tree/api/customTree.ts +10 -0
  631. package/src/simple-tree/api/index.ts +1 -4
  632. package/src/simple-tree/api/schemaCompatibilityTester.ts +1 -1
  633. package/src/simple-tree/api/schemaCreationUtilities.ts +3 -3
  634. package/src/simple-tree/api/schemaFactory.ts +78 -24
  635. package/src/simple-tree/api/schemaFactoryAlpha.ts +53 -8
  636. package/src/simple-tree/api/storedSchema.ts +4 -4
  637. package/src/simple-tree/api/treeChangeEvents.ts +8 -3
  638. package/src/simple-tree/api/treeNodeApi.ts +48 -27
  639. package/src/simple-tree/api/verboseTree.ts +15 -12
  640. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +5 -0
  641. package/src/simple-tree/core/getOrCreateNode.ts +4 -2
  642. package/src/simple-tree/core/index.ts +2 -3
  643. package/src/simple-tree/core/treeNodeKernel.ts +38 -55
  644. package/src/simple-tree/core/unhydratedFlexTree.ts +231 -292
  645. package/src/simple-tree/index.ts +6 -3
  646. package/src/simple-tree/leafNodeSchema.ts +2 -0
  647. package/src/simple-tree/node-kinds/array/arrayNode.ts +17 -13
  648. package/src/simple-tree/node-kinds/index.ts +0 -1
  649. package/src/simple-tree/node-kinds/map/mapNode.ts +17 -11
  650. package/src/simple-tree/node-kinds/object/index.ts +0 -1
  651. package/src/simple-tree/node-kinds/object/objectNode.ts +15 -49
  652. package/src/simple-tree/prepareForInsertion.ts +54 -43
  653. package/src/simple-tree/schemaTypes.ts +103 -13
  654. package/src/simple-tree/simpleSchema.ts +27 -5
  655. package/src/simple-tree/toStoredSchema.ts +22 -5
  656. package/src/simple-tree/{toMapTree.ts → unhydratedFlexTreeFromInsertable.ts} +134 -226
  657. package/src/treeFactory.ts +6 -1
  658. package/src/util/index.ts +1 -0
  659. package/src/util/typeUtils.ts +2 -2
  660. package/src/util/utils.ts +9 -0
  661. package/dist/feature-libraries/flex-tree/navigation.d.ts +0 -46
  662. package/dist/feature-libraries/flex-tree/navigation.d.ts.map +0 -1
  663. package/dist/feature-libraries/flex-tree/navigation.js +0 -104
  664. package/dist/feature-libraries/flex-tree/navigation.js.map +0 -1
  665. package/dist/simple-tree/toMapTree.d.ts.map +0 -1
  666. package/dist/simple-tree/toMapTree.js.map +0 -1
  667. package/lib/feature-libraries/flex-tree/navigation.d.ts +0 -46
  668. package/lib/feature-libraries/flex-tree/navigation.d.ts.map +0 -1
  669. package/lib/feature-libraries/flex-tree/navigation.js +0 -97
  670. package/lib/feature-libraries/flex-tree/navigation.js.map +0 -1
  671. package/lib/simple-tree/toMapTree.d.ts.map +0 -1
  672. package/lib/simple-tree/toMapTree.js.map +0 -1
  673. package/src/feature-libraries/flex-tree/navigation.ts +0 -121
@@ -22,6 +22,7 @@ export {
22
22
  HydratedContext,
23
23
  SimpleContextSlot,
24
24
  getOrCreateInnerNode,
25
+ getOrCreateNodeFromInnerNode,
25
26
  getKernel,
26
27
  } from "./core/index.js";
27
28
  export {
@@ -120,7 +121,6 @@ export {
120
121
  type FixRecursiveRecursionLimit,
121
122
  schemaStatics,
122
123
  type TreeChangeEvents,
123
- createFromMapTree,
124
124
  } from "./api/index.js";
125
125
  export type {
126
126
  SimpleTreeSchema,
@@ -131,6 +131,7 @@ export type {
131
131
  SimpleArrayNodeSchema,
132
132
  SimpleObjectNodeSchema,
133
133
  SimpleNodeSchemaBase,
134
+ SimpleNodeSchemaBaseAlpha,
134
135
  SimpleObjectFieldSchema,
135
136
  } from "./simpleSchema.js";
136
137
  export {
@@ -164,6 +165,7 @@ export {
164
165
  type NodeBuilderData,
165
166
  type DefaultProvider,
166
167
  type FieldProps,
168
+ type FieldPropsAlpha,
167
169
  normalizeFieldSchema,
168
170
  areFieldSchemaEqual,
169
171
  areImplicitFieldSchemaEqual,
@@ -179,6 +181,7 @@ export {
179
181
  type ReadableField,
180
182
  type ReadSchema,
181
183
  type NodeSchemaOptions,
184
+ type NodeSchemaOptionsAlpha,
182
185
  type NodeSchemaMetadata,
183
186
  evaluateLazySchema,
184
187
  } from "./schemaTypes.js";
@@ -207,11 +210,11 @@ export {
207
210
  createUnknownOptionalFieldPolicy,
208
211
  } from "./node-kinds/index.js";
209
212
  export {
210
- mapTreeFromNodeData,
213
+ unhydratedFlexTreeFromInsertable,
211
214
  type InsertableContent,
212
215
  type FactoryContent,
213
216
  type FactoryContentObject,
214
- } from "./toMapTree.js";
217
+ } from "./unhydratedFlexTreeFromInsertable.js";
215
218
  export {
216
219
  prepareForInsertion,
217
220
  prepareForInsertionContextless,
@@ -15,6 +15,7 @@ import {
15
15
  import { NodeKind, type TreeNodeSchema, type TreeNodeSchemaNonClass } from "./core/index.js";
16
16
  import type { NodeSchemaMetadata, TreeLeafValue } from "./schemaTypes.js";
17
17
  import type { SimpleLeafNodeSchema } from "./simpleSchema.js";
18
+ import type { JsonCompatibleReadOnlyObject } from "../util/index.js";
18
19
 
19
20
  /**
20
21
  * Instances of this class are schema for leaf nodes.
@@ -50,6 +51,7 @@ export class LeafNodeSchema<Name extends string, const T extends ValueSchema>
50
51
  public readonly leafKind: ValueSchema;
51
52
 
52
53
  public readonly metadata: NodeSchemaMetadata = {};
54
+ public readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined;
53
55
 
54
56
  public constructor(name: Name, t: T) {
55
57
  this.identifier = name;
@@ -6,8 +6,9 @@
6
6
  import { Lazy, oob, fail } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
- import { EmptyKey, type ExclusiveMapTree } from "../../../core/index.js";
9
+ import { EmptyKey } from "../../../core/index.js";
10
10
  import {
11
+ type FlexibleFieldContent,
11
12
  type FlexTreeNode,
12
13
  type FlexTreeSequenceField,
13
14
  isFlexTreeNode,
@@ -37,14 +38,15 @@ import {
37
38
  getSimpleNodeSchemaFromInnerNode,
38
39
  getOrCreateInnerNode,
39
40
  type TreeNodeSchemaClass,
40
- } from "../../core/index.js";
41
- import { type InsertableContent, mapTreeFromNodeData } from "../../toMapTree.js";
42
- import { prepareArrayContentForInsertion } from "../../prepareForInsertion.js";
43
- import {
44
41
  getKernel,
45
- UnhydratedFlexTreeNode,
46
- UnhydratedTreeSequenceField,
42
+ type UnhydratedFlexTreeNode,
43
+ UnhydratedSequenceField,
47
44
  } from "../../core/index.js";
45
+ import {
46
+ type InsertableContent,
47
+ unhydratedFlexTreeFromInsertable,
48
+ } from "../../unhydratedFlexTreeFromInsertable.js";
49
+ import { prepareArrayContentForInsertion } from "../../prepareForInsertion.js";
48
50
  import { TreeNodeValid, type MostDerivedData } from "../../treeNodeValid.js";
49
51
  import { getUnhydratedContext } from "../../createContext.js";
50
52
  import type { System_Unsafe } from "../../api/index.js";
@@ -52,6 +54,7 @@ import type {
52
54
  ArrayNodeCustomizableSchema,
53
55
  ArrayNodePojoEmulationSchema,
54
56
  } from "./arrayNodeTypes.js";
57
+ import type { JsonCompatibleReadOnlyObject } from "../../../util/index.js";
55
58
 
56
59
  /**
57
60
  * A covariant base type for {@link (TreeArrayNode:interface)}.
@@ -852,7 +855,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
852
855
  super(input ?? []);
853
856
  }
854
857
 
855
- #mapTreesFromFieldData(value: Insertable<T>): ExclusiveMapTree[] {
858
+ #mapTreesFromFieldData(value: Insertable<T>): FlexibleFieldContent {
856
859
  const sequenceField = getSequenceField(this);
857
860
  const content = value as readonly (
858
861
  | InsertableContent
@@ -1014,7 +1017,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
1014
1017
 
1015
1018
  const movedCount = sourceEnd - sourceStart;
1016
1019
  if (!destinationField.context.isHydrated()) {
1017
- if (!(sourceField instanceof UnhydratedTreeSequenceField)) {
1020
+ if (!(sourceField instanceof UnhydratedSequenceField)) {
1018
1021
  throw new UsageError(
1019
1022
  "Cannot move elements from a hydrated array to an unhydrated array.",
1020
1023
  );
@@ -1080,6 +1083,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
1080
1083
  * Define a {@link TreeNodeSchema} for a {@link (TreeArrayNode:interface)}.
1081
1084
  *
1082
1085
  * @param name - Unique identifier for this schema including the factory's scope.
1086
+ * @param persistedMetadata - Optional persisted metadata for the object node schema.
1083
1087
  */
1084
1088
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
1085
1089
  export function arraySchema<
@@ -1093,6 +1097,7 @@ export function arraySchema<
1093
1097
  implicitlyConstructable: ImplicitlyConstructable,
1094
1098
  customizable: boolean,
1095
1099
  metadata?: NodeSchemaMetadata<TCustomMetadata>,
1100
+ persistedMetadata?: JsonCompatibleReadOnlyObject | undefined,
1096
1101
  ) {
1097
1102
  type Output = ArrayNodeCustomizableSchema<
1098
1103
  TName,
@@ -1139,10 +1144,7 @@ export function arraySchema<
1139
1144
  instance: TreeNodeValid<T2>,
1140
1145
  input: T2,
1141
1146
  ): UnhydratedFlexTreeNode {
1142
- return UnhydratedFlexTreeNode.getOrCreate(
1143
- unhydratedContext,
1144
- mapTreeFromNodeData(input as object, this as unknown as ImplicitAllowedTypes),
1145
- );
1147
+ return unhydratedFlexTreeFromInsertable(input as object, this as typeof Schema);
1146
1148
  }
1147
1149
 
1148
1150
  public static get allowedTypesIdentifiers(): ReadonlySet<string> {
@@ -1191,6 +1193,8 @@ export function arraySchema<
1191
1193
  return lazyChildTypes.value;
1192
1194
  }
1193
1195
  public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
1196
+ public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
1197
+ persistedMetadata;
1194
1198
 
1195
1199
  // eslint-disable-next-line import/no-deprecated
1196
1200
  public get [typeNameSymbol](): TName {
@@ -31,7 +31,6 @@ export {
31
31
  type InsertableObjectFromAnnotatedSchemaRecord,
32
32
  type InsertableObjectFromSchemaRecord,
33
33
  isObjectNodeSchema,
34
- lazilyAllocateIdentifier,
35
34
  type ObjectFromSchemaRecord,
36
35
  ObjectNodeSchema,
37
36
  objectSchema,
@@ -5,6 +5,7 @@
5
5
 
6
6
  import { Lazy } from "@fluidframework/core-utils/internal";
7
7
  import type {
8
+ FlexibleNodeContent,
8
9
  FlexTreeNode,
9
10
  FlexTreeOptionalField,
10
11
  OptionalFieldEditBuilder,
@@ -32,19 +33,23 @@ import {
32
33
  type TreeNode,
33
34
  typeSchemaSymbol,
34
35
  type Context,
35
- UnhydratedFlexTreeNode,
36
36
  getOrCreateInnerNode,
37
37
  type InternalTreeNode,
38
+ type UnhydratedFlexTreeNode,
38
39
  } from "../../core/index.js";
39
40
  import {
40
- mapTreeFromNodeData,
41
+ unhydratedFlexTreeFromInsertable,
41
42
  type FactoryContent,
42
43
  type InsertableContent,
43
- } from "../../toMapTree.js";
44
+ } from "../../unhydratedFlexTreeFromInsertable.js";
44
45
  import { prepareForInsertion } from "../../prepareForInsertion.js";
45
- import { brand, count, type RestrictiveStringRecord } from "../../../util/index.js";
46
+ import {
47
+ brand,
48
+ count,
49
+ type JsonCompatibleReadOnlyObject,
50
+ type RestrictiveStringRecord,
51
+ } from "../../../util/index.js";
46
52
  import { TreeNodeValid, type MostDerivedData } from "../../treeNodeValid.js";
47
- import type { ExclusiveMapTree } from "../../../core/index.js";
48
53
  import { getUnhydratedContext } from "../../createContext.js";
49
54
  import type { MapNodeCustomizableSchema, MapNodePojoEmulationSchema } from "./mapNodeTypes.js";
50
55
 
@@ -158,7 +163,7 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
158
163
  return getOrCreateInnerNode(this);
159
164
  }
160
165
 
161
- private editor(key: string): OptionalFieldEditBuilder<ExclusiveMapTree> {
166
+ private editor(key: string): OptionalFieldEditBuilder<FlexibleNodeContent> {
162
167
  const field = this.innerNode.getBoxed(brand(key)) as FlexTreeOptionalField;
163
168
  return field.editor;
164
169
  }
@@ -215,7 +220,7 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
215
220
  callbackFn: (value: TreeNodeFromImplicitAllowedTypes<T>, key: string, map: TThis) => void,
216
221
  thisArg?: unknown,
217
222
  ): void {
218
- for (const field of getOrCreateInnerNode(this).boxedIterator()) {
223
+ for (const field of getOrCreateInnerNode(this)) {
219
224
  const node = getTreeNodeForField(field) as TreeNodeFromImplicitAllowedTypes<T>;
220
225
  callbackFn.call(thisArg, node, field.key, this);
221
226
  }
@@ -228,6 +233,7 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
228
233
  *
229
234
  * @param base - base schema type to extend.
230
235
  * @param useMapPrototype - should this type emulate a ES6 Map object (by faking its prototype with a proxy).
236
+ * @param persistedMetadata - Optional persisted metadata for the object node schema.
231
237
  */
232
238
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
233
239
  export function mapSchema<
@@ -241,6 +247,7 @@ export function mapSchema<
241
247
  implicitlyConstructable: ImplicitlyConstructable,
242
248
  useMapPrototype: boolean,
243
249
  metadata?: NodeSchemaMetadata<TCustomMetadata>,
250
+ persistedMetadata?: JsonCompatibleReadOnlyObject | undefined,
244
251
  ) {
245
252
  const lazyChildTypes = new Lazy(() =>
246
253
  normalizeAllowedTypes(unannotateImplicitAllowedTypes(info)),
@@ -271,10 +278,7 @@ export function mapSchema<
271
278
  instance: TreeNodeValid<T2>,
272
279
  input: T2,
273
280
  ): UnhydratedFlexTreeNode {
274
- return UnhydratedFlexTreeNode.getOrCreate(
275
- unhydratedContext,
276
- mapTreeFromNodeData(input as FactoryContent, this as unknown as ImplicitAllowedTypes),
277
- );
281
+ return unhydratedFlexTreeFromInsertable(input as FactoryContent, this as typeof Schema);
278
282
  }
279
283
 
280
284
  public static get allowedTypesIdentifiers(): ReadonlySet<string> {
@@ -297,6 +301,8 @@ export function mapSchema<
297
301
  return lazyChildTypes.value;
298
302
  }
299
303
  public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
304
+ public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
305
+ persistedMetadata;
300
306
 
301
307
  // eslint-disable-next-line import/no-deprecated
302
308
  public get [typeNameSymbol](): TName {
@@ -8,7 +8,6 @@ export {
8
8
  type FieldHasDefault,
9
9
  type InsertableObjectFromAnnotatedSchemaRecord,
10
10
  type InsertableObjectFromSchemaRecord,
11
- lazilyAllocateIdentifier,
12
11
  type ObjectFromSchemaRecord,
13
12
  objectSchema,
14
13
  setField,
@@ -5,8 +5,6 @@
5
5
 
6
6
  import { assert, Lazy, fail, debugAssert } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
- import type { IIdCompressor } from "@fluidframework/id-compressor";
9
- import { createIdCompressor } from "@fluidframework/id-compressor/internal";
10
8
 
11
9
  import type { FieldKey, SchemaPolicy } from "../../../core/index.js";
12
10
  import {
@@ -16,7 +14,11 @@ import {
16
14
  type FlexTreeOptionalField,
17
15
  type FlexTreeRequiredField,
18
16
  } from "../../../feature-libraries/index.js";
19
- import { type RestrictiveStringRecord, type FlattenKeys, brand } from "../../../util/index.js";
17
+ import type {
18
+ RestrictiveStringRecord,
19
+ FlattenKeys,
20
+ JsonCompatibleReadOnlyObject,
21
+ } from "../../../util/index.js";
20
22
 
21
23
  import {
22
24
  type TreeNodeSchema,
@@ -28,7 +30,7 @@ import {
28
30
  type InternalTreeNode,
29
31
  type TreeNode,
30
32
  type Context,
31
- UnhydratedFlexTreeNode,
33
+ type UnhydratedFlexTreeNode,
32
34
  getOrCreateInnerNode,
33
35
  } from "../../core/index.js";
34
36
  import { getUnhydratedContext } from "../../createContext.js";
@@ -47,7 +49,6 @@ import {
47
49
  type InsertableTreeFieldFromImplicitField,
48
50
  type FieldSchema,
49
51
  normalizeFieldSchema,
50
- type ImplicitAllowedTypes,
51
52
  FieldKind,
52
53
  type NodeSchemaMetadata,
53
54
  type FieldSchemaAlpha,
@@ -57,9 +58,11 @@ import {
57
58
  type UnannotateSchemaRecord,
58
59
  } from "../../schemaTypes.js";
59
60
  import type { SimpleObjectFieldSchema } from "../../simpleSchema.js";
60
- import { mapTreeFromNodeData, type InsertableContent } from "../../toMapTree.js";
61
+ import {
62
+ unhydratedFlexTreeFromInsertable,
63
+ type InsertableContent,
64
+ } from "../../unhydratedFlexTreeFromInsertable.js";
61
65
  import { TreeNodeValid, type MostDerivedData } from "../../treeNodeValid.js";
62
- import { stringSchema } from "../../leafNodeSchema.js";
63
66
 
64
67
  /**
65
68
  * Generates the properties for an ObjectNode from its field schema object.
@@ -201,37 +204,6 @@ function createFlexKeyMapping(fields: Record<string, ImplicitFieldSchema>): Simp
201
204
  return keyMap;
202
205
  }
203
206
 
204
- const globalIdentifierAllocator: IIdCompressor = createIdCompressor();
205
-
206
- /**
207
- * Modify `flexNode` to add a newly generated identifier under the given `storedKey`.
208
- * @remarks
209
- * This is used after checking if the user is trying to read an identifier field of an unhydrated node, but the identifier is not present.
210
- * This means the identifier is an "auto-generated identifier", because otherwise it would have been supplied by the user at construction time and would have been successfully read just above.
211
- * In this case, it is categorically impossible to provide an identifier (auto-generated identifiers can't be created until hydration/insertion time), so we emit an error.
212
- * @privateRemarks
213
- * TODO: this special case logic should move to the inner node (who's schema claims it has an identifier), rather than here, after we already read undefined out of a required field.
214
- * TODO: unify this with a more general defaults mechanism.
215
- */
216
- export function lazilyAllocateIdentifier(
217
- flexNode: UnhydratedFlexTreeNode,
218
- storedKey: FieldKey,
219
- ): string {
220
- debugAssert(() => !flexNode.mapTree.fields.has(storedKey) || "Identifier field already set");
221
- const value = globalIdentifierAllocator.decompress(
222
- globalIdentifierAllocator.generateCompressedId(),
223
- );
224
- flexNode.mapTree.fields.set(storedKey, [
225
- {
226
- type: brand(stringSchema.identifier),
227
- value,
228
- fields: new Map(),
229
- },
230
- ]);
231
-
232
- return value;
233
- }
234
-
235
207
  /**
236
208
  * Creates a proxy handler for the given schema.
237
209
  *
@@ -265,13 +237,6 @@ function createProxyHandler(
265
237
  return getTreeNodeForField(field);
266
238
  }
267
239
 
268
- if (
269
- fieldInfo.schema.kind === FieldKind.Identifier &&
270
- flexNode instanceof UnhydratedFlexTreeNode
271
- ) {
272
- return lazilyAllocateIdentifier(flexNode, fieldInfo.storedKey);
273
- }
274
-
275
240
  return undefined;
276
241
  }
277
242
 
@@ -388,6 +353,7 @@ abstract class CustomObjectNodeBase<
388
353
  *
389
354
  * @param name - Unique identifier for this schema within this factory's scope.
390
355
  * @param fields - Schema for fields of the object node's schema. Defines what children can be placed under each key.
356
+ * @param persistedMetadata - Optional persisted metadata for the object node schema.
391
357
  */
392
358
  export function objectSchema<
393
359
  TName extends string,
@@ -400,6 +366,7 @@ export function objectSchema<
400
366
  implicitlyConstructable: ImplicitlyConstructable,
401
367
  allowUnknownOptionalFields: boolean,
402
368
  metadata?: NodeSchemaMetadata<TCustomMetadata>,
369
+ persistedMetadata?: JsonCompatibleReadOnlyObject | undefined,
403
370
  ): ObjectNodeSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> &
404
371
  ObjectNodeSchemaInternalData {
405
372
  // Field set can't be modified after this since derived data is stored in maps.
@@ -495,10 +462,7 @@ export function objectSchema<
495
462
  instance: TreeNodeValid<T2>,
496
463
  input: T2,
497
464
  ): UnhydratedFlexTreeNode {
498
- return UnhydratedFlexTreeNode.getOrCreate(
499
- unhydratedContext,
500
- mapTreeFromNodeData(input as object, this as unknown as ImplicitAllowedTypes),
501
- );
465
+ return unhydratedFlexTreeFromInsertable(input as object, this as Output);
502
466
  }
503
467
 
504
468
  protected static override constructorCached: MostDerivedData | undefined = undefined;
@@ -546,6 +510,8 @@ export function objectSchema<
546
510
  return lazyChildTypes.value;
547
511
  }
548
512
  public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
513
+ public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
514
+ persistedMetadata;
549
515
 
550
516
  // eslint-disable-next-line import/no-deprecated
551
517
  public get [typeNameSymbol](): TName {
@@ -4,10 +4,8 @@
4
4
  */
5
5
 
6
6
  import type {
7
- ExclusiveMapTree,
8
7
  SchemaAndPolicy,
9
8
  IForestSubscription,
10
- MapTree,
11
9
  UpPath,
12
10
  NodeIndex,
13
11
  FieldKey,
@@ -17,23 +15,23 @@ import type {
17
15
  import {
18
16
  type FlexTreeContext,
19
17
  getSchemaAndPolicy,
20
- type FlexTreeHydratedContext,
18
+ type FlexTreeHydratedContextMinimal,
21
19
  FieldKinds,
20
+ type FlexibleFieldContent,
21
+ type FlexibleNodeContent,
22
22
  } from "../feature-libraries/index.js";
23
23
  import {
24
24
  normalizeFieldSchema,
25
25
  type ImplicitAllowedTypes,
26
26
  type ImplicitFieldSchema,
27
27
  } from "./schemaTypes.js";
28
- import { type InsertableContent, mapTreeFromNodeData } from "./toMapTree.js";
28
+ import {
29
+ type InsertableContent,
30
+ unhydratedFlexTreeFromInsertable,
31
+ } from "./unhydratedFlexTreeFromInsertable.js";
29
32
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
30
33
  import { brand } from "../util/index.js";
31
- import {
32
- getKernel,
33
- type TreeNode,
34
- tryUnhydratedFlexTreeNode,
35
- unhydratedFlexTreeNodeToTreeNode,
36
- } from "./core/index.js";
34
+ import { getKernel, type TreeNode, type UnhydratedFlexTreeNode } from "./core/index.js";
37
35
  import { debugAssert, oob } from "@fluidframework/core-utils/internal";
38
36
  import { inSchemaOrThrow, isFieldInSchema } from "../feature-libraries/index.js";
39
37
  import { convertField } from "./toStoredSchema.js";
@@ -50,7 +48,7 @@ export function prepareForInsertion<TIn extends InsertableContent | undefined>(
50
48
  data: TIn,
51
49
  schema: ImplicitFieldSchema,
52
50
  destinationContext: FlexTreeContext,
53
- ): TIn extends undefined ? undefined : ExclusiveMapTree {
51
+ ): TIn extends undefined ? undefined : FlexibleNodeContent {
54
52
  return prepareForInsertionContextless(
55
53
  data,
56
54
  schema,
@@ -76,13 +74,9 @@ export function prepareArrayContentForInsertion(
76
74
  data: readonly InsertableContent[],
77
75
  schema: ImplicitAllowedTypes,
78
76
  destinationContext: FlexTreeContext,
79
- ): ExclusiveMapTree[] {
80
- const mapTrees: ExclusiveMapTree[] = data.map((item) =>
81
- mapTreeFromNodeData(
82
- item,
83
- schema,
84
- destinationContext.isHydrated() ? destinationContext.nodeKeyManager : undefined,
85
- ),
77
+ ): FlexibleFieldContent {
78
+ const mapTrees: UnhydratedFlexTreeNode[] = data.map((item) =>
79
+ unhydratedFlexTreeFromInsertable(item, schema),
86
80
  );
87
81
 
88
82
  const fieldSchema = convertField(normalizeFieldSchema(schema));
@@ -90,7 +84,11 @@ export function prepareArrayContentForInsertion(
90
84
  validateAndPrepare(
91
85
  getSchemaAndPolicy(destinationContext),
92
86
  destinationContext.isHydrated() ? destinationContext : undefined,
93
- { kind: FieldKinds.sequence.identifier, types: fieldSchema.types },
87
+ {
88
+ kind: FieldKinds.sequence.identifier,
89
+ types: fieldSchema.types,
90
+ persistedMetadata: undefined,
91
+ },
94
92
  mapTrees,
95
93
  );
96
94
 
@@ -110,9 +108,9 @@ export function prepareForInsertionContextless<TIn extends InsertableContent | u
110
108
  data: TIn,
111
109
  schema: ImplicitFieldSchema,
112
110
  schemaAndPolicy: SchemaAndPolicy,
113
- hydratedData: Pick<FlexTreeHydratedContext, "checkout" | "nodeKeyManager"> | undefined,
114
- ): TIn extends undefined ? undefined : ExclusiveMapTree {
115
- const mapTree = mapTreeFromNodeData(data, schema, hydratedData?.nodeKeyManager);
111
+ hydratedData: FlexTreeHydratedContextMinimal | undefined,
112
+ ): TIn extends undefined ? undefined : FlexibleNodeContent {
113
+ const mapTree = unhydratedFlexTreeFromInsertable(data, schema);
116
114
 
117
115
  const contentArray = mapTree === undefined ? [] : [mapTree];
118
116
  const fieldSchema = convertField(normalizeFieldSchema(schema));
@@ -129,16 +127,19 @@ export function prepareForInsertionContextless<TIn extends InsertableContent | u
129
127
  */
130
128
  function validateAndPrepare(
131
129
  schemaAndPolicy: SchemaAndPolicy,
132
- hydratedData: Pick<FlexTreeHydratedContext, "checkout" | "nodeKeyManager"> | undefined,
130
+ hydratedData: FlexTreeHydratedContextMinimal | undefined,
133
131
  fieldSchema: TreeFieldStoredSchema,
134
- mapTrees: ExclusiveMapTree[],
132
+ mapTrees: readonly UnhydratedFlexTreeNode[],
135
133
  ): void {
136
134
  if (hydratedData !== undefined) {
135
+ // Run `prepareContentForHydration` before walking the tree in `isFieldInSchema`.
136
+ // This ensures that when `isFieldInSchema` requests identifiers (or any other contextual defaults),
137
+ // they were already creating used the more specific context we have access to from `hydratedData`.
138
+ prepareContentForHydration(mapTrees, hydratedData.checkout.forest, hydratedData);
137
139
  if (schemaAndPolicy.policy.validateSchema === true) {
138
140
  const maybeError = isFieldInSchema(mapTrees, fieldSchema, schemaAndPolicy);
139
141
  inSchemaOrThrow(maybeError);
140
142
  }
141
- prepareContentForHydration(mapTrees, hydratedData.checkout.forest);
142
143
  }
143
144
  }
144
145
 
@@ -176,17 +177,21 @@ interface LocatedNodesBatch {
176
177
  const placeholderKey: DetachedField & FieldKey = brand("placeholder" as const);
177
178
 
178
179
  /**
179
- * Records any proxies in the given content tree and does the necessary bookkeeping to ensure they are synchronized with subsequent reads of the tree.
180
- * @remarks If the content tree contains any proxies, this function must be called just prior to inserting the content into the tree.
180
+ * Records any {@link TreeNode}s in the given `content` tree and does the necessary bookkeeping to ensure they are synchronized with subsequent reads of the tree.
181
+ * Additionally populates any {@link UnhydratedFlexTreeField.pendingDefault}s using the provided `context`.
182
+ *
183
+ * @remarks If the content tree contains has any associated {@link TreeNode}s, this function must be called just prior to inserting the content into the tree.
181
184
  * Specifically, no other content may be inserted into the tree between the invocation of this function and the insertion of `content`.
182
185
  * The insertion of `content` must occur or else this function will cause memory leaks.
186
+ *
187
+ * Exported for testing purposes: otherwise should not be used outside this module.
183
188
  * @param content - the content subsequence to be inserted, of which might deeply contain {@link TreeNode}s which need to be hydrated.
184
189
  * @param forest - the forest the content is being inserted into.
185
- * See {@link extractFactoryContent} for more details.
186
190
  */
187
- function prepareContentForHydration(
188
- content: readonly MapTree[],
191
+ export function prepareContentForHydration(
192
+ content: readonly UnhydratedFlexTreeNode[],
189
193
  forest: IForestSubscription,
194
+ context: FlexTreeHydratedContextMinimal,
190
195
  ): void {
191
196
  const batches: LocatedNodesBatch[] = [];
192
197
  for (const item of content) {
@@ -199,39 +204,45 @@ function prepareContentForHydration(
199
204
  paths: [],
200
205
  };
201
206
  batches.push(batch);
202
- walkMapTree(item, batch.rootPath, (p, node) => {
203
- batch.paths.push({ path: p, node });
204
- });
207
+ walkMapTree(
208
+ item,
209
+ batch.rootPath,
210
+ (p, node) => {
211
+ batch.paths.push({ path: p, node });
212
+ },
213
+ context,
214
+ );
205
215
  }
206
216
 
207
217
  scheduleHydration(batches, forest);
208
218
  }
209
219
 
210
220
  function walkMapTree(
211
- mapTree: MapTree,
221
+ root: UnhydratedFlexTreeNode,
212
222
  path: UpPath,
213
223
  onVisitTreeNode: (path: UpPath, treeNode: TreeNode) => void,
224
+ context: FlexTreeHydratedContextMinimal,
214
225
  ): void {
215
- if (tryUnhydratedFlexTreeNode(mapTree)?.parentField.parent.parent !== undefined) {
226
+ if (root.parentField.parent.parent !== undefined) {
216
227
  throw new UsageError(
217
228
  "Attempted to insert a node which is already under a parent. If this is desired, remove the node from its parent before inserting it elsewhere.",
218
229
  );
219
230
  }
220
231
 
221
- type Next = [path: UpPath, tree: MapTree];
232
+ type Next = [path: UpPath, tree: UnhydratedFlexTreeNode];
222
233
  const nexts: Next[] = [];
223
- for (let next: Next | undefined = [path, mapTree]; next !== undefined; next = nexts.pop()) {
224
- const [p, m] = next;
225
- const mapTreeNode = tryUnhydratedFlexTreeNode(m);
226
- if (mapTreeNode !== undefined) {
227
- const treeNode = unhydratedFlexTreeNodeToTreeNode.get(mapTreeNode);
234
+ for (let next: Next | undefined = [path, root]; next !== undefined; next = nexts.pop()) {
235
+ const [p, node] = next;
236
+ if (node !== undefined) {
237
+ const treeNode = node.treeNode;
228
238
  if (treeNode !== undefined) {
229
239
  onVisitTreeNode(p, treeNode);
230
240
  }
231
241
  }
232
242
 
233
- for (const [key, field] of m.fields) {
234
- for (const [i, child] of field.entries()) {
243
+ for (const [key, field] of node.allFieldsLazy) {
244
+ field.fillPendingDefaults(context);
245
+ for (const [i, child] of field.children.entries()) {
235
246
  nexts.push([
236
247
  {
237
248
  parent: p,