@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
@@ -98,9 +98,12 @@ export function getExplicitStoredKey(fieldSchema: ImplicitFieldSchema): string |
98
98
  /**
99
99
  * Additional information to provide to a {@link FieldSchema}.
100
100
  *
101
+ * @typeParam TCustomMetadata - Custom metadata properties to associate with the field.
102
+ * See {@link FieldSchemaMetadata.custom}.
103
+ *
101
104
  * @public
102
105
  */
103
- export interface FieldProps {
106
+ export interface FieldProps<TCustomMetadata = unknown> {
104
107
  /**
105
108
  * The unique identifier of a field, used in the persisted form of the tree.
106
109
  *
@@ -152,12 +155,19 @@ export interface FieldProps {
152
155
  * @defaultValue If not specified, the key that is persisted is the property key that was specified in the schema.
153
156
  */
154
157
  readonly key?: string;
158
+
155
159
  /**
156
160
  * A default provider used for fields which were not provided any values.
157
161
  * @privateRemarks
158
162
  * We are using an erased type here, as we want to expose this API but `InsertableContent` and `NodeKeyManager` are not public.
159
163
  */
160
164
  readonly defaultProvider?: DefaultProvider;
165
+
166
+ /**
167
+ * Optional metadata to associate with the field.
168
+ * @remarks Note: this metadata is not persisted in the document.
169
+ */
170
+ readonly metadata?: FieldSchemaMetadata<TCustomMetadata>;
161
171
  }
162
172
 
163
173
  /**
@@ -199,17 +209,44 @@ export function getDefaultProvider(input: FieldProvider): DefaultProvider {
199
209
  return input as unknown as DefaultProvider;
200
210
  }
201
211
 
212
+ /**
213
+ * Metadata associated with a {@link FieldSchema}.
214
+ *
215
+ * @remarks Specified via {@link FieldProps.metadata}.
216
+ *
217
+ * @sealed
218
+ * @public
219
+ */
220
+ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
221
+ /**
222
+ * User-defined metadata.
223
+ */
224
+ readonly custom?: TCustomMetadata;
225
+
226
+ /**
227
+ * The description of the field.
228
+ *
229
+ * @remarks
230
+ *
231
+ * If provided, will be used by the system in scenarios where a description of the field is useful.
232
+ * E.g., when converting a field schema to {@link https://json-schema.org/ | JSON Schema}, this description will be
233
+ * used as the `description` field.
234
+ */
235
+ readonly description?: string | undefined;
236
+ }
237
+
202
238
  /**
203
239
  * Package internal construction API.
204
240
  */
205
241
  export let createFieldSchema: <
206
242
  Kind extends FieldKind = FieldKind,
207
243
  Types extends ImplicitAllowedTypes = ImplicitAllowedTypes,
244
+ TCustomMetadata = unknown,
208
245
  >(
209
246
  kind: Kind,
210
247
  allowedTypes: Types,
211
- props?: FieldProps,
212
- ) => FieldSchema<Kind, Types>;
248
+ props?: FieldProps<TCustomMetadata>,
249
+ ) => FieldSchema<Kind, Types, TCustomMetadata>;
213
250
 
214
251
  /**
215
252
  * All policy for a specific field,
@@ -220,20 +257,26 @@ export let createFieldSchema: <
220
257
  * @privateRemarks
221
258
  * Public access to the constructor is removed to prevent creating expressible but unsupported (or not stable) configurations.
222
259
  * {@link createFieldSchema} can be used internally to create instances.
260
+ *
261
+ * @typeParam TCustomMetadata - Custom metadata properties to associate with the field.
262
+ * See {@link FieldSchemaMetadata.custom}.
263
+ *
223
264
  * @sealed @public
224
265
  */
225
266
  export class FieldSchema<
226
267
  out Kind extends FieldKind = FieldKind,
227
268
  out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes,
