@fluidframework/tree 2.4.0-294316 → 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 (606) hide show
  1. package/api-report/tree.alpha.api.md +58 -28
  2. package/api-report/tree.beta.api.md +38 -27
  3. package/api-report/tree.legacy.alpha.api.md +38 -27
  4. package/api-report/tree.legacy.public.api.md +38 -27
  5. package/api-report/tree.public.api.md +38 -27
  6. package/dist/alpha.d.ts +6 -0
  7. package/dist/beta.d.ts +3 -0
  8. package/dist/core/schema-stored/schema.d.ts +7 -0
  9. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  10. package/dist/core/schema-stored/schema.js +9 -0
  11. package/dist/core/schema-stored/schema.js.map +1 -1
  12. package/dist/core/tree/anchorSet.d.ts +1 -2
  13. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  14. package/dist/core/tree/anchorSet.js +2 -2
  15. package/dist/core/tree/anchorSet.js.map +1 -1
  16. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  17. package/dist/core/tree/detachedFieldIndex.js +13 -2
  18. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  19. package/dist/core/tree/detachedFieldIndexTypes.d.ts +1 -1
  20. package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
  21. package/dist/feature-libraries/editableTreeBinder.d.ts +3 -230
  22. package/dist/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  23. package/dist/feature-libraries/editableTreeBinder.js +1 -539
  24. package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
  25. package/dist/feature-libraries/flex-tree/context.d.ts +7 -14
  26. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  27. package/dist/feature-libraries/flex-tree/context.js +3 -3
  28. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  29. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
  30. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  31. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  32. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +2 -3
  33. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  34. package/dist/feature-libraries/flex-tree/lazyEntity.js +1 -2
  35. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  36. package/dist/feature-libraries/flex-tree/lazyField.d.ts +10 -15
  37. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  38. package/dist/feature-libraries/flex-tree/lazyField.js +18 -20
  39. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  40. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
  41. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  42. package/dist/feature-libraries/flex-tree/lazyNode.js +13 -23
  43. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  44. package/dist/feature-libraries/flex-tree/utilities.js +1 -1
  45. package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
  46. package/dist/feature-libraries/index.d.ts +4 -7
  47. package/dist/feature-libraries/index.d.ts.map +1 -1
  48. package/dist/feature-libraries/index.js +5 -31
  49. package/dist/feature-libraries/index.js.map +1 -1
  50. package/dist/feature-libraries/sequence-field/formatV1.d.ts +18 -18
  51. package/dist/feature-libraries/sequence-field/formatV2.d.ts +18 -18
  52. package/dist/feature-libraries/sequence-field/formatV3.d.ts +27 -27
  53. package/dist/feature-libraries/typed-schema/flexList.d.ts +1 -46
  54. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  55. package/dist/feature-libraries/typed-schema/flexList.js +1 -13
  56. package/dist/feature-libraries/typed-schema/flexList.js.map +1 -1
  57. package/dist/feature-libraries/typed-schema/index.d.ts +2 -4
  58. package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
  59. package/dist/feature-libraries/typed-schema/index.js +1 -19
  60. package/dist/feature-libraries/typed-schema/index.js.map +1 -1
  61. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
  62. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  63. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -266
  64. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  65. package/dist/index.d.ts +3 -3
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +2 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/internalTypes.d.ts +1 -1
  70. package/dist/internalTypes.d.ts.map +1 -1
  71. package/dist/internalTypes.js.map +1 -1
  72. package/dist/legacy.d.ts +3 -0
  73. package/dist/packageVersion.d.ts +1 -1
  74. package/dist/packageVersion.js +1 -1
  75. package/dist/packageVersion.js.map +1 -1
  76. package/dist/public.d.ts +3 -0
  77. package/dist/shared-tree/checkoutFlexTreeView.d.ts +3 -3
  78. package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  79. package/dist/shared-tree/checkoutFlexTreeView.js +1 -1
  80. package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -1
  81. package/dist/shared-tree/index.d.ts +3 -3
  82. package/dist/shared-tree/index.d.ts.map +1 -1
  83. package/dist/shared-tree/index.js +2 -3
  84. package/dist/shared-tree/index.js.map +1 -1
  85. package/dist/shared-tree/schematizeTree.d.ts +1 -40
  86. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  87. package/dist/shared-tree/schematizeTree.js +2 -11
  88. package/dist/shared-tree/schematizeTree.js.map +1 -1
  89. package/dist/shared-tree/schematizingTreeView.d.ts +8 -7
  90. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  91. package/dist/shared-tree/schematizingTreeView.js +16 -8
  92. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  93. package/dist/shared-tree/sharedTree.d.ts +19 -2
  94. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  95. package/dist/shared-tree/sharedTree.js +10 -2
  96. package/dist/shared-tree/sharedTree.js.map +1 -1
  97. package/dist/shared-tree/treeCheckout.d.ts +71 -41
  98. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  99. package/dist/shared-tree/treeCheckout.js +116 -84
  100. package/dist/shared-tree/treeCheckout.js.map +1 -1
  101. package/dist/shared-tree-core/branch.d.ts +8 -11
  102. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  103. package/dist/shared-tree-core/branch.js +12 -15
  104. package/dist/shared-tree-core/branch.js.map +1 -1
  105. package/dist/simple-tree/api/create.d.ts +1 -1
  106. package/dist/simple-tree/api/create.d.ts.map +1 -1
  107. package/dist/simple-tree/api/create.js +11 -13
  108. package/dist/simple-tree/api/create.js.map +1 -1
  109. package/dist/simple-tree/api/getJsonSchema.d.ts +3 -3
  110. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  111. package/dist/simple-tree/api/getJsonSchema.js +1 -1
  112. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  113. package/dist/simple-tree/api/getSimpleSchema.d.ts +2 -2
  114. package/dist/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
  115. package/dist/simple-tree/api/getSimpleSchema.js.map +1 -1
  116. package/dist/simple-tree/api/index.d.ts +2 -1
  117. package/dist/simple-tree/api/index.d.ts.map +1 -1
  118. package/dist/simple-tree/api/index.js +3 -1
  119. package/dist/simple-tree/api/index.js.map +1 -1
  120. package/dist/simple-tree/api/schemaFactory.d.ts +6 -6
  121. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  122. package/dist/simple-tree/api/schemaFactory.js +15 -2
  123. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  124. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
  125. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  126. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  127. package/dist/simple-tree/api/simpleSchema.d.ts +14 -10
  128. package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
  129. package/dist/simple-tree/api/simpleSchema.js.map +1 -1
  130. package/dist/simple-tree/api/tree.d.ts +12 -6
  131. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  132. package/dist/simple-tree/api/tree.js +4 -4
  133. package/dist/simple-tree/api/tree.js.map +1 -1
  134. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  135. package/dist/simple-tree/api/treeNodeApi.js +8 -6
  136. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  137. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  138. package/dist/simple-tree/api/verboseTree.js +6 -10
  139. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  140. package/{lib/feature-libraries/typed-schema → dist/simple-tree/api}/view.d.ts +4 -11
  141. package/dist/simple-tree/api/view.d.ts.map +1 -0
  142. package/dist/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
  143. package/dist/simple-tree/api/view.js.map +1 -0
  144. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
  145. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  146. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +7 -1
  147. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  148. package/dist/simple-tree/arrayNode.d.ts +147 -14
  149. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  150. package/dist/simple-tree/arrayNode.js +32 -20
  151. package/dist/simple-tree/arrayNode.js.map +1 -1
  152. package/dist/simple-tree/core/context.d.ts +55 -0
  153. package/dist/simple-tree/core/context.d.ts.map +1 -0
  154. package/dist/simple-tree/core/context.js +60 -0
  155. package/dist/simple-tree/core/context.js.map +1 -0
  156. package/dist/simple-tree/core/getOrCreateNode.d.ts +15 -0
  157. package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
  158. package/dist/simple-tree/core/getOrCreateNode.js +36 -0
  159. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -0
  160. package/dist/simple-tree/core/index.d.ts +7 -3
  161. package/dist/simple-tree/core/index.d.ts.map +1 -1
  162. package/dist/simple-tree/core/index.js +16 -7
  163. package/dist/simple-tree/core/index.js.map +1 -1
  164. package/dist/simple-tree/core/schemaCaching.d.ts +5 -13
  165. package/dist/simple-tree/core/schemaCaching.d.ts.map +1 -1
  166. package/dist/simple-tree/core/schemaCaching.js +16 -45
  167. package/dist/simple-tree/core/schemaCaching.js.map +1 -1
  168. package/dist/simple-tree/core/treeNodeKernel.d.ts +29 -7
  169. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  170. package/dist/simple-tree/core/treeNodeKernel.js +94 -58
  171. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  172. package/dist/simple-tree/core/treeNodeSchema.d.ts +24 -0
  173. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  174. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  175. package/dist/simple-tree/core/types.d.ts +0 -5
  176. package/dist/simple-tree/core/types.d.ts.map +1 -1
  177. package/dist/simple-tree/core/types.js.map +1 -1
  178. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
  179. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
  180. package/dist/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +112 -132
  181. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -0
  182. package/dist/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
  183. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -0
  184. package/dist/simple-tree/core/walkSchema.js +34 -0
  185. package/dist/simple-tree/core/walkSchema.js.map +1 -0
  186. package/dist/simple-tree/createContext.d.ts +11 -0
  187. package/dist/simple-tree/createContext.d.ts.map +1 -0
  188. package/dist/simple-tree/createContext.js +25 -0
  189. package/dist/simple-tree/createContext.js.map +1 -0
  190. package/dist/simple-tree/index.d.ts +3 -4
  191. package/dist/simple-tree/index.d.ts.map +1 -1
  192. package/dist/simple-tree/index.js +7 -7
  193. package/dist/simple-tree/index.js.map +1 -1
  194. package/dist/simple-tree/leafNodeSchema.d.ts +1 -0
  195. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  196. package/dist/simple-tree/leafNodeSchema.js +1 -2
  197. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  198. package/dist/simple-tree/mapNode.d.ts +4 -4
  199. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  200. package/dist/simple-tree/mapNode.js +9 -5
  201. package/dist/simple-tree/mapNode.js.map +1 -1
  202. package/dist/simple-tree/objectNode.d.ts +8 -8
  203. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  204. package/dist/simple-tree/objectNode.js +33 -14
  205. package/dist/simple-tree/objectNode.js.map +1 -1
  206. package/dist/simple-tree/objectNodeTypes.d.ts +7 -3
  207. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
  208. package/dist/simple-tree/objectNodeTypes.js.map +1 -1
  209. package/dist/simple-tree/proxies.d.ts +1 -2
  210. package/dist/simple-tree/proxies.d.ts.map +1 -1
  211. package/dist/simple-tree/proxies.js +6 -22
  212. package/dist/simple-tree/proxies.js.map +1 -1
  213. package/dist/simple-tree/schemaTypes.d.ts +2 -2
  214. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  215. package/dist/simple-tree/schemaTypes.js.map +1 -1
  216. package/dist/simple-tree/toFlexSchema.d.ts +6 -36
  217. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  218. package/dist/simple-tree/toFlexSchema.js +58 -142
  219. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  220. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  221. package/dist/simple-tree/toMapTree.js +2 -2
  222. package/dist/simple-tree/toMapTree.js.map +1 -1
  223. package/dist/simple-tree/treeNodeValid.d.ts +13 -5
  224. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  225. package/dist/simple-tree/treeNodeValid.js +19 -10
  226. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  227. package/dist/simple-tree/typesUnsafe.d.ts +4 -4
  228. package/dist/simple-tree/typesUnsafe.d.ts.map +1 -1
  229. package/dist/simple-tree/typesUnsafe.js.map +1 -1
  230. package/dist/simple-tree/walkFieldSchema.d.ts +11 -0
  231. package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -0
  232. package/dist/simple-tree/walkFieldSchema.js +17 -0
  233. package/dist/simple-tree/walkFieldSchema.js.map +1 -0
  234. package/dist/util/index.d.ts +1 -1
  235. package/dist/util/index.d.ts.map +1 -1
  236. package/dist/util/index.js.map +1 -1
  237. package/dist/util/typeUtils.d.ts +14 -45
  238. package/dist/util/typeUtils.d.ts.map +1 -1
  239. package/dist/util/typeUtils.js.map +1 -1
  240. package/lib/alpha.d.ts +6 -0
  241. package/lib/beta.d.ts +3 -0
  242. package/lib/core/schema-stored/schema.d.ts +7 -0
  243. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  244. package/lib/core/schema-stored/schema.js +9 -0
  245. package/lib/core/schema-stored/schema.js.map +1 -1
  246. package/lib/core/tree/anchorSet.d.ts +1 -2
  247. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  248. package/lib/core/tree/anchorSet.js +2 -2
  249. package/lib/core/tree/anchorSet.js.map +1 -1
  250. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  251. package/lib/core/tree/detachedFieldIndex.js +13 -2
  252. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  253. package/lib/core/tree/detachedFieldIndexTypes.d.ts +1 -1
  254. package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
  255. package/lib/feature-libraries/editableTreeBinder.d.ts +3 -230
  256. package/lib/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  257. package/lib/feature-libraries/editableTreeBinder.js +1 -532
  258. package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
  259. package/lib/feature-libraries/flex-tree/context.d.ts +7 -14
  260. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  261. package/lib/feature-libraries/flex-tree/context.js +3 -3
  262. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  263. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
  264. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  265. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  266. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +2 -3
  267. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  268. package/lib/feature-libraries/flex-tree/lazyEntity.js +1 -2
  269. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  270. package/lib/feature-libraries/flex-tree/lazyField.d.ts +10 -15
  271. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  272. package/lib/feature-libraries/flex-tree/lazyField.js +18 -20
  273. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  274. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
  275. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  276. package/lib/feature-libraries/flex-tree/lazyNode.js +13 -23
  277. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  278. package/lib/feature-libraries/flex-tree/utilities.js +1 -1
  279. package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
  280. package/lib/feature-libraries/index.d.ts +4 -7
  281. package/lib/feature-libraries/index.d.ts.map +1 -1
  282. package/lib/feature-libraries/index.js +4 -6
  283. package/lib/feature-libraries/index.js.map +1 -1
  284. package/lib/feature-libraries/sequence-field/formatV1.d.ts +18 -18
  285. package/lib/feature-libraries/sequence-field/formatV2.d.ts +18 -18
  286. package/lib/feature-libraries/sequence-field/formatV3.d.ts +27 -27
  287. package/lib/feature-libraries/typed-schema/flexList.d.ts +1 -46
  288. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  289. package/lib/feature-libraries/typed-schema/flexList.js +0 -11
  290. package/lib/feature-libraries/typed-schema/flexList.js.map +1 -1
  291. package/lib/feature-libraries/typed-schema/index.d.ts +2 -4
  292. package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
  293. package/lib/feature-libraries/typed-schema/index.js +0 -3
  294. package/lib/feature-libraries/typed-schema/index.js.map +1 -1
  295. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
  296. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  297. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +1 -253
  298. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  299. package/lib/index.d.ts +3 -3
  300. package/lib/index.d.ts.map +1 -1
  301. package/lib/index.js +1 -1
  302. package/lib/index.js.map +1 -1
  303. package/lib/internalTypes.d.ts +1 -1
  304. package/lib/internalTypes.d.ts.map +1 -1
  305. package/lib/internalTypes.js.map +1 -1
  306. package/lib/legacy.d.ts +3 -0
  307. package/lib/packageVersion.d.ts +1 -1
  308. package/lib/packageVersion.js +1 -1
  309. package/lib/packageVersion.js.map +1 -1
  310. package/lib/public.d.ts +3 -0
  311. package/lib/shared-tree/checkoutFlexTreeView.d.ts +3 -3
  312. package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  313. package/lib/shared-tree/checkoutFlexTreeView.js +1 -1
  314. package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -1
  315. package/lib/shared-tree/index.d.ts +3 -3
  316. package/lib/shared-tree/index.d.ts.map +1 -1
  317. package/lib/shared-tree/index.js +1 -2
  318. package/lib/shared-tree/index.js.map +1 -1
  319. package/lib/shared-tree/schematizeTree.d.ts +1 -40
  320. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  321. package/lib/shared-tree/schematizeTree.js +1 -9
  322. package/lib/shared-tree/schematizeTree.js.map +1 -1
  323. package/lib/shared-tree/schematizingTreeView.d.ts +8 -7
  324. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  325. package/lib/shared-tree/schematizingTreeView.js +19 -11
  326. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  327. package/lib/shared-tree/sharedTree.d.ts +19 -2
  328. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  329. package/lib/shared-tree/sharedTree.js +10 -3
  330. package/lib/shared-tree/sharedTree.js.map +1 -1
  331. package/lib/shared-tree/treeCheckout.d.ts +71 -41
  332. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  333. package/lib/shared-tree/treeCheckout.js +118 -86
  334. package/lib/shared-tree/treeCheckout.js.map +1 -1
  335. package/lib/shared-tree-core/branch.d.ts +8 -11
  336. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  337. package/lib/shared-tree-core/branch.js +12 -15
  338. package/lib/shared-tree-core/branch.js.map +1 -1
  339. package/lib/simple-tree/api/create.d.ts +1 -1
  340. package/lib/simple-tree/api/create.d.ts.map +1 -1
  341. package/lib/simple-tree/api/create.js +14 -16
  342. package/lib/simple-tree/api/create.js.map +1 -1
  343. package/lib/simple-tree/api/getJsonSchema.d.ts +3 -3
  344. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  345. package/lib/simple-tree/api/getJsonSchema.js +1 -1
  346. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  347. package/lib/simple-tree/api/getSimpleSchema.d.ts +2 -2
  348. package/lib/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
  349. package/lib/simple-tree/api/getSimpleSchema.js.map +1 -1
  350. package/lib/simple-tree/api/index.d.ts +2 -1
  351. package/lib/simple-tree/api/index.d.ts.map +1 -1
  352. package/lib/simple-tree/api/index.js +1 -0
  353. package/lib/simple-tree/api/index.js.map +1 -1
  354. package/lib/simple-tree/api/schemaFactory.d.ts +6 -6
  355. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  356. package/lib/simple-tree/api/schemaFactory.js +15 -2
  357. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  358. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
  359. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  360. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  361. package/lib/simple-tree/api/simpleSchema.d.ts +14 -10
  362. package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
  363. package/lib/simple-tree/api/simpleSchema.js.map +1 -1
  364. package/lib/simple-tree/api/tree.d.ts +12 -6
  365. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  366. package/lib/simple-tree/api/tree.js +4 -4
  367. package/lib/simple-tree/api/tree.js.map +1 -1
  368. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  369. package/lib/simple-tree/api/treeNodeApi.js +10 -8
  370. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  371. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  372. package/lib/simple-tree/api/verboseTree.js +6 -10
  373. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  374. package/{dist/feature-libraries/typed-schema → lib/simple-tree/api}/view.d.ts +4 -11
  375. package/lib/simple-tree/api/view.d.ts.map +1 -0
  376. package/lib/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
  377. package/lib/simple-tree/api/view.js.map +1 -0
  378. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
  379. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  380. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +7 -1
  381. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  382. package/lib/simple-tree/arrayNode.d.ts +147 -14
  383. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  384. package/lib/simple-tree/arrayNode.js +37 -25
  385. package/lib/simple-tree/arrayNode.js.map +1 -1
  386. package/lib/simple-tree/core/context.d.ts +55 -0
  387. package/lib/simple-tree/core/context.d.ts.map +1 -0
  388. package/lib/simple-tree/core/context.js +55 -0
  389. package/lib/simple-tree/core/context.js.map +1 -0
  390. package/lib/simple-tree/core/getOrCreateNode.d.ts +15 -0
  391. package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
  392. package/lib/simple-tree/core/getOrCreateNode.js +32 -0
  393. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -0
  394. package/lib/simple-tree/core/index.d.ts +7 -3
  395. package/lib/simple-tree/core/index.d.ts.map +1 -1
  396. package/lib/simple-tree/core/index.js +6 -2
  397. package/lib/simple-tree/core/index.js.map +1 -1
  398. package/lib/simple-tree/core/schemaCaching.d.ts +5 -13
  399. package/lib/simple-tree/core/schemaCaching.d.ts.map +1 -1
  400. package/lib/simple-tree/core/schemaCaching.js +13 -39
  401. package/lib/simple-tree/core/schemaCaching.js.map +1 -1
  402. package/lib/simple-tree/core/treeNodeKernel.d.ts +29 -7
  403. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  404. package/lib/simple-tree/core/treeNodeKernel.js +89 -54
  405. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  406. package/lib/simple-tree/core/treeNodeSchema.d.ts +24 -0
  407. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  408. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  409. package/lib/simple-tree/core/types.d.ts +0 -5
  410. package/lib/simple-tree/core/types.d.ts.map +1 -1
  411. package/lib/simple-tree/core/types.js.map +1 -1
  412. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
  413. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
  414. package/lib/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +110 -128
  415. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -0
  416. package/lib/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
  417. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -0
  418. package/lib/simple-tree/core/walkSchema.js +29 -0
  419. package/lib/simple-tree/core/walkSchema.js.map +1 -0
  420. package/lib/simple-tree/createContext.d.ts +11 -0
  421. package/lib/simple-tree/createContext.d.ts.map +1 -0
  422. package/lib/simple-tree/createContext.js +21 -0
  423. package/lib/simple-tree/createContext.js.map +1 -0
  424. package/lib/simple-tree/index.d.ts +3 -4
  425. package/lib/simple-tree/index.d.ts.map +1 -1
  426. package/lib/simple-tree/index.js +3 -4
  427. package/lib/simple-tree/index.js.map +1 -1
  428. package/lib/simple-tree/leafNodeSchema.d.ts +1 -0
  429. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  430. package/lib/simple-tree/leafNodeSchema.js +3 -4
  431. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  432. package/lib/simple-tree/mapNode.d.ts +4 -4
  433. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  434. package/lib/simple-tree/mapNode.js +12 -8
  435. package/lib/simple-tree/mapNode.js.map +1 -1
  436. package/lib/simple-tree/objectNode.d.ts +8 -8
  437. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  438. package/lib/simple-tree/objectNode.js +36 -17
  439. package/lib/simple-tree/objectNode.js.map +1 -1
  440. package/lib/simple-tree/objectNodeTypes.d.ts +7 -3
  441. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
  442. package/lib/simple-tree/objectNodeTypes.js.map +1 -1
  443. package/lib/simple-tree/proxies.d.ts +1 -2
  444. package/lib/simple-tree/proxies.d.ts.map +1 -1
  445. package/lib/simple-tree/proxies.js +7 -22
  446. package/lib/simple-tree/proxies.js.map +1 -1
  447. package/lib/simple-tree/schemaTypes.d.ts +2 -2
  448. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  449. package/lib/simple-tree/schemaTypes.js.map +1 -1
  450. package/lib/simple-tree/toFlexSchema.d.ts +6 -36
  451. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  452. package/lib/simple-tree/toFlexSchema.js +61 -142
  453. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  454. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  455. package/lib/simple-tree/toMapTree.js +4 -4
  456. package/lib/simple-tree/toMapTree.js.map +1 -1
  457. package/lib/simple-tree/treeNodeValid.d.ts +13 -5
  458. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  459. package/lib/simple-tree/treeNodeValid.js +21 -12
  460. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  461. package/lib/simple-tree/typesUnsafe.d.ts +4 -4
  462. package/lib/simple-tree/typesUnsafe.d.ts.map +1 -1
  463. package/lib/simple-tree/typesUnsafe.js.map +1 -1
  464. package/lib/simple-tree/walkFieldSchema.d.ts +11 -0
  465. package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -0
  466. package/lib/simple-tree/walkFieldSchema.js +13 -0
  467. package/lib/simple-tree/walkFieldSchema.js.map +1 -0
  468. package/lib/util/index.d.ts +1 -1
  469. package/lib/util/index.d.ts.map +1 -1
  470. package/lib/util/index.js.map +1 -1
  471. package/lib/util/typeUtils.d.ts +14 -45
  472. package/lib/util/typeUtils.d.ts.map +1 -1
  473. package/lib/util/typeUtils.js.map +1 -1
  474. package/package.json +29 -20
  475. package/src/core/schema-stored/schema.ts +17 -0
  476. package/src/core/tree/anchorSet.ts +3 -4
  477. package/src/core/tree/detachedFieldIndex.ts +14 -3
  478. package/src/core/tree/detachedFieldIndexTypes.ts +1 -1
  479. package/src/feature-libraries/editableTreeBinder.ts +2 -915
  480. package/src/feature-libraries/flex-tree/context.ts +7 -20
  481. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +2 -18
  482. package/src/feature-libraries/flex-tree/lazyEntity.ts +1 -4
  483. package/src/feature-libraries/flex-tree/lazyField.ts +22 -78
  484. package/src/feature-libraries/flex-tree/lazyNode.ts +24 -39
  485. package/src/feature-libraries/flex-tree/utilities.ts +1 -1
  486. package/src/feature-libraries/index.ts +3 -71
  487. package/src/feature-libraries/typed-schema/flexList.ts +3 -84
  488. package/src/feature-libraries/typed-schema/index.ts +1 -33
  489. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -458
  490. package/src/index.ts +6 -0
  491. package/src/internalTypes.ts +0 -1
  492. package/src/packageVersion.ts +1 -1
  493. package/src/shared-tree/checkoutFlexTreeView.ts +3 -3
  494. package/src/shared-tree/index.ts +4 -8
  495. package/src/shared-tree/schematizeTree.ts +2 -56
  496. package/src/shared-tree/schematizingTreeView.ts +34 -15
  497. package/src/shared-tree/sharedTree.ts +36 -8
  498. package/src/shared-tree/treeCheckout.ts +225 -128
  499. package/src/shared-tree-core/branch.ts +15 -26
  500. package/src/simple-tree/api/create.ts +18 -20
  501. package/src/simple-tree/api/getJsonSchema.ts +3 -3
  502. package/src/simple-tree/api/getSimpleSchema.ts +2 -2
  503. package/src/simple-tree/api/index.ts +2 -0
  504. package/src/simple-tree/api/schemaFactory.ts +41 -12
  505. package/src/simple-tree/api/schemaFactoryRecursive.ts +3 -6
  506. package/src/simple-tree/api/simpleSchema.ts +15 -10
  507. package/src/simple-tree/api/tree.ts +15 -9
  508. package/src/simple-tree/api/treeNodeApi.ts +12 -10
  509. package/src/simple-tree/api/verboseTree.ts +6 -12
  510. package/src/{feature-libraries/typed-schema → simple-tree/api}/view.ts +9 -22
  511. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +11 -2
  512. package/src/simple-tree/arrayNode.ts +202 -53
  513. package/src/simple-tree/core/context.ts +78 -0
  514. package/src/simple-tree/core/getOrCreateNode.ts +38 -0
  515. package/src/simple-tree/core/index.ts +11 -7
  516. package/src/simple-tree/core/schemaCaching.ts +13 -50
  517. package/src/simple-tree/core/treeNodeKernel.ts +117 -78
  518. package/src/simple-tree/core/treeNodeSchema.ts +35 -1
  519. package/src/simple-tree/core/types.ts +0 -5
  520. package/src/{feature-libraries/flex-map-tree/mapTreeNode.ts → simple-tree/core/unhydratedFlexTree.ts} +167 -210
  521. package/src/simple-tree/{walkSchema.ts → core/walkSchema.ts} +12 -34
  522. package/src/simple-tree/createContext.ts +24 -0
  523. package/src/simple-tree/index.ts +5 -2
  524. package/src/simple-tree/leafNodeSchema.ts +3 -9
  525. package/src/simple-tree/mapNode.ts +20 -17
  526. package/src/simple-tree/objectNode.ts +63 -38
  527. package/src/simple-tree/objectNodeTypes.ts +8 -5
  528. package/src/simple-tree/proxies.ts +8 -26
  529. package/src/simple-tree/schemaTypes.ts +2 -2
  530. package/src/simple-tree/toFlexSchema.ts +71 -204
  531. package/src/simple-tree/toMapTree.ts +5 -5
  532. package/src/simple-tree/treeNodeValid.ts +28 -22
  533. package/src/simple-tree/typesUnsafe.ts +4 -4
  534. package/src/simple-tree/walkFieldSchema.ts +19 -0
  535. package/src/util/index.ts +1 -5
  536. package/src/util/typeUtils.ts +14 -56
  537. package/dist/feature-libraries/fieldGenerator.d.ts +0 -43
  538. package/dist/feature-libraries/fieldGenerator.d.ts.map +0 -1
  539. package/dist/feature-libraries/fieldGenerator.js +0 -13
  540. package/dist/feature-libraries/fieldGenerator.js.map +0 -1
  541. package/dist/feature-libraries/flex-map-tree/index.d.ts +0 -6
  542. package/dist/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
  543. package/dist/feature-libraries/flex-map-tree/index.js +0 -14
  544. package/dist/feature-libraries/flex-map-tree/index.js.map +0 -1
  545. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
  546. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
  547. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
  548. package/dist/feature-libraries/storedToViewSchema.d.ts +0 -17
  549. package/dist/feature-libraries/storedToViewSchema.d.ts.map +0 -1
  550. package/dist/feature-libraries/storedToViewSchema.js +0 -67
  551. package/dist/feature-libraries/storedToViewSchema.js.map +0 -1
  552. package/dist/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
  553. package/dist/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
  554. package/dist/feature-libraries/typed-schema/schemaCollection.js +0 -160
  555. package/dist/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
  556. package/dist/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
  557. package/dist/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
  558. package/dist/feature-libraries/typed-schema/typeUtils.js +0 -14
  559. package/dist/feature-libraries/typed-schema/typeUtils.js.map +0 -1
  560. package/dist/feature-libraries/typed-schema/view.d.ts.map +0 -1
  561. package/dist/feature-libraries/typed-schema/view.js.map +0 -1
  562. package/dist/simple-tree/getSimpleFieldSchema.d.ts +0 -14
  563. package/dist/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
  564. package/dist/simple-tree/getSimpleFieldSchema.js +0 -29
  565. package/dist/simple-tree/getSimpleFieldSchema.js.map +0 -1
  566. package/dist/simple-tree/walkSchema.d.ts.map +0 -1
  567. package/dist/simple-tree/walkSchema.js +0 -49
  568. package/dist/simple-tree/walkSchema.js.map +0 -1
  569. package/lib/feature-libraries/fieldGenerator.d.ts +0 -43
  570. package/lib/feature-libraries/fieldGenerator.d.ts.map +0 -1
  571. package/lib/feature-libraries/fieldGenerator.js +0 -12
  572. package/lib/feature-libraries/fieldGenerator.js.map +0 -1
  573. package/lib/feature-libraries/flex-map-tree/index.d.ts +0 -6
  574. package/lib/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
  575. package/lib/feature-libraries/flex-map-tree/index.js +0 -6
  576. package/lib/feature-libraries/flex-map-tree/index.js.map +0 -1
  577. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
  578. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
  579. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
  580. package/lib/feature-libraries/storedToViewSchema.d.ts +0 -17
  581. package/lib/feature-libraries/storedToViewSchema.d.ts.map +0 -1
  582. package/lib/feature-libraries/storedToViewSchema.js +0 -62
  583. package/lib/feature-libraries/storedToViewSchema.js.map +0 -1
  584. package/lib/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
  585. package/lib/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
  586. package/lib/feature-libraries/typed-schema/schemaCollection.js +0 -153
  587. package/lib/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
  588. package/lib/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
  589. package/lib/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
  590. package/lib/feature-libraries/typed-schema/typeUtils.js +0 -10
  591. package/lib/feature-libraries/typed-schema/typeUtils.js.map +0 -1
  592. package/lib/feature-libraries/typed-schema/view.d.ts.map +0 -1
  593. package/lib/feature-libraries/typed-schema/view.js.map +0 -1
  594. package/lib/simple-tree/getSimpleFieldSchema.d.ts +0 -14
  595. package/lib/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
  596. package/lib/simple-tree/getSimpleFieldSchema.js +0 -25
  597. package/lib/simple-tree/getSimpleFieldSchema.js.map +0 -1
  598. package/lib/simple-tree/walkSchema.d.ts.map +0 -1
  599. package/lib/simple-tree/walkSchema.js +0 -43
  600. package/lib/simple-tree/walkSchema.js.map +0 -1
  601. package/src/feature-libraries/fieldGenerator.ts +0 -47
  602. package/src/feature-libraries/flex-map-tree/index.ts +0 -14
  603. package/src/feature-libraries/storedToViewSchema.ts +0 -100
  604. package/src/feature-libraries/typed-schema/schemaCollection.ts +0 -254
  605. package/src/feature-libraries/typed-schema/typeUtils.ts +0 -29
  606. package/src/simple-tree/getSimpleFieldSchema.ts +0 -36
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared-tree/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEN,iBAAiB,EAEjB,UAAU,EACV,UAAU,EAGV,uBAAuB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,kBAAkB,EAClB,YAAY,EAEZ,cAAc,GAId,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAMN,sBAAsB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,EACN,OAAO,IAAI,IAAI,EAKf,QAAQ,GACR,MAAM,cAAc,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\ttype ISharedTree,\n\tSharedTreeFactory,\n\ttype SharedTreeOptions,\n\tSharedTree,\n\tForestType,\n\ttype SharedTreeContentSnapshot,\n\ttype SharedTreeFormatOptions,\n\tSharedTreeFormatVersion,\n} from \"./sharedTree.js\";\n\nexport {\n\tcreateTreeCheckout,\n\tTreeCheckout,\n\ttype ITreeCheckout,\n\trunSynchronous,\n\ttype CheckoutEvents,\n\ttype ITransaction,\n\ttype ITreeCheckoutFork,\n} from \"./treeCheckout.js\";\n\nexport {\n\ttype SchematizeConfiguration,\n\ttype TreeContent,\n\ttype TreeStoredContent,\n\ttype InitializeAndSchematizeConfiguration,\n\ttype SchemaConfiguration,\n\tbuildTreeConfiguration,\n} from \"./schematizeTree.js\";\n\nexport { CheckoutFlexTreeView } from \"./checkoutFlexTreeView.js\";\n\nexport type { ISharedTreeEditor, ISchemaEditor } from \"./sharedTreeEditBuilder.js\";\n\nexport {\n\ttreeApi as Tree,\n\ttype TreeApi,\n\ttype TransactionConstraint,\n\ttype NodeInDocumentConstraint,\n\ttype RunTransaction,\n\trollback,\n} from \"./treeApi.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared-tree/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEN,iBAAiB,EAEjB,UAAU,EACV,SAAS,EACT,UAAU,EAGV,uBAAuB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,kBAAkB,EAClB,YAAY,EAEZ,cAAc,GAMd,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,EACN,OAAO,IAAI,IAAI,EAKf,QAAQ,GACR,MAAM,cAAc,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\ttype ISharedTree,\n\tSharedTreeFactory,\n\ttype SharedTreeOptions,\n\tSharedTree,\n\tgetBranch,\n\tForestType,\n\ttype SharedTreeContentSnapshot,\n\ttype SharedTreeFormatOptions,\n\tSharedTreeFormatVersion,\n} from \"./sharedTree.js\";\n\nexport {\n\tcreateTreeCheckout,\n\tTreeCheckout,\n\ttype ITreeCheckout,\n\trunSynchronous,\n\ttype CheckoutEvents,\n\ttype ITransaction,\n\ttype ITreeCheckoutFork,\n\ttype TreeBranch,\n\ttype TreeBranchFork,\n} from \"./treeCheckout.js\";\n\nexport { type TreeStoredContent } from \"./schematizeTree.js\";\n\nexport { CheckoutFlexTreeView } from \"./checkoutFlexTreeView.js\";\n\nexport type { ISharedTreeEditor, ISchemaEditor } from \"./sharedTreeEditBuilder.js\";\n\nexport {\n\ttreeApi as Tree,\n\ttype TreeApi,\n\ttype TransactionConstraint,\n\ttype NodeInDocumentConstraint,\n\ttype RunTransaction,\n\trollback,\n} from \"./treeApi.js\";\n"]}
@@ -3,8 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { AllowedUpdateType, type ITreeCursorSynchronous, type TreeStoredSchema } from "../core/index.js";
6
- import { type FlexFieldSchema, type FlexTreeSchema, type ViewSchema } from "../feature-libraries/index.js";
7
6
  import type { ITreeCheckout } from "./treeCheckout.js";
