@fluidframework/tree 2.3.1 → 2.4.0-297027

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 (674) hide show
  1. package/api-report/tree.alpha.api.md +77 -38
  2. package/api-report/tree.beta.api.md +50 -30
  3. package/api-report/tree.legacy.alpha.api.md +50 -30
  4. package/api-report/tree.legacy.public.api.md +50 -30
  5. package/api-report/tree.public.api.md +50 -30
  6. package/dist/alpha.d.ts +7 -0
  7. package/dist/beta.d.ts +4 -0
  8. package/dist/core/index.d.ts +1 -1
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +2 -1
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/rebase/index.d.ts +1 -1
  13. package/dist/core/rebase/index.d.ts.map +1 -1
  14. package/dist/core/rebase/index.js +2 -1
  15. package/dist/core/rebase/index.js.map +1 -1
  16. package/dist/core/rebase/types.d.ts +1 -0
  17. package/dist/core/rebase/types.d.ts.map +1 -1
  18. package/dist/core/rebase/types.js +8 -1
  19. package/dist/core/rebase/types.js.map +1 -1
  20. package/dist/core/schema-stored/schema.d.ts +7 -0
  21. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  22. package/dist/core/schema-stored/schema.js +9 -0
  23. package/dist/core/schema-stored/schema.js.map +1 -1
  24. package/dist/core/tree/anchorSet.d.ts +1 -2
  25. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  26. package/dist/core/tree/anchorSet.js +2 -2
  27. package/dist/core/tree/anchorSet.js.map +1 -1
  28. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  29. package/dist/core/tree/detachedFieldIndex.js +13 -2
  30. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  31. package/dist/core/tree/detachedFieldIndexTypes.d.ts +1 -1
  32. package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
  33. package/dist/feature-libraries/editableTreeBinder.d.ts +3 -230
  34. package/dist/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  35. package/dist/feature-libraries/editableTreeBinder.js +1 -539
  36. package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
  37. package/dist/feature-libraries/flex-tree/context.d.ts +7 -14
  38. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  39. package/dist/feature-libraries/flex-tree/context.js +3 -3
  40. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  41. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
  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/flex-tree/lazyEntity.d.ts +2 -3
  45. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  46. package/dist/feature-libraries/flex-tree/lazyEntity.js +1 -2
  47. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  48. package/dist/feature-libraries/flex-tree/lazyField.d.ts +10 -15
  49. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  50. package/dist/feature-libraries/flex-tree/lazyField.js +18 -20
  51. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  52. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
  53. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  54. package/dist/feature-libraries/flex-tree/lazyNode.js +13 -23
  55. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  56. package/dist/feature-libraries/flex-tree/utilities.js +1 -1
  57. package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
  58. package/dist/feature-libraries/index.d.ts +4 -7
  59. package/dist/feature-libraries/index.d.ts.map +1 -1
  60. package/dist/feature-libraries/index.js +5 -31
  61. package/dist/feature-libraries/index.js.map +1 -1
  62. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +7 -0
  63. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  64. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +61 -17
  65. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  66. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  67. package/dist/feature-libraries/sequence-field/compose.js +3 -0
  68. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  69. package/dist/feature-libraries/sequence-field/formatV1.d.ts +18 -18
  70. package/dist/feature-libraries/sequence-field/formatV2.d.ts +18 -18
  71. package/dist/feature-libraries/sequence-field/formatV3.d.ts +27 -27
  72. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  73. package/dist/feature-libraries/sequence-field/utils.js +1 -4
  74. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  75. package/dist/feature-libraries/typed-schema/flexList.d.ts +1 -46
  76. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  77. package/dist/feature-libraries/typed-schema/flexList.js +1 -13
  78. package/dist/feature-libraries/typed-schema/flexList.js.map +1 -1
  79. package/dist/feature-libraries/typed-schema/index.d.ts +2 -4
  80. package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
  81. package/dist/feature-libraries/typed-schema/index.js +1 -19
  82. package/dist/feature-libraries/typed-schema/index.js.map +1 -1
  83. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
  84. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  85. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -266
  86. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  87. package/dist/index.d.ts +3 -3
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +2 -1
  90. package/dist/index.js.map +1 -1
  91. package/dist/internalTypes.d.ts +1 -1
  92. package/dist/internalTypes.d.ts.map +1 -1
  93. package/dist/internalTypes.js.map +1 -1
  94. package/dist/legacy.d.ts +4 -0
  95. package/dist/packageVersion.d.ts +1 -1
  96. package/dist/packageVersion.d.ts.map +1 -1
  97. package/dist/packageVersion.js +1 -1
  98. package/dist/packageVersion.js.map +1 -1
  99. package/dist/public.d.ts +4 -0
  100. package/dist/shared-tree/checkoutFlexTreeView.d.ts +3 -3
  101. package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  102. package/dist/shared-tree/checkoutFlexTreeView.js +1 -1
  103. package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -1
  104. package/dist/shared-tree/index.d.ts +3 -3
  105. package/dist/shared-tree/index.d.ts.map +1 -1
  106. package/dist/shared-tree/index.js +2 -3
  107. package/dist/shared-tree/index.js.map +1 -1
  108. package/dist/shared-tree/schematizeTree.d.ts +1 -40
  109. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  110. package/dist/shared-tree/schematizeTree.js +2 -11
  111. package/dist/shared-tree/schematizeTree.js.map +1 -1
  112. package/dist/shared-tree/schematizingTreeView.d.ts +9 -7
  113. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  114. package/dist/shared-tree/schematizingTreeView.js +19 -8
  115. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  116. package/dist/shared-tree/sharedTree.d.ts +19 -2
  117. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  118. package/dist/shared-tree/sharedTree.js +10 -2
  119. package/dist/shared-tree/sharedTree.js.map +1 -1
  120. package/dist/shared-tree/treeCheckout.d.ts +71 -41
  121. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  122. package/dist/shared-tree/treeCheckout.js +116 -84
  123. package/dist/shared-tree/treeCheckout.js.map +1 -1
  124. package/dist/shared-tree-core/branch.d.ts +8 -11
  125. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  126. package/dist/shared-tree-core/branch.js +12 -15
  127. package/dist/shared-tree-core/branch.js.map +1 -1
  128. package/dist/simple-tree/api/create.d.ts +1 -1
  129. package/dist/simple-tree/api/create.d.ts.map +1 -1
  130. package/dist/simple-tree/api/create.js +11 -13
  131. package/dist/simple-tree/api/create.js.map +1 -1
  132. package/dist/simple-tree/api/getJsonSchema.d.ts +3 -3
  133. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  134. package/dist/simple-tree/api/getJsonSchema.js +1 -1
  135. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  136. package/dist/simple-tree/api/getSimpleSchema.d.ts +2 -2
  137. package/dist/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
  138. package/dist/simple-tree/api/getSimpleSchema.js.map +1 -1
  139. package/dist/simple-tree/api/index.d.ts +2 -1
  140. package/dist/simple-tree/api/index.d.ts.map +1 -1
  141. package/dist/simple-tree/api/index.js +3 -1
  142. package/dist/simple-tree/api/index.js.map +1 -1
  143. package/dist/simple-tree/api/jsonSchema.d.ts +13 -14
  144. package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -1
  145. package/dist/simple-tree/api/jsonSchema.js.map +1 -1
  146. package/dist/simple-tree/api/schemaFactory.d.ts +14 -8
  147. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  148. package/dist/simple-tree/api/schemaFactory.js +21 -2
  149. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  150. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
  151. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  152. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  153. package/dist/simple-tree/api/simpleSchema.d.ts +18 -10
  154. package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
  155. package/dist/simple-tree/api/simpleSchema.js.map +1 -1
  156. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  157. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +30 -17
  158. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  159. package/dist/simple-tree/api/tree.d.ts +16 -6
  160. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  161. package/dist/simple-tree/api/tree.js +4 -4
  162. package/dist/simple-tree/api/tree.js.map +1 -1
  163. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  164. package/dist/simple-tree/api/treeNodeApi.js +8 -6
  165. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  166. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  167. package/dist/simple-tree/api/verboseTree.js +6 -10
  168. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  169. package/{lib/feature-libraries/typed-schema → dist/simple-tree/api}/view.d.ts +4 -11
  170. package/dist/simple-tree/api/view.d.ts.map +1 -0
  171. package/dist/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
  172. package/dist/simple-tree/api/view.js.map +1 -0
  173. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
  174. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  175. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +11 -1
  176. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  177. package/dist/simple-tree/arrayNode.d.ts +147 -14
  178. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  179. package/dist/simple-tree/arrayNode.js +32 -20
  180. package/dist/simple-tree/arrayNode.js.map +1 -1
  181. package/dist/simple-tree/core/context.d.ts +55 -0
  182. package/dist/simple-tree/core/context.d.ts.map +1 -0
  183. package/dist/simple-tree/core/context.js +60 -0
  184. package/dist/simple-tree/core/context.js.map +1 -0
  185. package/dist/simple-tree/core/getOrCreateNode.d.ts +15 -0
  186. package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
  187. package/dist/simple-tree/core/getOrCreateNode.js +36 -0
  188. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -0
  189. package/dist/simple-tree/core/index.d.ts +7 -3
  190. package/dist/simple-tree/core/index.d.ts.map +1 -1
  191. package/dist/simple-tree/core/index.js +16 -7
  192. package/dist/simple-tree/core/index.js.map +1 -1
  193. package/dist/simple-tree/core/schemaCaching.d.ts +5 -13
  194. package/dist/simple-tree/core/schemaCaching.d.ts.map +1 -1
  195. package/dist/simple-tree/core/schemaCaching.js +16 -45
  196. package/dist/simple-tree/core/schemaCaching.js.map +1 -1
  197. package/dist/simple-tree/core/treeNodeKernel.d.ts +29 -7
  198. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  199. package/dist/simple-tree/core/treeNodeKernel.js +94 -58
  200. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  201. package/dist/simple-tree/core/treeNodeSchema.d.ts +24 -0
  202. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  203. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  204. package/dist/simple-tree/core/types.d.ts +0 -5
  205. package/dist/simple-tree/core/types.d.ts.map +1 -1
  206. package/dist/simple-tree/core/types.js.map +1 -1
  207. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
  208. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
  209. package/dist/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +112 -132
  210. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -0
  211. package/dist/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
  212. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -0
  213. package/dist/simple-tree/core/walkSchema.js +34 -0
  214. package/dist/simple-tree/core/walkSchema.js.map +1 -0
  215. package/dist/simple-tree/createContext.d.ts +11 -0
  216. package/dist/simple-tree/createContext.d.ts.map +1 -0
  217. package/dist/simple-tree/createContext.js +25 -0
  218. package/dist/simple-tree/createContext.js.map +1 -0
  219. package/dist/simple-tree/index.d.ts +4 -5
  220. package/dist/simple-tree/index.d.ts.map +1 -1
  221. package/dist/simple-tree/index.js +7 -7
  222. package/dist/simple-tree/index.js.map +1 -1
  223. package/dist/simple-tree/leafNodeSchema.d.ts +1 -0
  224. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  225. package/dist/simple-tree/leafNodeSchema.js +1 -2
  226. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  227. package/dist/simple-tree/mapNode.d.ts +4 -4
  228. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  229. package/dist/simple-tree/mapNode.js +9 -5
  230. package/dist/simple-tree/mapNode.js.map +1 -1
  231. package/dist/simple-tree/objectNode.d.ts +8 -8
  232. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  233. package/dist/simple-tree/objectNode.js +33 -14
  234. package/dist/simple-tree/objectNode.js.map +1 -1
  235. package/dist/simple-tree/objectNodeTypes.d.ts +7 -3
  236. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
  237. package/dist/simple-tree/objectNodeTypes.js.map +1 -1
  238. package/dist/simple-tree/proxies.d.ts +1 -2
  239. package/dist/simple-tree/proxies.d.ts.map +1 -1
  240. package/dist/simple-tree/proxies.js +6 -22
  241. package/dist/simple-tree/proxies.js.map +1 -1
  242. package/dist/simple-tree/schemaTypes.d.ts +44 -4
  243. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  244. package/dist/simple-tree/schemaTypes.js +10 -0
  245. package/dist/simple-tree/schemaTypes.js.map +1 -1
  246. package/dist/simple-tree/toFlexSchema.d.ts +6 -36
  247. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  248. package/dist/simple-tree/toFlexSchema.js +58 -142
  249. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  250. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  251. package/dist/simple-tree/toMapTree.js +2 -2
  252. package/dist/simple-tree/toMapTree.js.map +1 -1
  253. package/dist/simple-tree/treeNodeValid.d.ts +13 -5
  254. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  255. package/dist/simple-tree/treeNodeValid.js +19 -10
  256. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  257. package/dist/simple-tree/typesUnsafe.d.ts +4 -4
  258. package/dist/simple-tree/typesUnsafe.d.ts.map +1 -1
  259. package/dist/simple-tree/typesUnsafe.js.map +1 -1
  260. package/dist/simple-tree/walkFieldSchema.d.ts +11 -0
  261. package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -0
  262. package/dist/simple-tree/walkFieldSchema.js +17 -0
  263. package/dist/simple-tree/walkFieldSchema.js.map +1 -0
  264. package/dist/util/index.d.ts +1 -1
  265. package/dist/util/index.d.ts.map +1 -1
  266. package/dist/util/index.js.map +1 -1
  267. package/dist/util/typeUtils.d.ts +14 -45
  268. package/dist/util/typeUtils.d.ts.map +1 -1
  269. package/dist/util/typeUtils.js.map +1 -1
  270. package/lib/alpha.d.ts +7 -0
  271. package/lib/beta.d.ts +4 -0
  272. package/lib/core/index.d.ts +1 -1
  273. package/lib/core/index.d.ts.map +1 -1
  274. package/lib/core/index.js +1 -1
  275. package/lib/core/index.js.map +1 -1
  276. package/lib/core/rebase/index.d.ts +1 -1
  277. package/lib/core/rebase/index.d.ts.map +1 -1
  278. package/lib/core/rebase/index.js +1 -1
  279. package/lib/core/rebase/index.js.map +1 -1
  280. package/lib/core/rebase/types.d.ts +1 -0
  281. package/lib/core/rebase/types.d.ts.map +1 -1
  282. package/lib/core/rebase/types.js +6 -0
  283. package/lib/core/rebase/types.js.map +1 -1
  284. package/lib/core/schema-stored/schema.d.ts +7 -0
  285. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  286. package/lib/core/schema-stored/schema.js +9 -0
  287. package/lib/core/schema-stored/schema.js.map +1 -1
  288. package/lib/core/tree/anchorSet.d.ts +1 -2
  289. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  290. package/lib/core/tree/anchorSet.js +2 -2
  291. package/lib/core/tree/anchorSet.js.map +1 -1
  292. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  293. package/lib/core/tree/detachedFieldIndex.js +13 -2
  294. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  295. package/lib/core/tree/detachedFieldIndexTypes.d.ts +1 -1
  296. package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
  297. package/lib/feature-libraries/editableTreeBinder.d.ts +3 -230
  298. package/lib/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  299. package/lib/feature-libraries/editableTreeBinder.js +1 -532
  300. package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
  301. package/lib/feature-libraries/flex-tree/context.d.ts +7 -14
  302. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  303. package/lib/feature-libraries/flex-tree/context.js +3 -3
  304. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  305. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
  306. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  307. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  308. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +2 -3
  309. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  310. package/lib/feature-libraries/flex-tree/lazyEntity.js +1 -2
  311. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  312. package/lib/feature-libraries/flex-tree/lazyField.d.ts +10 -15
  313. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  314. package/lib/feature-libraries/flex-tree/lazyField.js +18 -20
  315. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  316. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
  317. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  318. package/lib/feature-libraries/flex-tree/lazyNode.js +13 -23
  319. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  320. package/lib/feature-libraries/flex-tree/utilities.js +1 -1
  321. package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
  322. package/lib/feature-libraries/index.d.ts +4 -7
  323. package/lib/feature-libraries/index.d.ts.map +1 -1
  324. package/lib/feature-libraries/index.js +4 -6
  325. package/lib/feature-libraries/index.js.map +1 -1
  326. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +7 -0
  327. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  328. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +62 -18
  329. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  330. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  331. package/lib/feature-libraries/sequence-field/compose.js +3 -0
  332. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  333. package/lib/feature-libraries/sequence-field/formatV1.d.ts +18 -18
  334. package/lib/feature-libraries/sequence-field/formatV2.d.ts +18 -18
  335. package/lib/feature-libraries/sequence-field/formatV3.d.ts +27 -27
  336. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  337. package/lib/feature-libraries/sequence-field/utils.js +2 -5
  338. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  339. package/lib/feature-libraries/typed-schema/flexList.d.ts +1 -46
  340. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  341. package/lib/feature-libraries/typed-schema/flexList.js +0 -11
  342. package/lib/feature-libraries/typed-schema/flexList.js.map +1 -1
  343. package/lib/feature-libraries/typed-schema/index.d.ts +2 -4
  344. package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
  345. package/lib/feature-libraries/typed-schema/index.js +0 -3
  346. package/lib/feature-libraries/typed-schema/index.js.map +1 -1
  347. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
  348. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  349. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +1 -253
  350. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  351. package/lib/index.d.ts +3 -3
  352. package/lib/index.d.ts.map +1 -1
  353. package/lib/index.js +1 -1
  354. package/lib/index.js.map +1 -1
  355. package/lib/internalTypes.d.ts +1 -1
  356. package/lib/internalTypes.d.ts.map +1 -1
  357. package/lib/internalTypes.js.map +1 -1
  358. package/lib/legacy.d.ts +4 -0
  359. package/lib/packageVersion.d.ts +1 -1
  360. package/lib/packageVersion.d.ts.map +1 -1
  361. package/lib/packageVersion.js +1 -1
  362. package/lib/packageVersion.js.map +1 -1
  363. package/lib/public.d.ts +4 -0
  364. package/lib/shared-tree/checkoutFlexTreeView.d.ts +3 -3
  365. package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  366. package/lib/shared-tree/checkoutFlexTreeView.js +1 -1
  367. package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -1
  368. package/lib/shared-tree/index.d.ts +3 -3
  369. package/lib/shared-tree/index.d.ts.map +1 -1
  370. package/lib/shared-tree/index.js +1 -2
  371. package/lib/shared-tree/index.js.map +1 -1
  372. package/lib/shared-tree/schematizeTree.d.ts +1 -40
  373. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  374. package/lib/shared-tree/schematizeTree.js +1 -9
  375. package/lib/shared-tree/schematizeTree.js.map +1 -1
  376. package/lib/shared-tree/schematizingTreeView.d.ts +9 -7
  377. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  378. package/lib/shared-tree/schematizingTreeView.js +22 -11
  379. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  380. package/lib/shared-tree/sharedTree.d.ts +19 -2
  381. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  382. package/lib/shared-tree/sharedTree.js +10 -3
  383. package/lib/shared-tree/sharedTree.js.map +1 -1
  384. package/lib/shared-tree/treeCheckout.d.ts +71 -41
  385. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  386. package/lib/shared-tree/treeCheckout.js +118 -86
  387. package/lib/shared-tree/treeCheckout.js.map +1 -1
  388. package/lib/shared-tree-core/branch.d.ts +8 -11
  389. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  390. package/lib/shared-tree-core/branch.js +12 -15
  391. package/lib/shared-tree-core/branch.js.map +1 -1
  392. package/lib/simple-tree/api/create.d.ts +1 -1
  393. package/lib/simple-tree/api/create.d.ts.map +1 -1
  394. package/lib/simple-tree/api/create.js +14 -16
  395. package/lib/simple-tree/api/create.js.map +1 -1
  396. package/lib/simple-tree/api/getJsonSchema.d.ts +3 -3
  397. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  398. package/lib/simple-tree/api/getJsonSchema.js +1 -1
  399. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  400. package/lib/simple-tree/api/getSimpleSchema.d.ts +2 -2
  401. package/lib/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
  402. package/lib/simple-tree/api/getSimpleSchema.js.map +1 -1
  403. package/lib/simple-tree/api/index.d.ts +2 -1
  404. package/lib/simple-tree/api/index.d.ts.map +1 -1
  405. package/lib/simple-tree/api/index.js +1 -0
  406. package/lib/simple-tree/api/index.js.map +1 -1
  407. package/lib/simple-tree/api/jsonSchema.d.ts +13 -14
  408. package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -1
  409. package/lib/simple-tree/api/jsonSchema.js.map +1 -1
  410. package/lib/simple-tree/api/schemaFactory.d.ts +14 -8
  411. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  412. package/lib/simple-tree/api/schemaFactory.js +21 -2
  413. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  414. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
  415. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  416. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  417. package/lib/simple-tree/api/simpleSchema.d.ts +18 -10
  418. package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
  419. package/lib/simple-tree/api/simpleSchema.js.map +1 -1
  420. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  421. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +31 -18
  422. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  423. package/lib/simple-tree/api/tree.d.ts +16 -6
  424. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  425. package/lib/simple-tree/api/tree.js +4 -4
  426. package/lib/simple-tree/api/tree.js.map +1 -1
  427. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  428. package/lib/simple-tree/api/treeNodeApi.js +10 -8
  429. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  430. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  431. package/lib/simple-tree/api/verboseTree.js +6 -10
  432. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  433. package/{dist/feature-libraries/typed-schema → lib/simple-tree/api}/view.d.ts +4 -11
  434. package/lib/simple-tree/api/view.d.ts.map +1 -0
  435. package/lib/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
  436. package/lib/simple-tree/api/view.js.map +1 -0
  437. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
  438. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  439. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +11 -1
  440. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  441. package/lib/simple-tree/arrayNode.d.ts +147 -14
  442. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  443. package/lib/simple-tree/arrayNode.js +37 -25
  444. package/lib/simple-tree/arrayNode.js.map +1 -1
  445. package/lib/simple-tree/core/context.d.ts +55 -0
  446. package/lib/simple-tree/core/context.d.ts.map +1 -0
  447. package/lib/simple-tree/core/context.js +55 -0
  448. package/lib/simple-tree/core/context.js.map +1 -0
  449. package/lib/simple-tree/core/getOrCreateNode.d.ts +15 -0
  450. package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
  451. package/lib/simple-tree/core/getOrCreateNode.js +32 -0
  452. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -0
  453. package/lib/simple-tree/core/index.d.ts +7 -3
  454. package/lib/simple-tree/core/index.d.ts.map +1 -1
  455. package/lib/simple-tree/core/index.js +6 -2
  456. package/lib/simple-tree/core/index.js.map +1 -1
  457. package/lib/simple-tree/core/schemaCaching.d.ts +5 -13
  458. package/lib/simple-tree/core/schemaCaching.d.ts.map +1 -1
  459. package/lib/simple-tree/core/schemaCaching.js +13 -39
  460. package/lib/simple-tree/core/schemaCaching.js.map +1 -1
  461. package/lib/simple-tree/core/treeNodeKernel.d.ts +29 -7
  462. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  463. package/lib/simple-tree/core/treeNodeKernel.js +89 -54
  464. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  465. package/lib/simple-tree/core/treeNodeSchema.d.ts +24 -0
  466. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  467. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  468. package/lib/simple-tree/core/types.d.ts +0 -5
  469. package/lib/simple-tree/core/types.d.ts.map +1 -1
  470. package/lib/simple-tree/core/types.js.map +1 -1
  471. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
  472. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
  473. package/lib/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +110 -128
  474. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -0
  475. package/lib/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
  476. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -0
  477. package/lib/simple-tree/core/walkSchema.js +29 -0
  478. package/lib/simple-tree/core/walkSchema.js.map +1 -0
  479. package/lib/simple-tree/createContext.d.ts +11 -0
  480. package/lib/simple-tree/createContext.d.ts.map +1 -0
  481. package/lib/simple-tree/createContext.js +21 -0
  482. package/lib/simple-tree/createContext.js.map +1 -0
  483. package/lib/simple-tree/index.d.ts +4 -5
  484. package/lib/simple-tree/index.d.ts.map +1 -1
  485. package/lib/simple-tree/index.js +3 -4
  486. package/lib/simple-tree/index.js.map +1 -1
  487. package/lib/simple-tree/leafNodeSchema.d.ts +1 -0
  488. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  489. package/lib/simple-tree/leafNodeSchema.js +3 -4
  490. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  491. package/lib/simple-tree/mapNode.d.ts +4 -4
  492. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  493. package/lib/simple-tree/mapNode.js +12 -8
  494. package/lib/simple-tree/mapNode.js.map +1 -1
  495. package/lib/simple-tree/objectNode.d.ts +8 -8
  496. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  497. package/lib/simple-tree/objectNode.js +36 -17
  498. package/lib/simple-tree/objectNode.js.map +1 -1
  499. package/lib/simple-tree/objectNodeTypes.d.ts +7 -3
  500. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
  501. package/lib/simple-tree/objectNodeTypes.js.map +1 -1
  502. package/lib/simple-tree/proxies.d.ts +1 -2
  503. package/lib/simple-tree/proxies.d.ts.map +1 -1
  504. package/lib/simple-tree/proxies.js +7 -22
  505. package/lib/simple-tree/proxies.js.map +1 -1
  506. package/lib/simple-tree/schemaTypes.d.ts +44 -4
  507. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  508. package/lib/simple-tree/schemaTypes.js +10 -0
  509. package/lib/simple-tree/schemaTypes.js.map +1 -1
  510. package/lib/simple-tree/toFlexSchema.d.ts +6 -36
  511. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  512. package/lib/simple-tree/toFlexSchema.js +61 -142
  513. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  514. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  515. package/lib/simple-tree/toMapTree.js +4 -4
  516. package/lib/simple-tree/toMapTree.js.map +1 -1
  517. package/lib/simple-tree/treeNodeValid.d.ts +13 -5
  518. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  519. package/lib/simple-tree/treeNodeValid.js +21 -12
  520. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  521. package/lib/simple-tree/typesUnsafe.d.ts +4 -4
  522. package/lib/simple-tree/typesUnsafe.d.ts.map +1 -1
  523. package/lib/simple-tree/typesUnsafe.js.map +1 -1
  524. package/lib/simple-tree/walkFieldSchema.d.ts +11 -0
  525. package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -0
  526. package/lib/simple-tree/walkFieldSchema.js +13 -0
  527. package/lib/simple-tree/walkFieldSchema.js.map +1 -0
  528. package/lib/util/index.d.ts +1 -1
  529. package/lib/util/index.d.ts.map +1 -1
  530. package/lib/util/index.js.map +1 -1
  531. package/lib/util/typeUtils.d.ts +14 -45
  532. package/lib/util/typeUtils.d.ts.map +1 -1
  533. package/lib/util/typeUtils.js.map +1 -1
  534. package/package.json +41 -22
  535. package/src/core/index.ts +1 -0
  536. package/src/core/rebase/index.ts +1 -0
  537. package/src/core/rebase/types.ts +11 -0
  538. package/src/core/schema-stored/schema.ts +18 -0
  539. package/src/core/tree/anchorSet.ts +3 -4
  540. package/src/core/tree/detachedFieldIndex.ts +14 -3
  541. package/src/core/tree/detachedFieldIndexTypes.ts +1 -1
  542. package/src/feature-libraries/editableTreeBinder.ts +2 -915
  543. package/src/feature-libraries/flex-tree/context.ts +7 -20
  544. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +2 -18
  545. package/src/feature-libraries/flex-tree/lazyEntity.ts +1 -4
  546. package/src/feature-libraries/flex-tree/lazyField.ts +22 -78
  547. package/src/feature-libraries/flex-tree/lazyNode.ts +24 -39
  548. package/src/feature-libraries/flex-tree/utilities.ts +1 -1
  549. package/src/feature-libraries/index.ts +3 -71
  550. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +97 -10
  551. package/src/feature-libraries/sequence-field/compose.ts +3 -0
  552. package/src/feature-libraries/sequence-field/utils.ts +2 -4
  553. package/src/feature-libraries/typed-schema/flexList.ts +3 -84
  554. package/src/feature-libraries/typed-schema/index.ts +1 -33
  555. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -458
  556. package/src/index.ts +7 -0
  557. package/src/internalTypes.ts +0 -1
  558. package/src/packageVersion.ts +1 -1
  559. package/src/shared-tree/checkoutFlexTreeView.ts +3 -3
  560. package/src/shared-tree/index.ts +4 -8
  561. package/src/shared-tree/schematizeTree.ts +2 -56
  562. package/src/shared-tree/schematizingTreeView.ts +38 -15
  563. package/src/shared-tree/sharedTree.ts +36 -8
  564. package/src/shared-tree/treeCheckout.ts +225 -128
  565. package/src/shared-tree-core/branch.ts +15 -26
  566. package/src/simple-tree/api/create.ts +18 -20
  567. package/src/simple-tree/api/getJsonSchema.ts +3 -3
  568. package/src/simple-tree/api/getSimpleSchema.ts +2 -2
  569. package/src/simple-tree/api/index.ts +2 -0
  570. package/src/simple-tree/api/jsonSchema.ts +19 -17
  571. package/src/simple-tree/api/schemaFactory.ts +53 -18
  572. package/src/simple-tree/api/schemaFactoryRecursive.ts +3 -6
  573. package/src/simple-tree/api/simpleSchema.ts +20 -10
  574. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +40 -19
  575. package/src/simple-tree/api/tree.ts +20 -9
  576. package/src/simple-tree/api/treeNodeApi.ts +12 -10
  577. package/src/simple-tree/api/verboseTree.ts +6 -12
  578. package/src/{feature-libraries/typed-schema → simple-tree/api}/view.ts +9 -22
  579. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +18 -4
  580. package/src/simple-tree/arrayNode.ts +202 -53
  581. package/src/simple-tree/core/context.ts +78 -0
  582. package/src/simple-tree/core/getOrCreateNode.ts +38 -0
  583. package/src/simple-tree/core/index.ts +11 -7
  584. package/src/simple-tree/core/schemaCaching.ts +13 -50
  585. package/src/simple-tree/core/treeNodeKernel.ts +117 -78
  586. package/src/simple-tree/core/treeNodeSchema.ts +35 -1
  587. package/src/simple-tree/core/types.ts +0 -5
  588. package/src/{feature-libraries/flex-map-tree/mapTreeNode.ts → simple-tree/core/unhydratedFlexTree.ts} +167 -210
  589. package/src/simple-tree/{walkSchema.ts → core/walkSchema.ts} +12 -34
  590. package/src/simple-tree/createContext.ts +24 -0
  591. package/src/simple-tree/index.ts +6 -2
  592. package/src/simple-tree/leafNodeSchema.ts +3 -9
  593. package/src/simple-tree/mapNode.ts +20 -17
  594. package/src/simple-tree/objectNode.ts +63 -38
  595. package/src/simple-tree/objectNodeTypes.ts +8 -5
  596. package/src/simple-tree/proxies.ts +8 -26
  597. package/src/simple-tree/schemaTypes.ts +55 -5
  598. package/src/simple-tree/toFlexSchema.ts +71 -204
  599. package/src/simple-tree/toMapTree.ts +5 -5
  600. package/src/simple-tree/treeNodeValid.ts +28 -22
  601. package/src/simple-tree/typesUnsafe.ts +4 -4
  602. package/src/simple-tree/walkFieldSchema.ts +19 -0
  603. package/src/util/index.ts +1 -5
  604. package/src/util/typeUtils.ts +14 -56
  605. package/dist/feature-libraries/fieldGenerator.d.ts +0 -43
  606. package/dist/feature-libraries/fieldGenerator.d.ts.map +0 -1
  607. package/dist/feature-libraries/fieldGenerator.js +0 -13
  608. package/dist/feature-libraries/fieldGenerator.js.map +0 -1
  609. package/dist/feature-libraries/flex-map-tree/index.d.ts +0 -6
  610. package/dist/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
  611. package/dist/feature-libraries/flex-map-tree/index.js +0 -14
  612. package/dist/feature-libraries/flex-map-tree/index.js.map +0 -1
  613. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
  614. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
  615. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
  616. package/dist/feature-libraries/storedToViewSchema.d.ts +0 -17
  617. package/dist/feature-libraries/storedToViewSchema.d.ts.map +0 -1
  618. package/dist/feature-libraries/storedToViewSchema.js +0 -67
  619. package/dist/feature-libraries/storedToViewSchema.js.map +0 -1
  620. package/dist/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
  621. package/dist/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
  622. package/dist/feature-libraries/typed-schema/schemaCollection.js +0 -160
  623. package/dist/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
  624. package/dist/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
  625. package/dist/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
  626. package/dist/feature-libraries/typed-schema/typeUtils.js +0 -14
  627. package/dist/feature-libraries/typed-schema/typeUtils.js.map +0 -1
  628. package/dist/feature-libraries/typed-schema/view.d.ts.map +0 -1
  629. package/dist/feature-libraries/typed-schema/view.js.map +0 -1
  630. package/dist/simple-tree/getSimpleFieldSchema.d.ts +0 -14
  631. package/dist/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
  632. package/dist/simple-tree/getSimpleFieldSchema.js +0 -29
  633. package/dist/simple-tree/getSimpleFieldSchema.js.map +0 -1
  634. package/dist/simple-tree/walkSchema.d.ts.map +0 -1
  635. package/dist/simple-tree/walkSchema.js +0 -49
  636. package/dist/simple-tree/walkSchema.js.map +0 -1
  637. package/lib/feature-libraries/fieldGenerator.d.ts +0 -43
  638. package/lib/feature-libraries/fieldGenerator.d.ts.map +0 -1
  639. package/lib/feature-libraries/fieldGenerator.js +0 -12
  640. package/lib/feature-libraries/fieldGenerator.js.map +0 -1
  641. package/lib/feature-libraries/flex-map-tree/index.d.ts +0 -6
  642. package/lib/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
  643. package/lib/feature-libraries/flex-map-tree/index.js +0 -6
  644. package/lib/feature-libraries/flex-map-tree/index.js.map +0 -1
  645. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
  646. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
  647. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
  648. package/lib/feature-libraries/storedToViewSchema.d.ts +0 -17
  649. package/lib/feature-libraries/storedToViewSchema.d.ts.map +0 -1
  650. package/lib/feature-libraries/storedToViewSchema.js +0 -62
  651. package/lib/feature-libraries/storedToViewSchema.js.map +0 -1
  652. package/lib/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
  653. package/lib/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
  654. package/lib/feature-libraries/typed-schema/schemaCollection.js +0 -153
  655. package/lib/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
  656. package/lib/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
  657. package/lib/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
  658. package/lib/feature-libraries/typed-schema/typeUtils.js +0 -10
  659. package/lib/feature-libraries/typed-schema/typeUtils.js.map +0 -1
  660. package/lib/feature-libraries/typed-schema/view.d.ts.map +0 -1
  661. package/lib/feature-libraries/typed-schema/view.js.map +0 -1
  662. package/lib/simple-tree/getSimpleFieldSchema.d.ts +0 -14
  663. package/lib/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
  664. package/lib/simple-tree/getSimpleFieldSchema.js +0 -25
  665. package/lib/simple-tree/getSimpleFieldSchema.js.map +0 -1
  666. package/lib/simple-tree/walkSchema.d.ts.map +0 -1
  667. package/lib/simple-tree/walkSchema.js +0 -43
  668. package/lib/simple-tree/walkSchema.js.map +0 -1
  669. package/src/feature-libraries/fieldGenerator.ts +0 -47
  670. package/src/feature-libraries/flex-map-tree/index.ts +0 -14
  671. package/src/feature-libraries/storedToViewSchema.ts +0 -100
  672. package/src/feature-libraries/typed-schema/schemaCollection.ts +0 -254
  673. package/src/feature-libraries/typed-schema/typeUtils.ts +0 -29
  674. package/src/simple-tree/getSimpleFieldSchema.ts +0 -36