269
+ out TCustomMetadata = unknown,
228
270
  > {
229
271
  static {
230
272
  createFieldSchema = <
231
273
  Kind2 extends FieldKind = FieldKind,
232
274
  Types2 extends ImplicitAllowedTypes = ImplicitAllowedTypes,
275
+ TCustomMetadata2 = unknown,
233
276
  >(
234
277
  kind: Kind2,
235
278
  allowedTypes: Types2,
236
- props?: FieldProps,
279
+ props?: FieldProps<TCustomMetadata2>,
237
280
  ) => new FieldSchema(kind, allowedTypes, props);
238
281
  }
239
282
  /**
@@ -257,6 +300,13 @@ export class FieldSchema<
257
300
  */
258
301
  public readonly requiresValue: boolean;
259
302
 
303
+ /**
304
+ * {@inheritDoc FieldProps.metadata}
305
+ */
306
+ public get metadata(): FieldSchemaMetadata<TCustomMetadata> | undefined {
307
+ return this.props?.metadata;
308
+ }
309
+
260
310
  private constructor(
261
311
  /**
262
312
  * The {@link https://en.wikipedia.org/wiki/Kind_(type_theory) | kind } of this field.
@@ -270,7 +320,7 @@ export class FieldSchema<
270
320
  /**
271
321
  * Optional properties associated with the field.
272
322
  */
273
- public readonly props?: FieldProps,
323
+ public readonly props?: FieldProps<TCustomMetadata>,
274
324
  ) {
275
325
  this.lazyTypes = new Lazy(() => normalizeAllowedTypes(this.allowedTypes));
276
326
  // TODO: optional fields should (by default) get a default provider that returns undefined, removing the need to special case them here:
@@ -8,131 +8,73 @@ import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
8
 
9
9
  import {
10
10
  EmptyKey,
11
+ LeafNodeStoredSchema,
12
+ MapNodeStoredSchema,
13
+ ObjectNodeStoredSchema,
14
+ type FieldKey,
15
+ type FieldKindIdentifier,
16
+ type TreeFieldStoredSchema,
11
17
  type TreeNodeSchemaIdentifier,
12
18
  type TreeNodeStoredSchema,
13
19
  type TreeStoredSchema,
20
+ type TreeTypeSet,
14
21
  } from "../core/index.js";
15
- import {
16
- FieldKinds,
17
- type FlexAllowedTypes,
18
- type FlexFieldKind,
19
- FlexFieldSchema,
20
- FlexMapNodeSchema,
21
- FlexObjectNodeSchema,
22
- type FlexTreeNodeSchema,
23
- type FlexTreeSchema,
24
- TreeNodeSchemaBase,
25
- defaultSchemaPolicy,
26
- intoStoredSchemaCollection,
27
- schemaIsLeaf,
28
- } from "../feature-libraries/index.js";
22
+ import { FieldKinds, type FlexFieldKind } from "../feature-libraries/index.js";
29
23
  // TODO: once flex schema is gone, this code can move into simple-tree
30
24
  // eslint-disable-next-line import/no-internal-modules
31
25
  import { normalizeFlexListEager } from "../feature-libraries/typed-schema/index.js";
32
- import { brand, fail, isReadonlyArray, mapIterable } from "../util/index.js";
33
- import {
34
- cachedFlexSchemaFromClassSchema,
35
- setFlexSchemaFromClassSchema,
36
- tryGetSimpleNodeSchema,
37
- NodeKind,
38
- type TreeNodeSchema,
39
- } from "./core/index.js";
26
+ import { brand, fail, isReadonlyArray } from "../util/index.js";
27
+ import { NodeKind, type TreeNodeSchema } from "./core/index.js";
40
28
  import {
41
29
  FieldKind,
42
30
  FieldSchema,
43
31
  type ImplicitAllowedTypes,
44
32
  type ImplicitFieldSchema,
45
- getStoredKey,
46
33
  } from "./schemaTypes.js";
47
-
48
- interface SchemaInfo {
49
- readonly toFlex: () => FlexTreeNodeSchema;
50
- readonly original: TreeNodeSchema;
51
- }
52
-
53
- type SchemaMap = Map<TreeNodeSchemaIdentifier, SchemaInfo>;
34
+ import { walkFieldSchema } from "./walkFieldSchema.js";
35
+ import { LeafNodeSchema } from "./leafNodeSchema.js";
36
+ import { isObjectNodeSchema } from "./objectNodeTypes.js";
54
37
 
55
38
  /**
56
- * Generate a {@link FlexTreeSchema} with `root` as the root field.
57
- *
58
- * This also has the side effect of populating the cached view schema on the class-based schema.
39
+ * Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
59
40
  */
60
- export function toFlexSchema(root: ImplicitFieldSchema): FlexTreeSchema {
61
- const schemaMap: SchemaMap = new Map();
62
- const field = convertField(schemaMap, root);
63
- const nodeSchema = new Map(
64
- mapIterable(schemaMap, ([key, value]) => {
65
- const schema = value.toFlex();
66
- const classSchema = tryGetSimpleNodeSchema(schema);
67
- if (classSchema === undefined) {
68
- assert(schemaIsLeaf(schema), 0x83e /* invalid leaf */);
69
- } else {
70
- assert(
71
- cachedFlexSchemaFromClassSchema(classSchema) === schema,
72
- 0x83f /* mismatched schema */,
41
+ export function toStoredSchema(root: ImplicitFieldSchema): TreeStoredSchema {
42
+ const nodeSchema: Map<TreeNodeSchemaIdentifier, TreeNodeStoredSchema> = new Map();
43
+ walkFieldSchema(root, {
44
+ node(schema) {
45
+ if (nodeSchema.has(brand(schema.identifier))) {
46
+ // Use JSON.stringify to quote and escape identifier string.
47
+ throw new UsageError(
48
+ `Multiple schema encountered with the identifier ${JSON.stringify(
49
+ schema.identifier,
50
+ )}. Remove or rename them to avoid the collision.`,
73
51
  );
74
52
  }
75
- return [key, schema];
76
- }),
77
- );
53
+ nodeSchema.set(brand(schema.identifier), getStoredSchema(schema));
54
+ },
55
+ });
78
56
 
79
- const typed: FlexTreeSchema = {
80
- nodeSchema,
81
- adapters: {},
82
- rootFieldSchema: field,
83
- policy: defaultSchemaPolicy,
84
- };
85
- return typed;
86
- }
87
-
88
- /**
89
- * Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
90
- */
91
- export function toStoredSchema(root: ImplicitFieldSchema): TreeStoredSchema {
92
- const flex = toFlexSchema(root);
93
57
  return {
94
- rootFieldSchema: flex.rootFieldSchema.stored,
95
- ...intoStoredSchemaCollection(flex),
58
+ nodeSchema,
59
+ rootFieldSchema: convertField(root),
96
60
  };
97
61
  }
98
62
 
99
- /**
100
- * Return a flex schema for the provided class schema.
101
- *
102
- * This also has the side effect of populating the cached view schema on the class based schema.
103
- */
104
- export function getFlexSchema(root: TreeNodeSchema): FlexTreeNodeSchema {
105
- const treeSchema = toFlexSchema(root);
106
- return treeSchema.rootFieldSchema.monomorphicChildType ?? fail("root should be monomorphic");
107
- }
108
-
109
- /**
110
- * Return a stored schema for the provided class schema.
111
- *
112
- * This also has the side effect of populating the cached view schema on the class based schema.
113
- */
114
- export function getStoredSchema(root: TreeNodeSchema): TreeNodeStoredSchema {
115
- return getFlexSchema(root).stored;
116
- }
117
-
118
63
  /**
119
64
  * Normalizes an {@link ImplicitFieldSchema} into a {@link TreeFieldSchema}.
120
65
  */
121
- export function convertField(
122
- schemaMap: SchemaMap,
123
- schema: ImplicitFieldSchema,
124
- ): FlexFieldSchema {
125
- let kind: FlexFieldKind;
126
- let types: ImplicitAllowedTypes;
66
+ export function convertField(schema: ImplicitFieldSchema): TreeFieldStoredSchema {
67
+ let kind: FieldKindIdentifier;
68
+ let allowedTypes: ImplicitAllowedTypes;
127
69
  if (schema instanceof FieldSchema) {
128
- kind = convertFieldKind.get(schema.kind) ?? fail("Invalid field kind");
129
- types = schema.allowedTypes;
70
+ kind = convertFieldKind.get(schema.kind)?.identifier ?? fail("Invalid field kind");
71
+ allowedTypes = schema.allowedTypes;
130
72
  } else {
131
- kind = FieldKinds.required;
132
- types = schema;
73
+ kind = FieldKinds.required.identifier;
74
+ allowedTypes = schema;
133
75
  }
134
- const allowedTypes = convertAllowedTypes(schemaMap, types);
135
- return FlexFieldSchema.create(kind, allowedTypes);
76
+ const types = convertAllowedTypes(allowedTypes);
77
+ return { kind, types };
136
78
  }
137
79
 
138
80
  const convertFieldKind = new Map<FieldKind, FlexFieldKind>([
@@ -142,123 +84,48 @@ const convertFieldKind = new Map<FieldKind, FlexFieldKind>([
142
84
  ]);
143
85
 
144
86
  /**
145
- * Normalizes an {@link ImplicitAllowedTypes} into an {@link AllowedTypes}.
87
+ * Normalizes an {@link ImplicitAllowedTypes} into an {@link TreeTypeSet}.
146
88
  */
147
- export function convertAllowedTypes(
148
- schemaMap: SchemaMap,
149
- schema: ImplicitAllowedTypes,
150
- ): FlexAllowedTypes {
89
+ export function convertAllowedTypes(schema: ImplicitAllowedTypes): TreeTypeSet {
151
90
  if (isReadonlyArray(schema)) {
152
- return normalizeFlexListEager(schema).map((item) => convertNodeSchema(schemaMap, item));
91
+ return new Set(normalizeFlexListEager(schema).map((item) => brand(item.identifier)));
153
92
  }
154
- return [convertNodeSchema(schemaMap, schema)];
93
+ return new Set([brand(schema.identifier)]);
155
94
  }
156
95
 
157
- const builder = { name: "simple schema" };
158
-
159
96
  /**
160
- * Converts a {@link TreeNodeSchema} into a {@link FlexTreeNodeSchema}.
161
- * Ensures all types reachable from `schema` are included in `schemaMap`.
162
- *
163
- * Return value (and entries in map) are lazy to allow recursive types to work.
164
- * This laziness does NOT extend to adding entries to `schemaMap`:
165
- * all referenced types are added to it before this function returns.
97
+ * Converts a {@link TreeNodeSchema} into a {@link TreeNodeStoredSchema}.
166
98
  */
167
- export function convertNodeSchema(
168
- schemaMap: SchemaMap,
169
- schema: TreeNodeSchema,
170
- ): () => FlexTreeNodeSchema {
171
- const fromMap = schemaMap.get(brand(schema.identifier));
172
- if (fromMap !== undefined) {
173
- if (fromMap.original !== schema) {
174
- // Use JSON.stringify to quote and escape identifier string.
175
- throw new UsageError(
176
- `Multiple schema encountered with the identifier ${JSON.stringify(
177
- schema.identifier,
178
- )}. Remove or rename them to avoid the collision.`,
179
- );
99
+ export function getStoredSchema(schema: TreeNodeSchema): TreeNodeStoredSchema {
100
+ const kind = schema.kind;
101
+ switch (kind) {
102
+ case NodeKind.Leaf: {
103
+ assert(schema instanceof LeafNodeSchema, "invalid kind");
104
+ return new LeafNodeStoredSchema(schema.info);
180
105
  }
181
- return fromMap.toFlex;
182
- }
183
-
184
- const toFlex = (): FlexTreeNodeSchema => {
185
- let out: FlexTreeNodeSchema;
186
- const kind = schema.kind;
187
- switch (kind) {
188
- case NodeKind.Leaf: {
189
- const cached =
190
- cachedFlexSchemaFromClassSchema(schema) ?? fail("leaf schema should be pre-cached");
191
- assert(schemaIsLeaf(cached), 0x840 /* expected leaf */);
192
- return cached;
193
- }
194
- case NodeKind.Map: {
195
- const fieldInfo = schema.info as ImplicitAllowedTypes;
196
- const field = FlexFieldSchema.create(
197
- FieldKinds.optional,
198
- convertAllowedTypes(schemaMap, fieldInfo),
199
- );
200
- // Lookup of cached schema is done here instead of before since walking the schema recursively to populate schemaMap is still required.
201
- const cached = cachedFlexSchemaFromClassSchema(schema);
202
- out =
203
- cached ??
204
- FlexMapNodeSchema.create(
205
- builder,
206
- brand<TreeNodeSchemaIdentifier>(schema.identifier),
207
- field,
208
- );
209
- break;
210
- }
211
- case NodeKind.Array: {
212
- const fieldInfo = schema.info as ImplicitAllowedTypes;
213
- const field = FlexFieldSchema.create(
214
- FieldKinds.sequence,
215
- convertAllowedTypes(schemaMap, fieldInfo),
216
- );
217
- const cached = cachedFlexSchemaFromClassSchema(schema);
218
- out =
219
- cached ??
220
- FlexObjectNodeSchema.create(builder, brand(schema.identifier), {
221
- [EmptyKey]: field,
222
- });
223
- break;
224
- }
225
- case NodeKind.Object: {
226
- const info = schema.info as Record<string, ImplicitFieldSchema>;
227
- const fields: Record<string, FlexFieldSchema> = Object.create(null);
228
- for (const [propertyKey, implicitFieldSchema] of Object.entries(info)) {
229
- // If a `stored key` was provided, use it as the key in the flex schema.
230
- // Otherwise, use the property key.
231
- const flexKey = getStoredKey(propertyKey, implicitFieldSchema);
232
-
233
- // This code has to be careful to avoid assigning to __proto__ or similar built-in fields.
234
- Object.defineProperty(fields, flexKey, {
235
- enumerable: true,
236
- configurable: false,
237
- writable: false,
238
- value: convertField(schemaMap, implicitFieldSchema),
239
- });
240
- }
241
- const cached = cachedFlexSchemaFromClassSchema(schema);
242
- out = cached ?? FlexObjectNodeSchema.create(builder, brand(schema.identifier), fields);
243
- break;
244
- }
245
- default:
246
- unreachableCase(kind);
106
+ case NodeKind.Map: {
107
+ const fieldInfo = schema.info as ImplicitAllowedTypes;
108
+ const types = convertAllowedTypes(fieldInfo);
109
+ return new MapNodeStoredSchema({ kind: FieldKinds.optional.identifier, types });
247
110
  }
248
- assert(out instanceof TreeNodeSchemaBase, 0x841 /* invalid schema produced */);
249
- {
250
- const cached = cachedFlexSchemaFromClassSchema(schema);
251
- if (cached !== undefined) {
252
- assert(
253
- cachedFlexSchemaFromClassSchema(schema) === out,
254
- 0x842 /* incorrect flexSchemaSymbol */,
255
- );
256
- } else {
257
- setFlexSchemaFromClassSchema(schema, out);
111
+ case NodeKind.Array: {
112
+ const fieldInfo = schema.info as ImplicitAllowedTypes;
113
+ const field = {
114
+ kind: FieldKinds.sequence.identifier,
115
+ types: convertAllowedTypes(fieldInfo),
116
+ };
117
+ const fields = new Map([[EmptyKey, field]]);
118
+ return new ObjectNodeStoredSchema(fields);
119
+ }
120
+ case NodeKind.Object: {
121
+ assert(isObjectNodeSchema(schema), "invalid kind");
122
+ const fields: Map<FieldKey, TreeFieldStoredSchema> = new Map();
123
+ for (const field of schema.flexKeyMap.values()) {
124
+ fields.set(field.storedKey, convertField(field.schema));
258
125
  }
126
+ return new ObjectNodeStoredSchema(fields);
259
127
  }
260
- return out;
261
- };
262
- schemaMap.set(brand(schema.identifier), { original: schema, toFlex });
263
- return toFlex;
128
+ default:
129
+ unreachableCase(kind);
130
+ }
264
131
  }
@@ -20,7 +20,6 @@ import {
20
20
  isTreeValue,
21
21
  valueSchemaAllows,
22
22
  type NodeKeyManager,
23
- isMapTreeNode,
24
23
  } from "../feature-libraries/index.js";
25
24
  import { brand, fail, isReadonlyArray, find } from "../util/index.js";
26
25
 
@@ -39,13 +38,14 @@ import {
39
38
  } from "./schemaTypes.js";
40
39
  import {
41
40
  getKernel,
42
- getSimpleNodeSchemaFromNode,
41
+ getSimpleNodeSchemaFromInnerNode,
43
42
  isTreeNode,
44
43
  NodeKind,
45
44
  type InnerNode,
46
45
  type TreeNode,
47
46
  type TreeNodeSchema,
48
47
  type Unhydrated,
48
+ UnhydratedFlexTreeNode,
49
49
  } from "./core/index.js";
50
50
  import { SchemaValidationErrors, isNodeInSchema } from "../feature-libraries/index.js";
51
51
  import { isObjectNodeSchema } from "./objectNodeTypes.js";
@@ -161,8 +161,8 @@ function nodeDataToMapTree(
161
161
  // They already have the mapTree, so there is no need to recompute it.
162
162
  const innerNode = tryGetInnerNode(data);
163
163
  if (innerNode !== undefined) {
164
- if (isMapTreeNode(innerNode)) {
165
- if (!allowedTypes.has(getSimpleNodeSchemaFromNode(innerNode))) {
164
+ if (innerNode instanceof UnhydratedFlexTreeNode) {
165
+ if (!allowedTypes.has(getSimpleNodeSchemaFromInnerNode(innerNode))) {
166
166
  throw new UsageError("Invalid schema for this context.");
167
167
  }
168
168
  // TODO: mapTreeFromNodeData modifies the trees it gets to add defaults.
@@ -170,7 +170,7 @@ function nodeDataToMapTree(
170
170
  // This is unnecessary and inefficient, but should be a no-op if all calls provide the same context (which they might not).
171
171
  // A cleaner design (avoiding this cast) might be to apply defaults eagerly if they don't need a context, and lazily (when hydrating) if they do.
172
172
  // This could avoid having to mutate the map tree to apply defaults, removing the need for this cast.
173
- return innerNode.mapTree as ExclusiveMapTree;
173
+ return innerNode.mapTree;
174
174
  } else {
175
175
  // The node is already hydrated, meaning that it already got inserted into the tree previously
176
176
  throw new UsageError("A node may not be inserted into the tree more than once");
@@ -8,7 +8,6 @@ import { assert } from "@fluidframework/core-utils/internal";
8
8
  import {
9
9
  type TreeNodeSchema,
10
10
  NodeKind,
11
- tryGetSimpleNodeSchema,
12
11
  isTreeNode,
13
12
  TreeNodeKernel,
14
13
  privateToken,
@@ -16,17 +15,14 @@ import {
16
15
  type InternalTreeNode,
17
16
  typeSchemaSymbol,
18
17
  type InnerNode,
18
+ type Context,
19
+ type UnhydratedFlexTreeNode,
19
20
  } from "./core/index.js";
20
- import {
21
- type FlexTreeNode,
22
- type MapTreeNode,
23
- isFlexTreeNode,
24
- markEager,
25
- } from "../feature-libraries/index.js";
21
+ import { type FlexTreeNode, isFlexTreeNode, markEager } from "../feature-libraries/index.js";
26
22
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
27
23
  import { fail } from "../util/index.js";
28
24
 
29
- import { getFlexSchema } from "./toFlexSchema.js";
25
+ import { getSimpleNodeSchemaFromInnerNode } from "./core/index.js";
30
26
 
31
27
  /**
32
28
  * Class which all {@link TreeNode}s must extend.
@@ -60,7 +56,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
60
56
  this: typeof TreeNodeValid<T>,
61
57
  instance: TreeNodeValid<T>,
62
58
  input: T,
63
- ): MapTreeNode {
59
+ ): UnhydratedFlexTreeNode {
64
60
  return fail("Schema must override buildRawNode");
65
61
  }
66
62
 
@@ -68,7 +64,9 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
68
64
  * Schema classes can override to provide a callback that is called once when the first node is constructed.
69
65
  * This is a good place to perform extra validation and cache schema derived data needed for the implementation of the node.
70
66
  */
71
- protected static oneTimeSetup<T>(this: typeof TreeNodeValid<T>): void {}
67
+ protected static oneTimeSetup<T>(this: typeof TreeNodeValid<T>): Context {
68
+ fail("Missing oneTimeSetup");
69
+ }
72
70
 
73
71
  /**
74
72
  * The most derived constructor (the one invoked with the `new` operator, not a parent class constructor invoked with as `super`) used to construct an instance of this type.
@@ -110,7 +108,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
110
108
  schemaBase = Reflect.getPrototypeOf(schemaBase) as typeof TreeNodeValid;
111
109
  }
112
110
  assert(schemaBase.constructorCached === undefined, 0x962 /* overwriting wrong cache */);
113
- schemaBase.constructorCached = { constructor: this, oneTimeInitialized: false };
111
+ schemaBase.constructorCached = { constructor: this, oneTimeInitialized: undefined };
114
112
  assert(
115
113
  this.constructorCached === schemaBase.constructorCached,
116
114
  0x9b5 /* Inheritance should work */,
@@ -129,18 +127,26 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
129
127
  );
130
128
  }
131
129
 
130
+ /**
131
+ * Node creation function for implementing the TreeNodeSchemaNonClass half of TreeNodeSchemaBoth.
132
+ * @remarks
133
+ * When used as TreeNodeSchemaNonClass and subclassed,
134
+ * does not actually have the correct compile time type for the return value due to TypeScript limitations.
135
+ * This is why this is not exposed as part of TreeNodeSchemaCLass where subclassing is allowed.
136
+ */
137
+ public static create<TInput, TOut, TThis extends new (args: TInput) => TOut>(
138
+ this: TThis,
139
+ input: TInput,
140
+ ): TOut {
141
+ return new this(input);
142
+ }
143
+
132
144
  public constructor(input: TInput | InternalTreeNode) {
133
145
  super(privateToken);
134
146
  const schema = this.constructor as typeof TreeNodeValid & TreeNodeSchema;
135
147
  const cache = schema.markMostDerived();
136
- if (!cache.oneTimeInitialized) {
137
- const flexSchema = getFlexSchema(schema);
138
- assert(
139
- tryGetSimpleNodeSchema(flexSchema) === schema,
140
- 0x961 /* Schema class not properly configured */,
141
- );
142
- schema.oneTimeSetup();
143
- cache.oneTimeInitialized = true;
148
+ if (cache.oneTimeInitialized === undefined) {
149
+ cache.oneTimeInitialized = schema.oneTimeSetup();
144
150
  }
145
151
 
146
152
  if (isTreeNode(input)) {
@@ -152,7 +158,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
152
158
 
153
159
  const node: InnerNode = isFlexTreeNode(input) ? input : schema.buildRawNode(this, input);
154
160
  assert(
155
- tryGetSimpleNodeSchema(node.flexSchema) === schema,
161
+ getSimpleNodeSchemaFromInnerNode(node) === schema,
156
162
  0x83b /* building node with wrong schema */,
157
163
  );
158
164
 
@@ -160,7 +166,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
160
166
  // The TreeNodeKernel associates itself the TreeNode (result here, not node) so it can be looked up later via getKernel.
161
167
  // If desired this could be put in a non-enumerable symbol property for lookup instead, but that gets messy going through proxies,
162
168
  // so just relying on the WeakMap seems like the cleanest approach.
163
- new TreeNodeKernel(result, schema, node);
169
+ new TreeNodeKernel(result, schema, node, cache.oneTimeInitialized);
164
170
 
165
171
  return result;
166
172
  }
@@ -181,7 +187,7 @@ markEager(TreeNodeValid);
181
187
  */
182
188
  export interface MostDerivedData {
183
189
  readonly constructor: typeof TreeNodeValid & TreeNodeSchema;
184
- oneTimeInitialized: boolean;
190
+ oneTimeInitialized?: Context;
185
191
  }
186
192
 
187
193
  // #region NodeJS custom inspect for TreeNodes.
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import type { FlexListToUnion, Unenforced } from "../feature-libraries/index.js";
7
- import type { RestrictiveReadonlyRecord, _InlineTrick } from "../util/index.js";
7
+ import type { RestrictiveStringRecord, _InlineTrick } from "../util/index.js";
8
8
 
9
9
  import type {
10
10
  AllowedTypes,
@@ -44,7 +44,7 @@ import type { TreeArrayNodeBase, TreeArrayNode } from "./arrayNode.js";
44
44
  * @system @public
45
45
  */
46
46
  export type ObjectFromSchemaRecordUnsafe<
47
- T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>,
47
+ T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
48
48
  > = {
49
49
  -readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
50
50
  };
@@ -56,7 +56,7 @@ export type ObjectFromSchemaRecordUnsafe<
56
56
  * @system @public
57
57
  */
58
58
  export type TreeObjectNodeUnsafe<
59
- T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>,
59
+ T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
60
60
  TypeName extends string = string,
61
61
  > = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
62
62
 
@@ -230,7 +230,7 @@ export type FieldHasDefaultUnsafe<T extends Unenforced<ImplicitFieldSchema>> =
230
230
  * @system @public
231
231
  */
232
232
  export type InsertableObjectFromSchemaRecordUnsafe<
233
- T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>,
233
+ T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>,
234
234
  > = {
235
235
  // Field might not have a default, so make it required:
236
236
  readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false
@@ -0,0 +1,19 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { type TreeNodeSchema, walkAllowedTypes, type SchemaVisitor } from "./core/index.js";
7
+
8
+ import { type ImplicitFieldSchema, normalizeFieldSchema } from "./schemaTypes.js";
9
+
10
+ /**
11
+ * Traverses all {@link TreeNodeSchema} schema reachable from `schema`, applying the visitor pattern.
12
+ */
13
+ export function walkFieldSchema(
14
+ schema: ImplicitFieldSchema,
15
+ visitor: SchemaVisitor,
16
+ visitedSet: Set<TreeNodeSchema> = new Set(),
17
+ ): void {
18
+ walkAllowedTypes(normalizeFieldSchema(schema).allowedTypeSet, visitor, visitedSet);
19
+ }