7
+ import type { ViewSchema } from "../simple-tree/index.js";
8
8
  /**
9
9
  * Modify `storedSchema` and invoke `setInitialTree` when it's time to set the tree content.
10
10
  *
@@ -63,25 +63,6 @@ export declare function initialize(checkout: ITreeCheckout, treeContent: TreeSto
63
63
  * @returns true iff checkout now is compatible with `viewSchema`.
64
64
  */
65
65
  export declare function ensureSchema(viewSchema: ViewSchema, allowedSchemaModifications: AllowedUpdateType, checkout: ITreeCheckout, treeContent: TreeStoredContent | undefined): boolean;
66
- /**
67
- * View Schema for a `SharedTree`.
68
- */
69
- export interface SchemaConfiguration<TRoot extends FlexFieldSchema = FlexFieldSchema> {
70
- /**
71
- * The schema which the application wants to view the tree with.
72
- */
73
- readonly schema: FlexTreeSchema<TRoot>;
74
- }
75
- /**
76
- * Content that can populate a `SharedTree`.
77
- */
78
- export interface TreeContent<TRoot extends FlexFieldSchema = FlexFieldSchema> extends SchemaConfiguration<TRoot> {
79
- /**
80
- * Default tree content to initialize the tree with iff the tree is uninitialized
81
- * (meaning it does not even have any schema set at all).
82
- */
83
- readonly initialTree: readonly ITreeCursorSynchronous[] | ITreeCursorSynchronous | undefined;
84
- }
85
66
  /**
86
67
  * Content that can populate a `SharedTree`.
87
68
  */