@@ -7,18 +7,22 @@ import { assert, oob } from "@fluidframework/core-utils/internal";
7
7
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
9
  import {
10
+ type AnchorEvents,
10
11
  type AnchorNode,
11
12
  EmptyKey,
12
13
  type ExclusiveMapTree,
13
14
  type FieldKey,
15
+ type FieldKindIdentifier,
14
16
  type FieldUpPath,
17
+ forbiddenFieldKindIdentifier,
15
18
  type MapTree,
16
- type TreeFieldStoredSchema,
19
+ type SchemaPolicy,
17
20
  type TreeNodeSchemaIdentifier,
21
+ type TreeNodeStoredSchema,
18
22
  type TreeStoredSchema,
19
23
  type Value,
20
24
  } from "../../core/index.js";
21
- import { brand, fail, getOrCreate, isReadonlyArray, mapIterable } from "../../util/index.js";
25
+ import { brand, fail, getOrCreate, mapIterable } from "../../util/index.js";
22
26
  import {
23
27
  type FlexTreeContext,
24
28
  FlexTreeEntityKind,
@@ -32,58 +36,14 @@ import {
32
36
  flexTreeMarker,
33
37
  indexForAt,
34
38
  type FlexTreeHydratedContext,
35
- } from "../flex-tree/index.js";
36
- import {
37
- type FlexAllowedTypes,
38
- FlexFieldSchema,
39
- type FlexTreeNodeSchema,
40
- type FlexTreeSchema,
41
- intoStoredSchemaCollection,
42
- isLazy,
43
- } from "../typed-schema/index.js";
44
- import type { FlexFieldKind } from "../modular-schema/index.js";
45
- import {
46
- defaultSchemaPolicy,
39
+ type FlexFieldKind,
47
40
  FieldKinds,
48
41
  type SequenceFieldEditBuilder,
49
- } from "../default-schema/index.js";
50
-
51
- // #region Nodes
52
-
53
- /**
54
- * A readonly {@link FlexTreeNode} which wraps a {@link MapTree}.
55
- * @remarks Reading data from the MapTreeNode will read the corresponding data from the {@link MapTree}.
56
- * Create a `MapTreeNode` by calling {@link getOrCreateMapTreeNode}.
57
- */
58
- export interface MapTreeNode extends FlexTreeNode {
59
- readonly mapTree: MapTree;
60
- }
61
-
62
- /**
63
- * Checks if the given {@link FlexTreeNode} is a {@link MapTreeNode}.
64
- */
65
- export function isMapTreeNode(flexNode: FlexTreeNode): flexNode is MapTreeNode {
66
- return flexNode instanceof EagerMapTreeNode;
67
- }
68
-
69
- /**
70
- * Checks if the given {@link FlexTreeField} is a {@link MapTreeSequenceField}.
71
- */
72
- export function isMapTreeSequenceField(
73
- field: FlexTreeSequenceField | FlexTreeField,
74
- ): field is MapTreeSequenceField {
75
- return field instanceof EagerMapTreeSequenceField;
76
- }
77
-
78
- /**
79
- * An unhydrated {@link FlexTreeSequenceField}, which has additional editing capabilities.
80
- * @remarks When doing a removal edit, a {@link MapTreeSequenceField}'s `editor` returns ownership of the removed {@link ExclusiveMapTree}s to the caller.
81
- */
82
- export interface MapTreeSequenceField extends FlexTreeSequenceField {
83
- readonly editor: MapTreeSequenceFieldEditBuilder;
84
- }
42
+ } from "../../feature-libraries/index.js";
43
+ import type { Context } from "./context.js";
44
+ import { createEmitter, type Listenable } from "../../events/index.js";
85
45
 