@@ -93,24 +74,4 @@ export interface TreeStoredContent {
93
74
  */
94
75
  readonly initialTree: readonly ITreeCursorSynchronous[] | ITreeCursorSynchronous | undefined;
95
76
  }
96
- /**
97
- * Options used to schematize a `SharedTree`.
98
- */
99
- export interface SchematizeConfiguration<TRoot extends FlexFieldSchema = FlexFieldSchema> extends SchemaConfiguration<TRoot> {
100
- /**
101
- * Controls if and how schema from existing documents can be updated to accommodate the view schema.
102
- */
103
- readonly allowedSchemaModifications: AllowedUpdateType;
104
- }
105
- /**
106
- * Options used to initialize (if needed) and schematize a `SharedTree`.
107
- */
108
- export interface InitializeAndSchematizeConfiguration<TRoot extends FlexFieldSchema = FlexFieldSchema> extends TreeContent<TRoot>, SchematizeConfiguration<TRoot> {
109
- }
110
- /**
111
- * Options used to initialize (if needed) and schematize a `SharedTree`.
112
- * @remarks
113
- * Using this builder improves type safety and error quality over just constructing the configuration as a object.
114
- */
115
- export declare function buildTreeConfiguration<T extends FlexFieldSchema>(config: InitializeAndSchematizeConfiguration<T>): InitializeAndSchematizeConfiguration<T>;
116
77
  //# sourceMappingURL=schematizeTree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schematizeTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/schematizeTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACN,iBAAiB,EAGjB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAGrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEN,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,UAAU,EAKf,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAChC,gBAAgB,EAAE;IACjB,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC5C,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CAC5C,EACD,SAAS,EAAE,gBAAgB,EAC3B,cAAc,EAAE,MAAM,IAAI,GACxB,IAAI,CA+CN;AAED,oBAAY,UAAU;IACrB;;OAEG;IACH,IAAI,IAAA;IACJ;;OAEG;IACH,UAAU,IAAA;IACV;;OAEG;IACH,gBAAgB,IAAA;IAChB;;OAEG;IACH,YAAY,IAAA;CACZ;AAED,wBAAgB,cAAc,CAC7B,UAAU,EAAE,UAAU,EACtB,0BAA0B,EAAE,iBAAiB,EAC7C,QAAQ,EAAE,aAAa,GACrB,UAAU,CA4BZ;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAG9D;AAoBD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,GAAG,IAAI,CA+BxF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC3B,UAAU,EAAE,UAAU,EACtB,0BAA0B,EAAE,iBAAiB,EAC7C,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,iBAAiB,GAAG,SAAS,GACxC,OAAO,CAiCT;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,KAAK,SAAS,eAAe,GAAG,eAAe;IACnF;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,KAAK,SAAS,eAAe,GAAG,eAAe,CAC3E,SAAQ,mBAAmB,CAAC,KAAK,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,sBAAsB,EAAE,GAAG,sBAAsB,GAAG,SAAS,CAAC;CAC7F;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAElC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,sBAAsB,EAAE,GAAG,sBAAsB,GAAG,SAAS,CAAC;CAC7F;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,KAAK,SAAS,eAAe,GAAG,eAAe,CACvF,SAAQ,mBAAmB,CAAC,KAAK,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,0BAA0B,EAAE,iBAAiB,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,oCAAoC,CACpD,KAAK,SAAS,eAAe,GAAG,eAAe,CAC9C,SAAQ,WAAW,CAAC,KAAK,CAAC,EAC1B,uBAAuB,CAAC,KAAK,CAAC;CAAG;AAEnC;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,eAAe,EAC/D,MAAM,EAAE,oCAAoC,CAAC,CAAC,CAAC,GAC7C,oCAAoC,CAAC,CAAC,CAAC,CAEzC"}
1
+ {"version":3,"file":"schematizeTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/schematizeTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACN,iBAAiB,EAGjB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAGrB,MAAM,kBAAkB,CAAC;AAU1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAChC,gBAAgB,EAAE;IACjB,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC5C,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CAC5C,EACD,SAAS,EAAE,gBAAgB,EAC3B,cAAc,EAAE,MAAM,IAAI,GACxB,IAAI,CA+CN;AAED,oBAAY,UAAU;IACrB;;OAEG;IACH,IAAI,IAAA;IACJ;;OAEG;IACH,UAAU,IAAA;IACV;;OAEG;IACH,gBAAgB,IAAA;IAChB;;OAEG;IACH,YAAY,IAAA;CACZ;AAED,wBAAgB,cAAc,CAC7B,UAAU,EAAE,UAAU,EACtB,0BAA0B,EAAE,iBAAiB,EAC7C,QAAQ,EAAE,aAAa,GACrB,UAAU,CA4BZ;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAG9D;AAoBD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,GAAG,IAAI,CA+BxF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC3B,UAAU,EAAE,UAAU,EACtB,0BAA0B,EAAE,iBAAiB,EAC7C,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,iBAAiB,GAAG,SAAS,GACxC,OAAO,CAiCT;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAElC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,sBAAsB,EAAE,GAAG,sBAAsB,GAAG,SAAS,CAAC;CAC7F"}
@@ -177,7 +177,7 @@ export function ensureSchema(viewSchema, allowedSchemaModifications, checkout, t
177
177
  return false;
178
178
  }
179
179
  case UpdateType.SchemaCompatible: {
180
- checkout.updateSchema(viewSchema.storedSchema);
180
+ checkout.updateSchema(viewSchema.schema);
181
181
  return true;
182
182
  }
183
183
  case UpdateType.Initialize: {
@@ -195,12 +195,4 @@ export function ensureSchema(viewSchema, allowedSchemaModifications, checkout, t
195
195
  }
196
196
  }
197
197
  }
198
- /**
199
- * Options used to initialize (if needed) and schematize a `SharedTree`.
200
- * @remarks
201
- * Using this builder improves type safety and error quality over just constructing the configuration as a object.
202
- */
203
- export function buildTreeConfiguration(config) {
204
- return config;
205
- }
206
198
  //# sourceMappingURL=schematizeTree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schematizeTree.js","sourceRoot":"","sources":["../../src/shared-tree/schematizeTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tAllowedUpdateType,\n\tCompatibility,\n\tCursorLocationType,\n\ttype ITreeCursorSynchronous,\n\ttype TreeStoredSchema,\n\trootFieldKey,\n\tschemaDataIsEmpty,\n} from \"../core/index.js\";\nimport {\n\tFieldKinds,\n\ttype FlexFieldSchema,\n\ttype FlexTreeSchema,\n\ttype ViewSchema,\n\tallowsRepoSuperset,\n\tcursorForMapTreeField,\n\tdefaultSchemaPolicy,\n\tmapTreeFromCursor,\n} from \"../feature-libraries/index.js\";\nimport { fail, isReadonlyArray } from \"../util/index.js\";\n\nimport type { ITreeCheckout } from \"./treeCheckout.js\";\n\n/**\n * Modify `storedSchema` and invoke `setInitialTree` when it's time to set the tree content.\n *\n * Requires `storedSchema` to be in its default/empty state.\n *\n * This is done in such a way that if the content (implicitly assumed to start empty)\n * is never out of schema.\n * This means that if the root field of the new schema requires content (like a value field),\n * a temporary intermediate schema is used so the initial empty state is not out of schema.\n *\n * Since this makes multiple changes, callers may want to wrap it in a transaction.\n */\nexport function initializeContent(\n\tschemaRepository: {\n\t\tstoredSchema: ITreeCheckout[\"storedSchema\"];\n\t\tupdateSchema: ITreeCheckout[\"updateSchema\"];\n\t},\n\tnewSchema: TreeStoredSchema,\n\tsetInitialTree: () => void,\n): void {\n\tassert(\n\t\tschemaDataIsEmpty(schemaRepository.storedSchema),\n\t\t0x743 /* cannot initialize after a schema is set */,\n\t);\n\n\tconst rootSchema = newSchema.rootFieldSchema;\n\tconst rootKind = rootSchema.kind;\n\n\t// To keep the data in schema during the update, first define a schema that tolerates the current (empty) tree as well as the final (initial) tree.\n\tlet incrementalSchemaUpdate: TreeStoredSchema;\n\tif (\n\t\trootKind === FieldKinds.sequence.identifier ||\n\t\trootKind === FieldKinds.optional.identifier\n\t) {\n\t\t// These kinds are known to tolerate empty, so use the schema as is:\n\t\tincrementalSchemaUpdate = newSchema;\n\t} else {\n\t\tassert(rootKind === FieldKinds.required.identifier, 0x5c8 /* Unexpected kind */);\n\t\t// Replace value kind with optional kind in root field schema:\n\t\tincrementalSchemaUpdate = {\n\t\t\tnodeSchema: newSchema.nodeSchema,\n\t\t\trootFieldSchema: {\n\t\t\t\tkind: FieldKinds.optional.identifier,\n\t\t\t\ttypes: rootSchema.types,\n\t\t\t},\n\t\t};\n\t}\n\n\t// TODO: fix issues with schema comparison and enable this.\n\t// assert(\n\t// \tallowsRepoSuperset(defaultSchemaPolicy, tree.storedSchema, incrementalSchemaUpdate),\n\t// \t\"Incremental Schema update should support the existing empty tree\",\n\t// );\n\tassert(\n\t\tallowsRepoSuperset(defaultSchemaPolicy, newSchema, incrementalSchemaUpdate),\n\t\t0x5c9 /* Incremental Schema during update should be a allow a superset of the final schema */,\n\t);\n\t// Update to intermediate schema\n\tschemaRepository.updateSchema(incrementalSchemaUpdate);\n\t// Insert initial tree\n\tsetInitialTree();\n\n\t// If intermediate schema is not final desired schema, update to the final schema:\n\tif (incrementalSchemaUpdate !== newSchema) {\n\t\tschemaRepository.updateSchema(newSchema);\n\t}\n}\n\nexport enum UpdateType {\n\t/**\n\t * Already compatible, no update needed.\n\t */\n\tNone,\n\t/**\n\t * Empty: needs initializing.\n\t */\n\tInitialize,\n\t/**\n\t * Schema can be upgraded leaving tree as is.\n\t */\n\tSchemaCompatible,\n\t/**\n\t * No update currently supported.\n\t */\n\tIncompatible,\n}\n\nexport function evaluateUpdate(\n\tviewSchema: ViewSchema,\n\tallowedSchemaModifications: AllowedUpdateType,\n\tcheckout: ITreeCheckout,\n): UpdateType {\n\tconst compatibility = viewSchema.checkCompatibility(checkout.storedSchema);\n\n\tif (\n\t\tcompatibility.read === Compatibility.Compatible &&\n\t\tcompatibility.write === Compatibility.Compatible\n\t) {\n\t\t// Compatible as is\n\t\treturn UpdateType.None;\n\t}\n\n\t// eslint-disable-next-line no-bitwise\n\tif (allowedSchemaModifications & AllowedUpdateType.Initialize && canInitialize(checkout)) {\n\t\treturn UpdateType.Initialize;\n\t}\n\n\tif (compatibility.read !== Compatibility.Compatible) {\n\t\t// Existing stored schema permits trees which are incompatible with the view schema, so schema can not be updated\n\t\treturn UpdateType.Incompatible;\n\t}\n\n\tassert(compatibility.write === Compatibility.Incompatible, 0x8bd /* unexpected case */);\n\tassert(compatibility.read === Compatibility.Compatible, 0x8be /* unexpected case */);\n\n\t// eslint-disable-next-line no-bitwise\n\treturn allowedSchemaModifications & AllowedUpdateType.SchemaCompatible\n\t\t? UpdateType.SchemaCompatible\n\t\t: UpdateType.Incompatible;\n}\n\nexport function canInitialize(checkout: ITreeCheckout): boolean {\n\t// Check for empty.\n\treturn checkout.forest.isEmpty && schemaDataIsEmpty(checkout.storedSchema);\n}\n\nfunction normalizeNewFieldContent(\n\tcontent: readonly ITreeCursorSynchronous[] | ITreeCursorSynchronous | undefined,\n): ITreeCursorSynchronous {\n\tif (content === undefined) {\n\t\treturn cursorForMapTreeField([]);\n\t}\n\n\tif (isReadonlyArray(content)) {\n\t\treturn cursorForMapTreeField(content.map((c) => mapTreeFromCursor(c)));\n\t}\n\n\tif (content.mode === CursorLocationType.Fields) {\n\t\treturn content;\n\t}\n\n\treturn cursorForMapTreeField([mapTreeFromCursor(content)]);\n}\n\n/**\n * Initialize a checkout with a schema and tree content.\n * This function should only be called when the tree is uninitialized (no schema or content).\n * @remarks\n *\n * If the proposed schema (from `treeContent`) is not compatible with the emptry tree, this function handles using an intermediate schema\n * which supports the empty tree as well as the final tree content.\n */\nexport function initialize(checkout: ITreeCheckout, treeContent: TreeStoredContent): void {\n\tcheckout.transaction.start();\n\ttry {\n\t\tinitializeContent(checkout, treeContent.schema, () => {\n\t\t\tconst field = { field: rootFieldKey, parent: undefined };\n\t\t\tconst content = normalizeNewFieldContent(treeContent.initialTree);\n\n\t\t\tswitch (checkout.storedSchema.rootFieldSchema.kind) {\n\t\t\t\tcase FieldKinds.optional.identifier: {\n\t\t\t\t\tconst fieldEditor = checkout.editor.optionalField(field);\n\t\t\t\t\tassert(\n\t\t\t\t\t\tcontent.getFieldLength() <= 1,\n\t\t\t\t\t\t0x7f4 /* optional field content should normalize at most one item */,\n\t\t\t\t\t);\n\t\t\t\t\tfieldEditor.set(content.getFieldLength() === 0 ? undefined : content, true);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase FieldKinds.sequence.identifier: {\n\t\t\t\t\tconst fieldEditor = checkout.editor.sequenceField(field);\n\t\t\t\t\t// TODO: should do an idempotent edit here.\n\t\t\t\t\tfieldEditor.insert(0, content);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tfail(\"unexpected root field kind during initialize\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} finally {\n\t\tcheckout.transaction.commit();\n\t}\n}\n\n/**\n * Ensure a {@link ITreeCheckout} can be used with a given {@link ViewSchema}.\n *\n * @remarks\n * It is up to the caller to ensure that compatibility is reevaluated if the checkout's stored schema is edited in the future.\n *\n * @param viewSchema - View schema that `checkout` should be made compatible with.\n * @param allowedSchemaModifications - Flags enum describing the ways this is allowed to modify `checkout`.\n * @param checkout - To be modified as needed to be compatible with `viewSchema`.\n * @param treeContent - Content to be used to initialize `checkout`'s the tree if needed and allowed.\n * @returns true iff checkout now is compatible with `viewSchema`.\n */\nexport function ensureSchema(\n\tviewSchema: ViewSchema,\n\tallowedSchemaModifications: AllowedUpdateType,\n\tcheckout: ITreeCheckout,\n\ttreeContent: TreeStoredContent | undefined,\n): boolean {\n\tlet possibleModifications = allowedSchemaModifications;\n\tif (treeContent === undefined) {\n\t\t// Clear bit for Initialize if initial tree is not provided.\n\t\t// eslint-disable-next-line no-bitwise\n\t\tpossibleModifications &= ~AllowedUpdateType.Initialize;\n\t}\n\tconst updatedNeeded = evaluateUpdate(viewSchema, possibleModifications, checkout);\n\tswitch (updatedNeeded) {\n\t\tcase UpdateType.None: {\n\t\t\treturn true;\n\t\t}\n\t\tcase UpdateType.Incompatible: {\n\t\t\treturn false;\n\t\t}\n\t\tcase UpdateType.SchemaCompatible: {\n\t\t\tcheckout.updateSchema(viewSchema.storedSchema);\n\t\t\treturn true;\n\t\t}\n\t\tcase UpdateType.Initialize: {\n\t\t\tif (treeContent === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// TODO:\n\t\t\t// When this becomes a more proper out of schema adapter, editing should be made lazy.\n\t\t\t// This will improve support for readonly documents, cross version collaboration and attribution.\n\t\t\tinitialize(checkout, treeContent);\n\t\t\treturn true;\n\t\t}\n\t\tdefault: {\n\t\t\tunreachableCase(updatedNeeded);\n\t\t}\n\t}\n}\n\n/**\n * View Schema for a `SharedTree`.\n */\nexport interface SchemaConfiguration<TRoot extends FlexFieldSchema = FlexFieldSchema> {\n\t/**\n\t * The schema which the application wants to view the tree with.\n\t */\n\treadonly schema: FlexTreeSchema<TRoot>;\n}\n\n/**\n * Content that can populate a `SharedTree`.\n */\nexport interface TreeContent<TRoot extends FlexFieldSchema = FlexFieldSchema>\n\textends SchemaConfiguration<TRoot> {\n\t/**\n\t * Default tree content to initialize the tree with iff the tree is uninitialized\n\t * (meaning it does not even have any schema set at all).\n\t */\n\treadonly initialTree: readonly ITreeCursorSynchronous[] | ITreeCursorSynchronous | undefined;\n}\n\n/**\n * Content that can populate a `SharedTree`.\n */\nexport interface TreeStoredContent {\n\treadonly schema: TreeStoredSchema;\n\n\t/**\n\t * Default tree content to initialize the tree with iff the tree is uninitialized\n\t * (meaning it does not even have any schema set at all).\n\t */\n\treadonly initialTree: readonly ITreeCursorSynchronous[] | ITreeCursorSynchronous | undefined;\n}\n\n/**\n * Options used to schematize a `SharedTree`.\n */\nexport interface SchematizeConfiguration<TRoot extends FlexFieldSchema = FlexFieldSchema>\n\textends SchemaConfiguration<TRoot> {\n\t/**\n\t * Controls if and how schema from existing documents can be updated to accommodate the view schema.\n\t */\n\treadonly allowedSchemaModifications: AllowedUpdateType;\n}\n\n/**\n * Options used to initialize (if needed) and schematize a `SharedTree`.\n */\nexport interface InitializeAndSchematizeConfiguration<\n\tTRoot extends FlexFieldSchema = FlexFieldSchema,\n> extends TreeContent<TRoot>,\n\t\tSchematizeConfiguration<TRoot> {}\n\n/**\n * Options used to initialize (if needed) and schematize a `SharedTree`.\n * @remarks\n * Using this builder improves type safety and error quality over just constructing the configuration as a object.\n */\nexport function buildTreeConfiguration<T extends FlexFieldSchema>(\n\tconfig: InitializeAndSchematizeConfiguration<T>,\n): InitializeAndSchematizeConfiguration<T> {\n\treturn config;\n}\n"]}