86
- interface MapTreeSequenceFieldEditBuilder
46
+ interface UnhydratedTreeSequenceFieldEditBuilder
87
47
  extends SequenceFieldEditBuilder<ExclusiveMapTree[]> {
88
48
  /**
89
49
  * Issues a change which removes `count` elements starting at the given `index`.
@@ -94,38 +54,66 @@ interface MapTreeSequenceFieldEditBuilder
94
54
  remove(index: number, count: number): ExclusiveMapTree[];
95
55
  }
96
56
 
57
+ type UnhydratedFlexTreeNodeEvents = Pick<AnchorEvents, "childrenChangedAfterBatch">;
58
+
97
59
  /** A node's parent field and its index in that field */
98
60
  interface LocationInField {
99
- readonly parent: MapTreeField;
61
+ readonly parent: FlexTreeField;
100
62
  readonly index: number;
101
63
  }
102
64
 
103
65
  /**
104
- * A readonly implementation of {@link FlexTreeNode} which wraps a {@link MapTree}.
105
- * @remarks Any methods that would mutate the node will fail,
106
- * as will the querying of data specific to the {@link LazyTreeNode} implementation (e.g. {@link FlexTreeNode.context}).
66
+ * An unhydrated implementation of {@link FlexTreeNode} which wraps a {@link MapTree}.
67
+ * @remarks
107
68
  * MapTreeNodes are unconditionally cached -
108
- * when retrieved via {@link getOrCreateNode}, the same {@link MapTree} object will always produce the same `MapTreeNode` object.
69
+ * when retrieved via {@link getOrCreateNode}, the same {@link MapTree} object will always produce the same `UnhydratedFlexTreeNode` object.
70
+ *
71
+ * Create a `UnhydratedFlexTreeNode` by calling {@link getOrCreate}.
109
72
  */
110
- export class EagerMapTreeNode implements MapTreeNode {
73
+ export class UnhydratedFlexTreeNode implements UnhydratedFlexTreeNode {
111
74
  public get schema(): TreeNodeSchemaIdentifier {
112
- return this.flexSchema.name;
75
+ return this.mapTree.type;
76
+ }
77
+
78
+ public get storedSchema(): TreeNodeStoredSchema {
79
+ return this.context.schema.nodeSchema.get(this.mapTree.type) ?? fail("missing schema");
113
80
  }
114
81
 
115
82
  public readonly [flexTreeMarker] = FlexTreeEntityKind.Node as const;
116
83
 
84
+ private readonly _events = createEmitter<UnhydratedFlexTreeNodeEvents>();
85
+ public get events(): Listenable<UnhydratedFlexTreeNodeEvents> {
86
+ return this._events;
87
+ }
88
+
89
+ /**
90
+ * Create a {@link UnhydratedFlexTreeNode} that wraps the given {@link MapTree}, or get the node that already exists for that {@link MapTree} if there is one.
91
+ * @param nodeSchema - the {@link FlexTreeNodeSchema | schema} that the node conforms to
92
+ * @param mapTree - the {@link MapTree} containing the data for this node.
93
+ * @remarks It must conform to the `nodeSchema`.
94
+ */
95
+ public static getOrCreate(
96
+ context: Context,
97
+ mapTree: ExclusiveMapTree,
98
+ ): UnhydratedFlexTreeNode {
99
+ return nodeCache.get(mapTree) ?? new UnhydratedFlexTreeNode(context, mapTree, undefined);
100
+ }
101
+
102
+ public get context(): FlexTreeContext {
103
+ return this.simpleContext.flexContext;
104
+ }
105
+
117
106
  /**
118
- * Create a new MapTreeNode.
107
+ * Create a new UnhydratedFlexTreeNode.
119
108
  * @param location - the parentage of this node, if it is being created underneath an existing node and field, or undefined if not
120
109
  * @remarks This class (and its subclasses) should not be directly constructed outside of this module.
121
- * Instead, use {@link getOrCreateNode} to create a MapTreeNode from a {@link MapTree}.
122
- * A `MapTreeNode` may never be constructed more than once for the same {@link MapTree} object.
110
+ * Instead, use {@link getOrCreateNode} to create a UnhydratedFlexTreeNode from a {@link MapTree}.
111
+ * A `UnhydratedFlexTreeNode` may never be constructed more than once for the same {@link MapTree} object.
123
112
  * Instead, it should always be acquired via {@link getOrCreateNode}.
124
113
  */
125
114
  public constructor(
126
- public readonly context: UnhydratedContext,
127
- public readonly flexSchema: FlexTreeNodeSchema,
128
- /** The underlying {@link MapTree} that this `MapTreeNode` reads its data from */
115
+ public readonly simpleContext: Context,
116
+ /** The underlying {@link MapTree} that this `UnhydratedFlexTreeNode` reads its data from */
129
117
  public readonly mapTree: ExclusiveMapTree,
130
118
  private location = unparentedLocation,
131
119
  ) {
@@ -133,17 +121,17 @@ export class EagerMapTreeNode implements MapTreeNode {
133
121
  nodeCache.set(mapTree, this);
134
122
 
135
123
  // Fully demand the tree to ensure that parent pointers are present and accurate on all nodes.
136
- // When a MapTreeNode is constructed, its MapTree may contain nodes (anywhere below) that map (via the `nodeCache`) to pre-existing MapTreeNodes.
137
- // Put another way, for a given MapTree, some ancestor MapTreeNode can be created after any number of its descendant MapTreeNodes already exist.
124
+ // When a UnhydratedFlexTreeNode is constructed, its MapTree may contain nodes (anywhere below) that map (via the `nodeCache`) to pre-existing UnhydratedFlexTreeNodes.
125
+ // Put another way, for a given MapTree, some ancestor UnhydratedFlexTreeNode can be created after any number of its descendant UnhydratedFlexTreeNodes already exist.
138
126
  // In such a case, the spine of nodes between the descendant and ancestor need to exist in order for the ancestor to be able to walk upwards via the `parentField` property.
139
- // This needs to happen for all MapTreeNodes that are descendants of the ancestor MapTreeNode.
140
- // Demanding the entire tree is overkill to solve this problem since not all descendant MapTree nodes will have corresponding MapTreeNodes.
127
+ // This needs to happen for all UnhydratedFlexTreeNodes that are descendants of the ancestor UnhydratedFlexTreeNode.
128
+ // Demanding the entire tree is overkill to solve this problem since not all descendant MapTree nodes will have corresponding UnhydratedFlexTreeNodes.
141
129
  // However, demanding the full tree also lets us eagerly validate that there are no duplicate MapTrees (i.e. same MapTree object) anywhere in the tree.
142
130
  this.walkTree();
143
131
  }
144
132
 
145
133
  public get type(): TreeNodeSchemaIdentifier {
146
- return this.flexSchema.name;
134
+ return this.mapTree.type;
147
135
  }
148
136
 
149
137
  /**
@@ -154,8 +142,8 @@ export class EagerMapTreeNode implements MapTreeNode {
154
142
  * Removing a node's parent twice in a row is also not supported, as it likely indicates a bug.
155
143
  */
156
144
  public adoptBy(parent: undefined): void;
157
- public adoptBy(parent: MapTreeField, index: number): void;
158
- public adoptBy(parent: MapTreeField | undefined, index?: number): void {
145
+ public adoptBy(parent: UnhydratedFlexTreeField, index: number): void;
146
+ public adoptBy(parent: UnhydratedFlexTreeField | undefined, index?: number): void {
159
147
  if (parent !== undefined) {
160
148
  assert(
161
149
  this.location === unparentedLocation,
@@ -180,26 +168,31 @@ export class EagerMapTreeNode implements MapTreeNode {
180
168
  return this.location;
181
169
  }
182
170
 
183
- public is(schema: FlexTreeNodeSchema): boolean {
184
- return (schema as unknown) === this.flexSchema;
185
- }
186
-
187
- public tryGetField(key: FieldKey): EagerMapTreeField | undefined {
171
+ public tryGetField(key: FieldKey): UnhydratedFlexTreeField | undefined {
188
172
  const field = this.mapTree.fields.get(key);
189
173
  // Only return the field if it is not empty, in order to fulfill the contract of `tryGetField`.
190
174
  if (field !== undefined && field.length > 0) {
191
- return getOrCreateField(this, key, this.flexSchema.getFieldSchema(key));
175
+ return getOrCreateField(this, key, this.storedSchema.getFieldSchema(key).kind, () =>
176
+ this.emitChangedEvent(key),
177
+ );
192
178
  }
193
179
  }
194
180
 
195
181
  public getBoxed(key: string): FlexTreeField {
196
182
  const fieldKey: FieldKey = brand(key);
197
- return getOrCreateField(this, fieldKey, this.flexSchema.getFieldSchema(fieldKey));
183
+ return getOrCreateField(
184
+ this,
185
+ fieldKey,
186
+ this.storedSchema.getFieldSchema(fieldKey).kind,
187
+ () => this.emitChangedEvent(fieldKey),
188
+ );
198
189
  }
199
190
 
200
191
  public boxedIterator(): IterableIterator<FlexTreeField> {
201
192
  return mapIterable(this.mapTree.fields.entries(), ([key]) =>
202
- getOrCreateField(this, key, this.flexSchema.getFieldSchema(key)),
193
+ getOrCreateField(this, key, this.storedSchema.getFieldSchema(key).kind, () =>
194
+ this.emitChangedEvent(key),
195
+ ),
203
196
  );
204
197
  }
205
198
 
@@ -213,21 +206,24 @@ export class EagerMapTreeNode implements MapTreeNode {
213
206
  }
214
207
 
215
208
  public get anchorNode(): AnchorNode {
216
- // This API is relevant to `LazyTreeNode`s, but not `MapTreeNode`s.
209
+ // This API is relevant to `LazyTreeNode`s, but not `UnhydratedFlexTreeNode`s.
217
210
  // TODO: Refactor the FlexTreeNode interface so that stubbing this out isn't necessary.
218
- return fail("MapTreeNode does not implement anchorNode");
211
+ return fail("UnhydratedFlexTreeNode does not implement anchorNode");
219
212
  }
220
213
 
221
214
  private walkTree(): void {
222
215
  for (const [key, mapTrees] of this.mapTree.fields) {
223
- const field = getOrCreateField(this, key, this.flexSchema.getFieldSchema(key));
216
+ const field = getOrCreateField(
217
+ this,
218
+ key,
219
+ this.storedSchema.getFieldSchema(key).kind,
220
+ () => this.emitChangedEvent(key),
221
+ );
224
222
  for (let index = 0; index < field.length; index++) {
225
- const child = getOrCreateChild(
226
- this.context,
227
- mapTrees[index] ?? oob(),
228
- this.flexSchema.getFieldSchema(key).allowedTypes,
229
- { parent: field, index },
230
- );
223
+ const child = getOrCreateChild(this.simpleContext, mapTrees[index] ?? oob(), {
224
+ parent: field,
225
+ index,
226
+ });
231
227
  // These next asserts detect the case where `getOrCreateChild` gets a cache hit of a different node than the one we're trying to create
232
228
  assert(child.location !== undefined, 0x98d /* Expected node to have parent */);
233
229
  assert(
@@ -239,9 +235,11 @@ export class EagerMapTreeNode implements MapTreeNode {
239
235
  }
240
236
  }
241
237
  }
242
- }
243
238
 
244
- // #endregion Nodes
239
+ private emitChangedEvent(key: FieldKey): void {
240
+ this._events.emit("childrenChangedAfterBatch", { changedFields: new Set([key]) });
241
+ }
242
+ }
245
243
 
246
244
  /**
247
245
  * Implementation of `FlexTreeContext`.
@@ -249,17 +247,13 @@ export class EagerMapTreeNode implements MapTreeNode {
249
247
  * @remarks An editor is required to edit the FlexTree.
250
248
  */
251
249
  export class UnhydratedContext implements FlexTreeContext {
252
- public readonly schema: TreeStoredSchema;
253
-
254
250
  /**
255
251
  * @param flexSchema - Schema to use when working with the tree.
256
252
  */
257
- public constructor(public readonly flexSchema: FlexTreeSchema) {
258
- this.schema = {
259
- rootFieldSchema: flexSchema.rootFieldSchema.stored,
260
- ...intoStoredSchemaCollection(flexSchema),
261
- };
262
- }
253
+ public constructor(
254
+ public readonly schemaPolicy: SchemaPolicy,
255
+ public readonly schema: TreeStoredSchema,
256
+ ) {}
263
257
 
264
258
  public isHydrated(): this is FlexTreeHydratedContext {
265
259
  return false;
@@ -269,25 +263,9 @@ export class UnhydratedContext implements FlexTreeContext {
269
263
  // #region Fields
270
264
 
271
265
  /**
272
- * A readonly {@link FlexTreeField} which wraps an array of {@link MapTrees}.
273
- * @remarks Reading data from the MapTreeField will read the corresponding data from the {@link MapTree}s.
274
- * Create a `MapTreeField` by calling {@link getOrCreateField}.
275
- */
276
- interface MapTreeField extends FlexTreeField {
277
- readonly mapTrees: readonly MapTree[];
278
- }
279
-
280
- const emptyContext = new UnhydratedContext({
281
- adapters: {},
282
- nodeSchema: new Map(),
283
- policy: defaultSchemaPolicy,
284
- rootFieldSchema: FlexFieldSchema.empty,
285
- });
286
-
287
- /**
288
- * A special singleton that is the implicit {@link LocationInField} of all un-parented {@link EagerMapTreeNode}s.
289
- * @remarks This exists because {@link EagerMapTreeNode.parentField} must return a field.
290
- * If a {@link EagerMapTreeNode} is created without a parent, its {@link EagerMapTreeNode.parentField} property will point to this object.
266
+ * A special singleton that is the implicit {@link LocationInField} of all un-parented {@link UnhydratedFlexTreeNode}s.
267
+ * @remarks This exists because {@link UnhydratedFlexTreeNode.parentField} must return a field.
268
+ * If a {@link UnhydratedFlexTreeNode} is created without a parent, its {@link UnhydratedFlexTreeNode.parentField} property will point to this object.
291
269
  * However, this field cannot be used in any practical way because it is empty, i.e. it does not actually contain the children that claim to be parented under it.
292
270
  * It has the "empty" schema and it will always contain zero children if queried.
293
271
  * Any nodes with this location will have a dummy parent index of `-1`.
@@ -299,7 +277,7 @@ const unparentedLocation: LocationInField = {
299
277
  key: EmptyKey,
300
278
  parent: undefined,
301
279
  is<TKind2 extends FlexFieldKind>(kind: TKind2) {
302
- return this.schema.kind === kind.identifier;
280
+ return this.schema === kind.identifier;
303
281
  },
304
282
  boxedIterator(): IterableIterator<FlexTreeNode> {
305
283
  return [].values();
@@ -307,9 +285,10 @@ const unparentedLocation: LocationInField = {
307
285
  boxedAt(index: number): FlexTreeNode | undefined {
308
286
  return undefined;
309
287
  },
310
- schema: FlexFieldSchema.empty.stored,
311
- context: emptyContext,
312
- mapTrees: [],
288
+ schema: brand(forbiddenFieldKindIdentifier),
289
+ get context(): never {
290
+ return fail("unsupported");
291
+ },
313
292
  getFieldPath() {
314
293
  fail("unsupported");
315
294
  },
@@ -317,18 +296,19 @@ const unparentedLocation: LocationInField = {
317
296
  index: -1,
318
297
  };
319
298
 
320
- class EagerMapTreeField implements MapTreeField {
299
+ class UnhydratedFlexTreeField implements FlexTreeField {
321
300
  public [flexTreeMarker] = FlexTreeEntityKind.Field as const;
322
301
 
323
- public get schema(): TreeFieldStoredSchema {
324
- return this.flexSchema.stored;
302
+ public get context(): FlexTreeContext {
303
+ return this.simpleContext.flexContext;
325
304
  }
326
305
 
327
306
  public constructor(
328
- public readonly context: UnhydratedContext,
329
- public readonly flexSchema: FlexFieldSchema,
307
+ public readonly simpleContext: Context,
308
+ public readonly schema: FieldKindIdentifier,
330
309
  public readonly key: FieldKey,
331
- public readonly parent: EagerMapTreeNode,
310
+ public readonly parent: UnhydratedFlexTreeNode,
311
+ public readonly onEdit?: () => void,
332
312
  ) {
333
313
  const fieldKeyCache = getFieldKeyCache(parent);
334
314
  assert(!fieldKeyCache.has(key), 0x990 /* A field already exists for the given MapTrees */);
@@ -356,14 +336,14 @@ class EagerMapTreeField implements MapTreeField {
356
336
  }
357
337
 
358
338
  public is<TKind2 extends FlexFieldKind>(kind: TKind2): this is FlexTreeTypedField<TKind2> {
359
- return this.schema.kind === kind.identifier;
339
+ return this.schema === kind.identifier;
360
340
  }
361
341
 
362
342
  public boxedIterator(): IterableIterator<FlexTreeNode> {
363
343
  return this.mapTrees
364
344
  .map(
365
345
  (m, index) =>
366
- getOrCreateChild(this.context, m, this.flexSchema.allowedTypes, {
346
+ getOrCreateChild(this.simpleContext, m, {
367
347
  parent: this,
368
348
  index,
369
349
  }) as FlexTreeNode,
@@ -378,7 +358,7 @@ class EagerMapTreeField implements MapTreeField {
378
358
  }
379
359
  const m = this.mapTrees[i];
380
360
  if (m !== undefined) {
381
- return getOrCreateChild(this.context, m, this.flexSchema.allowedTypes, {
361
+ return getOrCreateChild(this.simpleContext, m, {
382
362
  parent: this,
383
363
  index: i,
384
364
  }) as FlexTreeNode;
@@ -401,21 +381,37 @@ class EagerMapTreeField implements MapTreeField {
401
381
  } else {
402
382
  this.parent.mapTree.fields.delete(this.key);
403
383
  }
384
+
385
+ this.onEdit?.();
404
386
  }
405
387
 
406
388
  public getFieldPath(): FieldUpPath {
407
389
  throw unsupportedUsageError("Editing an array");
408
390
  }
391
+
392
+ /** Unboxes leaf nodes to their values */
393
+ protected unboxed(index: number): FlexTreeUnknownUnboxed {
394
+ const mapTree: ExclusiveMapTree = this.mapTrees[index] ?? oob();
395
+ const value = mapTree.value;
396
+ if (value !== undefined) {
397
+ return value;
398
+ }
399
+
400
+ return getOrCreateChild(this.simpleContext, mapTree, { parent: this, index });
401
+ }
409
402
  }
410
403
 
411
- class EagerMapTreeOptionalField extends EagerMapTreeField implements FlexTreeOptionalField {
404
+ class EagerMapTreeOptionalField
405
+ extends UnhydratedFlexTreeField
406
+ implements FlexTreeOptionalField
407
+ {
412
408
  public readonly editor = {
413
409
  set: (newContent: ExclusiveMapTree | undefined): void => {
414
- // If the new content is a MapTreeNode, it needs to have its parent pointer updated
410
+ // If the new content is a UnhydratedFlexTreeNode, it needs to have its parent pointer updated
415
411
  if (newContent !== undefined) {
416
412
  nodeCache.get(newContent)?.adoptBy(this, 0);
417
413
  }
418
- // If the old content is a MapTreeNode, it needs to have its parent pointer unset
414
+ // If the old content is a UnhydratedFlexTreeNode, it needs to have its parent pointer unset
419
415
  const oldContent = this.mapTrees[0];
420
416
  if (oldContent !== undefined) {
421
417
  nodeCache.get(oldContent)?.adoptBy(undefined);
@@ -434,10 +430,7 @@ class EagerMapTreeOptionalField extends EagerMapTreeField implements FlexTreeOpt
434
430
  public get content(): FlexTreeUnknownUnboxed | undefined {
435
431
  const value = this.mapTrees[0];
436
432
  if (value !== undefined) {
437
- return unboxed(this.flexSchema, value, {
438
- parent: this,
439
- index: 0,
440
- });
433
+ return this.unboxed(0);
441
434
  }
442
435
 
443
436
  return undefined;
@@ -453,8 +446,11 @@ class EagerMapTreeRequiredField
453
446
  }
454
447
  }
455
448
 
456
- class EagerMapTreeSequenceField extends EagerMapTreeField implements FlexTreeSequenceField {
457
- public readonly editor: MapTreeSequenceFieldEditBuilder = {
449
+ export class UnhydratedTreeSequenceField
450
+ extends UnhydratedFlexTreeField
451
+ implements FlexTreeSequenceField
452
+ {
453
+ public readonly editor: UnhydratedTreeSequenceFieldEditBuilder = {
458
454
  insert: (index, newContent): void => {
459
455
  for (let i = 0; i < newContent.length; i++) {
460
456
  const c = newContent[i];
@@ -490,15 +486,15 @@ class EagerMapTreeSequenceField extends EagerMapTreeField implements FlexTreeSeq
490
486
  if (i === undefined) {
491
487
  return undefined;
492
488
  }
493
- return unboxed(this.flexSchema, this.mapTrees[i] ?? oob(), { parent: this, index: i });
489
+ return this.unboxed(i);
494
490
  }
495
491
  public map<U>(callbackfn: (value: FlexTreeUnknownUnboxed, index: number) => U): U[] {
496
492
  return Array.from(this, callbackfn);
497
493
  }
498
494
 
499
495
  public *[Symbol.iterator](): IterableIterator<FlexTreeUnknownUnboxed> {
500
- for (const [i, mapTree] of this.mapTrees.entries()) {
501
- yield unboxed(this.flexSchema, mapTree, { parent: this, index: i });
496
+ for (const [i] of this.mapTrees.entries()) {
497
+ yield this.unboxed(i);
502
498
  }
503
499
  }
504
500
  }
@@ -507,109 +503,70 @@ class EagerMapTreeSequenceField extends EagerMapTreeField implements FlexTreeSeq
507
503
 
508
504
  // #region Caching and unboxing utilities
509
505
 
510
- const nodeCache = new WeakMap<MapTree, EagerMapTreeNode>();
506
+ const nodeCache = new WeakMap<MapTree, UnhydratedFlexTreeNode>();
511
507
  /** Node Parent -\> Field Key -\> Field */
512
- const fieldCache = new WeakMap<MapTreeNode, Map<FieldKey, EagerMapTreeField>>();
513
- function getFieldKeyCache(parent: MapTreeNode): WeakMap<FieldKey, EagerMapTreeField> {
508
+ const fieldCache = new WeakMap<
509
+ UnhydratedFlexTreeNode,
510
+ Map<FieldKey, UnhydratedFlexTreeField>
511
+ >();
512
+ function getFieldKeyCache(
513
+ parent: UnhydratedFlexTreeNode,
514
+ ): WeakMap<FieldKey, UnhydratedFlexTreeField> {
514
515
  return getOrCreate(fieldCache, parent, () => new Map());
515
516
  }
516
517
 
517
518
  /**
518
- * If there exists a {@link EagerMapTreeNode} for the given {@link MapTree}, returns it, otherwise returns `undefined`.
519
- * @remarks {@link EagerMapTreeNode | MapTreeNodes} are created via {@link getOrCreateNode}.
519
+ * If there exists a {@link UnhydratedFlexTreeNode} for the given {@link MapTree}, returns it, otherwise returns `undefined`.
520
+ * @remarks {@link UnhydratedFlexTreeNode | UnhydratedFlexTreeNodes} are created via {@link getOrCreateNode}.
520
521
  */
521
- export function tryGetMapTreeNode(mapTree: MapTree): MapTreeNode | undefined {
522
+ export function tryUnhydratedFlexTreeNode(
523
+ mapTree: MapTree,
524
+ ): UnhydratedFlexTreeNode | undefined {
522
525
  return nodeCache.get(mapTree);
523
526
  }
524
527
 
525
- /**
526
- * Create a {@link EagerMapTreeNode} that wraps the given {@link MapTree}, or get the node that already exists for that {@link MapTree} if there is one.
527
- * @param nodeSchema - the {@link FlexTreeNodeSchema | schema} that the node conforms to
528
- * @param mapTree - the {@link MapTree} containing the data for this node.
529
- * @remarks It must conform to the `nodeSchema`.
530
- */
531
- export function getOrCreateMapTreeNode(
532
- context: UnhydratedContext,
533
- nodeSchema: FlexTreeNodeSchema,
534
- mapTree: ExclusiveMapTree,
535
- ): EagerMapTreeNode {
536
- return nodeCache.get(mapTree) ?? createNode(context, nodeSchema, mapTree, undefined);
537
- }
538
-
539
- /** Helper for creating a `MapTreeNode` given the parent field (e.g. when "walking down") */
528
+ /** Helper for creating a `UnhydratedFlexTreeNode` given the parent field (e.g. when "walking down") */
540
529
  function getOrCreateChild(
541
- context: UnhydratedContext,
530
+ context: Context,
542
531
  mapTree: ExclusiveMapTree,
543
- allowedTypes: FlexAllowedTypes,
544
532
  parent: LocationInField | undefined,
545
- ): EagerMapTreeNode {
533
+ ): UnhydratedFlexTreeNode {
546
534
  const cached = nodeCache.get(mapTree);
547
535
  if (cached !== undefined) {
548
536
  return cached;
549
537
  }
550
538
 
551
- assert(isReadonlyArray(allowedTypes), 0xa25 /* invalid types */);
552
- const nodeSchema =
553
- allowedTypes
554
- .map((t) => (isLazy(t) ? t() : t))
555
- .find((t): t is FlexTreeNodeSchema => {
556
- return t.name === mapTree.type;
557
- }) ?? fail("Unsupported node schema");
558
-
559
- return createNode(context, nodeSchema, mapTree, parent);
560
- }
561
-
562
- /** Always constructs a new node, therefore may not be called twice for the same `MapTree`. */
563
- function createNode(
564
- context: UnhydratedContext,
565
- nodeSchema: FlexTreeNodeSchema,
566
- mapTree: ExclusiveMapTree,
567
- parentField: LocationInField | undefined,
568
- ): EagerMapTreeNode {
569
- return new EagerMapTreeNode(context, nodeSchema, mapTree, parentField);
539
+ return new UnhydratedFlexTreeNode(context, mapTree, parent);
570
540
  }
571
541
 
572
542
  /** Creates a field with the given attributes, or returns a cached field if there is one */
573
543
  function getOrCreateField(
574
- parent: EagerMapTreeNode,
544
+ parent: UnhydratedFlexTreeNode,
575
545
  key: FieldKey,
576
- schema: FlexFieldSchema,
577
- ): EagerMapTreeField {
546
+ schema: FieldKindIdentifier,
547
+ onEdit?: () => void,
548
+ ): UnhydratedFlexTreeField {
578
549
  const cached = getFieldKeyCache(parent).get(key);
579
550
  if (cached !== undefined) {
580
551
  return cached;
581
552
  }
582
553
 
583
554
  if (
584
- schema.kind.identifier === FieldKinds.required.identifier ||
585
- schema.kind.identifier === FieldKinds.identifier.identifier
555
+ schema === FieldKinds.required.identifier ||
556
+ schema === FieldKinds.identifier.identifier
586
557
  ) {
587
- return new EagerMapTreeRequiredField(parent.context, schema, key, parent);
558
+ return new EagerMapTreeRequiredField(parent.simpleContext, schema, key, parent, onEdit);
588
559
  }
589
560
 
590
- if (schema.kind.identifier === FieldKinds.optional.identifier) {
591
- return new EagerMapTreeOptionalField(parent.context, schema, key, parent);
561
+ if (schema === FieldKinds.optional.identifier) {
562
+ return new EagerMapTreeOptionalField(parent.simpleContext, schema, key, parent, onEdit);
592
563
  }
593
564
 
594
- if (schema.kind.identifier === FieldKinds.sequence.identifier) {
595
- return new EagerMapTreeSequenceField(parent.context, schema, key, parent);
596
- }
597
-
598
- return new EagerMapTreeField(parent.context, schema, key, parent);
599
- }
600
-
601
- /** Unboxes leaf nodes to their values */
602
- function unboxed(
603
- schema: FlexFieldSchema,
604
- mapTree: ExclusiveMapTree,
605
- parent: LocationInField,
606
- ): FlexTreeUnknownUnboxed {
607
- const value = mapTree.value;
608
- if (value !== undefined) {
609
- return value;
565
+ if (schema === FieldKinds.sequence.identifier) {
566
+ return new UnhydratedTreeSequenceField(parent.simpleContext, schema, key, parent, onEdit);
610
567
  }
611
568
 
612
- return getOrCreateChild(parent.parent.context, mapTree, schema.allowedTypes, parent);
569
+ return new UnhydratedFlexTreeField(parent.simpleContext, schema, key, parent, onEdit);
613
570
  }
614
571
 
615
572
  // #endregion Caching and unboxing utilities