1
+ {"version":3,"file":"schematizeTree.js","sourceRoot":"","sources":["../../src/shared-tree/schematizeTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE9E,OAAO,EACN,iBAAiB,EACjB,aAAa,EAIb,YAAY,EACZ,iBAAiB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,UAAU,EACV,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKzD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAChC,gBAGC,EACD,SAA2B,EAC3B,cAA0B;IAE1B,MAAM,CACL,iBAAiB,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAChD,KAAK,CAAC,6CAA6C,CACnD,CAAC;IAEF,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC;IAC7C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;IAEjC,mJAAmJ;IACnJ,IAAI,uBAAyC,CAAC;IAC9C,IACC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC,UAAU;QAC3C,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC,UAAU,EAC1C,CAAC;QACF,oEAAoE;QACpE,uBAAuB,GAAG,SAAS,CAAC;IACrC,CAAC;SAAM,CAAC;QACP,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACjF,8DAA8D;QAC9D,uBAAuB,GAAG;YACzB,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,eAAe,EAAE;gBAChB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU;gBACpC,KAAK,EAAE,UAAU,CAAC,KAAK;aACvB;SACD,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,UAAU;IACV,wFAAwF;IACxF,uEAAuE;IACvE,KAAK;IACL,MAAM,CACL,kBAAkB,CAAC,mBAAmB,EAAE,SAAS,EAAE,uBAAuB,CAAC,EAC3E,KAAK,CAAC,uFAAuF,CAC7F,CAAC;IACF,gCAAgC;IAChC,gBAAgB,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;IACvD,sBAAsB;IACtB,cAAc,EAAE,CAAC;IAEjB,kFAAkF;IAClF,IAAI,uBAAuB,KAAK,SAAS,EAAE,CAAC;QAC3C,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;AACF,CAAC;AAED,MAAM,CAAN,IAAY,UAiBX;AAjBD,WAAY,UAAU;IACrB;;OAEG;IACH,2CAAI,CAAA;IACJ;;OAEG;IACH,uDAAU,CAAA;IACV;;OAEG;IACH,mEAAgB,CAAA;IAChB;;OAEG;IACH,2DAAY,CAAA;AACb,CAAC,EAjBW,UAAU,KAAV,UAAU,QAiBrB;AAED,MAAM,UAAU,cAAc,CAC7B,UAAsB,EACtB,0BAA6C,EAC7C,QAAuB;IAEvB,MAAM,aAAa,GAAG,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAE3E,IACC,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU;QAC/C,aAAa,CAAC,KAAK,KAAK,aAAa,CAAC,UAAU,EAC/C,CAAC;QACF,mBAAmB;QACnB,OAAO,UAAU,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,sCAAsC;IACtC,IAAI,0BAA0B,GAAG,iBAAiB,CAAC,UAAU,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1F,OAAO,UAAU,CAAC,UAAU,CAAC;IAC9B,CAAC;IAED,IAAI,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU,EAAE,CAAC;QACrD,iHAAiH;QACjH,OAAO,UAAU,CAAC,YAAY,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,KAAK,KAAK,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxF,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAErF,sCAAsC;IACtC,OAAO,0BAA0B,GAAG,iBAAiB,CAAC,gBAAgB;QACrE,CAAC,CAAC,UAAU,CAAC,gBAAgB;QAC7B,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAuB;IACpD,mBAAmB;IACnB,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,wBAAwB,CAChC,OAA+E;IAE/E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,sCAA8B,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,OAAO,qBAAqB,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,QAAuB,EAAE,WAA8B;IACjF,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC;QACJ,iBAAiB,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE;YACpD,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,wBAAwB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAElE,QAAQ,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;gBACpD,KAAK,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;oBACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBACzD,MAAM,CACL,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,EAC7B,KAAK,CAAC,8DAA8D,CACpE,CAAC;oBACF,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC5E,MAAM;gBACP,CAAC;gBACD,KAAK,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;oBACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBACzD,2CAA2C;oBAC3C,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBAC/B,MAAM;gBACP,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACT,IAAI,CAAC,8CAA8C,CAAC,CAAC;gBACtD,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;YAAS,CAAC;QACV,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;AACF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAC3B,UAAsB,EACtB,0BAA6C,EAC7C,QAAuB,EACvB,WAA0C;IAE1C,IAAI,qBAAqB,GAAG,0BAA0B,CAAC;IACvD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/B,4DAA4D;QAC5D,sCAAsC;QACtC,qBAAqB,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;IACxD,CAAC;IACD,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IAClF,QAAQ,aAAa,EAAE,CAAC;QACvB,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;QACb,CAAC;QACD,KAAK,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC;QACd,CAAC;QACD,KAAK,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACd,CAAC;YACD,QAAQ;YACR,sFAAsF;YACtF,iGAAiG;YACjG,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,eAAe,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;IACF,CAAC;AACF,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tAllowedUpdateType,\n\tCompatibility,\n\tCursorLocationType,\n\ttype ITreeCursorSynchronous,\n\ttype TreeStoredSchema,\n\trootFieldKey,\n\tschemaDataIsEmpty,\n} from \"../core/index.js\";\nimport {\n\tFieldKinds,\n\tallowsRepoSuperset,\n\tcursorForMapTreeField,\n\tdefaultSchemaPolicy,\n\tmapTreeFromCursor,\n} from \"../feature-libraries/index.js\";\nimport { fail, isReadonlyArray } from \"../util/index.js\";\n\nimport type { ITreeCheckout } from \"./treeCheckout.js\";\nimport type { ViewSchema } from \"../simple-tree/index.js\";\n\n/**\n * Modify `storedSchema` and invoke `setInitialTree` when it's time to set the tree content.\n *\n * Requires `storedSchema` to be in its default/empty state.\n *\n * This is done in such a way that if the content (implicitly assumed to start empty)\n * is never out of schema.\n * This means that if the root field of the new schema requires content (like a value field),\n * a temporary intermediate schema is used so the initial empty state is not out of schema.\n *\n * Since this makes multiple changes, callers may want to wrap it in a transaction.\n */\nexport function initializeContent(\n\tschemaRepository: {\n\t\tstoredSchema: ITreeCheckout[\"storedSchema\"];\n\t\tupdateSchema: ITreeCheckout[\"updateSchema\"];\n\t},\n\tnewSchema: TreeStoredSchema,\n\tsetInitialTree: () => void,\n): void {\n\tassert(\n\t\tschemaDataIsEmpty(schemaRepository.storedSchema),\n\t\t0x743 /* cannot initialize after a schema is set */,\n\t);\n\n\tconst rootSchema = newSchema.rootFieldSchema;\n\tconst rootKind = rootSchema.kind;\n\n\t// To keep the data in schema during the update, first define a schema that tolerates the current (empty) tree as well as the final (initial) tree.\n\tlet incrementalSchemaUpdate: TreeStoredSchema;\n\tif (\n\t\trootKind === FieldKinds.sequence.identifier ||\n\t\trootKind === FieldKinds.optional.identifier\n\t) {\n\t\t// These kinds are known to tolerate empty, so use the schema as is:\n\t\tincrementalSchemaUpdate = newSchema;\n\t} else {\n\t\tassert(rootKind === FieldKinds.required.identifier, 0x5c8 /* Unexpected kind */);\n\t\t// Replace value kind with optional kind in root field schema:\n\t\tincrementalSchemaUpdate = {\n\t\t\tnodeSchema: newSchema.nodeSchema,\n\t\t\trootFieldSchema: {\n\t\t\t\tkind: FieldKinds.optional.identifier,\n\t\t\t\ttypes: rootSchema.types,\n\t\t\t},\n\t\t};\n\t}\n\n\t// TODO: fix issues with schema comparison and enable this.\n\t// assert(\n\t// \tallowsRepoSuperset(defaultSchemaPolicy, tree.storedSchema, incrementalSchemaUpdate),\n\t// \t\"Incremental Schema update should support the existing empty tree\",\n\t// );\n\tassert(\n\t\tallowsRepoSuperset(defaultSchemaPolicy, newSchema, incrementalSchemaUpdate),\n\t\t0x5c9 /* Incremental Schema during update should be a allow a superset of the final schema */,\n\t);\n\t// Update to intermediate schema\n\tschemaRepository.updateSchema(incrementalSchemaUpdate);\n\t// Insert initial tree\n\tsetInitialTree();\n\n\t// If intermediate schema is not final desired schema, update to the final schema:\n\tif (incrementalSchemaUpdate !== newSchema) {\n\t\tschemaRepository.updateSchema(newSchema);\n\t}\n}\n\nexport enum UpdateType {\n\t/**\n\t * Already compatible, no update needed.\n\t */\n\tNone,\n\t/**\n\t * Empty: needs initializing.\n\t */\n\tInitialize,\n\t/**\n\t * Schema can be upgraded leaving tree as is.\n\t */\n\tSchemaCompatible,\n\t/**\n\t * No update currently supported.\n\t */\n\tIncompatible,\n}\n\nexport function evaluateUpdate(\n\tviewSchema: ViewSchema,\n\tallowedSchemaModifications: AllowedUpdateType,\n\tcheckout: ITreeCheckout,\n): UpdateType {\n\tconst compatibility = viewSchema.checkCompatibility(checkout.storedSchema);\n\n\tif (\n\t\tcompatibility.read === Compatibility.Compatible &&\n\t\tcompatibility.write === Compatibility.Compatible\n\t) {\n\t\t// Compatible as is\n\t\treturn UpdateType.None;\n\t}\n\n\t// eslint-disable-next-line no-bitwise\n\tif (allowedSchemaModifications & AllowedUpdateType.Initialize && canInitialize(checkout)) {\n\t\treturn UpdateType.Initialize;\n\t}\n\n\tif (compatibility.read !== Compatibility.Compatible) {\n\t\t// Existing stored schema permits trees which are incompatible with the view schema, so schema can not be updated\n\t\treturn UpdateType.Incompatible;\n\t}\n\n\tassert(compatibility.write === Compatibility.Incompatible, 0x8bd /* unexpected case */);\n\tassert(compatibility.read === Compatibility.Compatible, 0x8be /* unexpected case */);\n\n\t// eslint-disable-next-line no-bitwise\n\treturn allowedSchemaModifications & AllowedUpdateType.SchemaCompatible\n\t\t? UpdateType.SchemaCompatible\n\t\t: UpdateType.Incompatible;\n}\n\nexport function canInitialize(checkout: ITreeCheckout): boolean {\n\t// Check for empty.\n\treturn checkout.forest.isEmpty && schemaDataIsEmpty(checkout.storedSchema);\n}\n\nfunction normalizeNewFieldContent(\n\tcontent: readonly ITreeCursorSynchronous[] | ITreeCursorSynchronous | undefined,\n): ITreeCursorSynchronous {\n\tif (content === undefined) {\n\t\treturn cursorForMapTreeField([]);\n\t}\n\n\tif (isReadonlyArray(content)) {\n\t\treturn cursorForMapTreeField(content.map((c) => mapTreeFromCursor(c)));\n\t}\n\n\tif (content.mode === CursorLocationType.Fields) {\n\t\treturn content;\n\t}\n\n\treturn cursorForMapTreeField([mapTreeFromCursor(content)]);\n}\n\n/**\n * Initialize a checkout with a schema and tree content.\n * This function should only be called when the tree is uninitialized (no schema or content).\n * @remarks\n *\n * If the proposed schema (from `treeContent`) is not compatible with the emptry tree, this function handles using an intermediate schema\n * which supports the empty tree as well as the final tree content.\n */\nexport function initialize(checkout: ITreeCheckout, treeContent: TreeStoredContent): void {\n\tcheckout.transaction.start();\n\ttry {\n\t\tinitializeContent(checkout, treeContent.schema, () => {\n\t\t\tconst field = { field: rootFieldKey, parent: undefined };\n\t\t\tconst content = normalizeNewFieldContent(treeContent.initialTree);\n\n\t\t\tswitch (checkout.storedSchema.rootFieldSchema.kind) {\n\t\t\t\tcase FieldKinds.optional.identifier: {\n\t\t\t\t\tconst fieldEditor = checkout.editor.optionalField(field);\n\t\t\t\t\tassert(\n\t\t\t\t\t\tcontent.getFieldLength() <= 1,\n\t\t\t\t\t\t0x7f4 /* optional field content should normalize at most one item */,\n\t\t\t\t\t);\n\t\t\t\t\tfieldEditor.set(content.getFieldLength() === 0 ? undefined : content, true);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase FieldKinds.sequence.identifier: {\n\t\t\t\t\tconst fieldEditor = checkout.editor.sequenceField(field);\n\t\t\t\t\t// TODO: should do an idempotent edit here.\n\t\t\t\t\tfieldEditor.insert(0, content);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tfail(\"unexpected root field kind during initialize\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} finally {\n\t\tcheckout.transaction.commit();\n\t}\n}\n\n/**\n * Ensure a {@link ITreeCheckout} can be used with a given {@link ViewSchema}.\n *\n * @remarks\n * It is up to the caller to ensure that compatibility is reevaluated if the checkout's stored schema is edited in the future.\n *\n * @param viewSchema - View schema that `checkout` should be made compatible with.\n * @param allowedSchemaModifications - Flags enum describing the ways this is allowed to modify `checkout`.\n * @param checkout - To be modified as needed to be compatible with `viewSchema`.\n * @param treeContent - Content to be used to initialize `checkout`'s the tree if needed and allowed.\n * @returns true iff checkout now is compatible with `viewSchema`.\n */\nexport function ensureSchema(\n\tviewSchema: ViewSchema,\n\tallowedSchemaModifications: AllowedUpdateType,\n\tcheckout: ITreeCheckout,\n\ttreeContent: TreeStoredContent | undefined,\n): boolean {\n\tlet possibleModifications = allowedSchemaModifications;\n\tif (treeContent === undefined) {\n\t\t// Clear bit for Initialize if initial tree is not provided.\n\t\t// eslint-disable-next-line no-bitwise\n\t\tpossibleModifications &= ~AllowedUpdateType.Initialize;\n\t}\n\tconst updatedNeeded = evaluateUpdate(viewSchema, possibleModifications, checkout);\n\tswitch (updatedNeeded) {\n\t\tcase UpdateType.None: {\n\t\t\treturn true;\n\t\t}\n\t\tcase UpdateType.Incompatible: {\n\t\t\treturn false;\n\t\t}\n\t\tcase UpdateType.SchemaCompatible: {\n\t\t\tcheckout.updateSchema(viewSchema.schema);\n\t\t\treturn true;\n\t\t}\n\t\tcase UpdateType.Initialize: {\n\t\t\tif (treeContent === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// TODO:\n\t\t\t// When this becomes a more proper out of schema adapter, editing should be made lazy.\n\t\t\t// This will improve support for readonly documents, cross version collaboration and attribution.\n\t\t\tinitialize(checkout, treeContent);\n\t\t\treturn true;\n\t\t}\n\t\tdefault: {\n\t\t\tunreachableCase(updatedNeeded);\n\t\t}\n\t}\n}\n\n/**\n * Content that can populate a `SharedTree`.\n */\nexport interface TreeStoredContent {\n\treadonly schema: TreeStoredSchema;\n\n\t/**\n\t * Default tree content to initialize the tree with iff the tree is uninitialized\n\t * (meaning it does not even have any schema set at all).\n\t */\n\treadonly initialTree: readonly ITreeCursorSynchronous[] | ITreeCursorSynchronous | undefined;\n}\n"]}
@@ -3,10 +3,10 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { type HasListeners, type IEmitter, type Listenable } from "../events/index.js";
6
- import { type NodeKeyManager, ViewSchema, type FlexTreeSchema } from "../feature-libraries/index.js";
7
- import { type ImplicitFieldSchema, type SchemaCompatibilityStatus, type InsertableTreeFieldFromImplicitField, type TreeFieldFromImplicitField, type TreeView, type TreeViewEvents, type TreeViewConfiguration } from "../simple-tree/index.js";
6
+ import { type NodeKeyManager, type FullSchemaPolicy } from "../feature-libraries/index.js";
7
+ import { type ImplicitFieldSchema, type SchemaCompatibilityStatus, type InsertableTreeFieldFromImplicitField, type TreeFieldFromImplicitField, type TreeView, type TreeViewEvents, ViewSchema, type TreeViewConfiguration } from "../simple-tree/index.js";
8
8
  import { Breakable, type WithBreakable } from "../util/index.js";
9
- import type { ITreeCheckout } from "./treeCheckout.js";
9
+ import type { ITreeCheckout, TreeCheckout } from "./treeCheckout.js";
10
10
  import { CheckoutFlexTreeView } from "./checkoutFlexTreeView.js";
11
11
  /**
12
12
  * Creating multiple tree views from the same checkout is not supported. This slot is used to detect if one already
@@ -17,10 +17,11 @@ export declare const ViewSlot: import("../core/index.js").AnchorSlot<TreeView<Im
17
17
  * Implementation of TreeView wrapping a FlexTreeView.
18
18
  */
19
19
  export declare class SchematizingSimpleTreeView<in out TRootSchema extends ImplicitFieldSchema> implements TreeView<TRootSchema>, WithBreakable {
20
- readonly checkout: ITreeCheckout;
20
+ readonly checkout: TreeCheckout;
21
21
  readonly config: TreeViewConfiguration<TRootSchema>;
22
22
  readonly nodeKeyManager: NodeKeyManager;
23
23
  readonly breaker: Breakable;
24
+ private readonly onDispose?;
24
25
  /**
25
26
  * The view is set to undefined when this object is disposed or the view schema does not support viewing the document's stored schema.
26
27
  *
@@ -31,7 +32,7 @@ export declare class SchematizingSimpleTreeView<in out TRootSchema extends Impli
31
32
  * Undefined iff uninitialized or disposed.
32
33
  */
33
34
  private currentCompatibility;
34
- private readonly flexSchema;
35
+ private readonly schemaPolicy;
35
36
  readonly events: Listenable<TreeViewEvents> & IEmitter<TreeViewEvents> & HasListeners<TreeViewEvents>;
36
37
  private readonly viewSchema;
37
38
  private readonly unregisterCallbacks;
@@ -44,7 +45,7 @@ export declare class SchematizingSimpleTreeView<in out TRootSchema extends Impli
44
45
  */
45
46
  private midUpgrade;
46
47
  private readonly rootFieldSchema;
47
- constructor(checkout: ITreeCheckout, config: TreeViewConfiguration<TRootSchema>, nodeKeyManager: NodeKeyManager, breaker?: Breakable);
48
+ constructor(checkout: TreeCheckout, config: TreeViewConfiguration<TRootSchema>, nodeKeyManager: NodeKeyManager, breaker?: Breakable, onDispose?: (() => void) | undefined);
48
49
  get schema(): TRootSchema;
49
50
  initialize(content: InsertableTreeFieldFromImplicitField<TRootSchema>): void;
50
51
  upgradeSchema(): void;
@@ -77,5 +78,5 @@ export declare class SchematizingSimpleTreeView<in out TRootSchema extends Impli
77
78
  * Creates a view that self-disposes whenenever the stored schema changes.
78
79
  * This may only be called when the schema is already known to be compatible (typically via ensureSchema).
79
80
  */
80
- export declare function requireSchema(checkout: ITreeCheckout, viewSchema: ViewSchema, onDispose: () => void, nodeKeyManager: NodeKeyManager, flexTreeSchema: FlexTreeSchema): CheckoutFlexTreeView;
81
+ export declare function requireSchema(checkout: ITreeCheckout, viewSchema: ViewSchema, onDispose: () => void, nodeKeyManager: NodeKeyManager, schemaPolicy: FullSchemaPolicy): CheckoutFlexTreeView;
81
82
  //# sourceMappingURL=schematizingTreeView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schematizingTreeView.d.ts","sourceRoot":"","sources":["../../src/shared-tree/schematizingTreeView.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,UAAU,EAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,KAAK,cAAc,EACnB,UAAU,EAIV,KAAK,cAAc,EAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEN,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,oCAAoC,EACzC,KAAK,0BAA0B,EAC/B,KAAK,QAAQ,EACb,KAAK,cAAc,EAMnB,KAAK,qBAAqB,EAG1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAgC,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE;;;GAGG;AACH,eAAO,MAAM,QAAQ,sEAA8C,CAAC;AAEpE;;GAEG;AACH,qBACa,0BAA0B,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,SAAS,mBAAmB,CACrF,YAAW,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa;aAkC9B,QAAQ,EAAE,aAAa;aACvB,MAAM,EAAE,qBAAqB,CAAC,WAAW,CAAC;aAC1C,cAAc,EAAE,cAAc;aAC9B,OAAO,EAAE,SAAS;IAnCnC;;;;OAIG;IACH,OAAO,CAAC,IAAI,CAAmC;IAE/C;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAAwC;IACpE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,SAAgB,MAAM,EAAE,UAAU,CAAC,cAAc,CAAC,GACjD,QAAQ,CAAC,cAAc,CAAC,GACxB,YAAY,CAAC,cAAc,CAAC,CAAmB;IAEhD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IAEtD,QAAQ,UAAS;IACxB;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAc;gBAG7B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,qBAAqB,CAAC,WAAW,CAAC,EAC1C,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE,SAAuD;IA+BjF,IAAW,MAAM,IAAI,WAAW,CAE/B;IAEM,UAAU,CAAC,OAAO,EAAE,oCAAoC,CAAC,WAAW,CAAC,GAAG,IAAI;IA8B5E,aAAa,IAAI,IAAI;IA6B5B;;OAEG;IACI,OAAO,IAAI,oBAAoB;IAMtC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,YAAY;IAIpB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM;IAkFd,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,WAAW;IAQnB,IAAW,aAAa,IAAI,yBAAyB,CAKpD;IAEM,OAAO,IAAI,IAAI;IAOtB,IAAW,IAAI,IAAI,0BAA0B,CAAC,WAAW,CAAC,CASzD;IAED,IAAW,IAAI,CAAC,OAAO,EAAE,oCAAoC,CAAC,WAAW,CAAC,EASzE;CACD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,IAAI,EACrB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,GAC5B,oBAAoB,CAgBtB"}
1
+ {"version":3,"file":"schematizingTreeView.d.ts","sourceRoot":"","sources":["../../src/shared-tree/schematizingTreeView.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,UAAU,EAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,KAAK,cAAc,EAInB,KAAK,gBAAgB,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEN,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,oCAAoC,EACzC,KAAK,0BAA0B,EAC/B,KAAK,QAAQ,EACb,KAAK,cAAc,EAInB,UAAU,EAEV,KAAK,qBAAqB,EAI1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAgC,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG/F,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,QAAQ,sEAA8C,CAAC;AAEpE;;GAEG;AACH,qBACa,0BAA0B,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,SAAS,mBAAmB,CACrF,YAAW,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa;aAkC9B,QAAQ,EAAE,YAAY;aACtB,MAAM,EAAE,qBAAqB,CAAC,WAAW,CAAC;aAC1C,cAAc,EAAE,cAAc;aAC9B,OAAO,EAAE,SAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IApC5B;;;;OAIG;IACH,OAAO,CAAC,IAAI,CAAmC;IAE/C;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAAwC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,SAAgB,MAAM,EAAE,UAAU,CAAC,cAAc,CAAC,GACjD,QAAQ,CAAC,cAAc,CAAC,GACxB,YAAY,CAAC,cAAc,CAAC,CAAmB;IAEhD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IAEtD,QAAQ,UAAS;IACxB;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAc;gBAG7B,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,qBAAqB,CAAC,WAAW,CAAC,EAC1C,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE,SAAuD,EAC/D,SAAS,CAAC,SAAQ,IAAI,aAAA;IA+BxC,IAAW,MAAM,IAAI,WAAW,CAE/B;IAEM,UAAU,CAAC,OAAO,EAAE,oCAAoC,CAAC,WAAW,CAAC,GAAG,IAAI;IA8B5E,aAAa,IAAI,IAAI;IA6B5B;;OAEG;IACI,OAAO,IAAI,oBAAoB;IAMtC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,YAAY;IAIpB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM;IA2Fd,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,WAAW;IAUnB,IAAW,aAAa,IAAI,yBAAyB,CAKpD;IAEM,OAAO,IAAI,IAAI;IAQtB,IAAW,IAAI,IAAI,0BAA0B,CAAC,WAAW,CAAC,CASzD;IAED,IAAW,IAAI,CAAC,OAAO,EAAE,oCAAoC,CAAC,WAAW,CAAC,EASzE;CACD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,IAAI,EACrB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,gBAAgB,GAC5B,oBAAoB,CAiBtB"}
@@ -42,13 +42,14 @@ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, p
42
42
  };
43
43
  import { assert } from "@fluidframework/core-utils/internal";
44
44
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
45
- import { AllowedUpdateType, anchorSlot, Compatibility } from "../core/index.js";
45
+ import { AllowedUpdateType, anchorSlot, Compatibility, } from "../core/index.js";
46
46
  import { createEmitter, } from "../events/index.js";
47
- import { ViewSchema, defaultSchemaPolicy, ContextSlot, cursorForMapTreeNode, intoStoredSchema, } from "../feature-libraries/index.js";
48
- import { getTreeNodeForField, toFlexSchema, setField, normalizeFieldSchema, mapTreeFromNodeData, prepareContentForHydration, } from "../simple-tree/index.js";
47
+ import { defaultSchemaPolicy, ContextSlot, cursorForMapTreeNode, } from "../feature-libraries/index.js";
48
+ import { getTreeNodeForField, setField, normalizeFieldSchema, ViewSchema, mapTreeFromNodeData, prepareContentForHydration, toStoredSchema, } from "../simple-tree/index.js";
49
49
  import { Breakable, breakingClass, disposeSymbol } from "../util/index.js";
50
50
  import { canInitialize, ensureSchema, initialize } from "./schematizeTree.js";
51
51
  import { CheckoutFlexTreeView } from "./checkoutFlexTreeView.js";
52
+ import { HydratedContext, SimpleContextSlot } from "../simple-tree/index.js";
52
53
  /**
53
54
  * Creating multiple tree views from the same checkout is not supported. This slot is used to detect if one already
54
55
  * exists and error if creating a second.
@@ -63,11 +64,12 @@ let SchematizingSimpleTreeView = (() => {
63
64
  let _classExtraInitializers = [];
64
65
  let _classThis;
65
66
  var SchematizingSimpleTreeView = _classThis = class {
66
- constructor(checkout, config, nodeKeyManager, breaker = new Breakable("SchematizingSimpleTreeView")) {
67
+ constructor(checkout, config, nodeKeyManager, breaker = new Breakable("SchematizingSimpleTreeView"), onDispose) {
67
68
  this.checkout = checkout;
68
69
  this.config = config;
69
70
  this.nodeKeyManager = nodeKeyManager;
70
71
  this.breaker = breaker;
72
+ this.onDispose = onDispose;
71
73
  this.events = createEmitter();
72
74
  this.unregisterCallbacks = new Set();
73
75
  this.disposed = false;
@@ -87,8 +89,8 @@ let SchematizingSimpleTreeView = (() => {
87
89
  validateSchema: config.enableSchemaValidation,
88
90
  };
89
91
  this.rootFieldSchema = normalizeFieldSchema(config.schema);
90
- this.flexSchema = toFlexSchema(config.schema);
91
- this.viewSchema = new ViewSchema(policy, {}, intoStoredSchema(this.flexSchema));
92
+ this.schemaPolicy = defaultSchemaPolicy;
93
+ this.viewSchema = new ViewSchema(policy, {}, toStoredSchema(this.rootFieldSchema));
92
94
  // This must be initialized before `update` can be called.
93
95
  this.currentCompatibility = {
94
96
  canView: false,
@@ -118,7 +120,7 @@ let SchematizingSimpleTreeView = (() => {
118
120
  });
119
121
  prepareContentForHydration(mapTree, this.checkout.forest);
120
122
  initialize(this.checkout, {
121
- schema: this.viewSchema.storedSchema,
123
+ schema: this.viewSchema.schema,
122
124
  initialTree: mapTree === undefined ? undefined : cursorForMapTreeNode(mapTree),
123
125
  });
124
126
  });
@@ -135,7 +137,7 @@ let SchematizingSimpleTreeView = (() => {
135
137
  }
136
138
  this.runSchemaEdit(() => {
137
139
  const result = ensureSchema(this.viewSchema, AllowedUpdateType.SchemaCompatible, this.checkout, {
138
- schema: this.viewSchema.storedSchema,
140
+ schema: this.viewSchema.schema,
139
141
  initialTree: undefined,
140
142
  });
141
143
  assert(result, 0x8bf /* Schema upgrade should always work if canUpgrade is set. */);
@@ -211,8 +213,10 @@ let SchematizingSimpleTreeView = (() => {
211
213
  this.update();
212
214
  }
213
215
  };
214
- const view = requireSchema(this.checkout, this.viewSchema, onViewDispose, this.nodeKeyManager, this.flexSchema);
216
+ const view = requireSchema(this.checkout, this.viewSchema, onViewDispose, this.nodeKeyManager, this.schemaPolicy);
215
217
  this.view = view;
218
+ assert(!this.checkout.forest.anchors.slots.has(SimpleContextSlot), "extra simple tree context");
219
+ this.checkout.forest.anchors.slots.set(SimpleContextSlot, new HydratedContext(this.rootFieldSchema.allowedTypeSet, view.context));
216
220
  const unregister = this.checkout.storedSchema.on("afterSchemaChange", () => {
217
221
  unregister();
218
222
  this.unregisterCallbacks.delete(unregister);
@@ -222,6 +226,7 @@ let SchematizingSimpleTreeView = (() => {
222
226
  }
223
227
  else {
224
228
  this.view = undefined;
229
+ this.checkout.forest.anchors.slots.delete(SimpleContextSlot);
225
230
  const unregister = this.checkout.storedSchema.on("afterSchemaChange", () => {
226
231
  unregister();
227
232
  this.unregisterCallbacks.delete(unregister);
@@ -249,8 +254,10 @@ let SchematizingSimpleTreeView = (() => {
249
254
  if (this.view !== undefined) {
250
255
  this.view[disposeSymbol]();
251
256
  this.view = undefined;
257
+ this.checkout.forest.anchors.slots.delete(SimpleContextSlot);
252
258
  this.unregisterCallbacks.forEach((unregister) => unregister());
253
259
  }
260
+ this.checkout.forest.anchors.slots.delete(SimpleContextSlot);
254
261
  }
255
262
  get compatibility() {
256
263
  if (!this.currentCompatibility) {
@@ -263,6 +270,7 @@ let SchematizingSimpleTreeView = (() => {
263
270
  this.disposeView();
264
271
  this.checkout.forest.anchors.slots.delete(ViewSlot);
265
272
  this.currentCompatibility = undefined;
273
+ this.onDispose?.();
266
274
  }
267
275
  get root() {
268
276
  this.breaker.use();
@@ -296,7 +304,7 @@ export { SchematizingSimpleTreeView };
296
304
  * Creates a view that self-disposes whenenever the stored schema changes.
297
305
  * This may only be called when the schema is already known to be compatible (typically via ensureSchema).
298
306
  */
299
- export function requireSchema(checkout, viewSchema, onDispose, nodeKeyManager, flexTreeSchema) {
307
+ export function requireSchema(checkout, viewSchema, onDispose, nodeKeyManager, schemaPolicy) {
300
308
  const slots = checkout.forest.anchors.slots;
301
309
  assert(!slots.has(ContextSlot), 0x8c2 /* Cannot create second view from checkout */);
302
310
  {
@@ -304,7 +312,7 @@ export function requireSchema(checkout, viewSchema, onDispose, nodeKeyManager, f
304
312
  assert(compatibility.write === Compatibility.Compatible &&
305
313
  compatibility.read === Compatibility.Compatible, 0x8c3 /* requireSchema invoked with incompatible schema */);
306
314
  }
307
- const view = new CheckoutFlexTreeView(checkout, flexTreeSchema, nodeKeyManager, onDispose);
315
+ const view = new CheckoutFlexTreeView(checkout, schemaPolicy, nodeKeyManager, onDispose);
308
316
  assert(slots.has(ContextSlot), 0x90d /* Context should be tracked in slot */);
309
317
  return view;
310
318
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schematizingTreeView.js","sourceRoot":"","sources":["../../src/shared-tree/schematizingTreeView.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { AllowedUpdateType, anchorSlot, Compatibility } from \"../core/index.js\";\nimport {\n\ttype HasListeners,\n\ttype IEmitter,\n\ttype Listenable,\n\tcreateEmitter,\n} from \"../events/index.js\";\nimport {\n\ttype NodeKeyManager,\n\tViewSchema,\n\tdefaultSchemaPolicy,\n\tContextSlot,\n\tcursorForMapTreeNode,\n\ttype FlexTreeSchema,\n\tintoStoredSchema,\n} from \"../feature-libraries/index.js\";\nimport {\n\ttype FieldSchema,\n\ttype ImplicitFieldSchema,\n\ttype SchemaCompatibilityStatus,\n\ttype InsertableTreeFieldFromImplicitField,\n\ttype TreeFieldFromImplicitField,\n\ttype TreeView,\n\ttype TreeViewEvents,\n\tgetTreeNodeForField,\n\ttoFlexSchema,\n\tsetField,\n\tnormalizeFieldSchema,\n\ttype InsertableContent,\n\ttype TreeViewConfiguration,\n\tmapTreeFromNodeData,\n\tprepareContentForHydration,\n} from \"../simple-tree/index.js\";\nimport { Breakable, breakingClass, disposeSymbol, type WithBreakable } from \"../util/index.js\";\n\nimport { canInitialize, ensureSchema, initialize } from \"./schematizeTree.js\";\nimport type { ITreeCheckout } from \"./treeCheckout.js\";\nimport { CheckoutFlexTreeView } from \"./checkoutFlexTreeView.js\";\n/**\n * Creating multiple tree views from the same checkout is not supported. This slot is used to detect if one already\n * exists and error if creating a second.\n */\nexport const ViewSlot = anchorSlot<TreeView<ImplicitFieldSchema>>();\n\n/**\n * Implementation of TreeView wrapping a FlexTreeView.\n */\n@breakingClass\nexport class SchematizingSimpleTreeView<in out TRootSchema extends ImplicitFieldSchema>\n\timplements TreeView<TRootSchema>, WithBreakable\n{\n\t/**\n\t * The view is set to undefined when this object is disposed or the view schema does not support viewing the document's stored schema.\n\t *\n\t * The view schema may be incompatible with the stored schema. Use `compatibility` to check.\n\t */\n\tprivate view: CheckoutFlexTreeView | undefined;\n\n\t/**\n\t * Undefined iff uninitialized or disposed.\n\t */\n\tprivate currentCompatibility: SchemaCompatibilityStatus | undefined;\n\tprivate readonly flexSchema: FlexTreeSchema;\n\tpublic readonly events: Listenable<TreeViewEvents> &\n\t\tIEmitter<TreeViewEvents> &\n\t\tHasListeners<TreeViewEvents> = createEmitter();\n\n\tprivate readonly viewSchema: ViewSchema;\n\n\tprivate readonly unregisterCallbacks = new Set<() => void>();\n\n\tpublic disposed = false;\n\t/**\n\t * This is set to true while an edit impacting the document schema is in progress.\n\t * This allows suppressing extra rootChanged / schemaChanged events until the edit concludes.\n\t * This is useful especially for some initialization edits, since document initialization can involve transient schemas\n\t * which are implementation details and should not be exposed to the user.\n\t */\n\tprivate midUpgrade = false;\n\n\tprivate readonly rootFieldSchema: FieldSchema;\n\n\tpublic constructor(\n\t\tpublic readonly checkout: ITreeCheckout,\n\t\tpublic readonly config: TreeViewConfiguration<TRootSchema>,\n\t\tpublic readonly nodeKeyManager: NodeKeyManager,\n\t\tpublic readonly breaker: Breakable = new Breakable(\"SchematizingSimpleTreeView\"),\n\t) {\n\t\tif (checkout.forest.anchors.slots.has(ViewSlot)) {\n\t\t\tthrow new UsageError(\"Cannot create a second tree view from the same checkout\");\n\t\t}\n\t\tcheckout.forest.anchors.slots.set(ViewSlot, this);\n\n\t\tconst policy = {\n\t\t\t...defaultSchemaPolicy,\n\t\t\tvalidateSchema: config.enableSchemaValidation,\n\t\t};\n\t\tthis.rootFieldSchema = normalizeFieldSchema(config.schema);\n\t\tthis.flexSchema = toFlexSchema(config.schema);\n\n\t\tthis.viewSchema = new ViewSchema(policy, {}, intoStoredSchema(this.flexSchema));\n\t\t// This must be initialized before `update` can be called.\n\t\tthis.currentCompatibility = {\n\t\t\tcanView: false,\n\t\t\tcanUpgrade: true,\n\t\t\tisEquivalent: false,\n\t\t\tcanInitialize: true,\n\t\t};\n\t\tthis.update();\n\n\t\tthis.unregisterCallbacks.add(\n\t\t\tthis.checkout.events.on(\"commitApplied\", (data, getRevertible) =>\n\t\t\t\tthis.events.emit(\"commitApplied\", data, getRevertible),\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic get schema(): TRootSchema {\n\t\treturn this.config.schema;\n\t}\n\n\tpublic initialize(content: InsertableTreeFieldFromImplicitField<TRootSchema>): void {\n\t\tthis.ensureUndisposed();\n\n\t\tconst compatibility = this.compatibility;\n\t\tif (!compatibility.canInitialize) {\n\t\t\tthrow new UsageError(\"Tree cannot be initialized more than once.\");\n\t\t}\n\n\t\tthis.runSchemaEdit(() => {\n\t\t\tconst mapTree = mapTreeFromNodeData(\n\t\t\t\tcontent as InsertableContent,\n\t\t\t\tthis.rootFieldSchema,\n\t\t\t\tthis.nodeKeyManager,\n\t\t\t\t{\n\t\t\t\t\tschema: this.checkout.storedSchema,\n\t\t\t\t\tpolicy: {\n\t\t\t\t\t\t...defaultSchemaPolicy,\n\t\t\t\t\t\tvalidateSchema: this.config.enableSchemaValidation,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tprepareContentForHydration(mapTree, this.checkout.forest);\n\t\t\tinitialize(this.checkout, {\n\t\t\t\tschema: this.viewSchema.storedSchema,\n\t\t\t\tinitialTree: mapTree === undefined ? undefined : cursorForMapTreeNode(mapTree),\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic upgradeSchema(): void {\n\t\tthis.ensureUndisposed();\n\n\t\tconst compatibility = this.compatibility;\n\t\tif (compatibility.isEquivalent) {\n\t\t\t// No-op\n\t\t\treturn;\n\t\t}\n\n\t\tif (!compatibility.canUpgrade) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Existing stored schema can not be upgraded (see TreeView.compatibility.canUpgrade).\",\n\t\t\t);\n\t\t}\n\n\t\tthis.runSchemaEdit(() => {\n\t\t\tconst result = ensureSchema(\n\t\t\t\tthis.viewSchema,\n\t\t\t\tAllowedUpdateType.SchemaCompatible,\n\t\t\t\tthis.checkout,\n\t\t\t\t{\n\t\t\t\t\tschema: this.viewSchema.storedSchema,\n\t\t\t\t\tinitialTree: undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t\tassert(result, 0x8bf /* Schema upgrade should always work if canUpgrade is set. */);\n\t\t});\n\t}\n\n\t/**\n\t * Gets the view. Throws when disposed.\n\t */\n\tpublic getView(): CheckoutFlexTreeView {\n\t\tthis.ensureUndisposed();\n\t\tassert(this.view !== undefined, 0x8c0 /* unexpected getViewOrError */);\n\t\treturn this.view;\n\t}\n\n\tprivate ensureUndisposed(): void {\n\t\tif (this.disposed) {\n\t\t\tthis.failDisposed();\n\t\t}\n\t}\n\n\tprivate failDisposed(): never {\n\t\tthrow new UsageError(\"Accessed a disposed TreeView.\");\n\t}\n\n\t/**\n\t * Updates `this.view` and the current compatibility status.\n\t * Invoked during initialization and when `this.view` needs to be replaced due to stored schema changes.\n\t * Handles re-registering for events to call update in the future.\n\t * @remarks\n\t * This does not check if the view needs to be replaced, it replaces it unconditionally:\n\t * callers should do any checking to detect if it's really needed before calling `update`.\n\t * @privateRemarks\n\t * This implementation avoids making any edits, which prevents it from being invoked reentrantly.\n\t * If implicit initialization (or some other edit) is desired, it should be done outside of this method.\n\t */\n\tprivate update(): void {\n\t\tthis.disposeView();\n\n\t\tconst result = this.viewSchema.checkCompatibility(this.checkout.storedSchema);\n\n\t\t// TODO: AB#8121: Weaken this check to support viewing under additional circumstances.\n\t\t// In the near term, this should support viewing documents with additional optional fields in their schema on object types.\n\t\t// Longer-term (as demand arises), we could also add APIs to constructing view schema to allow for more flexibility\n\t\t// (e.g. out-of-schema content handlers could allow support for viewing docs which have extra allowed types in a particular field)\n\t\tconst canView =\n\t\t\tresult.write === Compatibility.Compatible && result.read === Compatibility.Compatible;\n\t\tconst canUpgrade = result.read === Compatibility.Compatible;\n\t\tconst isEquivalent = canView && canUpgrade;\n\t\tconst compatibility: SchemaCompatibilityStatus = {\n\t\t\tcanView,\n\t\t\tcanUpgrade,\n\t\t\tisEquivalent,\n\t\t\tcanInitialize: canInitialize(this.checkout),\n\t\t};\n\t\tlet lastRoot =\n\t\t\tthis.compatibility.canView && this.view !== undefined ? this.root : undefined;\n\t\tthis.currentCompatibility = compatibility;\n\n\t\tif (compatibility.canView) {\n\t\t\t// Trigger \"rootChanged\" if the root changes in the future.\n\t\t\t// Currently there is no good way to do this as FlexTreeField has no events for changes.\n\t\t\t// this.view.flexTree.on(????)\n\t\t\t// As a workaround for the above, trigger \"rootChanged\" in \"afterBatch\"\n\t\t\t// which isn't the correct time since we normally do events during the batch when the forest is modified, but its better than nothing.\n\t\t\t// TODO: provide a better event: this.view.flexTree.on(????)\n\t\t\tconst cleanupCheckOutEvents = this.checkout.events.on(\"afterBatch\", () => {\n\t\t\t\t// In the initialization flow, this event is raised before the correct compatibility w.r.t the new schema is calculated.\n\t\t\t\t// Accessing `this.root` in that case can throw. It's OK to ignore this because:\n\t\t\t\t// - The rootChanged event will already be raised at the end of the current upgrade\n\t\t\t\t// - It doesn't matter that `lastRoot` isn't updated in this case, because `update` will be called again before the upgrade\n\t\t\t\t// completes (at which point this callback and the `lastRoot` captured here will be out of scope anyway)\n\t\t\t\tif (!this.midUpgrade && lastRoot !== this.root) {\n\t\t\t\t\tlastRoot = this.root;\n\t\t\t\t\tthis.events.emit(\"rootChanged\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst onViewDispose = (): void => {\n\t\t\t\tcleanupCheckOutEvents();\n\t\t\t\tthis.view = undefined;\n\t\t\t\tif (!this.disposed) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst view = requireSchema(\n\t\t\t\tthis.checkout,\n\t\t\t\tthis.viewSchema,\n\t\t\t\tonViewDispose,\n\t\t\t\tthis.nodeKeyManager,\n\t\t\t\tthis.flexSchema,\n\t\t\t);\n\t\t\tthis.view = view;\n\n\t\t\tconst unregister = this.checkout.storedSchema.on(\"afterSchemaChange\", () => {\n\t\t\t\tunregister();\n\t\t\t\tthis.unregisterCallbacks.delete(unregister);\n\t\t\t\tview[disposeSymbol]();\n\t\t\t});\n\t\t\tthis.unregisterCallbacks.add(unregister);\n\t\t} else {\n\t\t\tthis.view = undefined;\n\n\t\t\tconst unregister = this.checkout.storedSchema.on(\"afterSchemaChange\", () => {\n\t\t\t\tunregister();\n\t\t\t\tthis.unregisterCallbacks.delete(unregister);\n\t\t\t\tthis.update();\n\t\t\t});\n\t\t\tthis.unregisterCallbacks.add(unregister);\n\t\t}\n\n\t\tif (!this.midUpgrade) {\n\t\t\tthis.events.emit(\"schemaChanged\");\n\t\t\tthis.events.emit(\"rootChanged\");\n\t\t}\n\t}\n\n\tprivate runSchemaEdit(edit: () => void): void {\n\t\tthis.midUpgrade = true;\n\t\ttry {\n\t\t\tedit();\n\t\t} finally {\n\t\t\tthis.midUpgrade = false;\n\t\t}\n\t\tthis.events.emit(\"schemaChanged\");\n\t\tthis.events.emit(\"rootChanged\");\n\t}\n\n\tprivate disposeView(): void {\n\t\tif (this.view !== undefined) {\n\t\t\tthis.view[disposeSymbol]();\n\t\t\tthis.view = undefined;\n\t\t\tthis.unregisterCallbacks.forEach((unregister) => unregister());\n\t\t}\n\t}\n\n\tpublic get compatibility(): SchemaCompatibilityStatus {\n\t\tif (!this.currentCompatibility) {\n\t\t\tthis.failDisposed();\n\t\t}\n\t\treturn this.currentCompatibility;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.disposeView();\n\t\tthis.checkout.forest.anchors.slots.delete(ViewSlot);\n\t\tthis.currentCompatibility = undefined;\n\t}\n\n\tpublic get root(): TreeFieldFromImplicitField<TRootSchema> {\n\t\tthis.breaker.use();\n\t\tif (!this.compatibility.canView) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.\",\n\t\t\t);\n\t\t}\n\t\tconst view = this.getView();\n\t\treturn getTreeNodeForField(view.flexTree) as TreeFieldFromImplicitField<TRootSchema>;\n\t}\n\n\tpublic set root(newRoot: InsertableTreeFieldFromImplicitField<TRootSchema>) {\n\t\tthis.breaker.use();\n\t\tif (!this.compatibility.canView) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.\",\n\t\t\t);\n\t\t}\n\t\tconst view = this.getView();\n\t\tsetField(view.context.root, this.rootFieldSchema, newRoot as InsertableContent);\n\t}\n}\n\n/**\n * Creates a view that self-disposes whenenever the stored schema changes.\n * This may only be called when the schema is already known to be compatible (typically via ensureSchema).\n */\nexport function requireSchema(\n\tcheckout: ITreeCheckout,\n\tviewSchema: ViewSchema,\n\tonDispose: () => void,\n\tnodeKeyManager: NodeKeyManager,\n\tflexTreeSchema: FlexTreeSchema,\n): CheckoutFlexTreeView {\n\tconst slots = checkout.forest.anchors.slots;\n\tassert(!slots.has(ContextSlot), 0x8c2 /* Cannot create second view from checkout */);\n\n\t{\n\t\tconst compatibility = viewSchema.checkCompatibility(checkout.storedSchema);\n\t\tassert(\n\t\t\tcompatibility.write === Compatibility.Compatible &&\n\t\t\t\tcompatibility.read === Compatibility.Compatible,\n\t\t\t0x8c3 /* requireSchema invoked with incompatible schema */,\n\t\t);\n\t}\n\n\tconst view = new CheckoutFlexTreeView(checkout, flexTreeSchema, nodeKeyManager, onDispose);\n\tassert(slots.has(ContextSlot), 0x90d /* Context should be tracked in slot */);\n\treturn view;\n}\n"]}
1
+ {"version":3,"file":"schematizingTreeView.js","sourceRoot":"","sources":["../../src/shared-tree/schematizingTreeView.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport {\n\tAllowedUpdateType,\n\tanchorSlot,\n\tCompatibility,\n\ttype SchemaPolicy,\n} from \"../core/index.js\";\nimport {\n\ttype HasListeners,\n\ttype IEmitter,\n\ttype Listenable,\n\tcreateEmitter,\n} from \"../events/index.js\";\nimport {\n\ttype NodeKeyManager,\n\tdefaultSchemaPolicy,\n\tContextSlot,\n\tcursorForMapTreeNode,\n\ttype FullSchemaPolicy,\n} from \"../feature-libraries/index.js\";\nimport {\n\ttype FieldSchema,\n\ttype ImplicitFieldSchema,\n\ttype SchemaCompatibilityStatus,\n\ttype InsertableTreeFieldFromImplicitField,\n\ttype TreeFieldFromImplicitField,\n\ttype TreeView,\n\ttype TreeViewEvents,\n\tgetTreeNodeForField,\n\tsetField,\n\tnormalizeFieldSchema,\n\tViewSchema,\n\ttype InsertableContent,\n\ttype TreeViewConfiguration,\n\tmapTreeFromNodeData,\n\tprepareContentForHydration,\n\ttoStoredSchema,\n} from \"../simple-tree/index.js\";\nimport { Breakable, breakingClass, disposeSymbol, type WithBreakable } from \"../util/index.js\";\n\nimport { canInitialize, ensureSchema, initialize } from \"./schematizeTree.js\";\nimport type { ITreeCheckout, TreeCheckout } from \"./treeCheckout.js\";\nimport { CheckoutFlexTreeView } from \"./checkoutFlexTreeView.js\";\nimport { HydratedContext, SimpleContextSlot } from \"../simple-tree/index.js\";\n/**\n * Creating multiple tree views from the same checkout is not supported. This slot is used to detect if one already\n * exists and error if creating a second.\n */\nexport const ViewSlot = anchorSlot<TreeView<ImplicitFieldSchema>>();\n\n/**\n * Implementation of TreeView wrapping a FlexTreeView.\n */\n@breakingClass\nexport class SchematizingSimpleTreeView<in out TRootSchema extends ImplicitFieldSchema>\n\timplements TreeView<TRootSchema>, WithBreakable\n{\n\t/**\n\t * The view is set to undefined when this object is disposed or the view schema does not support viewing the document's stored schema.\n\t *\n\t * The view schema may be incompatible with the stored schema. Use `compatibility` to check.\n\t */\n\tprivate view: CheckoutFlexTreeView | undefined;\n\n\t/**\n\t * Undefined iff uninitialized or disposed.\n\t */\n\tprivate currentCompatibility: SchemaCompatibilityStatus | undefined;\n\tprivate readonly schemaPolicy: SchemaPolicy;\n\tpublic readonly events: Listenable<TreeViewEvents> &\n\t\tIEmitter<TreeViewEvents> &\n\t\tHasListeners<TreeViewEvents> = createEmitter();\n\n\tprivate readonly viewSchema: ViewSchema;\n\n\tprivate readonly unregisterCallbacks = new Set<() => void>();\n\n\tpublic disposed = false;\n\t/**\n\t * This is set to true while an edit impacting the document schema is in progress.\n\t * This allows suppressing extra rootChanged / schemaChanged events until the edit concludes.\n\t * This is useful especially for some initialization edits, since document initialization can involve transient schemas\n\t * which are implementation details and should not be exposed to the user.\n\t */\n\tprivate midUpgrade = false;\n\n\tprivate readonly rootFieldSchema: FieldSchema;\n\n\tpublic constructor(\n\t\tpublic readonly checkout: TreeCheckout,\n\t\tpublic readonly config: TreeViewConfiguration<TRootSchema>,\n\t\tpublic readonly nodeKeyManager: NodeKeyManager,\n\t\tpublic readonly breaker: Breakable = new Breakable(\"SchematizingSimpleTreeView\"),\n\t\tprivate readonly onDispose?: () => void,\n\t) {\n\t\tif (checkout.forest.anchors.slots.has(ViewSlot)) {\n\t\t\tthrow new UsageError(\"Cannot create a second tree view from the same checkout\");\n\t\t}\n\t\tcheckout.forest.anchors.slots.set(ViewSlot, this);\n\n\t\tconst policy = {\n\t\t\t...defaultSchemaPolicy,\n\t\t\tvalidateSchema: config.enableSchemaValidation,\n\t\t};\n\t\tthis.rootFieldSchema = normalizeFieldSchema(config.schema);\n\t\tthis.schemaPolicy = defaultSchemaPolicy;\n\n\t\tthis.viewSchema = new ViewSchema(policy, {}, toStoredSchema(this.rootFieldSchema));\n\t\t// This must be initialized before `update` can be called.\n\t\tthis.currentCompatibility = {\n\t\t\tcanView: false,\n\t\t\tcanUpgrade: true,\n\t\t\tisEquivalent: false,\n\t\t\tcanInitialize: true,\n\t\t};\n\t\tthis.update();\n\n\t\tthis.unregisterCallbacks.add(\n\t\t\tthis.checkout.events.on(\"commitApplied\", (data, getRevertible) =>\n\t\t\t\tthis.events.emit(\"commitApplied\", data, getRevertible),\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic get schema(): TRootSchema {\n\t\treturn this.config.schema;\n\t}\n\n\tpublic initialize(content: InsertableTreeFieldFromImplicitField<TRootSchema>): void {\n\t\tthis.ensureUndisposed();\n\n\t\tconst compatibility = this.compatibility;\n\t\tif (!compatibility.canInitialize) {\n\t\t\tthrow new UsageError(\"Tree cannot be initialized more than once.\");\n\t\t}\n\n\t\tthis.runSchemaEdit(() => {\n\t\t\tconst mapTree = mapTreeFromNodeData(\n\t\t\t\tcontent as InsertableContent,\n\t\t\t\tthis.rootFieldSchema,\n\t\t\t\tthis.nodeKeyManager,\n\t\t\t\t{\n\t\t\t\t\tschema: this.checkout.storedSchema,\n\t\t\t\t\tpolicy: {\n\t\t\t\t\t\t...defaultSchemaPolicy,\n\t\t\t\t\t\tvalidateSchema: this.config.enableSchemaValidation,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tprepareContentForHydration(mapTree, this.checkout.forest);\n\t\t\tinitialize(this.checkout, {\n\t\t\t\tschema: this.viewSchema.schema,\n\t\t\t\tinitialTree: mapTree === undefined ? undefined : cursorForMapTreeNode(mapTree),\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic upgradeSchema(): void {\n\t\tthis.ensureUndisposed();\n\n\t\tconst compatibility = this.compatibility;\n\t\tif (compatibility.isEquivalent) {\n\t\t\t// No-op\n\t\t\treturn;\n\t\t}\n\n\t\tif (!compatibility.canUpgrade) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Existing stored schema can not be upgraded (see TreeView.compatibility.canUpgrade).\",\n\t\t\t);\n\t\t}\n\n\t\tthis.runSchemaEdit(() => {\n\t\t\tconst result = ensureSchema(\n\t\t\t\tthis.viewSchema,\n\t\t\t\tAllowedUpdateType.SchemaCompatible,\n\t\t\t\tthis.checkout,\n\t\t\t\t{\n\t\t\t\t\tschema: this.viewSchema.schema,\n\t\t\t\t\tinitialTree: undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t\tassert(result, 0x8bf /* Schema upgrade should always work if canUpgrade is set. */);\n\t\t});\n\t}\n\n\t/**\n\t * Gets the view. Throws when disposed.\n\t */\n\tpublic getView(): CheckoutFlexTreeView {\n\t\tthis.ensureUndisposed();\n\t\tassert(this.view !== undefined, 0x8c0 /* unexpected getViewOrError */);\n\t\treturn this.view;\n\t}\n\n\tprivate ensureUndisposed(): void {\n\t\tif (this.disposed) {\n\t\t\tthis.failDisposed();\n\t\t}\n\t}\n\n\tprivate failDisposed(): never {\n\t\tthrow new UsageError(\"Accessed a disposed TreeView.\");\n\t}\n\n\t/**\n\t * Updates `this.view` and the current compatibility status.\n\t * Invoked during initialization and when `this.view` needs to be replaced due to stored schema changes.\n\t * Handles re-registering for events to call update in the future.\n\t * @remarks\n\t * This does not check if the view needs to be replaced, it replaces it unconditionally:\n\t * callers should do any checking to detect if it's really needed before calling `update`.\n\t * @privateRemarks\n\t * This implementation avoids making any edits, which prevents it from being invoked reentrantly.\n\t * If implicit initialization (or some other edit) is desired, it should be done outside of this method.\n\t */\n\tprivate update(): void {\n\t\tthis.disposeView();\n\n\t\tconst result = this.viewSchema.checkCompatibility(this.checkout.storedSchema);\n\n\t\t// TODO: AB#8121: Weaken this check to support viewing under additional circumstances.\n\t\t// In the near term, this should support viewing documents with additional optional fields in their schema on object types.\n\t\t// Longer-term (as demand arises), we could also add APIs to constructing view schema to allow for more flexibility\n\t\t// (e.g. out-of-schema content handlers could allow support for viewing docs which have extra allowed types in a particular field)\n\t\tconst canView =\n\t\t\tresult.write === Compatibility.Compatible && result.read === Compatibility.Compatible;\n\t\tconst canUpgrade = result.read === Compatibility.Compatible;\n\t\tconst isEquivalent = canView && canUpgrade;\n\t\tconst compatibility: SchemaCompatibilityStatus = {\n\t\t\tcanView,\n\t\t\tcanUpgrade,\n\t\t\tisEquivalent,\n\t\t\tcanInitialize: canInitialize(this.checkout),\n\t\t};\n\t\tlet lastRoot =\n\t\t\tthis.compatibility.canView && this.view !== undefined ? this.root : undefined;\n\t\tthis.currentCompatibility = compatibility;\n\n\t\tif (compatibility.canView) {\n\t\t\t// Trigger \"rootChanged\" if the root changes in the future.\n\t\t\t// Currently there is no good way to do this as FlexTreeField has no events for changes.\n\t\t\t// this.view.flexTree.on(????)\n\t\t\t// As a workaround for the above, trigger \"rootChanged\" in \"afterBatch\"\n\t\t\t// which isn't the correct time since we normally do events during the batch when the forest is modified, but its better than nothing.\n\t\t\t// TODO: provide a better event: this.view.flexTree.on(????)\n\t\t\tconst cleanupCheckOutEvents = this.checkout.events.on(\"afterBatch\", () => {\n\t\t\t\t// In the initialization flow, this event is raised before the correct compatibility w.r.t the new schema is calculated.\n\t\t\t\t// Accessing `this.root` in that case can throw. It's OK to ignore this because:\n\t\t\t\t// - The rootChanged event will already be raised at the end of the current upgrade\n\t\t\t\t// - It doesn't matter that `lastRoot` isn't updated in this case, because `update` will be called again before the upgrade\n\t\t\t\t// completes (at which point this callback and the `lastRoot` captured here will be out of scope anyway)\n\t\t\t\tif (!this.midUpgrade && lastRoot !== this.root) {\n\t\t\t\t\tlastRoot = this.root;\n\t\t\t\t\tthis.events.emit(\"rootChanged\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst onViewDispose = (): void => {\n\t\t\t\tcleanupCheckOutEvents();\n\t\t\t\tthis.view = undefined;\n\t\t\t\tif (!this.disposed) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst view = requireSchema(\n\t\t\t\tthis.checkout,\n\t\t\t\tthis.viewSchema,\n\t\t\t\tonViewDispose,\n\t\t\t\tthis.nodeKeyManager,\n\t\t\t\tthis.schemaPolicy,\n\t\t\t);\n\t\t\tthis.view = view;\n\t\t\tassert(\n\t\t\t\t!this.checkout.forest.anchors.slots.has(SimpleContextSlot),\n\t\t\t\t\"extra simple tree context\",\n\t\t\t);\n\t\t\tthis.checkout.forest.anchors.slots.set(\n\t\t\t\tSimpleContextSlot,\n\t\t\t\tnew HydratedContext(this.rootFieldSchema.allowedTypeSet, view.context),\n\t\t\t);\n\n\t\t\tconst unregister = this.checkout.storedSchema.on(\"afterSchemaChange\", () => {\n\t\t\t\tunregister();\n\t\t\t\tthis.unregisterCallbacks.delete(unregister);\n\t\t\t\tview[disposeSymbol]();\n\t\t\t});\n\t\t\tthis.unregisterCallbacks.add(unregister);\n\t\t} else {\n\t\t\tthis.view = undefined;\n\t\t\tthis.checkout.forest.anchors.slots.delete(SimpleContextSlot);\n\n\t\t\tconst unregister = this.checkout.storedSchema.on(\"afterSchemaChange\", () => {\n\t\t\t\tunregister();\n\t\t\t\tthis.unregisterCallbacks.delete(unregister);\n\t\t\t\tthis.update();\n\t\t\t});\n\t\t\tthis.unregisterCallbacks.add(unregister);\n\t\t}\n\n\t\tif (!this.midUpgrade) {\n\t\t\tthis.events.emit(\"schemaChanged\");\n\t\t\tthis.events.emit(\"rootChanged\");\n\t\t}\n\t}\n\n\tprivate runSchemaEdit(edit: () => void): void {\n\t\tthis.midUpgrade = true;\n\t\ttry {\n\t\t\tedit();\n\t\t} finally {\n\t\t\tthis.midUpgrade = false;\n\t\t}\n\t\tthis.events.emit(\"schemaChanged\");\n\t\tthis.events.emit(\"rootChanged\");\n\t}\n\n\tprivate disposeView(): void {\n\t\tif (this.view !== undefined) {\n\t\t\tthis.view[disposeSymbol]();\n\t\t\tthis.view = undefined;\n\t\t\tthis.checkout.forest.anchors.slots.delete(SimpleContextSlot);\n\t\t\tthis.unregisterCallbacks.forEach((unregister) => unregister());\n\t\t}\n\t\tthis.checkout.forest.anchors.slots.delete(SimpleContextSlot);\n\t}\n\n\tpublic get compatibility(): SchemaCompatibilityStatus {\n\t\tif (!this.currentCompatibility) {\n\t\t\tthis.failDisposed();\n\t\t}\n\t\treturn this.currentCompatibility;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.disposeView();\n\t\tthis.checkout.forest.anchors.slots.delete(ViewSlot);\n\t\tthis.currentCompatibility = undefined;\n\t\tthis.onDispose?.();\n\t}\n\n\tpublic get root(): TreeFieldFromImplicitField<TRootSchema> {\n\t\tthis.breaker.use();\n\t\tif (!this.compatibility.canView) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.\",\n\t\t\t);\n\t\t}\n\t\tconst view = this.getView();\n\t\treturn getTreeNodeForField(view.flexTree) as TreeFieldFromImplicitField<TRootSchema>;\n\t}\n\n\tpublic set root(newRoot: InsertableTreeFieldFromImplicitField<TRootSchema>) {\n\t\tthis.breaker.use();\n\t\tif (!this.compatibility.canView) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Document is out of schema. Check TreeView.compatibility before accessing TreeView.root.\",\n\t\t\t);\n\t\t}\n\t\tconst view = this.getView();\n\t\tsetField(view.context.root, this.rootFieldSchema, newRoot as InsertableContent);\n\t}\n}\n\n/**\n * Creates a view that self-disposes whenenever the stored schema changes.\n * This may only be called when the schema is already known to be compatible (typically via ensureSchema).\n */\nexport function requireSchema(\n\tcheckout: ITreeCheckout,\n\tviewSchema: ViewSchema,\n\tonDispose: () => void,\n\tnodeKeyManager: NodeKeyManager,\n\tschemaPolicy: FullSchemaPolicy,\n): CheckoutFlexTreeView {\n\tconst slots = checkout.forest.anchors.slots;\n\tassert(!slots.has(ContextSlot), 0x8c2 /* Cannot create second view from checkout */);\n\n\t{\n\t\tconst compatibility = viewSchema.checkCompatibility(checkout.storedSchema);\n\t\tassert(\n\t\t\tcompatibility.write === Compatibility.Compatible &&\n\t\t\t\tcompatibility.read === Compatibility.Compatible,\n\t\t\t0x8c3 /* requireSchema invoked with incompatible schema */,\n\t\t);\n\t}\n\n\tconst view = new CheckoutFlexTreeView(checkout, schemaPolicy, nodeKeyManager, onDispose);\n\tassert(slots.has(ContextSlot), 0x90d /* Context should be tracked in slot */);\n\n\treturn view;\n}\n"]}
@@ -8,11 +8,11 @@ import { type ICodecOptions } from "../codec/index.js";
8
8
  import { type JsonableTree, type TreeStoredSchema, TreeStoredSchemaRepository } from "../core/index.js";
9
9
  import { TreeCompressionStrategy } from "../feature-libraries/index.js";
10
10
  import { SharedTreeCore } from "../shared-tree-core/index.js";
11
- import type { ITree, ImplicitFieldSchema, TreeViewConfiguration } from "../simple-tree/index.js";
11
+ import type { ITree, ImplicitFieldSchema, TreeView, TreeViewConfiguration } from "../simple-tree/index.js";
12
12
  import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
13
13
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
14
14
  import type { SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
15
- import { type TreeCheckout } from "./treeCheckout.js";
15
+ import { type TreeCheckout, type TreeBranch } from "./treeCheckout.js";
16
16
  /**
17
17
  * Copy of data from an {@link ISharedTree} at some point in time.
18
18
  * @remarks
@@ -65,6 +65,23 @@ export declare class SharedTree extends SharedTreeCore<SharedTreeEditBuilder, Sh
65
65
  viewWith<TRoot extends ImplicitFieldSchema>(config: TreeViewConfiguration<TRoot>): SchematizingSimpleTreeView<TRoot>;
66
66
  protected loadCore(services: IChannelStorageService): Promise<void>;
67
67
  }
68
+ /**
69
+ * Get a {@link TreeBranch} from a {@link ITree}.
70
+ * @remarks The branch can be used for "version control"-style coordination of edits on the tree.
71
+ * @privateRemarks This function will be removed if/when the branching API becomes public,
72
+ * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.
73
+ * @alpha
74
+ */
75
+ export declare function getBranch(tree: ITree): TreeBranch;
76
+ /**
77
+ * Get a {@link TreeBranch} from a {@link TreeView}.
78
+ * @remarks The branch can be used for "version control"-style coordination of edits on the tree.
79
+ * Branches are currently an unstable "alpha" API and are subject to change in the future.
80
+ * @privateRemarks This function will be removed if/when the branching API becomes public,
81
+ * but it (or something like it) is necessary in the meantime to prevent the alpha types from being exposed as public.
82
+ * @alpha
83
+ */
84
+ export declare function getBranch(view: TreeView<ImplicitFieldSchema>): TreeBranch;
68
85
  /**
69
86
  * Format versions supported by SharedTree.
70
87
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sharedTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sharedTree.d.ts","sourceRoot":"","sources":["../../src/shared-tree/sharedTree.ts"],"names":[],"mappings":"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"}
@@ -45,12 +45,12 @@ import { UsageError } from "@fluidframework/telemetry-utils/internal";
45
45
  import { noopValidator } from "../codec/index.js";
46
46
  import { RevisionTagCodec, TreeStoredSchemaRepository, makeDetachedFieldIndex, moveToDetachedField, } from "../core/index.js";
47
47
  import { createEmitter, } from "../events/index.js";
48
- import { DetachedFieldIndexSummarizer, ForestSummarizer, SchemaSummarizer, TreeCompressionStrategy, buildChunkedForest, buildForest, createNodeKeyManager, defaultSchemaPolicy, jsonableTreeFromFieldCursor, makeFieldBatchCodec, makeMitigatedChangeFamily, makeTreeChunker, } from "../feature-libraries/index.js";
48
+ import { DetachedFieldIndexSummarizer, ForestSummarizer, SchemaSummarizer, TreeCompressionStrategy, buildChunkedForest, buildForest, defaultSchemaPolicy, jsonableTreeFromFieldCursor, makeFieldBatchCodec, makeMitigatedChangeFamily, makeTreeChunker, } from "../feature-libraries/index.js";
49
49
  import { DefaultResubmitMachine, SharedTreeCore, } from "../shared-tree-core/index.js";
50
50
  import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
51
51
  import { SharedTreeReadonlyChangeEnricher } from "./sharedTreeChangeEnricher.js";
52
52
  import { SharedTreeChangeFamily } from "./sharedTreeChangeFamily.js";
53
- import { createTreeCheckout } from "./treeCheckout.js";
53
+ import { createTreeCheckout, } from "./treeCheckout.js";
54
54
  import { breakingClass, throwIfBroken } from "../util/index.js";
55
55
  const formatVersionToTopLevelCodecVersions = new Map([
56
56
  [
@@ -155,6 +155,7 @@ let SharedTree = (() => {
155
155
  removedRoots,
156
156
  chunkCompressionStrategy: options.treeEncodeType,
157
157
  logger: this.logger,
158
+ breaker: this.breaker,
158
159
  });
159
160
  }
160
161
  contentSnapshot() {
@@ -172,7 +173,7 @@ let SharedTree = (() => {
172
173
  }
173
174
  }
174
175
  viewWith(config) {
175
- return new SchematizingSimpleTreeView(this.checkout, config, createNodeKeyManager(this.runtime.idCompressor), this.breaker);
176
+ return this.checkout.viewWith(config);
176
177
  }
177
178
  async loadCore(services) {
178
179
  await super.loadCore(services);
@@ -193,6 +194,12 @@ let SharedTree = (() => {
193
194
  return SharedTree = _classThis;
194
195
  })();
195
196
  export { SharedTree };
197
+ export function getBranch(treeOrView) {
198
+ assert(treeOrView instanceof SharedTree || treeOrView instanceof SchematizingSimpleTreeView, "Unsupported implementation");
199
+ const checkout = treeOrView.checkout;
200
+ // This cast is safe so long as TreeCheckout supports all the operations on the branch interface.
201
+ return checkout;
202
+ }
196
203
  /**
197
204
  * Format versions supported by SharedTree.
198
205
  *